From 4235c5a0c249b0632c094077755b7b25b186dad8 Mon Sep 17 00:00:00 2001 From: Carmine Date: Tue, 3 Apr 2018 14:27:15 +0200 Subject: [PATCH 001/158] BoundsMaterialTypes: Read colours from materialfx.dat --- CodeWalker.Core/GameFiles/Resources/Bounds.cs | 69 +++++++++++++------ Rendering/Renderable.cs | 2 +- 2 files changed, 49 insertions(+), 22 deletions(-) diff --git a/CodeWalker.Core/GameFiles/Resources/Bounds.cs b/CodeWalker.Core/GameFiles/Resources/Bounds.cs index 658e823..705dad5 100644 --- a/CodeWalker.Core/GameFiles/Resources/Bounds.cs +++ b/CodeWalker.Core/GameFiles/Resources/Bounds.cs @@ -1283,7 +1283,7 @@ namespace CodeWalker.GameFiles public string HeatsTyre { get; set; } public string Material { get; set; } - public Color4 Colour { get; set; } + public Color Colour { get; set; } public override string ToString() { @@ -1293,14 +1293,19 @@ namespace CodeWalker.GameFiles public static class BoundsMaterialTypes { - private static Dictionary ColourDict; + private static Dictionary ColourDict; private static List Materials; public static void Init(GameFileCache gameFileCache) { var rpfman = gameFileCache.RpfMan; - InitColours(); + var dic = new Dictionary(); + string filename2 = "common.rpf\\data\\effects\\materialfx.dat"; + string txt2 = rpfman.GetFileUTF8Text(filename2); + AddMaterialfxDat(txt2, dic); + + ColourDict = dic; var list = new List(); string filename = "common.rpf\\data\\materials\\materials.dat"; @@ -1314,25 +1319,47 @@ namespace CodeWalker.GameFiles Materials = list; } - private static void InitColours() + //Only gets the colors + private static void AddMaterialfxDat(string txt, Dictionary dic) { - var dict = new Dictionary(); - string txt = File.ReadAllText("Materials.txt"); - string[] lines = txt.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries); - for (int i = 0; i < lines.Length; i++) + dic.Clear(); + if (txt == null) return; + + string[] lines = txt.Split('\n'); + string startLine = "MTLFX_TABLE_START"; + string endLine = "MTLFX_TABLE_END"; + + for (int i = 1; i < lines.Length; i++) { var line = lines[i]; - if (line.Length < 10) continue; + if (line[0] == '#') continue; + if (line.StartsWith(startLine)) continue; + if (line.StartsWith(endLine)) break; + string[] parts = line.Split(new[] { '\t', ' ' }, StringSplitOptions.RemoveEmptyEntries); - if (parts.Length != 2) continue; - string name = parts[0].Trim(); - string cstr = parts[1].Trim(); - uint cval = Convert.ToUInt32(cstr, 16); - Color4 c = new Color4(cval); - dict[name] = c; + + if (parts.Length < 5) continue; // FXGroup R G B ... + + int cp = 0; + Color c = new Color(); + c.A = 0xFF; + string fxgroup = string.Empty; + for (int p = 0; p < parts.Length; p++) + { + string part = parts[p].Trim(); + if (string.IsNullOrWhiteSpace(part)) continue; + switch (cp) + { + case 0: fxgroup = part; break; + case 1: c.R = byte.Parse(part); break; + case 2: c.G = byte.Parse(part); break; + case 3: c.B = byte.Parse(part); break; + } + cp++; + } + dic.Add(fxgroup, c); } - ColourDict = dict; } private static void AddMaterialsDat(string txt, List list) @@ -1384,14 +1411,14 @@ namespace CodeWalker.GameFiles if (cp != 23) { } - Color4 c; - if ((ColourDict != null) && (ColourDict.TryGetValue(d.Name, out c))) + Color c; + if ((ColourDict != null) && (ColourDict.TryGetValue(d.FXGroup, out c))) { d.Colour = c; } else { - d.Colour = new Color4(0xFFCCCCCC); + d.Colour = new Color(0xFFCCCCCC); } @@ -1423,10 +1450,10 @@ namespace CodeWalker.GameFiles return m.Name; } - public static Color4 GetMaterialColour(BoundsMaterialType type) + public static Color GetMaterialColour(BoundsMaterialType type) { var m = GetMaterial(type); - if (m == null) return new Color4(0xFFCCCCCC); + if (m == null) return new Color(0xFFCCCCCC); return m.Colour; } } diff --git a/Rendering/Renderable.cs b/Rendering/Renderable.cs index 1e29636..b8c3c6d 100644 --- a/Rendering/Renderable.cs +++ b/Rendering/Renderable.cs @@ -1406,7 +1406,7 @@ namespace CodeWalker.Rendering if (poly == null) continue; byte matind = ((bgeom.PolygonMaterialIndices != null) && (i < bgeom.PolygonMaterialIndices.Length)) ? bgeom.PolygonMaterialIndices[i] : (byte)0; BoundMaterial_s mat = ((bgeom.Materials != null) && (matind < bgeom.Materials.Length)) ? bgeom.Materials[matind] : new BoundMaterial_s(); - Color4 color = BoundsMaterialTypes.GetMaterialColour(mat.Type); + Color color = BoundsMaterialTypes.GetMaterialColour(mat.Type); Vector3 p1, p2, p3, p4, a1, n1;//, n2, n3, p5, p7, p8; Vector3 norm = Vector3.Zero; uint colour = (uint)color.ToRgba(); From d7fce98f75752a956f757e96c2c8c2a7539a4dc6 Mon Sep 17 00:00:00 2001 From: PNWParksFan Date: Mon, 23 Apr 2018 01:18:50 -0700 Subject: [PATCH 002/158] Added sanity check to saving path node files --- Project/ProjectForm.cs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Project/ProjectForm.cs b/Project/ProjectForm.cs index e88895a..24d7e59 100644 --- a/Project/ProjectForm.cs +++ b/Project/ProjectForm.cs @@ -1871,6 +1871,17 @@ namespace CodeWalker.Project { if ((CurrentYndFile == null) && (CurrentPathNode != null)) CurrentYndFile = CurrentPathNode.Ynd; if (CurrentYndFile == null) return; + + // Check that vehicle nodes and ped nodes add up to total nodes + if(CurrentYndFile.NodeDictionary != null && (CurrentYndFile.NodeDictionary.NodesCountPed + CurrentYndFile.NodeDictionary.NodesCountVehicle != CurrentYndFile.NodeDictionary.NodesCount)) + { + var result = MessageBox.Show($"YND Area {CurrentYndFile.AreaID}: The total number of nodes ({CurrentYndFile.NodeDictionary.NodesCount}) does not match the total number of ped ({CurrentYndFile.NodeDictionary.NodesCountPed}) and vehicle ({CurrentYndFile.NodeDictionary.NodesCountVehicle}) nodes. You should manually adjust the number of nodes on the YND screen.\n\nDo you want to continue saving the YND file? Some of your nodes may not work in game.", $"Node count mismatch in Area {CurrentYndFile.AreaID}", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2); + if(result == DialogResult.Cancel) + { + return; + } + } + string yndname = CurrentYndFile.Name; string filepath = CurrentYndFile.FilePath; if (string.IsNullOrEmpty(filepath)) From 945bf410cc6194055ae100936686564a16dfb837 Mon Sep 17 00:00:00 2001 From: dexyfex Date: Tue, 1 May 2018 13:20:39 +1000 Subject: [PATCH 003/158] Staging random bug fixes --- .../GameFiles/MetaTypes/MetaNames.cs | 17 +++- CodeWalker.Core/GameFiles/MetaTypes/Pso.cs | 89 +++++++++++++++++++ .../GameFiles/MetaTypes/XmlMeta.cs | 3 + CodeWalker.Core/GameFiles/RpfFile.cs | 1 + CodeWalker.Core/World/Space.cs | 14 +-- ExploreForm.cs | 5 ++ 6 files changed, 121 insertions(+), 8 deletions(-) diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs index 73a63b5..f97d892 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs @@ -538,6 +538,7 @@ namespace CodeWalker.GameFiles CExtensionDefSpawnPointOverride = 2716862120, CExtensionDefWindDisturbance = 569228403, CFiringPatternInfo = 4139644871, + CFiringPatternInfoManager = 3698419088, CGrabHelper__Tunables = 1898505781, Chances = 3434267272, changeSetName = 3618800523, @@ -1605,6 +1606,7 @@ namespace CodeWalker.GameFiles VEHICLE_LAYOUTS_FILE = 2004032454, VEHICLE_METADATA_FILE = 4125139733, VEHICLE_POPULATION_FILE = 4010054647, + VEHICLE_RESPONSE_DEFAULT = 3986150789, VEHICLE_RESPONSE_ARMY_BASE = 317362887, VEHICLE_RESPONSE_COUNTRYSIDE = 2467847847, VEHICLE_SHOP_DLC_FILE = 3203173146, @@ -1621,6 +1623,13 @@ namespace CodeWalker.GameFiles VFXINTERIORINFO_FILE = 354822867, VFXPEDINFO_FILE = 962370952, VFXREGIONINFO_FILE = 3633596549, + vfxregioninfo_default = 526963733, + vfxregioninfo_desert = 1202232026, + vfxregioninfo_beach = 4239901007, + vfxregioninfo_slum = 4267832995, + vfxregioninfo_woodland = 1397181648, + vfxregioninfo_mountain = 3282595980, + vfxregioninfo_countryside = 2691334223, vfxTagHashName = 1944993828, VFXVEHICLEINFO_FILE = 1918258814, vfxVehicleInfos = 1829968483, @@ -3528,9 +3537,15 @@ namespace CodeWalker.GameFiles spName = 4254542050, - //from rubidium + //from rubidium / dav90 PSO XML / zonebind mpName = 2031203854, zoneName = 257000, + vfxRegion = 3384955624, + vehDirtMin = 1831590592, + vehDirtMax = 625824556, + vehDirtGrowScale = 2919812941, + pedDirtMin = 1861946207, + pedDirtMax = 3150688023, diff --git a/CodeWalker.Core/GameFiles/MetaTypes/Pso.cs b/CodeWalker.Core/GameFiles/MetaTypes/Pso.cs index 821b323..d35c189 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/Pso.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/Pso.cs @@ -23,6 +23,95 @@ //shamelessly stolen and mangled + + + + +/* + +Regarding saving PSO files: + +[for checksum - use whole file] +Brick - Today +uint32_t joaat_checksum(const void* memory, const size_t length) +{ + uint32_t hash = 0x3FAC7125; + + for (size_t i = 0; i < length; ++i) + { + hash += static_cast(memory)[i]; + hash += hash << 10; + hash ^= hash >> 6; + } + + hash += hash << 3; + hash ^= hash >> 11; + hash += hash << 15; + + return hash; +} + + +[before doing checksum for file:] + v12->Checksum = 0; + v12->FileSize = 0; + v12->Magic = 'SKHC'; + v12->Size = 0x14000000; + v22 = v12; + LOBYTE(v12->Platform) = platformChar[0]; + + + + + + + +Brick - Today +This is a table i made a while ago for the pso types btw +| Index | Type | Size | Align | Name | Serialization +| 0 | Simple | 1 | 1 | bool | +| 1 | Simple | 1 | 1 | s8 | +| 2 | Simple | 1 | 1 | u8 | +| 3 | Simple | 2 | 2 | s16 | +| 4 | Simple | 2 | 2 | u16 | +| 5 | Simple | 4 | 4 | s32 | +| 6 | Simple | 4 | 4 | u32 | +| 7 | Simple | 4 | 4 | f32 | +| 8 | Vector | 8 | 4 | vec2 | +| 9 | Vector | 16 | 16 | vec3 | +| 10 | Vector | 16 | 16 | vec4 | +| 11 | String | 0 | 0 | string | +| 12 | Struct | 0 | 0 | struct | +| 13 | Array | 0 | 0 | array | +| 14 | Enum | 0 | 0 | enum | +| 15 | Bitset | 0 | 0 | bitset | +| 16 | Map | 0 | 0 | map | +| 17 | Matrix | 64 | 16 | matrix43 | shuffled +| 18 | Matrix | 64 | 16 | matrix44 | shuffled +| 19 | Vector | 16 | 16 | vec4 | x, y, x, x +| 20 | Vector | 16 | 16 | vec4 | x, y, z, x +| 21 | Vector | 16 | 16 | vec4 | x, y, z, w +| 22 | Matrix | 48 | 16 | matrix34 | +| 23 | Matrix | 64 | 16 | matrix43 | +| 24 | Matrix | 64 | 16 | matrix44 | +| 25 | Simple | 16 | 16 | f32_vec4 | fill all with f32 +| 26 | Simple | 16 | 16 | bool_int4 | fill all with 0x00000000 or 0xFFFFFFFF depending on bool +| 27 | Vector | 16 | 16 | bool4_int4 | fill each with 0x00000000 or 0xFFFFFFFF depending on bools +| 28 | Simple | 8 | 8 | s32_i64 | sign extended s32 +| 29 | Simple | 8 | 8 | s32_u64 | sign extended s32 +| 30 | Simple | 2 | 2 | f16 | f64 converted to f16 +| 31 | Simple | 8 | 8 | s64 | +| 32 | Simple | 8 | 8 | u64 | +| 33 | Simple | 8 | 8 | f64 | + + + + */ + + + + + using System; using System.Collections.Generic; using System.ComponentModel; diff --git a/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs b/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs index 18da11c..eb266b9 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs @@ -687,6 +687,9 @@ namespace CodeWalker.GameFiles private static int GetEnumInt(MetaName type, string enumString) { + + //BUG: needs to handle multiple flags!!! + var enumName = (MetaName)(uint)GetHash(enumString); var infos = MetaTypes.GetEnumInfo(type); diff --git a/CodeWalker.Core/GameFiles/RpfFile.cs b/CodeWalker.Core/GameFiles/RpfFile.cs index f4c1e21..0ab4f45 100644 --- a/CodeWalker.Core/GameFiles/RpfFile.cs +++ b/CodeWalker.Core/GameFiles/RpfFile.cs @@ -626,6 +626,7 @@ namespace CodeWalker.GameFiles RpfFileEntry entry = CreateResourceFileEntry(ref data, 0); if ((data != null) && (entry != null)) { + data = ResourceBuilder.Decompress(data); file = new T(); file.Load(data, entry); } diff --git a/CodeWalker.Core/World/Space.cs b/CodeWalker.Core/World/Space.cs index b1f962d..1505c0a 100644 --- a/CodeWalker.Core/World/Space.cs +++ b/CodeWalker.Core/World/Space.cs @@ -420,13 +420,6 @@ namespace CodeWalker.World { AddRpfYnds(rpffile, yndentries); } - foreach (var dlcrpf in GameFileCache.DlcActiveRpfs) //load nodes from current dlc rpfs - { - foreach (var rpffile in dlcrpf.Children) - { - AddRpfYnds(rpffile, yndentries); - } - } var updrpf = rpfman.FindRpfFile("update\\update.rpf"); //load nodes from patch area... if (updrpf != null) { @@ -435,6 +428,13 @@ namespace CodeWalker.World AddRpfYnds(rpffile, yndentries); } } + foreach (var dlcrpf in GameFileCache.DlcActiveRpfs) //load nodes from current dlc rpfs + { + foreach (var rpffile in dlcrpf.Children) + { + AddRpfYnds(rpffile, yndentries); + } + } Vector3 corner = new Vector3(-8192, -8192, -2048); diff --git a/ExploreForm.cs b/ExploreForm.cs index 48a31be..352e3b9 100644 --- a/ExploreForm.cs +++ b/ExploreForm.cs @@ -2201,7 +2201,9 @@ namespace CodeWalker var fpaths = OpenFileDialog.FileNames; foreach (var fpath in fpaths) { +#if !DEBUG try +#endif { if (!File.Exists(fpath)) { @@ -2254,10 +2256,13 @@ namespace CodeWalker RpfFile.CreateFile(parentrpffldr, fname, data); } +#if !DEBUG catch (Exception ex) { MessageBox.Show(ex.Message, "Unable to import file"); } +#endif + } CurrentFolder.ListItems = null; From 6ae802a910c8cc02e1dbfd13660d0b18d055154b Mon Sep 17 00:00:00 2001 From: dexyfex Date: Tue, 1 May 2018 15:03:35 +1000 Subject: [PATCH 004/158] Fixed XmlMeta and MetaXML flags/hash conversion bugs. --- .../GameFiles/MetaTypes/MetaXml.cs | 7 +- .../GameFiles/MetaTypes/XmlMeta.cs | 148 ++++++++++++------ 2 files changed, 105 insertions(+), 50 deletions(-) diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs index 0c7966e..18613a1 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs @@ -1646,7 +1646,12 @@ namespace CodeWalker.GameFiles public static string FormatHash(MetaHash h) //for use with WriteItemArray { - return h.ToString(); + var str = JenkIndex.TryGetString(h); + if (!string.IsNullOrEmpty(str)) return str; + str = GlobalText.TryGetString(h); + if (!string.IsNullOrEmpty(str)) return str; + return HashString(h);// "hash_" + h.Hex; + //return h.ToString(); } public static string FormatVector2(Vector2 v) //for use with WriteItemArray { diff --git a/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs b/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs index eb266b9..f09b353 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.Text.RegularExpressions; using System.Xml; using SharpDX; @@ -182,7 +183,7 @@ namespace CodeWalker.GameFiles mb.AddEnumInfo(_infos.EnumNameHash); - int val = GetEnumInt(entry.ReferenceKey, cnode.InnerText); + int val = GetEnumInt(entry.ReferenceKey, cnode.InnerText, entry.DataType); Write(val, data, entry.DataOffset); break; } @@ -193,7 +194,7 @@ namespace CodeWalker.GameFiles mb.AddEnumInfo(_infos.EnumNameHash); - int val = GetEnumInt(entry.ReferenceKey, cnode.InnerText); + int val = GetEnumInt(entry.ReferenceKey, cnode.InnerText, entry.DataType); Write((short)val, data, entry.DataOffset); break; } @@ -296,11 +297,16 @@ namespace CodeWalker.GameFiles private static void GetParsedArrayOfBytes(XmlNode node, byte[] data, MetaStructureEntryInfo_s entry, MetaStructureEntryInfo_s arrEntry) { int offset = entry.DataOffset; - string[] split; + + var ns = NumberStyles.Any; + var ic = CultureInfo.InvariantCulture; + var sa = new[] { ' ' }; + var so = StringSplitOptions.RemoveEmptyEntries; + var split = node.InnerText.Trim().Split(sa, so); //split = Split(node.InnerText, 2); to read as unsplitted HEX switch (arrEntry.DataType) { - default: + default: //expecting hex string. split = Split(node.InnerText, 2); for (int j = 0; j < split.Length; j++) { @@ -309,67 +315,81 @@ namespace CodeWalker.GameFiles offset += sizeof(byte); } break; - case MetaStructureEntryDataType.SignedByte: - split = node.InnerText.Split(); //split = Split(node.InnerText, 2); to read as unsplitted HEX + case MetaStructureEntryDataType.SignedByte: //expecting space-separated array. for (int j = 0; j < split.Length; j++) { - sbyte val = Convert.ToSByte(split[j], 10); - data[offset] = (byte)val; - offset += sizeof(sbyte); + sbyte val;// = Convert.ToSByte(split[j], 10); + if (sbyte.TryParse(split[j].Trim(), ns, ic, out val)) + { + data[offset] = (byte)val; + offset += sizeof(sbyte); + } } break; - case MetaStructureEntryDataType.UnsignedByte: - split = node.InnerText.Split(); + case MetaStructureEntryDataType.UnsignedByte: //expecting space-separated array. for (int j = 0; j < split.Length; j++) { - byte val = Convert.ToByte(split[j], 10); - data[offset] = val; - offset += sizeof(byte); + byte val;// = Convert.ToByte(split[j], 10); + if (byte.TryParse(split[j].Trim(), ns, ic, out val)) + { + data[offset] = val; + offset += sizeof(byte); + } } break; - case MetaStructureEntryDataType.SignedShort: - split = node.InnerText.Split(); + case MetaStructureEntryDataType.SignedShort: //expecting space-separated array. for (int j = 0; j < split.Length; j++) { - short val = Convert.ToInt16(split[j], 10); - Write(val, data, offset); - offset += sizeof(short); + short val;// = Convert.ToInt16(split[j], 10); + if (short.TryParse(split[j].Trim(), ns, ic, out val)) + { + Write(val, data, offset); + offset += sizeof(short); + } } break; - case MetaStructureEntryDataType.UnsignedShort: - split = node.InnerText.Split(); + case MetaStructureEntryDataType.UnsignedShort: //expecting space-separated array. for (int j = 0; j < split.Length; j++) { - ushort val = Convert.ToUInt16(split[j], 10); - Write(val, data, offset); - offset += sizeof(ushort); + ushort val;// = Convert.ToUInt16(split[j], 10); + if (ushort.TryParse(split[j].Trim(), ns, ic, out val)) + { + Write(val, data, offset); + offset += sizeof(ushort); + } } break; - case MetaStructureEntryDataType.SignedInt: - split = node.InnerText.Split(); + case MetaStructureEntryDataType.SignedInt: //expecting space-separated array. for (int j = 0; j < split.Length; j++) { - int val = Convert.ToInt32(split[j], 10); - Write(val, data, offset); - offset += sizeof(int); + int val;// = Convert.ToInt32(split[j], 10); + if (int.TryParse(split[j].Trim(), ns, ic, out val)) + { + Write(val, data, offset); + offset += sizeof(int); + } } break; - case MetaStructureEntryDataType.UnsignedInt: - split = node.InnerText.Split(); + case MetaStructureEntryDataType.UnsignedInt: //expecting space-separated array. for (int j = 0; j < split.Length; j++) { - uint val = Convert.ToUInt32(split[j], 10); - Write(val, data, offset); - offset += sizeof(uint); + uint val;// = Convert.ToUInt32(split[j], 10); + if (uint.TryParse(split[j].Trim(), ns, ic, out val)) + { + Write(val, data, offset); + offset += sizeof(uint); + } } break; - case MetaStructureEntryDataType.Float: - split = node.InnerText.Split(); + case MetaStructureEntryDataType.Float: //expecting space-separated array. for (int j = 0; j < split.Length; j++) { - float val = FloatUtil.Parse(split[j]); - Write(val, data, offset); - offset += sizeof(float); + float val;// = FloatUtil.Parse(split[j]); + if (FloatUtil.TryParse(split[j].Trim(), out val)) + { + Write(val, data, offset); + offset += sizeof(float); + } } break; } @@ -685,12 +705,8 @@ namespace CodeWalker.GameFiles return chunks.ToArray(); } - private static int GetEnumInt(MetaName type, string enumString) + private static int GetEnumInt(MetaName type, string enumString, MetaStructureEntryDataType dataType) { - - //BUG: needs to handle multiple flags!!! - - var enumName = (MetaName)(uint)GetHash(enumString); var infos = MetaTypes.GetEnumInfo(type); if (infos == null) @@ -698,13 +714,47 @@ namespace CodeWalker.GameFiles return 0; } - for (int j = 0; j < infos.Entries.Length; j++) - { - var entry = infos.Entries[j]; - if (entry.EntryNameHash == enumName) + bool isFlags = (dataType == MetaStructureEntryDataType.IntFlags1) || + (dataType == MetaStructureEntryDataType.IntFlags2);// || + //(dataType == MetaStructureEntryDataType.ShortFlags); + + if (isFlags) + { + //flags enum. (multiple values, comma-separated) + var split = enumString.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + int enumVal = 0; + + for (int i = 0; i < split.Length; i++) { - return entry.EntryValue; + var enumName = (MetaName)(uint)GetHash(split[i].Trim()); + + for (int j = 0; j < infos.Entries.Length; j++) + { + var entry = infos.Entries[j]; + if (entry.EntryNameHash == enumName) + { + enumVal += (1 << entry.EntryValue); + } + } + } + + return enumVal; + } + else + { + //single value enum. + + var enumName = (MetaName)(uint)GetHash(enumString); + + for (int j = 0; j < infos.Entries.Length; j++) + { + var entry = infos.Entries[j]; + + if (entry.EntryNameHash == enumName) + { + return entry.EntryValue; + } } } From a56e87d64a39d07f5f5e7b3cf664b73cb1122831 Mon Sep 17 00:00:00 2001 From: dexyfex Date: Tue, 1 May 2018 15:11:08 +1000 Subject: [PATCH 005/158] R30_dev1 --- CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs | 1 + Todo.txt | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs b/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs index f09b353..bc3ba05 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs @@ -735,6 +735,7 @@ namespace CodeWalker.GameFiles if (entry.EntryNameHash == enumName) { enumVal += (1 << entry.EntryValue); + break; } } } diff --git a/Todo.txt b/Todo.txt index 20139e1..ccf7e6a 100644 --- a/Todo.txt +++ b/Todo.txt @@ -99,6 +99,12 @@ Audio stuff - do more work on .rel format (see https://github.com/CamxxCore/Rag done: +[v.30] +Bug fixes for XML/Meta conversion +Collision meshes now using R* colours +Vehicle rendering improvements + + [v.29] Nav mesh editing (YNV) - polys, points, portals New Project Window From 4c46a850f49413d3210a470c79d7974358ffcfde Mon Sep 17 00:00:00 2001 From: dexyfex Date: Tue, 1 May 2018 18:03:20 +1000 Subject: [PATCH 006/158] Improved rendering for nav poly selection, path shader now batches selection lines and tris --- Rendering/Renderer.cs | 67 +++++++++++++++++++++++++++++++- Rendering/Shaders/PathShader.cs | 60 +++++++++++++++++++++-------- WorldForm.cs | 68 ++------------------------------- 3 files changed, 113 insertions(+), 82 deletions(-) diff --git a/Rendering/Renderer.cs b/Rendering/Renderer.cs index 4792f59..aa74391 100644 --- a/Rendering/Renderer.cs +++ b/Rendering/Renderer.cs @@ -757,7 +757,7 @@ namespace CodeWalker.Rendering public void RenderSelectionNavPoly(YnvPoly poly) { ////draw poly triangles - var pcolour = new Color4(0.6f, 0.95f, 0.6f, 1.0f); + var pcolour = new Color4(1.0f, 1.0f, 1.0f, 0.2f); var colourval = (uint)pcolour.ToRgba(); var ynv = poly.Ynv; var ic = poly._RawData.IndexCount; @@ -792,6 +792,71 @@ namespace CodeWalker.Rendering } } + public void RenderSelectionNavPolyOutline(YnvPoly poly, uint colourval) + { + //var colourval = (uint)colour.ToRgba(); + var ynv = poly.Ynv; + var ic = poly._RawData.IndexCount; + var startid = poly._RawData.IndexID; + var endid = startid + ic; + var lastid = endid - 1; + var vc = ynv.Vertices.Count; + var startind = ynv.Indices[startid]; + + ////draw poly outline + VertexTypePC v = new VertexTypePC(); + v.Colour = colourval; + VertexTypePC v0 = new VertexTypePC(); + for (int id = startid; id < endid; id++) + { + var ind = ynv.Indices[id]; + if (ind >= vc) + { continue; } + + v.Position = ynv.Vertices[ind]; + SelectionLineVerts.Add(v); + if (id == startid) + { + v0 = v; + } + else + { + SelectionLineVerts.Add(v); + } + if (id == lastid) + { + SelectionLineVerts.Add(v0); + } + } + + + ////draw poly triangles + //VertexTypePC v0 = new VertexTypePC(); + //VertexTypePC v1 = new VertexTypePC(); + //VertexTypePC v2 = new VertexTypePC(); + //v0.Position = ynv.Vertices[startind]; + //v0.Colour = colourval; + //v1.Colour = colourval; + //v2.Colour = colourval; + //int tricount = ic - 2; + //for (int t = 0; t < tricount; t++) + //{ + // int tid = startid + t; + // int ind1 = ynv.Indices[tid + 1]; + // int ind2 = ynv.Indices[tid + 2]; + // if ((ind1 >= vc) || (ind2 >= vc)) + // { continue; } + // v1.Position = ynv.Vertices[ind1]; + // v2.Position = ynv.Vertices[ind2]; + // Renderer.SelectionTriVerts.Add(v0); + // Renderer.SelectionTriVerts.Add(v1); + // Renderer.SelectionTriVerts.Add(v2); + // Renderer.SelectionTriVerts.Add(v0); + // Renderer.SelectionTriVerts.Add(v2); + // Renderer.SelectionTriVerts.Add(v1); + //} + } + public void RenderSelectionGeometry(MapSelectionMode mode) { diff --git a/Rendering/Shaders/PathShader.cs b/Rendering/Shaders/PathShader.cs index 72d1e65..45732e4 100644 --- a/Rendering/Shaders/PathShader.cs +++ b/Rendering/Shaders/PathShader.cs @@ -178,16 +178,31 @@ namespace CodeWalker.Rendering SetInputLayout(context, VertexType.PC); SetSceneVars(context, camera, null, lights); - vertices.Clear(); - foreach (var vert in verts) + int drawn = 0; + int tricount = verts.Count / 3; + int maxcount = vertices.StructCount / 3; + while (drawn < tricount) { - vertices.Add(vert); - } - vertices.Update(context); - vertices.SetVSResource(context, 0); + vertices.Clear(); + + int offset = drawn*3; + int bcount = Math.Min(tricount - drawn, maxcount); + for (int i = 0; i < bcount; i++) + { + int t = offset + (i * 3); + vertices.Add(verts[t + 0]); + vertices.Add(verts[t + 1]); + vertices.Add(verts[t + 2]); + } + drawn += bcount; + + vertices.Update(context); + vertices.SetVSResource(context, 0); + + context.InputAssembler.PrimitiveTopology = SharpDX.Direct3D.PrimitiveTopology.TriangleList; + context.Draw(vertices.CurrentCount, 0); + } - context.InputAssembler.PrimitiveTopology = SharpDX.Direct3D.PrimitiveTopology.TriangleList; - context.Draw(vertices.CurrentCount, 0); } public void RenderLines(DeviceContext context, List verts, Camera camera, ShaderGlobalLights lights) @@ -197,16 +212,29 @@ namespace CodeWalker.Rendering SetInputLayout(context, VertexType.PC); SetSceneVars(context, camera, null, lights); - vertices.Clear(); - foreach (var vert in verts) + int drawn = 0; + int linecount = verts.Count / 2; + int maxcount = vertices.StructCount / 2; + while (drawn < linecount) { - vertices.Add(vert); - } - vertices.Update(context); - vertices.SetVSResource(context, 0); + vertices.Clear(); - context.InputAssembler.PrimitiveTopology = SharpDX.Direct3D.PrimitiveTopology.LineList; - context.Draw(vertices.CurrentCount, 0); + int offset = drawn * 2; + int bcount = Math.Min(linecount - drawn, maxcount); + for (int i = 0; i < bcount; i++) + { + int t = offset + (i * 2); + vertices.Add(verts[t + 0]); + vertices.Add(verts[t + 1]); + } + drawn += bcount; + + vertices.Update(context); + vertices.SetVSResource(context, 0); + + context.InputAssembler.PrimitiveTopology = SharpDX.Direct3D.PrimitiveTopology.LineList; + context.Draw(vertices.CurrentCount, 0); + } } diff --git a/WorldForm.cs b/WorldForm.cs index 6219a66..c39cf6f 100644 --- a/WorldForm.cs +++ b/WorldForm.cs @@ -1435,7 +1435,8 @@ namespace CodeWalker if (selectionItem.NavPoly != null) { Renderer.RenderSelectionNavPoly(selectionItem.NavPoly); - //return;//don't render a selection box for nav mesh? + Renderer.RenderSelectionNavPolyOutline(selectionItem.NavPoly, cgrn); + return;//don't render a selection box for nav poly } if (selectionItem.NavPoint != null) { @@ -2717,70 +2718,7 @@ namespace CodeWalker if ((CurMouseHit.NavPoly != null) && MouseSelectEnabled) { - var colour = Color4.White; - var colourval = (uint)colour.ToRgba(); - var poly = CurMouseHit.NavPoly; - var ynv = poly.Ynv; - var ic = poly._RawData.IndexCount; - var startid = poly._RawData.IndexID; - var endid = startid + ic; - var lastid = endid - 1; - var vc = ynv.Vertices.Count; - var startind = ynv.Indices[startid]; - - ////draw poly outline - VertexTypePC v = new VertexTypePC(); - v.Colour = colourval; - VertexTypePC v0 = new VertexTypePC(); - for (int id = startid; id < endid; id++) - { - var ind = ynv.Indices[id]; - if (ind >= vc) - { continue; } - - v.Position = ynv.Vertices[ind]; - Renderer.SelectionLineVerts.Add(v); - if (id == startid) - { - v0 = v; - } - else - { - Renderer.SelectionLineVerts.Add(v); - } - if (id == lastid) - { - Renderer.SelectionLineVerts.Add(v0); - } - } - - - ////draw poly triangles - //VertexTypePC v0 = new VertexTypePC(); - //VertexTypePC v1 = new VertexTypePC(); - //VertexTypePC v2 = new VertexTypePC(); - //v0.Position = ynv.Vertices[startind]; - //v0.Colour = colourval; - //v1.Colour = colourval; - //v2.Colour = colourval; - //int tricount = ic - 2; - //for (int t = 0; t < tricount; t++) - //{ - // int tid = startid + t; - // int ind1 = ynv.Indices[tid + 1]; - // int ind2 = ynv.Indices[tid + 2]; - // if ((ind1 >= vc) || (ind2 >= vc)) - // { continue; } - // v1.Position = ynv.Vertices[ind1]; - // v2.Position = ynv.Vertices[ind2]; - // Renderer.SelectionTriVerts.Add(v0); - // Renderer.SelectionTriVerts.Add(v1); - // Renderer.SelectionTriVerts.Add(v2); - // Renderer.SelectionTriVerts.Add(v0); - // Renderer.SelectionTriVerts.Add(v2); - // Renderer.SelectionTriVerts.Add(v1); - //} - + Renderer.RenderSelectionNavPolyOutline(CurMouseHit.NavPoly, 0xFFFFFFFF); } } From bab66680212031947cd0a723aad03ebfc75a0b6a Mon Sep 17 00:00:00 2001 From: dexyfex Date: Tue, 1 May 2018 22:34:52 +1000 Subject: [PATCH 007/158] Nav mesh progress --- .../GameFiles/FileTypes/YnvFile.cs | 183 ++++++++++-------- CodeWalker.Core/GameFiles/Resources/Nav.cs | 33 ++-- 2 files changed, 120 insertions(+), 96 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/YnvFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YnvFile.cs index 8118c79..7658eed 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YnvFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YnvFile.cs @@ -14,7 +14,7 @@ namespace CodeWalker.GameFiles public List Vertices { get; set; } public List Indices { get; set; } - public List AdjPolys { get; set; } + public List Edges { get; set; } public List Polys { get; set; } public List Portals { get; set; } public List Points { get; set; } @@ -101,9 +101,9 @@ namespace CodeWalker.GameFiles { Indices = Nav.Indices.GetFullList(); } - if (Nav.AdjPolys != null) + if (Nav.Edges != null) { - AdjPolys = Nav.AdjPolys.GetFullList(); + Edges = Nav.Edges.GetFullList(); } if (Nav.Polys != null) { @@ -114,7 +114,6 @@ namespace CodeWalker.GameFiles YnvPoly poly = new YnvPoly(); poly.Init(this, polys[i]); poly.Index = i; - poly.CalculatePosition(); //calc poly center for display purposes.. Polys.Add(poly); if (poly.PortalType > 0) @@ -209,23 +208,46 @@ namespace CodeWalker.GameFiles Vector3 aabbsizeinv = 1.0f / aabbsize; var vertlist = new List(); - if (Vertices != null) - { - for (int i = 0; i < Vertices.Count; i++) - { - vertlist.Add(NavMeshVertex.Create((Vertices[i] - posoffset) * aabbsizeinv)); - } - } + var indslist = new List(); + var edgelist = new List(); var polylist = new List(); - if (Polys != null) + var portallist = new List(); + + var vertdict = new Dictionary(); + var blankedgepart1 = new NavMeshEdgePart() { Value = 0x0FFFE1 };//1, -, 1, 0 + var blankedgepart2 = new NavMeshEdgePart() { Value = 0x2FFFE1 };//1, -, 1, 1 + var blankedge = new NavMeshEdge() { Unknown_0h = blankedgepart1, Unknown_4h = blankedgepart2 }; + + if (Polys != null) //rebuild vertices, indices, edges and polys lists from poly data. { for (int i = 0; i < Polys.Count; i++) { - Polys[i].Index = i; - polylist.Add(Polys[i].RawData); + var poly = Polys[i]; + var vc = poly.Vertices?.Length ?? 0; + for (int n = 0; n < vc; n++) + { + Vector3 v = poly.Vertices[n]; + NavMeshEdge e = ((poly.Edges != null) && (n < poly.Edges.Length)) ? poly.Edges[n] : blankedge; + ushort ind; + if (!vertdict.TryGetValue(v, out ind)) + { + ind = (ushort)vertlist.Count; + vertdict[v] = ind; + vertlist.Add(NavMeshVertex.Create((v - posoffset) * aabbsizeinv)); + } + if ((poly.Indices != null) && (n < poly.Indices.Length)) + { + poly.Indices[n] = ind; + } + indslist.Add(ind); + edgelist.Add(e); + } + poly._RawData.IndexCount = vc; + poly.Index = i;//this should be redundant... + polylist.Add(poly.RawData); } } - var portallist = new List(); + if (Portals != null) { for (int i = 0; i < Portals.Count; i++) @@ -238,7 +260,7 @@ namespace CodeWalker.GameFiles } } - if (Points != null) + if (Points != null) //points will be built into the sector tree { for (int i = 0; i < Points.Count; i++) { @@ -259,10 +281,10 @@ namespace CodeWalker.GameFiles Nav.Indices = new NavMeshList(); Nav.Indices.VFT = 1080158424; } - if (Nav.AdjPolys == null) + if (Nav.Edges == null) { - Nav.AdjPolys = new NavMeshList(); - Nav.AdjPolys.VFT = 1080158440; + Nav.Edges = new NavMeshList(); + Nav.Edges.VFT = 1080158440; } if (Nav.Polys == null) { @@ -273,9 +295,9 @@ namespace CodeWalker.GameFiles Nav.Vertices.RebuildList(vertlist); - Nav.Indices.RebuildList(Indices); + Nav.Indices.RebuildList(indslist); - Nav.AdjPolys.RebuildList(AdjPolys); + Nav.Edges.RebuildList(edgelist); Nav.Polys.RebuildList(polylist); @@ -474,67 +496,39 @@ namespace CodeWalker.GameFiles //go through the nav mesh polys and generate verts to render... - if ((Vertices == null) || (Vertices.Count == 0)) return; - if ((Indices == null) || (Indices.Count == 0)) return; if ((Polys == null) || (Polys.Count == 0)) return; int vc = Vertices.Count; List rverts = new List(); + EditorVertex p0 = new EditorVertex(); + EditorVertex p1 = new EditorVertex(); + EditorVertex p2 = new EditorVertex(); foreach (var ypoly in Polys) { - var poly = ypoly.RawData; + if ((ypoly.Vertices == null) || (ypoly.Vertices.Length < 3)) + { continue; } + var colour = ypoly.GetColour(); var colourval = (uint)colour.ToRgba(); - var ic = poly.IndexCount; - var startid = poly.IndexID; - var endid = startid + ic; - if (startid >= Indices.Count) - { continue; } - if (endid > Indices.Count) - { continue; } - - - if(ic<3) - { continue; }//not enough verts to make a triangle... - - if (ic > 15) - { } - - - EditorVertex p0 = new EditorVertex(); - EditorVertex p1 = new EditorVertex(); - EditorVertex p2 = new EditorVertex(); p0.Colour = colourval; p1.Colour = colourval; p2.Colour = colourval; - var startind = Indices[startid]; - if (startind >= vc) - { continue; } - - p0.Position = Vertices[startind]; + p0.Position = ypoly.Vertices[0]; //build triangles for the poly. - int tricount = ic - 2; + int tricount = ypoly.Vertices.Length - 2; for (int t = 0; t < tricount; t++) { - int tid = startid + t; - int ind1 = Indices[tid + 1]; - int ind2 = Indices[tid + 2]; - if ((ind1 >= vc) || (ind2 >= vc)) - { continue; } - - p1.Position = Vertices[ind1]; - p2.Position = Vertices[ind2]; - + p1.Position = ypoly.Vertices[t + 1]; + p2.Position = ypoly.Vertices[t + 2]; rverts.Add(p0); rverts.Add(p1); rverts.Add(p2); } - } TriangleVerts = rverts.ToArray(); @@ -624,14 +618,58 @@ namespace CodeWalker.GameFiles public Vector3 Position { get; set; } public int Index { get; set; } + public ushort[] Indices { get; set; } + public Vector3[] Vertices { get; set; } + public NavMeshEdge[] Edges { get; set; } + public void Init(YnvFile ynv, NavMeshPoly poly) { Ynv = ynv; RawData = poly; + LoadIndices(); + CalculatePosition(); //calc poly center for display purposes.. } + + public void LoadIndices() + { + //load indices, vertices and edges + var indices = Ynv.Indices; + var vertices = Ynv.Vertices; + var edges = Ynv.Edges; + if ((indices == null) || (vertices == null) || (edges == null)) + { return; } + var vc = vertices.Count; + var ic = _RawData.IndexCount; + var startid = _RawData.IndexID; + var endid = startid + ic; + if (startid >= indices.Count) + { return; } + if (endid > indices.Count) + { return; } + if (endid > edges.Count) + { return; } + + Indices = new ushort[ic]; + Vertices = new Vector3[ic]; + Edges = new NavMeshEdge[ic]; + + int i = 0; + for (int id = startid; id < endid; id++) + { + var ind = indices[id]; + + Indices[i] = ind; + Vertices[i] = (ind < vc) ? vertices[ind] : Vector3.Zero; + Edges[i] = edges[id]; + + i++; + } + } + + public void SetPosition(Vector3 pos) { Vector3 delta = pos - Position; @@ -709,30 +747,15 @@ namespace CodeWalker.GameFiles public void CalculatePosition() { //calc poly center for display purposes. - var indices = Ynv.Indices; - var vertices = Ynv.Vertices; - if ((indices == null) || (vertices == null)) - { return; } - var vc = vertices.Count; - var ic = _RawData.IndexCount; - var startid = _RawData.IndexID; - var endid = startid + ic; - if (startid >= indices.Count) - { return; } - if (endid > indices.Count) - { return; } Vector3 pcenter = Vector3.Zero; - float pcount = 0.0f; - for (int id = startid; id < endid; id++) + if (Vertices != null) { - var ind = indices[id]; - if (ind >= vc) - { continue; } - - pcenter += vertices[ind]; - pcount += 1.0f; + for (int i = 0; i < Vertices.Length; i++) + { + pcenter += Vertices[i]; + } } - Position = pcenter * (1.0f / pcount); + Position = pcenter * (1.0f / ((float)Vertices?.Length)); } diff --git a/CodeWalker.Core/GameFiles/Resources/Nav.cs b/CodeWalker.Core/GameFiles/Resources/Nav.cs index 8f0e0c7..d28ef25 100644 --- a/CodeWalker.Core/GameFiles/Resources/Nav.cs +++ b/CodeWalker.Core/GameFiles/Resources/Nav.cs @@ -54,8 +54,8 @@ namespace CodeWalker.GameFiles public uint Unused_078h { get; set; } // 0x00000000 public uint Unused_07Ch { get; set; } // 0x00000000 public ulong IndicesPointer { get; set; } - public ulong AdjPolysPointer { get; set; } - public uint AdjPolysIndicesCount { get; set; } + public ulong EdgesPointer { get; set; } + public uint EdgesIndicesCount { get; set; } public NavMeshUintArray AdjAreaIDs { get; set; } public ulong PolysPointer { get; set; } public ulong SectorTreePointer { get; set; } @@ -79,7 +79,7 @@ namespace CodeWalker.GameFiles public NavMeshList Vertices { get; set; } public NavMeshList Indices { get; set; } - public NavMeshList AdjPolys { get; set; } + public NavMeshList Edges { get; set; } public NavMeshList Polys { get; set; } public NavMeshSector SectorTree { get; set; } public NavMeshPortal[] Portals { get; set; } @@ -109,8 +109,8 @@ namespace CodeWalker.GameFiles Unused_078h = reader.ReadUInt32(); Unused_07Ch = reader.ReadUInt32(); IndicesPointer = reader.ReadUInt64(); - AdjPolysPointer = reader.ReadUInt64(); - AdjPolysIndicesCount = reader.ReadUInt32(); + EdgesPointer = reader.ReadUInt64(); + EdgesIndicesCount = reader.ReadUInt32(); AdjAreaIDs = reader.ReadStruct(); PolysPointer = reader.ReadUInt64(); SectorTreePointer = reader.ReadUInt64(); @@ -135,7 +135,7 @@ namespace CodeWalker.GameFiles Vertices = reader.ReadBlockAt>(VerticesPointer); Indices = reader.ReadBlockAt>(IndicesPointer); - AdjPolys = reader.ReadBlockAt>(AdjPolysPointer); + Edges = reader.ReadBlockAt>(EdgesPointer); Polys = reader.ReadBlockAt>(PolysPointer); SectorTree = reader.ReadBlockAt(SectorTreePointer); Portals = reader.ReadStructsAt(PortalsPointer, PortalsCount); @@ -150,7 +150,7 @@ namespace CodeWalker.GameFiles VerticesPointer = (ulong)(Vertices != null ? Vertices.FilePosition : 0); IndicesPointer = (ulong)(Indices != null ? Indices.FilePosition : 0); - AdjPolysPointer = (ulong)(AdjPolys != null ? AdjPolys.FilePosition : 0); + EdgesPointer = (ulong)(Edges != null ? Edges.FilePosition : 0); PolysPointer = (ulong)(Polys != null ? Polys.FilePosition : 0); SectorTreePointer = (ulong)(SectorTree != null ? SectorTree.FilePosition : 0); PortalsPointer = (ulong)(PortalsBlock?.FilePosition ?? 0); @@ -169,8 +169,8 @@ namespace CodeWalker.GameFiles writer.Write(Unused_078h); writer.Write(Unused_07Ch); writer.Write(IndicesPointer); - writer.Write(AdjPolysPointer); - writer.Write(AdjPolysIndicesCount); + writer.Write(EdgesPointer); + writer.Write(EdgesIndicesCount); writer.WriteStruct(AdjAreaIDs); writer.Write(PolysPointer); writer.Write(SectorTreePointer); @@ -198,7 +198,7 @@ namespace CodeWalker.GameFiles var list = new List(base.GetReferences()); if (Vertices != null) list.Add(Vertices); if (Indices != null) list.Add(Indices); - if (AdjPolys != null) list.Add(AdjPolys); + if (Edges != null) list.Add(Edges); if (Polys != null) list.Add(Polys); if (SectorTree != null) list.Add(SectorTree); @@ -592,10 +592,10 @@ namespace CodeWalker.GameFiles - [TypeConverter(typeof(ExpandableObjectConverter))] public struct NavMeshAdjPoly + [TypeConverter(typeof(ExpandableObjectConverter))] public struct NavMeshEdge { - public NavMeshAdjPolyPart Unknown_0h { get; set; } - public NavMeshAdjPolyPart Unknown_4h { get; set; } + public NavMeshEdgePart Unknown_0h { get; set; } + public NavMeshEdgePart Unknown_4h { get; set; } public override string ToString() { @@ -604,7 +604,7 @@ namespace CodeWalker.GameFiles } } - [TypeConverter(typeof(ExpandableObjectConverter))] public struct NavMeshAdjPolyPart + [TypeConverter(typeof(ExpandableObjectConverter))] public struct NavMeshEdgePart { public uint Value { get; set; } @@ -623,7 +623,8 @@ namespace CodeWalker.GameFiles public override string ToString() { - return AreaIDInd.ToString() + ", " + PolyID.ToString() + ", " + Unk2.ToString() + ", " + Unk3.ToString(); + string pid = (PolyID == 0x3FFF) ? "-" : PolyID.ToString(); + return AreaIDInd.ToString() + ", " + pid + ", " + Unk2.ToString() + ", " + Unk3.ToString(); } } @@ -647,7 +648,7 @@ namespace CodeWalker.GameFiles //public int IndexUnk { get { return (IndexFlags >> 0) & 31; } } //always 0 - public int IndexCount { get { return (IndexFlags >> 5); } } + public int IndexCount { get { return (IndexFlags >> 5); } set { IndexFlags = (ushort)((IndexFlags & 31) | ((value & 0x7FF) << 5)); } } //public int PartUnk1 { get { return (PartFlags >> 0) & 0xF; } } //always 0 public ushort PartID { get { return (ushort)((PartFlags >> 4) & 0xFF); } set { PartFlags = (ushort)((PartFlags & 0xF00F) | ((value & 0xFF) << 4)); } } From b18b1e76725d4fab653968c14fb73daa2577559c Mon Sep 17 00:00:00 2001 From: dexyfex Date: Wed, 2 May 2018 00:28:47 +1000 Subject: [PATCH 008/158] Nav mesh progress --- .../GameFiles/FileTypes/YnvFile.cs | 50 ++++++++++++++----- CodeWalker.Core/GameFiles/Resources/Nav.cs | 10 ++-- Project/Panels/EditYnvPolyPanel.Designer.cs | 30 +++++------ Project/Panels/EditYnvPolyPanel.cs | 12 ++--- 4 files changed, 64 insertions(+), 38 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/YnvFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YnvFile.cs index 7658eed..f24ceb0 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YnvFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YnvFile.cs @@ -115,14 +115,6 @@ namespace CodeWalker.GameFiles poly.Init(this, polys[i]); poly.Index = i; Polys.Add(poly); - - if (poly.PortalType > 0) - { - if (poly.PortalType != 2) //seems to be what portal links need to understand.. - { } - - } - } } if (Nav.Portals != null) @@ -212,6 +204,7 @@ namespace CodeWalker.GameFiles var edgelist = new List(); var polylist = new List(); var portallist = new List(); + var portallinks = new List(); var vertdict = new Dictionary(); var blankedgepart1 = new NavMeshEdgePart() { Value = 0x0FFFE1 };//1, -, 1, 0 @@ -243,6 +236,12 @@ namespace CodeWalker.GameFiles edgelist.Add(e); } poly._RawData.IndexCount = vc; + poly._RawData.PortalLinkID = (uint)portallinks.Count;//these shouldn't be directly editable! + poly._RawData.PortalLinkCount = (byte)(poly.PortalLinks?.Length ?? 0); + if (poly.PortalLinks != null) + { + portallinks.AddRange(poly.PortalLinks); + } poly.Index = i;//this should be redundant... polylist.Add(poly.RawData); } @@ -303,7 +302,8 @@ namespace CodeWalker.GameFiles Nav.Portals = (portallist.Count > 0) ? portallist.ToArray() : null; Nav.PortalsCount = (uint)(Nav.Portals?.Length ?? 0); - //TODO: update portal links data..... + Nav.PortalLinks = (portallinks.Count > 0) ? portallinks.ToArray() : null; + Nav.PortalLinksCount = (uint)(Nav.PortalLinks?.Length ?? 0); for (int i = 0; i < Nav.Polys.ListParts.Count; i++) //reassign part id's on all the polys... @@ -572,8 +572,8 @@ namespace CodeWalker.GameFiles public ushort AreaID { get { return _RawData.AreaID; } set { _RawData.AreaID = value; } } public ushort PartID { get { return _RawData.PartID; } set { _RawData.PartID = value; } } - public ushort PortalLinkID { get { return _RawData.PortalLinkID; } set { _RawData.PortalLinkID = value; } } - public byte PortalType { get { return _RawData.PortalType; } set { _RawData.PortalType = value; } } + public uint PortalLinkID { get { return _RawData.PortalLinkID; } set { _RawData.PortalLinkID = value; } } + public byte PortalLinkCount { get { return _RawData.PortalLinkCount; } set { _RawData.PortalLinkCount = value; } } public byte Flags1 { get { return (byte)(_RawData.Unknown_00h & 0xFF); } set { _RawData.Unknown_00h = (ushort)((_RawData.Unknown_00h & 0xFF00) | (value & 0xFF)); } } public byte Flags2 { get { return (byte)((_RawData.Unknown_24h.Value >> 0) & 0xFF); } set { _RawData.Unknown_24h = ((_RawData.Unknown_24h.Value & 0xFFFFFF00u) | ((value & 0xFFu) << 0)); } } public byte Flags3 { get { return (byte)((_RawData.Unknown_24h.Value >> 9) & 0xFF); } set { _RawData.Unknown_24h = ((_RawData.Unknown_24h.Value & 0xFFFE01FFu) | ((value & 0xFFu) << 9)); } } @@ -621,6 +621,7 @@ namespace CodeWalker.GameFiles public ushort[] Indices { get; set; } public Vector3[] Vertices { get; set; } public NavMeshEdge[] Edges { get; set; } + public ushort[] PortalLinks { get; set; } public void Init(YnvFile ynv, NavMeshPoly poly) @@ -629,6 +630,7 @@ namespace CodeWalker.GameFiles RawData = poly; LoadIndices(); + LoadPortalLinks(); CalculatePosition(); //calc poly center for display purposes.. } @@ -669,6 +671,30 @@ namespace CodeWalker.GameFiles } } + public void LoadPortalLinks() + { + if (PortalLinkCount == 0) + { return; } + var links = Ynv.Nav?.PortalLinks; + if (links == null) + { return; } + + var ll = links.Length; + + PortalLinks = new ushort[PortalLinkCount]; + + int offset = (int)PortalLinkID; + for (int i = 0; i < PortalLinkCount; i++) + { + int idx = offset + i; + PortalLinks[i] = (idx < ll) ? links[idx] : (ushort)0; + } + + if (PortalLinkCount != 2) + { }//debug + + } + public void SetPosition(Vector3 pos) { @@ -725,7 +751,7 @@ namespace CodeWalker.GameFiles //if ((u5 & 8388608) > 0) colour.Red += 1.0f; //slope facing -X,-Y (southwest) //if (u5 >= 16777216) { } //other bits unused - var u1 = _RawData.PortalType; + var u1 = _RawData.PortalLinkCount; //if ((u1 & 1) > 0) colour.Red += 1.0f; //portal - don't interact? //if ((u1 & 2) > 0) colour.Green += 1.0f; //portal - ladder/fence interaction? //if ((u1 & 4) > 0) colour.Blue += 1.0f; //portal - fence interaction / go away from? diff --git a/CodeWalker.Core/GameFiles/Resources/Nav.cs b/CodeWalker.Core/GameFiles/Resources/Nav.cs index d28ef25..95aa63b 100644 --- a/CodeWalker.Core/GameFiles/Resources/Nav.cs +++ b/CodeWalker.Core/GameFiles/Resources/Nav.cs @@ -643,16 +643,16 @@ namespace CodeWalker.GameFiles public NavMeshAABB CellAABB { get; set; } public FlagsUint Unknown_24h { get; set; } public FlagsUint Unknown_28h { get; set; } - public ushort PartFlags { get; set; } - public ushort PortalLinkID { get; set; } + public uint PartFlags { get; set; } //public int IndexUnk { get { return (IndexFlags >> 0) & 31; } } //always 0 public int IndexCount { get { return (IndexFlags >> 5); } set { IndexFlags = (ushort)((IndexFlags & 31) | ((value & 0x7FF) << 5)); } } //public int PartUnk1 { get { return (PartFlags >> 0) & 0xF; } } //always 0 - public ushort PartID { get { return (ushort)((PartFlags >> 4) & 0xFF); } set { PartFlags = (ushort)((PartFlags & 0xF00F) | ((value & 0xFF) << 4)); } } - public byte PortalType { get { return (byte)((PartFlags >> 12) & 0xF); } set { PartFlags = (ushort)((PartFlags & 0x0FFF) | ((value & 0xF) << 12)); } } + public ushort PartID { get { return (ushort)((PartFlags >> 4) & 0xFF); } set { PartFlags = ((PartFlags & 0xFFFFF00F) | (((uint)value & 0xFF) << 4)); } } + public byte PortalLinkCount { get { return (byte)((PartFlags >> 12) & 0x7); } set { PartFlags = ((PartFlags & 0xFFFF8FFF) | (((uint)value & 0x7) << 12)); } } + public uint PortalLinkID { get { return ((PartFlags >> 15) & 0x1FFFF); } set { PartFlags = ((PartFlags & 0x7FFF) | ((value & 0x1FFFF) << 15)); } } public ushort Unknown_28h_16 { get { return (ushort)((Unknown_28h.Value & 0xFFFF)); } set { Unknown_28h = (Unknown_28h.Value & 0xFFFF0000) | (value & 0xFFFFu); } } @@ -673,7 +673,7 @@ namespace CodeWalker.GameFiles Unknown_28h.Hex + ", " + //PartFlags.ToString() + ", " + //PartUnk1.ToString() + ", " + PartID.ToString() + ", " + - PortalType.ToString() + ", " + + PortalLinkCount.ToString() + ", " + PortalLinkID.ToString(); } } diff --git a/Project/Panels/EditYnvPolyPanel.Designer.cs b/Project/Panels/EditYnvPolyPanel.Designer.cs index 4830cec..6d7bf3a 100644 --- a/Project/Panels/EditYnvPolyPanel.Designer.cs +++ b/Project/Panels/EditYnvPolyPanel.Designer.cs @@ -46,14 +46,14 @@ this.label4 = new System.Windows.Forms.Label(); this.DeletePolyButton = new System.Windows.Forms.Button(); this.AddToProjectButton = new System.Windows.Forms.Button(); - this.PortalTypeUpDown = new System.Windows.Forms.NumericUpDown(); + this.PortalCountUpDown = new System.Windows.Forms.NumericUpDown(); this.label6 = new System.Windows.Forms.Label(); ((System.ComponentModel.ISupportInitialize)(this.AreaIDUpDown)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.PartIDUpDown)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.PortalIDUpDown)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.UnkXUpDown)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.UnkYUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.PortalTypeUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.PortalCountUpDown)).BeginInit(); this.SuspendLayout(); // // AreaIDUpDown @@ -273,34 +273,34 @@ this.AddToProjectButton.UseVisualStyleBackColor = true; this.AddToProjectButton.Click += new System.EventHandler(this.AddToProjectButton_Click); // - // PortalTypeUpDown + // PortalCountUpDown // - this.PortalTypeUpDown.Location = new System.Drawing.Point(495, 12); - this.PortalTypeUpDown.Maximum = new decimal(new int[] { + this.PortalCountUpDown.Location = new System.Drawing.Point(495, 12); + this.PortalCountUpDown.Maximum = new decimal(new int[] { 15, 0, 0, 0}); - this.PortalTypeUpDown.Name = "PortalTypeUpDown"; - this.PortalTypeUpDown.Size = new System.Drawing.Size(57, 20); - this.PortalTypeUpDown.TabIndex = 8; - this.PortalTypeUpDown.ValueChanged += new System.EventHandler(this.PortalTypeUpDown_ValueChanged); + this.PortalCountUpDown.Name = "PortalCountUpDown"; + this.PortalCountUpDown.Size = new System.Drawing.Size(57, 20); + this.PortalCountUpDown.TabIndex = 8; + this.PortalCountUpDown.ValueChanged += new System.EventHandler(this.PortalCountUpDown_ValueChanged); // // label6 // this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(429, 14); + this.label6.Location = new System.Drawing.Point(424, 14); this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(60, 13); + this.label6.Size = new System.Drawing.Size(67, 13); this.label6.TabIndex = 7; - this.label6.Text = "Portal type:"; + this.label6.Text = "Portal count:"; // // EditYnvPolyPanel // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(562, 404); - this.Controls.Add(this.PortalTypeUpDown); + this.Controls.Add(this.PortalCountUpDown); this.Controls.Add(this.label6); this.Controls.Add(this.DeletePolyButton); this.Controls.Add(this.AddToProjectButton); @@ -327,7 +327,7 @@ ((System.ComponentModel.ISupportInitialize)(this.PortalIDUpDown)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.UnkXUpDown)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.UnkYUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.PortalTypeUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.PortalCountUpDown)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); @@ -352,7 +352,7 @@ private System.Windows.Forms.Label label4; private System.Windows.Forms.Button DeletePolyButton; private System.Windows.Forms.Button AddToProjectButton; - private System.Windows.Forms.NumericUpDown PortalTypeUpDown; + private System.Windows.Forms.NumericUpDown PortalCountUpDown; private System.Windows.Forms.Label label6; } } \ No newline at end of file diff --git a/Project/Panels/EditYnvPolyPanel.cs b/Project/Panels/EditYnvPolyPanel.cs index 595fc73..17b54d2 100644 --- a/Project/Panels/EditYnvPolyPanel.cs +++ b/Project/Panels/EditYnvPolyPanel.cs @@ -48,7 +48,7 @@ namespace CodeWalker.Project.Panels AreaIDUpDown.Value = 0; PartIDUpDown.Value = 0; PortalIDUpDown.Value = 0; - PortalTypeUpDown.Value = 0; + PortalCountUpDown.Value = 0; SetCheckedListBoxValues(FlagsCheckedListBox1, 0); SetCheckedListBoxValues(FlagsCheckedListBox2, 0); SetCheckedListBoxValues(FlagsCheckedListBox3, 0); @@ -65,7 +65,7 @@ namespace CodeWalker.Project.Panels AreaIDUpDown.Value = YnvPoly.AreaID; PartIDUpDown.Value = YnvPoly.PartID; PortalIDUpDown.Value = YnvPoly.PortalLinkID; - PortalTypeUpDown.Value = YnvPoly.PortalType; + PortalCountUpDown.Value = YnvPoly.PortalLinkCount; SetCheckedListBoxValues(FlagsCheckedListBox1, YnvPoly.Flags1); SetCheckedListBoxValues(FlagsCheckedListBox2, YnvPoly.Flags2); SetCheckedListBoxValues(FlagsCheckedListBox3, YnvPoly.Flags3); @@ -152,16 +152,16 @@ namespace CodeWalker.Project.Panels } } - private void PortalTypeUpDown_ValueChanged(object sender, EventArgs e) + private void PortalCountUpDown_ValueChanged(object sender, EventArgs e) { if (populatingui) return; if (YnvPoly == null) return; - byte portalunk = (byte)PortalTypeUpDown.Value; + byte portalcount = (byte)PortalCountUpDown.Value; lock (ProjectForm.ProjectSyncRoot) { - if (YnvPoly.PortalType != portalunk) + if (YnvPoly.PortalLinkCount != portalcount) { - YnvPoly.PortalType = portalunk; + YnvPoly.PortalLinkCount = portalcount; ProjectForm.SetYnvHasChanged(true); } } From bab1bee46097b8d07bcf50b13f1301b4b7b3f0aa Mon Sep 17 00:00:00 2001 From: dexyfex Date: Sat, 5 May 2018 01:58:23 +1000 Subject: [PATCH 009/158] Nav mesh progress --- CodeWalker.Core/CodeWalker.Core.csproj | 2 + .../FileTypes/Builders/YndBuilder.cs | 12 + .../FileTypes/Builders/YnvBuilder.cs | 443 ++++++++++++++++++ .../GameFiles/FileTypes/YnvFile.cs | 174 ++++++- CodeWalker.Core/GameFiles/Resources/Nav.cs | 116 ++++- CodeWalker.Core/World/Space.cs | 15 +- 6 files changed, 738 insertions(+), 24 deletions(-) create mode 100644 CodeWalker.Core/GameFiles/FileTypes/Builders/YndBuilder.cs create mode 100644 CodeWalker.Core/GameFiles/FileTypes/Builders/YnvBuilder.cs diff --git a/CodeWalker.Core/CodeWalker.Core.csproj b/CodeWalker.Core/CodeWalker.Core.csproj index 943760a..e613082 100644 --- a/CodeWalker.Core/CodeWalker.Core.csproj +++ b/CodeWalker.Core/CodeWalker.Core.csproj @@ -48,6 +48,8 @@ + + diff --git a/CodeWalker.Core/GameFiles/FileTypes/Builders/YndBuilder.cs b/CodeWalker.Core/GameFiles/FileTypes/Builders/YndBuilder.cs new file mode 100644 index 0000000..fba7708 --- /dev/null +++ b/CodeWalker.Core/GameFiles/FileTypes/Builders/YndBuilder.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CodeWalker.Core.GameFiles.FileTypes.Builders +{ + public class YndBuilder + { + } +} diff --git a/CodeWalker.Core/GameFiles/FileTypes/Builders/YnvBuilder.cs b/CodeWalker.Core/GameFiles/FileTypes/Builders/YnvBuilder.cs new file mode 100644 index 0000000..1173ae4 --- /dev/null +++ b/CodeWalker.Core/GameFiles/FileTypes/Builders/YnvBuilder.cs @@ -0,0 +1,443 @@ +using CodeWalker.GameFiles; +using CodeWalker.World; +using SharpDX; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CodeWalker.Core.GameFiles.FileTypes.Builders +{ + public class YnvBuilder + { + + + private List PolyList = new List(); + + private SpaceNavGrid NavGrid = null; + private List YnvFiles = null; + + public YnvPoly AddPoly(Vector3[] verts) + { + if ((verts == null) || (verts.Length < 3)) + { return null; } + + YnvPoly poly = new YnvPoly(); + poly.AreaID = 0x3FFF; + poly.Index = PolyList.Count; + poly.Vertices = verts; + + PolyList.Add(poly); + + return poly; + } + + + + + + + public List Build(bool forVehicle) + { + NavGrid = new SpaceNavGrid(); + YnvFiles = new List(); + + if (forVehicle) //for vehicle YNV, only need a single ynv, no splitting + { + //TODO! + } + else //for static world ynv, need to split polys and generate a set of ynv's. + { + //1: split polys going over nav grid borders, first by X then by Y + var splitpolysX = SplitPolys(PolyList, true); + var splitpolysY = SplitPolys(splitpolysX, false); + + //2: assign polys into their new ynv's + AddPolysIntoGrid(splitpolysY); + + + //3: fix up generated ynv's + FinalizeYnvs(YnvFiles); + + } + + return YnvFiles; + } + + + + + + private List SplitPolys(List polys, bool xaxis) + { + var newpolys = new List(); + + var verts1 = new List(); + var verts2 = new List(); + var edges1 = new List(); + var edges2 = new List(); + + var polysplits = new Dictionary(); + + foreach (var poly in polys) //split along borders + { + var verts = poly.Vertices; + if (verts == null) + { continue; }//ignore empty polys.. + if (verts.Length < 3) + { continue; }//not enough verts for a triangle! + + Vector2I gprev = NavGrid.GetCellPos(verts[0]); + int split1 = 0; + int split2 = 0; + for (int i = 1; i < verts.Length; i++) + { + Vector2I g = NavGrid.GetCellPos(verts[i]); + int g1 = xaxis ? g.X : g.Y; + int g2 = xaxis ? gprev.X : gprev.Y; + if (g1 != g2) //this poly is crossing a border + { + if (split1 == 0) { split1 = i; } + else { split2 = i; break; } + } + gprev = g; + } + if (split1 > 0) + { + var split2beg = (split2 > 0) ? split2 - 1 : verts.Length - 1; + var split2end = split2beg + 1; + var sv11 = verts[split1 - 1]; + var sv12 = verts[split1]; + var sv21 = verts[split2beg]; + var sv22 = verts[split2]; + var sp1 = GetSplitPos(sv11, sv12, xaxis); + var sp2 = GetSplitPos(sv21, sv22, xaxis); + + //if ((sp1 == sp2) || (sp1 == sv11) || (sp1 == sv12) || (sp2 == sv21) || (sp2 == sv22)) + if (!IsValidSplit(sp1, sp2, sv11, sv12, sv21, sv22)) + { + //split did nothing, just leave this poly alone + newpolys.Add(poly); + } + else + { + //split it! + var poly1 = new YnvPoly(); + var poly2 = new YnvPoly(); + poly1.RawData = poly.RawData; + poly2.RawData = poly.RawData; + verts1.Clear(); + verts2.Clear(); + + for (int i = 0; i < split1; i++) verts1.Add(verts[i]); + verts1.Add(sp1); + verts1.Add(sp2); + for (int i = split2end; i < verts.Length; i++) verts1.Add(verts[i]); + + verts2.Add(sp1); + for (int i = split1; i < split2end; i++) verts2.Add(verts[i]); + verts2.Add(sp2); + + poly1.Vertices = verts1.ToArray(); + poly2.Vertices = verts2.ToArray(); + + + //save this information for the edge splitting pass + var polysplit = new YnvPolySplit(); + polysplit.Orig = poly; + polysplit.New1 = poly1; + polysplit.New2 = poly2; + polysplit.Split1 = split1; + polysplit.Split2 = split2end; + polysplits[poly] = polysplit; + + + newpolys.Add(poly1); + newpolys.Add(poly2); + } + } + else + { + //no need to split + newpolys.Add(poly); + } + } + + + foreach (var polysplit in polysplits.Values) //build new edges for split polys + { + //the two edges that were split each need to be turned into two new edges (1 for each poly). + //also, the split itself needs to be added as a new edge to the original poly. + + var poly = polysplit.Orig; + var poly1 = polysplit.New1; + var poly2 = polysplit.New2; + var edges = poly.Edges; + var verts = poly.Vertices; + var ec = edges?.Length ?? 0; + if (ec <= 0) + { continue; }//shouldn't happen - no edges? + if (ec != poly.Vertices?.Length) + { continue; }//shouldn't happen + + var split1beg = polysplit.Split1 - 1; + var split1end = polysplit.Split1; + var split2beg = polysplit.Split2 - 1; + var split2end = polysplit.Split2; + + edges1.Clear(); + edges2.Clear(); + + var se1 = edges[split1beg]; //the two original edges that got split + var se2 = edges[split2beg]; + var sp1 = TryGetSplit(polysplits, se1.Poly1);//could use Poly2, but they should be the same.. + var sp2 = TryGetSplit(polysplits, se2.Poly1); + var sv1a = verts[split1beg]; + var sv2a = verts[split2beg]; + var sp1a = sp1?.GetNearest(sv1a); + var sp1b = sp1?.GetOther(sp1a); + var sp2b = sp2?.GetNearest(sv2a); + var sp2a = sp2?.GetOther(sp2b); + var edge1a = new YnvEdge(se1, sp1a); + var edge1b = new YnvEdge(se1, sp1b); + var edge2a = new YnvEdge(se2, sp2a); + var edge2b = new YnvEdge(se2, sp2b); + var splita = new YnvEdge(se1, poly2); + var splitb = new YnvEdge(se1, poly1); + + for (int i = 0; i < split1beg; i++) edges1.Add(edges[i]);//untouched edges + edges1.Add(edge1a); + edges1.Add(splita); + edges1.Add(edge2a); + for (int i = split2end; i < ec; i++) edges1.Add(edges[i]);//untouched edges + + edges2.Add(edge1b); + for (int i = split1end; i < split2beg; i++) edges2.Add(edges[i]);//untouched edges + edges2.Add(edge2b); + edges2.Add(splitb); + + + poly1.Edges = edges1.ToArray(); + poly2.Edges = edges2.ToArray(); + + if (poly1.Edges.Length != poly1.Vertices.Length) + { }//debug + if (poly2.Edges.Length != poly2.Vertices.Length) + { }//debug + + } + + foreach (var poly in newpolys) //fix any untouched edges that joined to split polys + { + if (poly.Edges?.Length != poly.Vertices?.Length) + { continue; }//shouldn't happen (no edges?) + for (int i = 0; i < poly.Edges.Length; i++) + { + var edge = poly.Edges[i]; + var vert = poly.Vertices[i]; + if (edge == null) + { continue; }//shouldn't happen + if (edge.Poly1 != edge.Poly2) + { continue; }//shouldn't happen? + if (edge.Poly1 == null) + { continue; }//probably this edge joins to nothing + + + YnvPolySplit polysplit; + if (polysplits.TryGetValue(edge.Poly1, out polysplit)) + { + var newpoly = polysplit.GetNearest(vert); + if (newpoly == null) + { }//debug + edge.Poly1 = newpoly; + edge.Poly2 = newpoly; + } + + } + } + + + return newpolys; + } + + private Vector3 GetSplitPos(Vector3 a, Vector3 b, bool xaxis) + { + Vector3 ca = NavGrid.GetCellRel(a); + Vector3 cb = NavGrid.GetCellRel(b); + float fa = xaxis ? ca.X : ca.Y; + float fb = xaxis ? cb.X : cb.Y; + float f = 0; + if (fb > fa) + { + float ib = (float)Math.Floor(fb); + f = (ib - fa) / (fb - fa); + } + else + { + float ia = (float)Math.Floor(fa); + f = (fa - ia) / (fa - fb); + } + if (f < 0.0f) + { }//debug + if (f > 1.0f) + { }//debug + return a + (b - a) * Math.Min(Math.Max(f, 0.0f), 1.0f); + } + + private bool IsValidSplit(Vector3 s1, Vector3 s2, Vector3 v1a, Vector3 v1b, Vector3 v2a, Vector3 v2b) + { + if (XYEqual(s1, s2)) return false; + if (XYEqual(s1, v1a)) return false; + if (XYEqual(s1, v1b)) return false; + if (XYEqual(s2, v2a)) return false; + if (XYEqual(s2, v2b)) return false; + return true; + } + + private bool XYEqual(Vector3 v1, Vector3 v2) + { + return ((v1.X == v2.X) && (v1.Y == v2.Y)); + } + + private class YnvPolySplit + { + public YnvPoly Orig; + public YnvPoly New1; + public YnvPoly New2; + public int Split1; + public int Split2; + public YnvPoly GetNearest(Vector3 v) + { + if (New1?.Vertices == null) return New2; + if (New2?.Vertices == null) return New1; + float len1 = float.MaxValue; + float len2 = float.MaxValue; + for (int i = 0; i < New1.Vertices.Length; i++) + { + len1 = Math.Min(len1, (v - New1.Vertices[i]).LengthSquared()); + } + if (len1 == 0.0f) return New1; + for (int i = 0; i < New2.Vertices.Length; i++) + { + len2 = Math.Min(len2, (v - New2.Vertices[i]).LengthSquared()); + } + if (len2 == 0.0f) return New2; + return (len1 <= len2) ? New1 : New2; + } + public YnvPoly GetOther(YnvPoly p) + { + if (p == New1) return New2; + return New1; + } + } + private YnvPolySplit TryGetSplit(Dictionary polysplits, YnvPoly poly) + { + if (poly == null) return null; + YnvPolySplit r = null; + polysplits.TryGetValue(poly, out r); + return r; + } + + + + private void AddPolysIntoGrid(List polys) + { + foreach (var poly in polys) + { + poly.CalculatePosition(); + var pos = poly.Position; + var cell = NavGrid.GetCell(pos); + + var ynv = cell.Ynv; + if (ynv == null) + { + ynv = new YnvFile(); + ynv.Name = "navmesh[" + cell.FileX.ToString() + "][" + cell.FileY.ToString() + "]"; + ynv.Nav = new NavMesh(); + ynv.Nav.SetDefaults(false); + ynv.Nav.AABBSize = new Vector3(NavGrid.CellSize, NavGrid.CellSize, 0.0f); + ynv.Nav.SectorTree = new NavMeshSector(); + ynv.Nav.SectorTree.AABBMin = new Vector4(NavGrid.GetCellMin(cell), 0.0f); + ynv.Nav.SectorTree.AABBMax = new Vector4(NavGrid.GetCellMax(cell), 0.0f); + ynv.AreaID = cell.X + cell.Y * 100; + ynv.Polys = new List(); + cell.Ynv = ynv; + YnvFiles.Add(ynv); + } + + poly.AreaID = (ushort)ynv.AreaID; + poly.Index = ynv.Polys.Count; + poly.Ynv = ynv; + ynv.Polys.Add(poly); + + } + } + + private void FinalizeYnvs(List ynvs) + { + + foreach (var ynv in ynvs) + { + //find zmin and zmax and update AABBSize and SectorTree root + float zmin = float.MaxValue; + float zmax = float.MinValue; + foreach (var poly in ynv.Polys) + { + foreach (var vert in poly.Vertices) + { + zmin = Math.Min(zmin, vert.Z); + zmax = Math.Max(zmax, vert.Z); + } + } + var yn = ynv.Nav; + var ys = yn.SectorTree; + yn.AABBSize = new Vector3(yn.AABBSize.X, yn.AABBSize.Y, zmax - zmin); + ys.AABBMin = new Vector4(ys.AABBMin.X, ys.AABBMin.Y, zmin, 0.0f); + ys.AABBMax = new Vector4(ys.AABBMax.X, ys.AABBMax.Y, zmax, 0.0f); + + + ynv.UpdateContentFlags(false); + + + + //fix up flags on edges that cross ynv borders + foreach (var poly in ynv.Polys) + { + bool border = false; + if (poly.Edges == null) + { continue; } + foreach (var edge in poly.Edges) + { + if (edge.Poly1 != null) + { + if (edge.Poly1.AreaID != poly.AreaID) + { + //edge._RawData._Poly2.Unk3 = 4;// edge._RawData._Poly2.Unk3 | 4; + + //DEBUG don't join edges + edge.Poly1 = null; + edge.Poly2 = null; + edge.AreaID1 = 0x3FFF; + edge.AreaID2 = 0x3FFF; + edge._RawData._Poly1.PolyID = 0x3FFF; + edge._RawData._Poly2.PolyID = 0x3FFF; + edge._RawData._Poly1.Unk2 = 1; + edge._RawData._Poly2.Unk2 = 1; + edge._RawData._Poly1.Unk3 = 0; + edge._RawData._Poly2.Unk3 = 0; + + //border = true; + } + } + } + poly.B19_IsCellEdge = border; + } + + + } + + } + + } +} diff --git a/CodeWalker.Core/GameFiles/FileTypes/YnvFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YnvFile.cs index f24ceb0..5118acb 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YnvFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YnvFile.cs @@ -14,7 +14,7 @@ namespace CodeWalker.GameFiles public List Vertices { get; set; } public List Indices { get; set; } - public List Edges { get; set; } + public List Edges { get; set; } public List Polys { get; set; } public List Portals { get; set; } public List Points { get; set; } @@ -103,7 +103,14 @@ namespace CodeWalker.GameFiles } if (Nav.Edges != null) { - Edges = Nav.Edges.GetFullList(); + var edges = Nav.Edges.GetFullList(); + Edges = new List(edges.Count); + for (int i = 0; i < edges.Count; i++) + { + YnvEdge edge = new YnvEdge(); + edge.Init(this, edges[i]); + Edges.Add(edge); + } } if (Nav.Polys != null) { @@ -207,9 +214,8 @@ namespace CodeWalker.GameFiles var portallinks = new List(); var vertdict = new Dictionary(); - var blankedgepart1 = new NavMeshEdgePart() { Value = 0x0FFFE1 };//1, -, 1, 0 - var blankedgepart2 = new NavMeshEdgePart() { Value = 0x2FFFE1 };//1, -, 1, 1 - var blankedge = new NavMeshEdge() { Unknown_0h = blankedgepart1, Unknown_4h = blankedgepart2 }; + var areadict = new Dictionary(); + var arealist = new List(); if (Polys != null) //rebuild vertices, indices, edges and polys lists from poly data. { @@ -217,10 +223,12 @@ namespace CodeWalker.GameFiles { var poly = Polys[i]; var vc = poly.Vertices?.Length ?? 0; + //poly.AreaID = (ushort)Nav.AreaID; + poly._RawData.IndexID = (ushort)indslist.Count; for (int n = 0; n < vc; n++) { Vector3 v = poly.Vertices[n]; - NavMeshEdge e = ((poly.Edges != null) && (n < poly.Edges.Length)) ? poly.Edges[n] : blankedge; + YnvEdge e = ((poly.Edges != null) && (n < poly.Edges.Length)) ? poly.Edges[n] : null; ushort ind; if (!vertdict.TryGetValue(v, out ind)) { @@ -233,7 +241,40 @@ namespace CodeWalker.GameFiles poly.Indices[n] = ind; } indslist.Add(ind); - edgelist.Add(e); + + NavMeshEdge edge; + if (e != null) + { + if (e.Poly1 != null) + { + e.PolyID1 = (uint)e.Poly1.Index; + e.AreaID1 = e.Poly1.AreaID; + if (e.AreaID1 == 0x3FFF) + { }//debug + } + if (e.Poly2 != null) + { + e.PolyID2 = (uint)e.Poly2.Index; + e.AreaID2 = e.Poly2.AreaID; + if (e.AreaID2 == 0x3FFF) + { }//debug + } + if ((e.AreaID1 == 0) || (e.AreaID2 == 0)) + { }//debug + e._RawData._Poly1.AreaIDInd = EnsureEdgeAreaID(e.AreaID1, areadict, arealist); + e._RawData._Poly2.AreaIDInd = EnsureEdgeAreaID(e.AreaID2, areadict, arealist); + edge = e.RawData; + } + else + { + var areaind = EnsureEdgeAreaID(0x3FFF, areadict, arealist); + edge = new NavMeshEdge();//create an empty edge + edge._Poly1.PolyID = 0x3FFF; + edge._Poly2.PolyID = 0x3FFF; + edge._Poly1.AreaIDInd = areaind; + edge._Poly2.AreaIDInd = areaind; + } + edgelist.Add(edge); } poly._RawData.IndexCount = vc; poly._RawData.PortalLinkID = (uint)portallinks.Count;//these shouldn't be directly editable! @@ -243,6 +284,7 @@ namespace CodeWalker.GameFiles portallinks.AddRange(poly.PortalLinks); } poly.Index = i;//this should be redundant... + poly.CalculateAABB();//make sure this is up to date! polylist.Add(poly.RawData); } } @@ -293,18 +335,25 @@ namespace CodeWalker.GameFiles Nav.Vertices.RebuildList(vertlist); + Nav.VerticesCount = Nav.Vertices.ItemCount; Nav.Indices.RebuildList(indslist); Nav.Edges.RebuildList(edgelist); + Nav.EdgesIndicesCount = Nav.Indices.ItemCount; Nav.Polys.RebuildList(polylist); + Nav.PolysCount = Nav.Polys.ItemCount; Nav.Portals = (portallist.Count > 0) ? portallist.ToArray() : null; Nav.PortalsCount = (uint)(Nav.Portals?.Length ?? 0); Nav.PortalLinks = (portallinks.Count > 0) ? portallinks.ToArray() : null; Nav.PortalLinksCount = (uint)(Nav.PortalLinks?.Length ?? 0); + var adjAreaIds = new NavMeshUintArray(); + adjAreaIds.Set(arealist.ToArray()); + Nav.AdjAreaIDs = adjAreaIds; + for (int i = 0; i < Nav.Polys.ListParts.Count; i++) //reassign part id's on all the polys... { @@ -337,12 +386,27 @@ namespace CodeWalker.GameFiles } + private uint EnsureEdgeAreaID(uint areaid, Dictionary areadict, List arealist) + { + uint ind; + if (!areadict.TryGetValue(areaid, out ind)) + { + ind = (uint)arealist.Count; + areadict[areaid] = ind; + arealist.Add(areaid); + } + return ind; + } + + private void BuildSectorTree(NavMeshSector node, int depth, ref uint pointindex) { Vector3 min = node.AABBMin.XYZ(); Vector3 max = node.AABBMax.XYZ(); Vector3 cen = (min + max) * 0.5f; + //totbytes += (uint)node.BlockLength; + if (depth <= 0) { //go through polys and points and create new lists for this node @@ -351,6 +415,8 @@ namespace CodeWalker.GameFiles data.PointsStartID = pointindex; + //totbytes += (uint)data.BlockLength; + if (Polys != null) { List polyids = new List(); @@ -367,6 +433,7 @@ namespace CodeWalker.GameFiles { data.PolyIDs = polyids.ToArray(); } + //totbytes += (uint)(polyids.Count * 2); } if (Points != null) @@ -385,6 +452,7 @@ namespace CodeWalker.GameFiles data.Points = points.ToArray(); pointindex += (uint)points.Count; } + //totbytes += (uint)(points.Count * 8); } } @@ -441,6 +509,18 @@ namespace CodeWalker.GameFiles + public void UpdateContentFlags(bool vehicle) + { + NavMeshFlags f = NavMeshFlags.None; + //if (Nav.VerticesCount > 0) f = f | NavMeshFlags.Vertices; + //if (Nav.PortalsCount > 0) f = f | NavMeshFlags.Portals; + if (Polys?.Count > 0) f = f | NavMeshFlags.Vertices; + if (Portals?.Count > 0) f = f | NavMeshFlags.Portals; + if (vehicle) f = f | NavMeshFlags.Vehicle; + else f = f | NavMeshFlags.Unknown8; + Nav.ContentFlags = f; + } + public void UpdateAllNodePositions() @@ -566,9 +646,9 @@ namespace CodeWalker.GameFiles [TypeConverter(typeof(ExpandableObjectConverter))] public class YnvPoly { public NavMeshPoly _RawData; + public NavMeshPoly RawData { get { return _RawData; } set { _RawData = value; } } public YnvFile Ynv { get; set; } - public NavMeshPoly RawData { get { return _RawData; } set { _RawData = value; } } public ushort AreaID { get { return _RawData.AreaID; } set { _RawData.AreaID = value; } } public ushort PartID { get { return _RawData.PartID; } set { _RawData.PartID = value; } } @@ -620,7 +700,7 @@ namespace CodeWalker.GameFiles public ushort[] Indices { get; set; } public Vector3[] Vertices { get; set; } - public NavMeshEdge[] Edges { get; set; } + public YnvEdge[] Edges { get; set; } public ushort[] PortalLinks { get; set; } @@ -656,7 +736,7 @@ namespace CodeWalker.GameFiles Indices = new ushort[ic]; Vertices = new Vector3[ic]; - Edges = new NavMeshEdge[ic]; + Edges = new YnvEdge[ic]; int i = 0; for (int id = startid; id < endid; id++) @@ -781,9 +861,28 @@ namespace CodeWalker.GameFiles pcenter += Vertices[i]; } } - Position = pcenter * (1.0f / ((float)Vertices?.Length)); + float c = ((float)Vertices?.Length); + if (c == 0.0f) c = 1.0f; + Position = pcenter * (1.0f / c); } + public void CalculateAABB() + { + Vector3 min = Vector3.Zero; + Vector3 max = Vector3.Zero; + if ((Vertices != null) && (Vertices.Length > 0)) + { + min = new Vector3(float.MaxValue); + max = new Vector3(float.MinValue); + for (int i = 0; i < Vertices.Length; i++) + { + min = Vector3.Min(min, Vertices[i]); + max = Vector3.Max(max, Vertices[i]); + } + } + + _RawData.CellAABB = new NavMeshAABB() { Min = min, Max = max }; + } public override string ToString() @@ -919,4 +1018,57 @@ namespace CodeWalker.GameFiles } + + + [TypeConverter(typeof(ExpandableObjectConverter))] public class YnvEdge + { + public NavMeshEdge _RawData; + public NavMeshEdge RawData { get { return _RawData; } set { _RawData = value; } } + public YnvFile Ynv { get; set; } + + + public uint AreaID1 { get; set; } + public uint AreaID2 { get; set; } + public uint PolyID1 { get { return _RawData._Poly1.PolyID; } set { _RawData._Poly1.PolyID = value; } } + public uint PolyID2 { get { return _RawData._Poly2.PolyID; } set { _RawData._Poly2.PolyID = value; } } + public YnvPoly Poly1 { get; set; } + public YnvPoly Poly2 { get; set; } + + + public YnvEdge() { } + public YnvEdge(YnvEdge copy, YnvPoly poly) + { + _RawData = copy._RawData; + _RawData._Poly1.PolyID = 0x3FFF; + _RawData._Poly2.PolyID = 0x3FFF; + Poly1 = poly; + Poly2 = poly; + AreaID1 = 0x3FFF; + AreaID2 = 0x3FFF; + } + + public void Init(YnvFile ynv, NavMeshEdge edge) + { + Ynv = ynv; + RawData = edge; + + if (ynv.Nav == null) return; + var n = ynv.Nav; + + var ai1 = edge.Poly1.AreaIDInd; + var ai2 = edge.Poly2.AreaIDInd; + + AreaID1 = (ai1 < n.AdjAreaIDs.Count) ? n.AdjAreaIDs.Get(ai1) : 16383; + AreaID2 = (ai2 < n.AdjAreaIDs.Count) ? n.AdjAreaIDs.Get(ai2) : 16383; + + } + + public override string ToString() + { + return AreaID1.ToString() + ", " + AreaID2.ToString() + ", " + PolyID1.ToString() + ", " + PolyID2.ToString() + ", " + + _RawData._Poly1.Unk2.ToString() + ", " + _RawData._Poly2.Unk2.ToString() + ", " + + _RawData._Poly1.Unk3.ToString() + ", " + _RawData._Poly2.Unk3.ToString(); + } + + } } diff --git a/CodeWalker.Core/GameFiles/Resources/Nav.cs b/CodeWalker.Core/GameFiles/Resources/Nav.cs index 95aa63b..cf5bd53 100644 --- a/CodeWalker.Core/GameFiles/Resources/Nav.cs +++ b/CodeWalker.Core/GameFiles/Resources/Nav.cs @@ -158,6 +158,39 @@ namespace CodeWalker.GameFiles + //uint totbytes = 0; + //Stack sectorstack = new Stack(); + //if (SectorTree != null) sectorstack.Push(SectorTree); + //while (sectorstack.Count > 0) + //{ + // var sector = sectorstack.Pop(); + // if (sector.SubTree1 != null) sectorstack.Push(sector.SubTree1); + // if (sector.SubTree2 != null) sectorstack.Push(sector.SubTree2); + // if (sector.SubTree3 != null) sectorstack.Push(sector.SubTree3); + // if (sector.SubTree4 != null) sectorstack.Push(sector.SubTree4); + // if (sector.Data != null) + // { + // var sdata = sector.Data; + // totbytes += (uint)(sdata.PolyIDsBlock?.BlockLength ?? 0); + // totbytes += (uint)(sdata.PointsBlock?.BlockLength ?? 0); + // } + //} + //totbytes += PadSize(VerticesCount * (uint)Vertices.ItemSize); + //totbytes += PadSize(EdgesIndicesCount * (uint)Indices.ItemSize); + //totbytes += PadSize(EdgesIndicesCount * (uint)Edges.ItemSize); + //totbytes += PadSize(PolysCount * (uint)Polys.ItemSize); + ////totbytes += (uint)BlockLength; + //totbytes += (uint)Vertices.ListParts.BlockLength;//Vertices.ListPartsCount * 16; + //totbytes += (uint)Indices.ListParts.BlockLength;//Indices.ListPartsCount * 16; + //totbytes += (uint)Edges.ListParts.BlockLength;//Edges.ListPartsCount * 16; + //totbytes += (uint)Polys.ListParts.BlockLength;//Polys.ListPartsCount * 16; + //totbytes += (uint)(PortalsBlock?.BlockLength ?? 0);//PortalsCount * 28; + //totbytes += (uint)(PortalLinksBlock?.BlockLength ?? 0);//PortalLinksCount * 2; + //int remaining = ((int)TotalBytes) - ((int)totbytes); + //if (totbytes != TotalBytes) + //{ } + + writer.Write((uint)ContentFlags); writer.Write(VersionUnk1); writer.Write(Unused_018h); @@ -192,6 +225,12 @@ namespace CodeWalker.GameFiles writer.Write(Unused_16Ch); } + private uint PadSize(uint s) + { + const uint align = 16; + if ((s % align) != 0) s += (align - (s % align)); + return s; + } public override IResourceBlock[] GetReferences() { @@ -221,6 +260,15 @@ namespace CodeWalker.GameFiles } + + public void SetDefaults(bool vehicle) + { + VersionUnk1 = 0x00010011; + VersionUnk2 = vehicle ? 0 : 0x85CB3561; + Transform = Matrix.Identity; + } + + public override string ToString() { return "(Size: " + FloatUtil.GetVector3String(AABBSize) + ")"; @@ -325,6 +373,50 @@ namespace CodeWalker.GameFiles } } + public uint Get(uint i) + { + switch (i) + { + default: + case 0: return v00; + case 1: return v01; + case 2: return v02; + case 3: return v03; + case 4: return v04; + case 5: return v05; + case 6: return v06; + case 7: return v07; + case 8: return v08; + case 9: return v09; + case 10: return v10; + case 11: return v11; + case 12: return v12; + case 13: return v13; + case 14: return v14; + case 15: return v15; + case 16: return v16; + case 17: return v17; + case 18: return v18; + case 19: return v19; + case 20: return v20; + case 21: return v21; + case 22: return v22; + case 23: return v23; + case 24: return v24; + case 25: return v25; + case 26: return v26; + case 27: return v27; + case 28: return v28; + case 29: return v29; + case 30: return v30; + case 31: return v31; + } + } + + public void Set(uint[] arr) + { + Values = arr; + } public override string ToString() { @@ -459,7 +551,7 @@ namespace CodeWalker.GameFiles } ListParts = parts; ListOffsets = offsets.ToArray(); - + ItemCount = (uint)items.Count; } @@ -594,13 +686,15 @@ namespace CodeWalker.GameFiles [TypeConverter(typeof(ExpandableObjectConverter))] public struct NavMeshEdge { - public NavMeshEdgePart Unknown_0h { get; set; } - public NavMeshEdgePart Unknown_4h { get; set; } + public NavMeshEdgePart _Poly1; + public NavMeshEdgePart _Poly2; + public NavMeshEdgePart Poly1 { get { return _Poly1; } set { _Poly1 = value; } } + public NavMeshEdgePart Poly2 { get { return _Poly2; } set { _Poly2 = value; } } public override string ToString() { - return //Unknown_0h.Bin + " | " + Unknown_4h.Bin + " | " + - Unknown_0h.ToString() + " | " + Unknown_4h.ToString(); + return //Poly1.Bin + " | " + Poly2.Bin + " | " + + _Poly1.ToString() + " | " + _Poly2.ToString(); } } @@ -616,10 +710,10 @@ namespace CodeWalker.GameFiles } } - public uint AreaIDInd { get { return (Value >> 0) & 0x1F; } } - public uint PolyID { get { return (Value >> 5) & 0x3FFF; } } - public uint Unk2 { get { return (Value >> 19) & 0x3; } } - public uint Unk3 { get { return (Value >> 21) & 0x7FF; } } + public uint AreaIDInd { get { return (Value >> 0) & 0x1F; } set { Value = (Value & 0xFFFFFFE0) | (value & 0x1F); } } + public uint PolyID { get { return (Value >> 5) & 0x3FFF; } set { Value = (Value & 0xFFF8001F) | ((value & 0x3FFF) << 5); } } + public uint Unk2 { get { return (Value >> 19) & 0x3; } set { Value = (Value & 0xFFE7FFFF) | ((value & 0x3) << 19); } } + public uint Unk3 { get { return (Value >> 21) & 0x7FF; } set { Value = (Value & 0x001FFFFF) | ((value & 0x7FF) << 21); } } public override string ToString() { @@ -791,8 +885,8 @@ namespace CodeWalker.GameFiles public ushort[] PolyIDs { get; set; } public NavMeshPoint[] Points { get; set; } - private ResourceSystemStructBlock PolyIDsBlock = null; - private ResourceSystemStructBlock PointsBlock = null; + public ResourceSystemStructBlock PolyIDsBlock = null; + public ResourceSystemStructBlock PointsBlock = null; public override void Read(ResourceDataReader reader, params object[] parameters) { diff --git a/CodeWalker.Core/World/Space.cs b/CodeWalker.Core/World/Space.cs index 1505c0a..fbad2a2 100644 --- a/CodeWalker.Core/World/Space.cs +++ b/CodeWalker.Core/World/Space.cs @@ -2043,7 +2043,10 @@ namespace CodeWalker.World } - + public Vector3 GetCellRel(Vector3 p)//float value in cell coords + { + return (p - new Vector3(CornerX, CornerY, 0)) * CellSizeInv; + } public Vector2I GetCellPos(Vector3 p) { Vector3 ind = (p - new Vector3(CornerX, CornerY, 0)) * CellSizeInv; @@ -2069,7 +2072,15 @@ namespace CodeWalker.World } - + public Vector3 GetCellMin(SpaceNavGridCell cell) + { + Vector3 c = new Vector3(cell.X, cell.Y, 0); + return new Vector3(CornerX, CornerY, 0) + (c * CellSize); + } + public Vector3 GetCellMax(SpaceNavGridCell cell) + { + return GetCellMin(cell) + new Vector3(CellSize, CellSize, 0.0f); + } } public class SpaceNavGridCell From 4c131fa0af74ea74a1ab3540dfd03c48ea664ff1 Mon Sep 17 00:00:00 2001 From: dexyfex Date: Sun, 6 May 2018 14:55:54 +1000 Subject: [PATCH 010/158] Nav mesh progress --- .../FileTypes/Builders/YnvBuilder.cs | 52 ++++++++++++++----- .../GameFiles/FileTypes/YnvFile.cs | 19 +++++++ 2 files changed, 58 insertions(+), 13 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/Builders/YnvBuilder.cs b/CodeWalker.Core/GameFiles/FileTypes/Builders/YnvBuilder.cs index 1173ae4..9bba059 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/Builders/YnvBuilder.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/Builders/YnvBuilder.cs @@ -11,6 +11,30 @@ namespace CodeWalker.Core.GameFiles.FileTypes.Builders { public class YnvBuilder { + /* + * + * YnvBuilder by dexyfex + * + * This class allows for conversion of navmesh data in a generic format into .ynv files. + * The usage is to call AddPoly() with an array of vertex positions for each polygon. + * Polygons should be wound in an anticlockwise direction. + * The returned YnvPoly object needs to have its Edges array set by the importer. + * YnvPoly.Edges is an array of YnvEdge, with one edge for each vertex in the poly. + * The first edge should join the first and second vertices, and the last edge should + * join the last and first vertices. + * The YnvEdge Poly1 and Poly2 both need to be set to the same value, which is the + * corresponding YnvPoly object that was returned by AddPoly. + * Flags values on the polygons and edges also need to be set by the importer. + * + * Once the polygons and edges have all been added, the Build() method should be called, + * which will return a list of YnvFile objects. Call the Save() method on each of those + * to get the byte array for the .ynv file. The correct filename is given by the + * YnvFile.Name property. + * Note that the .ynv building process will split polygons that cross .ynv area borders, + * and assign all the new polygons into the correct .ynv's. + * + */ + private List PolyList = new List(); @@ -413,21 +437,23 @@ namespace CodeWalker.Core.GameFiles.FileTypes.Builders { if (edge.Poly1.AreaID != poly.AreaID) { - //edge._RawData._Poly2.Unk3 = 4;// edge._RawData._Poly2.Unk3 | 4; + edge._RawData._Poly1.Unk2 = 0;//crash without this + edge._RawData._Poly2.Unk2 = 0;//crash without this + edge._RawData._Poly2.Unk3 = 4;////// edge._RawData._Poly2.Unk3 | 4; + border = true; - //DEBUG don't join edges - edge.Poly1 = null; - edge.Poly2 = null; - edge.AreaID1 = 0x3FFF; - edge.AreaID2 = 0x3FFF; - edge._RawData._Poly1.PolyID = 0x3FFF; - edge._RawData._Poly2.PolyID = 0x3FFF; - edge._RawData._Poly1.Unk2 = 1; - edge._RawData._Poly2.Unk2 = 1; - edge._RawData._Poly1.Unk3 = 0; - edge._RawData._Poly2.Unk3 = 0; + ////DEBUG don't join edges + //edge.Poly1 = null; + //edge.Poly2 = null; + //edge.AreaID1 = 0x3FFF; + //edge.AreaID2 = 0x3FFF; + //edge._RawData._Poly1.PolyID = 0x3FFF; + //edge._RawData._Poly2.PolyID = 0x3FFF; + //edge._RawData._Poly1.Unk2 = 1; + //edge._RawData._Poly2.Unk2 = 1; + //edge._RawData._Poly1.Unk3 = 0; + //edge._RawData._Poly2.Unk3 = 0; - //border = true; } } } diff --git a/CodeWalker.Core/GameFiles/FileTypes/YnvFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YnvFile.cs index 5118acb..d36254c 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YnvFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YnvFile.cs @@ -48,6 +48,16 @@ namespace CodeWalker.GameFiles + //getters for property grids viewing of the lists + public Vector3[] AllVertices { get { return Vertices?.ToArray(); } } + public ushort[] AllIndices { get { return Indices?.ToArray(); } } + public YnvEdge[] AllEdges { get { return Edges?.ToArray(); } } + public YnvPoly[] AllPolys { get { return Polys?.ToArray(); } } + public YnvPortal[] AllPortals { get { return Portals?.ToArray(); } } + public YnvPoint[] AllPoints { get { return Points?.ToArray(); } } + + + public YnvFile() : base(null, GameFileType.Ynv) { @@ -216,6 +226,15 @@ namespace CodeWalker.GameFiles var vertdict = new Dictionary(); var areadict = new Dictionary(); var arealist = new List(); + var areaid = Nav.AreaID; + EnsureEdgeAreaID(areaid, areadict, arealist); + EnsureEdgeAreaID(0x3FFF, areadict, arealist); + EnsureEdgeAreaID(areaid - 100, areadict, arealist); + EnsureEdgeAreaID(areaid - 1, areadict, arealist); + EnsureEdgeAreaID(areaid + 1, areadict, arealist); + EnsureEdgeAreaID(areaid + 100, areadict, arealist); + + if (Polys != null) //rebuild vertices, indices, edges and polys lists from poly data. { From 0b6432ceffe1a6d9ac6ab5525a499a0f16dd13ef Mon Sep 17 00:00:00 2001 From: dexyfex Date: Sat, 2 Jun 2018 02:25:12 +1000 Subject: [PATCH 011/158] GenerateNavMeshPanel WIP --- .../FileTypes/Builders/YnvBuilder.cs | 4 + .../GameFiles/FileTypes/YnvFile.cs | 2 +- CodeWalker.Core/Utils/Utils.cs | 30 +- CodeWalker.Core/World/Space.cs | 19 +- CodeWalker.csproj | 9 + .../Panels/GenerateNavMeshPanel.Designer.cs | 146 ++ Project/Panels/GenerateNavMeshPanel.cs | 1253 +++++++++++++++++ Project/Panels/GenerateNavMeshPanel.resx | 418 ++++++ Project/ProjectForm.Designer.cs | 1015 ++++++------- Project/ProjectForm.cs | 11 + WorldForm.cs | 1 + 11 files changed, 2395 insertions(+), 513 deletions(-) create mode 100644 Project/Panels/GenerateNavMeshPanel.Designer.cs create mode 100644 Project/Panels/GenerateNavMeshPanel.cs create mode 100644 Project/Panels/GenerateNavMeshPanel.resx diff --git a/CodeWalker.Core/GameFiles/FileTypes/Builders/YnvBuilder.cs b/CodeWalker.Core/GameFiles/FileTypes/Builders/YnvBuilder.cs index 9bba059..557b8b6 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/Builders/YnvBuilder.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/Builders/YnvBuilder.cs @@ -386,6 +386,10 @@ namespace CodeWalker.Core.GameFiles.FileTypes.Builders ynv.Nav.SectorTree.AABBMax = new Vector4(NavGrid.GetCellMax(cell), 0.0f); ynv.AreaID = cell.X + cell.Y * 100; ynv.Polys = new List(); + ynv.HasChanged = true;//mark it for the project window + ynv.RpfFileEntry = new RpfResourceFileEntry(); + ynv.RpfFileEntry.Name = ynv.Name + ".ynv"; + ynv.RpfFileEntry.Path = string.Empty; cell.Ynv = ynv; YnvFiles.Add(ynv); } diff --git a/CodeWalker.Core/GameFiles/FileTypes/YnvFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YnvFile.cs index d36254c..3a75d8d 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YnvFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YnvFile.cs @@ -253,7 +253,7 @@ namespace CodeWalker.GameFiles { ind = (ushort)vertlist.Count; vertdict[v] = ind; - vertlist.Add(NavMeshVertex.Create((v - posoffset) * aabbsizeinv)); + vertlist.Add(NavMeshVertex.Create(Vector3.Clamp((v - posoffset) * aabbsizeinv, Vector3.Zero, Vector3.One))); } if ((poly.Indices != null) && (n < poly.Indices.Length)) { diff --git a/CodeWalker.Core/Utils/Utils.cs b/CodeWalker.Core/Utils/Utils.cs index 35d94eb..08b9204 100644 --- a/CodeWalker.Core/Utils/Utils.cs +++ b/CodeWalker.Core/Utils/Utils.cs @@ -140,21 +140,37 @@ namespace CodeWalker return string.Format("x=\"{0}\" y=\"{1}\" z=\"{2}\" w=\"{3}\"", q.X.ToString(c), q.Y.ToString(c), q.Z.ToString(c), q.W.ToString(c)); } + + public static Vector2 ParseVector2String(string s) + { + Vector2 p = new Vector2(0.0f); + string[] ss = s.Split(','); + if (ss.Length > 0) + { + TryParse(ss[0].Trim(), out p.X); + } + if (ss.Length > 1) + { + TryParse(ss[1].Trim(), out p.Y); + } + return p; + } + public static Vector3 ParseVector3String(string s) { Vector3 p = new Vector3(0.0f); string[] ss = s.Split(','); if (ss.Length > 0) { - FloatUtil.TryParse(ss[0].Trim(), out p.X); + TryParse(ss[0].Trim(), out p.X); } if (ss.Length > 1) { - FloatUtil.TryParse(ss[1].Trim(), out p.Y); + TryParse(ss[1].Trim(), out p.Y); } if (ss.Length > 2) { - FloatUtil.TryParse(ss[2].Trim(), out p.Z); + TryParse(ss[2].Trim(), out p.Z); } return p; } @@ -172,19 +188,19 @@ namespace CodeWalker string[] ss = s.Split(','); if (ss.Length > 0) { - FloatUtil.TryParse(ss[0].Trim(), out p.X); + TryParse(ss[0].Trim(), out p.X); } if (ss.Length > 1) { - FloatUtil.TryParse(ss[1].Trim(), out p.Y); + TryParse(ss[1].Trim(), out p.Y); } if (ss.Length > 2) { - FloatUtil.TryParse(ss[2].Trim(), out p.Z); + TryParse(ss[2].Trim(), out p.Z); } if (ss.Length > 3) { - FloatUtil.TryParse(ss[3].Trim(), out p.W); + TryParse(ss[3].Trim(), out p.W); } return p; } diff --git a/CodeWalker.Core/World/Space.cs b/CodeWalker.Core/World/Space.cs index fbad2a2..44ec6db 100644 --- a/CodeWalker.Core/World/Space.cs +++ b/CodeWalker.Core/World/Space.cs @@ -1199,7 +1199,7 @@ namespace CodeWalker.World } - public SpaceRayIntersectResult RayIntersect(Ray ray, float maxdist = float.MaxValue) + public SpaceRayIntersectResult RayIntersect(Ray ray, float maxdist = float.MaxValue, bool[] layers = null) { var res = new SpaceRayIntersectResult(); if (GameFileCache == null) return res; @@ -1225,6 +1225,7 @@ namespace CodeWalker.World float polyhittestdist = 0; bool hit = false; BoundPolygon hitpoly = null; + BoundMaterial_s hitmat = new BoundMaterial_s(); Vector3 hitnorm = Vector3.Zero; Vector3 hitpos = Vector3.Zero; while (cell != null) @@ -1233,6 +1234,12 @@ namespace CodeWalker.World { foreach (var bound in cell.BoundsList) { + uint l = bound.Layer; + if ((layers != null) && (l < 3)) + { + if (!layers[l]) continue; + } + box.Minimum = bound.Min; box.Maximum = bound.Max; float boxhitdisttest; @@ -1395,6 +1402,10 @@ namespace CodeWalker.World hit = true; hitnorm = n1; hitpoly = polygon; + + byte matind = ((bgeom.PolygonMaterialIndices != null) && (p < bgeom.PolygonMaterialIndices.Length)) ? bgeom.PolygonMaterialIndices[p] : (byte)0; + BoundMaterial_s mat = ((bgeom.Materials != null) && (matind < bgeom.Materials.Length)) ? bgeom.Materials[matind] : new BoundMaterial_s(); + hitmat = mat; } polytestcount++; } @@ -1474,6 +1485,7 @@ namespace CodeWalker.World res.Hit = hit; res.HitDist = itemhitdist; res.HitPolygon = hitpoly; + res.Material = hitmat; res.Position = hitpos; res.Normal = hitnorm; @@ -1731,7 +1743,7 @@ namespace CodeWalker.World public const int CellCount = 500; //cells along a side, total cell count is this squared public const int LastCell = CellCount - 1; //the last cell index in the array public const float WorldSize = 10000.0f; //max world grid size +/- 10000 units - public const float CellSize = 2.0f * WorldSize / (float)CellCount;//20.0f; //size of a cell + public const float CellSize = 2.0f * WorldSize / (float)CellCount;//40.0f; //size of a cell public const float CellSizeInv = 1.0f / CellSize; //inverse of the cell size. public const float CellSizeHalf = CellSize * 0.5f; //half the cell size @@ -2013,7 +2025,7 @@ namespace CodeWalker.World public float CellSizeInv; //inverse of the cell size. public int CellCountX = 100; public int CellCountY = 100; - public float CornerX = -6000.0f; + public float CornerX = -6000.0f;//max = -6000+(100*150) = 9000 public float CornerY = -6000.0f; public SpaceNavGrid() @@ -2117,6 +2129,7 @@ namespace CodeWalker.World public int TestedNodeCount; public int TestedPolyCount; public bool TestComplete; + public BoundMaterial_s Material; } public struct SpaceSphereIntersectResult { diff --git a/CodeWalker.csproj b/CodeWalker.csproj index 6d2938e..3c3fb47 100644 --- a/CodeWalker.csproj +++ b/CodeWalker.csproj @@ -388,6 +388,12 @@ EditYtypPanel.cs + + Form + + + GenerateNavMeshPanel.cs + Form @@ -626,6 +632,9 @@ EditYtypPanel.cs + + GenerateNavMeshPanel.cs + ProjectExplorerPanel.cs diff --git a/Project/Panels/GenerateNavMeshPanel.Designer.cs b/Project/Panels/GenerateNavMeshPanel.Designer.cs new file mode 100644 index 0000000..270ce69 --- /dev/null +++ b/Project/Panels/GenerateNavMeshPanel.Designer.cs @@ -0,0 +1,146 @@ +namespace CodeWalker.Project.Panels +{ + partial class GenerateNavMeshPanel + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GenerateNavMeshPanel)); + this.MinTextBox = new System.Windows.Forms.TextBox(); + this.label81 = new System.Windows.Forms.Label(); + this.MaxTextBox = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.GenerateButton = new System.Windows.Forms.Button(); + this.label3 = new System.Windows.Forms.Label(); + this.StatusLabel = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // MinTextBox + // + this.MinTextBox.Location = new System.Drawing.Point(87, 131); + this.MinTextBox.Name = "MinTextBox"; + this.MinTextBox.Size = new System.Drawing.Size(177, 20); + this.MinTextBox.TabIndex = 46; + this.MinTextBox.Text = "0, 0"; + // + // label81 + // + this.label81.AutoSize = true; + this.label81.Location = new System.Drawing.Point(22, 134); + this.label81.Name = "label81"; + this.label81.Size = new System.Drawing.Size(56, 13); + this.label81.TabIndex = 47; + this.label81.Text = "Min: (X, Y)"; + // + // MaxTextBox + // + this.MaxTextBox.Location = new System.Drawing.Point(87, 157); + this.MaxTextBox.Name = "MaxTextBox"; + this.MaxTextBox.Size = new System.Drawing.Size(177, 20); + this.MaxTextBox.TabIndex = 48; + this.MaxTextBox.Text = "100, 100"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(22, 160); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(59, 13); + this.label1.TabIndex = 49; + this.label1.Text = "Max: (X, Y)"; + // + // label2 + // + this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.label2.Location = new System.Drawing.Point(12, 9); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(598, 119); + this.label2.TabIndex = 50; + this.label2.Text = resources.GetString("label2.Text"); + // + // GenerateButton + // + this.GenerateButton.Location = new System.Drawing.Point(87, 196); + this.GenerateButton.Name = "GenerateButton"; + this.GenerateButton.Size = new System.Drawing.Size(75, 23); + this.GenerateButton.TabIndex = 51; + this.GenerateButton.Text = "Generate"; + this.GenerateButton.UseVisualStyleBackColor = true; + this.GenerateButton.Click += new System.EventHandler(this.GenerateButton_Click); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(279, 146); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(235, 13); + this.label3.TabIndex = 52; + this.label3.Text = "(Nav meshes will only be generated for this area)"; + // + // StatusLabel + // + this.StatusLabel.AutoSize = true; + this.StatusLabel.Location = new System.Drawing.Point(84, 247); + this.StatusLabel.Name = "StatusLabel"; + this.StatusLabel.Size = new System.Drawing.Size(95, 13); + this.StatusLabel.TabIndex = 53; + this.StatusLabel.Text = "Ready to generate"; + // + // GenerateNavMeshPanel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(622, 340); + this.Controls.Add(this.StatusLabel); + this.Controls.Add(this.label3); + this.Controls.Add(this.GenerateButton); + this.Controls.Add(this.label2); + this.Controls.Add(this.MaxTextBox); + this.Controls.Add(this.label1); + this.Controls.Add(this.MinTextBox); + this.Controls.Add(this.label81); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "GenerateNavMeshPanel"; + this.Text = "Generate Nav Meshes"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox MinTextBox; + private System.Windows.Forms.Label label81; + private System.Windows.Forms.TextBox MaxTextBox; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button GenerateButton; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label StatusLabel; + } +} \ No newline at end of file diff --git a/Project/Panels/GenerateNavMeshPanel.cs b/Project/Panels/GenerateNavMeshPanel.cs new file mode 100644 index 0000000..b140713 --- /dev/null +++ b/Project/Panels/GenerateNavMeshPanel.cs @@ -0,0 +1,1253 @@ +using CodeWalker.Core.GameFiles.FileTypes.Builders; +using CodeWalker.GameFiles; +using CodeWalker.World; +using SharpDX; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using WeifenLuo.WinFormsUI.Docking; + +namespace CodeWalker.Project.Panels +{ + public partial class GenerateNavMeshPanel : ProjectPanel + { + public ProjectForm ProjectForm { get; set; } + public ProjectFile CurrentProjectFile { get; set; } + + public GenerateNavMeshPanel(ProjectForm projectForm) + { + ProjectForm = projectForm; + InitializeComponent(); + Tag = "GenerateNavMeshPanel"; + + if (ProjectForm?.WorldForm == null) + { + //could happen in some other startup mode - world form is required for this.. + GenerateButton.Enabled = false; + UpdateStatus("Unable to generate - World View not available!"); + } + } + + public void SetProject(ProjectFile project) + { + CurrentProjectFile = project; + + + + } + + private void GenerateButton_Click(object sender, EventArgs e) + { + var space = ProjectForm?.WorldForm?.Space; + if (space == null) return; + var gameFileCache = ProjectForm?.WorldForm?.GameFileCache; + if (gameFileCache == null) return; + + Vector2 min = FloatUtil.ParseVector2String(MinTextBox.Text); + Vector2 max = FloatUtil.ParseVector2String(MaxTextBox.Text); + + if (min == max) + { + MessageBox.Show("Unable to generate - No valid area was specified!\nMake sure Min and Max form a box around the area you want to generate the nav meshes for."); + return; + } + + if ((min.X < -6000) || (min.Y < -6000) || (max.X > 9000) || (max.Y > 9000))//it's over 9000 + { + if (MessageBox.Show("Warning: min/max goes outside the possible navmesh area - valid range is from -6000 to 9000 (X and Y).\nDo you want to continue anyway?", "Warning - specified area out of range", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return; + } + } + + //if (string.IsNullOrEmpty(ProjectForm?.CurrentProjectFile?.Filepath)) + //{ + // MessageBox.Show("Please save the current project first. Generated navmeshes will be placed in the project folder."); + // return; + //} + + var path = ProjectForm.CurrentProjectFile.GetFullFilePath("navmeshes") + "\\"; + + GenerateButton.Enabled = false; + + + + float density = 0.5f; //distance between vertices for the initial grid + //float clipdz = 0.5f; //any polygons with greater steepness should be removed + + Vector2I imin = space.Grid.GetCellPos(new Vector3(min, 0)); + Vector2I imax = space.Grid.GetCellPos(new Vector3(max, 0)); + + //Vector2 vertexCounts = (max - min) / density; + //int vertexCountX = (int)vertexCounts.X; + //int vertexCountY = (int)vertexCounts.Y; + //int vertexCountTot = vertexCountX * vertexCountY; + + var layers = new[] { true, false, false }; //collision layers to use + + int hitTestCount = 0; //statistic for number of hit tests done + int hitCount = 0;//statistic for total ray hits + int newCount = 0;//statistic for total new control vertices + + Task.Run(() => + { + + + //find vertices in one world cell at a time, by raycasting in a grid pattern. + //then filter those based on polygon slope deltas (and materials) to reduce the detail. + //then add the generated verts for the cell into a master quadtree/bvh/grid + //after all verts are generated, do voronoi tessellation with those to generate the nav polys. + //finally, remove any polys that are steeper than the threshold. + + + var vgrid = new VertexGrid(); + var vert = new GenVertex(); + var builder = new YnvBuilder(); + + for (int x = imin.X; x <= imax.X; x++) //generate verts for each world cell + { + for (int y = imin.Y; y <= imax.Y; y++) + { + Vector2I gi = new Vector2I(x, y); + var cell = space.Grid.GetCell(gi); + var cellstr = gi.ToString(); + var cellmin = space.Grid.GetWorldPos(gi); + var cellmax = cellmin + SpaceGrid.CellSize; + var vertexCountXY = (cellmax - cellmin) / density; + int vertexCountX = (int)vertexCountXY.X; + int vertexCountY = (int)vertexCountXY.Y; + //int vertexCountTot = vertexCountX * vertexCountY; + vgrid.BeginGrid(vertexCountX, vertexCountY); + cellmin.Z = 0.0f;//min probably not needed here + cellmax.Z = 0.0f; + Ray ray = new Ray(Vector3.Zero, new Vector3(0, 0, -1));//for casting with + + UpdateStatus("Loading cell " + cellstr + " ..."); + + //pre-warm the bounds cache for this cell, and find the min/max Z + if (cell.BoundsList != null) + { + foreach (var boundsitem in cell.BoundsList) + { + YbnFile ybn = gameFileCache.GetYbn(boundsitem.Name); + if (ybn == null) + { continue; } //ybn not found? + if (!ybn.Loaded) //ybn not loaded yet... + { + UpdateStatus("Loading ybn: " + boundsitem.Name.ToString() + " ..."); + int waitCount = 0; + while (!ybn.Loaded) + { + waitCount++; + if (waitCount > 10000) + { + UpdateStatus("Timeout waiting for ybn " + boundsitem.Name.ToString() + " to load!"); + Thread.Sleep(1000); //just to let the message display for a second... + break; + } + Thread.Sleep(20);//~50fps should be fine + } + } + if (ybn.Loaded && (ybn.Bounds != null)) + { + cellmin.Z = Math.Min(cellmin.Z, ybn.Bounds.BoundingBoxMin.Z); + cellmax.Z = Math.Max(cellmax.Z, ybn.Bounds.BoundingBoxMax.Z); + } + } + } + + + + //ray-cast each XY vertex position, and find the height and surface from ybn's + //continue casting down to find more surfaces... + + UpdateStatus("Processing cell " + cellstr + " ..."); + + for (int vx = 0; vx < vertexCountX; vx++) + { + for (int vy = 0; vy < vertexCountY; vy++) + { + vgrid.BeginCell(vx, vy); + var vcoffset = new Vector3(vx, vy, 0) * density; + ray.Position = cellmin + vcoffset; + ray.Position.Z = cellmax.Z + 1.0f;//start the ray at the top of the cell + var intres = space.RayIntersect(ray, float.MaxValue, layers); + hitTestCount++; + while (intres.Hit && (intres.HitDist > 0)) + { + hitCount++; + vert.Position = intres.Position; + vert.Normal = intres.Normal; + vert.Material = intres.Material.Type; + vert.PolyFlags = intres.Material.PolyFlags; + vert.PrevIDX = -1; + vert.PrevIDY = -1; + vert.NextIDX = -1; + vert.NextIDY = -1; + vert.CompPrevX = false; + vert.CompPrevY = false; + vert.CompNextX = false; + vert.CompNextY = false; + vert.PolyID = -1; + vgrid.AddVertex(ref vert); + + //continue down until no more hits..... step by 3m + if (vgrid.CurVertexCount > 15) //too many hits? + { break; } + ray.Position.Z = intres.Position.Z - 3.0f; + intres = space.RayIntersect(ray, float.MaxValue, layers); + } + vgrid.EndCell(vx, vy); + } + } + + vgrid.EndGrid(); //build vertex array + + + + + + vgrid.ConnectVertices(); + + + var polys = vgrid.GenPolys(); + newCount += polys.Count; + + foreach (var poly in polys) + { + if (poly.Vertices == null) continue; + + var ypoly = builder.AddPoly(poly.Vertices); + + + ypoly.B02_IsFootpath = (poly.Material.Index == 1); + + ypoly.B18_IsRoad = (poly.Material.Index == 4);//4,5,6 + + + } + + } + } + + + + + var ynvs = builder.Build(false);//todo:vehicles! + + + foreach (var ynv in ynvs) + { + var bytes = ynv.Save(); + var fpath = path + ynv.Name + ".ynv"; + //File.WriteAllBytes(fpath, bytes); + + YnvFile nynv = new YnvFile(); + nynv.RpfFileEntry = new RpfResourceFileEntry(); + nynv.RpfFileEntry.Name = ynv.Name + ".ynv"; + nynv.FilePath = fpath; + nynv.Name = ynv.RpfFileEntry.Name; + nynv.Load(bytes); + + + ProjectForm.Invoke((MethodInvoker) delegate + { + ProjectForm.AddYnvToProject(nynv); + }); + } + + + + var statf = "{0} hit tests, {1} hits, {2} new polys"; + var stats = string.Format(statf, hitTestCount, hitCount, newCount); + UpdateStatus("Process complete. " + stats); + GenerateComplete(); + }); + } + + + + + private struct GenVertex + { + public Vector3 Position; + public Vector3 Normal; + public BoundsMaterialType Material; + public ushort PolyFlags; + + public int PrevIDX; + public int PrevIDY; + public int NextIDX; + public int NextIDY; + public bool CompPrevX; + public bool CompPrevY; + public bool CompNextX; + public bool CompNextY; + public int PolyID; + + } + + private class GenEdge + { + //public GenPoly From; + //public GenPoly To; + } + + private class GenPoly + { + public int Index; + public Vector3 Normal; + public BoundsMaterialType Material; + public ushort PolyFlags; + + public int[] CornerIndices; + public Vector3[] Vertices; + //public GenEdge[] Edges; + } + + private class VertexGrid + { + public List VertexList = new List(); + public GenVertex[] Vertices; + public int[,] VertexOffsets; + public int[,] VertexCounts; + public int VertexCountX; + public int VertexCountY; + public int CurVertexCount; + + private List CornersB = new List(); + private List CornersT = new List(); + + + public void BeginGrid(int vertexCountX, int vertexCountY) + { + VertexList.Clear(); + Vertices = null; + VertexOffsets = new int[vertexCountX, vertexCountY]; + VertexCounts = new int[vertexCountX, vertexCountY]; + VertexCountX = vertexCountX; + VertexCountY = vertexCountY; + } + public void EndGrid() + { + Vertices = VertexList.ToArray(); + } + + public void BeginCell(int x, int y) + { + VertexOffsets[x, y] = VertexList.Count; + CurVertexCount = 0; + } + public void EndCell(int x, int y) + { + VertexCounts[x, y] = CurVertexCount; + } + + public void AddVertex(ref GenVertex v) + { + VertexList.Add(v); + CurVertexCount++; + } + + public int FindVertex(int x, int y, float z, float thresh) + { + //return the index of the closest vertex in the x,y cell that is within the Z threshold + + int offset = VertexOffsets[x, y]; + int count = VertexCounts[x, y]; + int lasti = offset + count; + + float minz = float.MaxValue; + int mini = -1; + for (int i = offset; i < lasti; i++) + { + float vz = Vertices[i].Position.Z; + float dz = Math.Abs(vz - z); + if ((dz < thresh) && (dz < minz)) + { + minz = dz; + mini = i; + } + } + + return mini; + } + + + + public bool CompareVertexTypes(int i1, int i2) + { + if (Vertices[i1].Material.Index != Vertices[i2].Material.Index) return false; + if (Vertices[i1].PolyFlags != Vertices[i2].PolyFlags) return false; + return true; + } + + + + + + public void ConnectVertices() + { + var connectThresh = 0.2f; + var density = 0.5f;//to match vertex density (x/y distance) + for (int vx = 1; vx < VertexCountX; vx++) + { + int px = vx - 1; + for (int vy = 1; vy < VertexCountY; vy++) + { + int py = vy - 1; + int imin = VertexOffsets[vx, vy]; + int imax = VertexCounts[vx, vy] + imin; + for (int i = imin; i < imax; i++) + { + var vz = Vertices[i].Position.Z; + var vn = Vertices[i].Normal; + var vxz = vz + (vn.X / Math.Max(vn.Z, 1e-5f)) * density; + var vyz = vz + (vn.Y / Math.Max(vn.Z, 1e-5f)) * density; + var prevIDX = FindVertex(px, vy, vxz, connectThresh); + var prevIDY = FindVertex(vx, py, vyz, connectThresh); + var compPrevX = (prevIDX < 0) ? false : CompareVertexTypes(i, prevIDX); + var compPrevY = (prevIDY < 0) ? false : CompareVertexTypes(i, prevIDY); + Vertices[i].PrevIDX = prevIDX; + Vertices[i].PrevIDY = prevIDY; + Vertices[i].CompPrevX = compPrevX; + Vertices[i].CompPrevY = compPrevY; + if (prevIDX >= 0) + { + Vertices[prevIDX].NextIDX = i; + Vertices[prevIDX].CompNextX = compPrevX; + } + if (prevIDY >= 0) + { + Vertices[prevIDY].NextIDY = i; + Vertices[prevIDY].CompNextY = compPrevY; + } + } + } + } + + } + + + + + public List GenPolys() + { + List polys = new List(); + + //find new polygon edges and assign grid vertices + for (int vx = 0; vx < VertexCountX; vx++) + { + for (int vy = 0; vy < VertexCountY; vy++) + { + int imin = VertexOffsets[vx, vy]; + int imax = VertexCounts[vx, vy] + imin; + for (int i = imin; i < imax; i++) + { + if (Vertices[i].PolyID >= 0) continue; //already assigned + + if ((Vertices[i].PrevIDX < 0) && (Vertices[i].PrevIDY < 0) && (Vertices[i].NextIDX < 0) && (Vertices[i].NextIDY < 0)) continue; //(not connected to anything) + + //if (!(Vertices[i].CompPrevX || Vertices[i].CompPrevY || Vertices[i].CompNextX || Vertices[i].CompNextY)) //continue; //all joins are different - discard this vertex + + + + + + GenPoly poly = new GenPoly(); //start a new poly + poly.Index = polys.Count; + poly.Normal = Vertices[i].Normal; + poly.Material = Vertices[i].Material; + poly.PolyFlags = Vertices[i].PolyFlags; + //polys.Add(poly); + //poly.AddGenVert(i); + //Vertices[i].PolyID = poly.Index; + Plane vplane = new Plane(Vertices[i].Position, Vertices[i].Normal); + float plthresh = 0.25f; //threshold for plane dist test + + int dpx = FindPolyEdgeDist(ref vplane, plthresh, i, 0); + int dpy = FindPolyEdgeDist(ref vplane, plthresh, i, 1); + int dnx = FindPolyEdgeDist(ref vplane, plthresh, i, 2); + int dny = FindPolyEdgeDist(ref vplane, plthresh, i, 3); + + bool addpoly = true; + + int qnx = 0, qny = 0, qpy = 0, qdir = 0; + if ((dpx == 0) && (dpy == 0) && (dnx == 0) && (dny == 0)) + { + //single vertex poly... connect to something else? currently remove + addpoly = false; + } + else if ((dpx >= dnx) && (dpx >= dpy) && (dpx >= dny)) + { + //dpx is largest, move along -X (dpx, dpy, dny, 0) + qnx = dpx; + qny = dpy; + qpy = dny; + qdir = 0; + } + else if ((dpy >= dnx) && (dpy >= dny)) + { + //dpy is largest, move along -Y (dpy, dnx, dpx, 1) + qnx = dpy; + qny = dnx; + qpy = dpx; + qdir = 1; + } + else if ((dnx >= dny)) + { + //dnx is largest, move along +X (dnx, dny, dpy, 2) + qnx = dnx; + qny = dny; + qpy = dpy; + qdir = 2; + } + else + { + //dny is largest, move along +Y (dny, dpx, dnx, 3) + qnx = dny; + qny = dpx; + qpy = dnx; + qdir = 3; + } + if (addpoly) + { + AssignVertices2(ref vplane, plthresh, i, qnx, qny, qpy, qdir, poly); + if (poly.CornerIndices?.Length > 2) + { + polys.Add(poly); + } + } + + + + //if (dnx > 0) //can move along +X + //{ + // AssignVertices(ref vplane, plthresh, i, dnx, dny, dpy, 2, poly); + //} + //else if (dny > 0) //can move along +Y + //{ + // AssignVertices(ref vplane, plthresh, i, dny, dpx, dnx, 3, poly); + //} + //else if (dpx > 0) //can move along -X + //{ + // AssignVertices(ref vplane, plthresh, i, dpx, dpy, dny, 0, poly); + //} + //else if (dpy > 0) //can move along -Y + //{ + // AssignVertices(ref vplane, plthresh, i, dpy, dnx, dpx, 1, poly); + //} + //else //single vertex poly... connected to something else + //{ + // addpolys = false; + //} + //if (addpolys) + //{ + // polys.Add(poly); + //} + + + + + } + } + + } + + + //create corner vertex vectors and edges for the new polys + foreach (var poly in polys) + { + if (poly.CornerIndices == null) continue; + if (poly.CornerIndices.Length < 3) continue; + + var verts = new Vector3[poly.CornerIndices.Length]; + + for (int i = 0; i < poly.CornerIndices.Length; i++) + { + int id = poly.CornerIndices[i]; + + verts[i] = Vertices[id].Position;//TODO: find actual corners + } + + poly.Vertices = verts; + + } + + + return polys; + } + + + private void AssignVertices(ref Plane vpl, float plt, int i, int dnx, int dny, int dpy, int dir, GenPoly poly) + { + int pid = poly.Index; + int qi = i; + int maxdnx = Math.Min(dnx, 40); + int maxdpy = 50;// dpy;// + int maxdny = 50;// dny;// + int cdpy = dpy; + int cdny = dny; + int vertexCountP = 0; + int vertexCountN = 0; + int lastqx = 0; + int lastqi = i; + CornersB.Clear(); + CornersT.Clear(); + + + int dirpy, dirny; + switch (dir) //lookup perpendicular directions + { + default: + case 0: dirpy = 3; dirny = 1; break; + case 1: dirpy = 0; dirny = 2; break; + case 2: dirpy = 1; dirny = 3; break; + case 3: dirpy = 2; dirny = 0; break; + } + + + for (int qx = 0; qx <= maxdnx; qx++)//go along the row until the next poly is hit... + { + lastqi = qi; + int qipy = qi;//bottom vertex id for this column + int qiny = qi;//top vertex id for this column + for (int qy = 0; qy <= cdpy; qy++)//assign this row of verts to the poly + { + Vertices[qipy].PolyID = pid; + vertexCountP++; + + if (qy < cdpy) qipy = GetNextID(qipy, dirpy); + } + for (int qy = 0; qy <= cdny; qy++) + { + Vertices[qiny].PolyID = pid; + vertexCountN++; + + if (qy < cdny) qiny = GetNextID(qiny, dirny); + } + + qi = GetNextID(qi, dir); //move on to the next column... + + if (qx == dnx)//last column + { + if (qipy != lastqi) CornersB.Add(qipy);//lastqi will be added anyway, don't duplicate it + if (qiny != lastqi) CornersT.Add(qiny); + break; + } + if (qi < 0)//can't go any further.. most likely hit the end + { break; }//(shouldn't hit here because of above break) + + if (Vertices[qi].PolyID >= 0) //already assigned to a poly.. stop! + { break; }//(shouldn't hit here because maxdnx shouldn't go that far!) + + int ndpy = FindPolyEdgeDist(ref vpl, plt, qi, dirpy);//height for the next col.. + int ndny = FindPolyEdgeDist(ref vpl, plt, qi, dirny); + int ddpy = ndpy - cdpy; + int ddny = ndny - cdny; + + //TODO: step further along to find slope fraction if eg ddpy==0 + if (ddpy > maxdpy/*+1*/) ddpy = maxdpy/*+1*/;//########### BAD + else if (ddpy < maxdpy) //bottom corner vertex + { + maxdpy = ddpy; + CornersB.Add(qipy); + } + if (ddny > maxdny/*+1*/) ddny = maxdny/*+1*/;//########### BAD + else if (ddny < maxdny) //top corner vertex.. + { + maxdny = ddny; + CornersT.Add(qiny); + } + cdpy = cdpy + ddpy; //update comparison distances with limits, for next loop + cdny = cdny + ddny; + if ((cdpy < 0) || (cdny < 0))//can't go any further.. limit slope hit the axis + { + if (qipy != lastqi) CornersB.Add(qipy);//lastqi will be added anyway, don't duplicate it + if (qiny != lastqi) CornersT.Add(qiny); + break; + } + + + lastqx = qx; + } + + var totverts = vertexCountN + vertexCountP; + var fracused = (float)(lastqx+1) / dnx; + + CornersB.Add(lastqi); + int cc = CornersB.Count + CornersT.Count - 1; + int[] corners = new int[cc]; + int ci = 0; + for (int c = 0; c < CornersB.Count; c++) + { + corners[ci] = CornersB[c]; ci++; + } + for (int c = CornersT.Count - 1; c > 0; c--) + { + corners[ci] = CornersT[c]; ci++; + } + poly.CornerIndices = corners; + if (corners.Length < 3) + { }//debug + } + + + private void AssignVertices2(ref Plane vpl, float plt, int i, int dnx, int dny, int dpy, int dir, GenPoly poly) + { + int pid = poly.Index; + int qi = i; + //int maxdnx = Math.Min(dnx, 40); + //int maxdpy = 50;// dpy;// + //int maxdny = 50;// dny;// + //int cdpy = dpy; + //int cdny = dny; + //int vertexCountP = 0; + //int vertexCountN = 0; + //int lastqx = 0; + //int lastqi = i; + CornersB.Clear(); + CornersT.Clear(); + + + int dirpy, dirny, dirpx; + switch (dir) //lookup perpendicular directions + { + default: + case 0: dirpy = 3; dirny = 1; dirpx = 2; break; + case 1: dirpy = 0; dirny = 2; dirpx = 3; break; + case 2: dirpy = 1; dirny = 3; dirpx = 0; break; + case 3: dirpy = 2; dirny = 0; dirpx = 1; break; + } + + int ti = i; + while (CanPolyIncludeNext(ref vpl, plt, ti, dirpx, out ti)) + { + qi = ti; //make sure to start at the leftmost point... + } + + + + //loop until top and bottom lines intersect, or moved more than max dist + + float slopeb = FindSlope(ref vpl, plt, qi, dir, dirpy, dirny, 100); + float slopet = FindSlope(ref vpl, plt, qi, dir, dirny, dirpy, 100); + int syb = MaxOffsetFromSlope(slopeb); + int syt = MaxOffsetFromSlope(slopet); + int ony = 0; + int ldyb = 0; + int ldyt = 0; + int corndxb = 0; + int corndxt = 0; + + for (int x = 0; x < 50; x++) + { + + + //fill the column (assign the verts to this poly) + int qib = qi; + int qit = qi; + int dyb = 0; + int dyt = 0; + int nyb = ldyb + syb; + int nyt = ldyt + syt; + for (int yb = 0; yb <= nyb; yb++) + { + if (!CanPolyIncludeNext(ref vpl, plt, qib, dirpy, out ti)) break; + Vertices[ti].PolyID = pid; + qib = ti; + dyb++; + } + for (int yt = 0; yt <= nyt; yt++) + { + if (!CanPolyIncludeNext(ref vpl, plt, qit, dirny, out ti)) break; + Vertices[ti].PolyID = pid; + qit = ti; + dyt++; + } + + + //move on to the next column + //find the start point (and y offset) for the next column + //if none found, can't go further + + int nxi = qi; + bool cgx = CanPolyIncludeNext(ref vpl, plt, qi, dir, out nxi); + if (!cgx) + { + int ybi = qi; + for (int yb = 0; yb <= dyb; yb++) + { + ybi = GetNextID(ybi, dirpy); + ony--; + if (CanPolyIncludeNext(ref vpl, plt, ybi, dir, out nxi)) + { + cgx = true; + break; + } + } + } + if (!cgx) + { + int yti = qi; + for (int yt = 0; yt <= dyt; yt++) + { + yti = GetNextID(yti, dirny); + ony++; + if (CanPolyIncludeNext(ref vpl, plt, yti, dir, out nxi)) + { + cgx = true; + break; + } + } + } + if (!cgx) + { + //can't go further... end of the poly + break; + } + if (nxi < 0) + { break; }//shouldn't happen? + + + int nextyb; + int nextyt; + int nextib = FindPolyEdgeID(ref vpl, plt, nxi, dirpy, out nextyb); + int nextit = FindPolyEdgeID(ref vpl, plt, nxi, dirny, out nextyt); + + //int remyb = nyb - dyb; + //int remyt = nyt - dyt; + //int compyb = nextyb - ony; + //int compyt = nextyt + ony; + //int predyb = dyb + syb + ony; + //int predyt = dyt + syt - ony; + + int nextsyb = nextyb - ony - dyb; + int nextsyt = nextyt + ony - dyt; + + corndxb++; + corndxt++; + + bool iscornerb = false; + + if (slopeb > 1) + { + if (nextsyb < syb) iscornerb = true; + if (nextsyb > syb) nextsyb = syb; + } + else if (slopeb == 1) + { + if (nextsyb < syb) iscornerb = true; + if (nextsyb > 1) nextsyb = 1; + } + else if (slopeb > 0) + { + + } + else if (slopeb == 0) + { + if (nextsyb < 0) iscornerb = true; + if (nextsyb > 0) nextsyb = 0; + } + else if (slopeb > -1) + { + } + else if (slopeb == -1) + { + } + else // (slopeb < -1) + { + if (nextsyb < syb) iscornerb = true; + if (nextsyb > syb) nextsyb = syb; + } + + + + + + qi = nxi; + syb = nextsyb;// nextyb - dyb; + syt = nextsyt;// nextyt - dyt; + ldyb = dyb; + ldyt = dyt; + + //find top/bottom max dists and limit them according to slope + //check if slopes intersect at this column, stop if they do + + + } + + + + + } + + + + private int MaxOffsetFromSlope(float s) + { + if (s >= 1) return (int)s; + if (s > 0) return 1; + if (s > -1) return 0; + return -1; + + //return ((s>=1)||(s<=-1))?(int)s : (s>0)?1 : (s<0)?-1 : 0; + } + + + private int GetNextID(int i, int dir) + { + switch (dir) + { + default: + case 0: return Vertices[i].PrevIDX; + case 1: return Vertices[i].PrevIDY; + case 2: return Vertices[i].NextIDX; + case 3: return Vertices[i].NextIDY; + } + } + private bool CanPolyIncludeNext(ref Plane vplane, float plthresh, int i, int dir, out int ni) + { + bool ct; + switch (dir) + { + default: + case 0: ni = Vertices[i].PrevIDX; ct = Vertices[i].CompPrevX; break; + case 1: ni = Vertices[i].PrevIDY; ct = Vertices[i].CompPrevY; break; + case 2: ni = Vertices[i].NextIDX; ct = Vertices[i].CompNextX; break; + case 3: ni = Vertices[i].NextIDY; ct = Vertices[i].CompNextY; break; + } + if (ni < 0) return false; //not connected + if (!ct) return false; //next one is a different type + + if (Vertices[ni].PolyID >= 0) + { return false; } //already assigned a poly.. + + var npdist = Math.Abs(Plane.DotCoordinate(vplane, Vertices[ni].Position)); + return (npdist <= plthresh); + } + + private int FindPolyEdgeDist(ref Plane vplane, float plthresh, int i, int dir) + { + //d: 0=prevX, 1=prevY, 2=nextX, 3=nextY + + //find how many cells are between given vertex(id) and the edge of a poly, + //in the specified direction + + int dist = 0; + int ci = i; + + while (dist < 100) + { + int ni; + if (!CanPolyIncludeNext(ref vplane, plthresh, ci, dir, out ni)) break; + ci = ni; + dist++; + } + + return dist; + } + private int FindPolyEdgeID(ref Plane vplane, float plthresh, int i, int dir) + { + //d: 0=prevX, 1=prevY, 2=nextX, 3=nextY + + //find the last id of a vertex contained in this poly, starting from i, + //in the specified direction + + int dist = 0; + int ci = i; + + while (dist < 100) + { + int ni; + if (!CanPolyIncludeNext(ref vplane, plthresh, ci, dir, out ni)) break; + ci = ni; + dist++; + } + + return ci; + } + private int FindPolyEdgeID(ref Plane vplane, float plthresh, int i, int dir, out int dist) + { + //d: 0=prevX, 1=prevY, 2=nextX, 3=nextY + + //find how many cells are between given vertex(id) and the edge of a poly, + //in the specified direction + + dist = 0; + int ci = i; + + while (dist < 100) + { + int ni; + if (!CanPolyIncludeNext(ref vplane, plthresh, ci, dir, out ni)) break; + ci = ni; + dist++; + } + + return ci; + } + + + + private float FindSlope(ref Plane vpl, float plt, int i, int dirnx, int dirny, int dirpy, float maxslope) + { + //find a slope from the given corner/start point that's less than the max slope + + int ti = i; + int qi = i; + float slope = maxslope; + //int diry = (maxslope > 0) ? dirny : dirpy; + //int incy = (maxslope > 0) ? 1 : -1; + int sy = (int)Math.Abs(slope); + + + bool cgx = CanPolyIncludeNext(ref vpl, plt, i, dirnx, out ti); + + + if (cgx && (slope >= 0)) //new slope should be >=0 + { + int dy0 = FindPolyEdgeDist(ref vpl, plt, qi, dirny); + int dy1 = FindPolyEdgeDist(ref vpl, plt, ti, dirny); + int dy = dy1 - dy0; + + if (dy1 > 1) + { + if (dy < 0) return Math.Min(slope, dy1); //can move up to next max + if (dy0 > dy) return Math.Min(slope, dy0);//first step was steepest + if (dy >= 1) return Math.Min(slope, dy);//second step steeper + //only (dy==0)&&(dy0==0) case remaining, shouldn't be possible here + } + if (dy1 == 1) return Math.Min(slope, 1);//can only go +1Y or slope limit + if (dy1 == 0) + { + //step +X until can't go further, or can step +Y + int dx = 1; + int xi = ti;//starting from y1 + while (CanPolyIncludeNext(ref vpl, plt, xi, dirnx, out ti)) + { + xi = ti; + dx++; + if (CanPolyIncludeNext(ref vpl, plt, xi, dirny, out ti)) + { + //can move +Y now, calc new slope which is >0, <1 + return Math.Min(slope, 1.0f / dx); + } + } + + //couldn't go further +X or +Y... + //needs a corner at this next point at slope=0 + //or could be "trapped" in a corner + return Math.Min(slope, 0);//should always return 0.. + } + } + else //new slope must be <0 + { + + if (!CanPolyIncludeNext(ref vpl, plt, i, dirpy, out ti)) + { + return Math.Min(slope, 0); //can't move -Y.. could only happen at the end + } + + int dx0 = FindPolyEdgeDist(ref vpl, plt, qi, dirnx); + int dx1 = FindPolyEdgeDist(ref vpl, plt, ti, dirnx); + int dx = dx1 - dx0; + + if (dx1 > 1) + { + if (dx < 0) return Math.Min(slope, 0); //end corner, next slope is going backwards + if (dx0 > dx) return Math.Min(slope, -1.0f / dx0);//first step went furthest + if (dx >= 1) return Math.Min(slope, -1.0f / dx);//second step furthest + //only (dx==0)&&(dy0==0) case remaining, shouldn't be possible here + } + if (dx1 == 1) return Math.Min(slope, -1); + if (dx1 == 0) + { + //step -Y until can't go further, or can step +X + int dy = 1; + int yi = ti; + while(CanPolyIncludeNext(ref vpl, plt, yi, dirpy, out ti)) + { + yi = ti; + dy++; + if (CanPolyIncludeNext(ref vpl, plt, yi, dirnx, out ti)) + { + //can move +X now, calc new slope for <=-1 + return Math.Min(slope, -dy); + } + } + + //couldn't go further +Y or +X + //slope should be negative vertical + return Math.Min(slope, -100); + + } + + } + + + return slope; + } + + + private int FindNextCornerID(ref Plane vpl, float plt, int i, int dirnx, int dirny, int dirpy, float slope, out int dx, out int dy) + { + dx = 0; + dy = 0; + + //try to step along the slope until can't go further + int ti = i; + int qi = i; + int mx = 0; + int my = 0; + int diry = (slope > 0) ? dirny : dirpy; + int incy = (slope > 0) ? 1 : -1; + if ((slope >= 1) || (slope <= -1)) + { + int sy = (int)Math.Abs(slope); + while (my < sy) + { + if (CanPolyIncludeNext(ref vpl, plt, qi, diry, out ti)) + { + qi = ti; + my++; + dy += incy; + + if (my == sy) + { + if (CanPolyIncludeNext(ref vpl, plt, qi, dirnx, out ti)) + { + qi = ti; + my = 0; + mx++; + dx++; + } + else//can't go further! + { + return qi; + } + } + } + else if ((mx == 0) && (CanPolyIncludeNext(ref vpl, plt, qi, dirnx, out ti))) + { + //second chance to make beginning of the line + qi = ti; + my = 0; + mx++; + dx++; + } + else//can't go further! + { + return qi; + } + } + return qi;//shouldn't get here? + } + else if (slope != 0) + { + int sx = (int)Math.Abs(1.0f / slope); + while (mx < sx) + { + if (CanPolyIncludeNext(ref vpl, plt, qi, dirnx, out ti)) + { + qi = ti; + mx++; + dx++; + + if (mx == sx) + { + if (CanPolyIncludeNext(ref vpl, plt, qi, diry, out ti)) + { + qi = ti; + mx = 0; + my++; + dy += incy; + } + else//can't go further! + { + return qi; + } + } + } + else if ((my == 0) && CanPolyIncludeNext(ref vpl, plt, qi, diry, out ti)) + { + //second chance to make beginning of the line + qi = ti; + mx = 0; + my++; + dy += incy; + } + else//can't go further! + { + return qi; + } + } + return qi;//shouldn't get here? + } + else //slope==0 + { + for (int x = 0; x < 50; x++) //just try go +X until there's a hit. + { + if (CanPolyIncludeNext(ref vpl, plt, qi, dirnx, out ti)) + { + qi = ti; + dx++; + } + else + { + return qi; + } + } + return qi;//could go further, but don't.. + } + } + } + + + + + + private void GenerateComplete() + { + try + { + if (InvokeRequired) + { + Invoke(new Action(() => { GenerateComplete(); })); + } + else + { + GenerateButton.Enabled = true; + } + } + catch { } + } + + + private void UpdateStatus(string text) + { + try + { + if (InvokeRequired) + { + Invoke(new Action(() => { UpdateStatus(text); })); + } + else + { + StatusLabel.Text = text; + } + } + catch { } + } + + + } +} diff --git a/Project/Panels/GenerateNavMeshPanel.resx b/Project/Panels/GenerateNavMeshPanel.resx new file mode 100644 index 0000000..469e2e3 --- /dev/null +++ b/Project/Panels/GenerateNavMeshPanel.resx @@ -0,0 +1,418 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + This tool allows for generating GTAV nav meshes (.ynv) for a specified area. + +Generation requires static collision meshes for the area to be loadable by CodeWalker World View. The usual approach to this is to add the collision meshes into a DLC, and then enable mods and DLC. +The collision material and flags will be used in generating the new nav mesh. Polygons with the "Ped" flag set will be marked as footpaths in the nav meshes, to spawn ambient peds. +Generated .ynv files will be saved into the project folder and added to the project. +Note: existing .ynv files in the project folder will be overwritten! + + + + + + AAABAAMAICAAAAAAGACoDAAANgAAABAQAAAAABgAaAMAAN4MAABAQAAAAAAYACgyAABGEAAAKAAAACAA + AABAAAAAAQAYAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/u3v+Pn6//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7+/vX3/rzA3OHl9fz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7//+zv+3Z6qcLI5Pr7/wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP7+/+br+15in6+33vf5/wAAAAAAAAAAAAAAAP7+//7+/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//v8//v8//3+/wAAAAAAAAAAAAAAAAAAAP7+/+Ho+1dana20 + 4/b4/wAAAAAAAPz9//P2/+Tp/ezw/vz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///X4 + /9Pa+tPa+/H1//z9/wAAAAAAAAAAAAAAAP7+/93k+SsscaSr3PX3/wAAAP7+//L1/7W98AcWgrvC8Pj6 + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/+bs/xohiAEJdrvF9+7y//z9/wAAAAAAAAAA + AP7+/9rh+CEkapmh0/T3/wAAAPj6/9HZ/AEHcgEEb9LZ+/r7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP7//+/z/3F+zAAAXwQLcZai3fb4/wAAAAAAAAAAAP3+/97l/E9Tmaau4fT3/wAAAO/0/1dd + sAAAV7a/8/H1//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPr8/+jv/46Y3QUUf6Ot + 5PX4/wAAAAAAAAAAAP3+/9zj+3Z6wLe/7fX4/wAAAPD0/212xnaAzerw//z9/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/+/z/+Dm+/D0//z9/wAAAAAAAP7+//j6/9Pd+UhLjb/H + 9/D0//3+//n7/+nt/+jt//n7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7///7+//7+//7+/wAAAAAAAPr8/+7z/83W+ImU2A0UdFNarr/K9env//X4//z9//3+//7//wAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///j6/+Pq/255 + xhckjE5XsVVftUlTqwAKeTA9nr3H8+7z//v8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+//b4/9Tc+Sc0mRonj8rV/crX/ZSb48rX/brG8wwWgQAEdJei + 4efu//n7//7+//z9//z9//z9//z9//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//f5/+3y/+nv/+ft + /8vV+io2mImU2M7c/7vG9yIvlQAOfCg4mM3Y/s/c/4aR1AQRfGtzwtni/ebt/9vi/tri/tXd+9Tc+O3x + /vz9/wAAAAAAAAAAAAAAAAAAAAAAAPn6/87V+FVftkRPrFlnvSEqjQoUfmJvwWFvvg0TfQQIcxEchwAD + cy89n19rvVVitQwZgwAAaiMrkT9NqTVBoiw3mhQihig1mNLX+fv8/wAAAAAAAAAAAAAAAAAAAAAAAPb5 + /52l4EFLqoCK03yF0VBctGhyw52o5GVrvQAAaneBzsHM+jA3mhYgiTtIpJOf3ouW2AAAbmh0wbbA8bS+ + 7qiz5pCb16+56e/z//3+/wAAAAAAAAAAAAAAAAAAAAAAAPv8//H1/+vw/+zx/+nv/7/J9YqP3MbP/8LM + +hwqkFZftaCp5EhRrcTQ+9jj/8rW/UJMqn6J0ebt//X3//f5//b4//X3//f5//z9/wAAAAAAAAAAAAAA + AAAAAAAAAP7+//z9//3+/wAAAAAAAP3+/+7z/6at64iP3aWs7XN8zRIfhyUykp2o5MHM+oKM0xonjY6X + 2+jv//v8/wAAAP7+//n7//b5//r7//7//wAAAAAAAAAAAAAAAP7+//f5/+rw/9Pa9fL0/v7//wAAAAAA + APv8//H1/+Tr/7i/91liu0NPq0VQrS06m0NNqDdCoYqU1+nv//v8/wAAAAAAAPn7/9zi/qSt59ri/fL1 + //v8//7//wAAAPz9//D0/8rT+h0sjkVQrPD0/wAAAAAAAAAAAAAAAAAAAPz9/+7z/8LL9Jqk4aGq6LW/ + 8c3W9+Xs/vH1//v8/wAAAAAAAAAAAPf5/6at5gAAbxIfh6u16+Po/fr7/wAAAPb5/6ev5gAIeAAPernC + 8fX4/wAAAAAAAP3+//v8//z9/wAAAP3+//j6//P3//P2//b4//r8//7+//7+//v8//r8//3+/wAAAPv8 + /+Xr/nuIzwAAbBseg5Sb2fb5/wAAAPf5/8DF8pWe3d/n/vT3//39/wAAAPv8/+zx/87V9+3x/v3+/wAA + AP3+//j6//X4//v8/wAAAAAAAPn7/+Dm/snR9fD0//39//z8/fv8/+3y/8LK9aGq4dfd9/n7/wAAAPz9 + //b5//X4//v8/wAAAAAAAP7+/+7z/4aP1gEPet7k/f39/wAAAPf5/83U+ZCZ2u3x/v7+/wAAAPP3/215 + wgAJd7fB8/L1//7+/wAAAP3+//j6//f5//r8//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAPj6/87W/AAA + X2duue3y//7+/wAAAPD0/05asBQfidzj/P39/wAAAPX4/6Su6AAAXBccgtff/vv8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP3/3F8xhYli9Xe/fn6/wAAAAAAAO3y/1pltQAJd9be + /fv8/wAAAPz9/+rw/36I0Bknjs/W+vv8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAPf5/8HI7tnf+/X4//7+/wAAAAAAAO/0/3R7xgAAb9ng/Pz9/wAAAAAAAPn7/+Ln/dLY+fP2//3+ + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//r7//v8//7+/wAAAAAAAAAA + APb4/7/F84eP0e/0//7+/wAAAAAAAP7+//z9//v8//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz9//b5//X4//v8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////w////4 + P///+D////g8//D4MH/geCB/4Dggf+A4IH/wOCD/+DAB//hgAf//gAP//wAAB/AAAAPwAAAD8AAAA/AA + AAfjAAEHgYADAQPgBwEDEAEBAghgAQwIIEH8CCB//Bggf/wYMH/8ODD///h/////////////KAAAABAA + AAAgAAAAAQAYAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+vv/fL1/v///wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///4+Vx7/F5v///wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAP///4CHtrS62////////////////////wAAAAAAAAAAAP////H0/vf6/v// + /////////4yTwrrB4f///+zw+7rA6P39/////wAAAAAAAAAAAP///56l2BkcguXr/P///////42Uw8jO + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2OL+NjZ7AAArX2Ok + 4uz/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 2eP/LjJ1DAxKfYTE4Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//f7//f7//v7//v// + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/gILIR0eVeoHC3eb/8fX/+/z/AAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+Pr/ + +Pr/+Pr/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+vv/+vv/+/z//f3//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/2eP9ZWeqHx1obnOz4Or/8fX/+/z/AAAAAAAAAAAAAAAA/v7/ + +/z/9fj/8vb/8PX/7vT/8fb/9fj/+fr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/9fj/9fj/9Pj/9Pf/9vn/+/z//v7/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP9ODp9AAA5jZDQ5O7/8PX/+/z/AAAA + AAAAAAAA/v7/+/z/9Pf/7fP/5u//wsz6j5XfuMDx7fL/9vn//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+Pr/8/b/5+3/2eH/2uP/ + 5u3/7fP/8/b/+vv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3ef/U1ebBgVKio/O + 4uz/8fX/+/z/AAAAAAAA/v///P3/9fj/7fP/4uv/hIzZHSWPAABmU1i14ub/9/r/+/z/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9Pf/ + 7/X/09z/TlSzNzWYj5bh5O7/6/L/8vb/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fX/ + 2eP/QUWIEhBZbnSz3uj/8fb/+/z/AAAAAAAA/f7/+Pr/7/T/6PH/iI7cAABvAABqAABncXjK6O//9fj/ + +/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+/z/8/f/2uD/Z27EAABnAABiBgl4jJTd5vD/6O//8vX/+fv//f7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8fb/2OP/Mjd6AQE6ZGup4er/8fX/+/z/AAAAAAAA+vz/8fX/6/T/xM/8ExyJAABwAABu + GySRxc387fT/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vz/8/f/1Nr/MzqhAABhAxOBAARyBgp5jpLg5Oz/7PP/9Pf/+vz//v7/ + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP/KCtvBwZOjJHS4Or/8fX/+/z/AAAA/f7/9/n/7fP/3+j/ + UFq3AABtAAZ3BAh6mZ/n5vD/7vP/+Pr//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/6e//sbb1KzWcAABwBhaBAAFyAgp6fITR + 1d777/T/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3+j/WF2hBglTnaTj5O3/8PX/+/z/AAAA + /P3/9Pf/6vL/k5riAAByAAR0AABrY2vE4ur/6vH/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/7fL/5O3/ytX/RU6w + AABpAA5+AABuAABnhord6e7/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/7/T/3+j/k5jbT1KdgYjJ + 3uf+8fX/+/z/AAAA+/z/9fn/4ef/NDqhAABnAABrJjCU0Nn/5/D/8fX/+vv//v7/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + 9vn/7vP/6vP/ztb/O0CmAABpAABrQkuoxMn57PH/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/ + 2+X/en/CUFGak5nY3+j/8fX//P3/AAAA/P3/9fj/4en/i5DbNT2hIyuTpqzv4uz/7vP/9/n//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/9vn/7/P/6vL/ytH/X2i9XWi7wsf/6e//8/f/+Pr//v7/AAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/WF2hW1ylvMD+3uf/8PX/+/z/AAAA/f7/9vn/7fP/4uj/j5Pgf4LV3+X/6fD/ + 9Pf//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/8vX/7fP/5+//5u7/6vD/8PT/9vn//P3//v7/ + AAAAAAAAAAAAAAAAAAAA/f7/9/n/7fP/0tz9LDJzNjh/nqTk2uT/7fL/9/n//f7//f7/+fv/8/b/7PL/ + 3eX/zM//5ev/9fj/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f3/+vv/9/n/9vn/9fj/9vn/ + +fr//P3//v7/AAAAAAAAAAAA/v///f7/+vv/9vn/7/T/5vD/2Ob/VFubERNdoajk4u//5O7/7vP/9vj/ + +fr/+vv/+Pr/9fj/9Pj/9fj/9fj/+Pr//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///v7/ + /f7//P3//P3//f3//v7//v//AAAAAAAAAAAA/f7/+vz/9vn/8fX/7vT/5O3/3eb/z9n/cHjICxN5d37L + z9n/2eP/5O3/6/L/8PT/9Pf/9/n/+vv/+vv/+/z//P3//f3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+Pr/8/b/7vT/6vL/z9r+jZjeQUeq + IiuQCBN3AAFrBRB8Nj2iUViym6XlydH/4+z/6/L/8PT/9/n/+/z//f7//v//AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/8fX/6/L/3uf/ + mKTkLzibAABoAAB0Fx+HDBh7FSGDAg16AABYAABlCBB/Ji2UhYza1+D/6PL/7fL/9Pf/+vv//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/9/n/ + 8PT/7PT/z9j/XmO+AABtAABcMDSXoajsu8X7VV+5hYzblZ/fTVSxFSKMAABkAABnAAN2Qkmpsbrz5e3/ + 6vH/8fX/+Pr//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/P3/9/n/8PX/7PT/vcn3LTOZAABaAgR1ZWzD0Nf/5vL/1OP/l53lzs3/6fP/4+7/sLzwZ23CBxSD + AABnAABlHiaSmqHo3+j/5+//7/T/9vn//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/ + /v7//v7//v7//f7/+/z/9vj/7vP/7PX/tcLzEBeGAABkPEWlqLPt2eX/4e7/3On/uMX1gofVe3vPhYzY + z93+5/X/4e3/lJ3gHiOPAABtAABqChiEbHLIytD/5/D/7PL/8/f/+Pr/+fr/+Pr/+Pr/+Pr/+Pr/+Pr/ + +Pr/+fv/+vv/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+fv/9/n/9vj/9fj/9Pf/8fX/7PL/4uv/l6HgDhF7AAN4iZDe0d7/3uz/4vD/w83/VVm3 + ICiSAAFyAABlAABwaHTD1N//2un/3er/w838ZW3BEyOJJzKVAQ16NDmfwsn75fD/5u7/7PL/7vP/7fP/ + 7fP/7fL/7fP/7vP/7/T/8fb/9Pj/9vn/+fr//f3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/+Pr/9Pf/8fX/7vT/7PL/6/L/6fH/5u7/6vX/tsD0CQx4AAFwkZvi7ff/4vD/ + 4fD/z9j/OkGlAABiAABwBxWAAAt7BBN+P0uofYLUztb/4O7/6fb/6fP/qa7xQkyoBg56AABqMjugx8/+ + 5fH/4Ov/4On/3uj/3eb/3+j/3uj/1+L/0d3/1d7/3+f/7fL/9vj/+vz//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+fr/8/f/6/L/2d//v8j6vcf5ucP1wMv8wM3+vMj6PkqoAABo + UF25usP7tsPyvsr6sLrwQ0utAABqAAV1OUameIDRKDWZAAd2GyeOLDecmaHntsL0pbLom6riq7LzUlu0 + AANzBhR/AAZ0NT+ja3bBY2i/XGG6UViyWl65XGG7XGC6TVWvQU6pPkalODygqK7p8vb/+vz//v7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/7/T/wcj2R0ysExeFERmGDxuIFB6K + FBqICxSEAABsAAByDBiDCRSBBRCADhaFCRODAAh4AxF/AAl4CxeDHSaPAAp6AAN0AA19AAd3CBOBEBqH + BhGBAAh5AABwAAByAAh5BhSCAxWCAABsAABvAABlAABnAABxAABjAABmAABhAABdAABYAABhCAt/q7Lr + 8/f/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+fv/3uT/SE2vAABn + CBB/GiCMLzmfLTWcGByJFRyKGCOOMj2gHymRDxiGGyOPLDCXBRF/AAh3BhaCEyKMICqTKC2WNDqfIzCV + Awx6Eh+JHiaPAAR3AAZ5CxSDICWQX2q7Q1CqAA1+AAFxDxuHiZTbVGC4dHnQnabrTVqzY23EUV62Slau + LjaZXWm9sLjz5ez/9vn/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +Pv/4+n+e4LPfoPVpqv2vsf/zNX/zdb/xtH/v8v8pK7spKfysLb3vcr4ws784ej/hI/YAAZ1AAJzVF25 + yM//3Of/5+//i5LcAABpMzyfp6vxoKznlqHhqbbtx9H/8fz/kpvfAABiAABph4zc5PD/2OP/193/3un/ + 1+D/2OH/1+D/0Nr/zNL/3+j/6/L/7/T/9vn//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+Pr/9Pf/6vD/5u3/3+b/4uv/6PD/5+//5O3/5/P/sL3sXmS7mZzoz9f/3+z/4e// + mKLiEiKKCBF/KTWZr7T06/f/3ev/VF2zChSBipPcz9v+4u7/3ur/3ev/5/X/qrPrISmSDRJ2Xmq/3ur/ + 4uv/6vH/7fP/7fL/7/T/7vP/7fP/7fP/8PX/8fX/9Pf/+Pr/+/z//v7/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+Pr/9vn/9Pf/8vb/8vb/8/b/9Pf/7/T/6/L/tL/ubXLH + en/Ti43gqavy0t3/nafjMj6fJzaaAAV1GyeOYmW7Nz6fAABgNj6i1N//3uz/2uX/3Oj/5PH/wcj7FR2J + AAN0gong0tr/6fH/7/P/9vj/+Pr/+fv/+fv/+Pr/+Pr/+Pr/+fv/+vv//P3//f7//v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+/z/+/z/+/z//f3//f7/ + +fv/8fX/5Oz/jpbfc3jObnXLcXfOk5rks7b4iY3dR1KvDhuEAABoAABlEBV9U12ytcD13Or/3en/3ej/ + 1eL/q7fvGR+MKDKZbnnNxc/76PD/8fX/+fr//f7//v//AAAA/v7//f7//f3//P3//f3//f7//v//AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//f7//v7/AAAA + AAAAAAAAAAAAAAAA/f7/9vn/7/T/yNH5lJrleoDVmZ3pmpzpc3nPfoTWf4bYVFy3HSaLZ3PGsrb8v8r8 + y9n9q7jre4LRf4fUgIvXAwZ1AABrhYjb0NX/6PH/8PX/+Pr//f7/AAAAAAAA/v///f3/+vv/+Pr/9/r/ + 9/n/+Pr/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f7/+/z/+fr/9vj/9/n/ + +vz/+vv/+/z//v7/AAAAAAAAAAAAAAAA/v7/+vz/8/f/7PL/2uT/t8H1srP6vcH+nKTnSlOxV2C7TVaz + WGS8QUqmSlSuSFOtR1GtbXTKVl23ARB5AAh2AABnd33P3eP/4ur/7/T/9/n//P3/AAAAAAAAAAAA/P3/ + 9/n/8vb/7PH/6fD/7PL/7vP/8vb/9vn/+/z//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/+Pr/ + 8/b/7/T/8Pb/6vH/3eP97vL++fr//P3/AAAAAAAAAAAAAAAAAAAA/f7/+vv/9fj/7/T/5+//z9f+t7v4 + uLn9Z2zFLzucFCGIMz6gGCCMAAd4AAl2Dx2EER+GXWK8c3XLKzKXd4LP4er/6/L/8PX/9/n//P3//v// + AAAAAAAA/v7/+fv/8/b/7PP/y9H/i4/erLbt4er/5e3/7fP/8/b/+fv//f3//v7/AAAAAAAAAAAAAAAA + /v7/+/z/9vj/8PT/6/L/3+n/x9H9aHTAZGvG3+b9+Pr/+/z/AAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + +Pr/8vb/6/H/3OX+wMn4maDmdHrPWGG6T1a1eoHWcHfOTlayUlq1SlKubHjAxMj/0dn/4+v/7PL/8vb/ + +Pr//P3//v7/AAAAAAAAAAAA/f7/+fr/7vP/xsv5YGXAHymRKjKYYWS9rbLz4u3/6/P/8vb/+fr//f7/ + AAAAAAAAAAAA/v//+/z/9vj/7fL/5e3/xs7/Y23BIiiSAABeLTab3+b/9/r/+/z/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAA/f7/+vz/9vj/8PX/6vH/3eb/ydL8xM/6uMPyt733w8j/zNb/1Nz/3OT/4uz/5u7/ + 7fP/8vb/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAA/f7/+fv/7vP/jpHiAAJ1CxaBER6GAABoFRmGbXbH + 0Nf/7PL/9fj//P3/AAAAAAAAAAAA/v7/+fv/8/f/4Of/hYvbKDGZAABuAABdAAZyi5La5+7/9vn/+/z/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/9ff/8vb/7/X/7fP/6/L/5u3/5ez/6fD/ + 7PP/7/T/8fX/9Pf/9/n/+vv//P3//v7//v//AAAAAAAAAAAAAAAAAAAA/v7/+fv/8fb/2eH9fIbQExqH + AABrAAp6AAFyAABwS0+uztX39vn/+vz/AAAAAAAAAAAA/f7/+Pr/8ff/qbLpAABrAABhAABwDBWAfobX + 5e3/8PX/9vn//f3/AAAAAAAA/v///f7/+/z/+vv/+vv/+vz//P3//v7//v///v7//P3/+vz/+Pr/9/n/ + 9vj/9vj/9vj/9vj/9/n/+fr/+/z//P3//f7//v7//f7//P3/+/z/+vz/+/z//P3//v7/AAAA/v7/+/z/ + 9fj/7/T/5/H/uML1U1e1AAh5AABuAABvMjmdv8bz9vr/+vv/AAAAAAAAAAAA/f7/+fv/7/T/iY7aDxSA + GiONa3XHsr7w4Oj/6/H/9Pf/+vz//v7/AAAA/v///P3/+Pr/9Pf/8/f/9fj/9fj/9vn/+/z//v7/AAAA + AAAAAAAA/v7//f7//P3/+/z/+/z//P3//f7//v//AAAAAAAAAAAA/v7/+/z/9/n/9vn/9vn/9Pj/9vn/ + +/z//v7/AAAA/f7/+vz/9fj/7/T/6vL/3ef/i5PbGRqJBQl5jJbZ6vH/9Pj/+/z/AAAAAAAAAAAA/f7/ + +fv/8fT/1Nn9t7/0wcr54er/7fT/8fX/9fj/+vv//f7/AAAAAAAA/f3/+Pr/8PT/6/L/3uX/ztb/5Or/ + 8/f/+Pr//f7/AAAAAAAAAAAA/f7/+vz/+Pr/+fv/+fv/+vv//f3//v//AAAAAAAAAAAA/P3/9/n/7vL/ + 193/ztf/5u3/7vP/9Pf/+/z//v7/AAAA/v7//P3/+Pr/8fX/7PP/5/D/sLfxoKnk4+r/8vf/9/n//f3/ + AAAAAAAAAAAA/v7/+/z/9vn/9Pf/8vb/8fb/8fX/9Pf/+Pr//P3//v7/AAAAAAAA/v7/+vv/8vb/5+7/ + y9H/WWO9KSmSkZXj6vD/+Pv//P3/AAAAAAAA/f7/+Pr/9fj/8vb/6O7/7vP/9fj/+Pr//f7/AAAAAAAA + /v//+vv/8vb/7PP/hYraKiqKlp7i6PD/7fP/9ff/+/z//v7/AAAAAAAA/f7/+vv/9ff/8fX/8PX/8vb/ + 8/f/9vn/+/z//v7/AAAAAAAAAAAAAAAA/f7/+/z/+vv/+fr/+fr/+vv//P3//v7/AAAAAAAAAAAAAAAA + /P3/9fj/7PL/1d7/RUysAABhAABlg4ja6/D/+Pr//P3/AAAAAAAA+/z/9fj/6e7/2eD/h4/bnaXg7PH/ + 9fj/+/z/AAAAAAAA/v7/+Pr/8PX/y9X1JDGVAABaERWDoKnp6PH/7vP/9/n//P3/AAAAAAAAAAAA/v7/ + /P3/+vv/+fv/+fv/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//v7//v7//v//AAAAAAAA + AAAAAAAAAAAA/v7/+fv/8PX/7PX/ipPdAABsAABlQ1Cp3Ob/7vP/9/n//f7/AAAAAAAA+fv/9Pj/yNH5 + Ule2DBJ8Ljie0df+8fb/+fv//v7/AAAA/v7/+Pr/7/X/hY3YAABxAAl7AABuEBaEs7nz6fH/8fX/+vv/ + /v7/AAAAAAAAAAAAAAAA/v///v7//v7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9vn/7PL/0tn/LzidAQFsAAB0iZHb6vP/8PT/+fv//v//AAAA + /v7/+Pr/8vf/r7rqAAV4AABdPUen1N//7PL/9vn//f7/AAAA/v7/+fr/7/T/yc75S1G0AABrARKAAABp + Qker0df/7fP/9/n//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/5+7/cXXNAAd2AABuMDebzdT97PL/ + 9vj//P3/AAAAAAAA/v7/9/n/7/X/tL/uFCCLAABqHSqRvcf46fD/9Pf//f3/AAAAAAAA+vv/8vX/6vH/ + yM3+JC2XAABtAAV2Agx9q7Ly7vT/9vn//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/4uj/WWO1AAVx + KTaYu8T07fT/8vb/+vv//v7/AAAAAAAA/v7/9/n/7vX/vsn1Iy2SAABrAQ99mp/o6PD/9Pf//P3/AAAA + AAAA/P3/9/n/7vP/6fL/s7z2DBB/AABeQ0uttrr56e7/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +fv/4ef6g4zNbXfFw8v27fT/8vb/+Pr//f3/AAAAAAAAAAAA/v7/9/n/7vT/yNL7MjucAABtBxF/nKLo + 6fH/9Pf//P3/AAAAAAAA/v7/+/z/9fj/7fL/6/T/jZXbLzScrrP14en/7fL/+fv//v7/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+vz/8PP91dr34+f/8vb/8/f/9/r//P3//v//AAAAAAAAAAAA/v7/+Pr/8PX/1N3/ + QUqmAQRxBQ98m6Dm7PL/9fj//P3/AAAAAAAAAAAA/v7/+/z/9ff/8PX/5ez/ytH94ej/8vb/9vj/+/z/ + /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA + /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ + 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA + AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file diff --git a/Project/ProjectForm.Designer.cs b/Project/ProjectForm.Designer.cs index be220cc..2c6e06b 100644 --- a/Project/ProjectForm.Designer.cs +++ b/Project/ProjectForm.Designer.cs @@ -58,6 +58,14 @@ this.FileSaveItemMenu = new System.Windows.Forms.ToolStripMenuItem(); this.FileSaveItemAsMenu = new System.Windows.Forms.ToolStripMenuItem(); this.EditMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.EditUndoMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.EditRedoMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator10 = new System.Windows.Forms.ToolStripSeparator(); + this.EditCutMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.EditCopyMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.EditPasteMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.EditCloneMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.EditDeleteMenu = new System.Windows.Forms.ToolStripMenuItem(); this.ViewMenu = new System.Windows.Forms.ToolStripMenuItem(); this.ViewProjectExplorerMenu = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); @@ -65,8 +73,57 @@ this.ViewThemeBlueMenu = new System.Windows.Forms.ToolStripMenuItem(); this.ViewThemeLightMenu = new System.Windows.Forms.ToolStripMenuItem(); this.ViewThemeDarkMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YmapMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YmapNameMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator11 = new System.Windows.Forms.ToolStripSeparator(); + this.YmapNewEntityMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YmapNewCarGenMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator12 = new System.Windows.Forms.ToolStripSeparator(); + this.YmapAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YmapRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YtypMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YtypNameMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator13 = new System.Windows.Forms.ToolStripSeparator(); + this.YtypNewArchetypeMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator15 = new System.Windows.Forms.ToolStripSeparator(); + this.YtypAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YtypRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YndMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YndNameMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator14 = new System.Windows.Forms.ToolStripSeparator(); + this.YndNewNodeMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator16 = new System.Windows.Forms.ToolStripSeparator(); + this.YndAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YndRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YnvMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YnvNameMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator17 = new System.Windows.Forms.ToolStripSeparator(); + this.YnvNewPolygonMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator18 = new System.Windows.Forms.ToolStripSeparator(); + this.YnvAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YnvRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.TrainsMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.TrainsNameMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator19 = new System.Windows.Forms.ToolStripSeparator(); + this.TrainsNewNodeMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator20 = new System.Windows.Forms.ToolStripSeparator(); + this.TrainsAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.TrainsRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ScenarioMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ScenarioNameMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator21 = new System.Windows.Forms.ToolStripSeparator(); + this.ScenarioNewPointMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ScenarioNewPointFromSelectedMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ScenarioNewEntityOverrideMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ScenarioNewChainMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ScenarioNewClusterMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ScenarioImportChainMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator22 = new System.Windows.Forms.ToolStripSeparator(); + this.ScenarioAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ScenarioRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); this.ToolsMenu = new System.Windows.Forms.ToolStripMenuItem(); this.ToolsManifestGeneratorMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ToolsNavMeshGeneratorMenu = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); this.ToolsImportMenyooXmlMenu = new System.Windows.Forms.ToolStripMenuItem(); this.RenderMenu = new System.Windows.Forms.ToolStripMenuItem(); @@ -98,62 +155,6 @@ this.ToolbarSaveButton = new System.Windows.Forms.ToolStripButton(); this.ToolbarSaveAllButton = new System.Windows.Forms.ToolStripButton(); this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); - this.EditUndoMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.EditRedoMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator10 = new System.Windows.Forms.ToolStripSeparator(); - this.EditCutMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.EditCopyMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.EditPasteMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.EditDeleteMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.EditCloneMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YmapMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YtypMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YndMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YnvMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.TrainsMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.ScenarioMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YmapNameMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator11 = new System.Windows.Forms.ToolStripSeparator(); - this.YmapNewEntityMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YmapNewCarGenMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator12 = new System.Windows.Forms.ToolStripSeparator(); - this.YmapAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YmapRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YtypNameMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator13 = new System.Windows.Forms.ToolStripSeparator(); - this.YtypNewArchetypeMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YndNameMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator14 = new System.Windows.Forms.ToolStripSeparator(); - this.toolStripSeparator15 = new System.Windows.Forms.ToolStripSeparator(); - this.YtypAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YtypRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YndNewNodeMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator16 = new System.Windows.Forms.ToolStripSeparator(); - this.YndAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YndRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YnvNameMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator17 = new System.Windows.Forms.ToolStripSeparator(); - this.YnvNewPolygonMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator18 = new System.Windows.Forms.ToolStripSeparator(); - this.YnvAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YnvRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.TrainsNameMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator19 = new System.Windows.Forms.ToolStripSeparator(); - this.TrainsNewNodeMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator20 = new System.Windows.Forms.ToolStripSeparator(); - this.TrainsAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.TrainsRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.ScenarioNameMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator21 = new System.Windows.Forms.ToolStripSeparator(); - this.ScenarioNewPointMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.ScenarioNewPointFromSelectedMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.ScenarioNewEntityOverrideMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.ScenarioNewChainMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.ScenarioNewClusterMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.ScenarioImportChainMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator22 = new System.Windows.Forms.ToolStripSeparator(); - this.ScenarioAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.ScenarioRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); this.MainMenu.SuspendLayout(); this.MainToolbar.SuspendLayout(); this.SuspendLayout(); @@ -399,6 +400,66 @@ this.EditMenu.Size = new System.Drawing.Size(39, 20); this.EditMenu.Text = "Edit"; // + // EditUndoMenu + // + this.EditUndoMenu.Enabled = false; + this.EditUndoMenu.Name = "EditUndoMenu"; + this.EditUndoMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Z))); + this.EditUndoMenu.Size = new System.Drawing.Size(190, 22); + this.EditUndoMenu.Text = "Undo"; + // + // EditRedoMenu + // + this.EditRedoMenu.Enabled = false; + this.EditRedoMenu.Name = "EditRedoMenu"; + this.EditRedoMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Y))); + this.EditRedoMenu.Size = new System.Drawing.Size(190, 22); + this.EditRedoMenu.Text = "Redo"; + // + // toolStripSeparator10 + // + this.toolStripSeparator10.Name = "toolStripSeparator10"; + this.toolStripSeparator10.Size = new System.Drawing.Size(187, 6); + // + // EditCutMenu + // + this.EditCutMenu.Enabled = false; + this.EditCutMenu.Name = "EditCutMenu"; + this.EditCutMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.X))); + this.EditCutMenu.Size = new System.Drawing.Size(190, 22); + this.EditCutMenu.Text = "Cut Item"; + // + // EditCopyMenu + // + this.EditCopyMenu.Enabled = false; + this.EditCopyMenu.Name = "EditCopyMenu"; + this.EditCopyMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.C))); + this.EditCopyMenu.Size = new System.Drawing.Size(190, 22); + this.EditCopyMenu.Text = "Copy Item"; + // + // EditPasteMenu + // + this.EditPasteMenu.Enabled = false; + this.EditPasteMenu.Name = "EditPasteMenu"; + this.EditPasteMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.V))); + this.EditPasteMenu.Size = new System.Drawing.Size(190, 22); + this.EditPasteMenu.Text = "Paste Item"; + // + // EditCloneMenu + // + this.EditCloneMenu.Enabled = false; + this.EditCloneMenu.Name = "EditCloneMenu"; + this.EditCloneMenu.Size = new System.Drawing.Size(190, 22); + this.EditCloneMenu.Text = "Clone Item"; + // + // EditDeleteMenu + // + this.EditDeleteMenu.Enabled = false; + this.EditDeleteMenu.Name = "EditDeleteMenu"; + this.EditDeleteMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Shift | System.Windows.Forms.Keys.Delete))); + this.EditDeleteMenu.Size = new System.Drawing.Size(190, 22); + this.EditDeleteMenu.Text = "Delete Item"; + // // ViewMenu // this.ViewMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -454,10 +515,395 @@ this.ViewThemeDarkMenu.Text = "Dark"; this.ViewThemeDarkMenu.Click += new System.EventHandler(this.ViewThemeDarkMenu_Click); // + // YmapMenu + // + this.YmapMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.YmapNameMenu, + this.toolStripSeparator11, + this.YmapNewEntityMenu, + this.YmapNewCarGenMenu, + this.toolStripSeparator12, + this.YmapAddToProjectMenu, + this.YmapRemoveFromProjectMenu}); + this.YmapMenu.Name = "YmapMenu"; + this.YmapMenu.Size = new System.Drawing.Size(49, 20); + this.YmapMenu.Text = "Ymap"; + this.YmapMenu.Visible = false; + // + // YmapNameMenu + // + this.YmapNameMenu.Enabled = false; + this.YmapNameMenu.Name = "YmapNameMenu"; + this.YmapNameMenu.Size = new System.Drawing.Size(199, 22); + this.YmapNameMenu.Text = "(No .ymap file selected)"; + // + // toolStripSeparator11 + // + this.toolStripSeparator11.Name = "toolStripSeparator11"; + this.toolStripSeparator11.Size = new System.Drawing.Size(196, 6); + // + // YmapNewEntityMenu + // + this.YmapNewEntityMenu.Enabled = false; + this.YmapNewEntityMenu.Name = "YmapNewEntityMenu"; + this.YmapNewEntityMenu.Size = new System.Drawing.Size(199, 22); + this.YmapNewEntityMenu.Text = "New Entity"; + this.YmapNewEntityMenu.Click += new System.EventHandler(this.YmapNewEntityMenu_Click); + // + // YmapNewCarGenMenu + // + this.YmapNewCarGenMenu.Enabled = false; + this.YmapNewCarGenMenu.Name = "YmapNewCarGenMenu"; + this.YmapNewCarGenMenu.Size = new System.Drawing.Size(199, 22); + this.YmapNewCarGenMenu.Text = "New Car Generator"; + this.YmapNewCarGenMenu.Click += new System.EventHandler(this.YmapNewCarGenMenu_Click); + // + // toolStripSeparator12 + // + this.toolStripSeparator12.Name = "toolStripSeparator12"; + this.toolStripSeparator12.Size = new System.Drawing.Size(196, 6); + // + // YmapAddToProjectMenu + // + this.YmapAddToProjectMenu.Enabled = false; + this.YmapAddToProjectMenu.Name = "YmapAddToProjectMenu"; + this.YmapAddToProjectMenu.Size = new System.Drawing.Size(199, 22); + this.YmapAddToProjectMenu.Text = "Add to Project"; + this.YmapAddToProjectMenu.Click += new System.EventHandler(this.YmapAddToProjectMenu_Click); + // + // YmapRemoveFromProjectMenu + // + this.YmapRemoveFromProjectMenu.Enabled = false; + this.YmapRemoveFromProjectMenu.Name = "YmapRemoveFromProjectMenu"; + this.YmapRemoveFromProjectMenu.Size = new System.Drawing.Size(199, 22); + this.YmapRemoveFromProjectMenu.Text = "Remove from Project"; + this.YmapRemoveFromProjectMenu.Click += new System.EventHandler(this.YmapRemoveFromProjectMenu_Click); + // + // YtypMenu + // + this.YtypMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.YtypNameMenu, + this.toolStripSeparator13, + this.YtypNewArchetypeMenu, + this.toolStripSeparator15, + this.YtypAddToProjectMenu, + this.YtypRemoveFromProjectMenu}); + this.YtypMenu.Name = "YtypMenu"; + this.YtypMenu.Size = new System.Drawing.Size(43, 20); + this.YtypMenu.Text = "Ytyp"; + this.YtypMenu.Visible = false; + // + // YtypNameMenu + // + this.YtypNameMenu.Enabled = false; + this.YtypNameMenu.Name = "YtypNameMenu"; + this.YtypNameMenu.Size = new System.Drawing.Size(192, 22); + this.YtypNameMenu.Text = "(No .ytyp file selected)"; + // + // toolStripSeparator13 + // + this.toolStripSeparator13.Name = "toolStripSeparator13"; + this.toolStripSeparator13.Size = new System.Drawing.Size(189, 6); + // + // YtypNewArchetypeMenu + // + this.YtypNewArchetypeMenu.Enabled = false; + this.YtypNewArchetypeMenu.Name = "YtypNewArchetypeMenu"; + this.YtypNewArchetypeMenu.Size = new System.Drawing.Size(192, 22); + this.YtypNewArchetypeMenu.Text = "New Archetype"; + this.YtypNewArchetypeMenu.Click += new System.EventHandler(this.YtypNewArchetypeMenu_Click); + // + // toolStripSeparator15 + // + this.toolStripSeparator15.Name = "toolStripSeparator15"; + this.toolStripSeparator15.Size = new System.Drawing.Size(189, 6); + // + // YtypAddToProjectMenu + // + this.YtypAddToProjectMenu.Enabled = false; + this.YtypAddToProjectMenu.Name = "YtypAddToProjectMenu"; + this.YtypAddToProjectMenu.Size = new System.Drawing.Size(192, 22); + this.YtypAddToProjectMenu.Text = "Add to Project"; + this.YtypAddToProjectMenu.Click += new System.EventHandler(this.YtypAddToProjectMenu_Click); + // + // YtypRemoveFromProjectMenu + // + this.YtypRemoveFromProjectMenu.Enabled = false; + this.YtypRemoveFromProjectMenu.Name = "YtypRemoveFromProjectMenu"; + this.YtypRemoveFromProjectMenu.Size = new System.Drawing.Size(192, 22); + this.YtypRemoveFromProjectMenu.Text = "Remove from Project"; + this.YtypRemoveFromProjectMenu.Click += new System.EventHandler(this.YtypRemoveFromProjectMenu_Click); + // + // YndMenu + // + this.YndMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.YndNameMenu, + this.toolStripSeparator14, + this.YndNewNodeMenu, + this.toolStripSeparator16, + this.YndAddToProjectMenu, + this.YndRemoveFromProjectMenu}); + this.YndMenu.Name = "YndMenu"; + this.YndMenu.Size = new System.Drawing.Size(39, 20); + this.YndMenu.Text = "Ynd"; + this.YndMenu.Visible = false; + // + // YndNameMenu + // + this.YndNameMenu.Enabled = false; + this.YndNameMenu.Name = "YndNameMenu"; + this.YndNameMenu.Size = new System.Drawing.Size(189, 22); + this.YndNameMenu.Text = "(No .ynd file selected)"; + // + // toolStripSeparator14 + // + this.toolStripSeparator14.Name = "toolStripSeparator14"; + this.toolStripSeparator14.Size = new System.Drawing.Size(186, 6); + // + // YndNewNodeMenu + // + this.YndNewNodeMenu.Enabled = false; + this.YndNewNodeMenu.Name = "YndNewNodeMenu"; + this.YndNewNodeMenu.Size = new System.Drawing.Size(189, 22); + this.YndNewNodeMenu.Text = "New Node"; + this.YndNewNodeMenu.Click += new System.EventHandler(this.YndNewNodeMenu_Click); + // + // toolStripSeparator16 + // + this.toolStripSeparator16.Name = "toolStripSeparator16"; + this.toolStripSeparator16.Size = new System.Drawing.Size(186, 6); + // + // YndAddToProjectMenu + // + this.YndAddToProjectMenu.Enabled = false; + this.YndAddToProjectMenu.Name = "YndAddToProjectMenu"; + this.YndAddToProjectMenu.Size = new System.Drawing.Size(189, 22); + this.YndAddToProjectMenu.Text = "Add to Project"; + this.YndAddToProjectMenu.Click += new System.EventHandler(this.YndAddToProjectMenu_Click); + // + // YndRemoveFromProjectMenu + // + this.YndRemoveFromProjectMenu.Enabled = false; + this.YndRemoveFromProjectMenu.Name = "YndRemoveFromProjectMenu"; + this.YndRemoveFromProjectMenu.Size = new System.Drawing.Size(189, 22); + this.YndRemoveFromProjectMenu.Text = "Remove from Project"; + this.YndRemoveFromProjectMenu.Click += new System.EventHandler(this.YndRemoveFromProjectMenu_Click); + // + // YnvMenu + // + this.YnvMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.YnvNameMenu, + this.toolStripSeparator17, + this.YnvNewPolygonMenu, + this.toolStripSeparator18, + this.YnvAddToProjectMenu, + this.YnvRemoveFromProjectMenu}); + this.YnvMenu.Name = "YnvMenu"; + this.YnvMenu.Size = new System.Drawing.Size(38, 20); + this.YnvMenu.Text = "Ynv"; + this.YnvMenu.Visible = false; + // + // YnvNameMenu + // + this.YnvNameMenu.Enabled = false; + this.YnvNameMenu.Name = "YnvNameMenu"; + this.YnvNameMenu.Size = new System.Drawing.Size(188, 22); + this.YnvNameMenu.Text = "(No .ynv file selected)"; + // + // toolStripSeparator17 + // + this.toolStripSeparator17.Name = "toolStripSeparator17"; + this.toolStripSeparator17.Size = new System.Drawing.Size(185, 6); + // + // YnvNewPolygonMenu + // + this.YnvNewPolygonMenu.Enabled = false; + this.YnvNewPolygonMenu.Name = "YnvNewPolygonMenu"; + this.YnvNewPolygonMenu.Size = new System.Drawing.Size(188, 22); + this.YnvNewPolygonMenu.Text = "New Polygon"; + this.YnvNewPolygonMenu.Click += new System.EventHandler(this.YnvNewPolygonMenu_Click); + // + // toolStripSeparator18 + // + this.toolStripSeparator18.Name = "toolStripSeparator18"; + this.toolStripSeparator18.Size = new System.Drawing.Size(185, 6); + // + // YnvAddToProjectMenu + // + this.YnvAddToProjectMenu.Enabled = false; + this.YnvAddToProjectMenu.Name = "YnvAddToProjectMenu"; + this.YnvAddToProjectMenu.Size = new System.Drawing.Size(188, 22); + this.YnvAddToProjectMenu.Text = "Add to Project"; + this.YnvAddToProjectMenu.Click += new System.EventHandler(this.YnvAddToProjectMenu_Click); + // + // YnvRemoveFromProjectMenu + // + this.YnvRemoveFromProjectMenu.Enabled = false; + this.YnvRemoveFromProjectMenu.Name = "YnvRemoveFromProjectMenu"; + this.YnvRemoveFromProjectMenu.Size = new System.Drawing.Size(188, 22); + this.YnvRemoveFromProjectMenu.Text = "Remove from Project"; + this.YnvRemoveFromProjectMenu.Click += new System.EventHandler(this.YnvRemoveFromProjectMenu_Click); + // + // TrainsMenu + // + this.TrainsMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.TrainsNameMenu, + this.toolStripSeparator19, + this.TrainsNewNodeMenu, + this.toolStripSeparator20, + this.TrainsAddToProjectMenu, + this.TrainsRemoveFromProjectMenu}); + this.TrainsMenu.Name = "TrainsMenu"; + this.TrainsMenu.Size = new System.Drawing.Size(50, 20); + this.TrainsMenu.Text = "Trains"; + this.TrainsMenu.Visible = false; + // + // TrainsNameMenu + // + this.TrainsNameMenu.Enabled = false; + this.TrainsNameMenu.Name = "TrainsNameMenu"; + this.TrainsNameMenu.Size = new System.Drawing.Size(200, 22); + this.TrainsNameMenu.Text = "(No train track selected)"; + // + // toolStripSeparator19 + // + this.toolStripSeparator19.Name = "toolStripSeparator19"; + this.toolStripSeparator19.Size = new System.Drawing.Size(197, 6); + // + // TrainsNewNodeMenu + // + this.TrainsNewNodeMenu.Enabled = false; + this.TrainsNewNodeMenu.Name = "TrainsNewNodeMenu"; + this.TrainsNewNodeMenu.Size = new System.Drawing.Size(200, 22); + this.TrainsNewNodeMenu.Text = "New Node"; + this.TrainsNewNodeMenu.Click += new System.EventHandler(this.TrainsNewNodeMenu_Click); + // + // toolStripSeparator20 + // + this.toolStripSeparator20.Name = "toolStripSeparator20"; + this.toolStripSeparator20.Size = new System.Drawing.Size(197, 6); + // + // TrainsAddToProjectMenu + // + this.TrainsAddToProjectMenu.Enabled = false; + this.TrainsAddToProjectMenu.Name = "TrainsAddToProjectMenu"; + this.TrainsAddToProjectMenu.Size = new System.Drawing.Size(200, 22); + this.TrainsAddToProjectMenu.Text = "Add to Project"; + this.TrainsAddToProjectMenu.Click += new System.EventHandler(this.TrainsAddToProjectMenu_Click); + // + // TrainsRemoveFromProjectMenu + // + this.TrainsRemoveFromProjectMenu.Enabled = false; + this.TrainsRemoveFromProjectMenu.Name = "TrainsRemoveFromProjectMenu"; + this.TrainsRemoveFromProjectMenu.Size = new System.Drawing.Size(200, 22); + this.TrainsRemoveFromProjectMenu.Text = "Remove from Project"; + this.TrainsRemoveFromProjectMenu.Click += new System.EventHandler(this.TrainsRemoveFromProjectMenu_Click); + // + // ScenarioMenu + // + this.ScenarioMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.ScenarioNameMenu, + this.toolStripSeparator21, + this.ScenarioNewPointMenu, + this.ScenarioNewPointFromSelectedMenu, + this.ScenarioNewEntityOverrideMenu, + this.ScenarioNewChainMenu, + this.ScenarioNewClusterMenu, + this.ScenarioImportChainMenu, + this.toolStripSeparator22, + this.ScenarioAddToProjectMenu, + this.ScenarioRemoveFromProjectMenu}); + this.ScenarioMenu.Name = "ScenarioMenu"; + this.ScenarioMenu.Size = new System.Drawing.Size(64, 20); + this.ScenarioMenu.Text = "Scenario"; + this.ScenarioMenu.Visible = false; + // + // ScenarioNameMenu + // + this.ScenarioNameMenu.Enabled = false; + this.ScenarioNameMenu.Name = "ScenarioNameMenu"; + this.ScenarioNameMenu.Size = new System.Drawing.Size(228, 22); + this.ScenarioNameMenu.Text = "(No scenario region selected)"; + // + // toolStripSeparator21 + // + this.toolStripSeparator21.Name = "toolStripSeparator21"; + this.toolStripSeparator21.Size = new System.Drawing.Size(225, 6); + // + // ScenarioNewPointMenu + // + this.ScenarioNewPointMenu.Enabled = false; + this.ScenarioNewPointMenu.Name = "ScenarioNewPointMenu"; + this.ScenarioNewPointMenu.Size = new System.Drawing.Size(228, 22); + this.ScenarioNewPointMenu.Text = "New Point (Blank)"; + this.ScenarioNewPointMenu.Click += new System.EventHandler(this.ScenarioNewPointMenu_Click); + // + // ScenarioNewPointFromSelectedMenu + // + this.ScenarioNewPointFromSelectedMenu.Enabled = false; + this.ScenarioNewPointFromSelectedMenu.Name = "ScenarioNewPointFromSelectedMenu"; + this.ScenarioNewPointFromSelectedMenu.Size = new System.Drawing.Size(228, 22); + this.ScenarioNewPointFromSelectedMenu.Text = "New Point (from Selected)"; + this.ScenarioNewPointFromSelectedMenu.Click += new System.EventHandler(this.ScenarioNewPointFromSelectedMenu_Click); + // + // ScenarioNewEntityOverrideMenu + // + this.ScenarioNewEntityOverrideMenu.Enabled = false; + this.ScenarioNewEntityOverrideMenu.Name = "ScenarioNewEntityOverrideMenu"; + this.ScenarioNewEntityOverrideMenu.Size = new System.Drawing.Size(228, 22); + this.ScenarioNewEntityOverrideMenu.Text = "New Entity Override"; + this.ScenarioNewEntityOverrideMenu.Click += new System.EventHandler(this.ScenarioNewEntityOverrideMenu_Click); + // + // ScenarioNewChainMenu + // + this.ScenarioNewChainMenu.Enabled = false; + this.ScenarioNewChainMenu.Name = "ScenarioNewChainMenu"; + this.ScenarioNewChainMenu.Size = new System.Drawing.Size(228, 22); + this.ScenarioNewChainMenu.Text = "New Chain"; + this.ScenarioNewChainMenu.Click += new System.EventHandler(this.ScenarioNewChainMenu_Click); + // + // ScenarioNewClusterMenu + // + this.ScenarioNewClusterMenu.Enabled = false; + this.ScenarioNewClusterMenu.Name = "ScenarioNewClusterMenu"; + this.ScenarioNewClusterMenu.Size = new System.Drawing.Size(228, 22); + this.ScenarioNewClusterMenu.Text = "New Cluster"; + this.ScenarioNewClusterMenu.Click += new System.EventHandler(this.ScenarioNewClusterMenu_Click); + // + // ScenarioImportChainMenu + // + this.ScenarioImportChainMenu.Enabled = false; + this.ScenarioImportChainMenu.Name = "ScenarioImportChainMenu"; + this.ScenarioImportChainMenu.Size = new System.Drawing.Size(228, 22); + this.ScenarioImportChainMenu.Text = "Import Chain..."; + this.ScenarioImportChainMenu.Click += new System.EventHandler(this.ScenarioImportChainMenu_Click); + // + // toolStripSeparator22 + // + this.toolStripSeparator22.Name = "toolStripSeparator22"; + this.toolStripSeparator22.Size = new System.Drawing.Size(225, 6); + // + // ScenarioAddToProjectMenu + // + this.ScenarioAddToProjectMenu.Enabled = false; + this.ScenarioAddToProjectMenu.Name = "ScenarioAddToProjectMenu"; + this.ScenarioAddToProjectMenu.Size = new System.Drawing.Size(228, 22); + this.ScenarioAddToProjectMenu.Text = "Add to Project"; + this.ScenarioAddToProjectMenu.Click += new System.EventHandler(this.ScenarioAddToProjectMenu_Click); + // + // ScenarioRemoveFromProjectMenu + // + this.ScenarioRemoveFromProjectMenu.Enabled = false; + this.ScenarioRemoveFromProjectMenu.Name = "ScenarioRemoveFromProjectMenu"; + this.ScenarioRemoveFromProjectMenu.Size = new System.Drawing.Size(228, 22); + this.ScenarioRemoveFromProjectMenu.Text = "Remove from Project"; + this.ScenarioRemoveFromProjectMenu.Click += new System.EventHandler(this.ScenarioRemoveFromProjectMenu_Click); + // // ToolsMenu // this.ToolsMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.ToolsManifestGeneratorMenu, + this.ToolsNavMeshGeneratorMenu, this.toolStripSeparator2, this.ToolsImportMenyooXmlMenu}); this.ToolsMenu.Name = "ToolsMenu"; @@ -471,6 +917,14 @@ this.ToolsManifestGeneratorMenu.Text = "Manifest Generator..."; this.ToolsManifestGeneratorMenu.Click += new System.EventHandler(this.ToolsManifestGeneratorMenu_Click); // + // ToolsNavMeshGeneratorMenu + // + this.ToolsNavMeshGeneratorMenu.Name = "ToolsNavMeshGeneratorMenu"; + this.ToolsNavMeshGeneratorMenu.Size = new System.Drawing.Size(193, 22); + this.ToolsNavMeshGeneratorMenu.Text = "Nav Mesh Generator..."; + this.ToolsNavMeshGeneratorMenu.Visible = false; + this.ToolsNavMeshGeneratorMenu.Click += new System.EventHandler(this.ToolsNavMeshGeneratorMenu_Click); + // // toolStripSeparator2 // this.toolStripSeparator2.Name = "toolStripSeparator2"; @@ -720,451 +1174,7 @@ this.toolStripSeparator5.Name = "toolStripSeparator5"; this.toolStripSeparator5.Size = new System.Drawing.Size(6, 25); // - // EditUndoMenu - // - this.EditUndoMenu.Enabled = false; - this.EditUndoMenu.Name = "EditUndoMenu"; - this.EditUndoMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Z))); - this.EditUndoMenu.Size = new System.Drawing.Size(190, 22); - this.EditUndoMenu.Text = "Undo"; - // - // EditRedoMenu - // - this.EditRedoMenu.Enabled = false; - this.EditRedoMenu.Name = "EditRedoMenu"; - this.EditRedoMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Y))); - this.EditRedoMenu.Size = new System.Drawing.Size(190, 22); - this.EditRedoMenu.Text = "Redo"; - // - // toolStripSeparator10 - // - this.toolStripSeparator10.Name = "toolStripSeparator10"; - this.toolStripSeparator10.Size = new System.Drawing.Size(187, 6); - // - // EditCutMenu - // - this.EditCutMenu.Enabled = false; - this.EditCutMenu.Name = "EditCutMenu"; - this.EditCutMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.X))); - this.EditCutMenu.Size = new System.Drawing.Size(190, 22); - this.EditCutMenu.Text = "Cut Item"; - // - // EditCopyMenu - // - this.EditCopyMenu.Enabled = false; - this.EditCopyMenu.Name = "EditCopyMenu"; - this.EditCopyMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.C))); - this.EditCopyMenu.Size = new System.Drawing.Size(190, 22); - this.EditCopyMenu.Text = "Copy Item"; - // - // EditPasteMenu - // - this.EditPasteMenu.Enabled = false; - this.EditPasteMenu.Name = "EditPasteMenu"; - this.EditPasteMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.V))); - this.EditPasteMenu.Size = new System.Drawing.Size(190, 22); - this.EditPasteMenu.Text = "Paste Item"; - // - // EditDeleteMenu - // - this.EditDeleteMenu.Enabled = false; - this.EditDeleteMenu.Name = "EditDeleteMenu"; - this.EditDeleteMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Shift | System.Windows.Forms.Keys.Delete))); - this.EditDeleteMenu.Size = new System.Drawing.Size(190, 22); - this.EditDeleteMenu.Text = "Delete Item"; - // - // EditCloneMenu - // - this.EditCloneMenu.Enabled = false; - this.EditCloneMenu.Name = "EditCloneMenu"; - this.EditCloneMenu.Size = new System.Drawing.Size(190, 22); - this.EditCloneMenu.Text = "Clone Item"; - // - // YmapMenu - // - this.YmapMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.YmapNameMenu, - this.toolStripSeparator11, - this.YmapNewEntityMenu, - this.YmapNewCarGenMenu, - this.toolStripSeparator12, - this.YmapAddToProjectMenu, - this.YmapRemoveFromProjectMenu}); - this.YmapMenu.Name = "YmapMenu"; - this.YmapMenu.Size = new System.Drawing.Size(49, 20); - this.YmapMenu.Text = "Ymap"; - this.YmapMenu.Visible = false; - // - // YtypMenu - // - this.YtypMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.YtypNameMenu, - this.toolStripSeparator13, - this.YtypNewArchetypeMenu, - this.toolStripSeparator15, - this.YtypAddToProjectMenu, - this.YtypRemoveFromProjectMenu}); - this.YtypMenu.Name = "YtypMenu"; - this.YtypMenu.Size = new System.Drawing.Size(43, 20); - this.YtypMenu.Text = "Ytyp"; - this.YtypMenu.Visible = false; - // - // YndMenu - // - this.YndMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.YndNameMenu, - this.toolStripSeparator14, - this.YndNewNodeMenu, - this.toolStripSeparator16, - this.YndAddToProjectMenu, - this.YndRemoveFromProjectMenu}); - this.YndMenu.Name = "YndMenu"; - this.YndMenu.Size = new System.Drawing.Size(39, 20); - this.YndMenu.Text = "Ynd"; - this.YndMenu.Visible = false; - // - // YnvMenu - // - this.YnvMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.YnvNameMenu, - this.toolStripSeparator17, - this.YnvNewPolygonMenu, - this.toolStripSeparator18, - this.YnvAddToProjectMenu, - this.YnvRemoveFromProjectMenu}); - this.YnvMenu.Name = "YnvMenu"; - this.YnvMenu.Size = new System.Drawing.Size(38, 20); - this.YnvMenu.Text = "Ynv"; - this.YnvMenu.Visible = false; - // - // TrainsMenu - // - this.TrainsMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.TrainsNameMenu, - this.toolStripSeparator19, - this.TrainsNewNodeMenu, - this.toolStripSeparator20, - this.TrainsAddToProjectMenu, - this.TrainsRemoveFromProjectMenu}); - this.TrainsMenu.Name = "TrainsMenu"; - this.TrainsMenu.Size = new System.Drawing.Size(50, 20); - this.TrainsMenu.Text = "Trains"; - this.TrainsMenu.Visible = false; - // - // ScenarioMenu - // - this.ScenarioMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.ScenarioNameMenu, - this.toolStripSeparator21, - this.ScenarioNewPointMenu, - this.ScenarioNewPointFromSelectedMenu, - this.ScenarioNewEntityOverrideMenu, - this.ScenarioNewChainMenu, - this.ScenarioNewClusterMenu, - this.ScenarioImportChainMenu, - this.toolStripSeparator22, - this.ScenarioAddToProjectMenu, - this.ScenarioRemoveFromProjectMenu}); - this.ScenarioMenu.Name = "ScenarioMenu"; - this.ScenarioMenu.Size = new System.Drawing.Size(64, 20); - this.ScenarioMenu.Text = "Scenario"; - this.ScenarioMenu.Visible = false; - // - // YmapNameMenu - // - this.YmapNameMenu.Enabled = false; - this.YmapNameMenu.Name = "YmapNameMenu"; - this.YmapNameMenu.Size = new System.Drawing.Size(199, 22); - this.YmapNameMenu.Text = "(No .ymap file selected)"; - // - // toolStripSeparator11 - // - this.toolStripSeparator11.Name = "toolStripSeparator11"; - this.toolStripSeparator11.Size = new System.Drawing.Size(196, 6); - // - // YmapNewEntityMenu - // - this.YmapNewEntityMenu.Enabled = false; - this.YmapNewEntityMenu.Name = "YmapNewEntityMenu"; - this.YmapNewEntityMenu.Size = new System.Drawing.Size(199, 22); - this.YmapNewEntityMenu.Text = "New Entity"; - this.YmapNewEntityMenu.Click += new System.EventHandler(this.YmapNewEntityMenu_Click); - // - // YmapNewCarGenMenu - // - this.YmapNewCarGenMenu.Enabled = false; - this.YmapNewCarGenMenu.Name = "YmapNewCarGenMenu"; - this.YmapNewCarGenMenu.Size = new System.Drawing.Size(199, 22); - this.YmapNewCarGenMenu.Text = "New Car Generator"; - this.YmapNewCarGenMenu.Click += new System.EventHandler(this.YmapNewCarGenMenu_Click); - // - // toolStripSeparator12 - // - this.toolStripSeparator12.Name = "toolStripSeparator12"; - this.toolStripSeparator12.Size = new System.Drawing.Size(196, 6); - // - // YmapAddToProjectMenu - // - this.YmapAddToProjectMenu.Enabled = false; - this.YmapAddToProjectMenu.Name = "YmapAddToProjectMenu"; - this.YmapAddToProjectMenu.Size = new System.Drawing.Size(199, 22); - this.YmapAddToProjectMenu.Text = "Add to Project"; - this.YmapAddToProjectMenu.Click += new System.EventHandler(this.YmapAddToProjectMenu_Click); - // - // YmapRemoveFromProjectMenu - // - this.YmapRemoveFromProjectMenu.Enabled = false; - this.YmapRemoveFromProjectMenu.Name = "YmapRemoveFromProjectMenu"; - this.YmapRemoveFromProjectMenu.Size = new System.Drawing.Size(199, 22); - this.YmapRemoveFromProjectMenu.Text = "Remove from Project"; - this.YmapRemoveFromProjectMenu.Click += new System.EventHandler(this.YmapRemoveFromProjectMenu_Click); - // - // YtypNameMenu - // - this.YtypNameMenu.Enabled = false; - this.YtypNameMenu.Name = "YtypNameMenu"; - this.YtypNameMenu.Size = new System.Drawing.Size(192, 22); - this.YtypNameMenu.Text = "(No .ytyp file selected)"; - // - // toolStripSeparator13 - // - this.toolStripSeparator13.Name = "toolStripSeparator13"; - this.toolStripSeparator13.Size = new System.Drawing.Size(189, 6); - // - // YtypNewArchetypeMenu - // - this.YtypNewArchetypeMenu.Enabled = false; - this.YtypNewArchetypeMenu.Name = "YtypNewArchetypeMenu"; - this.YtypNewArchetypeMenu.Size = new System.Drawing.Size(192, 22); - this.YtypNewArchetypeMenu.Text = "New Archetype"; - this.YtypNewArchetypeMenu.Click += new System.EventHandler(this.YtypNewArchetypeMenu_Click); - // - // YndNameMenu - // - this.YndNameMenu.Enabled = false; - this.YndNameMenu.Name = "YndNameMenu"; - this.YndNameMenu.Size = new System.Drawing.Size(189, 22); - this.YndNameMenu.Text = "(No .ynd file selected)"; - // - // toolStripSeparator14 - // - this.toolStripSeparator14.Name = "toolStripSeparator14"; - this.toolStripSeparator14.Size = new System.Drawing.Size(186, 6); - // - // toolStripSeparator15 - // - this.toolStripSeparator15.Name = "toolStripSeparator15"; - this.toolStripSeparator15.Size = new System.Drawing.Size(189, 6); - // - // YtypAddToProjectMenu - // - this.YtypAddToProjectMenu.Enabled = false; - this.YtypAddToProjectMenu.Name = "YtypAddToProjectMenu"; - this.YtypAddToProjectMenu.Size = new System.Drawing.Size(192, 22); - this.YtypAddToProjectMenu.Text = "Add to Project"; - this.YtypAddToProjectMenu.Click += new System.EventHandler(this.YtypAddToProjectMenu_Click); - // - // YtypRemoveFromProjectMenu - // - this.YtypRemoveFromProjectMenu.Enabled = false; - this.YtypRemoveFromProjectMenu.Name = "YtypRemoveFromProjectMenu"; - this.YtypRemoveFromProjectMenu.Size = new System.Drawing.Size(192, 22); - this.YtypRemoveFromProjectMenu.Text = "Remove from Project"; - this.YtypRemoveFromProjectMenu.Click += new System.EventHandler(this.YtypRemoveFromProjectMenu_Click); - // - // YndNewNodeMenu - // - this.YndNewNodeMenu.Enabled = false; - this.YndNewNodeMenu.Name = "YndNewNodeMenu"; - this.YndNewNodeMenu.Size = new System.Drawing.Size(189, 22); - this.YndNewNodeMenu.Text = "New Node"; - this.YndNewNodeMenu.Click += new System.EventHandler(this.YndNewNodeMenu_Click); - // - // toolStripSeparator16 - // - this.toolStripSeparator16.Name = "toolStripSeparator16"; - this.toolStripSeparator16.Size = new System.Drawing.Size(186, 6); - // - // YndAddToProjectMenu - // - this.YndAddToProjectMenu.Enabled = false; - this.YndAddToProjectMenu.Name = "YndAddToProjectMenu"; - this.YndAddToProjectMenu.Size = new System.Drawing.Size(189, 22); - this.YndAddToProjectMenu.Text = "Add to Project"; - this.YndAddToProjectMenu.Click += new System.EventHandler(this.YndAddToProjectMenu_Click); - // - // YndRemoveFromProjectMenu - // - this.YndRemoveFromProjectMenu.Enabled = false; - this.YndRemoveFromProjectMenu.Name = "YndRemoveFromProjectMenu"; - this.YndRemoveFromProjectMenu.Size = new System.Drawing.Size(189, 22); - this.YndRemoveFromProjectMenu.Text = "Remove from Project"; - this.YndRemoveFromProjectMenu.Click += new System.EventHandler(this.YndRemoveFromProjectMenu_Click); - // - // YnvNameMenu - // - this.YnvNameMenu.Enabled = false; - this.YnvNameMenu.Name = "YnvNameMenu"; - this.YnvNameMenu.Size = new System.Drawing.Size(188, 22); - this.YnvNameMenu.Text = "(No .ynv file selected)"; - // - // toolStripSeparator17 - // - this.toolStripSeparator17.Name = "toolStripSeparator17"; - this.toolStripSeparator17.Size = new System.Drawing.Size(185, 6); - // - // YnvNewPolygonMenu - // - this.YnvNewPolygonMenu.Enabled = false; - this.YnvNewPolygonMenu.Name = "YnvNewPolygonMenu"; - this.YnvNewPolygonMenu.Size = new System.Drawing.Size(188, 22); - this.YnvNewPolygonMenu.Text = "New Polygon"; - this.YnvNewPolygonMenu.Click += new System.EventHandler(this.YnvNewPolygonMenu_Click); - // - // toolStripSeparator18 - // - this.toolStripSeparator18.Name = "toolStripSeparator18"; - this.toolStripSeparator18.Size = new System.Drawing.Size(185, 6); - // - // YnvAddToProjectMenu - // - this.YnvAddToProjectMenu.Enabled = false; - this.YnvAddToProjectMenu.Name = "YnvAddToProjectMenu"; - this.YnvAddToProjectMenu.Size = new System.Drawing.Size(188, 22); - this.YnvAddToProjectMenu.Text = "Add to Project"; - this.YnvAddToProjectMenu.Click += new System.EventHandler(this.YnvAddToProjectMenu_Click); - // - // YnvRemoveFromProjectMenu - // - this.YnvRemoveFromProjectMenu.Enabled = false; - this.YnvRemoveFromProjectMenu.Name = "YnvRemoveFromProjectMenu"; - this.YnvRemoveFromProjectMenu.Size = new System.Drawing.Size(188, 22); - this.YnvRemoveFromProjectMenu.Text = "Remove from Project"; - this.YnvRemoveFromProjectMenu.Click += new System.EventHandler(this.YnvRemoveFromProjectMenu_Click); - // - // TrainsNameMenu - // - this.TrainsNameMenu.Enabled = false; - this.TrainsNameMenu.Name = "TrainsNameMenu"; - this.TrainsNameMenu.Size = new System.Drawing.Size(200, 22); - this.TrainsNameMenu.Text = "(No train track selected)"; - // - // toolStripSeparator19 - // - this.toolStripSeparator19.Name = "toolStripSeparator19"; - this.toolStripSeparator19.Size = new System.Drawing.Size(197, 6); - // - // TrainsNewNodeMenu - // - this.TrainsNewNodeMenu.Enabled = false; - this.TrainsNewNodeMenu.Name = "TrainsNewNodeMenu"; - this.TrainsNewNodeMenu.Size = new System.Drawing.Size(200, 22); - this.TrainsNewNodeMenu.Text = "New Node"; - this.TrainsNewNodeMenu.Click += new System.EventHandler(this.TrainsNewNodeMenu_Click); - // - // toolStripSeparator20 - // - this.toolStripSeparator20.Name = "toolStripSeparator20"; - this.toolStripSeparator20.Size = new System.Drawing.Size(197, 6); - // - // TrainsAddToProjectMenu - // - this.TrainsAddToProjectMenu.Enabled = false; - this.TrainsAddToProjectMenu.Name = "TrainsAddToProjectMenu"; - this.TrainsAddToProjectMenu.Size = new System.Drawing.Size(200, 22); - this.TrainsAddToProjectMenu.Text = "Add to Project"; - this.TrainsAddToProjectMenu.Click += new System.EventHandler(this.TrainsAddToProjectMenu_Click); - // - // TrainsRemoveFromProjectMenu - // - this.TrainsRemoveFromProjectMenu.Enabled = false; - this.TrainsRemoveFromProjectMenu.Name = "TrainsRemoveFromProjectMenu"; - this.TrainsRemoveFromProjectMenu.Size = new System.Drawing.Size(200, 22); - this.TrainsRemoveFromProjectMenu.Text = "Remove from Project"; - this.TrainsRemoveFromProjectMenu.Click += new System.EventHandler(this.TrainsRemoveFromProjectMenu_Click); - // - // ScenarioNameMenu - // - this.ScenarioNameMenu.Enabled = false; - this.ScenarioNameMenu.Name = "ScenarioNameMenu"; - this.ScenarioNameMenu.Size = new System.Drawing.Size(228, 22); - this.ScenarioNameMenu.Text = "(No scenario region selected)"; - // - // toolStripSeparator21 - // - this.toolStripSeparator21.Name = "toolStripSeparator21"; - this.toolStripSeparator21.Size = new System.Drawing.Size(225, 6); - // - // ScenarioNewPointMenu - // - this.ScenarioNewPointMenu.Enabled = false; - this.ScenarioNewPointMenu.Name = "ScenarioNewPointMenu"; - this.ScenarioNewPointMenu.Size = new System.Drawing.Size(228, 22); - this.ScenarioNewPointMenu.Text = "New Point (Blank)"; - this.ScenarioNewPointMenu.Click += new System.EventHandler(this.ScenarioNewPointMenu_Click); - // - // ScenarioNewPointFromSelectedMenu - // - this.ScenarioNewPointFromSelectedMenu.Enabled = false; - this.ScenarioNewPointFromSelectedMenu.Name = "ScenarioNewPointFromSelectedMenu"; - this.ScenarioNewPointFromSelectedMenu.Size = new System.Drawing.Size(228, 22); - this.ScenarioNewPointFromSelectedMenu.Text = "New Point (from Selected)"; - this.ScenarioNewPointFromSelectedMenu.Click += new System.EventHandler(this.ScenarioNewPointFromSelectedMenu_Click); - // - // ScenarioNewEntityOverrideMenu - // - this.ScenarioNewEntityOverrideMenu.Enabled = false; - this.ScenarioNewEntityOverrideMenu.Name = "ScenarioNewEntityOverrideMenu"; - this.ScenarioNewEntityOverrideMenu.Size = new System.Drawing.Size(228, 22); - this.ScenarioNewEntityOverrideMenu.Text = "New Entity Override"; - this.ScenarioNewEntityOverrideMenu.Click += new System.EventHandler(this.ScenarioNewEntityOverrideMenu_Click); - // - // ScenarioNewChainMenu - // - this.ScenarioNewChainMenu.Enabled = false; - this.ScenarioNewChainMenu.Name = "ScenarioNewChainMenu"; - this.ScenarioNewChainMenu.Size = new System.Drawing.Size(228, 22); - this.ScenarioNewChainMenu.Text = "New Chain"; - this.ScenarioNewChainMenu.Click += new System.EventHandler(this.ScenarioNewChainMenu_Click); - // - // ScenarioNewClusterMenu - // - this.ScenarioNewClusterMenu.Enabled = false; - this.ScenarioNewClusterMenu.Name = "ScenarioNewClusterMenu"; - this.ScenarioNewClusterMenu.Size = new System.Drawing.Size(228, 22); - this.ScenarioNewClusterMenu.Text = "New Cluster"; - this.ScenarioNewClusterMenu.Click += new System.EventHandler(this.ScenarioNewClusterMenu_Click); - // - // ScenarioImportChainMenu - // - this.ScenarioImportChainMenu.Enabled = false; - this.ScenarioImportChainMenu.Name = "ScenarioImportChainMenu"; - this.ScenarioImportChainMenu.Size = new System.Drawing.Size(228, 22); - this.ScenarioImportChainMenu.Text = "Import Chain..."; - this.ScenarioImportChainMenu.Click += new System.EventHandler(this.ScenarioImportChainMenu_Click); - // - // toolStripSeparator22 - // - this.toolStripSeparator22.Name = "toolStripSeparator22"; - this.toolStripSeparator22.Size = new System.Drawing.Size(225, 6); - // - // ScenarioAddToProjectMenu - // - this.ScenarioAddToProjectMenu.Enabled = false; - this.ScenarioAddToProjectMenu.Name = "ScenarioAddToProjectMenu"; - this.ScenarioAddToProjectMenu.Size = new System.Drawing.Size(228, 22); - this.ScenarioAddToProjectMenu.Text = "Add to Project"; - this.ScenarioAddToProjectMenu.Click += new System.EventHandler(this.ScenarioAddToProjectMenu_Click); - // - // ScenarioRemoveFromProjectMenu - // - this.ScenarioRemoveFromProjectMenu.Enabled = false; - this.ScenarioRemoveFromProjectMenu.Name = "ScenarioRemoveFromProjectMenu"; - this.ScenarioRemoveFromProjectMenu.Size = new System.Drawing.Size(228, 22); - this.ScenarioRemoveFromProjectMenu.Text = "Remove from Project"; - this.ScenarioRemoveFromProjectMenu.Click += new System.EventHandler(this.ScenarioRemoveFromProjectMenu_Click); - // - // ProjectForm2 + // ProjectForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; @@ -1175,7 +1185,7 @@ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.IsMdiContainer = true; this.MainMenuStrip = this.MainMenu; - this.Name = "ProjectForm2"; + this.Name = "ProjectForm"; this.Text = "Project - CodeWalker by dexyfex"; this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ProjectForm_FormClosing); this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.ProjectForm_FormClosed); @@ -1314,5 +1324,6 @@ private System.Windows.Forms.ToolStripSeparator toolStripSeparator22; private System.Windows.Forms.ToolStripMenuItem ScenarioAddToProjectMenu; private System.Windows.Forms.ToolStripMenuItem ScenarioRemoveFromProjectMenu; + private System.Windows.Forms.ToolStripMenuItem ToolsNavMeshGeneratorMenu; } } \ No newline at end of file diff --git a/Project/ProjectForm.cs b/Project/ProjectForm.cs index 24d7e59..47014eb 100644 --- a/Project/ProjectForm.cs +++ b/Project/ProjectForm.cs @@ -318,6 +318,13 @@ namespace CodeWalker.Project (panel) => { panel.SetProject(CurrentProjectFile); }, //updateFunc (panel) => { return true; }); //findFunc } + private void ShowGenerateNavMeshPanel(bool promote) + { + ShowPanel(promote, + () => { return new GenerateNavMeshPanel(this); }, //createFunc + (panel) => { panel.SetProject(CurrentProjectFile); }, //updateFunc + (panel) => { return true; }); //findFunc + } private void ShowEditYmapPanel(bool promote) { ShowPanel(promote, @@ -5411,6 +5418,10 @@ namespace CodeWalker.Project { ShowEditProjectManifestPanel(false); } + private void ToolsNavMeshGeneratorMenu_Click(object sender, EventArgs e) + { + ShowGenerateNavMeshPanel(false); + } private void ToolsImportMenyooXmlMenu_Click(object sender, EventArgs e) { ImportMenyooXml(); diff --git a/WorldForm.cs b/WorldForm.cs index c39cf6f..1e586dd 100644 --- a/WorldForm.cs +++ b/WorldForm.cs @@ -42,6 +42,7 @@ namespace CodeWalker PopZones popzones = new PopZones(); AudioZones audiozones = new AudioZones(); + public Space Space { get { return space; } } bool MouseLButtonDown = false; bool MouseRButtonDown = false; From f00ff338785dc6c16056276ffcb910726729d155 Mon Sep 17 00:00:00 2001 From: dexyfex Date: Thu, 7 Jun 2018 13:40:06 +1000 Subject: [PATCH 012/158] Added CodeWalker.ErrorReport standalone tool --- CodeWalker.ErrorReport/App.config | 6 + CodeWalker.ErrorReport/CW.ico | Bin 0 -> 17006 bytes .../CodeWalker.ErrorReport.csproj | 88 ++++ CodeWalker.ErrorReport/Program.cs | 22 + .../Properties/AssemblyInfo.cs | 36 ++ .../Properties/Resources.Designer.cs | 71 +++ .../Properties/Resources.resx | 117 +++++ .../Properties/Settings.Designer.cs | 30 ++ .../Properties/Settings.settings | 7 + CodeWalker.ErrorReport/ReportForm.Designer.cs | 80 ++++ CodeWalker.ErrorReport/ReportForm.cs | 59 +++ CodeWalker.ErrorReport/ReportForm.resx | 409 ++++++++++++++++++ CodeWalker.sln | 14 + 13 files changed, 939 insertions(+) create mode 100644 CodeWalker.ErrorReport/App.config create mode 100644 CodeWalker.ErrorReport/CW.ico create mode 100644 CodeWalker.ErrorReport/CodeWalker.ErrorReport.csproj create mode 100644 CodeWalker.ErrorReport/Program.cs create mode 100644 CodeWalker.ErrorReport/Properties/AssemblyInfo.cs create mode 100644 CodeWalker.ErrorReport/Properties/Resources.Designer.cs create mode 100644 CodeWalker.ErrorReport/Properties/Resources.resx create mode 100644 CodeWalker.ErrorReport/Properties/Settings.Designer.cs create mode 100644 CodeWalker.ErrorReport/Properties/Settings.settings create mode 100644 CodeWalker.ErrorReport/ReportForm.Designer.cs create mode 100644 CodeWalker.ErrorReport/ReportForm.cs create mode 100644 CodeWalker.ErrorReport/ReportForm.resx diff --git a/CodeWalker.ErrorReport/App.config b/CodeWalker.ErrorReport/App.config new file mode 100644 index 0000000..88fa402 --- /dev/null +++ b/CodeWalker.ErrorReport/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/CodeWalker.ErrorReport/CW.ico b/CodeWalker.ErrorReport/CW.ico new file mode 100644 index 0000000000000000000000000000000000000000..6c7a70df7aecc591c7f1367ab52fcc797235a36b GIT binary patch literal 17006 zcmeHP30PD|wyqWhR1_67u7PM0jmFU-ipC@^$z;rE+>ILJzC4YH5k)~k(p#QoDBidZ`v6si+${l3({RA>^O9*9Vuz_#25o5!$Ifp!>i3sgo;< zORH;YsZvS*a1@kErL0PMConlZTP9ch3H&K7Dy>^;IE`Pg>`cloVx0p zT2=EK{(!5Ah$)n`PRLCmc>3Mb2XS!a#ky%--z6+qFl{70~Q6y2m7BnTLvTFJ) zvG!SFU73v5qX++#teSowTb%VsmQ^wSs416GZ-0qSCwsqONp)>~ks3;vQ$)MIw^P(| zt>1&HlJehl0d9%u)$hH(%-QW(g^E8IMkmNcI;%v@e|nlw_gbSs{!%Hm*z}l?xy@T! z966IB-~dU0SZcO>!W8H8SJFBE(h53#_BBGL`vgd#F9fJ3aKp=5In67jdyl2GFtq*o zau(ncXuv-?6aEwE8&J&aB^A_sZOB@?hyuxPG!>dOT7Yq(g*c}U%>@%cHlXn=rRJNl zdjdkMa0}hl)Y1H6npeyUjk0RA5-5QiKR5xDDv{EN=hY5};@cQnPMLWnAY7JT%A5fL zpd&PCl+|l1(GX&17SI*zLf(1bas2e_-_7;@*Ax%ZYTdvuPWp#R(J%CUEuTgSpaSe0 zlU&n#kaO4GPT{eN@HoXGmrQ)$4w340+Dw{T9zBzuTf*=GF?10QDAg!W)FU>F%PG{) zEvAoRYx|lW11yor)Gwr}=YYec?S?)>k43~Qqmt?N{V~nkZ!lXOoRFc&DW*vo%ESz1 zY)V~Ba&>W8uYUVSjJq&+)R~Wm95?K_z0crdPvdGD#jUc2x}Fn{8hg=h z*Ru`Vq9@L}v2@ivSNE*NX8zz~wK+2AaqYk%$2%E2eD=-RgQrq=ABiVq#Zt>4pTM#k zcT3#8a`w5zUA>hL4{Q`7bc#qRl+dCw22sF6*)FH#kSH4bxVC%WebeT8pT3aw&7{ls zpVY-?((vbsFTcIG$sroxAY%Yn*ozkg$JVq0w~^2<3UH6}mkW0~rJTD|ym~`K2csPy zm>hsQ(8AvFS=Zis_8v__JaQ<|9EJu0NEG!v7Prtl!thz5th@qOYU^`#vI^ii3^<&S0LLp*(vzH!(wjyoY+u2f830!=Kgm_;~Nv z6EC5xsT9f}fFi+|jyzkv_R51&j)%T*#VDpX@Dh+*Q$*eZB3Z_c|w@3_Sk1R&xZ<-=$hOGgMUxdOKk zJHg>Hw~OgZ2pgh7b&ZYoKIcUA2m&;OI_B$wNlPo= zASnRnm0S!Ea~-)P^}Yc`9P}+typoD8d9)US%;5Gpd zq&u9V(UDM(0{Q}F)0sEyj@N)sJvVq6<$qZ{eescxz;O8D?{g}t9%w7JHntTH<$sc) z#AolGLq*=(mJ(h}>4wAzV8&2;C9^mL6!$#sow<(=8z zKwJ6Hf#}EfMX!{tQ?Oi7tyP3|3f44#{0ChYmLfMIFRK0X)qQ}>>2PSkgPf+*+wJhV zaXSh0njfJTRF+jJt7@45{Ns2q_;ye_%0-g8+ktrqe0((NPo9hK(%nA0P|oT19J&`4 znTK+}0ecoNyTL0p>5)dhnQ%TZq>$gbbR!`(ONz3MU1+J4aTkbrfs^s?$Ir^vD3sOsH>^9&zV>J$2pY`#;S0S+de^!n6z5Ze`XfSkgms9w7^Y;|)_0KG)2$jGfhJ(@3E=94I9 z9i``1Bh}!TG3R>lLk2PgE+|1VSAS3w9$h+i(l4MvUNRl#_$-sn2aH6u zo$8i)KVTp({{Pby1mN;8DMkr?pe&3+O=mp~JP~op)0zh3=OY=&og_ZZDX(xT}$S@s)Av7~(6QOu3WGow1Q*j<0 z^11!wDXt00Y?}clfL?D!o;U3ju2Nn}lQI=^7oPvesNE-jPRT4}HPGu#S-ll{$X`}T zV^V6&S9yQ%zWH(sudEWb()|m`FOkvY96DwCasAfQ_Z)bZS@ai^ANVI^DoqC25HftV zwXe9~FD5^{JvOcG?*rBlGI-+D1LFL@p8v;ZC{0b*6Vh+)!m}BFN&lgLGg+gjH)iA3 z`>*yNjB7YB>hWpDTOX#8e^~rxQ#<>x(W4LBYz|JzY25#XnFdBTexNOzX}n}d^NrFe z#{}HK69=*%2GFK(=JF?GDi$xfXw+lriq&3?;ty8fiDdzT1^Sj$u&j$q%spU;HxjiW zF^mYwfe9Gmz<7!Q6k87H@wF;IepUWa3>~(SkWcsQdxHEA2{rRS7alx|r8K9MZFxE! zPP-XchM5L>`TZj`5P=}{RW=^MA~?UBU;t0mCc5&(Xpv@us%9!)Qh

Q$hFN4?g7Q`3#_{z=)? z#x{83q~iyjiWRmzC zI`s#a_6D=v+_N%DDaHUEtueAXExG zndEY&7n~f^7=%0~Y*7hxrFB?qgLPJ$9-)kMih2xxupM$Q(0~>=5Y7Tmf#H9$fZl-~ z`~i|9OrjE%dyb`!8hx>6zkRv}RzzghqTL45FV0Mw;puWN`(ZT2T9Ru46(Brx*M#Cf zDLMM$X_gJ9}=M6p)Q0hCB*U_qaAvk*LQqxOS3juMb02(v2Hut5Bne5=9m~K zrg`NoBG@4K%Bjeorw%*{$OA+8Ls12dil=iH-erR+nKf|GQ8)J@zXx^S&AqkFG3oHB zv~g3fckJm%$Rd{Twbp+5uM5|2OS6mFfCb&T^Z$pfpcY=ng!g|~)&CP`LS{B=zGm_A zdr#tMPC1Rqq(@z|BO_?OlxCLDYj-3|%!73d@d^XRti|tsc;L8O9>xXaG{ie%2Mje6 zf`I%Vq8B&|2Rs&ji%f!iQiNBQf~D==*$!+!|N5M}S8+l%O)sIz`Sj)knf;E~_3NXy zImSn&D05{ry_g@zV|ima{%)tK#jT6 zQp85M?|ufU?eH<~NHr5@-@1LT&gWkF-SFCLwl)dhh*s z$O&h+T%X{IbDnuF7c)FOrIUZSfwz0K4Q+|G<=_!No2?C6xHMqa{M*R1Gw0lzHQ#U6 zyxZfxyEo(-(E6!XIuL&+x5HcG<nt>4+w<3lIX%7$oJk~SNOj+L&# z=5}3oXt&=?bl0iYEUQq^Hni93Xs=?0RT!KN(QQGSuy(V9rHu`A4e&_AodO3YO z@MsH2u4|>;$=;x+qjBGZefl36H0)Hbfrqv9Y&sY@ybE=jTM_Mbtqr#rf3R=vGQY1T zUL-oZQGrbm?-=8$cXUw!Ke=~KS{iFZ2o6_teRS3L^ z{MB`MYN}jsAGK*q?0JvMyP@=PEZ(i7A<;D8k^JnHqO-r0U-PN*53df6l&9y>txoYo zdktx}dg|<3VNo#i7x(OimBDq^Tn1#~qHz zS(q|q(zq0wnolvn#iz6HCyDg&Qx*&G;a}5i)8ZHYk35Fp#e@@^4{13p;p9n}NSMjw zO6fKKqB)EFoKNIM#nH4PnqEqeoyq9XbC+&=+m8l2U%gRLSVdC`>D1X?tqeEsI+z@l zq|7LxsRgVO>GYyk;d>t)XwzZsoMi#11ak~$Jo7+QArWEY1=#~)Kp5ohCOQwoS;#*~ zTxgEi!GU=W%HR(`ZUmH=uL`xXeYSg#_<~3I(-i9ZOQy;2Q@u@(BYqLH3l{qg8Gee8 zd8Wh9Ab%peCT7#*JepO8n5yg8!vUdT?;w7f$Z{H18AvY>5>AUl7y?j+&%>En@^2dQ zLN0;|Xoa>=oF7QPEH9~cNU)IKdn9eOb>xaQk1VVr4<66*@~L*%lQMep)wbOb-IxU} zZr5?+l-Zu%fwE-4j{KiTV>76SZ)q1J$37;`E7nCkh^m84fiQBNAR+G;eKE1$TyjBd zwbl)WJah!3zzSi}HHVI8+t|fAyXGH1k-vIf)TXV^ZMVlyo#or(!`(|(hj{wP1H$Ex z5)>Xc3)kC6+wO?5+a0Hc7$Iicb|yWEWm`b-5TFg795;XrnSnVfv6qE$69u5hw0l7# zAgozn4OMdkKmk*tA(Aa0xa&2`VMN2)$~Q>n=~e3=q&#spcg&RQ)93k(o8~oR z(VbCa&X1XT<(ny&M^CzJZW%spwy&t&I-L`TIbef_F$ z-cl@C{$RjoCk)@)`N{CposAudjx}kyR=>yA_D0)hFSxUM&7*!MN3HCmu%m?t0`gpV z!LcC*oRh6CrSwrW-R+cm$)^~^n5-hSQIET@PD4B)JTS*(7;Mw>X=t=!sb%0IvyikL z1vj6jvb-#)3~&m|uwkwYd|2&#I>*u`YR3HA6Q+6FY<|AdDsucZ&&e~r$4tJm+&b`n z7~UeMcpM4Cp%pj-8BJjT3*Z9aA&+Y2Ee^!s(%0nJ{6+qkJ*62~zNrksBSnx0x^v+% z!GM|}k#wPXP*2Rh$ejMBE=ZfN-cV(R;JV9HCd;7@pUUq?)!w{U?(1K5FN{8Zj`x~r zau&rV2_|WPkvW5ECWE$u7`(vbuVeD>-Je04t!dq9bNhEOxn0_^%Xag%p_rLNaTs0G zAJitRqT*b-ZFf?izhfqkO{&>Md)4j(iFjk0J6^qxG%vvc4AC#PE+HFseIX?5h*1NB zCi7uFjZ~#^7FI7FQV4D%aO1+T?e}!WhV4%by6!-vvq=b>%B~zc;R@bDg*-q^XabdC z$FeGV!84x`vsuSVy^eO9w#UI7a8c01Kod1?X|~jO{nKx30?qzS7Wq77i#7&9%`Tx$p^jQ;MU;;Y8^Gi`&DL*p@$2}bW|OD zZVyV%1gfD&t^zg$@El?H!K5x-9a^+p=XfLmSq1bUt|xz41&v8i_y$x2h1Ve7v5$>0 z1xx@k7;<7*0od{wPt9hVidhBfb(25?N-h8>0SgYs;kSzpAP?d3lM&2zBC*&kW)2Tb z1QnnNXqZ=Ep@e-i3BBf9hPTo2U3*SR4l+heaI3}D7l7Ija zfz0;(LjR9GIT zM#vz11QpacsA3B8z>UEWMsH|tPKkzK3opfif~MqLFw{U2gg;h8Uw?Z^6()`cV_ z`&?5_20kFe?sS5f?r=)N4+t;}p$7Gw0DyoV@;r)_z5n;aSoOE>xaIVPdL#}UUJ}_3h;sq{)u_T7y3(^wLxL366wAJgD6tg%$4QV+g@0vAf@GBYN zRuc>GHy94!KTV(mhPsMGSb14G>`%hhI>Ld;rcxRGLN>VQ)!PN6g*B4!7o&f{%o7dK zoa+c0m>B8eVPwtNNjH%3L>=s~K=^XBM|2$XBA7rxqlx0ZmJC({TX??3nh30Cf!M$y zE)g*bCYZ)(0@*+YY%#SqG~SJcaF4$G{X?ty_P7vqKo}d^$RuGA%J=&pW!ot&);81I z=;2w8O-Mo0*GkoN0w#Yg+p+(Cp*Lw^@sa5yI0fIpzgn3K~#pGGk+@gj42A9)0a5JPJ z0e`M3Q=y6xV~!CXt-$gb)`T~r9(-Oa(i;(gA$o@j00$D{fZG6hP2rhTlo0^xqzwA6 zN!SQl-rv+Y{AmrcO2eq+RzN*egU_??mrUy3NYs}RqdQmuGV=qM^@QgQfgXgx12X56 z;&IbFuKMI-5(3#Y!$jzU^F$MVFl+wN$P0Znu>kF09SDp_#9QiY>ryq8qrQn8-Yyvc z1dQ+^9Kf7=+W!V%n+^;23IGnV;c~ca)YF>I@V}T6KR$Tzsn+KuiOwH=mW*H=B|3pd z_$`sGM8^(iGD4z5*x5*;tvc(g&pPU}mZZ6=o}EX4PV;Qbev^cHN@<{$SoLcXu?~I% zfon-yex`E#VhPu@T73o?yH9Z@_-PEP@zJM&s7Ygn@))r*e*L04qd)wk2fJouWn28Z!%mx>M{3#Wk$HM#pjP1L z>^xLQTutURC+`|T-jOOis!5;e!9ILQO}k6KJbaSZ!DF3;P + + + + Debug + AnyCPU + {47A2C383-99B4-4447-94D9-0685E6D7E2DA} + WinExe + CodeWalker.ErrorReport + CodeWalker.ErrorReport + v4.5.2 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + CW.ico + + + + + + + + + + + + + + + + + Form + + + ReportForm.cs + + + + + ReportForm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + \ No newline at end of file diff --git a/CodeWalker.ErrorReport/Program.cs b/CodeWalker.ErrorReport/Program.cs new file mode 100644 index 0000000..f24675e --- /dev/null +++ b/CodeWalker.ErrorReport/Program.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CodeWalker.ErrorReport +{ + static class Program + { + ///

+ /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new ReportForm()); + } + } +} diff --git a/CodeWalker.ErrorReport/Properties/AssemblyInfo.cs b/CodeWalker.ErrorReport/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..6481af3 --- /dev/null +++ b/CodeWalker.ErrorReport/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("CodeWalker.ErrorReport")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("CodeWalker.ErrorReport")] +[assembly: AssemblyCopyright("Copyright © 2018")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("47a2c383-99b4-4447-94d9-0685e6d7e2da")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/CodeWalker.ErrorReport/Properties/Resources.Designer.cs b/CodeWalker.ErrorReport/Properties/Resources.Designer.cs new file mode 100644 index 0000000..c53a407 --- /dev/null +++ b/CodeWalker.ErrorReport/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace CodeWalker.ErrorReport.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("CodeWalker.ErrorReport.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/CodeWalker.ErrorReport/Properties/Resources.resx b/CodeWalker.ErrorReport/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/CodeWalker.ErrorReport/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/CodeWalker.ErrorReport/Properties/Settings.Designer.cs b/CodeWalker.ErrorReport/Properties/Settings.Designer.cs new file mode 100644 index 0000000..f7cede3 --- /dev/null +++ b/CodeWalker.ErrorReport/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace CodeWalker.ErrorReport.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/CodeWalker.ErrorReport/Properties/Settings.settings b/CodeWalker.ErrorReport/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/CodeWalker.ErrorReport/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/CodeWalker.ErrorReport/ReportForm.Designer.cs b/CodeWalker.ErrorReport/ReportForm.Designer.cs new file mode 100644 index 0000000..7aa62bf --- /dev/null +++ b/CodeWalker.ErrorReport/ReportForm.Designer.cs @@ -0,0 +1,80 @@ +namespace CodeWalker.ErrorReport +{ + partial class ReportForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ReportForm)); + this.label1 = new System.Windows.Forms.Label(); + this.ErrorTextBox = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(136, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Last CodeWalker.exe error:"; + // + // ErrorTextBox + // + this.ErrorTextBox.AcceptsReturn = true; + this.ErrorTextBox.AcceptsTab = true; + this.ErrorTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ErrorTextBox.Location = new System.Drawing.Point(12, 36); + this.ErrorTextBox.Multiline = true; + this.ErrorTextBox.Name = "ErrorTextBox"; + this.ErrorTextBox.Size = new System.Drawing.Size(630, 329); + this.ErrorTextBox.TabIndex = 1; + // + // ReportForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(654, 377); + this.Controls.Add(this.ErrorTextBox); + this.Controls.Add(this.label1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "ReportForm"; + this.Text = "CodeWalker Error Report Tool"; + this.Load += new System.EventHandler(this.ReportForm_Load); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox ErrorTextBox; + } +} + diff --git a/CodeWalker.ErrorReport/ReportForm.cs b/CodeWalker.ErrorReport/ReportForm.cs new file mode 100644 index 0000000..692d00b --- /dev/null +++ b/CodeWalker.ErrorReport/ReportForm.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Diagnostics; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CodeWalker.ErrorReport +{ + public partial class ReportForm : Form + { + public ReportForm() + { + InitializeComponent(); + } + + private void ReportForm_Load(object sender, EventArgs e) + { + EventLog myLog = new EventLog(); + myLog.Log = "Application"; + //myLog.Source = ".NET Runtime"; + + var lastEntry = myLog.Entries[myLog.Entries.Count - 1]; + var last_error_Message = lastEntry.Message; + + bool found = false; + + for (int index = myLog.Entries.Count - 1; index > 0; index--) + { + var errLastEntry = myLog.Entries[index]; + if (errLastEntry.EntryType == EventLogEntryType.Error) + { + if (errLastEntry.Source == ".NET Runtime") + { + var msg = errLastEntry.Message; + var lines = msg.Split('\n'); + if ((lines.Length > 0) && (lines[0].Contains("CodeWalker.exe"))) + { + ErrorTextBox.Text = msg.Replace("\n", "\r\n"); + found = true; + break; + } + } + } + } + + if (!found) + { + ErrorTextBox.Text = "Event Log entry not found!"; + MessageBox.Show("Unable to find the last CodeWalker.exe error in the Event Log."); + } + + } + } +} diff --git a/CodeWalker.ErrorReport/ReportForm.resx b/CodeWalker.ErrorReport/ReportForm.resx new file mode 100644 index 0000000..1431f6b --- /dev/null +++ b/CodeWalker.ErrorReport/ReportForm.resx @@ -0,0 +1,409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAMAICAAAAAAGACoDAAANgAAABAQAAAAABgAaAMAAN4MAABAQAAAAAAYACgyAABGEAAAKAAAACAA + AABAAAAAAQAYAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/u3v+Pn6//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7+/vX3/rzA3OHl9fz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7//+zv+3Z6qcLI5Pr7/wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP7+/+br+15in6+33vf5/wAAAAAAAAAAAAAAAP7+//7+/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//v8//v8//3+/wAAAAAAAAAAAAAAAAAAAP7+/+Ho+1dana20 + 4/b4/wAAAAAAAPz9//P2/+Tp/ezw/vz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///X4 + /9Pa+tPa+/H1//z9/wAAAAAAAAAAAAAAAP7+/93k+SsscaSr3PX3/wAAAP7+//L1/7W98AcWgrvC8Pj6 + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/+bs/xohiAEJdrvF9+7y//z9/wAAAAAAAAAA + AP7+/9rh+CEkapmh0/T3/wAAAPj6/9HZ/AEHcgEEb9LZ+/r7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP7//+/z/3F+zAAAXwQLcZai3fb4/wAAAAAAAAAAAP3+/97l/E9Tmaau4fT3/wAAAO/0/1dd + sAAAV7a/8/H1//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPr8/+jv/46Y3QUUf6Ot + 5PX4/wAAAAAAAAAAAP3+/9zj+3Z6wLe/7fX4/wAAAPD0/212xnaAzerw//z9/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/+/z/+Dm+/D0//z9/wAAAAAAAP7+//j6/9Pd+UhLjb/H + 9/D0//3+//n7/+nt/+jt//n7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7///7+//7+//7+/wAAAAAAAPr8/+7z/83W+ImU2A0UdFNarr/K9env//X4//z9//3+//7//wAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///j6/+Pq/255 + xhckjE5XsVVftUlTqwAKeTA9nr3H8+7z//v8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+//b4/9Tc+Sc0mRonj8rV/crX/ZSb48rX/brG8wwWgQAEdJei + 4efu//n7//7+//z9//z9//z9//z9//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//f5/+3y/+nv/+ft + /8vV+io2mImU2M7c/7vG9yIvlQAOfCg4mM3Y/s/c/4aR1AQRfGtzwtni/ebt/9vi/tri/tXd+9Tc+O3x + /vz9/wAAAAAAAAAAAAAAAAAAAAAAAPn6/87V+FVftkRPrFlnvSEqjQoUfmJvwWFvvg0TfQQIcxEchwAD + cy89n19rvVVitQwZgwAAaiMrkT9NqTVBoiw3mhQihig1mNLX+fv8/wAAAAAAAAAAAAAAAAAAAAAAAPb5 + /52l4EFLqoCK03yF0VBctGhyw52o5GVrvQAAaneBzsHM+jA3mhYgiTtIpJOf3ouW2AAAbmh0wbbA8bS+ + 7qiz5pCb16+56e/z//3+/wAAAAAAAAAAAAAAAAAAAAAAAPv8//H1/+vw/+zx/+nv/7/J9YqP3MbP/8LM + +hwqkFZftaCp5EhRrcTQ+9jj/8rW/UJMqn6J0ebt//X3//f5//b4//X3//f5//z9/wAAAAAAAAAAAAAA + AAAAAAAAAP7+//z9//3+/wAAAAAAAP3+/+7z/6at64iP3aWs7XN8zRIfhyUykp2o5MHM+oKM0xonjY6X + 2+jv//v8/wAAAP7+//n7//b5//r7//7//wAAAAAAAAAAAAAAAP7+//f5/+rw/9Pa9fL0/v7//wAAAAAA + APv8//H1/+Tr/7i/91liu0NPq0VQrS06m0NNqDdCoYqU1+nv//v8/wAAAAAAAPn7/9zi/qSt59ri/fL1 + //v8//7//wAAAPz9//D0/8rT+h0sjkVQrPD0/wAAAAAAAAAAAAAAAAAAAPz9/+7z/8LL9Jqk4aGq6LW/ + 8c3W9+Xs/vH1//v8/wAAAAAAAAAAAPf5/6at5gAAbxIfh6u16+Po/fr7/wAAAPb5/6ev5gAIeAAPernC + 8fX4/wAAAAAAAP3+//v8//z9/wAAAP3+//j6//P3//P2//b4//r8//7+//7+//v8//r8//3+/wAAAPv8 + /+Xr/nuIzwAAbBseg5Sb2fb5/wAAAPf5/8DF8pWe3d/n/vT3//39/wAAAPv8/+zx/87V9+3x/v3+/wAA + AP3+//j6//X4//v8/wAAAAAAAPn7/+Dm/snR9fD0//39//z8/fv8/+3y/8LK9aGq4dfd9/n7/wAAAPz9 + //b5//X4//v8/wAAAAAAAP7+/+7z/4aP1gEPet7k/f39/wAAAPf5/83U+ZCZ2u3x/v7+/wAAAPP3/215 + wgAJd7fB8/L1//7+/wAAAP3+//j6//f5//r8//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAPj6/87W/AAA + X2duue3y//7+/wAAAPD0/05asBQfidzj/P39/wAAAPX4/6Su6AAAXBccgtff/vv8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP3/3F8xhYli9Xe/fn6/wAAAAAAAO3y/1pltQAJd9be + /fv8/wAAAPz9/+rw/36I0Bknjs/W+vv8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAPf5/8HI7tnf+/X4//7+/wAAAAAAAO/0/3R7xgAAb9ng/Pz9/wAAAAAAAPn7/+Ln/dLY+fP2//3+ + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//r7//v8//7+/wAAAAAAAAAA + APb4/7/F84eP0e/0//7+/wAAAAAAAP7+//z9//v8//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz9//b5//X4//v8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////w////4 + P///+D////g8//D4MH/geCB/4Dggf+A4IH/wOCD/+DAB//hgAf//gAP//wAAB/AAAAPwAAAD8AAAA/AA + AAfjAAEHgYADAQPgBwEDEAEBAghgAQwIIEH8CCB//Bggf/wYMH/8ODD///h/////////////KAAAABAA + AAAgAAAAAQAYAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+vv/fL1/v///wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///4+Vx7/F5v///wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAP///4CHtrS62////////////////////wAAAAAAAAAAAP////H0/vf6/v// + /////////4yTwrrB4f///+zw+7rA6P39/////wAAAAAAAAAAAP///56l2BkcguXr/P///////42Uw8jO + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2OL+NjZ7AAArX2Ok + 4uz/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 2eP/LjJ1DAxKfYTE4Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//f7//f7//v7//v// + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/gILIR0eVeoHC3eb/8fX/+/z/AAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+Pr/ + +Pr/+Pr/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+vv/+vv/+/z//f3//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/2eP9ZWeqHx1obnOz4Or/8fX/+/z/AAAAAAAAAAAAAAAA/v7/ + +/z/9fj/8vb/8PX/7vT/8fb/9fj/+fr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/9fj/9fj/9Pj/9Pf/9vn/+/z//v7/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP9ODp9AAA5jZDQ5O7/8PX/+/z/AAAA + AAAAAAAA/v7/+/z/9Pf/7fP/5u//wsz6j5XfuMDx7fL/9vn//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+Pr/8/b/5+3/2eH/2uP/ + 5u3/7fP/8/b/+vv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3ef/U1ebBgVKio/O + 4uz/8fX/+/z/AAAAAAAA/v///P3/9fj/7fP/4uv/hIzZHSWPAABmU1i14ub/9/r/+/z/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9Pf/ + 7/X/09z/TlSzNzWYj5bh5O7/6/L/8vb/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fX/ + 2eP/QUWIEhBZbnSz3uj/8fb/+/z/AAAAAAAA/f7/+Pr/7/T/6PH/iI7cAABvAABqAABncXjK6O//9fj/ + +/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+/z/8/f/2uD/Z27EAABnAABiBgl4jJTd5vD/6O//8vX/+fv//f7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8fb/2OP/Mjd6AQE6ZGup4er/8fX/+/z/AAAAAAAA+vz/8fX/6/T/xM/8ExyJAABwAABu + GySRxc387fT/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vz/8/f/1Nr/MzqhAABhAxOBAARyBgp5jpLg5Oz/7PP/9Pf/+vz//v7/ + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP/KCtvBwZOjJHS4Or/8fX/+/z/AAAA/f7/9/n/7fP/3+j/ + UFq3AABtAAZ3BAh6mZ/n5vD/7vP/+Pr//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/6e//sbb1KzWcAABwBhaBAAFyAgp6fITR + 1d777/T/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3+j/WF2hBglTnaTj5O3/8PX/+/z/AAAA + /P3/9Pf/6vL/k5riAAByAAR0AABrY2vE4ur/6vH/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/7fL/5O3/ytX/RU6w + AABpAA5+AABuAABnhord6e7/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/7/T/3+j/k5jbT1KdgYjJ + 3uf+8fX/+/z/AAAA+/z/9fn/4ef/NDqhAABnAABrJjCU0Nn/5/D/8fX/+vv//v7/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + 9vn/7vP/6vP/ztb/O0CmAABpAABrQkuoxMn57PH/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/ + 2+X/en/CUFGak5nY3+j/8fX//P3/AAAA/P3/9fj/4en/i5DbNT2hIyuTpqzv4uz/7vP/9/n//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/9vn/7/P/6vL/ytH/X2i9XWi7wsf/6e//8/f/+Pr//v7/AAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/WF2hW1ylvMD+3uf/8PX/+/z/AAAA/f7/9vn/7fP/4uj/j5Pgf4LV3+X/6fD/ + 9Pf//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/8vX/7fP/5+//5u7/6vD/8PT/9vn//P3//v7/ + AAAAAAAAAAAAAAAAAAAA/f7/9/n/7fP/0tz9LDJzNjh/nqTk2uT/7fL/9/n//f7//f7/+fv/8/b/7PL/ + 3eX/zM//5ev/9fj/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f3/+vv/9/n/9vn/9fj/9vn/ + +fr//P3//v7/AAAAAAAAAAAA/v///f7/+vv/9vn/7/T/5vD/2Ob/VFubERNdoajk4u//5O7/7vP/9vj/ + +fr/+vv/+Pr/9fj/9Pj/9fj/9fj/+Pr//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///v7/ + /f7//P3//P3//f3//v7//v//AAAAAAAAAAAA/f7/+vz/9vn/8fX/7vT/5O3/3eb/z9n/cHjICxN5d37L + z9n/2eP/5O3/6/L/8PT/9Pf/9/n/+vv/+vv/+/z//P3//f3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+Pr/8/b/7vT/6vL/z9r+jZjeQUeq + IiuQCBN3AAFrBRB8Nj2iUViym6XlydH/4+z/6/L/8PT/9/n/+/z//f7//v//AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/8fX/6/L/3uf/ + mKTkLzibAABoAAB0Fx+HDBh7FSGDAg16AABYAABlCBB/Ji2UhYza1+D/6PL/7fL/9Pf/+vv//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/9/n/ + 8PT/7PT/z9j/XmO+AABtAABcMDSXoajsu8X7VV+5hYzblZ/fTVSxFSKMAABkAABnAAN2Qkmpsbrz5e3/ + 6vH/8fX/+Pr//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/P3/9/n/8PX/7PT/vcn3LTOZAABaAgR1ZWzD0Nf/5vL/1OP/l53lzs3/6fP/4+7/sLzwZ23CBxSD + AABnAABlHiaSmqHo3+j/5+//7/T/9vn//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/ + /v7//v7//v7//f7/+/z/9vj/7vP/7PX/tcLzEBeGAABkPEWlqLPt2eX/4e7/3On/uMX1gofVe3vPhYzY + z93+5/X/4e3/lJ3gHiOPAABtAABqChiEbHLIytD/5/D/7PL/8/f/+Pr/+fr/+Pr/+Pr/+Pr/+Pr/+Pr/ + +Pr/+fv/+vv/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+fv/9/n/9vj/9fj/9Pf/8fX/7PL/4uv/l6HgDhF7AAN4iZDe0d7/3uz/4vD/w83/VVm3 + ICiSAAFyAABlAABwaHTD1N//2un/3er/w838ZW3BEyOJJzKVAQ16NDmfwsn75fD/5u7/7PL/7vP/7fP/ + 7fP/7fL/7fP/7vP/7/T/8fb/9Pj/9vn/+fr//f3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/+Pr/9Pf/8fX/7vT/7PL/6/L/6fH/5u7/6vX/tsD0CQx4AAFwkZvi7ff/4vD/ + 4fD/z9j/OkGlAABiAABwBxWAAAt7BBN+P0uofYLUztb/4O7/6fb/6fP/qa7xQkyoBg56AABqMjugx8/+ + 5fH/4Ov/4On/3uj/3eb/3+j/3uj/1+L/0d3/1d7/3+f/7fL/9vj/+vz//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+fr/8/f/6/L/2d//v8j6vcf5ucP1wMv8wM3+vMj6PkqoAABo + UF25usP7tsPyvsr6sLrwQ0utAABqAAV1OUameIDRKDWZAAd2GyeOLDecmaHntsL0pbLom6riq7LzUlu0 + AANzBhR/AAZ0NT+ja3bBY2i/XGG6UViyWl65XGG7XGC6TVWvQU6pPkalODygqK7p8vb/+vz//v7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/7/T/wcj2R0ysExeFERmGDxuIFB6K + FBqICxSEAABsAAByDBiDCRSBBRCADhaFCRODAAh4AxF/AAl4CxeDHSaPAAp6AAN0AA19AAd3CBOBEBqH + BhGBAAh5AABwAAByAAh5BhSCAxWCAABsAABvAABlAABnAABxAABjAABmAABhAABdAABYAABhCAt/q7Lr + 8/f/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+fv/3uT/SE2vAABn + CBB/GiCMLzmfLTWcGByJFRyKGCOOMj2gHymRDxiGGyOPLDCXBRF/AAh3BhaCEyKMICqTKC2WNDqfIzCV + Awx6Eh+JHiaPAAR3AAZ5CxSDICWQX2q7Q1CqAA1+AAFxDxuHiZTbVGC4dHnQnabrTVqzY23EUV62Slau + LjaZXWm9sLjz5ez/9vn/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +Pv/4+n+e4LPfoPVpqv2vsf/zNX/zdb/xtH/v8v8pK7spKfysLb3vcr4ws784ej/hI/YAAZ1AAJzVF25 + yM//3Of/5+//i5LcAABpMzyfp6vxoKznlqHhqbbtx9H/8fz/kpvfAABiAABph4zc5PD/2OP/193/3un/ + 1+D/2OH/1+D/0Nr/zNL/3+j/6/L/7/T/9vn//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+Pr/9Pf/6vD/5u3/3+b/4uv/6PD/5+//5O3/5/P/sL3sXmS7mZzoz9f/3+z/4e// + mKLiEiKKCBF/KTWZr7T06/f/3ev/VF2zChSBipPcz9v+4u7/3ur/3ev/5/X/qrPrISmSDRJ2Xmq/3ur/ + 4uv/6vH/7fP/7fL/7/T/7vP/7fP/7fP/8PX/8fX/9Pf/+Pr/+/z//v7/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+Pr/9vn/9Pf/8vb/8vb/8/b/9Pf/7/T/6/L/tL/ubXLH + en/Ti43gqavy0t3/nafjMj6fJzaaAAV1GyeOYmW7Nz6fAABgNj6i1N//3uz/2uX/3Oj/5PH/wcj7FR2J + AAN0gong0tr/6fH/7/P/9vj/+Pr/+fv/+fv/+Pr/+Pr/+Pr/+fv/+vv//P3//f7//v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+/z/+/z/+/z//f3//f7/ + +fv/8fX/5Oz/jpbfc3jObnXLcXfOk5rks7b4iY3dR1KvDhuEAABoAABlEBV9U12ytcD13Or/3en/3ej/ + 1eL/q7fvGR+MKDKZbnnNxc/76PD/8fX/+fr//f7//v//AAAA/v7//f7//f3//P3//f3//f7//v//AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//f7//v7/AAAA + AAAAAAAAAAAAAAAA/f7/9vn/7/T/yNH5lJrleoDVmZ3pmpzpc3nPfoTWf4bYVFy3HSaLZ3PGsrb8v8r8 + y9n9q7jre4LRf4fUgIvXAwZ1AABrhYjb0NX/6PH/8PX/+Pr//f7/AAAAAAAA/v///f3/+vv/+Pr/9/r/ + 9/n/+Pr/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f7/+/z/+fr/9vj/9/n/ + +vz/+vv/+/z//v7/AAAAAAAAAAAAAAAA/v7/+vz/8/f/7PL/2uT/t8H1srP6vcH+nKTnSlOxV2C7TVaz + WGS8QUqmSlSuSFOtR1GtbXTKVl23ARB5AAh2AABnd33P3eP/4ur/7/T/9/n//P3/AAAAAAAAAAAA/P3/ + 9/n/8vb/7PH/6fD/7PL/7vP/8vb/9vn/+/z//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/+Pr/ + 8/b/7/T/8Pb/6vH/3eP97vL++fr//P3/AAAAAAAAAAAAAAAAAAAA/f7/+vv/9fj/7/T/5+//z9f+t7v4 + uLn9Z2zFLzucFCGIMz6gGCCMAAd4AAl2Dx2EER+GXWK8c3XLKzKXd4LP4er/6/L/8PX/9/n//P3//v// + AAAAAAAA/v7/+fv/8/b/7PP/y9H/i4/erLbt4er/5e3/7fP/8/b/+fv//f3//v7/AAAAAAAAAAAAAAAA + /v7/+/z/9vj/8PT/6/L/3+n/x9H9aHTAZGvG3+b9+Pr/+/z/AAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + +Pr/8vb/6/H/3OX+wMn4maDmdHrPWGG6T1a1eoHWcHfOTlayUlq1SlKubHjAxMj/0dn/4+v/7PL/8vb/ + +Pr//P3//v7/AAAAAAAAAAAA/f7/+fr/7vP/xsv5YGXAHymRKjKYYWS9rbLz4u3/6/P/8vb/+fr//f7/ + AAAAAAAAAAAA/v//+/z/9vj/7fL/5e3/xs7/Y23BIiiSAABeLTab3+b/9/r/+/z/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAA/f7/+vz/9vj/8PX/6vH/3eb/ydL8xM/6uMPyt733w8j/zNb/1Nz/3OT/4uz/5u7/ + 7fP/8vb/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAA/f7/+fv/7vP/jpHiAAJ1CxaBER6GAABoFRmGbXbH + 0Nf/7PL/9fj//P3/AAAAAAAAAAAA/v7/+fv/8/f/4Of/hYvbKDGZAABuAABdAAZyi5La5+7/9vn/+/z/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/9ff/8vb/7/X/7fP/6/L/5u3/5ez/6fD/ + 7PP/7/T/8fX/9Pf/9/n/+vv//P3//v7//v//AAAAAAAAAAAAAAAAAAAA/v7/+fv/8fb/2eH9fIbQExqH + AABrAAp6AAFyAABwS0+uztX39vn/+vz/AAAAAAAAAAAA/f7/+Pr/8ff/qbLpAABrAABhAABwDBWAfobX + 5e3/8PX/9vn//f3/AAAAAAAA/v///f7/+/z/+vv/+vv/+vz//P3//v7//v///v7//P3/+vz/+Pr/9/n/ + 9vj/9vj/9vj/9vj/9/n/+fr/+/z//P3//f7//v7//f7//P3/+/z/+vz/+/z//P3//v7/AAAA/v7/+/z/ + 9fj/7/T/5/H/uML1U1e1AAh5AABuAABvMjmdv8bz9vr/+vv/AAAAAAAAAAAA/f7/+fv/7/T/iY7aDxSA + GiONa3XHsr7w4Oj/6/H/9Pf/+vz//v7/AAAA/v///P3/+Pr/9Pf/8/f/9fj/9fj/9vn/+/z//v7/AAAA + AAAAAAAA/v7//f7//P3/+/z/+/z//P3//f7//v//AAAAAAAAAAAA/v7/+/z/9/n/9vn/9vn/9Pj/9vn/ + +/z//v7/AAAA/f7/+vz/9fj/7/T/6vL/3ef/i5PbGRqJBQl5jJbZ6vH/9Pj/+/z/AAAAAAAAAAAA/f7/ + +fv/8fT/1Nn9t7/0wcr54er/7fT/8fX/9fj/+vv//f7/AAAAAAAA/f3/+Pr/8PT/6/L/3uX/ztb/5Or/ + 8/f/+Pr//f7/AAAAAAAAAAAA/f7/+vz/+Pr/+fv/+fv/+vv//f3//v//AAAAAAAAAAAA/P3/9/n/7vL/ + 193/ztf/5u3/7vP/9Pf/+/z//v7/AAAA/v7//P3/+Pr/8fX/7PP/5/D/sLfxoKnk4+r/8vf/9/n//f3/ + AAAAAAAAAAAA/v7/+/z/9vn/9Pf/8vb/8fb/8fX/9Pf/+Pr//P3//v7/AAAAAAAA/v7/+vv/8vb/5+7/ + y9H/WWO9KSmSkZXj6vD/+Pv//P3/AAAAAAAA/f7/+Pr/9fj/8vb/6O7/7vP/9fj/+Pr//f7/AAAAAAAA + /v//+vv/8vb/7PP/hYraKiqKlp7i6PD/7fP/9ff/+/z//v7/AAAAAAAA/f7/+vv/9ff/8fX/8PX/8vb/ + 8/f/9vn/+/z//v7/AAAAAAAAAAAAAAAA/f7/+/z/+vv/+fr/+fr/+vv//P3//v7/AAAAAAAAAAAAAAAA + /P3/9fj/7PL/1d7/RUysAABhAABlg4ja6/D/+Pr//P3/AAAAAAAA+/z/9fj/6e7/2eD/h4/bnaXg7PH/ + 9fj/+/z/AAAAAAAA/v7/+Pr/8PX/y9X1JDGVAABaERWDoKnp6PH/7vP/9/n//P3/AAAAAAAAAAAA/v7/ + /P3/+vv/+fv/+fv/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//v7//v7//v//AAAAAAAA + AAAAAAAAAAAA/v7/+fv/8PX/7PX/ipPdAABsAABlQ1Cp3Ob/7vP/9/n//f7/AAAAAAAA+fv/9Pj/yNH5 + Ule2DBJ8Ljie0df+8fb/+fv//v7/AAAA/v7/+Pr/7/X/hY3YAABxAAl7AABuEBaEs7nz6fH/8fX/+vv/ + /v7/AAAAAAAAAAAAAAAA/v///v7//v7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9vn/7PL/0tn/LzidAQFsAAB0iZHb6vP/8PT/+fv//v//AAAA + /v7/+Pr/8vf/r7rqAAV4AABdPUen1N//7PL/9vn//f7/AAAA/v7/+fr/7/T/yc75S1G0AABrARKAAABp + Qker0df/7fP/9/n//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/5+7/cXXNAAd2AABuMDebzdT97PL/ + 9vj//P3/AAAAAAAA/v7/9/n/7/X/tL/uFCCLAABqHSqRvcf46fD/9Pf//f3/AAAAAAAA+vv/8vX/6vH/ + yM3+JC2XAABtAAV2Agx9q7Ly7vT/9vn//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/4uj/WWO1AAVx + KTaYu8T07fT/8vb/+vv//v7/AAAAAAAA/v7/9/n/7vX/vsn1Iy2SAABrAQ99mp/o6PD/9Pf//P3/AAAA + AAAA/P3/9/n/7vP/6fL/s7z2DBB/AABeQ0uttrr56e7/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +fv/4ef6g4zNbXfFw8v27fT/8vb/+Pr//f3/AAAAAAAAAAAA/v7/9/n/7vT/yNL7MjucAABtBxF/nKLo + 6fH/9Pf//P3/AAAAAAAA/v7/+/z/9fj/7fL/6/T/jZXbLzScrrP14en/7fL/+fv//v7/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+vz/8PP91dr34+f/8vb/8/f/9/r//P3//v//AAAAAAAAAAAA/v7/+Pr/8PX/1N3/ + QUqmAQRxBQ98m6Dm7PL/9fj//P3/AAAAAAAAAAAA/v7/+/z/9ff/8PX/5ez/ytH94ej/8vb/9vj/+/z/ + /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA + /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ + 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA + AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file diff --git a/CodeWalker.sln b/CodeWalker.sln index eafff3b..c22e80d 100644 --- a/CodeWalker.sln +++ b/CodeWalker.sln @@ -15,6 +15,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeWalker.WinForms", "Code EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeWalker.Core", "CodeWalker.Core\CodeWalker.Core.csproj", "{DE50D3A6-B49E-47A0-ABE6-101473A00759}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeWalker.ErrorReport", "CodeWalker.ErrorReport\CodeWalker.ErrorReport.csproj", "{47A2C383-99B4-4447-94D9-0685E6D7E2DA}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -73,6 +75,18 @@ Global {DE50D3A6-B49E-47A0-ABE6-101473A00759}.Release|x64.Build.0 = Release|Any CPU {DE50D3A6-B49E-47A0-ABE6-101473A00759}.Release|x86.ActiveCfg = Release|Any CPU {DE50D3A6-B49E-47A0-ABE6-101473A00759}.Release|x86.Build.0 = Release|Any CPU + {47A2C383-99B4-4447-94D9-0685E6D7E2DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {47A2C383-99B4-4447-94D9-0685E6D7E2DA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {47A2C383-99B4-4447-94D9-0685E6D7E2DA}.Debug|x64.ActiveCfg = Debug|Any CPU + {47A2C383-99B4-4447-94D9-0685E6D7E2DA}.Debug|x64.Build.0 = Debug|Any CPU + {47A2C383-99B4-4447-94D9-0685E6D7E2DA}.Debug|x86.ActiveCfg = Debug|Any CPU + {47A2C383-99B4-4447-94D9-0685E6D7E2DA}.Debug|x86.Build.0 = Debug|Any CPU + {47A2C383-99B4-4447-94D9-0685E6D7E2DA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {47A2C383-99B4-4447-94D9-0685E6D7E2DA}.Release|Any CPU.Build.0 = Release|Any CPU + {47A2C383-99B4-4447-94D9-0685E6D7E2DA}.Release|x64.ActiveCfg = Release|Any CPU + {47A2C383-99B4-4447-94D9-0685E6D7E2DA}.Release|x64.Build.0 = Release|Any CPU + {47A2C383-99B4-4447-94D9-0685E6D7E2DA}.Release|x86.ActiveCfg = Release|Any CPU + {47A2C383-99B4-4447-94D9-0685E6D7E2DA}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From b971beb5bf3797d04a0f1d85ea75ba0f8499b6dc Mon Sep 17 00:00:00 2001 From: Soloman N Date: Thu, 7 Jun 2018 12:42:41 -0400 Subject: [PATCH 013/158] added grass painting --- CodeWalker.Core/CodeWalker.Core.csproj | 1 + .../GameFiles/FileTypes/YmapFile.cs | 494 +++++++- CodeWalker.Core/GameFiles/MetaTypes/Meta.cs | 4 + CodeWalker.Core/GameFiles/Resources/Bounds.cs | 7 + CodeWalker.Core/Utils/BoundingBoxes.cs | 34 + CodeWalker.Core/Utils/Vectors.cs | 4 +- Project/Panels/EditProjectManifestPanel.cs | 12 + Project/Panels/EditYmapGrassPanel.Designer.cs | 688 ++++++++++- Project/Panels/EditYmapGrassPanel.cs | 277 ++++- Project/Panels/EditYmapGrassPanel.resx | 3 + Project/Panels/ProjectExplorerPanel.cs | 54 + Project/ProjectForm.Designer.cs | 1015 +++++++++-------- Project/ProjectForm.cs | 182 ++- Rendering/RenderableCache.cs | 8 + Rendering/Renderer.cs | 5 + Rendering/Shaders/BasicShader.cs | 4 + WorldForm.cs | 184 ++- 17 files changed, 2390 insertions(+), 586 deletions(-) create mode 100644 CodeWalker.Core/Utils/BoundingBoxes.cs diff --git a/CodeWalker.Core/CodeWalker.Core.csproj b/CodeWalker.Core/CodeWalker.Core.csproj index e613082..3e40522 100644 --- a/CodeWalker.Core/CodeWalker.Core.csproj +++ b/CodeWalker.Core/CodeWalker.Core.csproj @@ -114,6 +114,7 @@ True Resources.resx
+ diff --git a/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs index 7e61049..34fdb8c 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs @@ -7,6 +7,8 @@ using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; +using CodeWalker.Core.Utils; +using CodeWalker.World; namespace CodeWalker.GameFiles { @@ -925,6 +927,7 @@ namespace CodeWalker.GameFiles GrassInstanceBatches = batches.ToArray(); HasChanged = true; + UpdateGrassPhysDict(true); } public bool RemoveGrassBatch(YmapGrassInstanceBatch batch) @@ -949,6 +952,10 @@ namespace CodeWalker.GameFiles } } + if (batches.Count <= 0) + { + UpdateGrassPhysDict(false); + } GrassInstanceBatches = batches.ToArray(); @@ -1137,6 +1144,27 @@ namespace CodeWalker.GameFiles } + private void UpdateGrassPhysDict(bool add) + { + var physDict = physicsDictionaries?.ToList() ?? new List(); + var vproc1 = JenkHash.GenHash("v_proc1"); + var vproc2 = JenkHash.GenHash("v_proc2"); // I think you need vproc2 as well. + var change = false; + if (!physDict.Contains(vproc1)) + { + change = true; + if (add) physDict.Add(vproc1); + else physDict.Remove(vproc1); + } + if (!physDict.Contains(vproc2)) + { + change = true; + if (add) physDict.Add(vproc2); + else physDict.Remove(vproc2); + } + if (change) physicsDictionaries = physDict.ToArray(); + } + private static uint SetBit(uint value, int bit) { @@ -1493,6 +1521,8 @@ namespace CodeWalker.GameFiles [TypeConverter(typeof(ExpandableObjectConverter))] public class YmapGrassInstanceBatch { + private const float BatchVertMultiplier = 0.00001525878f; + public Archetype Archetype { get; set; } //cached by GameFileCache on loading... public rage__fwGrassInstanceListDef Batch { get; set; } public rage__fwGrassInstanceListDef__InstanceData[] Instances { get; set; } @@ -1504,10 +1534,473 @@ namespace CodeWalker.GameFiles public float Distance; //used for rendering public YmapFile Ymap { get; set; } + public bool BrushEnabled; + public bool HasChanged; + public override string ToString() { return Batch.ToString(); } + + public void UpdateInstanceCount() + { + var b = Batch; + var ins = b.InstanceList; + ins.Count1 = (ushort)Instances.Length; + b.InstanceList = ins; + Batch = b; + } + + public bool EraseInstancesAtMouse( + YmapGrassInstanceBatch batch, + SpaceRayIntersectResult mouseRay, + float radius) + { + // some inits + var instances = batch.Instances; + + var delInstances = new List(); + + rage__spdAABB batchAABB = batch.Batch.BatchAABB; + var oldInstanceBounds = new BoundingBox + ( + batchAABB.min.XYZ(), + batchAABB.max.XYZ() + ); + var deleteSphere = new BoundingSphere(mouseRay.Position, radius); + + // check each instance to see if it's in the delete sphere + // thankfully we've just avoided an O(n^2) op using this bounds stuff (doesn't mean it's super fast though, + // but it's not super slow either, even at like 50,000 instances) + foreach (var instance in instances) + { + var grassPos = new Vector3 + { + X = instance.Position.u0, + Y = instance.Position.u1, + Z = instance.Position.u2 + }; + // get the world pos + var worldPos = oldInstanceBounds.Minimum + oldInstanceBounds.Size() * (grassPos * BatchVertMultiplier); + + // create a boundary around the instance. + var instanceBounds = new BoundingBox(worldPos - (Vector3.One * 1.5f), worldPos + (Vector3.One * 1.5f)); + + // check if the sphere contains the boundary. + var bb = new BoundingBox(instanceBounds.Minimum, instanceBounds.Maximum); + var ct = deleteSphere.Contains(ref bb); + if (ct == ContainmentType.Contains || ct == ContainmentType.Intersects) + { + delInstances.Add(instance); // Add a copy of this instance + } + } + if (delInstances.Count <= 0) + return false; + + // now we need to recalculate the bounds. + var insList = instances.ToList(); + foreach (var inst in delInstances) + { + if (insList.Contains(inst)) + { + insList.Remove(inst); + } + } + GetNewGrassBounds(insList, oldInstanceBounds, out var min, out var max); + var newBounds = new BoundingBox(min, max); + + // recalc instances + var b = RecalcBatch(newBounds, batch); + batch.Batch = b; + insList = RecalculateInstances(insList, oldInstanceBounds, newBounds); + batch.Instances = insList.ToArray(); + + return true; + } + + public void CreateInstancesAtMouse( + YmapGrassInstanceBatch batch, + SpaceRayIntersectResult mouseRay, + float radius, + int amount, + Func spawnRayFunc, + Color color, + int ao, + int scale, + Vector3 pad, + bool randomScale) + { + var spawnPosition = mouseRay.Position; + var positions = new List(); + var normals = new List(); + + // Get rand positions. + GetSpawns(spawnPosition, spawnRayFunc, positions, normals, radius, amount); + if (positions.Count <= 0) return; + + // get the instance list + var instances = + batch.Instances?.ToList() ?? new List(); + var batchAABB = batch.Batch.BatchAABB; + + // make sure to store the old instance bounds for the original + // grass instances + var oldInstanceBounds = new BoundingBox(batchAABB.min.XYZ(), batchAABB.max.XYZ()); + + // Begin the spawn bounds. + var grassBound = positions.Count <= 0 + ? new BoundingBox(Vector3.Zero, Vector3.Zero) + : new BoundingBox(positions[0] - (Vector3.One * 1.5f), positions[0] + (Vector3.One * 1.5f)); + grassBound = EncapsulatePositions(positions, grassBound); + + // Calculate the new spawn bounds. + var newInstanceBounds = new BoundingBox(oldInstanceBounds.Minimum, oldInstanceBounds.Maximum); + newInstanceBounds = instances.Count > 0 + ? newInstanceBounds.Encapsulate(grassBound) + : new BoundingBox(grassBound.Minimum, grassBound.Maximum); + + // now we need to recalculate the position of each instance + instances = RecalculateInstances(instances, oldInstanceBounds, newInstanceBounds); + + // Add new instances at each spawn position with + // the parameters in the brush. + SpawnInstances(positions, normals, instances, newInstanceBounds, color, ao, scale, pad, randomScale); + + // then recalc the bounds of the grass batch + var b = RecalcBatch(newInstanceBounds, batch); + + // plug our values back in and refresh the ymap. + batch.Batch = b; + + // Give back the new intsances + batch.Instances = instances.ToArray(); + } + + // bhv approach recommended by dexy. + public YmapGrassInstanceBatch[] OptimizeInstances(YmapGrassInstanceBatch batch, float minRadius) + { + // this function will return an array of grass instance batches + // that are split up into sectors (groups) with a specific size. + // say for instance we have 30,000 instances spread across a large + // distance. We will split those instances into a grid-like group + // and return the groups as an array of batches. + var oldInstanceBounds = new BoundingBox(batch.Batch.BatchAABB.min.XYZ(), batch.Batch.BatchAABB.max.XYZ()); + + if (oldInstanceBounds.Radius() < minRadius) + { + return null; + } + + // Get our optimized grassInstances + var split = SplitGrassRecursive(batch.Instances.ToList(), oldInstanceBounds, minRadius); + + // Initiate a new batch list. + var newBatches = new List(); + + foreach (var grassList in split) + { + // Create a new batch + var newBatch = new YmapGrassInstanceBatch + { + Archetype = batch.Archetype, + Ymap = batch.Ymap + }; + + // Get the boundary of the grassInstances + GetNewGrassBounds(grassList, oldInstanceBounds, out var min, out var max); + var newInstanceBounds = new BoundingBox(min, max); + + // Recalculate the batch boundaries. + var b = RecalcBatch(newInstanceBounds, newBatch); + newBatch.Batch = b; + + var ins = RecalculateInstances(grassList, oldInstanceBounds, newInstanceBounds); + newBatch.Instances = ins.ToArray(); + newBatches.Add(newBatch); + } + + return newBatches.ToArray(); + } + + private List> SplitGrassRecursive( + IReadOnlyList grassInstances, + BoundingBox batchAABB, + float minRadius = 15F + ) + { + var ret = new List>(); + var oldPoints = SplitGrass(grassInstances, batchAABB); + while (true) + { + var stop = true; + var newPoints = new List>(); + foreach (var mb in oldPoints) + { + // for some reason we got a null group? + if (mb == null) + continue; + + // Get the bounds of the grassInstances list + GetNewGrassBounds(mb, batchAABB, out var min, out var max); + var radius = (max - min).Length() * 0.5F; // get the radius + + // check if the radius of the grassInstances + if (radius <= minRadius) + { + // this point list is within the minimum + // radius. + ret.Add(mb); + continue; // we don't need to continue. + } + + // since we're here let's keep going + stop = false; + + // split the grassInstances again + var s = SplitGrass(mb, batchAABB); + + // add it into the new grassInstances list. + newPoints.AddRange(s); + } + + // set the old grassInstances to the new grassInstances. + oldPoints = newPoints.ToArray(); + + // if we're done, and all grassInstances are within the desired size + // then end the loop. + if (stop) break; + } + return ret; + } + + private List[] SplitGrass( + IReadOnlyList points, + BoundingBox batchAABB) + { + var pointGroup = new List[2]; + + // Calculate the bounds of these grassInstances. + GetNewGrassBounds(points, batchAABB, out var min, out var max); + var m = new BoundingBox(min, max); + + // Get the center and size + var mm = new Vector3 + { + X = Math.Abs(m.Minimum.X - m.Maximum.X), + Y = Math.Abs(m.Minimum.Y - m.Maximum.Y), + Z = Math.Abs(m.Minimum.Z - m.Maximum.Z) + }; + + // x is the greatest axis... + if (mm.X > mm.Y && mm.X > mm.Z) + { + // Calculate both boundaries. + var lhs = new BoundingBox(m.Minimum, m.Maximum - new Vector3(mm.X * 0.5F, 0, 0)); + var rhs = new BoundingBox(m.Minimum + new Vector3(mm.X * 0.5F, 0, 0), m.Maximum); + + // Set the grassInstances accordingly. + pointGroup[0] = points + .Where(p => lhs.Contains(GetGrassWorldPos(p.Position, batchAABB)) == ContainmentType.Contains).ToList(); + pointGroup[1] = points + .Where(p => rhs.Contains(GetGrassWorldPos(p.Position, batchAABB)) == ContainmentType.Contains).ToList(); + } + // y is the greatest axis... + else if (mm.Y > mm.X && mm.Y > mm.Z) + { + // Calculate both boundaries. + var lhs = new BoundingBox(m.Minimum, m.Maximum - new Vector3(0, mm.Y * 0.5F, 0)); + var rhs = new BoundingBox(m.Minimum + new Vector3(0, mm.Y * 0.5F, 0), m.Maximum); + + // Set the grassInstances accordingly. + pointGroup[0] = points + .Where(p => lhs.Contains(GetGrassWorldPos(p.Position, batchAABB)) == ContainmentType.Contains).ToList(); + pointGroup[1] = points + .Where(p => rhs.Contains(GetGrassWorldPos(p.Position, batchAABB)) == ContainmentType.Contains).ToList(); + } + // z is the greatest axis... + else if (mm.Z > mm.X && mm.Z > mm.Y) + { + // Calculate both boundaries. + var lhs = new BoundingBox(m.Minimum, m.Maximum - new Vector3(0, 0, mm.Z * 0.5F)); + var rhs = new BoundingBox(m.Minimum + new Vector3(0, 0, mm.Z * 0.5F), m.Maximum); + + // Set the grassInstances accordingly. + pointGroup[0] = points + .Where(p => lhs.Contains(GetGrassWorldPos(p.Position, batchAABB)) == ContainmentType.Contains).ToList(); + pointGroup[1] = points + .Where(p => rhs.Contains(GetGrassWorldPos(p.Position, batchAABB)) == ContainmentType.Contains).ToList(); + } + return pointGroup; + } + + private static void GetNewGrassBounds(IReadOnlyList newGrass, BoundingBox oldAABB, + out Vector3 min, out Vector3 max) + { + if (newGrass.Count <= 0) + { + min = Vector3.Zero; + max = Vector3.Zero; + return; + } + var grassWorldPos = GetGrassWorldPos(newGrass[0].Position, oldAABB); + var bounds = new BoundingBox(grassWorldPos - (Vector3.One * 1.5f), grassWorldPos + (Vector3.One * 1.5f)); + foreach (var point in newGrass) + { + var worldPos = GetGrassWorldPos(point.Position, oldAABB); + var tempBounds = new BoundingBox(worldPos - (Vector3.One * 1.5f), worldPos + (Vector3.One * 1.5f)); + bounds = bounds.Encapsulate(tempBounds); + } + min = bounds.Minimum; + max = bounds.Maximum; + } + + private void SpawnInstances( + IReadOnlyList positions, + IReadOnlyList normals, + ICollection instanceList, + BoundingBox instanceBounds, + Color color, + int ao, + int scale, + Vector3 pad, + bool randomScale) + { + for (var i = 0; i < positions.Count; i++) + { + var pos = positions[i]; + // create the new instance. + var newInstance = CreateNewInstance(normals[i], color, ao, scale, pad, randomScale); + + // get the grass position of the new instance and add it to the + // instance list + var grassPosition = GetGrassPos(pos, instanceBounds); + newInstance.Position = grassPosition; + instanceList.Add(newInstance); + } + } + + private rage__fwGrassInstanceListDef__InstanceData CreateNewInstance(Vector3 normal, Color color, int ao, int scale, Vector3 pad, + bool randomScale = false) + { + //Vector3 pad = FloatUtil.ParseVector3String(PadTextBox.Text); + //int scale = (int)ScaleNumericUpDown.Value; + var rand = new Random(); + if (randomScale) + scale = rand.Next(scale / 2, scale); + var newInstance = new rage__fwGrassInstanceListDef__InstanceData + { + Ao = (byte)ao, + Scale = (byte)scale, + Color = new ArrayOfBytes3 { b0 = color.R, b1 = color.G, b2 = color.B }, + Pad = new ArrayOfBytes3 { b0 = (byte)pad.X, b1 = (byte)pad.Y, b2 = (byte)pad.Z }, + NormalX = (byte)((normal.X + 1) * 0.5F * 255F), + NormalY = (byte)((normal.Y + 1) * 0.5F * 255F) + }; + return newInstance; + } + + private rage__fwGrassInstanceListDef RecalcBatch(BoundingBox newInstanceBounds, YmapGrassInstanceBatch batch) + { + batch.AABBMax = newInstanceBounds.Maximum; + batch.AABBMin = newInstanceBounds.Minimum; + batch.Position = newInstanceBounds.Center(); + batch.Radius = newInstanceBounds.Radius(); + var b = batch.Batch; + b.BatchAABB = new rage__spdAABB + { + min = + new Vector4(newInstanceBounds.Minimum, + 0), // Let's pass the new stuff into the batchabb as well just because. + max = new Vector4(newInstanceBounds.Maximum, 0) + }; + return b; + } + + private void GetSpawns( + Vector3 origin, Func spawnRayFunc, + ICollection positions, + ICollection normals, + float radius, + int resolution = 28) + { + var rand = new Random(); + for (var i = 0; i < resolution; i++) + { + var randX = (float)rand.NextDouble(-radius, radius); + var randY = (float)rand.NextDouble(-radius, radius); + var posOffset = origin + new Vector3(randX, randY, 2f); + var spaceRay = spawnRayFunc.Invoke(posOffset); + if (!spaceRay.Hit) continue; + normals.Add(spaceRay.Normal); + positions.Add(spaceRay.Position); + } + } + + private static List RecalculateInstances( + List instances, + BoundingBox oldInstanceBounds, + BoundingBox newInstanceBounds) + { + var refreshList = new List(); + foreach (var inst in instances) + { + // Copy instance + var copy = + new rage__fwGrassInstanceListDef__InstanceData + { + Position = inst.Position, + Ao = inst.Ao, + Color = inst.Color, + NormalX = inst.NormalX, + NormalY = inst.NormalY, + Pad = inst.Pad, + Scale = inst.Scale + }; + // get the position from where we would be in the old bounds, and move it to + // the position it needs to be in the new bounds. + var oldPos = GetGrassWorldPos(copy.Position, oldInstanceBounds); + //var oldPos = oldInstanceBounds.min + oldInstanceBounds.Size * (grassPos * BatchVertMultiplier); + copy.Position = GetGrassPos(oldPos, newInstanceBounds); + refreshList.Add(copy); + } + instances = refreshList.ToList(); + return instances; + } + + private static BoundingBox EncapsulatePositions(IEnumerable positions, BoundingBox bounds) + { + foreach (var pos in positions) + { + var posBounds = new BoundingBox(pos - (Vector3.One * 1.5f), pos + (Vector3.One * 1.5f)); + bounds = bounds.Encapsulate(posBounds); + } + return bounds; + } + + private static ArrayOfUshorts3 GetGrassPos(Vector3 worldPos, BoundingBox batchAABB) + { + var offset = worldPos - batchAABB.Minimum; + var size = batchAABB.Size(); + var percentage = + new Vector3( + offset.X / size.X, + offset.Y / size.Y, + offset.Z / size.Z + ); + var instancePos = percentage / BatchVertMultiplier; + return new ArrayOfUshorts3 + { + u0 = (ushort)instancePos.X, + u1 = (ushort)instancePos.Y, + u2 = (ushort)instancePos.Z + }; + } + + private static Vector3 GetGrassWorldPos(ArrayOfUshorts3 grassPos, BoundingBox batchAABB) + { + return batchAABB.Minimum + batchAABB.Size() * (grassPos.XYZ() * BatchVertMultiplier); + } } [TypeConverter(typeof(ExpandableObjectConverter))] @@ -1548,7 +2041,6 @@ namespace CodeWalker.GameFiles } } - [TypeConverter(typeof(ExpandableObjectConverter))] public class YmapTimeCycleModifier { diff --git a/CodeWalker.Core/GameFiles/MetaTypes/Meta.cs b/CodeWalker.Core/GameFiles/MetaTypes/Meta.cs index 7ee83cc..c617940 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/Meta.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/Meta.cs @@ -935,6 +935,10 @@ namespace CodeWalker.GameFiles [TC(typeof(EXP))] public struct ArrayOfUshorts3 //array of 3 ushorts { public ushort u0, u1, u2; + public Vector3 XYZ() + { + return new Vector3(u0, u1, u2); + } public override string ToString() { return u0.ToString() + ", " + u1.ToString() + ", " + u2.ToString(); diff --git a/CodeWalker.Core/GameFiles/Resources/Bounds.cs b/CodeWalker.Core/GameFiles/Resources/Bounds.cs index 705dad5..1f25591 100644 --- a/CodeWalker.Core/GameFiles/Resources/Bounds.cs +++ b/CodeWalker.Core/GameFiles/Resources/Bounds.cs @@ -1443,6 +1443,13 @@ namespace CodeWalker.GameFiles return Materials[type.Index]; } + public static BoundsMaterialData GetMaterial(byte index) + { + if (Materials == null) return null; + if ((int)index >= Materials.Count) return null; + return Materials[index]; + } + public static string GetMaterialName(BoundsMaterialType type) { var m = GetMaterial(type); diff --git a/CodeWalker.Core/Utils/BoundingBoxes.cs b/CodeWalker.Core/Utils/BoundingBoxes.cs new file mode 100644 index 0000000..2486ca6 --- /dev/null +++ b/CodeWalker.Core/Utils/BoundingBoxes.cs @@ -0,0 +1,34 @@ +using System; +using SharpDX; + +namespace CodeWalker.Core.Utils +{ + public static class BoundingBoxExtensions + { + public static Vector3 Size(this BoundingBox bounds) + { + return new Vector3( + Math.Abs(bounds.Maximum.X - bounds.Minimum.X), + Math.Abs(bounds.Maximum.Y - bounds.Minimum.Y), + Math.Abs(bounds.Maximum.Z - bounds.Minimum.Z)); + } + + public static Vector3 Center(this BoundingBox bounds) + { + return (bounds.Minimum + bounds.Maximum) * 0.5F; + } + + public static BoundingBox Encapsulate(this BoundingBox box, BoundingBox bounds) + { + box.Minimum = Vector3.Min(box.Minimum, bounds.Minimum); + box.Maximum = Vector3.Max(box.Maximum, bounds.Maximum); + return box; + } + + public static float Radius(this BoundingBox box) + { + var extents = (box.Maximum - box.Minimum) * 0.5F; + return extents.Length(); + } + } +} diff --git a/CodeWalker.Core/Utils/Vectors.cs b/CodeWalker.Core/Utils/Vectors.cs index b953850..19b354e 100644 --- a/CodeWalker.Core/Utils/Vectors.cs +++ b/CodeWalker.Core/Utils/Vectors.cs @@ -4,18 +4,17 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using CodeWalker.GameFiles; namespace CodeWalker { public static class Vectors { - public static Vector3 XYZ(this Vector4 v) { return new Vector3(v.X, v.Y, v.Z); } - public static Vector3 Round(this Vector3 v) { return new Vector3((float)Math.Round(v.X), (float)Math.Round(v.Y), (float)Math.Round(v.Z)); @@ -25,7 +24,6 @@ namespace CodeWalker { return new Vector4((float)Math.Floor(v.X), (float)Math.Floor(v.Y), (float)Math.Floor(v.Z), (float)Math.Floor(v.W)); } - } diff --git a/Project/Panels/EditProjectManifestPanel.cs b/Project/Panels/EditProjectManifestPanel.cs index d15cb87..a253983 100644 --- a/Project/Panels/EditProjectManifestPanel.cs +++ b/Project/Panels/EditProjectManifestPanel.cs @@ -138,6 +138,18 @@ namespace CodeWalker.Project.Panels } } + if (ymap.GrassInstanceBatches != null) + { + foreach (var batch in ymap.GrassInstanceBatches) + { + var ytyp = batch.Archetype?.Ytyp; + var ytypname = getYtypName(ytyp); + if (ytyp != null) + { + mapdeps[ytypname] = ytyp; + } + } + } sb.AppendLine(" "); sb.AppendLine(" " + ymapname + ""); diff --git a/Project/Panels/EditYmapGrassPanel.Designer.cs b/Project/Panels/EditYmapGrassPanel.Designer.cs index 824c62a..f4d8076 100644 --- a/Project/Panels/EditYmapGrassPanel.Designer.cs +++ b/Project/Panels/EditYmapGrassPanel.Designer.cs @@ -28,35 +28,711 @@ /// private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditYmapGrassPanel)); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.GrassBatchTab = new System.Windows.Forms.TabPage(); + this.label17 = new System.Windows.Forms.Label(); + this.OptmizationThresholdNumericUpDown = new System.Windows.Forms.NumericUpDown(); + this.textBox5 = new System.Windows.Forms.TextBox(); + this.OptimizeBatchButton = new System.Windows.Forms.Button(); + this.label14 = new System.Windows.Forms.Label(); + this.textBox4 = new System.Windows.Forms.TextBox(); + this.label13 = new System.Windows.Forms.Label(); + this.HashLabel = new System.Windows.Forms.Label(); + this.ArchetypeNameTextBox = new System.Windows.Forms.TextBox(); + this.label7 = new System.Windows.Forms.Label(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.label12 = new System.Windows.Forms.Label(); + this.label11 = new System.Windows.Forms.Label(); + this.OrientToTerrainNumericUpDown = new System.Windows.Forms.NumericUpDown(); + this.ScaleRangeTextBox = new System.Windows.Forms.TextBox(); + this.label10 = new System.Windows.Forms.Label(); + this.LodFadeRangeNumericUpDown = new System.Windows.Forms.NumericUpDown(); + this.label9 = new System.Windows.Forms.Label(); + this.LodFadeStartDistanceNumericUpDown = new System.Windows.Forms.NumericUpDown(); + this.label6 = new System.Windows.Forms.Label(); + this.LodDistNumericUpDown = new System.Windows.Forms.NumericUpDown(); + this.PositionTextBox = new System.Windows.Forms.TextBox(); this.label1 = new System.Windows.Forms.Label(); + this.GrassGoToButton = new System.Windows.Forms.Button(); + this.GrassDeleteButton = new System.Windows.Forms.Button(); + this.GrassAddToProjectButton = new System.Windows.Forms.Button(); + this.BrushTab = new System.Windows.Forms.TabPage(); + this.label16 = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.GrassColorLabel = new System.Windows.Forms.Label(); + this.label15 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.AoNumericUpDown = new System.Windows.Forms.NumericUpDown(); + this.PadTextBox = new System.Windows.Forms.TextBox(); + this.ScaleNumericUpDown = new System.Windows.Forms.NumericUpDown(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.RandomizeScaleCheckBox = new System.Windows.Forms.CheckBox(); + this.BrushModeCheckBox = new System.Windows.Forms.CheckBox(); + this.brushSettingsGroupBox = new System.Windows.Forms.GroupBox(); + this.DensityNumericUpDown = new System.Windows.Forms.NumericUpDown(); + this.RadiusNumericUpDown = new System.Windows.Forms.NumericUpDown(); + this.label5 = new System.Windows.Forms.Label(); + this.radiusLabel = new System.Windows.Forms.Label(); + this.label18 = new System.Windows.Forms.Label(); + this.OptimizeBatchButtonTooltip = new System.Windows.Forms.ToolTip(this.components); + this.tabControl1.SuspendLayout(); + this.GrassBatchTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.OptmizationThresholdNumericUpDown)).BeginInit(); + this.groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.OrientToTerrainNumericUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.LodFadeRangeNumericUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.LodFadeStartDistanceNumericUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.LodDistNumericUpDown)).BeginInit(); + this.BrushTab.SuspendLayout(); + this.groupBox2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.AoNumericUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScaleNumericUpDown)).BeginInit(); + this.brushSettingsGroupBox.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.DensityNumericUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.RadiusNumericUpDown)).BeginInit(); this.SuspendLayout(); // + // tabControl1 + // + this.tabControl1.Controls.Add(this.GrassBatchTab); + this.tabControl1.Controls.Add(this.BrushTab); + this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl1.Location = new System.Drawing.Point(0, 0); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(554, 355); + this.tabControl1.TabIndex = 37; + // + // GrassBatchTab + // + this.GrassBatchTab.Controls.Add(this.label18); + this.GrassBatchTab.Controls.Add(this.label17); + this.GrassBatchTab.Controls.Add(this.OptmizationThresholdNumericUpDown); + this.GrassBatchTab.Controls.Add(this.textBox5); + this.GrassBatchTab.Controls.Add(this.OptimizeBatchButton); + this.GrassBatchTab.Controls.Add(this.label14); + this.GrassBatchTab.Controls.Add(this.textBox4); + this.GrassBatchTab.Controls.Add(this.label13); + this.GrassBatchTab.Controls.Add(this.HashLabel); + this.GrassBatchTab.Controls.Add(this.ArchetypeNameTextBox); + this.GrassBatchTab.Controls.Add(this.label7); + this.GrassBatchTab.Controls.Add(this.groupBox1); + this.GrassBatchTab.Controls.Add(this.PositionTextBox); + this.GrassBatchTab.Controls.Add(this.label1); + this.GrassBatchTab.Controls.Add(this.GrassGoToButton); + this.GrassBatchTab.Controls.Add(this.GrassDeleteButton); + this.GrassBatchTab.Controls.Add(this.GrassAddToProjectButton); + this.GrassBatchTab.Location = new System.Drawing.Point(4, 22); + this.GrassBatchTab.Name = "GrassBatchTab"; + this.GrassBatchTab.Padding = new System.Windows.Forms.Padding(3); + this.GrassBatchTab.Size = new System.Drawing.Size(546, 329); + this.GrassBatchTab.TabIndex = 0; + this.GrassBatchTab.Text = "Grass Batch"; + this.GrassBatchTab.UseVisualStyleBackColor = true; + // + // label17 + // + this.label17.AutoSize = true; + this.label17.Location = new System.Drawing.Point(400, 241); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(54, 13); + this.label17.TabIndex = 51; + this.label17.Text = "Threshold"; + // + // OptmizationThresholdNumericUpDown + // + this.OptmizationThresholdNumericUpDown.Location = new System.Drawing.Point(460, 236); + this.OptmizationThresholdNumericUpDown.Maximum = new decimal(new int[] { + 999999, + 0, + 0, + 0}); + this.OptmizationThresholdNumericUpDown.Name = "OptmizationThresholdNumericUpDown"; + this.OptmizationThresholdNumericUpDown.Size = new System.Drawing.Size(66, 20); + this.OptmizationThresholdNumericUpDown.TabIndex = 50; + this.OptmizationThresholdNumericUpDown.Value = new decimal(new int[] { + 5, + 0, + 0, + 0}); + // + // textBox5 + // + this.textBox5.Location = new System.Drawing.Point(93, 237); + this.textBox5.Name = "textBox5"; + this.textBox5.ReadOnly = true; + this.textBox5.Size = new System.Drawing.Size(282, 20); + this.textBox5.TabIndex = 49; + this.textBox5.Text = "TODO!"; + // + // OptimizeBatchButton + // + this.OptimizeBatchButton.Location = new System.Drawing.Point(403, 207); + this.OptimizeBatchButton.Name = "OptimizeBatchButton"; + this.OptimizeBatchButton.Size = new System.Drawing.Size(123, 24); + this.OptimizeBatchButton.TabIndex = 50; + this.OptimizeBatchButton.Text = "Optimize Batch"; + this.OptimizeBatchButtonTooltip.SetToolTip(this.OptimizeBatchButton, "Will split your batch into multiple different batches based on the threshold. If " + + "your threshold is 5.0 then each batch will have a size of 5.0 meters."); + this.OptimizeBatchButton.UseVisualStyleBackColor = true; + this.OptimizeBatchButton.Click += new System.EventHandler(this.OptimizeBatchButton_Click); + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(22, 240); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(68, 13); + this.label14.TabIndex = 48; + this.label14.Text = "Extents Max:"; + // + // textBox4 + // + this.textBox4.Location = new System.Drawing.Point(93, 210); + this.textBox4.Name = "textBox4"; + this.textBox4.ReadOnly = true; + this.textBox4.Size = new System.Drawing.Size(282, 20); + this.textBox4.TabIndex = 47; + this.textBox4.Text = "TODO!"; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(22, 213); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(65, 13); + this.label13.TabIndex = 46; + this.label13.Text = "Extents Min:"; + // + // HashLabel + // + this.HashLabel.AutoSize = true; + this.HashLabel.Location = new System.Drawing.Point(211, 16); + this.HashLabel.Name = "HashLabel"; + this.HashLabel.Size = new System.Drawing.Size(35, 13); + this.HashLabel.TabIndex = 45; + this.HashLabel.Text = "Hash:"; + // + // ArchetypeNameTextBox + // + this.ArchetypeNameTextBox.Location = new System.Drawing.Point(61, 13); + this.ArchetypeNameTextBox.Name = "ArchetypeNameTextBox"; + this.ArchetypeNameTextBox.Size = new System.Drawing.Size(144, 20); + this.ArchetypeNameTextBox.TabIndex = 44; + this.ArchetypeNameTextBox.TextChanged += new System.EventHandler(this.ArchetypeNameTextBox_TextChanged); + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(11, 16); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(35, 13); + this.label7.TabIndex = 43; + this.label7.Text = "Name"; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.label12); + this.groupBox1.Controls.Add(this.label11); + this.groupBox1.Controls.Add(this.OrientToTerrainNumericUpDown); + this.groupBox1.Controls.Add(this.ScaleRangeTextBox); + this.groupBox1.Controls.Add(this.label10); + this.groupBox1.Controls.Add(this.LodFadeRangeNumericUpDown); + this.groupBox1.Controls.Add(this.label9); + this.groupBox1.Controls.Add(this.LodFadeStartDistanceNumericUpDown); + this.groupBox1.Controls.Add(this.label6); + this.groupBox1.Controls.Add(this.LodDistNumericUpDown); + this.groupBox1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.groupBox1.Location = new System.Drawing.Point(14, 67); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(384, 132); + this.groupBox1.TabIndex = 42; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Batch"; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(197, 24); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(69, 13); + this.label12.TabIndex = 47; + this.label12.Text = "Scale Range"; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(8, 102); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(87, 13); + this.label11.TabIndex = 7; + this.label11.Text = "Orient To Terrain"; + // + // OrientToTerrainNumericUpDown + // + this.OrientToTerrainNumericUpDown.DecimalPlaces = 1; + this.OrientToTerrainNumericUpDown.Location = new System.Drawing.Point(121, 100); + this.OrientToTerrainNumericUpDown.Maximum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.OrientToTerrainNumericUpDown.Name = "OrientToTerrainNumericUpDown"; + this.OrientToTerrainNumericUpDown.Size = new System.Drawing.Size(61, 20); + this.OrientToTerrainNumericUpDown.TabIndex = 6; + this.OrientToTerrainNumericUpDown.ValueChanged += new System.EventHandler(this.OrientToTerrainNumericUpDown_ValueChanged); + // + // ScaleRangeTextBox + // + this.ScaleRangeTextBox.Location = new System.Drawing.Point(270, 21); + this.ScaleRangeTextBox.Name = "ScaleRangeTextBox"; + this.ScaleRangeTextBox.Size = new System.Drawing.Size(104, 20); + this.ScaleRangeTextBox.TabIndex = 46; + this.ScaleRangeTextBox.TextChanged += new System.EventHandler(this.ScaleRangeTextBox_TextChanged); + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(8, 76); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(107, 13); + this.label10.TabIndex = 5; + this.label10.Text = "Lod Inst Fade Range"; + // + // LodFadeRangeNumericUpDown + // + this.LodFadeRangeNumericUpDown.DecimalPlaces = 4; + this.LodFadeRangeNumericUpDown.Increment = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.LodFadeRangeNumericUpDown.Location = new System.Drawing.Point(121, 74); + this.LodFadeRangeNumericUpDown.Maximum = new decimal(new int[] { + 99999, + 0, + 0, + 0}); + this.LodFadeRangeNumericUpDown.Name = "LodFadeRangeNumericUpDown"; + this.LodFadeRangeNumericUpDown.Size = new System.Drawing.Size(61, 20); + this.LodFadeRangeNumericUpDown.TabIndex = 4; + this.LodFadeRangeNumericUpDown.ValueChanged += new System.EventHandler(this.LodFadeRangeNumericUpDown_ValueChanged); + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(8, 50); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(98, 13); + this.label9.TabIndex = 3; + this.label9.Text = "Lod Fade Start Dist"; + // + // LodFadeStartDistanceNumericUpDown + // + this.LodFadeStartDistanceNumericUpDown.DecimalPlaces = 4; + this.LodFadeStartDistanceNumericUpDown.Location = new System.Drawing.Point(121, 48); + this.LodFadeStartDistanceNumericUpDown.Maximum = new decimal(new int[] { + 99999, + 0, + 0, + 0}); + this.LodFadeStartDistanceNumericUpDown.Name = "LodFadeStartDistanceNumericUpDown"; + this.LodFadeStartDistanceNumericUpDown.Size = new System.Drawing.Size(61, 20); + this.LodFadeStartDistanceNumericUpDown.TabIndex = 2; + this.LodFadeStartDistanceNumericUpDown.ValueChanged += new System.EventHandler(this.LodFadeStartDistanceNumericUpDown_ValueChanged); + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(8, 24); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(39, 13); + this.label6.TabIndex = 1; + this.label6.Text = "lodDist"; + // + // LodDistNumericUpDown + // + this.LodDistNumericUpDown.Location = new System.Drawing.Point(121, 22); + this.LodDistNumericUpDown.Maximum = new decimal(new int[] { + 99999, + 0, + 0, + 0}); + this.LodDistNumericUpDown.Name = "LodDistNumericUpDown"; + this.LodDistNumericUpDown.Size = new System.Drawing.Size(61, 20); + this.LodDistNumericUpDown.TabIndex = 0; + this.LodDistNumericUpDown.ValueChanged += new System.EventHandler(this.LodDistNumericUpDown_ValueChanged); + // + // PositionTextBox + // + this.PositionTextBox.Location = new System.Drawing.Point(61, 40); + this.PositionTextBox.Name = "PositionTextBox"; + this.PositionTextBox.ReadOnly = true; + this.PositionTextBox.Size = new System.Drawing.Size(185, 20); + this.PositionTextBox.TabIndex = 41; + // // label1 // this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(52, 52); + this.label1.Location = new System.Drawing.Point(11, 43); this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(105, 13); - this.label1.TabIndex = 0; - this.label1.Text = "Grass editing TODO!"; + this.label1.Size = new System.Drawing.Size(44, 13); + this.label1.TabIndex = 40; + this.label1.Text = "Position"; + // + // GrassGoToButton + // + this.GrassGoToButton.Location = new System.Drawing.Point(252, 38); + this.GrassGoToButton.Name = "GrassGoToButton"; + this.GrassGoToButton.Size = new System.Drawing.Size(56, 23); + this.GrassGoToButton.TabIndex = 39; + this.GrassGoToButton.Text = "Go To"; + this.GrassGoToButton.UseVisualStyleBackColor = true; + this.GrassGoToButton.Click += new System.EventHandler(this.GrassGoToButton_Click); + // + // GrassDeleteButton + // + this.GrassDeleteButton.Location = new System.Drawing.Point(278, 298); + this.GrassDeleteButton.Name = "GrassDeleteButton"; + this.GrassDeleteButton.Size = new System.Drawing.Size(95, 23); + this.GrassDeleteButton.TabIndex = 38; + this.GrassDeleteButton.Text = "Delete Batch"; + this.GrassDeleteButton.UseVisualStyleBackColor = true; + this.GrassDeleteButton.Click += new System.EventHandler(this.GrassDeleteButton_Click); + // + // GrassAddToProjectButton + // + this.GrassAddToProjectButton.Location = new System.Drawing.Point(180, 298); + this.GrassAddToProjectButton.Name = "GrassAddToProjectButton"; + this.GrassAddToProjectButton.Size = new System.Drawing.Size(95, 23); + this.GrassAddToProjectButton.TabIndex = 37; + this.GrassAddToProjectButton.Text = "Add to Project"; + this.GrassAddToProjectButton.UseVisualStyleBackColor = true; + this.GrassAddToProjectButton.Click += new System.EventHandler(this.GrassAddToProjectButton_Click); + // + // BrushTab + // + this.BrushTab.Controls.Add(this.label16); + this.BrushTab.Controls.Add(this.label8); + this.BrushTab.Controls.Add(this.groupBox2); + this.BrushTab.Controls.Add(this.BrushModeCheckBox); + this.BrushTab.Controls.Add(this.brushSettingsGroupBox); + this.BrushTab.Location = new System.Drawing.Point(4, 22); + this.BrushTab.Name = "BrushTab"; + this.BrushTab.Padding = new System.Windows.Forms.Padding(3); + this.BrushTab.Size = new System.Drawing.Size(546, 329); + this.BrushTab.TabIndex = 1; + this.BrushTab.Text = " Brush"; + this.BrushTab.UseVisualStyleBackColor = true; + // + // label16 + // + this.label16.AutoSize = true; + this.label16.Location = new System.Drawing.Point(9, 224); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(114, 13); + this.label16.TabIndex = 40; + this.label16.Text = "SHIFT + CTRL - Erase"; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(9, 202); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(68, 13); + this.label8.TabIndex = 21; + this.label8.Text = "CTRL - Paint"; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.GrassColorLabel); + this.groupBox2.Controls.Add(this.label15); + this.groupBox2.Controls.Add(this.label4); + this.groupBox2.Controls.Add(this.AoNumericUpDown); + this.groupBox2.Controls.Add(this.PadTextBox); + this.groupBox2.Controls.Add(this.ScaleNumericUpDown); + this.groupBox2.Controls.Add(this.label2); + this.groupBox2.Controls.Add(this.label3); + this.groupBox2.Controls.Add(this.RandomizeScaleCheckBox); + this.groupBox2.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.groupBox2.Location = new System.Drawing.Point(259, 3); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(279, 153); + this.groupBox2.TabIndex = 39; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "Instance Settings"; + // + // GrassColorLabel + // + this.GrassColorLabel.BackColor = System.Drawing.Color.White; + this.GrassColorLabel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.GrassColorLabel.Location = new System.Drawing.Point(50, 22); + this.GrassColorLabel.Name = "GrassColorLabel"; + this.GrassColorLabel.Size = new System.Drawing.Size(119, 21); + this.GrassColorLabel.TabIndex = 12; + this.GrassColorLabel.Click += new System.EventHandler(this.GrassColorLabel_Click); + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Location = new System.Drawing.Point(9, 106); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(26, 13); + this.label15.TabIndex = 46; + this.label15.Text = "Pad"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(9, 79); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(34, 13); + this.label4.TabIndex = 16; + this.label4.Text = "Scale"; + // + // AoNumericUpDown + // + this.AoNumericUpDown.Location = new System.Drawing.Point(50, 51); + this.AoNumericUpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.AoNumericUpDown.Name = "AoNumericUpDown"; + this.AoNumericUpDown.Size = new System.Drawing.Size(120, 20); + this.AoNumericUpDown.TabIndex = 15; + this.AoNumericUpDown.Value = new decimal(new int[] { + 255, + 0, + 0, + 0}); + // + // PadTextBox + // + this.PadTextBox.Location = new System.Drawing.Point(49, 103); + this.PadTextBox.Name = "PadTextBox"; + this.PadTextBox.Size = new System.Drawing.Size(120, 20); + this.PadTextBox.TabIndex = 45; + this.PadTextBox.Text = "0, 0, 0"; + // + // ScaleNumericUpDown + // + this.ScaleNumericUpDown.Location = new System.Drawing.Point(49, 77); + this.ScaleNumericUpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.ScaleNumericUpDown.Name = "ScaleNumericUpDown"; + this.ScaleNumericUpDown.Size = new System.Drawing.Size(120, 20); + this.ScaleNumericUpDown.TabIndex = 17; + this.ScaleNumericUpDown.Value = new decimal(new int[] { + 255, + 0, + 0, + 0}); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(9, 53); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(20, 13); + this.label2.TabIndex = 14; + this.label2.Text = "Ao"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(9, 26); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(31, 13); + this.label3.TabIndex = 13; + this.label3.Text = "Color"; + // + // RandomizeScaleCheckBox + // + this.RandomizeScaleCheckBox.AutoSize = true; + this.RandomizeScaleCheckBox.Location = new System.Drawing.Point(176, 79); + this.RandomizeScaleCheckBox.Name = "RandomizeScaleCheckBox"; + this.RandomizeScaleCheckBox.Size = new System.Drawing.Size(79, 17); + this.RandomizeScaleCheckBox.TabIndex = 18; + this.RandomizeScaleCheckBox.Text = "Randomize"; + this.RandomizeScaleCheckBox.UseVisualStyleBackColor = true; + // + // BrushModeCheckBox + // + this.BrushModeCheckBox.AutoSize = true; + this.BrushModeCheckBox.Location = new System.Drawing.Point(8, 174); + this.BrushModeCheckBox.Name = "BrushModeCheckBox"; + this.BrushModeCheckBox.Size = new System.Drawing.Size(83, 17); + this.BrushModeCheckBox.TabIndex = 39; + this.BrushModeCheckBox.Text = "Brush Mode"; + this.BrushModeCheckBox.UseVisualStyleBackColor = true; + this.BrushModeCheckBox.CheckedChanged += new System.EventHandler(this.BrushModeCheckBox_CheckedChanged); + // + // brushSettingsGroupBox + // + this.brushSettingsGroupBox.Controls.Add(this.DensityNumericUpDown); + this.brushSettingsGroupBox.Controls.Add(this.RadiusNumericUpDown); + this.brushSettingsGroupBox.Controls.Add(this.label5); + this.brushSettingsGroupBox.Controls.Add(this.radiusLabel); + this.brushSettingsGroupBox.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.brushSettingsGroupBox.Location = new System.Drawing.Point(8, 3); + this.brushSettingsGroupBox.Name = "brushSettingsGroupBox"; + this.brushSettingsGroupBox.Size = new System.Drawing.Size(245, 153); + this.brushSettingsGroupBox.TabIndex = 38; + this.brushSettingsGroupBox.TabStop = false; + this.brushSettingsGroupBox.Text = "Brush Settings"; + // + // DensityNumericUpDown + // + this.DensityNumericUpDown.Location = new System.Drawing.Point(109, 57); + this.DensityNumericUpDown.Maximum = new decimal(new int[] { + 128, + 0, + 0, + 0}); + this.DensityNumericUpDown.Name = "DensityNumericUpDown"; + this.DensityNumericUpDown.Size = new System.Drawing.Size(120, 20); + this.DensityNumericUpDown.TabIndex = 20; + this.DensityNumericUpDown.Value = new decimal(new int[] { + 28, + 0, + 0, + 0}); + // + // RadiusNumericUpDown + // + this.RadiusNumericUpDown.DecimalPlaces = 2; + this.RadiusNumericUpDown.Increment = new decimal(new int[] { + 1, + 0, + 0, + 131072}); + this.RadiusNumericUpDown.Location = new System.Drawing.Point(109, 31); + this.RadiusNumericUpDown.Name = "RadiusNumericUpDown"; + this.RadiusNumericUpDown.Size = new System.Drawing.Size(120, 20); + this.RadiusNumericUpDown.TabIndex = 11; + this.RadiusNumericUpDown.Value = new decimal(new int[] { + 5, + 0, + 0, + 0}); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(21, 59); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(42, 13); + this.label5.TabIndex = 19; + this.label5.Text = "Density"; + // + // radiusLabel + // + this.radiusLabel.AutoSize = true; + this.radiusLabel.Location = new System.Drawing.Point(21, 33); + this.radiusLabel.Name = "radiusLabel"; + this.radiusLabel.Size = new System.Drawing.Size(40, 13); + this.radiusLabel.TabIndex = 10; + this.radiusLabel.Text = "Radius"; + // + // label18 + // + this.label18.Location = new System.Drawing.Point(400, 259); + this.label18.Name = "label18"; + this.label18.Size = new System.Drawing.Size(126, 53); + this.label18.TabIndex = 52; + this.label18.Text = "* The higher the threshold, the larger each batch will be when they are split."; // // EditYmapGrassPanel // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(554, 355); - this.Controls.Add(this.label1); + this.Controls.Add(this.tabControl1); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Name = "EditYmapGrassPanel"; this.Text = "Grass Batch"; + this.tabControl1.ResumeLayout(false); + this.GrassBatchTab.ResumeLayout(false); + this.GrassBatchTab.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.OptmizationThresholdNumericUpDown)).EndInit(); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.OrientToTerrainNumericUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.LodFadeRangeNumericUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.LodFadeStartDistanceNumericUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.LodDistNumericUpDown)).EndInit(); + this.BrushTab.ResumeLayout(false); + this.BrushTab.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.AoNumericUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ScaleNumericUpDown)).EndInit(); + this.brushSettingsGroupBox.ResumeLayout(false); + this.brushSettingsGroupBox.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.DensityNumericUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.RadiusNumericUpDown)).EndInit(); this.ResumeLayout(false); - this.PerformLayout(); } #endregion + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage GrassBatchTab; + private System.Windows.Forms.TextBox PositionTextBox; private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button GrassGoToButton; + private System.Windows.Forms.Button GrassDeleteButton; + private System.Windows.Forms.Button GrassAddToProjectButton; + private System.Windows.Forms.TabPage BrushTab; + private System.Windows.Forms.GroupBox brushSettingsGroupBox; + private System.Windows.Forms.NumericUpDown RadiusNumericUpDown; + private System.Windows.Forms.Label radiusLabel; + private System.Windows.Forms.NumericUpDown DensityNumericUpDown; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.CheckBox BrushModeCheckBox; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.NumericUpDown LodDistNumericUpDown; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TextBox ArchetypeNameTextBox; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label HashLabel; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.NumericUpDown LodFadeStartDistanceNumericUpDown; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.NumericUpDown LodFadeRangeNumericUpDown; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.NumericUpDown OrientToTerrainNumericUpDown; + private System.Windows.Forms.TextBox textBox4; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.TextBox ScaleRangeTextBox; + private System.Windows.Forms.TextBox textBox5; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.TextBox PadTextBox; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label GrassColorLabel; + private System.Windows.Forms.CheckBox RandomizeScaleCheckBox; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.NumericUpDown ScaleNumericUpDown; + private System.Windows.Forms.NumericUpDown AoNumericUpDown; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Button OptimizeBatchButton; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.NumericUpDown OptmizationThresholdNumericUpDown; + private System.Windows.Forms.Label label18; + private System.Windows.Forms.ToolTip OptimizeBatchButtonTooltip; } } \ No newline at end of file diff --git a/Project/Panels/EditYmapGrassPanel.cs b/Project/Panels/EditYmapGrassPanel.cs index 702ecb1..761475f 100644 --- a/Project/Panels/EditYmapGrassPanel.cs +++ b/Project/Panels/EditYmapGrassPanel.cs @@ -1,22 +1,27 @@ -using CodeWalker.GameFiles; -using System; +using System; using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; +using CodeWalker.GameFiles; +using CodeWalker.Utils; +using CodeWalker.World; +using SharpDX; + +// THINGS TODO +// - COMPLETED -- Better gizmo for grass brush (like a circle with a little line in the middle sticking upwards) +// - COMPLETED -- Remove grass instances using CTRL + SHIFT + LMB + +// - Maybe some kind of auto coloring system? I've noticed that mostly all grass in GTA inherits it's color from the surface it's on. +// - Grass area fill (generate grass on ydr based on colision materials?) + +// As far as everything else goes, the brush works just fine. No issues so far besides the UpdateGraphics() method. (causes flicker sometimes) + namespace CodeWalker.Project.Panels { public partial class EditYmapGrassPanel : ProjectPanel { public ProjectForm ProjectForm; - public YmapGrassInstanceBatch CurrentBatch { get; set; } - - //private bool populatingui = false; public EditYmapGrassPanel(ProjectForm owner) { @@ -24,12 +29,41 @@ namespace CodeWalker.Project.Panels InitializeComponent(); } + public YmapGrassInstanceBatch CurrentBatch { get; set; } + + #region Form + public void SetBatch(YmapGrassInstanceBatch batch) { CurrentBatch = batch; Tag = batch; - LoadGrassBatch(); UpdateFormTitle(); + UpdateControls(); + } + + private void UpdateControls() + { + if (ProjectForm?.CurrentProjectFile == null) return; + if (ProjectForm.GrassBatchExistsInProject(CurrentBatch)) + { + GrassAddToProjectButton.Enabled = false; + GrassDeleteButton.Enabled = true; + } + else + { + GrassAddToProjectButton.Enabled = true; + GrassDeleteButton.Enabled = false; + } + + ArchetypeNameTextBox.Text = CurrentBatch.Batch.archetypeName.ToString(); + PositionTextBox.Text = FloatUtil.GetVector3String(CurrentBatch.Position); + LodDistNumericUpDown.Value = CurrentBatch.Batch.lodDist; + LodFadeRangeNumericUpDown.Value = (decimal) CurrentBatch.Batch.LodInstFadeRange; + LodFadeStartDistanceNumericUpDown.Value = (decimal) CurrentBatch.Batch.LodFadeStartDist; + ScaleRangeTextBox.Text = FloatUtil.GetVector3String(CurrentBatch.Batch.ScaleRange); + OrientToTerrainNumericUpDown.Value = (decimal)CurrentBatch.Batch.OrientToTerrain; + OptmizationThresholdNumericUpDown.Value = 15; + BrushModeCheckBox.Checked = CurrentBatch.BrushEnabled; } private void UpdateFormTitle() @@ -37,11 +71,228 @@ namespace CodeWalker.Project.Panels Text = CurrentBatch?.Batch.archetypeName.ToString() ?? "Grass Batch"; } + #endregion + #region Events - private void LoadGrassBatch() + #region BrushSettings + + private void GrassGoToButton_Click(object sender, EventArgs e) { + if (CurrentBatch == null) return; + ProjectForm.WorldForm?.GoToPosition(CurrentBatch.Position, CurrentBatch.AABBMax - CurrentBatch.AABBMin); } + private void GrassAddToProjectButton_Click(object sender, EventArgs e) + { + ProjectForm.SetProjectItem(CurrentBatch); + ProjectForm.AddGrassBatchToProject(); + } + + private void GrassDeleteButton_Click(object sender, EventArgs e) + { + ProjectForm.SetProjectItem(CurrentBatch); + var ymap = CurrentBatch?.Ymap; + if (!ProjectForm.DeleteGrassBatch()) return; + + ymap?.CalcExtents(); // Recalculate the extents after deleting the grass batch. + ProjectForm.WorldForm.SelectItem(); + } + + private void GrassColorLabel_Click(object sender, EventArgs e) + { + var colDiag = new ColorDialog {Color = GrassColorLabel.BackColor}; + if (colDiag.ShowDialog(this) == DialogResult.OK) + GrassColorLabel.BackColor = colDiag.Color; + } + + private void BrushModeCheckBox_CheckedChanged(object sender, EventArgs e) + { + if (CurrentBatch == null) return; + CurrentBatch.BrushEnabled = BrushModeCheckBox.Checked; + } + #endregion + + #region Batch Settings + + private void ArchetypeNameTextBox_TextChanged(object sender, EventArgs e) + { + var archetypeHash = JenkHash.GenHash(ArchetypeNameTextBox.Text); + var archetype = ProjectForm.GameFileCache.GetArchetype(archetypeHash); + if (archetype == null) + { + HashLabel.Text = $@"Hash: {archetypeHash} (invalid)"; + return; + } + CurrentBatch.Archetype = archetype; + var b = CurrentBatch.Batch; + b.archetypeName = archetypeHash; + CurrentBatch.Batch = b; + ProjectForm.WorldForm.UpdateGrassBatchGraphics(CurrentBatch); + HashLabel.Text = $@"Hash: {archetypeHash}"; + UpdateFormTitle(); + CurrentBatch.HasChanged = true; + ProjectForm.SetGrassBatchHasChanged(false); + ProjectForm.SetYmapHasChanged(true); + } + + private void LodDistNumericUpDown_ValueChanged(object sender, EventArgs e) + { + var batch = CurrentBatch.Batch; + batch.lodDist = (uint) LodDistNumericUpDown.Value; + CurrentBatch.Batch = batch; + ProjectForm.WorldForm.UpdateGrassBatchGraphics(CurrentBatch); + ProjectForm.SetYmapHasChanged(true); + } + + private void LodFadeStartDistanceNumericUpDown_ValueChanged(object sender, EventArgs e) + { + var batch = CurrentBatch.Batch; + batch.LodFadeStartDist = (float) LodFadeStartDistanceNumericUpDown.Value; + CurrentBatch.Batch = batch; + ProjectForm.WorldForm.UpdateGrassBatchGraphics(CurrentBatch); + ProjectForm.SetYmapHasChanged(true); + } + + private void LodFadeRangeNumericUpDown_ValueChanged(object sender, EventArgs e) + { + var batch = CurrentBatch.Batch; + batch.LodInstFadeRange = (float) LodFadeRangeNumericUpDown.Value; + CurrentBatch.Batch = batch; + ProjectForm.WorldForm.UpdateGrassBatchGraphics(CurrentBatch); + ProjectForm.SetYmapHasChanged(true); + } + + private void OrientToTerrainNumericUpDown_ValueChanged(object sender, EventArgs e) + { + var batch = CurrentBatch.Batch; + batch.OrientToTerrain = (float) OrientToTerrainNumericUpDown.Value; + CurrentBatch.Batch = batch; + ProjectForm.WorldForm.UpdateGrassBatchGraphics(CurrentBatch); + ProjectForm.SetYmapHasChanged(true); + } + + private void ScaleRangeTextBox_TextChanged(object sender, EventArgs e) + { + var batch = CurrentBatch.Batch; + var v = FloatUtil.ParseVector3String(ScaleRangeTextBox.Text); + batch.ScaleRange = v; + CurrentBatch.Batch = batch; + ProjectForm.WorldForm.UpdateGrassBatchGraphics(CurrentBatch); + ProjectForm.SetYmapHasChanged(true); + } + + private void OptimizeBatchButton_Click(object sender, EventArgs e) + { + if (CurrentBatch.Instances == null || CurrentBatch.Instances.Length <= 0) return; + lock (ProjectForm.WorldForm.RenderSyncRoot) + { + var newBatches = CurrentBatch?.OptimizeInstances(CurrentBatch, (float)OptmizationThresholdNumericUpDown.Value); + if (newBatches == null || newBatches.Length <= 0) return; + + // Remove our batch from the ymap + CurrentBatch.Ymap.RemoveGrassBatch(CurrentBatch); + foreach (var batch in newBatches) + { + var b = batch.Batch; + b.lodDist = CurrentBatch.Batch.lodDist; + b.LodInstFadeRange = CurrentBatch.Batch.LodInstFadeRange; + b.LodFadeStartDist = CurrentBatch.Batch.LodFadeStartDist; + b.ScaleRange = CurrentBatch.Batch.ScaleRange; + b.OrientToTerrain = CurrentBatch.Batch.OrientToTerrain; + b.archetypeName = CurrentBatch.Batch.archetypeName; + batch.Batch = b; + batch.Archetype = CurrentBatch.Archetype; + batch.UpdateInstanceCount(); + ProjectForm.NewGrassBatch(batch); + } + CurrentBatch.Ymap.CalcExtents(); + CurrentBatch.Ymap.Save(); + + // TODO: Select the last grass batch in the new list on the project explorer. + ProjectForm.ProjectExplorer.TrySelectGrassBatchTreeNode(CurrentBatch.Ymap.GrassInstanceBatches[0]); + } + } + + #endregion + + #endregion + + #region Publics + + public void CreateInstancesAtMouse(SpaceRayIntersectResult mouseRay) + { + var wf = ProjectForm.WorldForm; + if (wf == null) return; + + lock (wf.RenderSyncRoot) + { + CurrentBatch.CreateInstancesAtMouse( + CurrentBatch, + mouseRay, + (float) RadiusNumericUpDown.Value, + (int) DensityNumericUpDown.Value, + SpawnRayFunc, + new Color(GrassColorLabel.BackColor.R, GrassColorLabel.BackColor.G, GrassColorLabel.BackColor.B), + (int) AoNumericUpDown.Value, + (int) ScaleNumericUpDown.Value, + FloatUtil.ParseVector3String(PadTextBox.Text), + RandomizeScaleCheckBox.Checked + ); + wf.UpdateGrassBatchGraphics(CurrentBatch); + } + + BatchChanged(); + } + + public void EraseInstancesAtMouse(SpaceRayIntersectResult mouseRay) + { + var wf = ProjectForm.WorldForm; + if (wf == null) return; + var changed = false; + lock (wf.RenderSyncRoot) + { + if (CurrentBatch.EraseInstancesAtMouse( + CurrentBatch, + mouseRay, + (float) RadiusNumericUpDown.Value + )) + { + wf.UpdateGrassBatchGraphics(CurrentBatch); + changed = true; + } + } + + if (changed) BatchChanged(); + } + + #endregion + + #region Privates + + private SpaceRayIntersectResult SpawnRayFunc(Vector3 spawnPos) + { + var res = ProjectForm.WorldForm.Raycast(new Ray(spawnPos, -Vector3.UnitZ)); + + //if (res.HitBounds != null) // shouldn't happen but just in case.. + //{ + // var mat = BoundsMaterialTypes.GetMaterial(res.HitBounds.MaterialIndex); + // if (mat.Name != "DEFAULT") + // { + // var c = mat.Colour; + // } + //} + return res; + } + + private void BatchChanged() + { + UpdateControls(); + CurrentBatch.UpdateInstanceCount(); + CurrentBatch.HasChanged = true; + ProjectForm.SetGrassBatchHasChanged(false); + } + + #endregion } -} +} \ No newline at end of file diff --git a/Project/Panels/EditYmapGrassPanel.resx b/Project/Panels/EditYmapGrassPanel.resx index 1431f6b..6a9df94 100644 --- a/Project/Panels/EditYmapGrassPanel.resx +++ b/Project/Panels/EditYmapGrassPanel.resx @@ -117,6 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 17, 17 + diff --git a/Project/Panels/ProjectExplorerPanel.cs b/Project/Panels/ProjectExplorerPanel.cs index f83fc13..027b2e4 100644 --- a/Project/Panels/ProjectExplorerPanel.cs +++ b/Project/Panels/ProjectExplorerPanel.cs @@ -641,6 +641,20 @@ namespace CodeWalker.Project.Panels } } } + public void SetGrassBatchHasChanged(YmapGrassInstanceBatch batch, bool changed) + { + if (ProjectTreeView.Nodes.Count > 0) + { + var gbnode = FindGrassTreeNode(batch); + if (gbnode == null) return; + string changestr = changed ? "*" : ""; + if (gbnode.Tag == batch) + { + string name = batch.ToString(); + gbnode.Text = changestr + name; + } + } + } @@ -698,6 +712,21 @@ namespace CodeWalker.Project.Panels } return null; } + public TreeNode FindGrassTreeNode(YmapGrassInstanceBatch batch) + { + if (batch == null) return null; + TreeNode ymapnode = FindYmapTreeNode(batch.Ymap); + if (ymapnode == null) return null; + var batchnode = GetChildTreeNode(ymapnode, "GrassBatches"); + if (batchnode == null) return null; + for (int i = 0; i < batchnode.Nodes.Count; i++) + { + TreeNode grassnode = batchnode.Nodes[i]; + if (grassnode.Tag == batch) return grassnode; + } + return null; + } + public TreeNode FindYndTreeNode(YndFile ynd) { if (ProjectTreeView.Nodes.Count <= 0) return null; @@ -930,6 +959,21 @@ namespace CodeWalker.Project.Panels } } } + public void TrySelectGrassBatchTreeNode(YmapGrassInstanceBatch grassBatch) + { + TreeNode grassNode = FindGrassTreeNode(grassBatch); + if (grassNode != null) + { + if (ProjectTreeView.SelectedNode == grassNode) + { + OnItemSelected?.Invoke(grassNode); + } + else + { + ProjectTreeView.SelectedNode = grassNode; + } + } + } public void TrySelectPathNodeTreeNode(YndNode node) { TreeNode tnode = FindPathNodeTreeNode(node); @@ -1240,6 +1284,16 @@ namespace CodeWalker.Project.Panels tn.Parent.Nodes.Remove(tn); } } + + public void RemoveGrassBatchTreeNode(YmapGrassInstanceBatch batch) + { + var tn = FindGrassTreeNode(batch); + if ((tn != null) && (tn.Parent != null)) + { + tn.Parent.Text = "Grass Batches (" + batch.Ymap.GrassInstanceBatches.Length.ToString() + ")"; + tn.Parent.Nodes.Remove(tn); + } + } public void RemovePathNodeTreeNode(YndNode node) { var tn = FindPathNodeTreeNode(node); diff --git a/Project/ProjectForm.Designer.cs b/Project/ProjectForm.Designer.cs index be220cc..00e8469 100644 --- a/Project/ProjectForm.Designer.cs +++ b/Project/ProjectForm.Designer.cs @@ -58,6 +58,14 @@ this.FileSaveItemMenu = new System.Windows.Forms.ToolStripMenuItem(); this.FileSaveItemAsMenu = new System.Windows.Forms.ToolStripMenuItem(); this.EditMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.EditUndoMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.EditRedoMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator10 = new System.Windows.Forms.ToolStripSeparator(); + this.EditCutMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.EditCopyMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.EditPasteMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.EditCloneMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.EditDeleteMenu = new System.Windows.Forms.ToolStripMenuItem(); this.ViewMenu = new System.Windows.Forms.ToolStripMenuItem(); this.ViewProjectExplorerMenu = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); @@ -65,6 +73,55 @@ this.ViewThemeBlueMenu = new System.Windows.Forms.ToolStripMenuItem(); this.ViewThemeLightMenu = new System.Windows.Forms.ToolStripMenuItem(); this.ViewThemeDarkMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YmapMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YmapNameMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator11 = new System.Windows.Forms.ToolStripSeparator(); + this.YmapNewEntityMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YmapNewCarGenMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YmapNewGrassBatchMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator12 = new System.Windows.Forms.ToolStripSeparator(); + this.YmapAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YmapRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YtypMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YtypNameMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator13 = new System.Windows.Forms.ToolStripSeparator(); + this.YtypNewArchetypeMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator15 = new System.Windows.Forms.ToolStripSeparator(); + this.YtypAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YtypRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YndMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YndNameMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator14 = new System.Windows.Forms.ToolStripSeparator(); + this.YndNewNodeMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator16 = new System.Windows.Forms.ToolStripSeparator(); + this.YndAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YndRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YnvMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YnvNameMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator17 = new System.Windows.Forms.ToolStripSeparator(); + this.YnvNewPolygonMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator18 = new System.Windows.Forms.ToolStripSeparator(); + this.YnvAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YnvRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.TrainsMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.TrainsNameMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator19 = new System.Windows.Forms.ToolStripSeparator(); + this.TrainsNewNodeMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator20 = new System.Windows.Forms.ToolStripSeparator(); + this.TrainsAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.TrainsRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ScenarioMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ScenarioNameMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator21 = new System.Windows.Forms.ToolStripSeparator(); + this.ScenarioNewPointMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ScenarioNewPointFromSelectedMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ScenarioNewEntityOverrideMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ScenarioNewChainMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ScenarioNewClusterMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ScenarioImportChainMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator22 = new System.Windows.Forms.ToolStripSeparator(); + this.ScenarioAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ScenarioRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); this.ToolsMenu = new System.Windows.Forms.ToolStripMenuItem(); this.ToolsManifestGeneratorMenu = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); @@ -98,62 +155,6 @@ this.ToolbarSaveButton = new System.Windows.Forms.ToolStripButton(); this.ToolbarSaveAllButton = new System.Windows.Forms.ToolStripButton(); this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); - this.EditUndoMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.EditRedoMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator10 = new System.Windows.Forms.ToolStripSeparator(); - this.EditCutMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.EditCopyMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.EditPasteMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.EditDeleteMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.EditCloneMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YmapMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YtypMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YndMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YnvMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.TrainsMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.ScenarioMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YmapNameMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator11 = new System.Windows.Forms.ToolStripSeparator(); - this.YmapNewEntityMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YmapNewCarGenMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator12 = new System.Windows.Forms.ToolStripSeparator(); - this.YmapAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YmapRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YtypNameMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator13 = new System.Windows.Forms.ToolStripSeparator(); - this.YtypNewArchetypeMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YndNameMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator14 = new System.Windows.Forms.ToolStripSeparator(); - this.toolStripSeparator15 = new System.Windows.Forms.ToolStripSeparator(); - this.YtypAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YtypRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YndNewNodeMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator16 = new System.Windows.Forms.ToolStripSeparator(); - this.YndAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YndRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YnvNameMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator17 = new System.Windows.Forms.ToolStripSeparator(); - this.YnvNewPolygonMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator18 = new System.Windows.Forms.ToolStripSeparator(); - this.YnvAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YnvRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.TrainsNameMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator19 = new System.Windows.Forms.ToolStripSeparator(); - this.TrainsNewNodeMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator20 = new System.Windows.Forms.ToolStripSeparator(); - this.TrainsAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.TrainsRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.ScenarioNameMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator21 = new System.Windows.Forms.ToolStripSeparator(); - this.ScenarioNewPointMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.ScenarioNewPointFromSelectedMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.ScenarioNewEntityOverrideMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.ScenarioNewChainMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.ScenarioNewClusterMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.ScenarioImportChainMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator22 = new System.Windows.Forms.ToolStripSeparator(); - this.ScenarioAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.ScenarioRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); this.MainMenu.SuspendLayout(); this.MainToolbar.SuspendLayout(); this.SuspendLayout(); @@ -399,6 +400,66 @@ this.EditMenu.Size = new System.Drawing.Size(39, 20); this.EditMenu.Text = "Edit"; // + // EditUndoMenu + // + this.EditUndoMenu.Enabled = false; + this.EditUndoMenu.Name = "EditUndoMenu"; + this.EditUndoMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Z))); + this.EditUndoMenu.Size = new System.Drawing.Size(190, 22); + this.EditUndoMenu.Text = "Undo"; + // + // EditRedoMenu + // + this.EditRedoMenu.Enabled = false; + this.EditRedoMenu.Name = "EditRedoMenu"; + this.EditRedoMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Y))); + this.EditRedoMenu.Size = new System.Drawing.Size(190, 22); + this.EditRedoMenu.Text = "Redo"; + // + // toolStripSeparator10 + // + this.toolStripSeparator10.Name = "toolStripSeparator10"; + this.toolStripSeparator10.Size = new System.Drawing.Size(187, 6); + // + // EditCutMenu + // + this.EditCutMenu.Enabled = false; + this.EditCutMenu.Name = "EditCutMenu"; + this.EditCutMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.X))); + this.EditCutMenu.Size = new System.Drawing.Size(190, 22); + this.EditCutMenu.Text = "Cut Item"; + // + // EditCopyMenu + // + this.EditCopyMenu.Enabled = false; + this.EditCopyMenu.Name = "EditCopyMenu"; + this.EditCopyMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.C))); + this.EditCopyMenu.Size = new System.Drawing.Size(190, 22); + this.EditCopyMenu.Text = "Copy Item"; + // + // EditPasteMenu + // + this.EditPasteMenu.Enabled = false; + this.EditPasteMenu.Name = "EditPasteMenu"; + this.EditPasteMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.V))); + this.EditPasteMenu.Size = new System.Drawing.Size(190, 22); + this.EditPasteMenu.Text = "Paste Item"; + // + // EditCloneMenu + // + this.EditCloneMenu.Enabled = false; + this.EditCloneMenu.Name = "EditCloneMenu"; + this.EditCloneMenu.Size = new System.Drawing.Size(190, 22); + this.EditCloneMenu.Text = "Clone Item"; + // + // EditDeleteMenu + // + this.EditDeleteMenu.Enabled = false; + this.EditDeleteMenu.Name = "EditDeleteMenu"; + this.EditDeleteMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Shift | System.Windows.Forms.Keys.Delete))); + this.EditDeleteMenu.Size = new System.Drawing.Size(190, 22); + this.EditDeleteMenu.Text = "Delete Item"; + // // ViewMenu // this.ViewMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -454,6 +515,399 @@ this.ViewThemeDarkMenu.Text = "Dark"; this.ViewThemeDarkMenu.Click += new System.EventHandler(this.ViewThemeDarkMenu_Click); // + // YmapMenu + // + this.YmapMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.YmapNameMenu, + this.toolStripSeparator11, + this.YmapNewEntityMenu, + this.YmapNewCarGenMenu, + this.YmapNewGrassBatchMenu, + this.toolStripSeparator12, + this.YmapAddToProjectMenu, + this.YmapRemoveFromProjectMenu}); + this.YmapMenu.Name = "YmapMenu"; + this.YmapMenu.Size = new System.Drawing.Size(49, 20); + this.YmapMenu.Text = "Ymap"; + this.YmapMenu.Visible = false; + // + // YmapNameMenu + // + this.YmapNameMenu.Enabled = false; + this.YmapNameMenu.Name = "YmapNameMenu"; + this.YmapNameMenu.Size = new System.Drawing.Size(199, 22); + this.YmapNameMenu.Text = "(No .ymap file selected)"; + // + // toolStripSeparator11 + // + this.toolStripSeparator11.Name = "toolStripSeparator11"; + this.toolStripSeparator11.Size = new System.Drawing.Size(196, 6); + // + // YmapNewEntityMenu + // + this.YmapNewEntityMenu.Enabled = false; + this.YmapNewEntityMenu.Name = "YmapNewEntityMenu"; + this.YmapNewEntityMenu.Size = new System.Drawing.Size(199, 22); + this.YmapNewEntityMenu.Text = "New Entity"; + this.YmapNewEntityMenu.Click += new System.EventHandler(this.YmapNewEntityMenu_Click); + // + // YmapNewCarGenMenu + // + this.YmapNewCarGenMenu.Enabled = false; + this.YmapNewCarGenMenu.Name = "YmapNewCarGenMenu"; + this.YmapNewCarGenMenu.Size = new System.Drawing.Size(199, 22); + this.YmapNewCarGenMenu.Text = "New Car Generator"; + this.YmapNewCarGenMenu.Click += new System.EventHandler(this.YmapNewCarGenMenu_Click); + // + // YmapNewGrassBatchMenu + // + this.YmapNewGrassBatchMenu.Enabled = false; + this.YmapNewGrassBatchMenu.Name = "YmapNewGrassBatchMenu"; + this.YmapNewGrassBatchMenu.Size = new System.Drawing.Size(199, 22); + this.YmapNewGrassBatchMenu.Text = "New Grass Batch"; + this.YmapNewGrassBatchMenu.Click += new System.EventHandler(this.YmapNewGrassBatchMenu_Click); + // + // toolStripSeparator12 + // + this.toolStripSeparator12.Name = "toolStripSeparator12"; + this.toolStripSeparator12.Size = new System.Drawing.Size(196, 6); + // + // YmapAddToProjectMenu + // + this.YmapAddToProjectMenu.Enabled = false; + this.YmapAddToProjectMenu.Name = "YmapAddToProjectMenu"; + this.YmapAddToProjectMenu.Size = new System.Drawing.Size(199, 22); + this.YmapAddToProjectMenu.Text = "Add to Project"; + this.YmapAddToProjectMenu.Click += new System.EventHandler(this.YmapAddToProjectMenu_Click); + // + // YmapRemoveFromProjectMenu + // + this.YmapRemoveFromProjectMenu.Enabled = false; + this.YmapRemoveFromProjectMenu.Name = "YmapRemoveFromProjectMenu"; + this.YmapRemoveFromProjectMenu.Size = new System.Drawing.Size(199, 22); + this.YmapRemoveFromProjectMenu.Text = "Remove from Project"; + this.YmapRemoveFromProjectMenu.Click += new System.EventHandler(this.YmapRemoveFromProjectMenu_Click); + // + // YtypMenu + // + this.YtypMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.YtypNameMenu, + this.toolStripSeparator13, + this.YtypNewArchetypeMenu, + this.toolStripSeparator15, + this.YtypAddToProjectMenu, + this.YtypRemoveFromProjectMenu}); + this.YtypMenu.Name = "YtypMenu"; + this.YtypMenu.Size = new System.Drawing.Size(43, 20); + this.YtypMenu.Text = "Ytyp"; + this.YtypMenu.Visible = false; + // + // YtypNameMenu + // + this.YtypNameMenu.Enabled = false; + this.YtypNameMenu.Name = "YtypNameMenu"; + this.YtypNameMenu.Size = new System.Drawing.Size(192, 22); + this.YtypNameMenu.Text = "(No .ytyp file selected)"; + // + // toolStripSeparator13 + // + this.toolStripSeparator13.Name = "toolStripSeparator13"; + this.toolStripSeparator13.Size = new System.Drawing.Size(189, 6); + // + // YtypNewArchetypeMenu + // + this.YtypNewArchetypeMenu.Enabled = false; + this.YtypNewArchetypeMenu.Name = "YtypNewArchetypeMenu"; + this.YtypNewArchetypeMenu.Size = new System.Drawing.Size(192, 22); + this.YtypNewArchetypeMenu.Text = "New Archetype"; + this.YtypNewArchetypeMenu.Click += new System.EventHandler(this.YtypNewArchetypeMenu_Click); + // + // toolStripSeparator15 + // + this.toolStripSeparator15.Name = "toolStripSeparator15"; + this.toolStripSeparator15.Size = new System.Drawing.Size(189, 6); + // + // YtypAddToProjectMenu + // + this.YtypAddToProjectMenu.Enabled = false; + this.YtypAddToProjectMenu.Name = "YtypAddToProjectMenu"; + this.YtypAddToProjectMenu.Size = new System.Drawing.Size(192, 22); + this.YtypAddToProjectMenu.Text = "Add to Project"; + this.YtypAddToProjectMenu.Click += new System.EventHandler(this.YtypAddToProjectMenu_Click); + // + // YtypRemoveFromProjectMenu + // + this.YtypRemoveFromProjectMenu.Enabled = false; + this.YtypRemoveFromProjectMenu.Name = "YtypRemoveFromProjectMenu"; + this.YtypRemoveFromProjectMenu.Size = new System.Drawing.Size(192, 22); + this.YtypRemoveFromProjectMenu.Text = "Remove from Project"; + this.YtypRemoveFromProjectMenu.Click += new System.EventHandler(this.YtypRemoveFromProjectMenu_Click); + // + // YndMenu + // + this.YndMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.YndNameMenu, + this.toolStripSeparator14, + this.YndNewNodeMenu, + this.toolStripSeparator16, + this.YndAddToProjectMenu, + this.YndRemoveFromProjectMenu}); + this.YndMenu.Name = "YndMenu"; + this.YndMenu.Size = new System.Drawing.Size(39, 20); + this.YndMenu.Text = "Ynd"; + this.YndMenu.Visible = false; + // + // YndNameMenu + // + this.YndNameMenu.Enabled = false; + this.YndNameMenu.Name = "YndNameMenu"; + this.YndNameMenu.Size = new System.Drawing.Size(189, 22); + this.YndNameMenu.Text = "(No .ynd file selected)"; + // + // toolStripSeparator14 + // + this.toolStripSeparator14.Name = "toolStripSeparator14"; + this.toolStripSeparator14.Size = new System.Drawing.Size(186, 6); + // + // YndNewNodeMenu + // + this.YndNewNodeMenu.Enabled = false; + this.YndNewNodeMenu.Name = "YndNewNodeMenu"; + this.YndNewNodeMenu.Size = new System.Drawing.Size(189, 22); + this.YndNewNodeMenu.Text = "New Node"; + this.YndNewNodeMenu.Click += new System.EventHandler(this.YndNewNodeMenu_Click); + // + // toolStripSeparator16 + // + this.toolStripSeparator16.Name = "toolStripSeparator16"; + this.toolStripSeparator16.Size = new System.Drawing.Size(186, 6); + // + // YndAddToProjectMenu + // + this.YndAddToProjectMenu.Enabled = false; + this.YndAddToProjectMenu.Name = "YndAddToProjectMenu"; + this.YndAddToProjectMenu.Size = new System.Drawing.Size(189, 22); + this.YndAddToProjectMenu.Text = "Add to Project"; + this.YndAddToProjectMenu.Click += new System.EventHandler(this.YndAddToProjectMenu_Click); + // + // YndRemoveFromProjectMenu + // + this.YndRemoveFromProjectMenu.Enabled = false; + this.YndRemoveFromProjectMenu.Name = "YndRemoveFromProjectMenu"; + this.YndRemoveFromProjectMenu.Size = new System.Drawing.Size(189, 22); + this.YndRemoveFromProjectMenu.Text = "Remove from Project"; + this.YndRemoveFromProjectMenu.Click += new System.EventHandler(this.YndRemoveFromProjectMenu_Click); + // + // YnvMenu + // + this.YnvMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.YnvNameMenu, + this.toolStripSeparator17, + this.YnvNewPolygonMenu, + this.toolStripSeparator18, + this.YnvAddToProjectMenu, + this.YnvRemoveFromProjectMenu}); + this.YnvMenu.Name = "YnvMenu"; + this.YnvMenu.Size = new System.Drawing.Size(38, 20); + this.YnvMenu.Text = "Ynv"; + this.YnvMenu.Visible = false; + // + // YnvNameMenu + // + this.YnvNameMenu.Enabled = false; + this.YnvNameMenu.Name = "YnvNameMenu"; + this.YnvNameMenu.Size = new System.Drawing.Size(188, 22); + this.YnvNameMenu.Text = "(No .ynv file selected)"; + // + // toolStripSeparator17 + // + this.toolStripSeparator17.Name = "toolStripSeparator17"; + this.toolStripSeparator17.Size = new System.Drawing.Size(185, 6); + // + // YnvNewPolygonMenu + // + this.YnvNewPolygonMenu.Enabled = false; + this.YnvNewPolygonMenu.Name = "YnvNewPolygonMenu"; + this.YnvNewPolygonMenu.Size = new System.Drawing.Size(188, 22); + this.YnvNewPolygonMenu.Text = "New Polygon"; + this.YnvNewPolygonMenu.Click += new System.EventHandler(this.YnvNewPolygonMenu_Click); + // + // toolStripSeparator18 + // + this.toolStripSeparator18.Name = "toolStripSeparator18"; + this.toolStripSeparator18.Size = new System.Drawing.Size(185, 6); + // + // YnvAddToProjectMenu + // + this.YnvAddToProjectMenu.Enabled = false; + this.YnvAddToProjectMenu.Name = "YnvAddToProjectMenu"; + this.YnvAddToProjectMenu.Size = new System.Drawing.Size(188, 22); + this.YnvAddToProjectMenu.Text = "Add to Project"; + this.YnvAddToProjectMenu.Click += new System.EventHandler(this.YnvAddToProjectMenu_Click); + // + // YnvRemoveFromProjectMenu + // + this.YnvRemoveFromProjectMenu.Enabled = false; + this.YnvRemoveFromProjectMenu.Name = "YnvRemoveFromProjectMenu"; + this.YnvRemoveFromProjectMenu.Size = new System.Drawing.Size(188, 22); + this.YnvRemoveFromProjectMenu.Text = "Remove from Project"; + this.YnvRemoveFromProjectMenu.Click += new System.EventHandler(this.YnvRemoveFromProjectMenu_Click); + // + // TrainsMenu + // + this.TrainsMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.TrainsNameMenu, + this.toolStripSeparator19, + this.TrainsNewNodeMenu, + this.toolStripSeparator20, + this.TrainsAddToProjectMenu, + this.TrainsRemoveFromProjectMenu}); + this.TrainsMenu.Name = "TrainsMenu"; + this.TrainsMenu.Size = new System.Drawing.Size(50, 20); + this.TrainsMenu.Text = "Trains"; + this.TrainsMenu.Visible = false; + // + // TrainsNameMenu + // + this.TrainsNameMenu.Enabled = false; + this.TrainsNameMenu.Name = "TrainsNameMenu"; + this.TrainsNameMenu.Size = new System.Drawing.Size(200, 22); + this.TrainsNameMenu.Text = "(No train track selected)"; + // + // toolStripSeparator19 + // + this.toolStripSeparator19.Name = "toolStripSeparator19"; + this.toolStripSeparator19.Size = new System.Drawing.Size(197, 6); + // + // TrainsNewNodeMenu + // + this.TrainsNewNodeMenu.Enabled = false; + this.TrainsNewNodeMenu.Name = "TrainsNewNodeMenu"; + this.TrainsNewNodeMenu.Size = new System.Drawing.Size(200, 22); + this.TrainsNewNodeMenu.Text = "New Node"; + this.TrainsNewNodeMenu.Click += new System.EventHandler(this.TrainsNewNodeMenu_Click); + // + // toolStripSeparator20 + // + this.toolStripSeparator20.Name = "toolStripSeparator20"; + this.toolStripSeparator20.Size = new System.Drawing.Size(197, 6); + // + // TrainsAddToProjectMenu + // + this.TrainsAddToProjectMenu.Enabled = false; + this.TrainsAddToProjectMenu.Name = "TrainsAddToProjectMenu"; + this.TrainsAddToProjectMenu.Size = new System.Drawing.Size(200, 22); + this.TrainsAddToProjectMenu.Text = "Add to Project"; + this.TrainsAddToProjectMenu.Click += new System.EventHandler(this.TrainsAddToProjectMenu_Click); + // + // TrainsRemoveFromProjectMenu + // + this.TrainsRemoveFromProjectMenu.Enabled = false; + this.TrainsRemoveFromProjectMenu.Name = "TrainsRemoveFromProjectMenu"; + this.TrainsRemoveFromProjectMenu.Size = new System.Drawing.Size(200, 22); + this.TrainsRemoveFromProjectMenu.Text = "Remove from Project"; + this.TrainsRemoveFromProjectMenu.Click += new System.EventHandler(this.TrainsRemoveFromProjectMenu_Click); + // + // ScenarioMenu + // + this.ScenarioMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.ScenarioNameMenu, + this.toolStripSeparator21, + this.ScenarioNewPointMenu, + this.ScenarioNewPointFromSelectedMenu, + this.ScenarioNewEntityOverrideMenu, + this.ScenarioNewChainMenu, + this.ScenarioNewClusterMenu, + this.ScenarioImportChainMenu, + this.toolStripSeparator22, + this.ScenarioAddToProjectMenu, + this.ScenarioRemoveFromProjectMenu}); + this.ScenarioMenu.Name = "ScenarioMenu"; + this.ScenarioMenu.Size = new System.Drawing.Size(64, 20); + this.ScenarioMenu.Text = "Scenario"; + this.ScenarioMenu.Visible = false; + // + // ScenarioNameMenu + // + this.ScenarioNameMenu.Enabled = false; + this.ScenarioNameMenu.Name = "ScenarioNameMenu"; + this.ScenarioNameMenu.Size = new System.Drawing.Size(228, 22); + this.ScenarioNameMenu.Text = "(No scenario region selected)"; + // + // toolStripSeparator21 + // + this.toolStripSeparator21.Name = "toolStripSeparator21"; + this.toolStripSeparator21.Size = new System.Drawing.Size(225, 6); + // + // ScenarioNewPointMenu + // + this.ScenarioNewPointMenu.Enabled = false; + this.ScenarioNewPointMenu.Name = "ScenarioNewPointMenu"; + this.ScenarioNewPointMenu.Size = new System.Drawing.Size(228, 22); + this.ScenarioNewPointMenu.Text = "New Point (Blank)"; + this.ScenarioNewPointMenu.Click += new System.EventHandler(this.ScenarioNewPointMenu_Click); + // + // ScenarioNewPointFromSelectedMenu + // + this.ScenarioNewPointFromSelectedMenu.Enabled = false; + this.ScenarioNewPointFromSelectedMenu.Name = "ScenarioNewPointFromSelectedMenu"; + this.ScenarioNewPointFromSelectedMenu.Size = new System.Drawing.Size(228, 22); + this.ScenarioNewPointFromSelectedMenu.Text = "New Point (from Selected)"; + this.ScenarioNewPointFromSelectedMenu.Click += new System.EventHandler(this.ScenarioNewPointFromSelectedMenu_Click); + // + // ScenarioNewEntityOverrideMenu + // + this.ScenarioNewEntityOverrideMenu.Enabled = false; + this.ScenarioNewEntityOverrideMenu.Name = "ScenarioNewEntityOverrideMenu"; + this.ScenarioNewEntityOverrideMenu.Size = new System.Drawing.Size(228, 22); + this.ScenarioNewEntityOverrideMenu.Text = "New Entity Override"; + this.ScenarioNewEntityOverrideMenu.Click += new System.EventHandler(this.ScenarioNewEntityOverrideMenu_Click); + // + // ScenarioNewChainMenu + // + this.ScenarioNewChainMenu.Enabled = false; + this.ScenarioNewChainMenu.Name = "ScenarioNewChainMenu"; + this.ScenarioNewChainMenu.Size = new System.Drawing.Size(228, 22); + this.ScenarioNewChainMenu.Text = "New Chain"; + this.ScenarioNewChainMenu.Click += new System.EventHandler(this.ScenarioNewChainMenu_Click); + // + // ScenarioNewClusterMenu + // + this.ScenarioNewClusterMenu.Enabled = false; + this.ScenarioNewClusterMenu.Name = "ScenarioNewClusterMenu"; + this.ScenarioNewClusterMenu.Size = new System.Drawing.Size(228, 22); + this.ScenarioNewClusterMenu.Text = "New Cluster"; + this.ScenarioNewClusterMenu.Click += new System.EventHandler(this.ScenarioNewClusterMenu_Click); + // + // ScenarioImportChainMenu + // + this.ScenarioImportChainMenu.Enabled = false; + this.ScenarioImportChainMenu.Name = "ScenarioImportChainMenu"; + this.ScenarioImportChainMenu.Size = new System.Drawing.Size(228, 22); + this.ScenarioImportChainMenu.Text = "Import Chain..."; + this.ScenarioImportChainMenu.Click += new System.EventHandler(this.ScenarioImportChainMenu_Click); + // + // toolStripSeparator22 + // + this.toolStripSeparator22.Name = "toolStripSeparator22"; + this.toolStripSeparator22.Size = new System.Drawing.Size(225, 6); + // + // ScenarioAddToProjectMenu + // + this.ScenarioAddToProjectMenu.Enabled = false; + this.ScenarioAddToProjectMenu.Name = "ScenarioAddToProjectMenu"; + this.ScenarioAddToProjectMenu.Size = new System.Drawing.Size(228, 22); + this.ScenarioAddToProjectMenu.Text = "Add to Project"; + this.ScenarioAddToProjectMenu.Click += new System.EventHandler(this.ScenarioAddToProjectMenu_Click); + // + // ScenarioRemoveFromProjectMenu + // + this.ScenarioRemoveFromProjectMenu.Enabled = false; + this.ScenarioRemoveFromProjectMenu.Name = "ScenarioRemoveFromProjectMenu"; + this.ScenarioRemoveFromProjectMenu.Size = new System.Drawing.Size(228, 22); + this.ScenarioRemoveFromProjectMenu.Text = "Remove from Project"; + this.ScenarioRemoveFromProjectMenu.Click += new System.EventHandler(this.ScenarioRemoveFromProjectMenu_Click); + // // ToolsMenu // this.ToolsMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -720,451 +1174,7 @@ this.toolStripSeparator5.Name = "toolStripSeparator5"; this.toolStripSeparator5.Size = new System.Drawing.Size(6, 25); // - // EditUndoMenu - // - this.EditUndoMenu.Enabled = false; - this.EditUndoMenu.Name = "EditUndoMenu"; - this.EditUndoMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Z))); - this.EditUndoMenu.Size = new System.Drawing.Size(190, 22); - this.EditUndoMenu.Text = "Undo"; - // - // EditRedoMenu - // - this.EditRedoMenu.Enabled = false; - this.EditRedoMenu.Name = "EditRedoMenu"; - this.EditRedoMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Y))); - this.EditRedoMenu.Size = new System.Drawing.Size(190, 22); - this.EditRedoMenu.Text = "Redo"; - // - // toolStripSeparator10 - // - this.toolStripSeparator10.Name = "toolStripSeparator10"; - this.toolStripSeparator10.Size = new System.Drawing.Size(187, 6); - // - // EditCutMenu - // - this.EditCutMenu.Enabled = false; - this.EditCutMenu.Name = "EditCutMenu"; - this.EditCutMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.X))); - this.EditCutMenu.Size = new System.Drawing.Size(190, 22); - this.EditCutMenu.Text = "Cut Item"; - // - // EditCopyMenu - // - this.EditCopyMenu.Enabled = false; - this.EditCopyMenu.Name = "EditCopyMenu"; - this.EditCopyMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.C))); - this.EditCopyMenu.Size = new System.Drawing.Size(190, 22); - this.EditCopyMenu.Text = "Copy Item"; - // - // EditPasteMenu - // - this.EditPasteMenu.Enabled = false; - this.EditPasteMenu.Name = "EditPasteMenu"; - this.EditPasteMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.V))); - this.EditPasteMenu.Size = new System.Drawing.Size(190, 22); - this.EditPasteMenu.Text = "Paste Item"; - // - // EditDeleteMenu - // - this.EditDeleteMenu.Enabled = false; - this.EditDeleteMenu.Name = "EditDeleteMenu"; - this.EditDeleteMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Shift | System.Windows.Forms.Keys.Delete))); - this.EditDeleteMenu.Size = new System.Drawing.Size(190, 22); - this.EditDeleteMenu.Text = "Delete Item"; - // - // EditCloneMenu - // - this.EditCloneMenu.Enabled = false; - this.EditCloneMenu.Name = "EditCloneMenu"; - this.EditCloneMenu.Size = new System.Drawing.Size(190, 22); - this.EditCloneMenu.Text = "Clone Item"; - // - // YmapMenu - // - this.YmapMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.YmapNameMenu, - this.toolStripSeparator11, - this.YmapNewEntityMenu, - this.YmapNewCarGenMenu, - this.toolStripSeparator12, - this.YmapAddToProjectMenu, - this.YmapRemoveFromProjectMenu}); - this.YmapMenu.Name = "YmapMenu"; - this.YmapMenu.Size = new System.Drawing.Size(49, 20); - this.YmapMenu.Text = "Ymap"; - this.YmapMenu.Visible = false; - // - // YtypMenu - // - this.YtypMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.YtypNameMenu, - this.toolStripSeparator13, - this.YtypNewArchetypeMenu, - this.toolStripSeparator15, - this.YtypAddToProjectMenu, - this.YtypRemoveFromProjectMenu}); - this.YtypMenu.Name = "YtypMenu"; - this.YtypMenu.Size = new System.Drawing.Size(43, 20); - this.YtypMenu.Text = "Ytyp"; - this.YtypMenu.Visible = false; - // - // YndMenu - // - this.YndMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.YndNameMenu, - this.toolStripSeparator14, - this.YndNewNodeMenu, - this.toolStripSeparator16, - this.YndAddToProjectMenu, - this.YndRemoveFromProjectMenu}); - this.YndMenu.Name = "YndMenu"; - this.YndMenu.Size = new System.Drawing.Size(39, 20); - this.YndMenu.Text = "Ynd"; - this.YndMenu.Visible = false; - // - // YnvMenu - // - this.YnvMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.YnvNameMenu, - this.toolStripSeparator17, - this.YnvNewPolygonMenu, - this.toolStripSeparator18, - this.YnvAddToProjectMenu, - this.YnvRemoveFromProjectMenu}); - this.YnvMenu.Name = "YnvMenu"; - this.YnvMenu.Size = new System.Drawing.Size(38, 20); - this.YnvMenu.Text = "Ynv"; - this.YnvMenu.Visible = false; - // - // TrainsMenu - // - this.TrainsMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.TrainsNameMenu, - this.toolStripSeparator19, - this.TrainsNewNodeMenu, - this.toolStripSeparator20, - this.TrainsAddToProjectMenu, - this.TrainsRemoveFromProjectMenu}); - this.TrainsMenu.Name = "TrainsMenu"; - this.TrainsMenu.Size = new System.Drawing.Size(50, 20); - this.TrainsMenu.Text = "Trains"; - this.TrainsMenu.Visible = false; - // - // ScenarioMenu - // - this.ScenarioMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.ScenarioNameMenu, - this.toolStripSeparator21, - this.ScenarioNewPointMenu, - this.ScenarioNewPointFromSelectedMenu, - this.ScenarioNewEntityOverrideMenu, - this.ScenarioNewChainMenu, - this.ScenarioNewClusterMenu, - this.ScenarioImportChainMenu, - this.toolStripSeparator22, - this.ScenarioAddToProjectMenu, - this.ScenarioRemoveFromProjectMenu}); - this.ScenarioMenu.Name = "ScenarioMenu"; - this.ScenarioMenu.Size = new System.Drawing.Size(64, 20); - this.ScenarioMenu.Text = "Scenario"; - this.ScenarioMenu.Visible = false; - // - // YmapNameMenu - // - this.YmapNameMenu.Enabled = false; - this.YmapNameMenu.Name = "YmapNameMenu"; - this.YmapNameMenu.Size = new System.Drawing.Size(199, 22); - this.YmapNameMenu.Text = "(No .ymap file selected)"; - // - // toolStripSeparator11 - // - this.toolStripSeparator11.Name = "toolStripSeparator11"; - this.toolStripSeparator11.Size = new System.Drawing.Size(196, 6); - // - // YmapNewEntityMenu - // - this.YmapNewEntityMenu.Enabled = false; - this.YmapNewEntityMenu.Name = "YmapNewEntityMenu"; - this.YmapNewEntityMenu.Size = new System.Drawing.Size(199, 22); - this.YmapNewEntityMenu.Text = "New Entity"; - this.YmapNewEntityMenu.Click += new System.EventHandler(this.YmapNewEntityMenu_Click); - // - // YmapNewCarGenMenu - // - this.YmapNewCarGenMenu.Enabled = false; - this.YmapNewCarGenMenu.Name = "YmapNewCarGenMenu"; - this.YmapNewCarGenMenu.Size = new System.Drawing.Size(199, 22); - this.YmapNewCarGenMenu.Text = "New Car Generator"; - this.YmapNewCarGenMenu.Click += new System.EventHandler(this.YmapNewCarGenMenu_Click); - // - // toolStripSeparator12 - // - this.toolStripSeparator12.Name = "toolStripSeparator12"; - this.toolStripSeparator12.Size = new System.Drawing.Size(196, 6); - // - // YmapAddToProjectMenu - // - this.YmapAddToProjectMenu.Enabled = false; - this.YmapAddToProjectMenu.Name = "YmapAddToProjectMenu"; - this.YmapAddToProjectMenu.Size = new System.Drawing.Size(199, 22); - this.YmapAddToProjectMenu.Text = "Add to Project"; - this.YmapAddToProjectMenu.Click += new System.EventHandler(this.YmapAddToProjectMenu_Click); - // - // YmapRemoveFromProjectMenu - // - this.YmapRemoveFromProjectMenu.Enabled = false; - this.YmapRemoveFromProjectMenu.Name = "YmapRemoveFromProjectMenu"; - this.YmapRemoveFromProjectMenu.Size = new System.Drawing.Size(199, 22); - this.YmapRemoveFromProjectMenu.Text = "Remove from Project"; - this.YmapRemoveFromProjectMenu.Click += new System.EventHandler(this.YmapRemoveFromProjectMenu_Click); - // - // YtypNameMenu - // - this.YtypNameMenu.Enabled = false; - this.YtypNameMenu.Name = "YtypNameMenu"; - this.YtypNameMenu.Size = new System.Drawing.Size(192, 22); - this.YtypNameMenu.Text = "(No .ytyp file selected)"; - // - // toolStripSeparator13 - // - this.toolStripSeparator13.Name = "toolStripSeparator13"; - this.toolStripSeparator13.Size = new System.Drawing.Size(189, 6); - // - // YtypNewArchetypeMenu - // - this.YtypNewArchetypeMenu.Enabled = false; - this.YtypNewArchetypeMenu.Name = "YtypNewArchetypeMenu"; - this.YtypNewArchetypeMenu.Size = new System.Drawing.Size(192, 22); - this.YtypNewArchetypeMenu.Text = "New Archetype"; - this.YtypNewArchetypeMenu.Click += new System.EventHandler(this.YtypNewArchetypeMenu_Click); - // - // YndNameMenu - // - this.YndNameMenu.Enabled = false; - this.YndNameMenu.Name = "YndNameMenu"; - this.YndNameMenu.Size = new System.Drawing.Size(189, 22); - this.YndNameMenu.Text = "(No .ynd file selected)"; - // - // toolStripSeparator14 - // - this.toolStripSeparator14.Name = "toolStripSeparator14"; - this.toolStripSeparator14.Size = new System.Drawing.Size(186, 6); - // - // toolStripSeparator15 - // - this.toolStripSeparator15.Name = "toolStripSeparator15"; - this.toolStripSeparator15.Size = new System.Drawing.Size(189, 6); - // - // YtypAddToProjectMenu - // - this.YtypAddToProjectMenu.Enabled = false; - this.YtypAddToProjectMenu.Name = "YtypAddToProjectMenu"; - this.YtypAddToProjectMenu.Size = new System.Drawing.Size(192, 22); - this.YtypAddToProjectMenu.Text = "Add to Project"; - this.YtypAddToProjectMenu.Click += new System.EventHandler(this.YtypAddToProjectMenu_Click); - // - // YtypRemoveFromProjectMenu - // - this.YtypRemoveFromProjectMenu.Enabled = false; - this.YtypRemoveFromProjectMenu.Name = "YtypRemoveFromProjectMenu"; - this.YtypRemoveFromProjectMenu.Size = new System.Drawing.Size(192, 22); - this.YtypRemoveFromProjectMenu.Text = "Remove from Project"; - this.YtypRemoveFromProjectMenu.Click += new System.EventHandler(this.YtypRemoveFromProjectMenu_Click); - // - // YndNewNodeMenu - // - this.YndNewNodeMenu.Enabled = false; - this.YndNewNodeMenu.Name = "YndNewNodeMenu"; - this.YndNewNodeMenu.Size = new System.Drawing.Size(189, 22); - this.YndNewNodeMenu.Text = "New Node"; - this.YndNewNodeMenu.Click += new System.EventHandler(this.YndNewNodeMenu_Click); - // - // toolStripSeparator16 - // - this.toolStripSeparator16.Name = "toolStripSeparator16"; - this.toolStripSeparator16.Size = new System.Drawing.Size(186, 6); - // - // YndAddToProjectMenu - // - this.YndAddToProjectMenu.Enabled = false; - this.YndAddToProjectMenu.Name = "YndAddToProjectMenu"; - this.YndAddToProjectMenu.Size = new System.Drawing.Size(189, 22); - this.YndAddToProjectMenu.Text = "Add to Project"; - this.YndAddToProjectMenu.Click += new System.EventHandler(this.YndAddToProjectMenu_Click); - // - // YndRemoveFromProjectMenu - // - this.YndRemoveFromProjectMenu.Enabled = false; - this.YndRemoveFromProjectMenu.Name = "YndRemoveFromProjectMenu"; - this.YndRemoveFromProjectMenu.Size = new System.Drawing.Size(189, 22); - this.YndRemoveFromProjectMenu.Text = "Remove from Project"; - this.YndRemoveFromProjectMenu.Click += new System.EventHandler(this.YndRemoveFromProjectMenu_Click); - // - // YnvNameMenu - // - this.YnvNameMenu.Enabled = false; - this.YnvNameMenu.Name = "YnvNameMenu"; - this.YnvNameMenu.Size = new System.Drawing.Size(188, 22); - this.YnvNameMenu.Text = "(No .ynv file selected)"; - // - // toolStripSeparator17 - // - this.toolStripSeparator17.Name = "toolStripSeparator17"; - this.toolStripSeparator17.Size = new System.Drawing.Size(185, 6); - // - // YnvNewPolygonMenu - // - this.YnvNewPolygonMenu.Enabled = false; - this.YnvNewPolygonMenu.Name = "YnvNewPolygonMenu"; - this.YnvNewPolygonMenu.Size = new System.Drawing.Size(188, 22); - this.YnvNewPolygonMenu.Text = "New Polygon"; - this.YnvNewPolygonMenu.Click += new System.EventHandler(this.YnvNewPolygonMenu_Click); - // - // toolStripSeparator18 - // - this.toolStripSeparator18.Name = "toolStripSeparator18"; - this.toolStripSeparator18.Size = new System.Drawing.Size(185, 6); - // - // YnvAddToProjectMenu - // - this.YnvAddToProjectMenu.Enabled = false; - this.YnvAddToProjectMenu.Name = "YnvAddToProjectMenu"; - this.YnvAddToProjectMenu.Size = new System.Drawing.Size(188, 22); - this.YnvAddToProjectMenu.Text = "Add to Project"; - this.YnvAddToProjectMenu.Click += new System.EventHandler(this.YnvAddToProjectMenu_Click); - // - // YnvRemoveFromProjectMenu - // - this.YnvRemoveFromProjectMenu.Enabled = false; - this.YnvRemoveFromProjectMenu.Name = "YnvRemoveFromProjectMenu"; - this.YnvRemoveFromProjectMenu.Size = new System.Drawing.Size(188, 22); - this.YnvRemoveFromProjectMenu.Text = "Remove from Project"; - this.YnvRemoveFromProjectMenu.Click += new System.EventHandler(this.YnvRemoveFromProjectMenu_Click); - // - // TrainsNameMenu - // - this.TrainsNameMenu.Enabled = false; - this.TrainsNameMenu.Name = "TrainsNameMenu"; - this.TrainsNameMenu.Size = new System.Drawing.Size(200, 22); - this.TrainsNameMenu.Text = "(No train track selected)"; - // - // toolStripSeparator19 - // - this.toolStripSeparator19.Name = "toolStripSeparator19"; - this.toolStripSeparator19.Size = new System.Drawing.Size(197, 6); - // - // TrainsNewNodeMenu - // - this.TrainsNewNodeMenu.Enabled = false; - this.TrainsNewNodeMenu.Name = "TrainsNewNodeMenu"; - this.TrainsNewNodeMenu.Size = new System.Drawing.Size(200, 22); - this.TrainsNewNodeMenu.Text = "New Node"; - this.TrainsNewNodeMenu.Click += new System.EventHandler(this.TrainsNewNodeMenu_Click); - // - // toolStripSeparator20 - // - this.toolStripSeparator20.Name = "toolStripSeparator20"; - this.toolStripSeparator20.Size = new System.Drawing.Size(197, 6); - // - // TrainsAddToProjectMenu - // - this.TrainsAddToProjectMenu.Enabled = false; - this.TrainsAddToProjectMenu.Name = "TrainsAddToProjectMenu"; - this.TrainsAddToProjectMenu.Size = new System.Drawing.Size(200, 22); - this.TrainsAddToProjectMenu.Text = "Add to Project"; - this.TrainsAddToProjectMenu.Click += new System.EventHandler(this.TrainsAddToProjectMenu_Click); - // - // TrainsRemoveFromProjectMenu - // - this.TrainsRemoveFromProjectMenu.Enabled = false; - this.TrainsRemoveFromProjectMenu.Name = "TrainsRemoveFromProjectMenu"; - this.TrainsRemoveFromProjectMenu.Size = new System.Drawing.Size(200, 22); - this.TrainsRemoveFromProjectMenu.Text = "Remove from Project"; - this.TrainsRemoveFromProjectMenu.Click += new System.EventHandler(this.TrainsRemoveFromProjectMenu_Click); - // - // ScenarioNameMenu - // - this.ScenarioNameMenu.Enabled = false; - this.ScenarioNameMenu.Name = "ScenarioNameMenu"; - this.ScenarioNameMenu.Size = new System.Drawing.Size(228, 22); - this.ScenarioNameMenu.Text = "(No scenario region selected)"; - // - // toolStripSeparator21 - // - this.toolStripSeparator21.Name = "toolStripSeparator21"; - this.toolStripSeparator21.Size = new System.Drawing.Size(225, 6); - // - // ScenarioNewPointMenu - // - this.ScenarioNewPointMenu.Enabled = false; - this.ScenarioNewPointMenu.Name = "ScenarioNewPointMenu"; - this.ScenarioNewPointMenu.Size = new System.Drawing.Size(228, 22); - this.ScenarioNewPointMenu.Text = "New Point (Blank)"; - this.ScenarioNewPointMenu.Click += new System.EventHandler(this.ScenarioNewPointMenu_Click); - // - // ScenarioNewPointFromSelectedMenu - // - this.ScenarioNewPointFromSelectedMenu.Enabled = false; - this.ScenarioNewPointFromSelectedMenu.Name = "ScenarioNewPointFromSelectedMenu"; - this.ScenarioNewPointFromSelectedMenu.Size = new System.Drawing.Size(228, 22); - this.ScenarioNewPointFromSelectedMenu.Text = "New Point (from Selected)"; - this.ScenarioNewPointFromSelectedMenu.Click += new System.EventHandler(this.ScenarioNewPointFromSelectedMenu_Click); - // - // ScenarioNewEntityOverrideMenu - // - this.ScenarioNewEntityOverrideMenu.Enabled = false; - this.ScenarioNewEntityOverrideMenu.Name = "ScenarioNewEntityOverrideMenu"; - this.ScenarioNewEntityOverrideMenu.Size = new System.Drawing.Size(228, 22); - this.ScenarioNewEntityOverrideMenu.Text = "New Entity Override"; - this.ScenarioNewEntityOverrideMenu.Click += new System.EventHandler(this.ScenarioNewEntityOverrideMenu_Click); - // - // ScenarioNewChainMenu - // - this.ScenarioNewChainMenu.Enabled = false; - this.ScenarioNewChainMenu.Name = "ScenarioNewChainMenu"; - this.ScenarioNewChainMenu.Size = new System.Drawing.Size(228, 22); - this.ScenarioNewChainMenu.Text = "New Chain"; - this.ScenarioNewChainMenu.Click += new System.EventHandler(this.ScenarioNewChainMenu_Click); - // - // ScenarioNewClusterMenu - // - this.ScenarioNewClusterMenu.Enabled = false; - this.ScenarioNewClusterMenu.Name = "ScenarioNewClusterMenu"; - this.ScenarioNewClusterMenu.Size = new System.Drawing.Size(228, 22); - this.ScenarioNewClusterMenu.Text = "New Cluster"; - this.ScenarioNewClusterMenu.Click += new System.EventHandler(this.ScenarioNewClusterMenu_Click); - // - // ScenarioImportChainMenu - // - this.ScenarioImportChainMenu.Enabled = false; - this.ScenarioImportChainMenu.Name = "ScenarioImportChainMenu"; - this.ScenarioImportChainMenu.Size = new System.Drawing.Size(228, 22); - this.ScenarioImportChainMenu.Text = "Import Chain..."; - this.ScenarioImportChainMenu.Click += new System.EventHandler(this.ScenarioImportChainMenu_Click); - // - // toolStripSeparator22 - // - this.toolStripSeparator22.Name = "toolStripSeparator22"; - this.toolStripSeparator22.Size = new System.Drawing.Size(225, 6); - // - // ScenarioAddToProjectMenu - // - this.ScenarioAddToProjectMenu.Enabled = false; - this.ScenarioAddToProjectMenu.Name = "ScenarioAddToProjectMenu"; - this.ScenarioAddToProjectMenu.Size = new System.Drawing.Size(228, 22); - this.ScenarioAddToProjectMenu.Text = "Add to Project"; - this.ScenarioAddToProjectMenu.Click += new System.EventHandler(this.ScenarioAddToProjectMenu_Click); - // - // ScenarioRemoveFromProjectMenu - // - this.ScenarioRemoveFromProjectMenu.Enabled = false; - this.ScenarioRemoveFromProjectMenu.Name = "ScenarioRemoveFromProjectMenu"; - this.ScenarioRemoveFromProjectMenu.Size = new System.Drawing.Size(228, 22); - this.ScenarioRemoveFromProjectMenu.Text = "Remove from Project"; - this.ScenarioRemoveFromProjectMenu.Click += new System.EventHandler(this.ScenarioRemoveFromProjectMenu_Click); - // - // ProjectForm2 + // ProjectForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; @@ -1175,7 +1185,7 @@ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.IsMdiContainer = true; this.MainMenuStrip = this.MainMenu; - this.Name = "ProjectForm2"; + this.Name = "ProjectForm"; this.Text = "Project - CodeWalker by dexyfex"; this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ProjectForm_FormClosing); this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.ProjectForm_FormClosed); @@ -1314,5 +1324,6 @@ private System.Windows.Forms.ToolStripSeparator toolStripSeparator22; private System.Windows.Forms.ToolStripMenuItem ScenarioAddToProjectMenu; private System.Windows.Forms.ToolStripMenuItem ScenarioRemoveFromProjectMenu; + private System.Windows.Forms.ToolStripMenuItem YmapNewGrassBatchMenu; } } \ No newline at end of file diff --git a/Project/ProjectForm.cs b/Project/ProjectForm.cs index 24d7e59..9a28851 100644 --- a/Project/ProjectForm.cs +++ b/Project/ProjectForm.cs @@ -104,7 +104,6 @@ namespace CodeWalker.Project RpfMan = GameFileCache.RpfMan; })).Start(); } - } private void UpdateStatus(string text) @@ -1270,6 +1269,10 @@ namespace CodeWalker.Project { ProjectExplorer?.TrySelectCarGenTreeNode(CurrentCarGen); } + else if (CurrentGrassBatch != null) + { + ProjectExplorer?.TrySelectGrassBatchTreeNode(CurrentGrassBatch); + } } public void RemoveYmapFromProject() { @@ -1435,6 +1438,155 @@ namespace CodeWalker.Project return CurrentEntity == ent; } + public void NewGrassBatch(YmapGrassInstanceBatch copy = null) + { + if (CurrentYmapFile == null) return; + + rage__fwGrassInstanceListDef fwBatch = new rage__fwGrassInstanceListDef(); + rage__fwGrassInstanceListDef__InstanceData[] instances = new rage__fwGrassInstanceListDef__InstanceData[0]; + + if (copy != null) + { + fwBatch = copy.Batch; + instances = copy.Instances; + } + else + { + fwBatch.archetypeName = new MetaHash(JenkHash.GenHash("proc_grasses01")); + fwBatch.lodDist = 120; + fwBatch.LodFadeStartDist = 15; + fwBatch.LodInstFadeRange = 0.75f; + fwBatch.OrientToTerrain = 1.0f; + fwBatch.ScaleRange = new Vector3(0.3f, 0.2f, 0.7f); + } + + YmapGrassInstanceBatch batch = new YmapGrassInstanceBatch + { + AABBMin = fwBatch.BatchAABB.min.XYZ(), + AABBMax = fwBatch.BatchAABB.max.XYZ(), + Archetype = GameFileCache.GetArchetype(fwBatch.archetypeName), + Batch = fwBatch, + Instances = instances + }; + + batch.Position = (batch.AABBMin + batch.AABBMax) * 0.5f; + batch.Radius = (batch.AABBMax - batch.AABBMin).Length() * 0.5f; + batch.Ymap = CurrentYmapFile; + + if (WorldForm != null) + { + lock (WorldForm.RenderSyncRoot) //don't try to do this while rendering... + { + CurrentYmapFile.AddGrassBatch(batch); + } + } + else + { + CurrentYmapFile.AddGrassBatch(batch); + } + + LoadProjectTree(); + + ProjectExplorer?.TrySelectGrassBatchTreeNode(batch); + CurrentGrassBatch = batch; + ShowEditYmapGrassBatchPanel(false); + } + public void AddGrassBatchToProject() + { + if (CurrentGrassBatch == null) return; + + CurrentYmapFile = CurrentGrassBatch.Ymap; + if (!YmapExistsInProject(CurrentYmapFile)) + { + var grassBatch = CurrentGrassBatch; + CurrentYmapFile.HasChanged = true; + AddYmapToProject(CurrentYmapFile); + + CurrentGrassBatch = grassBatch; //bug fix for some reason the treeview selects the project node here. + CurrentYmapFile = grassBatch.Ymap; + ProjectExplorer?.TrySelectGrassBatchTreeNode(grassBatch); + } + } + public bool DeleteGrassBatch() + { + if (CurrentYmapFile == null) return false; + if (CurrentGrassBatch == null) return false; + if (CurrentGrassBatch.Ymap != CurrentYmapFile) return false; + if (CurrentYmapFile.GrassInstanceBatches == null) return false; //nothing to delete.. + + if (MessageBox.Show("Are you sure you want to delete this grass batch?\n" + CurrentGrassBatch.ToString() + "\n\nThis operation cannot be undone. Continue?", "Confirm delete", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return true; + } + + bool res = false; + if (WorldForm != null) + { + lock (WorldForm.RenderSyncRoot) //don't try to do this while rendering... + { + res = CurrentYmapFile.RemoveGrassBatch(CurrentGrassBatch); + //WorldForm.SelectItem(null, null, null); + } + } + else + { + res = CurrentYmapFile.RemoveGrassBatch(CurrentGrassBatch); + } + if (!res) + { + MessageBox.Show("Unable to delete the grass batch. This shouldn't happen!"); + } + + var delbatch = CurrentGrassBatch; + + ProjectExplorer?.RemoveGrassBatchTreeNode(CurrentGrassBatch); + ProjectExplorer?.SetYmapHasChanged(CurrentYmapFile, true); + + ClosePanel((EditYmapGrassPanel p) => { return p.Tag == delbatch; }); + + CurrentGrassBatch = null; + + return true; + } + public void PaintGrass(SpaceRayIntersectResult mouseRay, bool erase) + { + try + { + if (InvokeRequired) + { + Invoke(new Action(() => { PaintGrass(mouseRay, erase); })); + return; + } + + if (!mouseRay.Hit || !mouseRay.TestComplete) return; + if (CurrentGrassBatch == null || (!CurrentGrassBatch.BrushEnabled)) return; // brush isn't enabled right now + EditYmapGrassPanel panel = FindPanel(x => x.CurrentBatch == CurrentGrassBatch); + if (panel == null) return; // no panels with this batch + + // TODO: Maybe move these functions into the batch instead of the grass panel? + // although, the panel does have the brush settings. + if (!erase) + panel.CreateInstancesAtMouse(mouseRay); + else panel.EraseInstancesAtMouse(mouseRay); + } + catch { } + } + public bool GrassBatchExistsInProject(YmapGrassInstanceBatch batch) + { + if (CurrentProjectFile?.YmapFiles == null) return false; + if (CurrentProjectFile.YmapFiles.Count <= 0) return false; + foreach (var ymapFile in CurrentProjectFile.YmapFiles) + { + if (ymapFile.GrassInstanceBatches == null) continue; + foreach (var b in ymapFile.GrassInstanceBatches) + { + if (batch == b) + return true; + } + } + return false; + } + public void NewCarGen(YmapCarGen copy = null, bool copyPosition = false) { if (CurrentYmapFile == null) return; @@ -3820,9 +3972,11 @@ namespace CodeWalker.Project for (int i = 0; i < CurrentProjectFile.YmapFiles.Count; i++) { var ymap = CurrentProjectFile.YmapFiles[i]; + // make sure we're not hiding ymaps that have been added by the end-user. + var isnew = ymap.RpfFileEntry.ShortNameHash == 0; if (ymap.Loaded) { - ymaps[ymap._CMapData.name] = ymap; + ymaps[isnew ? JenkHash.GenHash(ymap.Name) : ymap.RpfFileEntry.ShortNameHash] = ymap; } } } @@ -4026,6 +4180,11 @@ namespace CodeWalker.Project { ProjectExplorer?.TrySelectCarGenTreeNode(cargen); } + if (grassbatch != CurrentGrassBatch) + { + ProjectExplorer?.TrySelectGrassBatchTreeNode(grassbatch); + } + } else if (YndExistsInProject(ynd)) { @@ -4699,7 +4858,19 @@ namespace CodeWalker.Project PromoteIfPreviewPanelActive(); } + public void SetGrassBatchHasChanged(bool changed) + { + if (CurrentGrassBatch == null) return; + bool changechange = changed != CurrentGrassBatch.HasChanged; + if (!changechange) return; + + CurrentGrassBatch.HasChanged = true; + + ProjectExplorer?.SetGrassBatchHasChanged(CurrentGrassBatch, changed); + + PromoteIfPreviewPanelActive(); + } @@ -4877,6 +5048,7 @@ namespace CodeWalker.Project YmapNewEntityMenu.Enabled = enable && inproj; YmapNewCarGenMenu.Enabled = enable && inproj; + YmapNewGrassBatchMenu.Enabled = enable && inproj; if (CurrentYmapFile != null) { @@ -5103,7 +5275,7 @@ namespace CodeWalker.Project FileSaveItemAsMenu.Text = "Save As..."; ToolbarSaveButton.Text = "Save"; } - + FileSaveItemMenu.Tag = filename; FileSaveItemAsMenu.Tag = filename; @@ -5312,6 +5484,10 @@ namespace CodeWalker.Project { NewCarGen(); } + private void YmapNewGrassBatchMenu_Click(object sender, EventArgs e) + { + NewGrassBatch(); + } private void YmapAddToProjectMenu_Click(object sender, EventArgs e) { AddYmapToProject(CurrentYmapFile); diff --git a/Rendering/RenderableCache.cs b/Rendering/RenderableCache.cs index 6add1c4..301e971 100644 --- a/Rendering/RenderableCache.cs +++ b/Rendering/RenderableCache.cs @@ -195,6 +195,14 @@ namespace CodeWalker.Rendering } } + public void Invalidate(YmapGrassInstanceBatch batch) + { + lock (updateSyncRoot) + { + instbatches.Invalidate(batch); + } + } + } diff --git a/Rendering/Renderer.cs b/Rendering/Renderer.cs index aa74391..3119b56 100644 --- a/Rendering/Renderer.cs +++ b/Rendering/Renderer.cs @@ -380,6 +380,11 @@ namespace CodeWalker.Rendering renderableCache.Invalidate(path); } + public void Invalidate(YmapGrassInstanceBatch batch) + { + renderableCache.Invalidate(batch); + } + public void UpdateSelectionDrawFlags(DrawableModel model, DrawableGeometry geom, bool rem) { diff --git a/Rendering/Shaders/BasicShader.cs b/Rendering/Shaders/BasicShader.cs index ae1ea37..e7b85e8 100644 --- a/Rendering/Shaders/BasicShader.cs +++ b/Rendering/Shaders/BasicShader.cs @@ -695,6 +695,10 @@ namespace CodeWalker.Rendering { var gb = batch.Key; + // sanity check + if (batch.GrassInstanceBuffer == null) + return; + VSEntityVars.Vars.CamRel = new Vector4(gb.CamRel, 0.0f); VSEntityVars.Vars.Orientation = Quaternion.Identity; VSEntityVars.Vars.Scale = Vector3.One; diff --git a/WorldForm.cs b/WorldForm.cs index c39cf6f..abb7125 100644 --- a/WorldForm.cs +++ b/WorldForm.cs @@ -75,6 +75,10 @@ namespace CodeWalker bool ControlFireToggle = false; + + int ControlBrushTimer = 0; + bool ControlBrushEnabled; + Entity camEntity = new Entity(); PedEntity pedEntity = new PedEntity(); @@ -98,7 +102,7 @@ namespace CodeWalker - + @@ -486,7 +490,7 @@ namespace CodeWalker } - if (ControlMode == WorldControlMode.Free) + if (ControlMode == WorldControlMode.Free || ControlBrushEnabled) { if (Input.ShiftPressed) { @@ -1824,6 +1828,14 @@ namespace CodeWalker } } + public void UpdateGrassBatchGraphics(YmapGrassInstanceBatch grassBatch) + { + lock (Renderer.RenderSyncRoot) + { + Renderer.Invalidate(grassBatch); + } + } + public Vector3 GetCameraPosition() { @@ -2049,8 +2061,8 @@ namespace CodeWalker if (mode == ControlMode) return; - bool wasfree = (ControlMode == WorldControlMode.Free); - bool isfree = (mode == WorldControlMode.Free); + bool wasfree = (ControlMode == WorldControlMode.Free || ControlBrushEnabled); + bool isfree = (mode == WorldControlMode.Free || ControlBrushEnabled); if (isfree && !wasfree) { @@ -2105,16 +2117,17 @@ namespace CodeWalker CurMouseHit.Clear(); - MouseRayCollisionEnabled = Input.CtrlPressed; //temporary...! - if (MouseRayCollisionEnabled) + //MouseRayCollisionEnabled = Input.CtrlPressed; //temporary...! + if (Input.CtrlPressed) { - if (space.Inited && space.Grid != null) - { - Ray mray = new Ray(); - mray.Position = camera.MouseRay.Position + camera.Position; - mray.Direction = camera.MouseRay.Direction; - MouseRayCollision = space.RayIntersect(mray); - } + ControlBrushEnabled = true; + MouseRayCollisionEnabled = true; + MouseRayCollision = GetSpaceMouseRay(); + } + else if (MouseRayCollisionEnabled) + { + ControlBrushEnabled = false; + MouseRayCollisionEnabled = false; } @@ -2127,6 +2140,24 @@ namespace CodeWalker } + public SpaceRayIntersectResult GetSpaceMouseRay() + { + SpaceRayIntersectResult ret = new SpaceRayIntersectResult(); + if (space.Inited && space.Grid != null) + { + Ray mray = new Ray(); + mray.Position = camera.MouseRay.Position + camera.Position; + mray.Direction = camera.MouseRay.Direction; + return space.RayIntersect(mray); + } + return ret; + } + + public SpaceRayIntersectResult Raycast(Ray ray) + { + return space.RayIntersect(ray); + } + private void UpdateMouseHitsFromRenderer() { foreach (var rd in Renderer.RenderedDrawables) @@ -4318,6 +4349,11 @@ namespace CodeWalker { camera.FollowEntity.Position = p; } + public void GoToPosition(Vector3 p, Vector3 bound) + { + camera.FollowEntity.Position = p; + camera.TargetDistance = bound.Length(); + } private MapMarker AddMarker(Vector3 pos, string name, bool addtotxtbox = false) { @@ -5898,7 +5934,7 @@ namespace CodeWalker MouseDownPoint = e.Location; MouseLastPoint = MouseDownPoint; - if (ControlMode == WorldControlMode.Free) + if (ControlMode == WorldControlMode.Free && !ControlBrushEnabled) { if (MouseLButtonDown) { @@ -5997,6 +6033,7 @@ namespace CodeWalker SelectedMarker = null; HideMarkerSelectionInfo(); } + ControlBrushTimer = 0; } } @@ -6011,47 +6048,11 @@ namespace CodeWalker dy = -dy; } - if (ControlMode == WorldControlMode.Free) + if (ControlMode == WorldControlMode.Free && !ControlBrushEnabled) { if (MouseLButtonDown) { - if (GrabbedMarker == null) - { - if (GrabbedWidget == null) - { - if (MapViewEnabled == false) - { - camera.MouseRotate(dx, dy); - } - else - { - //need to move the camera entity XY with mouse in mapview mode... - MapViewDragX += dx; - MapViewDragY += dy; - } - } - else - { - //grabbed widget will move itself in Update() when IsDragging==true - } - } - else - { - //move the grabbed marker... - //float uptx = (CurrentMap != null) ? CurrentMap.UnitsPerTexelX : 1.0f; - //float upty = (CurrentMap != null) ? CurrentMap.UnitsPerTexelY : 1.0f; - //Vector3 wpos = GrabbedMarker.WorldPos; - //wpos.X += dx * uptx; - //wpos.Y += dy * upty; - //GrabbedMarker.WorldPos = wpos; - //UpdateMarkerTexturePos(GrabbedMarker); - //if (GrabbedMarker == LocatorMarker) - //{ - // LocateTextBox.Text = LocatorMarker.ToString(); - // WorldCoordTextBox.Text = LocatorMarker.Get2DWorldPosString(); - // TextureCoordTextBox.Text = LocatorMarker.Get2DTexturePosString(); - //} - } + RotateCam(dx, dy); } if (MouseRButtonDown) { @@ -6075,11 +6076,31 @@ namespace CodeWalker } } - MouseX = e.X; - MouseY = e.Y; - MouseLastPoint = e.Location; + UpdateMousePosition(e); } + else if (ControlBrushEnabled) + { + if (MouseRButtonDown) + { + RotateCam(dx, dy); + } + + UpdateMousePosition(e); + + ControlBrushTimer++; + if (ControlBrushTimer > (Input.ShiftPressed ? 5 : 10)) + { + lock (Renderer.RenderSyncRoot) + { + if (ProjectForm != null && MouseLButtonDown) + { + ProjectForm.PaintGrass(MouseRayCollision, Input.ShiftPressed); + } + ControlBrushTimer = 0; + } + } + } else { lock (MouseControlSyncRoot) @@ -6120,11 +6141,59 @@ namespace CodeWalker } } + private void UpdateMousePosition(MouseEventArgs e) + { + MouseX = e.X; + MouseY = e.Y; + MouseLastPoint = e.Location; + } + + private void RotateCam(int dx, int dy) + { + if (GrabbedMarker == null) + { + if (GrabbedWidget == null) + { + if (MapViewEnabled == false) + { + camera.MouseRotate(dx, dy); + } + else + { + //need to move the camera entity XY with mouse in mapview mode... + MapViewDragX += dx; + MapViewDragY += dy; + } + } + else + { + //grabbed widget will move itself in Update() when IsDragging==true + } + } + else + { + //move the grabbed marker... + //float uptx = (CurrentMap != null) ? CurrentMap.UnitsPerTexelX : 1.0f; + //float upty = (CurrentMap != null) ? CurrentMap.UnitsPerTexelY : 1.0f; + //Vector3 wpos = GrabbedMarker.WorldPos; + //wpos.X += dx * uptx; + //wpos.Y += dy * upty; + //GrabbedMarker.WorldPos = wpos; + //UpdateMarkerTexturePos(GrabbedMarker); + //if (GrabbedMarker == LocatorMarker) + //{ + // LocateTextBox.Text = LocatorMarker.ToString(); + // WorldCoordTextBox.Text = LocatorMarker.Get2DWorldPosString(); + // TextureCoordTextBox.Text = LocatorMarker.Get2DTexturePosString(); + //} + } + } + private void WorldForm_MouseWheel(object sender, MouseEventArgs e) { if (e.Delta != 0) { - if (ControlMode == WorldControlMode.Free) + if (ControlMode == WorldControlMode.Free || ControlBrushEnabled) { camera.MouseZoom(e.Delta); } @@ -6254,7 +6323,7 @@ namespace CodeWalker } } - if (ControlMode != WorldControlMode.Free) + if (ControlMode != WorldControlMode.Free || ControlBrushEnabled) { e.Handled = true; } @@ -7555,7 +7624,6 @@ namespace CodeWalker } } - public enum WorldControlMode { Free = 0, From 6bce9acbcdec6b244224a45fda3bff69c29381b4 Mon Sep 17 00:00:00 2001 From: Soloman N Date: Sun, 10 Jun 2018 09:36:50 -0400 Subject: [PATCH 014/158] Some revisions to grass brush. - Made some changes to the way I check for deleting instances. - Added a new bounding box check for painting grass. - Made GetNewGrassBounds return a bounding box instead of our parameters - Added new Expand method to bounding box util - Added instance radius check and instance brush check to project form for possible future instance types (Props) - Added grass brush gizmo - Updated gui for grass instance batch panel - Fixed bug with GoToPosition (with bounds) --- .../GameFiles/FileTypes/YmapFile.cs | 125 ++--- CodeWalker.Core/Utils/BoundingBoxes.cs | 5 + Project/Panels/EditYmapGrassPanel.Designer.cs | 504 +++++++++--------- Project/Panels/EditYmapGrassPanel.cs | 33 +- Project/ProjectForm.cs | 19 + Rendering/Renderer.cs | 27 + WorldForm.cs | 12 +- 7 files changed, 385 insertions(+), 340 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs index 34fdb8c..839e411 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs @@ -1534,8 +1534,14 @@ namespace CodeWalker.GameFiles public float Distance; //used for rendering public YmapFile Ymap { get; set; } - public bool BrushEnabled; - public bool HasChanged; + private List grassBounds; // for brush + public bool BrushEnabled; // for brush + public float BrushRadius = 5f; // for brush + public bool HasChanged; // for brush and renderer + + // TODO: Make configurable. + const float BoundingSize = 0.3F; + static readonly Vector3 GrassMinMax = Vector3.One * BoundingSize; public override string ToString() { @@ -1551,16 +1557,36 @@ namespace CodeWalker.GameFiles Batch = b; } + public bool IsPointBlockedByInstance(Vector3 point) + { + return grassBounds.Any(bb => bb.Contains(point) == ContainmentType.Contains); + } + + private void ReInitializeBoundingCache() + { + // cache is already initialized correctly. + if (grassBounds != null && (grassBounds.Count == Instances.Length)) + return; + + // Clear the current bounding cache. + if (grassBounds == null) + grassBounds = new List(); + else grassBounds?.Clear(); + + foreach (var inst in Instances) + { + // create bounding box for this instance. + var worldPos = GetGrassWorldPos(inst.Position, new BoundingBox(AABBMin, AABBMax)); + var bb = new BoundingBox(worldPos - GrassMinMax, worldPos + GrassMinMax); + grassBounds.Add(bb); + } + } + public bool EraseInstancesAtMouse( YmapGrassInstanceBatch batch, SpaceRayIntersectResult mouseRay, float radius) { - // some inits - var instances = batch.Instances; - - var delInstances = new List(); - rage__spdAABB batchAABB = batch.Batch.BatchAABB; var oldInstanceBounds = new BoundingBox ( @@ -1572,49 +1598,34 @@ namespace CodeWalker.GameFiles // check each instance to see if it's in the delete sphere // thankfully we've just avoided an O(n^2) op using this bounds stuff (doesn't mean it's super fast though, // but it's not super slow either, even at like 50,000 instances) - foreach (var instance in instances) + var insList = new List(); + foreach (var instance in batch.Instances) { - var grassPos = new Vector3 - { - X = instance.Position.u0, - Y = instance.Position.u1, - Z = instance.Position.u2 - }; // get the world pos - var worldPos = oldInstanceBounds.Minimum + oldInstanceBounds.Size() * (grassPos * BatchVertMultiplier); + var worldPos = GetGrassWorldPos(instance.Position, oldInstanceBounds); // create a boundary around the instance. - var instanceBounds = new BoundingBox(worldPos - (Vector3.One * 1.5f), worldPos + (Vector3.One * 1.5f)); + var instanceBounds = new BoundingBox(worldPos - GrassMinMax, worldPos + GrassMinMax); // check if the sphere contains the boundary. var bb = new BoundingBox(instanceBounds.Minimum, instanceBounds.Maximum); var ct = deleteSphere.Contains(ref bb); if (ct == ContainmentType.Contains || ct == ContainmentType.Intersects) { - delInstances.Add(instance); // Add a copy of this instance + //delInstances.Add(instance); // Add a copy of this instance + continue; } + insList.Add(instance); } - if (delInstances.Count <= 0) + if (insList.Count == Instances.Length) return false; - // now we need to recalculate the bounds. - var insList = instances.ToList(); - foreach (var inst in delInstances) - { - if (insList.Contains(inst)) - { - insList.Remove(inst); - } - } - GetNewGrassBounds(insList, oldInstanceBounds, out var min, out var max); - var newBounds = new BoundingBox(min, max); - + var newBounds = GetNewGrassBounds(insList, oldInstanceBounds); // recalc instances var b = RecalcBatch(newBounds, batch); batch.Batch = b; insList = RecalculateInstances(insList, oldInstanceBounds, newBounds); batch.Instances = insList.ToArray(); - return true; } @@ -1630,6 +1641,8 @@ namespace CodeWalker.GameFiles Vector3 pad, bool randomScale) { + + ReInitializeBoundingCache(); var spawnPosition = mouseRay.Position; var positions = new List(); var normals = new List(); @@ -1647,10 +1660,11 @@ namespace CodeWalker.GameFiles // grass instances var oldInstanceBounds = new BoundingBox(batchAABB.min.XYZ(), batchAABB.max.XYZ()); + if (positions.Count <= 0) + return; + // Begin the spawn bounds. - var grassBound = positions.Count <= 0 - ? new BoundingBox(Vector3.Zero, Vector3.Zero) - : new BoundingBox(positions[0] - (Vector3.One * 1.5f), positions[0] + (Vector3.One * 1.5f)); + var grassBound = new BoundingBox(positions[0] - GrassMinMax, positions[0] + GrassMinMax); grassBound = EncapsulatePositions(positions, grassBound); // Calculate the new spawn bounds. @@ -1674,6 +1688,7 @@ namespace CodeWalker.GameFiles // Give back the new intsances batch.Instances = instances.ToArray(); + grassBounds.Clear(); } // bhv approach recommended by dexy. @@ -1688,7 +1703,7 @@ namespace CodeWalker.GameFiles if (oldInstanceBounds.Radius() < minRadius) { - return null; + return new [] { batch }; } // Get our optimized grassInstances @@ -1707,8 +1722,7 @@ namespace CodeWalker.GameFiles }; // Get the boundary of the grassInstances - GetNewGrassBounds(grassList, oldInstanceBounds, out var min, out var max); - var newInstanceBounds = new BoundingBox(min, max); + var newInstanceBounds = GetNewGrassBounds(grassList, oldInstanceBounds); // Recalculate the batch boundaries. var b = RecalcBatch(newInstanceBounds, newBatch); @@ -1741,8 +1755,7 @@ namespace CodeWalker.GameFiles continue; // Get the bounds of the grassInstances list - GetNewGrassBounds(mb, batchAABB, out var min, out var max); - var radius = (max - min).Length() * 0.5F; // get the radius + var radius = GetNewGrassBounds(mb, batchAABB).Radius(); // check if the radius of the grassInstances if (radius <= minRadius) @@ -1780,8 +1793,7 @@ namespace CodeWalker.GameFiles var pointGroup = new List[2]; // Calculate the bounds of these grassInstances. - GetNewGrassBounds(points, batchAABB, out var min, out var max); - var m = new BoundingBox(min, max); + var m = GetNewGrassBounds(points, batchAABB); // Get the center and size var mm = new Vector3 @@ -1833,25 +1845,10 @@ namespace CodeWalker.GameFiles return pointGroup; } - private static void GetNewGrassBounds(IReadOnlyList newGrass, BoundingBox oldAABB, - out Vector3 min, out Vector3 max) + private static BoundingBox GetNewGrassBounds(IReadOnlyList newGrass, BoundingBox oldAABB) { - if (newGrass.Count <= 0) - { - min = Vector3.Zero; - max = Vector3.Zero; - return; - } - var grassWorldPos = GetGrassWorldPos(newGrass[0].Position, oldAABB); - var bounds = new BoundingBox(grassWorldPos - (Vector3.One * 1.5f), grassWorldPos + (Vector3.One * 1.5f)); - foreach (var point in newGrass) - { - var worldPos = GetGrassWorldPos(point.Position, oldAABB); - var tempBounds = new BoundingBox(worldPos - (Vector3.One * 1.5f), worldPos + (Vector3.One * 1.5f)); - bounds = bounds.Encapsulate(tempBounds); - } - min = bounds.Minimum; - max = bounds.Maximum; + var grassPositions = newGrass.Select(x => GetGrassWorldPos(x.Position, oldAABB)).ToArray(); + return BoundingBox.FromPoints(grassPositions).Expand(1f); } private void SpawnInstances( @@ -1929,9 +1926,17 @@ namespace CodeWalker.GameFiles { var randX = (float)rand.NextDouble(-radius, radius); var randY = (float)rand.NextDouble(-radius, radius); + if (Math.Abs(randX) > 0 && Math.Abs(randY) > 0) + { + randX *= .7071f; + randY *= .7071f; + } var posOffset = origin + new Vector3(randX, randY, 2f); var spaceRay = spawnRayFunc.Invoke(posOffset); if (!spaceRay.Hit) continue; + // not truly O(n^2) but may be slow... + // actually just did some testing, not slow at all. + if (IsPointBlockedByInstance(spaceRay.Position)) continue; normals.Add(spaceRay.Normal); positions.Add(spaceRay.Position); } @@ -1972,7 +1977,7 @@ namespace CodeWalker.GameFiles { foreach (var pos in positions) { - var posBounds = new BoundingBox(pos - (Vector3.One * 1.5f), pos + (Vector3.One * 1.5f)); + var posBounds = new BoundingBox(pos - (GrassMinMax + 0.1f), pos + (GrassMinMax + 0.1f)); bounds = bounds.Encapsulate(posBounds); } return bounds; diff --git a/CodeWalker.Core/Utils/BoundingBoxes.cs b/CodeWalker.Core/Utils/BoundingBoxes.cs index 2486ca6..d602c8f 100644 --- a/CodeWalker.Core/Utils/BoundingBoxes.cs +++ b/CodeWalker.Core/Utils/BoundingBoxes.cs @@ -30,5 +30,10 @@ namespace CodeWalker.Core.Utils var extents = (box.Maximum - box.Minimum) * 0.5F; return extents.Length(); } + + public static BoundingBox Expand(this BoundingBox b, float amount) + { + return new BoundingBox(b.Minimum - Vector3.One * amount, b.Maximum + Vector3.One * amount); + } } } diff --git a/Project/Panels/EditYmapGrassPanel.Designer.cs b/Project/Panels/EditYmapGrassPanel.Designer.cs index f4d8076..c281c66 100644 --- a/Project/Panels/EditYmapGrassPanel.Designer.cs +++ b/Project/Panels/EditYmapGrassPanel.Designer.cs @@ -32,16 +32,6 @@ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditYmapGrassPanel)); this.tabControl1 = new System.Windows.Forms.TabControl(); this.GrassBatchTab = new System.Windows.Forms.TabPage(); - this.label17 = new System.Windows.Forms.Label(); - this.OptmizationThresholdNumericUpDown = new System.Windows.Forms.NumericUpDown(); - this.textBox5 = new System.Windows.Forms.TextBox(); - this.OptimizeBatchButton = new System.Windows.Forms.Button(); - this.label14 = new System.Windows.Forms.Label(); - this.textBox4 = new System.Windows.Forms.TextBox(); - this.label13 = new System.Windows.Forms.Label(); - this.HashLabel = new System.Windows.Forms.Label(); - this.ArchetypeNameTextBox = new System.Windows.Forms.TextBox(); - this.label7 = new System.Windows.Forms.Label(); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.label12 = new System.Windows.Forms.Label(); this.label11 = new System.Windows.Forms.Label(); @@ -53,14 +43,7 @@ this.LodFadeStartDistanceNumericUpDown = new System.Windows.Forms.NumericUpDown(); this.label6 = new System.Windows.Forms.Label(); this.LodDistNumericUpDown = new System.Windows.Forms.NumericUpDown(); - this.PositionTextBox = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.GrassGoToButton = new System.Windows.Forms.Button(); - this.GrassDeleteButton = new System.Windows.Forms.Button(); - this.GrassAddToProjectButton = new System.Windows.Forms.Button(); this.BrushTab = new System.Windows.Forms.TabPage(); - this.label16 = new System.Windows.Forms.Label(); - this.label8 = new System.Windows.Forms.Label(); this.groupBox2 = new System.Windows.Forms.GroupBox(); this.GrassColorLabel = new System.Windows.Forms.Label(); this.label15 = new System.Windows.Forms.Label(); @@ -71,17 +54,31 @@ this.label2 = new System.Windows.Forms.Label(); this.label3 = new System.Windows.Forms.Label(); this.RandomizeScaleCheckBox = new System.Windows.Forms.CheckBox(); - this.BrushModeCheckBox = new System.Windows.Forms.CheckBox(); this.brushSettingsGroupBox = new System.Windows.Forms.GroupBox(); this.DensityNumericUpDown = new System.Windows.Forms.NumericUpDown(); this.RadiusNumericUpDown = new System.Windows.Forms.NumericUpDown(); this.label5 = new System.Windows.Forms.Label(); this.radiusLabel = new System.Windows.Forms.Label(); - this.label18 = new System.Windows.Forms.Label(); this.OptimizeBatchButtonTooltip = new System.Windows.Forms.ToolTip(this.components); + this.OptimizeBatchButton = new System.Windows.Forms.Button(); + this.ExtentsMinTextBox = new System.Windows.Forms.TextBox(); + this.label14 = new System.Windows.Forms.Label(); + this.ExtentsMaxTextBox = new System.Windows.Forms.TextBox(); + this.label13 = new System.Windows.Forms.Label(); + this.GrassDeleteButton = new System.Windows.Forms.Button(); + this.GrassAddToProjectButton = new System.Windows.Forms.Button(); + this.HashLabel = new System.Windows.Forms.Label(); + this.ArchetypeNameTextBox = new System.Windows.Forms.TextBox(); + this.label7 = new System.Windows.Forms.Label(); + this.PositionTextBox = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.GrassGoToButton = new System.Windows.Forms.Button(); + this.label17 = new System.Windows.Forms.Label(); + this.OptmizationThresholdNumericUpDown = new System.Windows.Forms.NumericUpDown(); + this.BrushModeCheckBox = new System.Windows.Forms.CheckBox(); + this.label8 = new System.Windows.Forms.Label(); this.tabControl1.SuspendLayout(); this.GrassBatchTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.OptmizationThresholdNumericUpDown)).BeginInit(); this.groupBox1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.OrientToTerrainNumericUpDown)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.LodFadeRangeNumericUpDown)).BeginInit(); @@ -94,146 +91,30 @@ this.brushSettingsGroupBox.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.DensityNumericUpDown)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.RadiusNumericUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.OptmizationThresholdNumericUpDown)).BeginInit(); this.SuspendLayout(); // // tabControl1 // this.tabControl1.Controls.Add(this.GrassBatchTab); this.tabControl1.Controls.Add(this.BrushTab); - this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tabControl1.Location = new System.Drawing.Point(0, 0); + this.tabControl1.Location = new System.Drawing.Point(12, 65); this.tabControl1.Name = "tabControl1"; this.tabControl1.SelectedIndex = 0; - this.tabControl1.Size = new System.Drawing.Size(554, 355); + this.tabControl1.Size = new System.Drawing.Size(486, 181); this.tabControl1.TabIndex = 37; // // GrassBatchTab // - this.GrassBatchTab.Controls.Add(this.label18); - this.GrassBatchTab.Controls.Add(this.label17); - this.GrassBatchTab.Controls.Add(this.OptmizationThresholdNumericUpDown); - this.GrassBatchTab.Controls.Add(this.textBox5); - this.GrassBatchTab.Controls.Add(this.OptimizeBatchButton); - this.GrassBatchTab.Controls.Add(this.label14); - this.GrassBatchTab.Controls.Add(this.textBox4); - this.GrassBatchTab.Controls.Add(this.label13); - this.GrassBatchTab.Controls.Add(this.HashLabel); - this.GrassBatchTab.Controls.Add(this.ArchetypeNameTextBox); - this.GrassBatchTab.Controls.Add(this.label7); this.GrassBatchTab.Controls.Add(this.groupBox1); - this.GrassBatchTab.Controls.Add(this.PositionTextBox); - this.GrassBatchTab.Controls.Add(this.label1); - this.GrassBatchTab.Controls.Add(this.GrassGoToButton); - this.GrassBatchTab.Controls.Add(this.GrassDeleteButton); - this.GrassBatchTab.Controls.Add(this.GrassAddToProjectButton); this.GrassBatchTab.Location = new System.Drawing.Point(4, 22); this.GrassBatchTab.Name = "GrassBatchTab"; this.GrassBatchTab.Padding = new System.Windows.Forms.Padding(3); - this.GrassBatchTab.Size = new System.Drawing.Size(546, 329); + this.GrassBatchTab.Size = new System.Drawing.Size(478, 155); this.GrassBatchTab.TabIndex = 0; this.GrassBatchTab.Text = "Grass Batch"; this.GrassBatchTab.UseVisualStyleBackColor = true; // - // label17 - // - this.label17.AutoSize = true; - this.label17.Location = new System.Drawing.Point(400, 241); - this.label17.Name = "label17"; - this.label17.Size = new System.Drawing.Size(54, 13); - this.label17.TabIndex = 51; - this.label17.Text = "Threshold"; - // - // OptmizationThresholdNumericUpDown - // - this.OptmizationThresholdNumericUpDown.Location = new System.Drawing.Point(460, 236); - this.OptmizationThresholdNumericUpDown.Maximum = new decimal(new int[] { - 999999, - 0, - 0, - 0}); - this.OptmizationThresholdNumericUpDown.Name = "OptmizationThresholdNumericUpDown"; - this.OptmizationThresholdNumericUpDown.Size = new System.Drawing.Size(66, 20); - this.OptmizationThresholdNumericUpDown.TabIndex = 50; - this.OptmizationThresholdNumericUpDown.Value = new decimal(new int[] { - 5, - 0, - 0, - 0}); - // - // textBox5 - // - this.textBox5.Location = new System.Drawing.Point(93, 237); - this.textBox5.Name = "textBox5"; - this.textBox5.ReadOnly = true; - this.textBox5.Size = new System.Drawing.Size(282, 20); - this.textBox5.TabIndex = 49; - this.textBox5.Text = "TODO!"; - // - // OptimizeBatchButton - // - this.OptimizeBatchButton.Location = new System.Drawing.Point(403, 207); - this.OptimizeBatchButton.Name = "OptimizeBatchButton"; - this.OptimizeBatchButton.Size = new System.Drawing.Size(123, 24); - this.OptimizeBatchButton.TabIndex = 50; - this.OptimizeBatchButton.Text = "Optimize Batch"; - this.OptimizeBatchButtonTooltip.SetToolTip(this.OptimizeBatchButton, "Will split your batch into multiple different batches based on the threshold. If " + - "your threshold is 5.0 then each batch will have a size of 5.0 meters."); - this.OptimizeBatchButton.UseVisualStyleBackColor = true; - this.OptimizeBatchButton.Click += new System.EventHandler(this.OptimizeBatchButton_Click); - // - // label14 - // - this.label14.AutoSize = true; - this.label14.Location = new System.Drawing.Point(22, 240); - this.label14.Name = "label14"; - this.label14.Size = new System.Drawing.Size(68, 13); - this.label14.TabIndex = 48; - this.label14.Text = "Extents Max:"; - // - // textBox4 - // - this.textBox4.Location = new System.Drawing.Point(93, 210); - this.textBox4.Name = "textBox4"; - this.textBox4.ReadOnly = true; - this.textBox4.Size = new System.Drawing.Size(282, 20); - this.textBox4.TabIndex = 47; - this.textBox4.Text = "TODO!"; - // - // label13 - // - this.label13.AutoSize = true; - this.label13.Location = new System.Drawing.Point(22, 213); - this.label13.Name = "label13"; - this.label13.Size = new System.Drawing.Size(65, 13); - this.label13.TabIndex = 46; - this.label13.Text = "Extents Min:"; - // - // HashLabel - // - this.HashLabel.AutoSize = true; - this.HashLabel.Location = new System.Drawing.Point(211, 16); - this.HashLabel.Name = "HashLabel"; - this.HashLabel.Size = new System.Drawing.Size(35, 13); - this.HashLabel.TabIndex = 45; - this.HashLabel.Text = "Hash:"; - // - // ArchetypeNameTextBox - // - this.ArchetypeNameTextBox.Location = new System.Drawing.Point(61, 13); - this.ArchetypeNameTextBox.Name = "ArchetypeNameTextBox"; - this.ArchetypeNameTextBox.Size = new System.Drawing.Size(144, 20); - this.ArchetypeNameTextBox.TabIndex = 44; - this.ArchetypeNameTextBox.TextChanged += new System.EventHandler(this.ArchetypeNameTextBox_TextChanged); - // - // label7 - // - this.label7.AutoSize = true; - this.label7.Location = new System.Drawing.Point(11, 16); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(35, 13); - this.label7.TabIndex = 43; - this.label7.Text = "Name"; - // // groupBox1 // this.groupBox1.Controls.Add(this.label12); @@ -247,9 +128,9 @@ this.groupBox1.Controls.Add(this.label6); this.groupBox1.Controls.Add(this.LodDistNumericUpDown); this.groupBox1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.groupBox1.Location = new System.Drawing.Point(14, 67); + this.groupBox1.Location = new System.Drawing.Point(12, 6); this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(384, 132); + this.groupBox1.Size = new System.Drawing.Size(460, 143); this.groupBox1.TabIndex = 42; this.groupBox1.TabStop = false; this.groupBox1.Text = "Batch"; @@ -290,7 +171,7 @@ // this.ScaleRangeTextBox.Location = new System.Drawing.Point(270, 21); this.ScaleRangeTextBox.Name = "ScaleRangeTextBox"; - this.ScaleRangeTextBox.Size = new System.Drawing.Size(104, 20); + this.ScaleRangeTextBox.Size = new System.Drawing.Size(166, 20); this.ScaleRangeTextBox.TabIndex = 46; this.ScaleRangeTextBox.TextChanged += new System.EventHandler(this.ScaleRangeTextBox_TextChanged); // @@ -367,86 +248,18 @@ this.LodDistNumericUpDown.TabIndex = 0; this.LodDistNumericUpDown.ValueChanged += new System.EventHandler(this.LodDistNumericUpDown_ValueChanged); // - // PositionTextBox - // - this.PositionTextBox.Location = new System.Drawing.Point(61, 40); - this.PositionTextBox.Name = "PositionTextBox"; - this.PositionTextBox.ReadOnly = true; - this.PositionTextBox.Size = new System.Drawing.Size(185, 20); - this.PositionTextBox.TabIndex = 41; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(11, 43); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(44, 13); - this.label1.TabIndex = 40; - this.label1.Text = "Position"; - // - // GrassGoToButton - // - this.GrassGoToButton.Location = new System.Drawing.Point(252, 38); - this.GrassGoToButton.Name = "GrassGoToButton"; - this.GrassGoToButton.Size = new System.Drawing.Size(56, 23); - this.GrassGoToButton.TabIndex = 39; - this.GrassGoToButton.Text = "Go To"; - this.GrassGoToButton.UseVisualStyleBackColor = true; - this.GrassGoToButton.Click += new System.EventHandler(this.GrassGoToButton_Click); - // - // GrassDeleteButton - // - this.GrassDeleteButton.Location = new System.Drawing.Point(278, 298); - this.GrassDeleteButton.Name = "GrassDeleteButton"; - this.GrassDeleteButton.Size = new System.Drawing.Size(95, 23); - this.GrassDeleteButton.TabIndex = 38; - this.GrassDeleteButton.Text = "Delete Batch"; - this.GrassDeleteButton.UseVisualStyleBackColor = true; - this.GrassDeleteButton.Click += new System.EventHandler(this.GrassDeleteButton_Click); - // - // GrassAddToProjectButton - // - this.GrassAddToProjectButton.Location = new System.Drawing.Point(180, 298); - this.GrassAddToProjectButton.Name = "GrassAddToProjectButton"; - this.GrassAddToProjectButton.Size = new System.Drawing.Size(95, 23); - this.GrassAddToProjectButton.TabIndex = 37; - this.GrassAddToProjectButton.Text = "Add to Project"; - this.GrassAddToProjectButton.UseVisualStyleBackColor = true; - this.GrassAddToProjectButton.Click += new System.EventHandler(this.GrassAddToProjectButton_Click); - // // BrushTab // - this.BrushTab.Controls.Add(this.label16); - this.BrushTab.Controls.Add(this.label8); this.BrushTab.Controls.Add(this.groupBox2); - this.BrushTab.Controls.Add(this.BrushModeCheckBox); this.BrushTab.Controls.Add(this.brushSettingsGroupBox); this.BrushTab.Location = new System.Drawing.Point(4, 22); this.BrushTab.Name = "BrushTab"; this.BrushTab.Padding = new System.Windows.Forms.Padding(3); - this.BrushTab.Size = new System.Drawing.Size(546, 329); + this.BrushTab.Size = new System.Drawing.Size(478, 155); this.BrushTab.TabIndex = 1; this.BrushTab.Text = " Brush"; this.BrushTab.UseVisualStyleBackColor = true; // - // label16 - // - this.label16.AutoSize = true; - this.label16.Location = new System.Drawing.Point(9, 224); - this.label16.Name = "label16"; - this.label16.Size = new System.Drawing.Size(114, 13); - this.label16.TabIndex = 40; - this.label16.Text = "SHIFT + CTRL - Erase"; - // - // label8 - // - this.label8.AutoSize = true; - this.label8.Location = new System.Drawing.Point(9, 202); - this.label8.Name = "label8"; - this.label8.Size = new System.Drawing.Size(68, 13); - this.label8.TabIndex = 21; - this.label8.Text = "CTRL - Paint"; - // // groupBox2 // this.groupBox2.Controls.Add(this.GrassColorLabel); @@ -459,9 +272,9 @@ this.groupBox2.Controls.Add(this.label3); this.groupBox2.Controls.Add(this.RandomizeScaleCheckBox); this.groupBox2.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.groupBox2.Location = new System.Drawing.Point(259, 3); + this.groupBox2.Location = new System.Drawing.Point(191, 3); this.groupBox2.Name = "groupBox2"; - this.groupBox2.Size = new System.Drawing.Size(279, 153); + this.groupBox2.Size = new System.Drawing.Size(281, 146); this.groupBox2.TabIndex = 39; this.groupBox2.TabStop = false; this.groupBox2.Text = "Instance Settings"; @@ -559,22 +372,11 @@ this.RandomizeScaleCheckBox.AutoSize = true; this.RandomizeScaleCheckBox.Location = new System.Drawing.Point(176, 79); this.RandomizeScaleCheckBox.Name = "RandomizeScaleCheckBox"; - this.RandomizeScaleCheckBox.Size = new System.Drawing.Size(79, 17); + this.RandomizeScaleCheckBox.Size = new System.Drawing.Size(66, 17); this.RandomizeScaleCheckBox.TabIndex = 18; - this.RandomizeScaleCheckBox.Text = "Randomize"; + this.RandomizeScaleCheckBox.Text = "Random"; this.RandomizeScaleCheckBox.UseVisualStyleBackColor = true; // - // BrushModeCheckBox - // - this.BrushModeCheckBox.AutoSize = true; - this.BrushModeCheckBox.Location = new System.Drawing.Point(8, 174); - this.BrushModeCheckBox.Name = "BrushModeCheckBox"; - this.BrushModeCheckBox.Size = new System.Drawing.Size(83, 17); - this.BrushModeCheckBox.TabIndex = 39; - this.BrushModeCheckBox.Text = "Brush Mode"; - this.BrushModeCheckBox.UseVisualStyleBackColor = true; - this.BrushModeCheckBox.CheckedChanged += new System.EventHandler(this.BrushModeCheckBox_CheckedChanged); - // // brushSettingsGroupBox // this.brushSettingsGroupBox.Controls.Add(this.DensityNumericUpDown); @@ -584,21 +386,21 @@ this.brushSettingsGroupBox.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.brushSettingsGroupBox.Location = new System.Drawing.Point(8, 3); this.brushSettingsGroupBox.Name = "brushSettingsGroupBox"; - this.brushSettingsGroupBox.Size = new System.Drawing.Size(245, 153); + this.brushSettingsGroupBox.Size = new System.Drawing.Size(177, 146); this.brushSettingsGroupBox.TabIndex = 38; this.brushSettingsGroupBox.TabStop = false; this.brushSettingsGroupBox.Text = "Brush Settings"; // // DensityNumericUpDown // - this.DensityNumericUpDown.Location = new System.Drawing.Point(109, 57); + this.DensityNumericUpDown.Location = new System.Drawing.Point(76, 57); this.DensityNumericUpDown.Maximum = new decimal(new int[] { 128, 0, 0, 0}); this.DensityNumericUpDown.Name = "DensityNumericUpDown"; - this.DensityNumericUpDown.Size = new System.Drawing.Size(120, 20); + this.DensityNumericUpDown.Size = new System.Drawing.Size(84, 20); this.DensityNumericUpDown.TabIndex = 20; this.DensityNumericUpDown.Value = new decimal(new int[] { 28, @@ -614,15 +416,16 @@ 0, 0, 131072}); - this.RadiusNumericUpDown.Location = new System.Drawing.Point(109, 31); + this.RadiusNumericUpDown.Location = new System.Drawing.Point(76, 31); this.RadiusNumericUpDown.Name = "RadiusNumericUpDown"; - this.RadiusNumericUpDown.Size = new System.Drawing.Size(120, 20); + this.RadiusNumericUpDown.Size = new System.Drawing.Size(84, 20); this.RadiusNumericUpDown.TabIndex = 11; this.RadiusNumericUpDown.Value = new decimal(new int[] { 5, 0, 0, 0}); + this.RadiusNumericUpDown.ValueChanged += new System.EventHandler(this.RadiusNumericUpDown_ValueChanged); // // label5 // @@ -642,27 +445,209 @@ this.radiusLabel.TabIndex = 10; this.radiusLabel.Text = "Radius"; // - // label18 + // OptimizeBatchButton // - this.label18.Location = new System.Drawing.Point(400, 259); - this.label18.Name = "label18"; - this.label18.Size = new System.Drawing.Size(126, 53); - this.label18.TabIndex = 52; - this.label18.Text = "* The higher the threshold, the larger each batch will be when they are split."; + this.OptimizeBatchButton.Location = new System.Drawing.Point(16, 280); + this.OptimizeBatchButton.Name = "OptimizeBatchButton"; + this.OptimizeBatchButton.Size = new System.Drawing.Size(108, 24); + this.OptimizeBatchButton.TabIndex = 70; + this.OptimizeBatchButton.Text = "Optimize Batch"; + this.OptimizeBatchButtonTooltip.SetToolTip(this.OptimizeBatchButton, "Will split your batch into multiple different batches based on the threshold. If " + + "your threshold is 5.0 then each batch will have a size of 5.0 meters."); + this.OptimizeBatchButton.UseVisualStyleBackColor = true; + this.OptimizeBatchButton.Click += new System.EventHandler(this.OptimizeBatchButton_Click); + // + // ExtentsMinTextBox + // + this.ExtentsMinTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ExtentsMinTextBox.Location = new System.Drawing.Point(84, 319); + this.ExtentsMinTextBox.Name = "ExtentsMinTextBox"; + this.ExtentsMinTextBox.ReadOnly = true; + this.ExtentsMinTextBox.Size = new System.Drawing.Size(380, 20); + this.ExtentsMinTextBox.TabIndex = 55; + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(13, 349); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(68, 13); + this.label14.TabIndex = 54; + this.label14.Text = "Extents Max:"; + // + // ExtentsMaxTextBox + // + this.ExtentsMaxTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ExtentsMaxTextBox.Location = new System.Drawing.Point(84, 345); + this.ExtentsMaxTextBox.Name = "ExtentsMaxTextBox"; + this.ExtentsMaxTextBox.ReadOnly = true; + this.ExtentsMaxTextBox.Size = new System.Drawing.Size(380, 20); + this.ExtentsMaxTextBox.TabIndex = 53; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(13, 322); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(65, 13); + this.label13.TabIndex = 52; + this.label13.Text = "Extents Min:"; + // + // GrassDeleteButton + // + this.GrassDeleteButton.Anchor = System.Windows.Forms.AnchorStyles.Bottom; + this.GrassDeleteButton.Location = new System.Drawing.Point(257, 397); + this.GrassDeleteButton.Name = "GrassDeleteButton"; + this.GrassDeleteButton.Size = new System.Drawing.Size(95, 23); + this.GrassDeleteButton.TabIndex = 51; + this.GrassDeleteButton.Text = "Delete Batch"; + this.GrassDeleteButton.UseVisualStyleBackColor = true; + this.GrassDeleteButton.Click += new System.EventHandler(this.GrassDeleteButton_Click); + // + // GrassAddToProjectButton + // + this.GrassAddToProjectButton.Anchor = System.Windows.Forms.AnchorStyles.Bottom; + this.GrassAddToProjectButton.Location = new System.Drawing.Point(159, 397); + this.GrassAddToProjectButton.Name = "GrassAddToProjectButton"; + this.GrassAddToProjectButton.Size = new System.Drawing.Size(95, 23); + this.GrassAddToProjectButton.TabIndex = 50; + this.GrassAddToProjectButton.Text = "Add to Project"; + this.GrassAddToProjectButton.UseVisualStyleBackColor = true; + this.GrassAddToProjectButton.Click += new System.EventHandler(this.GrassAddToProjectButton_Click); + // + // HashLabel + // + this.HashLabel.AutoSize = true; + this.HashLabel.Location = new System.Drawing.Point(254, 14); + this.HashLabel.Name = "HashLabel"; + this.HashLabel.Size = new System.Drawing.Size(44, 13); + this.HashLabel.TabIndex = 61; + this.HashLabel.Text = "Hash: 0"; + // + // ArchetypeNameTextBox + // + this.ArchetypeNameTextBox.Location = new System.Drawing.Point(66, 12); + this.ArchetypeNameTextBox.Name = "ArchetypeNameTextBox"; + this.ArchetypeNameTextBox.Size = new System.Drawing.Size(144, 20); + this.ArchetypeNameTextBox.TabIndex = 60; + this.ArchetypeNameTextBox.TextChanged += new System.EventHandler(this.ArchetypeNameTextBox_TextChanged); + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(16, 15); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(35, 13); + this.label7.TabIndex = 59; + this.label7.Text = "Name"; + // + // PositionTextBox + // + this.PositionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.PositionTextBox.Location = new System.Drawing.Point(66, 39); + this.PositionTextBox.Name = "PositionTextBox"; + this.PositionTextBox.ReadOnly = true; + this.PositionTextBox.Size = new System.Drawing.Size(275, 20); + this.PositionTextBox.TabIndex = 58; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(16, 42); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(44, 13); + this.label1.TabIndex = 57; + this.label1.Text = "Position"; + // + // GrassGoToButton + // + this.GrassGoToButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.GrassGoToButton.Location = new System.Drawing.Point(347, 36); + this.GrassGoToButton.Name = "GrassGoToButton"; + this.GrassGoToButton.Size = new System.Drawing.Size(56, 23); + this.GrassGoToButton.TabIndex = 56; + this.GrassGoToButton.Text = "Go To"; + this.GrassGoToButton.UseVisualStyleBackColor = true; + this.GrassGoToButton.Click += new System.EventHandler(this.GrassGoToButton_Click); + // + // label17 + // + this.label17.AutoSize = true; + this.label17.Location = new System.Drawing.Point(130, 286); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(54, 13); + this.label17.TabIndex = 71; + this.label17.Text = "Threshold"; + // + // OptmizationThresholdNumericUpDown + // + this.OptmizationThresholdNumericUpDown.Location = new System.Drawing.Point(190, 284); + this.OptmizationThresholdNumericUpDown.Maximum = new decimal(new int[] { + 999999, + 0, + 0, + 0}); + this.OptmizationThresholdNumericUpDown.Name = "OptmizationThresholdNumericUpDown"; + this.OptmizationThresholdNumericUpDown.Size = new System.Drawing.Size(51, 20); + this.OptmizationThresholdNumericUpDown.TabIndex = 69; + this.OptmizationThresholdNumericUpDown.Value = new decimal(new int[] { + 5, + 0, + 0, + 0}); + // + // BrushModeCheckBox + // + this.BrushModeCheckBox.AutoSize = true; + this.BrushModeCheckBox.Location = new System.Drawing.Point(16, 252); + this.BrushModeCheckBox.Name = "BrushModeCheckBox"; + this.BrushModeCheckBox.Size = new System.Drawing.Size(83, 17); + this.BrushModeCheckBox.TabIndex = 68; + this.BrushModeCheckBox.Text = "Brush Mode"; + this.BrushModeCheckBox.UseVisualStyleBackColor = true; + this.BrushModeCheckBox.CheckedChanged += new System.EventHandler(this.BrushModeCheckBox_CheckedChanged); + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(211, 14); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(24, 13); + this.label8.TabIndex = 72; + this.label8.Text = ".ydr"; + this.label8.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; // // EditYmapGrassPanel // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(554, 355); + this.ClientSize = new System.Drawing.Size(510, 443); + this.Controls.Add(this.label8); + this.Controls.Add(this.label17); + this.Controls.Add(this.OptmizationThresholdNumericUpDown); + this.Controls.Add(this.OptimizeBatchButton); + this.Controls.Add(this.BrushModeCheckBox); + this.Controls.Add(this.HashLabel); + this.Controls.Add(this.ExtentsMinTextBox); + this.Controls.Add(this.ArchetypeNameTextBox); + this.Controls.Add(this.ExtentsMaxTextBox); + this.Controls.Add(this.label7); + this.Controls.Add(this.PositionTextBox); + this.Controls.Add(this.label1); + this.Controls.Add(this.GrassGoToButton); + this.Controls.Add(this.label14); + this.Controls.Add(this.label13); + this.Controls.Add(this.GrassDeleteButton); this.Controls.Add(this.tabControl1); + this.Controls.Add(this.GrassAddToProjectButton); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Name = "EditYmapGrassPanel"; this.Text = "Grass Batch"; this.tabControl1.ResumeLayout(false); this.GrassBatchTab.ResumeLayout(false); - this.GrassBatchTab.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.OptmizationThresholdNumericUpDown)).EndInit(); this.groupBox1.ResumeLayout(false); this.groupBox1.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.OrientToTerrainNumericUpDown)).EndInit(); @@ -670,7 +655,6 @@ ((System.ComponentModel.ISupportInitialize)(this.LodFadeStartDistanceNumericUpDown)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.LodDistNumericUpDown)).EndInit(); this.BrushTab.ResumeLayout(false); - this.BrushTab.PerformLayout(); this.groupBox2.ResumeLayout(false); this.groupBox2.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.AoNumericUpDown)).EndInit(); @@ -679,7 +663,9 @@ this.brushSettingsGroupBox.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.DensityNumericUpDown)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.RadiusNumericUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.OptmizationThresholdNumericUpDown)).EndInit(); this.ResumeLayout(false); + this.PerformLayout(); } @@ -687,36 +673,23 @@ private System.Windows.Forms.TabControl tabControl1; private System.Windows.Forms.TabPage GrassBatchTab; - private System.Windows.Forms.TextBox PositionTextBox; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Button GrassGoToButton; - private System.Windows.Forms.Button GrassDeleteButton; - private System.Windows.Forms.Button GrassAddToProjectButton; private System.Windows.Forms.TabPage BrushTab; private System.Windows.Forms.GroupBox brushSettingsGroupBox; private System.Windows.Forms.NumericUpDown RadiusNumericUpDown; private System.Windows.Forms.Label radiusLabel; private System.Windows.Forms.NumericUpDown DensityNumericUpDown; private System.Windows.Forms.Label label5; - private System.Windows.Forms.CheckBox BrushModeCheckBox; private System.Windows.Forms.GroupBox groupBox1; private System.Windows.Forms.NumericUpDown LodDistNumericUpDown; private System.Windows.Forms.Label label6; - private System.Windows.Forms.TextBox ArchetypeNameTextBox; - private System.Windows.Forms.Label label7; - private System.Windows.Forms.Label HashLabel; private System.Windows.Forms.Label label9; private System.Windows.Forms.NumericUpDown LodFadeStartDistanceNumericUpDown; private System.Windows.Forms.Label label10; private System.Windows.Forms.NumericUpDown LodFadeRangeNumericUpDown; private System.Windows.Forms.Label label11; private System.Windows.Forms.NumericUpDown OrientToTerrainNumericUpDown; - private System.Windows.Forms.TextBox textBox4; - private System.Windows.Forms.Label label13; private System.Windows.Forms.Label label12; private System.Windows.Forms.TextBox ScaleRangeTextBox; - private System.Windows.Forms.TextBox textBox5; - private System.Windows.Forms.Label label14; private System.Windows.Forms.GroupBox groupBox2; private System.Windows.Forms.Label label15; private System.Windows.Forms.TextBox PadTextBox; @@ -727,12 +700,23 @@ private System.Windows.Forms.NumericUpDown ScaleNumericUpDown; private System.Windows.Forms.NumericUpDown AoNumericUpDown; private System.Windows.Forms.Label label4; - private System.Windows.Forms.Label label16; - private System.Windows.Forms.Label label8; - private System.Windows.Forms.Button OptimizeBatchButton; + private System.Windows.Forms.ToolTip OptimizeBatchButtonTooltip; + private System.Windows.Forms.TextBox ExtentsMinTextBox; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.TextBox ExtentsMaxTextBox; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.Button GrassDeleteButton; + private System.Windows.Forms.Button GrassAddToProjectButton; + private System.Windows.Forms.Label HashLabel; + private System.Windows.Forms.TextBox ArchetypeNameTextBox; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.TextBox PositionTextBox; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button GrassGoToButton; private System.Windows.Forms.Label label17; private System.Windows.Forms.NumericUpDown OptmizationThresholdNumericUpDown; - private System.Windows.Forms.Label label18; - private System.Windows.Forms.ToolTip OptimizeBatchButtonTooltip; + private System.Windows.Forms.Button OptimizeBatchButton; + private System.Windows.Forms.CheckBox BrushModeCheckBox; + private System.Windows.Forms.Label label8; } } \ No newline at end of file diff --git a/Project/Panels/EditYmapGrassPanel.cs b/Project/Panels/EditYmapGrassPanel.cs index 761475f..dedd9d1 100644 --- a/Project/Panels/EditYmapGrassPanel.cs +++ b/Project/Panels/EditYmapGrassPanel.cs @@ -1,21 +1,24 @@ using System; using System.Collections.Generic; -using System.Linq; using System.Windows.Forms; using CodeWalker.GameFiles; -using CodeWalker.Utils; using CodeWalker.World; using SharpDX; -// THINGS TODO -// - COMPLETED -- Better gizmo for grass brush (like a circle with a little line in the middle sticking upwards) +// TODO +// - COMPLETED -- Optimization feature. // - COMPLETED -- Remove grass instances using CTRL + SHIFT + LMB +// - Better gizmo for grass brush (like a circle with a little line in the middle sticking upwards) // - Maybe some kind of auto coloring system? I've noticed that mostly all grass in GTA inherits it's color from the surface it's on. // - Grass area fill (generate grass on ydr based on colision materials?) +// - Need to have a way to erase instances from other batches in the current batches ymap. +// if we optimize our instances, we'd have to go through each batch to erase, this is very monotonous. -// As far as everything else goes, the brush works just fine. No issues so far besides the UpdateGraphics() method. (causes flicker sometimes) - +// BUG +// - I've added a "zoom" kind of feature when hitting the goto button, but when the bounds of the +// grass batch are 0, the zoom of the camera is set to 0, which causes the end-user to have to scroll +// out a lot in order to use any movement controls. I will need to clamp that to a minimum value. namespace CodeWalker.Project.Panels { @@ -64,6 +67,9 @@ namespace CodeWalker.Project.Panels OrientToTerrainNumericUpDown.Value = (decimal)CurrentBatch.Batch.OrientToTerrain; OptmizationThresholdNumericUpDown.Value = 15; BrushModeCheckBox.Checked = CurrentBatch.BrushEnabled; + RadiusNumericUpDown.Value = (decimal)CurrentBatch.BrushRadius; + ExtentsMinTextBox.Text = FloatUtil.GetVector3String(CurrentBatch.AABBMin); + ExtentsMaxTextBox.Text = FloatUtil.GetVector3String(CurrentBatch.AABBMax); } private void UpdateFormTitle() @@ -111,6 +117,12 @@ namespace CodeWalker.Project.Panels if (CurrentBatch == null) return; CurrentBatch.BrushEnabled = BrushModeCheckBox.Checked; } + + private void RadiusNumericUpDown_ValueChanged(object sender, EventArgs e) + { + if (CurrentBatch == null) return; + CurrentBatch.BrushRadius = (float)RadiusNumericUpDown.Value; + } #endregion #region Batch Settings @@ -273,15 +285,6 @@ namespace CodeWalker.Project.Panels private SpaceRayIntersectResult SpawnRayFunc(Vector3 spawnPos) { var res = ProjectForm.WorldForm.Raycast(new Ray(spawnPos, -Vector3.UnitZ)); - - //if (res.HitBounds != null) // shouldn't happen but just in case.. - //{ - // var mat = BoundsMaterialTypes.GetMaterial(res.HitBounds.MaterialIndex); - // if (mat.Name != "DEFAULT") - // { - // var c = mat.Colour; - // } - //} return res; } diff --git a/Project/ProjectForm.cs b/Project/ProjectForm.cs index 9a28851..3a9b906 100644 --- a/Project/ProjectForm.cs +++ b/Project/ProjectForm.cs @@ -704,6 +704,25 @@ namespace CodeWalker.Project //######## Public methods + // Possibly future proofing for procedural prop instances + public bool CanPaintInstances() + { + if (CurrentGrassBatch != null) + { + if (CurrentGrassBatch.BrushEnabled) + return true; + } + + return false; + } + public float GetInstanceBrushRadius() + { + if (CurrentGrassBatch != null) + return CurrentGrassBatch.BrushRadius; + + return 0f; + } + public void NewProject() { if (CurrentProjectFile != null) diff --git a/Rendering/Renderer.cs b/Rendering/Renderer.cs index 3119b56..e499331 100644 --- a/Rendering/Renderer.cs +++ b/Rendering/Renderer.cs @@ -684,6 +684,33 @@ namespace CodeWalker.Rendering } + public void RenderBrushRadiusOutline(Vector3 position, Vector3 dir, Vector3 up, float radius, uint col) + { + const int Reso = 36; + const float MaxDeg = 360f; + const float DegToRad = 0.0174533f; + const float Ang = MaxDeg / Reso; + + var axis = Vector3.Cross(dir, up); + var c = new VertexTypePC[Reso]; + + for (var i = 0; i < Reso; i++) + { + var rDir = Quaternion.RotationAxis(dir, (i * Ang) * DegToRad).Multiply(axis); + c[i].Position = position + (rDir * radius); + c[i].Colour = col; + } + + for (var i = 0; i < c.Length; i++) + { + SelectionLineVerts.Add(c[i]); + SelectionLineVerts.Add(c[(i + 1) % c.Length]); + } + + SelectionLineVerts.Add(new VertexTypePC{Colour = col, Position = position}); + SelectionLineVerts.Add(new VertexTypePC { Colour = col, Position = position + dir * 2f}); + } + public void RenderSelectionArrowOutline(Vector3 pos, Vector3 dir, Vector3 up, Quaternion ori, float len, float rad, uint colour) { Vector3 ax = Vector3.Cross(dir, up); diff --git a/WorldForm.cs b/WorldForm.cs index abb7125..d032479 100644 --- a/WorldForm.cs +++ b/WorldForm.cs @@ -78,6 +78,7 @@ namespace CodeWalker int ControlBrushTimer = 0; bool ControlBrushEnabled; + float ControlBrushRadius; Entity camEntity = new Entity(); PedEntity pedEntity = new PedEntity(); @@ -1256,7 +1257,7 @@ namespace CodeWalker if (MouseRayCollision.Hit) { var arup = GetPerpVec(MouseRayCollision.Normal); - Renderer.RenderSelectionArrowOutline(MouseRayCollision.Position, MouseRayCollision.Normal, arup, Quaternion.Identity, 2.0f, 0.15f, cgrn); + Renderer.RenderBrushRadiusOutline(MouseRayCollision.Position, MouseRayCollision.Normal, arup, ProjectForm.GetInstanceBrushRadius(), cgrn); } } @@ -2116,9 +2117,8 @@ namespace CodeWalker //reset variables for beginning the mouse hit test CurMouseHit.Clear(); - - //MouseRayCollisionEnabled = Input.CtrlPressed; //temporary...! - if (Input.CtrlPressed) + // Get whether or not we can brush from the project form. + if (Input.CtrlPressed && ProjectForm != null && ProjectForm.CanPaintInstances()) { ControlBrushEnabled = true; MouseRayCollisionEnabled = true; @@ -2140,6 +2140,7 @@ namespace CodeWalker } + public SpaceRayIntersectResult GetSpaceMouseRay() { SpaceRayIntersectResult ret = new SpaceRayIntersectResult(); @@ -4352,7 +4353,8 @@ namespace CodeWalker public void GoToPosition(Vector3 p, Vector3 bound) { camera.FollowEntity.Position = p; - camera.TargetDistance = bound.Length(); + var bl = bound.Length(); + camera.TargetDistance = bl > 1f ? bl : 1f; } private MapMarker AddMarker(Vector3 pos, string name, bool addtotxtbox = false) From af930fa4ec8c43acf7179504fa70656f132ae783 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20N=27gadi?= Date: Thu, 26 Jul 2018 22:16:54 +0200 Subject: [PATCH 015/158] YtypFile - Add AddArchetype, RemoveArchetype and Save --- .../GameFiles/FileTypes/YtypFile.cs | 114 ++++++++++++++++++ .../GameFiles/MetaTypes/Archetype.cs | 4 + 2 files changed, 118 insertions(+) diff --git a/CodeWalker.Core/GameFiles/FileTypes/YtypFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YtypFile.cs index f9d548e..08a312c 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YtypFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YtypFile.cs @@ -241,7 +241,121 @@ namespace CodeWalker.GameFiles } + public void AddArchetype(Archetype arch) + { + List allArchs = new List(); + if (AllArchetypes != null) + allArchs.AddRange(AllArchetypes); + + allArchs.Add(arch); + + AllArchetypes = allArchs.ToArray(); + } + + public void RemoveArchetype(Archetype arch) + { + List allArchs = new List(); + + if (AllArchetypes != null) + allArchs.AddRange(AllArchetypes); + + if (allArchs.Contains(arch)) + allArchs.Remove(arch); + + AllArchetypes = allArchs.ToArray(); + } + + public byte[] Save() + { + MetaBuilder mb = new MetaBuilder(); + + var mdb = mb.EnsureBlock(MetaName.CMapTypes); + + CMapTypes mapTypes = CMapTypes; + + if((AllArchetypes != null) && (AllArchetypes.Length > 0)) + { + MetaPOINTER[] archPtrs = new MetaPOINTER[AllArchetypes.Length]; + + for(int i=0; i 0)) + { + MetaPOINTER[] cetPtrs = new MetaPOINTER[CompositeEntityTypes.Length] ; + + for (int i = 0; i < cetPtrs.Length; i++) + { + var cet = CompositeEntityTypes[i]; + cetPtrs[i] = mb.AddItemPtr(MetaName.CCompositeEntityType, cet); + } + + mapTypes.compositeEntityTypes = mb.AddItemArrayPtr(MetaName.CCompositeEntityType, cetPtrs); + } + + mb.AddItem(MetaName.CMapTypes, mapTypes); + + mb.AddStructureInfo(MetaName.CMapTypes); + mb.AddStructureInfo(MetaName.CBaseArchetypeDef); + mb.AddStructureInfo(MetaName.CMloArchetypeDef); + mb.AddStructureInfo(MetaName.CTimeArchetypeDef); + mb.AddStructureInfo(MetaName.CMloRoomDef); + mb.AddStructureInfo(MetaName.CMloPortalDef); + mb.AddStructureInfo(MetaName.CMloEntitySet); + mb.AddStructureInfo(MetaName.CCompositeEntityType); + + mb.AddEnumInfo((MetaName)1991964615); + mb.AddEnumInfo((MetaName)1294270217); + mb.AddEnumInfo((MetaName)1264241711); + mb.AddEnumInfo((MetaName)648413703); + mb.AddEnumInfo((MetaName)3573596290); + mb.AddEnumInfo((MetaName)700327466); + mb.AddEnumInfo((MetaName)193194928); + mb.AddEnumInfo((MetaName)2266515059); + + Meta = mb.GetMeta(); + + byte[] data = ResourceBuilder.Build(Meta, 2); //ymap is version 2... + + return data; + + } } diff --git a/CodeWalker.Core/GameFiles/MetaTypes/Archetype.cs b/CodeWalker.Core/GameFiles/MetaTypes/Archetype.cs index d048d17..f9392c7 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/Archetype.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/Archetype.cs @@ -128,6 +128,9 @@ namespace CodeWalker.GameFiles { public override MetaName Type => MetaName.CMloArchetypeDef; + public CMloArchetypeDef _BaseMloArchetypeDef; + public CMloArchetypeDef BaseMloArchetypeDef { get { return _BaseMloArchetypeDef; } set { _BaseMloArchetypeDef = value; } } + public CMloArchetypeDefData _MloArchetypeDef; public CMloArchetypeDefData MloArchetypeDef { get { return _MloArchetypeDef; } set { _MloArchetypeDef = value; } } @@ -141,6 +144,7 @@ namespace CodeWalker.GameFiles { Ytyp = ytyp; InitVars(ref arch._BaseArchetypeDef); + BaseMloArchetypeDef = arch; MloArchetypeDef = arch.MloArchetypeDef; } From f27672d6ad4e5aab5dc60dfde4365b6524ca9ee2 Mon Sep 17 00:00:00 2001 From: Carmine Date: Sat, 11 Aug 2018 17:58:52 +0200 Subject: [PATCH 016/158] Added checkbox to disable rendering of drawables --- Rendering/Renderer.cs | 59 +++++++++++++++++++++++-------------------- WorldForm.Designer.cs | 26 +++++++++++++++---- WorldForm.cs | 5 ++++ 3 files changed, 57 insertions(+), 33 deletions(-) diff --git a/Rendering/Renderer.cs b/Rendering/Renderer.cs index aa74391..31e957f 100644 --- a/Rendering/Renderer.cs +++ b/Rendering/Renderer.cs @@ -98,7 +98,7 @@ namespace CodeWalker.Rendering public bool renderinteriors = true; public bool renderproxies = false; public bool renderchildents = false;//when rendering single ymap, render root only or not... - + public bool renderentities = true; public bool rendergrass = true; public bool renderdistlodlights = true; @@ -1537,41 +1537,44 @@ namespace CodeWalker.Rendering //if an entity is not fully loaded, set a flag for its parent, then traverse to root //until found an entity that is fully loaded. //on a second loop, build a final render list based on the flags. - - for (int i = 0; i < renderworldentities.Count; i++) + if(renderentities) { - var ent = renderworldentities[i]; - var arch = ent.Archetype; - var pent = ent.Parent; - var drawable = gameFileCache.TryGetDrawable(arch); - Renderable rndbl = TryGetRenderable(arch, drawable); - if ((rndbl != null) && rndbl.IsLoaded && (rndbl.AllTexturesLoaded || !waitforchildrentoload)) + + for (int i = 0; i < renderworldentities.Count; i++) { - RenderableEntity rent = new RenderableEntity(); - rent.Entity = ent; - rent.Renderable = rndbl; - renderworldrenderables.Add(rent); - } - else if (waitforchildrentoload) - { - //todo: render parent if children loading....... + var ent = renderworldentities[i]; + var arch = ent.Archetype; + var pent = ent.Parent; + var drawable = gameFileCache.TryGetDrawable(arch); + Renderable rndbl = TryGetRenderable(arch, drawable); + if ((rndbl != null) && rndbl.IsLoaded && (rndbl.AllTexturesLoaded || !waitforchildrentoload)) + { + RenderableEntity rent = new RenderableEntity(); + rent.Entity = ent; + rent.Renderable = rndbl; + renderworldrenderables.Add(rent); + } + else if (waitforchildrentoload) + { + //todo: render parent if children loading....... + } + + if (ent.IsMlo && rendercollisionmeshes && renderinteriors) + { + RenderInteriorCollisionMesh(ent); + } } - if (ent.IsMlo && rendercollisionmeshes && renderinteriors) + for (int i = 0; i < renderworldrenderables.Count; i++) { - RenderInteriorCollisionMesh(ent); + var rent = renderworldrenderables[i]; + var ent = rent.Entity; + var arch = ent.Archetype; + + RenderArchetype(arch, ent, rent.Renderable, false); } } - for (int i = 0; i < renderworldrenderables.Count; i++) - { - var rent = renderworldrenderables[i]; - var ent = rent.Entity; - var arch = ent.Archetype; - - RenderArchetype(arch, ent, rent.Renderable, false); - } - if (rendergrass) diff --git a/WorldForm.Designer.cs b/WorldForm.Designer.cs index f50fd73..11532c9 100644 --- a/WorldForm.Designer.cs +++ b/WorldForm.Designer.cs @@ -109,6 +109,7 @@ namespace CodeWalker this.tabPage4 = new System.Windows.Forms.TabPage(); this.OptionsTabControl = new System.Windows.Forms.TabControl(); this.tabPage8 = new System.Windows.Forms.TabPage(); + this.RenderEntitiesCheckBox = new System.Windows.Forms.CheckBox(); this.AdvancedSettingsButton = new System.Windows.Forms.Button(); this.ControlSettingsButton = new System.Windows.Forms.Button(); this.MapViewDetailLabel = new System.Windows.Forms.Label(); @@ -1295,6 +1296,7 @@ namespace CodeWalker // // tabPage8 // + this.tabPage8.Controls.Add(this.RenderEntitiesCheckBox); this.tabPage8.Controls.Add(this.AdvancedSettingsButton); this.tabPage8.Controls.Add(this.ControlSettingsButton); this.tabPage8.Controls.Add(this.MapViewDetailLabel); @@ -1327,6 +1329,19 @@ namespace CodeWalker this.tabPage8.Text = "General"; this.tabPage8.UseVisualStyleBackColor = true; // + // EntitiesCheckBox + // + this.RenderEntitiesCheckBox.AutoSize = true; + this.RenderEntitiesCheckBox.Checked = true; + this.RenderEntitiesCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; + this.RenderEntitiesCheckBox.Location = new System.Drawing.Point(10, 32); + this.RenderEntitiesCheckBox.Name = "EntitiesCheckBox"; + this.RenderEntitiesCheckBox.Size = new System.Drawing.Size(89, 17); + this.RenderEntitiesCheckBox.TabIndex = 67; + this.RenderEntitiesCheckBox.Text = "Show entities"; + this.RenderEntitiesCheckBox.UseVisualStyleBackColor = true; + this.RenderEntitiesCheckBox.CheckedChanged += new System.EventHandler(this.RenderEntitiesCheckBox_CheckedChanged); + // // AdvancedSettingsButton // this.AdvancedSettingsButton.Location = new System.Drawing.Point(101, 456); @@ -1411,7 +1426,7 @@ namespace CodeWalker this.WaterQuadsCheckBox.AutoSize = true; this.WaterQuadsCheckBox.Checked = true; this.WaterQuadsCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; - this.WaterQuadsCheckBox.Location = new System.Drawing.Point(10, 104); + this.WaterQuadsCheckBox.Location = new System.Drawing.Point(10, 129); this.WaterQuadsCheckBox.Name = "WaterQuadsCheckBox"; this.WaterQuadsCheckBox.Size = new System.Drawing.Size(114, 17); this.WaterQuadsCheckBox.TabIndex = 39; @@ -1440,7 +1455,7 @@ namespace CodeWalker // TimedEntitiesAlwaysOnCheckBox // this.TimedEntitiesAlwaysOnCheckBox.AutoSize = true; - this.TimedEntitiesAlwaysOnCheckBox.Location = new System.Drawing.Point(131, 58); + this.TimedEntitiesAlwaysOnCheckBox.Location = new System.Drawing.Point(131, 83); this.TimedEntitiesAlwaysOnCheckBox.Name = "TimedEntitiesAlwaysOnCheckBox"; this.TimedEntitiesAlwaysOnCheckBox.Size = new System.Drawing.Size(58, 17); this.TimedEntitiesAlwaysOnCheckBox.TabIndex = 37; @@ -1453,7 +1468,7 @@ namespace CodeWalker this.GrassCheckBox.AutoSize = true; this.GrassCheckBox.Checked = true; this.GrassCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; - this.GrassCheckBox.Location = new System.Drawing.Point(10, 35); + this.GrassCheckBox.Location = new System.Drawing.Point(10, 57); this.GrassCheckBox.Name = "GrassCheckBox"; this.GrassCheckBox.Size = new System.Drawing.Size(81, 17); this.GrassCheckBox.TabIndex = 35; @@ -1466,7 +1481,7 @@ namespace CodeWalker this.InteriorsCheckBox.AutoSize = true; this.InteriorsCheckBox.Checked = true; this.InteriorsCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; - this.InteriorsCheckBox.Location = new System.Drawing.Point(10, 81); + this.InteriorsCheckBox.Location = new System.Drawing.Point(10, 106); this.InteriorsCheckBox.Name = "InteriorsCheckBox"; this.InteriorsCheckBox.Size = new System.Drawing.Size(92, 17); this.InteriorsCheckBox.TabIndex = 38; @@ -1586,7 +1601,7 @@ namespace CodeWalker this.TimedEntitiesCheckBox.AutoSize = true; this.TimedEntitiesCheckBox.Checked = true; this.TimedEntitiesCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; - this.TimedEntitiesCheckBox.Location = new System.Drawing.Point(10, 58); + this.TimedEntitiesCheckBox.Location = new System.Drawing.Point(10, 83); this.TimedEntitiesCheckBox.Name = "TimedEntitiesCheckBox"; this.TimedEntitiesCheckBox.Size = new System.Drawing.Size(117, 17); this.TimedEntitiesCheckBox.TabIndex = 36; @@ -3581,5 +3596,6 @@ namespace CodeWalker private System.Windows.Forms.ToolStripMenuItem ToolbarSnapToGroundGridButton; private System.Windows.Forms.NumericUpDown SnapGridSizeUpDown; private System.Windows.Forms.Label label26; + private System.Windows.Forms.CheckBox RenderEntitiesCheckBox; } } \ No newline at end of file diff --git a/WorldForm.cs b/WorldForm.cs index c39cf6f..f1ccbe8 100644 --- a/WorldForm.cs +++ b/WorldForm.cs @@ -7553,6 +7553,11 @@ namespace CodeWalker { SnapGridSize = (float)SnapGridSizeUpDown.Value; } + + private void RenderEntitiesCheckBox_CheckedChanged(object sender, EventArgs e) + { + Renderer.renderentities = RenderEntitiesCheckBox.Checked; + } } From 8caee271f7cfb87652a64b137cf9086d408e4a83 Mon Sep 17 00:00:00 2001 From: Carmine Date: Sat, 11 Aug 2018 18:13:52 +0200 Subject: [PATCH 017/158] Renamed some fields in Bone --- .../GameFiles/Resources/Drawable.cs | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/CodeWalker.Core/GameFiles/Resources/Drawable.cs b/CodeWalker.Core/GameFiles/Resources/Drawable.cs index f229e0b..bc74416 100644 --- a/CodeWalker.Core/GameFiles/Resources/Drawable.cs +++ b/CodeWalker.Core/GameFiles/Resources/Drawable.cs @@ -718,16 +718,16 @@ namespace CodeWalker.GameFiles //public float TranslationX { get; set; } //public float TranslationY { get; set; } //public float TranslationZ { get; set; } - public uint Unknown_1Ch { get; set; } // 0x00000000 - public float Unknown_20h { get; set; } // 1.0 - public float Unknown_24h { get; set; } // 1.0 - public float Unknown_28h { get; set; } // 1.0 - public float Unknown_2Ch { get; set; } // 1.0 - public ushort Unknown_30h { get; set; } //limb end index? IK chain? + public uint Unknown_1Ch { get; set; } // 0x00000000 RHW? + public float ScaleX { get; set; } // 1.0 + public float ScaleY { get; set; } // 1.0 + public float ScaleZ { get; set; } // 1.0 + public float Unknown_2Ch { get; set; } // 1.0 RHW? + public ushort NextSiblingIndex { get; set; } //limb end index? IK chain? public short ParentIndex { get; set; } public uint Unknown_34h { get; set; } // 0x00000000 public ulong NamePointer { get; set; } - public ushort Unknown_40h { get; set; } + public ushort Flags { get; set; } public ushort Unknown_42h { get; set; } public ushort Id { get; set; } public ushort Unknown_46h { get; set; } @@ -756,15 +756,15 @@ namespace CodeWalker.GameFiles //this.TranslationY = reader.ReadSingle(); //this.TranslationZ = reader.ReadSingle(); this.Unknown_1Ch = reader.ReadUInt32(); - this.Unknown_20h = reader.ReadSingle(); - this.Unknown_24h = reader.ReadSingle(); - this.Unknown_28h = reader.ReadSingle(); + this.ScaleX = reader.ReadSingle(); + this.ScaleY = reader.ReadSingle(); + this.ScaleZ = reader.ReadSingle(); this.Unknown_2Ch = reader.ReadSingle(); - this.Unknown_30h = reader.ReadUInt16(); + this.NextSiblingIndex = reader.ReadUInt16(); this.ParentIndex = reader.ReadInt16(); this.Unknown_34h = reader.ReadUInt32(); this.NamePointer = reader.ReadUInt64(); - this.Unknown_40h = reader.ReadUInt16(); + this.Flags = reader.ReadUInt16(); this.Unknown_42h = reader.ReadUInt16(); this.Id = reader.ReadUInt16(); this.Unknown_46h = reader.ReadUInt16(); @@ -796,15 +796,15 @@ namespace CodeWalker.GameFiles //writer.Write(this.TranslationY); //writer.Write(this.TranslationZ); writer.Write(this.Unknown_1Ch); - writer.Write(this.Unknown_20h); - writer.Write(this.Unknown_24h); - writer.Write(this.Unknown_28h); + writer.Write(this.ScaleX); + writer.Write(this.ScaleY); + writer.Write(this.ScaleZ); writer.Write(this.Unknown_2Ch); - writer.Write(this.Unknown_30h); + writer.Write(this.NextSiblingIndex); writer.Write(this.ParentIndex); writer.Write(this.Unknown_34h); writer.Write(this.NamePointer); - writer.Write(this.Unknown_40h); + writer.Write(this.Flags); writer.Write(this.Unknown_42h); writer.Write(this.Id); writer.Write(this.Unknown_46h); From 1b94cd4f047c021f1b8b41f5b7df3b51c404e7da Mon Sep 17 00:00:00 2001 From: Carmine Date: Sat, 11 Aug 2018 18:15:23 +0200 Subject: [PATCH 018/158] Renamed Min and Max limits in JointRotationLimit_s --- CodeWalker.Core/GameFiles/Resources/Drawable.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/CodeWalker.Core/GameFiles/Resources/Drawable.cs b/CodeWalker.Core/GameFiles/Resources/Drawable.cs index bc74416..d9c7c7a 100644 --- a/CodeWalker.Core/GameFiles/Resources/Drawable.cs +++ b/CodeWalker.Core/GameFiles/Resources/Drawable.cs @@ -968,12 +968,12 @@ namespace CodeWalker.GameFiles public float Unknown_50h { get; set; } // -pi public float Unknown_54h { get; set; } // pi public float Unknown_58h { get; set; } // 1.0 - public float Unknown_5Ch { get; set; } - public float Unknown_60h { get; set; } - public float Unknown_64h { get; set; } - public float Unknown_68h { get; set; } - public float Unknown_6Ch { get; set; } - public float Unknown_70h { get; set; } + public float MinX { get; set; } + public float MinY { get; set; } + public float MinZ { get; set; } + public float MaxX { get; set; } + public float MaxY { get; set; } + public float MaxZ { get; set; } public float Unknown_74h { get; set; } // pi public float Unknown_78h { get; set; } // -pi public float Unknown_7Ch { get; set; } // pi From aec2426d7b21fae8e2067c14a4a1badca63da6fb Mon Sep 17 00:00:00 2001 From: Carmine Date: Sun, 12 Aug 2018 18:04:34 +0200 Subject: [PATCH 019/158] Moved renderentities check --- Rendering/Renderer.cs | 48 +++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/Rendering/Renderer.cs b/Rendering/Renderer.cs index 31e957f..7abd0cb 100644 --- a/Rendering/Renderer.cs +++ b/Rendering/Renderer.cs @@ -1537,34 +1537,34 @@ namespace CodeWalker.Rendering //if an entity is not fully loaded, set a flag for its parent, then traverse to root //until found an entity that is fully loaded. //on a second loop, build a final render list based on the flags. - if(renderentities) + + for (int i = 0; i < renderworldentities.Count; i++) { - - for (int i = 0; i < renderworldentities.Count; i++) + var ent = renderworldentities[i]; + var arch = ent.Archetype; + var pent = ent.Parent; + var drawable = gameFileCache.TryGetDrawable(arch); + Renderable rndbl = TryGetRenderable(arch, drawable); + if ((rndbl != null) && rndbl.IsLoaded && (rndbl.AllTexturesLoaded || !waitforchildrentoload)) { - var ent = renderworldentities[i]; - var arch = ent.Archetype; - var pent = ent.Parent; - var drawable = gameFileCache.TryGetDrawable(arch); - Renderable rndbl = TryGetRenderable(arch, drawable); - if ((rndbl != null) && rndbl.IsLoaded && (rndbl.AllTexturesLoaded || !waitforchildrentoload)) - { - RenderableEntity rent = new RenderableEntity(); - rent.Entity = ent; - rent.Renderable = rndbl; - renderworldrenderables.Add(rent); - } - else if (waitforchildrentoload) - { - //todo: render parent if children loading....... - } - - if (ent.IsMlo && rendercollisionmeshes && renderinteriors) - { - RenderInteriorCollisionMesh(ent); - } + RenderableEntity rent = new RenderableEntity(); + rent.Entity = ent; + rent.Renderable = rndbl; + renderworldrenderables.Add(rent); + } + else if (waitforchildrentoload) + { + //todo: render parent if children loading....... } + if (ent.IsMlo && rendercollisionmeshes && renderinteriors) + { + RenderInteriorCollisionMesh(ent); + } + } + + if(renderentities) + { for (int i = 0; i < renderworldrenderables.Count; i++) { var rent = renderworldrenderables[i]; From b3069321e1c8e4506ae02a03651fa7216ef1c532 Mon Sep 17 00:00:00 2001 From: Carmine Date: Tue, 14 Aug 2018 12:15:52 +0200 Subject: [PATCH 020/158] Replaced floats with Vector3 for JointRotationLimit_s Min and Max --- CodeWalker.Core/GameFiles/Resources/Drawable.cs | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/CodeWalker.Core/GameFiles/Resources/Drawable.cs b/CodeWalker.Core/GameFiles/Resources/Drawable.cs index d9c7c7a..72acf0b 100644 --- a/CodeWalker.Core/GameFiles/Resources/Drawable.cs +++ b/CodeWalker.Core/GameFiles/Resources/Drawable.cs @@ -968,12 +968,8 @@ namespace CodeWalker.GameFiles public float Unknown_50h { get; set; } // -pi public float Unknown_54h { get; set; } // pi public float Unknown_58h { get; set; } // 1.0 - public float MinX { get; set; } - public float MinY { get; set; } - public float MinZ { get; set; } - public float MaxX { get; set; } - public float MaxY { get; set; } - public float MaxZ { get; set; } + public Vector3 Min { get; set; } + public Vector3 Max { get; set; } public float Unknown_74h { get; set; } // pi public float Unknown_78h { get; set; } // -pi public float Unknown_7Ch { get; set; } // pi From 13449c81d1d3f9f03030a2ac69066bc871ca7949 Mon Sep 17 00:00:00 2001 From: dexyfex Date: Mon, 3 Dec 2018 19:39:42 +1100 Subject: [PATCH 021/158] GenerateNavMeshPanel WIP --- .../Panels/EditYmapEntityPanel.Designer.cs | 30 ++--- Project/Panels/GenerateNavMeshPanel.cs | 122 +++++++++++++++--- 2 files changed, 116 insertions(+), 36 deletions(-) diff --git a/Project/Panels/EditYmapEntityPanel.Designer.cs b/Project/Panels/EditYmapEntityPanel.Designer.cs index f33c0e7..d12ebea 100644 --- a/Project/Panels/EditYmapEntityPanel.Designer.cs +++ b/Project/Panels/EditYmapEntityPanel.Designer.cs @@ -71,6 +71,7 @@ this.EntityNumChildrenTextBox = new System.Windows.Forms.TextBox(); this.label25 = new System.Windows.Forms.Label(); this.EntityExtensionsTabPage = new System.Windows.Forms.TabPage(); + this.label1 = new System.Windows.Forms.Label(); this.EntityPivotTabPage = new System.Windows.Forms.TabPage(); this.label95 = new System.Windows.Forms.Label(); this.EntityPivotEditCheckBox = new System.Windows.Forms.CheckBox(); @@ -79,7 +80,6 @@ this.EntityPivotRotationNormalizeButton = new System.Windows.Forms.Button(); this.label94 = new System.Windows.Forms.Label(); this.EntityPivotRotationTextBox = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); this.EntityTabControl.SuspendLayout(); this.EntityGeneralTabPage.SuspendLayout(); this.EntityLodTabPage.SuspendLayout(); @@ -153,12 +153,12 @@ this.EntityFlagsCheckedListBox.CheckOnClick = true; this.EntityFlagsCheckedListBox.FormattingEnabled = true; this.EntityFlagsCheckedListBox.Items.AddRange(new object[] { - "1 - Unk01", + "1 - Allow full rotation", "2 - Unk02", "4 - Unk03", "8 - Unk04", "16 - Unk05", - "32 - Unk06", + "32 - Static entity", "64 - Unk07", "128 - Unk08", "256 - Unk09", @@ -178,11 +178,11 @@ "4194304 - Unk23", "8388608 - Unk24", "16777216 - Unk25", - "33554432 - Unk26", + "33554432 - Interior proxy", "67108864 - Unk27", - "134217728 - Unk28", + "134217728 - Reflection proxy", "268435456 - Unk29", - "536870912 - Unk30", + "536870912 - Mirror proxy", "1073741824 - Unk31", "2147483648 - Unk32"}); this.EntityFlagsCheckedListBox.Location = new System.Drawing.Point(348, 113); @@ -575,6 +575,15 @@ this.EntityExtensionsTabPage.Text = "Extensions"; this.EntityExtensionsTabPage.UseVisualStyleBackColor = true; // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(27, 27); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(157, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Entity extensions editing TODO!"; + // // EntityPivotTabPage // this.EntityPivotTabPage.Controls.Add(this.label95); @@ -660,15 +669,6 @@ this.EntityPivotRotationTextBox.TabIndex = 25; this.EntityPivotRotationTextBox.TextChanged += new System.EventHandler(this.EntityPivotRotationTextBox_TextChanged); // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(27, 27); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(157, 13); - this.label1.TabIndex = 0; - this.label1.Text = "Entity extensions editing TODO!"; - // // EditYmapEntityPanel // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); diff --git a/Project/Panels/GenerateNavMeshPanel.cs b/Project/Panels/GenerateNavMeshPanel.cs index b140713..2745394 100644 --- a/Project/Panels/GenerateNavMeshPanel.cs +++ b/Project/Panels/GenerateNavMeshPanel.cs @@ -325,7 +325,8 @@ namespace CodeWalker.Project.Panels private List CornersB = new List(); private List CornersT = new List(); - + private List VerticesB = new List(); + private List VerticesT = new List(); public void BeginGrid(int vertexCountX, int vertexCountY) { @@ -529,6 +530,7 @@ namespace CodeWalker.Project.Panels + { //if (dnx > 0) //can move along +X //{ // AssignVertices(ref vplane, plthresh, i, dnx, dny, dpy, 2, poly); @@ -553,7 +555,7 @@ namespace CodeWalker.Project.Panels //{ // polys.Add(poly); //} - + } @@ -705,15 +707,6 @@ namespace CodeWalker.Project.Panels { int pid = poly.Index; int qi = i; - //int maxdnx = Math.Min(dnx, 40); - //int maxdpy = 50;// dpy;// - //int maxdny = 50;// dny;// - //int cdpy = dpy; - //int cdny = dny; - //int vertexCountP = 0; - //int vertexCountN = 0; - //int lastqx = 0; - //int lastqi = i; CornersB.Clear(); CornersT.Clear(); @@ -745,8 +738,8 @@ namespace CodeWalker.Project.Panels int ony = 0; int ldyb = 0; int ldyt = 0; - int corndxb = 0; - int corndxt = 0; + //int corndxb = 0; + //int corndxt = 0; for (int x = 0; x < 50; x++) { @@ -833,8 +826,8 @@ namespace CodeWalker.Project.Panels int nextsyb = nextyb - ony - dyb; int nextsyt = nextyt + ony - dyt; - corndxb++; - corndxt++; + //corndxb++; + //corndxt++; bool iscornerb = false; @@ -869,7 +862,7 @@ namespace CodeWalker.Project.Panels if (nextsyb > syb) nextsyb = syb; } - + if (iscornerb) { } @@ -891,6 +884,93 @@ namespace CodeWalker.Project.Panels } + private void AssignVertices3(ref Plane vpl, float plt, int i, int dir, GenPoly poly) + { + int pid = poly.Index; + int qi = i; + CornersB.Clear(); + CornersT.Clear(); + VerticesB.Clear(); + VerticesT.Clear(); + + + int dirpy, dirny, dirpx; + switch (dir) //lookup perpendicular directions + { + default: + case 0: dirpy = 3; dirny = 1; dirpx = 2; break; + case 1: dirpy = 0; dirny = 2; dirpx = 3; break; + case 2: dirpy = 1; dirny = 3; dirpx = 0; break; + case 3: dirpy = 2; dirny = 0; dirpx = 1; break; + } + + int ti = i; + while (CanPolyIncludeNext(ref vpl, plt, ti, dirpx, out ti)) + { + qi = ti; //make sure to start at the leftmost point... + } + + + //find the bottom and top leftmost points to start the first col, and fill the col + int qib = qi; + int qit = qi; + int dyb = 0; + int dyt = 0; + while (CanPolyIncludeNext(ref vpl, plt, qib, dirpy, out ti)) + { + Vertices[ti].PolyID = pid; + qib = ti; + dyb++; + } + while (CanPolyIncludeNext(ref vpl, plt, qit, dirny, out ti)) + { + Vertices[ti].PolyID = pid; + qit = ti; + dyt++; + } + int dy = dyb + dyt; //total distance between bottom and top + + CornersB.Add(qib); + CornersT.Add(qit); + + + + //find bottom and top slopes + float slopeb = FindSlope(ref vpl, plt, qib, dir, dirpy, dirny, dyb > 0 ? dyb : 100); + float slopet = FindSlope(ref vpl, plt, qit, dir, dirny, dirpy, dyt > 0 ? dyt : 100); + int syob = MaxOffsetFromSlope(slopeb); + int syot = MaxOffsetFromSlope(slopet); + + //find the next bottom and top indexes, step by the max offset + int nqib = qib; + int nqit = qit; + int ndyb = 0; + int ndyt = 0; + + + + + } + + + + private int FindNextID(ref Plane vpl, float plt, int i, int dirnx, int dirny, int dirpy, float slope, out int dx, out int dy) + { + //find the next vertex along the slope in the given direction + + int ti = i; + int qi = i; + + bool cgx = CanPolyIncludeNext(ref vpl, plt, i, dirnx, out ti); + + + + + dx = 0; + dy = 0; + return i; + } + private int MaxOffsetFromSlope(float s) { @@ -916,6 +996,11 @@ namespace CodeWalker.Project.Panels } private bool CanPolyIncludeNext(ref Plane vplane, float plthresh, int i, int dir, out int ni) { + if ((i < 0) || (i >= Vertices.Length)) + { + ni = -1; + return false; + } bool ct; switch (dir) { @@ -1005,14 +1090,9 @@ namespace CodeWalker.Project.Panels int ti = i; int qi = i; float slope = maxslope; - //int diry = (maxslope > 0) ? dirny : dirpy; - //int incy = (maxslope > 0) ? 1 : -1; - int sy = (int)Math.Abs(slope); - bool cgx = CanPolyIncludeNext(ref vpl, plt, i, dirnx, out ti); - if (cgx && (slope >= 0)) //new slope should be >=0 { int dy0 = FindPolyEdgeDist(ref vpl, plt, qi, dirny); From 462e464c2ff34c04c5aff46448cb78992e037bd0 Mon Sep 17 00:00:00 2001 From: Soloman Date: Mon, 3 Dec 2018 03:54:04 -0500 Subject: [PATCH 022/158] Ability to edit YTYP files and MLO Entity Defintions + Revisions to grass brush (#33) * - Add ability to edit/add ytyp files to project. - Add ability to edit/add ytyp archetype files to ytyp. - Add ability to add/remove entities from mlo archetype defs. - Add ability to save ytyp files. - Add dialog popup before optimizing grass batches. - Fix grass batches not being selected when chaning selection in project explorer. - Merged with upstream/master. - Squashed last 4 commits for PR cleanliness. * Fixed windows forms reference error. * - Added error checking to deleting mlo entities. - Fixed various bugs with deleting mlo entities. - Fixed edit archetype panel Asset Type box. - Removed redundant/unnecessary. - Removed backwards references between MCEntityDef and YmapEntityDef. All ymap entity to mcentity references are grabbed using indecies in the MloInstanceData class. - Fixed "YmapMenu" not showing when selecting entities/mlo entities in project form. Current bugs: - Loading a ytyp file -- mlo entities are not editiable, and are created in the world. - entitysets are not editable (properly). - Removing an mloinstancedef from a ymap does not delete the mlo instance's gizmo from the world, and it's still selectable. (Although all references are lost, and I believe collected by the GC?) * - Moved archetype initialization methods YmapFile.InitYmapEntityArchetypes(GameFileCache gfc) and MloInstanceData.InitYmapEntityArchetypes(GameFileCache gfc) - Added ability to load mlo instance defs through ymap files. - Fixed add method for mlo archetypes. * - Removed SetOrientationInv. - Removed unreachable code + updated comment. - Renamed CreateEntity to CreateYmapEntity, and renamed params for consistency. * Split calls to CreateYmapEntity() and MloArchetype.AddEntity(). * Fixed redundant rotation inversions. * - Added ability to select rooms. - Changed tree view grouping for mlo entities. - Fixed projectexplorer selection bugs. - Added ability to toggle mlo entity sets. - Fixed some change events when editing archetypes. --- .../GameFiles/FileTypes/YmapFile.cs | 174 +++-- .../GameFiles/FileTypes/YtypFile.cs | 247 +++---- CodeWalker.Core/GameFiles/GameFileCache.cs | 115 +--- .../GameFiles/MetaTypes/Archetype.cs | 426 +++++++++++- .../GameFiles/MetaTypes/MetaTypes.cs | 23 +- CodeWalker.Core/Utils/Vectors.cs | 5 + CodeWalker.csproj | 18 + .../Panels/EditYmapEntityPanel.Designer.cs | 20 +- Project/Panels/EditYmapEntityPanel.cs | 131 +++- Project/Panels/EditYmapGrassPanel.cs | 8 + .../EditYtypArchetypeMloRoomPanel.Designer.cs | 173 +++++ .../Panels/EditYtypArchetypeMloRoomPanel.cs | 137 ++++ .../Panels/EditYtypArchetypeMloRoomPanel.resx | 409 ++++++++++++ .../Panels/EditYtypArchetypePanel.Designer.cs | 632 ++++++++++++++++++ Project/Panels/EditYtypArchetypePanel.cs | 353 ++++++++++ Project/Panels/EditYtypArchetypePanel.resx | 140 ++++ Project/Panels/EditYtypPanel.Designer.cs | 16 +- Project/Panels/ProjectExplorerPanel.cs | 220 +++++- Project/ProjectFile.cs | 3 +- Project/ProjectForm.Designer.cs | 37 +- Project/ProjectForm.cs | 593 ++++++++++++++-- Project/ProjectFormOLD.cs | 6 +- Rendering/Renderer.cs | 59 +- Utils/MapUtils.cs | 18 +- WorldForm.cs | 62 +- 25 files changed, 3559 insertions(+), 466 deletions(-) create mode 100644 Project/Panels/EditYtypArchetypeMloRoomPanel.Designer.cs create mode 100644 Project/Panels/EditYtypArchetypeMloRoomPanel.cs create mode 100644 Project/Panels/EditYtypArchetypeMloRoomPanel.resx create mode 100644 Project/Panels/EditYtypArchetypePanel.Designer.cs create mode 100644 Project/Panels/EditYtypArchetypePanel.cs create mode 100644 Project/Panels/EditYtypArchetypePanel.resx diff --git a/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs index 839e411..81b440b 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs @@ -1165,6 +1165,41 @@ namespace CodeWalker.GameFiles if (change) physicsDictionaries = physDict.ToArray(); } + public void InitYmapEntityArchetypes(GameFileCache gfc) + { + if (AllEntities != null) + { + for (int i = 0; i < AllEntities.Length; i++) + { + var ent = AllEntities[i]; + var arch = gfc.GetArchetype(ent.CEntityDef.archetypeName); + ent.SetArchetype(arch); + if (ent.IsMlo) ent.MloInstance.InitYmapEntityArchetypes(gfc); + } + } + if (GrassInstanceBatches != null) + { + for (int i = 0; i < GrassInstanceBatches.Length; i++) + { + var batch = GrassInstanceBatches[i]; + batch.Archetype = gfc.GetArchetype(batch.Batch.archetypeName); + } + } + + if (TimeCycleModifiers != null) + { + for (int i = 0; i < TimeCycleModifiers.Length; i++) + { + var tcm = TimeCycleModifiers[i]; + World.TimecycleMod wtcm; + if (gfc.TimeCycleModsDict.TryGetValue(tcm.CTimeCycleModifier.name.Hash, out wtcm)) + { + tcm.TimeCycleModData = wtcm; + } + } + } + + } private static uint SetBit(uint value, int bit) { @@ -1194,7 +1229,7 @@ namespace CodeWalker.GameFiles public bool IsMlo { get; set; } public MloInstanceData MloInstance { get; set; } public YmapEntityDef MloParent { get; set; } - public MCMloEntitySet MloEntitySet { get; set; } + public MloInstanceEntitySet MloEntitySet { get; set; } public Vector3 MloRefPosition { get; set; } public Quaternion MloRefOrientation { get; set; } public MetaWrapper[] Extensions { get; set; } @@ -1297,56 +1332,57 @@ namespace CodeWalker.GameFiles { MloInstance = new MloInstanceData(); } - MloInstance.CreateYmapEntities(this, mloa); + if (mloa != null) + { + if (!IsMlo) + { + IsMlo = true; + MloInstance._Instance = new CMloInstanceDef { CEntityDef = _CEntityDef }; + + List mloEntities = Ymap.MloEntities?.ToList() ?? new List(); + mloEntities.Add(this); + Ymap.MloEntities = mloEntities.ToArray(); + } + + MloInstance.CreateYmapEntities(this, mloa); + } if (BSRadius == 0.0f) { BSRadius = CEntityDef.lodDist;//need something so it doesn't get culled... } } + else if (IsMlo) // archetype is no longer an mlo + { + IsMlo = false; + MloInstance = null; + if (Ymap.MloEntities != null) + { + List mloEntities = Ymap.MloEntities.ToList(); + if (mloEntities.Remove(this)) + { + Ymap.MloEntities = mloEntities.ToArray(); + } + } + } } - } public void SetPosition(Vector3 pos) { + Position = pos; if (MloParent != null) { - //TODO: SetPosition for interior entities! - Position = pos; - var inst = MloParent.MloInstance; - if (inst != null) - { - //transform world position into mlo space - //MloRefPosition = ... - //MloRefOrientation = ... - } + _CEntityDef.position = Quaternion.Normalize(Quaternion.Invert(MloParent.Orientation)).Multiply(pos - MloParent.Position); + MloRefPosition = _CEntityDef.position; + UpdateBB(); + UpdateMloArchetype(); } else { - Position = pos; _CEntityDef.position = pos; - - if (Archetype != null) - { - BSCenter = Orientation.Multiply(Archetype.BSCenter) * Scale; - } - if ((Archetype != null) && (Orientation == Quaternion.Identity)) - { - BBMin = (Archetype.BBMin * Scale) + Position; - BBMax = (Archetype.BBMax * Scale) + Position; - } - else - { - BBMin = Position - (BSRadius); - BBMax = Position + (BSRadius); - ////not ideal: should transform all 8 corners! - } - - - - UpdateWidgetPosition(); + UpdateBB(); } @@ -1356,40 +1392,51 @@ namespace CodeWalker.GameFiles MloInstance.UpdateEntities(); } + UpdateWidgetPosition(); } - public void SetOrientation(Quaternion ori) + private void UpdateBB() { - Quaternion inv = Quaternion.Normalize(Quaternion.Invert(ori)); - Orientation = ori; - _CEntityDef.rotation = new Vector4(inv.X, inv.Y, inv.Z, inv.W); - - if (MloInstance != null) - { - MloInstance.SetOrientation(ori); - } - - if (Archetype != null) { BSCenter = Orientation.Multiply(Archetype.BSCenter) * Scale; } - - UpdateWidgetPosition(); - UpdateWidgetOrientation(); + if ((Archetype != null) && (Orientation == Quaternion.Identity)) + { + BBMin = (Archetype.BBMin * Scale) + Position; + BBMax = (Archetype.BBMax * Scale) + Position; + } + else + { + BBMin = Position - (BSRadius); + BBMax = Position + (BSRadius); + ////not ideal: should transform all 8 corners! + } } - public void SetOrientationInv(Quaternion inv) + + public void SetOrientation(Quaternion ori, bool inverse = false) { - Quaternion ori = Quaternion.Normalize(Quaternion.Invert(inv)); - Orientation = ori; - _CEntityDef.rotation = new Vector4(inv.X, inv.Y, inv.Z, inv.W); + if (MloParent != null) + { + var mloInv = Quaternion.Normalize(Quaternion.Invert(MloParent.Orientation)); + Quaternion rel = Quaternion.Normalize(Quaternion.Multiply(mloInv, ori)); + Quaternion inv = Quaternion.Normalize(Quaternion.Invert(rel)); + Orientation = ori; + _CEntityDef.rotation = inv.ToVector4(); + } + else + { + Quaternion inv = inverse ? ori : Quaternion.Normalize(Quaternion.Invert(ori)); + ori = inverse ? Quaternion.Normalize(Quaternion.Invert(ori)) : ori; + Orientation = ori; + _CEntityDef.rotation = inv.ToVector4(); + } if (MloInstance != null) { MloInstance.SetOrientation(ori); } - if (Archetype != null) { BSCenter = Orientation.Multiply(Archetype.BSCenter) * Scale; @@ -1404,14 +1451,35 @@ namespace CodeWalker.GameFiles Scale = new Vector3(s.X, s.X, s.Z); _CEntityDef.scaleXY = s.X; _CEntityDef.scaleZ = s.Z; + + MloInstanceData mloInstance = MloParent?.MloInstance; + if (mloInstance != null) + { + var mcEntity = mloInstance.TryGetArchetypeEntity(this); + if (mcEntity != null) + { + mcEntity._Data.scaleXY = s.X; + mcEntity._Data.scaleZ = s.Z; + } + } if (Archetype != null) { float smax = Math.Max(Scale.X, Scale.Z); BSRadius = Archetype.BSRadius * smax; } + SetPosition(Position);//update the BB } + private void UpdateMloArchetype() + { + if (!(MloParent.Archetype is MloArchetype mloArchetype)) return; + if (Index >= mloArchetype.entities.Length) return; + + MCEntityDef entity = mloArchetype.entities[Index]; + entity._Data.position = _CEntityDef.position; + entity._Data.rotation = _CEntityDef.rotation; + } public void SetPivotPosition(Vector3 pos) @@ -1787,7 +1855,7 @@ namespace CodeWalker.GameFiles } private List[] SplitGrass( - IReadOnlyList points, + IReadOnlyList points, BoundingBox batchAABB) { var pointGroup = new List[2]; diff --git a/CodeWalker.Core/GameFiles/FileTypes/YtypFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YtypFile.cs index 08a312c..7160363 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YtypFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YtypFile.cs @@ -21,8 +21,8 @@ namespace CodeWalker.GameFiles public uint NameHash { get; set; } public string[] Strings { get; set; } - - public CMapTypes CMapTypes { get; set; } + public CMapTypes _CMapTypes; + public CMapTypes CMapTypes { get { return _CMapTypes; } set { _CMapTypes = value; } } public Archetype[] AllArchetypes { get; set; } @@ -50,6 +50,111 @@ namespace CodeWalker.GameFiles return (RpfFileEntry != null) ? RpfFileEntry.Name : string.Empty; } + public byte[] Save() + { + MetaBuilder mb = new MetaBuilder(); + + var mdb = mb.EnsureBlock(MetaName.CMapTypes); + + CMapTypes mapTypes = _CMapTypes; + + if (Extensions == null || Extensions.Length <= 0) + mapTypes.extensions = new Array_StructurePointer(); + else + mapTypes.extensions = mb.AddWrapperArrayPtr(Extensions); + + if ((AllArchetypes != null) && (AllArchetypes.Length > 0)) + { + for (int i = 0; i < AllArchetypes.Length; i++) + { + var arch = AllArchetypes[i]; //save the extensions first.. + if (arch._BaseArchetypeDef.extensions.Count1 > 0) + { + arch._BaseArchetypeDef.extensions = mb.AddWrapperArrayPtr(arch.Extensions); + } + } + + MetaPOINTER[] ptrs = new MetaPOINTER[AllArchetypes.Length]; + for (int i = 0; i < AllArchetypes.Length; i++) + { + var arch = AllArchetypes[i]; + switch (arch) + { + case TimeArchetype t: + ptrs[i] = mb.AddItemPtr(MetaName.CTimeArchetypeDef, t._TimeArchetypeDef); + break; + case MloArchetype m: + try + { + m._MloArchetypeDef._MloArchetypeDef.entities = mb.AddWrapperArrayPtr(m.entities); + m._MloArchetypeDef._MloArchetypeDef.rooms = mb.AddWrapperArray(m.rooms); + m._MloArchetypeDef._MloArchetypeDef.portals = mb.AddWrapperArray(m.portals); + m._MloArchetypeDef._MloArchetypeDef.entitySets = mb.AddWrapperArray(m.entitySets); + m._MloArchetypeDef._MloArchetypeDef.timeCycleModifiers = mb.AddItemArrayPtr(MetaName.CTimeCycleModifier, m.timeCycleModifiers); + } + catch/* (Exception e)*/ + { + //todo: log save error. + } + ptrs[i] = mb.AddItemPtr(MetaName.CMloArchetypeDef, m._MloArchetypeDef); + break; + case Archetype a: + ptrs[i] = mb.AddItemPtr(MetaName.CBaseArchetypeDef, a._BaseArchetypeDef); + break; + } + } + mapTypes.archetypes = mb.AddPointerArray(ptrs); + } + else + { + mapTypes.archetypes = new Array_StructurePointer(); + } + + if (CompositeEntityTypes != null && CompositeEntityTypes.Length > 0) + { + var cptrs = new MetaPOINTER[CompositeEntityTypes.Length]; + + for (int i = 0; i < cptrs.Length; i++) + { + var cet = CompositeEntityTypes[i]; + cptrs[i] = mb.AddItemPtr(MetaName.CCompositeEntityType, cet); + } + mapTypes.compositeEntityTypes = mb.AddItemArrayPtr(MetaName.CCompositeEntityType, cptrs); + } + + mapTypes.name = NameHash; + mapTypes.dependencies = new Array_uint(); // is this never used? possibly a todo? + + mb.AddStructureInfo(MetaName.CMapTypes); + mb.AddStructureInfo(MetaName.CBaseArchetypeDef); + mb.AddStructureInfo(MetaName.CMloArchetypeDef); + mb.AddStructureInfo(MetaName.CTimeArchetypeDef); + mb.AddStructureInfo(MetaName.CCompositeEntityType); + mb.AddStructureInfo(MetaName.CMloRoomDef); + mb.AddStructureInfo(MetaName.CMloPortalDef); + mb.AddStructureInfo(MetaName.CMloEntitySet); + + if ((AllArchetypes != null && AllArchetypes.Length > 0)) + { + mb.AddEnumInfo((MetaName)1991964615); // ASSET_TYPE_ + } + + if ((AllArchetypes != null) && (AllArchetypes.Any(x => x is MloArchetype m && m.entities.Length > 0))) + { + mb.AddStructureInfo(MetaName.CEntityDef); + mb.AddEnumInfo((MetaName)1264241711); //LODTYPES_ + mb.AddEnumInfo((MetaName)648413703); //PRI_ + } + + mb.AddItem(MetaName.CMapTypes, mapTypes); + + Meta meta = mb.GetMeta(); + byte[] data = ResourceBuilder.Build(meta, 2); + + HasChanged = false; + + return data; + } public void Load(byte[] data) { @@ -94,12 +199,12 @@ namespace CodeWalker.GameFiles Meta = rd.ReadBlock(); - CMapTypes = MetaTypes.GetTypedData(Meta, MetaName.CMapTypes); + _CMapTypes = MetaTypes.GetTypedData(Meta, MetaName.CMapTypes); List allarchs = new List(); - var ptrs = MetaTypes.GetPointerArray(Meta, CMapTypes.archetypes); + var ptrs = MetaTypes.GetPointerArray(Meta, _CMapTypes.archetypes); if (ptrs != null) { for (int i = 0; i < ptrs.Length; i++) @@ -151,7 +256,8 @@ namespace CodeWalker.GameFiles AllArchetypes = allarchs.ToArray(); - Extensions = MetaTypes.GetExtensions(Meta, CMapTypes.extensions); + Extensions = MetaTypes.GetExtensions(Meta, _CMapTypes.extensions); + if (Extensions != null) { } @@ -163,11 +269,11 @@ namespace CodeWalker.GameFiles //CEntityDefs = MetaTypes.GetTypedDataArray(Meta, MetaName.CEntityDef); - CompositeEntityTypes = MetaTypes.ConvertDataArray(Meta, MetaName.CCompositeEntityType, CMapTypes.compositeEntityTypes); + CompositeEntityTypes = MetaTypes.ConvertDataArray(Meta, MetaName.CCompositeEntityType, _CMapTypes.compositeEntityTypes); if (CompositeEntityTypes != null) { } - NameHash = CMapTypes.name; + NameHash = _CMapTypes.name; if (NameHash == 0) { int ind = entry.NameLower.LastIndexOf('.'); @@ -241,122 +347,39 @@ namespace CodeWalker.GameFiles } - public void AddArchetype(Archetype arch) + + public void AddArchetype(Archetype archetype) { - List allArchs = new List(); + if (AllArchetypes == null) + AllArchetypes = new Archetype[0]; - if (AllArchetypes != null) - allArchs.AddRange(AllArchetypes); - - allArchs.Add(arch); - - AllArchetypes = allArchs.ToArray(); + List archetypes = AllArchetypes.ToList(); + archetype.Ytyp = this; + archetypes.Add(archetype); + AllArchetypes = archetypes.ToArray(); } - public void RemoveArchetype(Archetype arch) + public Archetype AddArchetype() { - List allArchs = new List(); - - if (AllArchetypes != null) - allArchs.AddRange(AllArchetypes); - - if (allArchs.Contains(arch)) - allArchs.Remove(arch); - - AllArchetypes = allArchs.ToArray(); + var a = new Archetype(); + a._BaseArchetypeDef.assetType = Unk_1991964615.ASSET_TYPE_DRAWABLE; + a._BaseArchetypeDef.lodDist = 60; + a._BaseArchetypeDef.hdTextureDist = 15; + a.Ytyp = this; + AddArchetype(a); + return a; } - public byte[] Save() + public bool RemoveArchetype(Archetype archetype) { - MetaBuilder mb = new MetaBuilder(); - - var mdb = mb.EnsureBlock(MetaName.CMapTypes); - - CMapTypes mapTypes = CMapTypes; - - if((AllArchetypes != null) && (AllArchetypes.Length > 0)) + List archetypes = AllArchetypes.ToList(); + if (archetypes.Remove(archetype)) { - MetaPOINTER[] archPtrs = new MetaPOINTER[AllArchetypes.Length]; - - for(int i=0; i 0)) - { - MetaPOINTER[] cetPtrs = new MetaPOINTER[CompositeEntityTypes.Length] ; - - for (int i = 0; i < cetPtrs.Length; i++) - { - var cet = CompositeEntityTypes[i]; - cetPtrs[i] = mb.AddItemPtr(MetaName.CCompositeEntityType, cet); - } - - mapTypes.compositeEntityTypes = mb.AddItemArrayPtr(MetaName.CCompositeEntityType, cetPtrs); - } - - mb.AddItem(MetaName.CMapTypes, mapTypes); - - mb.AddStructureInfo(MetaName.CMapTypes); - mb.AddStructureInfo(MetaName.CBaseArchetypeDef); - mb.AddStructureInfo(MetaName.CMloArchetypeDef); - mb.AddStructureInfo(MetaName.CTimeArchetypeDef); - mb.AddStructureInfo(MetaName.CMloRoomDef); - mb.AddStructureInfo(MetaName.CMloPortalDef); - mb.AddStructureInfo(MetaName.CMloEntitySet); - mb.AddStructureInfo(MetaName.CCompositeEntityType); - - mb.AddEnumInfo((MetaName)1991964615); - mb.AddEnumInfo((MetaName)1294270217); - mb.AddEnumInfo((MetaName)1264241711); - mb.AddEnumInfo((MetaName)648413703); - mb.AddEnumInfo((MetaName)3573596290); - mb.AddEnumInfo((MetaName)700327466); - mb.AddEnumInfo((MetaName)193194928); - mb.AddEnumInfo((MetaName)2266515059); - - Meta = mb.GetMeta(); - - byte[] data = ResourceBuilder.Build(Meta, 2); //ymap is version 2... - - return data; - + return false; } - } diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index 7e052ec..253f40f 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -1804,116 +1804,6 @@ namespace CodeWalker.GameFiles } - public void InitYmapEntityArchetypes(YmapFile file) - { - if (file == null) return; - if (file.AllEntities != null) - { - for (int i = 0; i < file.AllEntities.Length; i++) - { - var ent = file.AllEntities[i]; - var arch = GetArchetype(ent.CEntityDef.archetypeName); - ent.SetArchetype(arch); - - if (ent.MloInstance != null) - { - var entities = ent.MloInstance.Entities; - if (entities != null) - { - for (int j = 0; j < entities.Length; j++) - { - var ient = entities[j]; - var iarch = GetArchetype(ient.CEntityDef.archetypeName); - ient.SetArchetype(iarch); - if (iarch == null) - { } //can't find archetype - des stuff eg {des_prologue_door} - } - - - //update archetype room AABB's.. bad to have this here? where else to put it? - var mloa = arch as MloArchetype; - if (mloa != null) - { - Vector3 mlobbmin = Vector3.Zero; - Vector3 mlobbmax = Vector3.Zero; - Vector3[] c = new Vector3[8]; - var rooms = mloa.rooms; - if (rooms != null) - { - for (int j = 0; j < rooms.Length; j++) - { - var room = rooms[j]; - if ((room.AttachedObjects == null) || (room.AttachedObjects.Length == 0)) continue; - Vector3 min = new Vector3(float.MaxValue); - Vector3 max = new Vector3(float.MinValue); - for (int k = 0; k < room.AttachedObjects.Length; k++) - { - var objid = room.AttachedObjects[k]; - if (objid < entities.Length) - { - var rooment = entities[objid]; - if ((rooment != null) && (rooment.Archetype != null)) - { - var earch = rooment.Archetype; - var pos = rooment._CEntityDef.position; - var ori = rooment.Orientation; - Vector3 abmin = earch.BBMin * rooment.Scale; //entity box - Vector3 abmax = earch.BBMax * rooment.Scale; - c[0] = abmin; - c[1] = new Vector3(abmin.X, abmin.Y, abmax.Z); - c[2] = new Vector3(abmin.X, abmax.Y, abmin.Z); - c[3] = new Vector3(abmin.X, abmax.Y, abmax.Z); - c[4] = new Vector3(abmax.X, abmin.Y, abmin.Z); - c[5] = new Vector3(abmax.X, abmin.Y, abmax.Z); - c[6] = new Vector3(abmax.X, abmax.Y, abmin.Z); - c[7] = abmax; - for (int n = 0; n < 8; n++) - { - Vector3 corn = ori.Multiply(c[n]) + pos; - min = Vector3.Min(min, corn); - max = Vector3.Max(max, corn); - } - } - } - } - room.BBMin_CW = min; - room.BBMax_CW = max; - mlobbmin = Vector3.Min(mlobbmin, min); - mlobbmax = Vector3.Max(mlobbmax, max); - } - } - mloa.BBMin = mlobbmin; - mloa.BBMax = mlobbmax; - } - } - } - - - } - } - if (file.GrassInstanceBatches != null) - { - for (int i = 0; i < file.GrassInstanceBatches.Length; i++) - { - var batch = file.GrassInstanceBatches[i]; - batch.Archetype = GetArchetype(batch.Batch.archetypeName); - } - } - - if (file.TimeCycleModifiers != null) - { - for (int i = 0; i < file.TimeCycleModifiers.Length; i++) - { - var tcm = file.TimeCycleModifiers[i]; - World.TimecycleMod wtcm; - if (TimeCycleModsDict.TryGetValue(tcm.CTimeCycleModifier.name.Hash, out wtcm)) - { - tcm.TimeCycleModData = wtcm; - } - } - } - - } @@ -1955,8 +1845,9 @@ namespace CodeWalker.GameFiles if (req.Loaded) AddTextureLookups(req as YtdFile); break; case GameFileType.Ymap: - req.Loaded = LoadFile(req as YmapFile); - if (req.Loaded) InitYmapEntityArchetypes(req as YmapFile); + YmapFile y = req as YmapFile; + req.Loaded = LoadFile(y); + if (req.Loaded) y.InitYmapEntityArchetypes(this); break; case GameFileType.Yft: req.Loaded = LoadFile(req as YftFile); diff --git a/CodeWalker.Core/GameFiles/MetaTypes/Archetype.cs b/CodeWalker.Core/GameFiles/MetaTypes/Archetype.cs index f9392c7..ebd4de1 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/Archetype.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/Archetype.cs @@ -14,7 +14,7 @@ namespace CodeWalker.GameFiles public virtual MetaName Type => MetaName.CBaseArchetypeDef; public CBaseArchetypeDef _BaseArchetypeDef; - public CBaseArchetypeDef BaseArchetypeDef { get { return _BaseArchetypeDef; } set { _BaseArchetypeDef = value; } } + public CBaseArchetypeDef BaseArchetypeDef => _BaseArchetypeDef; // for browsing. public MetaHash Hash { get; set; } public YtypFile Ytyp { get; set; } @@ -31,16 +31,16 @@ namespace CodeWalker.GameFiles - public string Name + public string Name { - get + get { return _BaseArchetypeDef.name.ToString(); } } - public string AssetName + public string AssetName { - get + get { return _BaseArchetypeDef.assetName.ToString(); } @@ -49,7 +49,7 @@ namespace CodeWalker.GameFiles protected void InitVars(ref CBaseArchetypeDef arch) { - BaseArchetypeDef = arch; + _BaseArchetypeDef = arch; Hash = arch.assetName; if (Hash.Hash == 0) Hash = arch.name; DrawableDict = arch.drawableDictionary; @@ -83,10 +83,8 @@ namespace CodeWalker.GameFiles public class TimeArchetype : Archetype { public override MetaName Type => MetaName.CTimeArchetypeDef; - - public CTimeArchetypeDefData _TimeArchetypeDef; - public CTimeArchetypeDefData TimeArchetypeDef { get { return _TimeArchetypeDef; } set { _TimeArchetypeDef = value; } } - + public CTimeArchetypeDef _TimeArchetypeDef; + public CTimeArchetypeDef TimeArchetypeDef => _TimeArchetypeDef; // for browsing. public uint TimeFlags { get; set; } public bool[] ActiveHours { get; set; } @@ -98,9 +96,9 @@ namespace CodeWalker.GameFiles { Ytyp = ytyp; InitVars(ref arch._BaseArchetypeDef); - TimeArchetypeDef = arch.TimeArchetypeDef; + _TimeArchetypeDef = arch; - TimeFlags = _TimeArchetypeDef.timeFlags; + TimeFlags = arch.TimeArchetypeDef.timeFlags; ActiveHours = new bool[24]; ActiveHoursText = new string[24]; for (int i = 0; i < 24; i++) @@ -128,11 +126,10 @@ namespace CodeWalker.GameFiles { public override MetaName Type => MetaName.CMloArchetypeDef; - public CMloArchetypeDef _BaseMloArchetypeDef; - public CMloArchetypeDef BaseMloArchetypeDef { get { return _BaseMloArchetypeDef; } set { _BaseMloArchetypeDef = value; } } - public CMloArchetypeDefData _MloArchetypeDef; - public CMloArchetypeDefData MloArchetypeDef { get { return _MloArchetypeDef; } set { _MloArchetypeDef = value; } } + public CMloArchetypeDef MloArchetypeDef => _MloArchetypeDef; // for browsing. + public CMloArchetypeDef _MloArchetypeDef; + public CMloArchetypeDefData _MloArchetypeDefData; public MCEntityDef[] entities { get; set; } public MCMloRoomDef[] rooms { get; set; } @@ -140,37 +137,147 @@ namespace CodeWalker.GameFiles public MCMloEntitySet[] entitySets { get; set; } public CMloTimeCycleModifier[] timeCycleModifiers { get; set; } + public void Init(YtypFile ytyp, ref CMloArchetypeDef arch) { Ytyp = ytyp; InitVars(ref arch._BaseArchetypeDef); - BaseMloArchetypeDef = arch; - MloArchetypeDef = arch.MloArchetypeDef; + _MloArchetypeDef = arch; + _MloArchetypeDefData = arch.MloArchetypeDef; + } + + public bool AddEntity(YmapEntityDef ent, int roomIndex) + { + if (ent == null) return false; + + // entity already exists in our array. so we'll just add + // it to the instanced entities list and continue. + MloInstanceData mloInstance = ent.MloParent?.MloInstance; + MCEntityDef ymcent = mloInstance?.TryGetArchetypeEntity(ent); + if (ymcent != null) + { + return true; + } + + if (roomIndex > rooms.Length) + { + throw new ArgumentOutOfRangeException($"Room index {roomIndex} exceeds the amount of rooms in {Name}."); + } + + var mcEntityDef = new MCEntityDef(ref ent._CEntityDef, this); + + // Add the new entity def to the entities list. + AddEntity(ent, mcEntityDef); + + // Update the attached objects in the room index specified. + AttachEntityToRoom(ent, roomIndex); + return true; + } + + // attaches the specified ymap entity index to the room at roomIndex. + private void AttachEntityToRoom(YmapEntityDef ent, int roomIndex) + { + if (roomIndex > rooms.Length) + { + return; // the room index is bigger than the rooms we have... + } + var attachedObjs = rooms[roomIndex].AttachedObjects?.ToList() ?? new List(); + attachedObjs.Add((uint)ent.Index); + rooms[roomIndex].AttachedObjects = attachedObjs.ToArray(); + } + + // Adds an entity to the entities array and then set's the index of the + // ymap entity to the index of the new MCEntityDef. + private void AddEntity(YmapEntityDef ent, MCEntityDef mcEntityDef) + { + if (ent == null || mcEntityDef == null) return; // no entity?... + // initialize the array. + if (entities == null) entities = new MCEntityDef[0]; + + List entList = entities.ToList(); + entList.Add(mcEntityDef); + ent.Index = entList.IndexOf(mcEntityDef); + entities = entList.ToArray(); + } + + public bool RemoveEntity(YmapEntityDef ent) + { + if (ent.Index >= entities.Length) return false; + + MCEntityDef delent = entities[ent.Index]; + MloInstanceData inst = ent.MloParent?.MloInstance; + if (inst == null) return false; + + if (delent != null) + { + MCEntityDef[] newentities = new MCEntityDef[entities.Length - 1]; + bool didDel = false; + int index = 0; + int delIndex = 0; + for (int i = 0; i < entities.Length; i++) + { + if (entities[i] == delent) + { + delIndex = i; + didDel = true; + continue; + } + + newentities[index] = entities[i]; + YmapEntityDef ymapEntityDef = inst.TryGetYmapEntity(newentities[index]); + if (ymapEntityDef != null) ymapEntityDef.Index = index; + index++; + } + entities = newentities; + + if (didDel) FixRoomIndexes(delIndex); + return didDel; + } + + return false; + } + + private void FixRoomIndexes(int deletedIndex) + { + foreach (var room in rooms) + { + List newAttachedObjects = new List(); + if (room.AttachedObjects == null) + continue; + foreach (var objIndex in room.AttachedObjects) + { + if (objIndex == deletedIndex) continue; + if (objIndex > deletedIndex) + newAttachedObjects.Add(objIndex - 1); // move the index back so it matches the index in the entitiy array. + else newAttachedObjects.Add(objIndex); // else just add the index to the attached objects. + } + room.AttachedObjects = newAttachedObjects.ToArray(); + } } public void LoadChildren(Meta meta) { - var centities = MetaTypes.ConvertDataArray(meta, MetaName.CEntityDef, _MloArchetypeDef.entities); + var centities = MetaTypes.ConvertDataArray(meta, MetaName.CEntityDef, _MloArchetypeDefData.entities); if (centities != null) { entities = new MCEntityDef[centities.Length]; for (int i = 0; i < centities.Length; i++) { - entities[i] = new MCEntityDef(meta, centities[i]); + entities[i] = new MCEntityDef(meta, ref centities[i]) { Archetype = this }; } } - var crooms = MetaTypes.ConvertDataArray(meta, MetaName.CMloRoomDef, _MloArchetypeDef.rooms); + var crooms = MetaTypes.ConvertDataArray(meta, MetaName.CMloRoomDef, _MloArchetypeDefData.rooms); if (crooms != null) { rooms = new MCMloRoomDef[crooms.Length]; for (int i = 0; i < crooms.Length; i++) { - rooms[i] = new MCMloRoomDef(meta, crooms[i]); + rooms[i] = new MCMloRoomDef(meta, crooms[i]) { Archetype = this, Index = i }; } } - var cportals = MetaTypes.ConvertDataArray(meta, MetaName.CMloPortalDef, _MloArchetypeDef.portals); + var cportals = MetaTypes.ConvertDataArray(meta, MetaName.CMloPortalDef, _MloArchetypeDefData.portals); if (cportals != null) { portals = new MCMloPortalDef[cportals.Length]; @@ -180,7 +287,7 @@ namespace CodeWalker.GameFiles } } - var centitySets = MetaTypes.ConvertDataArray(meta, MetaName.CMloEntitySet, _MloArchetypeDef.entitySets); + var centitySets = MetaTypes.ConvertDataArray(meta, MetaName.CMloEntitySet, _MloArchetypeDefData.entitySets); if (centitySets != null) { entitySets = new MCMloEntitySet[centitySets.Length]; @@ -191,14 +298,44 @@ namespace CodeWalker.GameFiles } - timeCycleModifiers = MetaTypes.ConvertDataArray(meta, MetaName.CMloTimeCycleModifier, _MloArchetypeDef.timeCycleModifiers); + timeCycleModifiers = MetaTypes.ConvertDataArray(meta, MetaName.CMloTimeCycleModifier, _MloArchetypeDefData.timeCycleModifiers); } + public MCMloRoomDef GetEntityRoom(MCEntityDef ent) + { + int objectIndex = -1; + for (int i = 0; i < entities.Length; i++) + { + MCEntityDef e = entities[i]; + if (e == ent) + { + objectIndex = i; + break; + } + } + if (objectIndex == -1) return null; + + MCMloRoomDef room = null; + for (int i = 0; i < rooms.Length; i++) + { + MCMloRoomDef r = rooms[i]; + for (int j = 0; j < r.AttachedObjects.Length; j++) + { + uint ind = r.AttachedObjects[j]; + if (ind == objectIndex) + { + room = r; + break; + } + } + if (room != null) break; + } + + return room; + } } - - [TypeConverter(typeof(ExpandableObjectConverter))] public class MloInstanceData { @@ -208,7 +345,12 @@ namespace CodeWalker.GameFiles public uint[] defaultEntitySets { get; set; } public YmapEntityDef[] Entities { get; set; } + public Dictionary EntitySets { get; set; } + public MloInstanceData() + { + EntitySets = new Dictionary(); + } public void CreateYmapEntities(YmapEntityDef owner, MloArchetype mloa) { @@ -234,27 +376,182 @@ namespace CodeWalker.GameFiles var entitySet = entitySets[i]; if (entitySet.Entities != null) { + EntitySets[entitySet._Data.name] = new MloInstanceEntitySet(entitySet, this); + MloInstanceEntitySet instset = EntitySets[entitySet._Data.name]; for (int j = 0; j < entitySet.Entities.Length; j++) { YmapEntityDef e = CreateYmapEntity(owner, entitySet.Entities[j], lasti); - e.MloEntitySet = entitySet; - entlist.Add(e); + EntitySets[entitySet._Data.name].Entities.Add(e); + e.MloEntitySet = instset; lasti++; } } } } - if (defaultEntitySets != null) + if ((defaultEntitySets != null) && (entitySets != null)) { + for (var i = 0; i < defaultEntitySets.Length; i++) + { + uint index = defaultEntitySets[i]; + if (index >= entitySets.Length) continue; + MCMloEntitySet set = entitySets[index]; + MloInstanceEntitySet instset = EntitySets[set._Data.name]; + instset.Visible = true; + } } Entities = entlist.ToArray(); } - private YmapEntityDef CreateYmapEntity(YmapEntityDef owner, MCEntityDef ment, int i) + public void InitYmapEntityArchetypes(GameFileCache gfc) { - YmapEntityDef e = new YmapEntityDef(null, i, ref ment._Data); + if (Owner == null) return; + var arch = Owner.Archetype; + + if (Entities != null) + { + for (int j = 0; j < Entities.Length; j++) + { + var ient = Entities[j]; + var iarch = gfc.GetArchetype(ient.CEntityDef.archetypeName); + ient.SetArchetype(iarch); + + if (iarch == null) + { } //can't find archetype - des stuff eg {des_prologue_door} + } + + UpdateBBs(arch); + } + + if (EntitySets != null) + { + foreach (var entitySet in EntitySets) + { + var entities = entitySet.Value.Entities; + if (entities == null) continue; + + for (int i = 0; i < entities.Count; i++) + { + var ient = entities[i]; + var iarch = gfc.GetArchetype(ient.CEntityDef.archetypeName); + ient.SetArchetype(iarch); + + if (iarch == null) + { } //can't find archetype - des stuff eg {des_prologue_door} + } + } + } + } + + public void UpdateBBs(Archetype arch) + { + //update archetype room AABB's.. bad to have this here? where else to put it? + var mloa = arch as MloArchetype; + if (mloa != null) + { + Vector3 mlobbmin = Vector3.Zero; + Vector3 mlobbmax = Vector3.Zero; + Vector3[] c = new Vector3[8]; + var rooms = mloa.rooms; + if (rooms != null) + { + for (int j = 0; j < rooms.Length; j++) + { + var room = rooms[j]; + if ((room.AttachedObjects == null) || (room.AttachedObjects.Length == 0)) continue; + Vector3 min = new Vector3(float.MaxValue); + Vector3 max = new Vector3(float.MinValue); + for (int k = 0; k < room.AttachedObjects.Length; k++) + { + var objid = room.AttachedObjects[k]; + if (objid < Entities.Length) + { + var rooment = Entities[objid]; + if ((rooment != null) && (rooment.Archetype != null)) + { + var earch = rooment.Archetype; + var pos = rooment._CEntityDef.position; + var ori = rooment.Orientation; + Vector3 abmin = earch.BBMin * rooment.Scale; //entity box + Vector3 abmax = earch.BBMax * rooment.Scale; + c[0] = abmin; + c[1] = new Vector3(abmin.X, abmin.Y, abmax.Z); + c[2] = new Vector3(abmin.X, abmax.Y, abmin.Z); + c[3] = new Vector3(abmin.X, abmax.Y, abmax.Z); + c[4] = new Vector3(abmax.X, abmin.Y, abmin.Z); + c[5] = new Vector3(abmax.X, abmin.Y, abmax.Z); + c[6] = new Vector3(abmax.X, abmax.Y, abmin.Z); + c[7] = abmax; + for (int n = 0; n < 8; n++) + { + Vector3 corn = ori.Multiply(c[n]) + pos; + min = Vector3.Min(min, corn); + max = Vector3.Max(max, corn); + } + } + } + } + room.BBMin_CW = min; + room.BBMax_CW = max; + mlobbmin = Vector3.Min(mlobbmin, min); + mlobbmax = Vector3.Max(mlobbmax, max); + } + } + mloa.BBMin = mlobbmin; + mloa.BBMax = mlobbmax; + } + } + + public bool DeleteEntity(YmapEntityDef ent) + { + if (Entities == null) + { + throw new NullReferenceException("The Entities list returned null in our MloInstanceData. This could be an issue with initialization. The MloInstance probably doesn't exist."); + } + + if (ent.Index >= Entities.Length) + { + throw new ArgumentOutOfRangeException("The index of the entity was greater than the amount of entities that exist in this MloInstance. Likely an issue with initializion."); + } + + int index = 0; + YmapEntityDef[] newentities = new YmapEntityDef[Entities.Length - 1]; + YmapEntityDef delentity = Entities[ent.Index]; + bool del = false; + + for (int i = 0; i < Entities.Length; i++) + { + if (Entities[i] == delentity) + { + del = true; + continue; + } + newentities[index] = Entities[i]; + newentities[index].Index = index; + index++; + } + if (!del) + throw new ArgumentException("The entity specified was not found in this MloInstance. It cannot be deleted."); + + if (Owner.Archetype is MloArchetype arch) + { + if (arch.RemoveEntity(ent)) + { + if (ent.MloEntitySet != null) + if (!ent.MloEntitySet.Entities.Remove(ent)) + return false; + // Delete was successful... + Entities = newentities; + return true; + } + } + throw new InvalidCastException("The owner of this archetype's archetype definition is not an MloArchetype."); + } + + public YmapEntityDef CreateYmapEntity(YmapEntityDef owner, MCEntityDef ment, int index) + { + YmapEntityDef e = new YmapEntityDef(null, index, ref ment._Data); e.Extensions = ment.Extensions; e.MloRefPosition = e.Position; e.MloRefOrientation = e.Orientation; @@ -263,9 +560,31 @@ namespace CodeWalker.GameFiles e.Orientation = Quaternion.Multiply(owner.Orientation, e.MloRefOrientation); e.UpdateWidgetPosition(); e.UpdateWidgetOrientation(); + return e; } + public MCEntityDef TryGetArchetypeEntity(YmapEntityDef ymapEntity) + { + if (ymapEntity == null) return null; + if (Owner?.Archetype == null) return null; + if (!(Owner.Archetype is MloArchetype mloa)) return null; + if (ymapEntity.Index >= mloa.entities.Length) return null; + + var entity = mloa.entities[ymapEntity.Index]; + return entity; + } + + public YmapEntityDef TryGetYmapEntity(MCEntityDef mcEntity) + { + if (mcEntity == null) return null; + if (Owner?.Archetype == null) return null; + if (!(Owner.Archetype is MloArchetype mloa)) return null; + + var index = Array.FindIndex(mloa.entities, x => x == mcEntity); + if (index == -1 || index >= Entities.Length) return null; + return Entities[index]; + } public void SetPosition(Vector3 pos) { @@ -289,17 +608,52 @@ namespace CodeWalker.GameFiles for (int i = 0; i < Entities.Length; i++) { YmapEntityDef e = Entities[i]; - e.Position = Owner.Position + Owner.Orientation.Multiply(e.MloRefPosition); - e.Orientation = Quaternion.Multiply(Owner.Orientation, e.MloRefOrientation); - e.UpdateWidgetPosition(); - e.UpdateWidgetOrientation(); + UpdateEntity(e); } } + public void UpdateEntity(YmapEntityDef e) + { + e.Position = Owner.Position + Owner.Orientation.Multiply(e.MloRefPosition); + e.Orientation = Quaternion.Multiply(Owner.Orientation, e.MloRefOrientation); + e.UpdateWidgetPosition(); + e.UpdateWidgetOrientation(); + } + public void AddEntity(YmapEntityDef e) + { + if (e == null) return; + if (Entities == null) Entities = new YmapEntityDef[0]; + var entities = Entities.ToList(); + entities.Add(e); + Entities = entities.ToArray(); + } } + [TypeConverter(typeof(ExpandableObjectConverter))] + public class MloInstanceEntitySet + { + public MloInstanceEntitySet(MCMloEntitySet entSet, MloInstanceData instance) + { + EntitySet = entSet; + Entities = new List(); + Instance = instance; + } + + public MCMloEntitySet EntitySet { get; set; } + public List Entities { get; set; } + public MloInstanceData Instance { get; set; } + + public uint[] Locations + { + get { return EntitySet?.Locations; } + set { if (EntitySet != null) EntitySet.Locations = value; } + } + + public bool Visible { get; set; } + } + } diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaTypes.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaTypes.cs index 3013d08..0d407b1 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaTypes.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaTypes.cs @@ -2428,7 +2428,9 @@ namespace CodeWalker.GameFiles public Vector3 BBMax { get { return (_Data.bbMax); } } public Vector3 BBMin_CW { get; set; } public Vector3 BBMax_CW { get; set; } - + + public MloArchetype Archetype { get; set; } + public int Index { get; set; } public MCMloRoomDef() { } public MCMloRoomDef(Meta meta, CMloRoomDef data) @@ -2610,7 +2612,7 @@ namespace CodeWalker.GameFiles Entities = new MCEntityDef[ents.Length]; for (int i = 0; i < ents.Length; i++) { - Entities[i] = new MCEntityDef(meta, ents[i]); + Entities[i] = new MCEntityDef(meta, ref ents[i]); } } } @@ -2750,23 +2752,26 @@ namespace CodeWalker.GameFiles [TC(typeof(EXP))] public class MCEntityDef : MetaWrapper { public CEntityDef _Data; - public CEntityDef Data { get { return _Data; } } + public CEntityDef Data { get { return _Data; } set { _Data = value; } } public MetaWrapper[] Extensions { get; set; } - public MCEntityDef() { } + public MloArchetype Archetype { get; set; } // for browsing/reference purposes + public MCEntityDef(MCEntityDef copy) { - if (copy != null) - { - _Data = copy.Data; - } + if (copy != null) _Data = copy.Data; } - public MCEntityDef(Meta meta, CEntityDef d) + public MCEntityDef(Meta meta, ref CEntityDef d) { _Data = d; Extensions = MetaTypes.GetExtensions(meta, _Data.extensions); } + public MCEntityDef(ref CEntityDef d, MloArchetype arch) + { + _Data = d; + Archetype = arch; + } public override void Load(Meta meta, MetaPOINTER ptr) { diff --git a/CodeWalker.Core/Utils/Vectors.cs b/CodeWalker.Core/Utils/Vectors.cs index 19b354e..1e748d7 100644 --- a/CodeWalker.Core/Utils/Vectors.cs +++ b/CodeWalker.Core/Utils/Vectors.cs @@ -24,6 +24,11 @@ namespace CodeWalker { return new Vector4((float)Math.Floor(v.X), (float)Math.Floor(v.Y), (float)Math.Floor(v.Z), (float)Math.Floor(v.W)); } + + public static Quaternion ToQuaternion(this Vector4 v) + { + return new Quaternion(v); + } } diff --git a/CodeWalker.csproj b/CodeWalker.csproj index 6d2938e..fa9fd96 100644 --- a/CodeWalker.csproj +++ b/CodeWalker.csproj @@ -328,6 +328,12 @@ EditYmapCarGenPanel.cs + + Form + + + EditYtypArchetypeMloRoomPanel.cs + Form @@ -382,6 +388,12 @@ EditYnvPortalPanel.cs + + Form + + + EditYtypArchetypePanel.cs + Form @@ -596,6 +608,9 @@ EditYmapCarGenPanel.cs + + EditYtypArchetypeMloRoomPanel.cs + EditYmapEntityPanel.cs @@ -623,6 +638,9 @@ EditYnvPortalPanel.cs + + EditYtypArchetypePanel.cs + EditYtypPanel.cs diff --git a/Project/Panels/EditYmapEntityPanel.Designer.cs b/Project/Panels/EditYmapEntityPanel.Designer.cs index f33c0e7..6d1b070 100644 --- a/Project/Panels/EditYmapEntityPanel.Designer.cs +++ b/Project/Panels/EditYmapEntityPanel.Designer.cs @@ -71,6 +71,7 @@ this.EntityNumChildrenTextBox = new System.Windows.Forms.TextBox(); this.label25 = new System.Windows.Forms.Label(); this.EntityExtensionsTabPage = new System.Windows.Forms.TabPage(); + this.label1 = new System.Windows.Forms.Label(); this.EntityPivotTabPage = new System.Windows.Forms.TabPage(); this.label95 = new System.Windows.Forms.Label(); this.EntityPivotEditCheckBox = new System.Windows.Forms.CheckBox(); @@ -79,7 +80,6 @@ this.EntityPivotRotationNormalizeButton = new System.Windows.Forms.Button(); this.label94 = new System.Windows.Forms.Label(); this.EntityPivotRotationTextBox = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); this.EntityTabControl.SuspendLayout(); this.EntityGeneralTabPage.SuspendLayout(); this.EntityLodTabPage.SuspendLayout(); @@ -575,6 +575,15 @@ this.EntityExtensionsTabPage.Text = "Extensions"; this.EntityExtensionsTabPage.UseVisualStyleBackColor = true; // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(27, 27); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(157, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Entity extensions editing TODO!"; + // // EntityPivotTabPage // this.EntityPivotTabPage.Controls.Add(this.label95); @@ -660,15 +669,6 @@ this.EntityPivotRotationTextBox.TabIndex = 25; this.EntityPivotRotationTextBox.TextChanged += new System.EventHandler(this.EntityPivotRotationTextBox_TextChanged); // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(27, 27); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(157, 13); - this.label1.TabIndex = 0; - this.label1.Text = "Entity extensions editing TODO!"; - // // EditYmapEntityPanel // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); diff --git a/Project/Panels/EditYmapEntityPanel.cs b/Project/Panels/EditYmapEntityPanel.cs index 30f351b..b286963 100644 --- a/Project/Panels/EditYmapEntityPanel.cs +++ b/Project/Panels/EditYmapEntityPanel.cs @@ -1,13 +1,6 @@ using CodeWalker.GameFiles; using SharpDX; using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; namespace CodeWalker.Project.Panels @@ -16,6 +9,7 @@ namespace CodeWalker.Project.Panels { public ProjectForm ProjectForm; public YmapEntityDef CurrentEntity { get; set; } + public MCEntityDef CurrentMCEntity { get; set; } private bool populatingui = false; @@ -29,6 +23,8 @@ namespace CodeWalker.Project.Panels public void SetEntity(YmapEntityDef entity) { CurrentEntity = entity; + MloInstanceData instance = entity?.MloParent?.MloInstance; + CurrentMCEntity = instance?.TryGetArchetypeEntity(entity); Tag = entity; LoadEntity(); UpdateFormTitle(); @@ -94,10 +90,10 @@ namespace CodeWalker.Project.Panels else { populatingui = true; - var e = CurrentEntity.CEntityDef; + var e = CurrentEntity._CEntityDef; var po = CurrentEntity.PivotOrientation; //EntityPanel.Enabled = true; - EntityAddToProjectButton.Enabled = !ProjectForm.YmapExistsInProject(CurrentEntity.Ymap); + EntityAddToProjectButton.Enabled = CurrentEntity.Ymap != null ? !ProjectForm.YmapExistsInProject(CurrentEntity.Ymap) : !ProjectForm.YtypExistsInProject(CurrentEntity.MloParent?.Archetype?.Ytyp); EntityDeleteButton.Enabled = !EntityAddToProjectButton.Enabled; EntityArchetypeTextBox.Text = e.archetypeName.ToString(); EntityArchetypeHashLabel.Text = "Hash: " + e.archetypeName.Hash.ToString(); @@ -176,21 +172,53 @@ namespace CodeWalker.Project.Panels { tn.Text = name; } + else + { + tn = ProjectForm.ProjectExplorer?.FindMloEntityTreeNode(CurrentMCEntity); + if (tn != null) + { + tn.Text = name; + } + } if (CurrentEntity != null) { lock (ProjectForm.ProjectSyncRoot) { CurrentEntity._CEntityDef.archetypeName = new MetaHash(hash); + + if (CurrentMCEntity != null) + { + CurrentMCEntity._Data.archetypeName = new MetaHash(hash); + } + if (CurrentEntity.Archetype != arch) { CurrentEntity.SetArchetype(arch); - ProjectForm.SetYmapHasChanged(true); + + if (CurrentEntity.IsMlo) + { + CurrentEntity.MloInstance.InitYmapEntityArchetypes(ProjectForm.GameFileCache); + } + + ProjectItemChanged(); } } } } + private void ProjectItemChanged() + { + if (CurrentEntity.Ymap != null) + { + ProjectForm.SetYmapHasChanged(true); + } + else if (CurrentEntity.MloParent?.Archetype?.Ytyp != null) + { + ProjectForm.SetYtypHasChanged(true); + } + } + private void EntityFlagsTextBox_TextChanged(object sender, EventArgs e) { if (populatingui) return; @@ -209,7 +237,9 @@ namespace CodeWalker.Project.Panels if (CurrentEntity._CEntityDef.flags != flags) { CurrentEntity._CEntityDef.flags = flags; - ProjectForm.SetYmapHasChanged(true); + if (CurrentMCEntity != null) + CurrentMCEntity._Data.flags = flags; + ProjectItemChanged(); } } } @@ -244,7 +274,9 @@ namespace CodeWalker.Project.Panels if (CurrentEntity._CEntityDef.flags != flags) { CurrentEntity._CEntityDef.flags = flags; - ProjectForm.SetYmapHasChanged(true); + if (CurrentMCEntity != null) + CurrentMCEntity._Data.flags = flags; + ProjectItemChanged(); } } } @@ -260,7 +292,9 @@ namespace CodeWalker.Project.Panels if (CurrentEntity._CEntityDef.guid != guid) { CurrentEntity._CEntityDef.guid = guid; - ProjectForm.SetYmapHasChanged(true); + if (CurrentMCEntity != null) + CurrentMCEntity._Data.guid = guid; + ProjectItemChanged(); } } } @@ -274,14 +308,16 @@ namespace CodeWalker.Project.Panels { if (CurrentEntity.MloParent != null) { - //TODO: positioning for interior entities! + v = CurrentEntity.MloParent.Position + CurrentEntity.MloParent.Orientation.Multiply(v); + CurrentEntity.SetPosition(v); + ProjectItemChanged(); } else { if (CurrentEntity.Position != v) { CurrentEntity.SetPosition(v); - ProjectForm.SetYmapHasChanged(true); + ProjectItemChanged(); var wf = ProjectForm.WorldForm; if (wf != null) { @@ -304,17 +340,24 @@ namespace CodeWalker.Project.Panels { if (CurrentEntity._CEntityDef.rotation != v) { - Quaternion q = new Quaternion(v); - CurrentEntity.SetOrientationInv(q); - ProjectForm.SetYmapHasChanged(true); + Quaternion q = v.ToQuaternion(); var wf = ProjectForm.WorldForm; - if (wf != null) + + if (CurrentEntity.MloParent != null) { - wf.BeginInvoke(new Action(() => - { - wf.SetWidgetRotation(CurrentEntity.WidgetOrientation, true); - })); + var world = Quaternion.Normalize(Quaternion.Multiply(q, CurrentEntity.MloParent.Orientation)); + CurrentEntity.SetOrientation(world); } + else + { + CurrentEntity.SetOrientation(q, true); + } + + ProjectItemChanged(); + wf?.BeginInvoke(new Action(() => + { + wf.SetWidgetRotation(CurrentEntity.WidgetOrientation, true); + })); } } } @@ -331,7 +374,7 @@ namespace CodeWalker.Project.Panels { Vector3 newscale = new Vector3(sxy, sxy, CurrentEntity.Scale.Z); CurrentEntity.SetScale(newscale); - ProjectForm.SetYmapHasChanged(true); + ProjectItemChanged(); var wf = ProjectForm.WorldForm; if (wf != null) { @@ -356,7 +399,7 @@ namespace CodeWalker.Project.Panels { Vector3 newscale = new Vector3(CurrentEntity.Scale.X, CurrentEntity.Scale.Y, sz); CurrentEntity.SetScale(newscale); - ProjectForm.SetYmapHasChanged(true); + ProjectItemChanged(); var wf = ProjectForm.WorldForm; if (wf != null) { @@ -380,7 +423,9 @@ namespace CodeWalker.Project.Panels if (CurrentEntity._CEntityDef.parentIndex != pind) { CurrentEntity._CEntityDef.parentIndex = pind; //Needs more work for LOD linking! - ProjectForm.SetYmapHasChanged(true); + if (CurrentMCEntity != null) + CurrentMCEntity._Data.parentIndex = pind; + ProjectItemChanged(); } } } @@ -396,7 +441,9 @@ namespace CodeWalker.Project.Panels if (CurrentEntity._CEntityDef.lodDist != lodDist) { CurrentEntity._CEntityDef.lodDist = lodDist; - ProjectForm.SetYmapHasChanged(true); + if (CurrentMCEntity != null) + CurrentMCEntity._Data.lodDist = lodDist; + ProjectItemChanged(); } } } @@ -412,7 +459,9 @@ namespace CodeWalker.Project.Panels if (CurrentEntity._CEntityDef.childLodDist != childLodDist) { CurrentEntity._CEntityDef.childLodDist = childLodDist; - ProjectForm.SetYmapHasChanged(true); + if (CurrentMCEntity != null) + CurrentMCEntity._Data.childLodDist = childLodDist; + ProjectItemChanged(); } } } @@ -427,7 +476,9 @@ namespace CodeWalker.Project.Panels if (CurrentEntity._CEntityDef.lodLevel != lodLevel) { CurrentEntity._CEntityDef.lodLevel = lodLevel; - ProjectForm.SetYmapHasChanged(true); + if (CurrentMCEntity != null) + CurrentMCEntity._Data.lodLevel = lodLevel; + ProjectItemChanged(); } } } @@ -443,7 +494,9 @@ namespace CodeWalker.Project.Panels if (CurrentEntity._CEntityDef.numChildren != numChildren) { CurrentEntity._CEntityDef.numChildren = numChildren; - ProjectForm.SetYmapHasChanged(true); + if (CurrentMCEntity != null) + CurrentMCEntity._Data.numChildren = numChildren; + ProjectItemChanged(); } } } @@ -458,7 +511,9 @@ namespace CodeWalker.Project.Panels if (CurrentEntity._CEntityDef.priorityLevel != priorityLevel) { CurrentEntity._CEntityDef.priorityLevel = priorityLevel; - ProjectForm.SetYmapHasChanged(true); + if (CurrentMCEntity != null) + CurrentMCEntity._Data.priorityLevel = priorityLevel; + ProjectItemChanged(); } } } @@ -474,7 +529,9 @@ namespace CodeWalker.Project.Panels if (CurrentEntity._CEntityDef.ambientOcclusionMultiplier != aomult) { CurrentEntity._CEntityDef.ambientOcclusionMultiplier = aomult; - ProjectForm.SetYmapHasChanged(true); + if (CurrentMCEntity != null) + CurrentMCEntity._Data.ambientOcclusionMultiplier = aomult; + ProjectItemChanged(); } } } @@ -490,7 +547,9 @@ namespace CodeWalker.Project.Panels if (CurrentEntity._CEntityDef.artificialAmbientOcclusion != artao) { CurrentEntity._CEntityDef.artificialAmbientOcclusion = artao; - ProjectForm.SetYmapHasChanged(true); + if (CurrentMCEntity != null) + CurrentMCEntity._Data.artificialAmbientOcclusion = artao; + ProjectItemChanged(); } } } @@ -506,7 +565,9 @@ namespace CodeWalker.Project.Panels if (CurrentEntity._CEntityDef.tintValue != tintValue) { CurrentEntity._CEntityDef.tintValue = tintValue; - ProjectForm.SetYmapHasChanged(true); + if (CurrentMCEntity != null) + CurrentMCEntity._Data.tintValue = tintValue; + ProjectItemChanged(); } } } @@ -515,7 +576,7 @@ namespace CodeWalker.Project.Panels { if (CurrentEntity == null) return; if (ProjectForm.WorldForm == null) return; - ProjectForm.WorldForm.GoToPosition(CurrentEntity.Position); + ProjectForm.WorldForm.GoToPosition(CurrentEntity.Position, Vector3.One * CurrentEntity.BSRadius); } private void EntityNormalizeRotationButton_Click(object sender, EventArgs e) diff --git a/Project/Panels/EditYmapGrassPanel.cs b/Project/Panels/EditYmapGrassPanel.cs index dedd9d1..5e7f558 100644 --- a/Project/Panels/EditYmapGrassPanel.cs +++ b/Project/Panels/EditYmapGrassPanel.cs @@ -42,6 +42,7 @@ namespace CodeWalker.Project.Panels Tag = batch; UpdateFormTitle(); UpdateControls(); + ProjectForm.WorldForm?.SelectGrassBatch(batch); } private void UpdateControls() @@ -197,6 +198,13 @@ namespace CodeWalker.Project.Panels private void OptimizeBatchButton_Click(object sender, EventArgs e) { if (CurrentBatch.Instances == null || CurrentBatch.Instances.Length <= 0) return; + var d = MessageBox.Show( + @"You are about to split the selected batch into multiple parts. Are you sure you want to do this?", + @"Instance Optimizer", MessageBoxButtons.YesNo); + + if (d == DialogResult.No) + return; + lock (ProjectForm.WorldForm.RenderSyncRoot) { var newBatches = CurrentBatch?.OptimizeInstances(CurrentBatch, (float)OptmizationThresholdNumericUpDown.Value); diff --git a/Project/Panels/EditYtypArchetypeMloRoomPanel.Designer.cs b/Project/Panels/EditYtypArchetypeMloRoomPanel.Designer.cs new file mode 100644 index 0000000..0d30f09 --- /dev/null +++ b/Project/Panels/EditYtypArchetypeMloRoomPanel.Designer.cs @@ -0,0 +1,173 @@ +namespace CodeWalker.Project.Panels +{ + partial class EditYtypArchetypeMloRoomPanel + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditYtypArchetypeMloRoomPanel)); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.MinBoundsTextBox = new CodeWalker.WinForms.TextBoxFix(); + this.MaxBoundsTextBox = new CodeWalker.WinForms.TextBoxFix(); + this.label3 = new System.Windows.Forms.Label(); + this.RoomNameTextBox = new CodeWalker.WinForms.TextBoxFix(); + this.RoomFlagsCheckedListBox = new System.Windows.Forms.CheckedListBox(); + this.RoomFlagsTextBox = new System.Windows.Forms.TextBox(); + this.label14 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(33, 69); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(27, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Min:"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(30, 95); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(30, 13); + this.label2.TabIndex = 1; + this.label2.Text = "Max:"; + // + // MinBoundsTextBox + // + this.MinBoundsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.MinBoundsTextBox.Location = new System.Drawing.Point(66, 66); + this.MinBoundsTextBox.Name = "MinBoundsTextBox"; + this.MinBoundsTextBox.Size = new System.Drawing.Size(275, 20); + this.MinBoundsTextBox.TabIndex = 2; + this.MinBoundsTextBox.TextChanged += new System.EventHandler(this.MinBoundsTextBox_TextChanged); + // + // MaxBoundsTextBox + // + this.MaxBoundsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.MaxBoundsTextBox.Location = new System.Drawing.Point(66, 92); + this.MaxBoundsTextBox.Name = "MaxBoundsTextBox"; + this.MaxBoundsTextBox.Size = new System.Drawing.Size(275, 20); + this.MaxBoundsTextBox.TabIndex = 3; + this.MaxBoundsTextBox.TextChanged += new System.EventHandler(this.MaxBoundsTextBox_TextChanged); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(19, 43); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(41, 13); + this.label3.TabIndex = 4; + this.label3.Text = "Name: "; + // + // RoomNameTextBox + // + this.RoomNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.RoomNameTextBox.Location = new System.Drawing.Point(66, 40); + this.RoomNameTextBox.Name = "RoomNameTextBox"; + this.RoomNameTextBox.Size = new System.Drawing.Size(275, 20); + this.RoomNameTextBox.TabIndex = 5; + this.RoomNameTextBox.TextChanged += new System.EventHandler(this.RoomNameTextBox_TextChanged); + // + // RoomFlagsCheckedListBox + // + this.RoomFlagsCheckedListBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Right))); + this.RoomFlagsCheckedListBox.CheckOnClick = true; + this.RoomFlagsCheckedListBox.FormattingEnabled = true; + this.RoomFlagsCheckedListBox.Items.AddRange(new object[] { + "1 - Unk01", + "2 - Unk02", + "4 - Unk03", + "8 - Unk04", + "16 - Unk05", + "32 - Unk06", + "64 - Unk07"}); + this.RoomFlagsCheckedListBox.Location = new System.Drawing.Point(352, 62); + this.RoomFlagsCheckedListBox.Name = "RoomFlagsCheckedListBox"; + this.RoomFlagsCheckedListBox.Size = new System.Drawing.Size(201, 244); + this.RoomFlagsCheckedListBox.TabIndex = 35; + this.RoomFlagsCheckedListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.RoomFlagsCheckedListBox_ItemCheck); + // + // RoomFlagsTextBox + // + this.RoomFlagsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.RoomFlagsTextBox.Location = new System.Drawing.Point(406, 36); + this.RoomFlagsTextBox.Name = "RoomFlagsTextBox"; + this.RoomFlagsTextBox.Size = new System.Drawing.Size(147, 20); + this.RoomFlagsTextBox.TabIndex = 34; + this.RoomFlagsTextBox.TextChanged += new System.EventHandler(this.RoomFlagsTextBox_TextChanged); + // + // label14 + // + this.label14.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(365, 39); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(35, 13); + this.label14.TabIndex = 33; + this.label14.Text = "Flags:"; + // + // EditYtypArchetypeMloRoomPanel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(565, 505); + this.Controls.Add(this.RoomFlagsCheckedListBox); + this.Controls.Add(this.RoomFlagsTextBox); + this.Controls.Add(this.label14); + this.Controls.Add(this.RoomNameTextBox); + this.Controls.Add(this.label3); + this.Controls.Add(this.MaxBoundsTextBox); + this.Controls.Add(this.MinBoundsTextBox); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "EditYtypArchetypeMloRoomPanel"; + this.Text = "Room"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private WinForms.TextBoxFix MinBoundsTextBox; + private WinForms.TextBoxFix MaxBoundsTextBox; + private System.Windows.Forms.Label label3; + private WinForms.TextBoxFix RoomNameTextBox; + private System.Windows.Forms.CheckedListBox RoomFlagsCheckedListBox; + private System.Windows.Forms.TextBox RoomFlagsTextBox; + private System.Windows.Forms.Label label14; + } +} \ No newline at end of file diff --git a/Project/Panels/EditYtypArchetypeMloRoomPanel.cs b/Project/Panels/EditYtypArchetypeMloRoomPanel.cs new file mode 100644 index 0000000..a7547c4 --- /dev/null +++ b/Project/Panels/EditYtypArchetypeMloRoomPanel.cs @@ -0,0 +1,137 @@ +using System; +using System.Windows.Forms; +using CodeWalker.GameFiles; +using SharpDX; + +namespace CodeWalker.Project.Panels +{ + public partial class EditYtypArchetypeMloRoomPanel : ProjectPanel + { + public ProjectForm ProjectForm; + public MCMloRoomDef CurrentRoom { get; set; } + + public EditYtypArchetypeMloRoomPanel(ProjectForm owner) + { + ProjectForm = owner; + InitializeComponent(); + } + + public void SetRoom(MCMloRoomDef room) + { + CurrentRoom = room; + Tag = room; + UpdateFormTitle(); + MloInstanceData instance = ProjectForm.TryGetMloInstance(room?.Archetype); + ProjectForm.WorldForm?.SelectMloRoom(room, instance); + UpdateControls(); + } + + private void UpdateControls() + { + if (CurrentRoom != null) + { + RoomNameTextBox.Text = CurrentRoom.RoomName; + MinBoundsTextBox.Text = FloatUtil.GetVector3String(CurrentRoom.BBMin); + MaxBoundsTextBox.Text = FloatUtil.GetVector3String(CurrentRoom.BBMax); + RoomFlagsTextBox.Text = CurrentRoom._Data.flags.ToString(); + } + } + + private void UpdateFormTitle() + { + Text = CurrentRoom?.RoomName ?? "Room"; + } + + private void RoomNameTextBox_TextChanged(object sender, EventArgs e) + { + if (CurrentRoom == null) return; + + if (CurrentRoom.RoomName != RoomNameTextBox.Text) + { + CurrentRoom.RoomName = RoomNameTextBox.Text; + + TreeNode tn = ProjectForm.ProjectExplorer?.FindMloRoomTreeNode(CurrentRoom); + if (tn != null) + { + tn.Text = CurrentRoom.RoomName; + } + + UpdateFormTitle(); + ProjectForm.SetYtypHasChanged(true); + } + } + + private void MinBoundsTextBox_TextChanged(object sender, EventArgs e) + { + if (CurrentRoom == null) return; + Vector3 bb = FloatUtil.ParseVector3String(MinBoundsTextBox.Text); + if (CurrentRoom._Data.bbMin != bb) + { + CurrentRoom._Data.bbMin = bb; + ProjectForm.SetYtypHasChanged(true); + } + } + + private void MaxBoundsTextBox_TextChanged(object sender, EventArgs e) + { + if (CurrentRoom == null) return; + Vector3 bb = FloatUtil.ParseVector3String(MaxBoundsTextBox.Text); + if (CurrentRoom._Data.bbMax != bb) + { + CurrentRoom._Data.bbMax = bb; + ProjectForm.SetYtypHasChanged(true); + } + } + + private void RoomFlagsTextBox_TextChanged(object sender, EventArgs e) + { + if (CurrentRoom == null) return; + uint.TryParse(RoomFlagsTextBox.Text, out uint flags); + for (int i = 0; i < RoomFlagsCheckedListBox.Items.Count; i++) + { + var c = ((flags & (1u << i)) > 0); + RoomFlagsCheckedListBox.SetItemCheckState(i, c ? CheckState.Checked : CheckState.Unchecked); + } + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentRoom._Data.flags != flags) + { + CurrentRoom._Data.flags = flags; + ProjectForm.SetYtypHasChanged(true); + } + } + } + + private void RoomFlagsCheckedListBox_ItemCheck(object sender, ItemCheckEventArgs e) + { + if (CurrentRoom == null) return; + uint flags = 0; + for (int i = 0; i < RoomFlagsCheckedListBox.Items.Count; i++) + { + if (e.Index == i) + { + if (e.NewValue == CheckState.Checked) + { + flags += (uint)(1 << i); + } + } + else + { + if (RoomFlagsCheckedListBox.GetItemChecked(i)) + { + flags += (uint)(1 << i); + } + } + } + RoomFlagsTextBox.Text = flags.ToString(); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentRoom._Data.flags != flags) + { + CurrentRoom._Data.flags = flags; + ProjectForm.SetYtypHasChanged(true); + } + } + } + } +} diff --git a/Project/Panels/EditYtypArchetypeMloRoomPanel.resx b/Project/Panels/EditYtypArchetypeMloRoomPanel.resx new file mode 100644 index 0000000..1431f6b --- /dev/null +++ b/Project/Panels/EditYtypArchetypeMloRoomPanel.resx @@ -0,0 +1,409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAMAICAAAAAAGACoDAAANgAAABAQAAAAABgAaAMAAN4MAABAQAAAAAAYACgyAABGEAAAKAAAACAA + AABAAAAAAQAYAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/u3v+Pn6//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7+/vX3/rzA3OHl9fz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7//+zv+3Z6qcLI5Pr7/wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP7+/+br+15in6+33vf5/wAAAAAAAAAAAAAAAP7+//7+/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//v8//v8//3+/wAAAAAAAAAAAAAAAAAAAP7+/+Ho+1dana20 + 4/b4/wAAAAAAAPz9//P2/+Tp/ezw/vz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///X4 + /9Pa+tPa+/H1//z9/wAAAAAAAAAAAAAAAP7+/93k+SsscaSr3PX3/wAAAP7+//L1/7W98AcWgrvC8Pj6 + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/+bs/xohiAEJdrvF9+7y//z9/wAAAAAAAAAA + AP7+/9rh+CEkapmh0/T3/wAAAPj6/9HZ/AEHcgEEb9LZ+/r7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP7//+/z/3F+zAAAXwQLcZai3fb4/wAAAAAAAAAAAP3+/97l/E9Tmaau4fT3/wAAAO/0/1dd + sAAAV7a/8/H1//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPr8/+jv/46Y3QUUf6Ot + 5PX4/wAAAAAAAAAAAP3+/9zj+3Z6wLe/7fX4/wAAAPD0/212xnaAzerw//z9/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/+/z/+Dm+/D0//z9/wAAAAAAAP7+//j6/9Pd+UhLjb/H + 9/D0//3+//n7/+nt/+jt//n7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7///7+//7+//7+/wAAAAAAAPr8/+7z/83W+ImU2A0UdFNarr/K9env//X4//z9//3+//7//wAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///j6/+Pq/255 + xhckjE5XsVVftUlTqwAKeTA9nr3H8+7z//v8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+//b4/9Tc+Sc0mRonj8rV/crX/ZSb48rX/brG8wwWgQAEdJei + 4efu//n7//7+//z9//z9//z9//z9//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//f5/+3y/+nv/+ft + /8vV+io2mImU2M7c/7vG9yIvlQAOfCg4mM3Y/s/c/4aR1AQRfGtzwtni/ebt/9vi/tri/tXd+9Tc+O3x + /vz9/wAAAAAAAAAAAAAAAAAAAAAAAPn6/87V+FVftkRPrFlnvSEqjQoUfmJvwWFvvg0TfQQIcxEchwAD + cy89n19rvVVitQwZgwAAaiMrkT9NqTVBoiw3mhQihig1mNLX+fv8/wAAAAAAAAAAAAAAAAAAAAAAAPb5 + /52l4EFLqoCK03yF0VBctGhyw52o5GVrvQAAaneBzsHM+jA3mhYgiTtIpJOf3ouW2AAAbmh0wbbA8bS+ + 7qiz5pCb16+56e/z//3+/wAAAAAAAAAAAAAAAAAAAAAAAPv8//H1/+vw/+zx/+nv/7/J9YqP3MbP/8LM + +hwqkFZftaCp5EhRrcTQ+9jj/8rW/UJMqn6J0ebt//X3//f5//b4//X3//f5//z9/wAAAAAAAAAAAAAA + AAAAAAAAAP7+//z9//3+/wAAAAAAAP3+/+7z/6at64iP3aWs7XN8zRIfhyUykp2o5MHM+oKM0xonjY6X + 2+jv//v8/wAAAP7+//n7//b5//r7//7//wAAAAAAAAAAAAAAAP7+//f5/+rw/9Pa9fL0/v7//wAAAAAA + APv8//H1/+Tr/7i/91liu0NPq0VQrS06m0NNqDdCoYqU1+nv//v8/wAAAAAAAPn7/9zi/qSt59ri/fL1 + //v8//7//wAAAPz9//D0/8rT+h0sjkVQrPD0/wAAAAAAAAAAAAAAAAAAAPz9/+7z/8LL9Jqk4aGq6LW/ + 8c3W9+Xs/vH1//v8/wAAAAAAAAAAAPf5/6at5gAAbxIfh6u16+Po/fr7/wAAAPb5/6ev5gAIeAAPernC + 8fX4/wAAAAAAAP3+//v8//z9/wAAAP3+//j6//P3//P2//b4//r8//7+//7+//v8//r8//3+/wAAAPv8 + /+Xr/nuIzwAAbBseg5Sb2fb5/wAAAPf5/8DF8pWe3d/n/vT3//39/wAAAPv8/+zx/87V9+3x/v3+/wAA + AP3+//j6//X4//v8/wAAAAAAAPn7/+Dm/snR9fD0//39//z8/fv8/+3y/8LK9aGq4dfd9/n7/wAAAPz9 + //b5//X4//v8/wAAAAAAAP7+/+7z/4aP1gEPet7k/f39/wAAAPf5/83U+ZCZ2u3x/v7+/wAAAPP3/215 + wgAJd7fB8/L1//7+/wAAAP3+//j6//f5//r8//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAPj6/87W/AAA + X2duue3y//7+/wAAAPD0/05asBQfidzj/P39/wAAAPX4/6Su6AAAXBccgtff/vv8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP3/3F8xhYli9Xe/fn6/wAAAAAAAO3y/1pltQAJd9be + /fv8/wAAAPz9/+rw/36I0Bknjs/W+vv8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAPf5/8HI7tnf+/X4//7+/wAAAAAAAO/0/3R7xgAAb9ng/Pz9/wAAAAAAAPn7/+Ln/dLY+fP2//3+ + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//r7//v8//7+/wAAAAAAAAAA + APb4/7/F84eP0e/0//7+/wAAAAAAAP7+//z9//v8//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz9//b5//X4//v8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////w////4 + P///+D////g8//D4MH/geCB/4Dggf+A4IH/wOCD/+DAB//hgAf//gAP//wAAB/AAAAPwAAAD8AAAA/AA + AAfjAAEHgYADAQPgBwEDEAEBAghgAQwIIEH8CCB//Bggf/wYMH/8ODD///h/////////////KAAAABAA + AAAgAAAAAQAYAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+vv/fL1/v///wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///4+Vx7/F5v///wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAP///4CHtrS62////////////////////wAAAAAAAAAAAP////H0/vf6/v// + /////////4yTwrrB4f///+zw+7rA6P39/////wAAAAAAAAAAAP///56l2BkcguXr/P///////42Uw8jO + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2OL+NjZ7AAArX2Ok + 4uz/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 2eP/LjJ1DAxKfYTE4Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//f7//f7//v7//v// + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/gILIR0eVeoHC3eb/8fX/+/z/AAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+Pr/ + +Pr/+Pr/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+vv/+vv/+/z//f3//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/2eP9ZWeqHx1obnOz4Or/8fX/+/z/AAAAAAAAAAAAAAAA/v7/ + +/z/9fj/8vb/8PX/7vT/8fb/9fj/+fr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/9fj/9fj/9Pj/9Pf/9vn/+/z//v7/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP9ODp9AAA5jZDQ5O7/8PX/+/z/AAAA + AAAAAAAA/v7/+/z/9Pf/7fP/5u//wsz6j5XfuMDx7fL/9vn//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+Pr/8/b/5+3/2eH/2uP/ + 5u3/7fP/8/b/+vv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3ef/U1ebBgVKio/O + 4uz/8fX/+/z/AAAAAAAA/v///P3/9fj/7fP/4uv/hIzZHSWPAABmU1i14ub/9/r/+/z/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9Pf/ + 7/X/09z/TlSzNzWYj5bh5O7/6/L/8vb/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fX/ + 2eP/QUWIEhBZbnSz3uj/8fb/+/z/AAAAAAAA/f7/+Pr/7/T/6PH/iI7cAABvAABqAABncXjK6O//9fj/ + +/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+/z/8/f/2uD/Z27EAABnAABiBgl4jJTd5vD/6O//8vX/+fv//f7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8fb/2OP/Mjd6AQE6ZGup4er/8fX/+/z/AAAAAAAA+vz/8fX/6/T/xM/8ExyJAABwAABu + GySRxc387fT/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vz/8/f/1Nr/MzqhAABhAxOBAARyBgp5jpLg5Oz/7PP/9Pf/+vz//v7/ + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP/KCtvBwZOjJHS4Or/8fX/+/z/AAAA/f7/9/n/7fP/3+j/ + UFq3AABtAAZ3BAh6mZ/n5vD/7vP/+Pr//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/6e//sbb1KzWcAABwBhaBAAFyAgp6fITR + 1d777/T/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3+j/WF2hBglTnaTj5O3/8PX/+/z/AAAA + /P3/9Pf/6vL/k5riAAByAAR0AABrY2vE4ur/6vH/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/7fL/5O3/ytX/RU6w + AABpAA5+AABuAABnhord6e7/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/7/T/3+j/k5jbT1KdgYjJ + 3uf+8fX/+/z/AAAA+/z/9fn/4ef/NDqhAABnAABrJjCU0Nn/5/D/8fX/+vv//v7/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + 9vn/7vP/6vP/ztb/O0CmAABpAABrQkuoxMn57PH/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/ + 2+X/en/CUFGak5nY3+j/8fX//P3/AAAA/P3/9fj/4en/i5DbNT2hIyuTpqzv4uz/7vP/9/n//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/9vn/7/P/6vL/ytH/X2i9XWi7wsf/6e//8/f/+Pr//v7/AAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/WF2hW1ylvMD+3uf/8PX/+/z/AAAA/f7/9vn/7fP/4uj/j5Pgf4LV3+X/6fD/ + 9Pf//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/8vX/7fP/5+//5u7/6vD/8PT/9vn//P3//v7/ + AAAAAAAAAAAAAAAAAAAA/f7/9/n/7fP/0tz9LDJzNjh/nqTk2uT/7fL/9/n//f7//f7/+fv/8/b/7PL/ + 3eX/zM//5ev/9fj/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f3/+vv/9/n/9vn/9fj/9vn/ + +fr//P3//v7/AAAAAAAAAAAA/v///f7/+vv/9vn/7/T/5vD/2Ob/VFubERNdoajk4u//5O7/7vP/9vj/ + +fr/+vv/+Pr/9fj/9Pj/9fj/9fj/+Pr//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///v7/ + /f7//P3//P3//f3//v7//v//AAAAAAAAAAAA/f7/+vz/9vn/8fX/7vT/5O3/3eb/z9n/cHjICxN5d37L + z9n/2eP/5O3/6/L/8PT/9Pf/9/n/+vv/+vv/+/z//P3//f3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+Pr/8/b/7vT/6vL/z9r+jZjeQUeq + IiuQCBN3AAFrBRB8Nj2iUViym6XlydH/4+z/6/L/8PT/9/n/+/z//f7//v//AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/8fX/6/L/3uf/ + mKTkLzibAABoAAB0Fx+HDBh7FSGDAg16AABYAABlCBB/Ji2UhYza1+D/6PL/7fL/9Pf/+vv//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/9/n/ + 8PT/7PT/z9j/XmO+AABtAABcMDSXoajsu8X7VV+5hYzblZ/fTVSxFSKMAABkAABnAAN2Qkmpsbrz5e3/ + 6vH/8fX/+Pr//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/P3/9/n/8PX/7PT/vcn3LTOZAABaAgR1ZWzD0Nf/5vL/1OP/l53lzs3/6fP/4+7/sLzwZ23CBxSD + AABnAABlHiaSmqHo3+j/5+//7/T/9vn//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/ + /v7//v7//v7//f7/+/z/9vj/7vP/7PX/tcLzEBeGAABkPEWlqLPt2eX/4e7/3On/uMX1gofVe3vPhYzY + z93+5/X/4e3/lJ3gHiOPAABtAABqChiEbHLIytD/5/D/7PL/8/f/+Pr/+fr/+Pr/+Pr/+Pr/+Pr/+Pr/ + +Pr/+fv/+vv/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+fv/9/n/9vj/9fj/9Pf/8fX/7PL/4uv/l6HgDhF7AAN4iZDe0d7/3uz/4vD/w83/VVm3 + ICiSAAFyAABlAABwaHTD1N//2un/3er/w838ZW3BEyOJJzKVAQ16NDmfwsn75fD/5u7/7PL/7vP/7fP/ + 7fP/7fL/7fP/7vP/7/T/8fb/9Pj/9vn/+fr//f3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/+Pr/9Pf/8fX/7vT/7PL/6/L/6fH/5u7/6vX/tsD0CQx4AAFwkZvi7ff/4vD/ + 4fD/z9j/OkGlAABiAABwBxWAAAt7BBN+P0uofYLUztb/4O7/6fb/6fP/qa7xQkyoBg56AABqMjugx8/+ + 5fH/4Ov/4On/3uj/3eb/3+j/3uj/1+L/0d3/1d7/3+f/7fL/9vj/+vz//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+fr/8/f/6/L/2d//v8j6vcf5ucP1wMv8wM3+vMj6PkqoAABo + UF25usP7tsPyvsr6sLrwQ0utAABqAAV1OUameIDRKDWZAAd2GyeOLDecmaHntsL0pbLom6riq7LzUlu0 + AANzBhR/AAZ0NT+ja3bBY2i/XGG6UViyWl65XGG7XGC6TVWvQU6pPkalODygqK7p8vb/+vz//v7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/7/T/wcj2R0ysExeFERmGDxuIFB6K + FBqICxSEAABsAAByDBiDCRSBBRCADhaFCRODAAh4AxF/AAl4CxeDHSaPAAp6AAN0AA19AAd3CBOBEBqH + BhGBAAh5AABwAAByAAh5BhSCAxWCAABsAABvAABlAABnAABxAABjAABmAABhAABdAABYAABhCAt/q7Lr + 8/f/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+fv/3uT/SE2vAABn + CBB/GiCMLzmfLTWcGByJFRyKGCOOMj2gHymRDxiGGyOPLDCXBRF/AAh3BhaCEyKMICqTKC2WNDqfIzCV + Awx6Eh+JHiaPAAR3AAZ5CxSDICWQX2q7Q1CqAA1+AAFxDxuHiZTbVGC4dHnQnabrTVqzY23EUV62Slau + LjaZXWm9sLjz5ez/9vn/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +Pv/4+n+e4LPfoPVpqv2vsf/zNX/zdb/xtH/v8v8pK7spKfysLb3vcr4ws784ej/hI/YAAZ1AAJzVF25 + yM//3Of/5+//i5LcAABpMzyfp6vxoKznlqHhqbbtx9H/8fz/kpvfAABiAABph4zc5PD/2OP/193/3un/ + 1+D/2OH/1+D/0Nr/zNL/3+j/6/L/7/T/9vn//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+Pr/9Pf/6vD/5u3/3+b/4uv/6PD/5+//5O3/5/P/sL3sXmS7mZzoz9f/3+z/4e// + mKLiEiKKCBF/KTWZr7T06/f/3ev/VF2zChSBipPcz9v+4u7/3ur/3ev/5/X/qrPrISmSDRJ2Xmq/3ur/ + 4uv/6vH/7fP/7fL/7/T/7vP/7fP/7fP/8PX/8fX/9Pf/+Pr/+/z//v7/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+Pr/9vn/9Pf/8vb/8vb/8/b/9Pf/7/T/6/L/tL/ubXLH + en/Ti43gqavy0t3/nafjMj6fJzaaAAV1GyeOYmW7Nz6fAABgNj6i1N//3uz/2uX/3Oj/5PH/wcj7FR2J + AAN0gong0tr/6fH/7/P/9vj/+Pr/+fv/+fv/+Pr/+Pr/+Pr/+fv/+vv//P3//f7//v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+/z/+/z/+/z//f3//f7/ + +fv/8fX/5Oz/jpbfc3jObnXLcXfOk5rks7b4iY3dR1KvDhuEAABoAABlEBV9U12ytcD13Or/3en/3ej/ + 1eL/q7fvGR+MKDKZbnnNxc/76PD/8fX/+fr//f7//v//AAAA/v7//f7//f3//P3//f3//f7//v//AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//f7//v7/AAAA + AAAAAAAAAAAAAAAA/f7/9vn/7/T/yNH5lJrleoDVmZ3pmpzpc3nPfoTWf4bYVFy3HSaLZ3PGsrb8v8r8 + y9n9q7jre4LRf4fUgIvXAwZ1AABrhYjb0NX/6PH/8PX/+Pr//f7/AAAAAAAA/v///f3/+vv/+Pr/9/r/ + 9/n/+Pr/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f7/+/z/+fr/9vj/9/n/ + +vz/+vv/+/z//v7/AAAAAAAAAAAAAAAA/v7/+vz/8/f/7PL/2uT/t8H1srP6vcH+nKTnSlOxV2C7TVaz + WGS8QUqmSlSuSFOtR1GtbXTKVl23ARB5AAh2AABnd33P3eP/4ur/7/T/9/n//P3/AAAAAAAAAAAA/P3/ + 9/n/8vb/7PH/6fD/7PL/7vP/8vb/9vn/+/z//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/+Pr/ + 8/b/7/T/8Pb/6vH/3eP97vL++fr//P3/AAAAAAAAAAAAAAAAAAAA/f7/+vv/9fj/7/T/5+//z9f+t7v4 + uLn9Z2zFLzucFCGIMz6gGCCMAAd4AAl2Dx2EER+GXWK8c3XLKzKXd4LP4er/6/L/8PX/9/n//P3//v// + AAAAAAAA/v7/+fv/8/b/7PP/y9H/i4/erLbt4er/5e3/7fP/8/b/+fv//f3//v7/AAAAAAAAAAAAAAAA + /v7/+/z/9vj/8PT/6/L/3+n/x9H9aHTAZGvG3+b9+Pr/+/z/AAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + +Pr/8vb/6/H/3OX+wMn4maDmdHrPWGG6T1a1eoHWcHfOTlayUlq1SlKubHjAxMj/0dn/4+v/7PL/8vb/ + +Pr//P3//v7/AAAAAAAAAAAA/f7/+fr/7vP/xsv5YGXAHymRKjKYYWS9rbLz4u3/6/P/8vb/+fr//f7/ + AAAAAAAAAAAA/v//+/z/9vj/7fL/5e3/xs7/Y23BIiiSAABeLTab3+b/9/r/+/z/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAA/f7/+vz/9vj/8PX/6vH/3eb/ydL8xM/6uMPyt733w8j/zNb/1Nz/3OT/4uz/5u7/ + 7fP/8vb/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAA/f7/+fv/7vP/jpHiAAJ1CxaBER6GAABoFRmGbXbH + 0Nf/7PL/9fj//P3/AAAAAAAAAAAA/v7/+fv/8/f/4Of/hYvbKDGZAABuAABdAAZyi5La5+7/9vn/+/z/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/9ff/8vb/7/X/7fP/6/L/5u3/5ez/6fD/ + 7PP/7/T/8fX/9Pf/9/n/+vv//P3//v7//v//AAAAAAAAAAAAAAAAAAAA/v7/+fv/8fb/2eH9fIbQExqH + AABrAAp6AAFyAABwS0+uztX39vn/+vz/AAAAAAAAAAAA/f7/+Pr/8ff/qbLpAABrAABhAABwDBWAfobX + 5e3/8PX/9vn//f3/AAAAAAAA/v///f7/+/z/+vv/+vv/+vz//P3//v7//v///v7//P3/+vz/+Pr/9/n/ + 9vj/9vj/9vj/9vj/9/n/+fr/+/z//P3//f7//v7//f7//P3/+/z/+vz/+/z//P3//v7/AAAA/v7/+/z/ + 9fj/7/T/5/H/uML1U1e1AAh5AABuAABvMjmdv8bz9vr/+vv/AAAAAAAAAAAA/f7/+fv/7/T/iY7aDxSA + GiONa3XHsr7w4Oj/6/H/9Pf/+vz//v7/AAAA/v///P3/+Pr/9Pf/8/f/9fj/9fj/9vn/+/z//v7/AAAA + AAAAAAAA/v7//f7//P3/+/z/+/z//P3//f7//v//AAAAAAAAAAAA/v7/+/z/9/n/9vn/9vn/9Pj/9vn/ + +/z//v7/AAAA/f7/+vz/9fj/7/T/6vL/3ef/i5PbGRqJBQl5jJbZ6vH/9Pj/+/z/AAAAAAAAAAAA/f7/ + +fv/8fT/1Nn9t7/0wcr54er/7fT/8fX/9fj/+vv//f7/AAAAAAAA/f3/+Pr/8PT/6/L/3uX/ztb/5Or/ + 8/f/+Pr//f7/AAAAAAAAAAAA/f7/+vz/+Pr/+fv/+fv/+vv//f3//v//AAAAAAAAAAAA/P3/9/n/7vL/ + 193/ztf/5u3/7vP/9Pf/+/z//v7/AAAA/v7//P3/+Pr/8fX/7PP/5/D/sLfxoKnk4+r/8vf/9/n//f3/ + AAAAAAAAAAAA/v7/+/z/9vn/9Pf/8vb/8fb/8fX/9Pf/+Pr//P3//v7/AAAAAAAA/v7/+vv/8vb/5+7/ + y9H/WWO9KSmSkZXj6vD/+Pv//P3/AAAAAAAA/f7/+Pr/9fj/8vb/6O7/7vP/9fj/+Pr//f7/AAAAAAAA + /v//+vv/8vb/7PP/hYraKiqKlp7i6PD/7fP/9ff/+/z//v7/AAAAAAAA/f7/+vv/9ff/8fX/8PX/8vb/ + 8/f/9vn/+/z//v7/AAAAAAAAAAAAAAAA/f7/+/z/+vv/+fr/+fr/+vv//P3//v7/AAAAAAAAAAAAAAAA + /P3/9fj/7PL/1d7/RUysAABhAABlg4ja6/D/+Pr//P3/AAAAAAAA+/z/9fj/6e7/2eD/h4/bnaXg7PH/ + 9fj/+/z/AAAAAAAA/v7/+Pr/8PX/y9X1JDGVAABaERWDoKnp6PH/7vP/9/n//P3/AAAAAAAAAAAA/v7/ + /P3/+vv/+fv/+fv/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//v7//v7//v//AAAAAAAA + AAAAAAAAAAAA/v7/+fv/8PX/7PX/ipPdAABsAABlQ1Cp3Ob/7vP/9/n//f7/AAAAAAAA+fv/9Pj/yNH5 + Ule2DBJ8Ljie0df+8fb/+fv//v7/AAAA/v7/+Pr/7/X/hY3YAABxAAl7AABuEBaEs7nz6fH/8fX/+vv/ + /v7/AAAAAAAAAAAAAAAA/v///v7//v7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9vn/7PL/0tn/LzidAQFsAAB0iZHb6vP/8PT/+fv//v//AAAA + /v7/+Pr/8vf/r7rqAAV4AABdPUen1N//7PL/9vn//f7/AAAA/v7/+fr/7/T/yc75S1G0AABrARKAAABp + Qker0df/7fP/9/n//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/5+7/cXXNAAd2AABuMDebzdT97PL/ + 9vj//P3/AAAAAAAA/v7/9/n/7/X/tL/uFCCLAABqHSqRvcf46fD/9Pf//f3/AAAAAAAA+vv/8vX/6vH/ + yM3+JC2XAABtAAV2Agx9q7Ly7vT/9vn//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/4uj/WWO1AAVx + KTaYu8T07fT/8vb/+vv//v7/AAAAAAAA/v7/9/n/7vX/vsn1Iy2SAABrAQ99mp/o6PD/9Pf//P3/AAAA + AAAA/P3/9/n/7vP/6fL/s7z2DBB/AABeQ0uttrr56e7/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +fv/4ef6g4zNbXfFw8v27fT/8vb/+Pr//f3/AAAAAAAAAAAA/v7/9/n/7vT/yNL7MjucAABtBxF/nKLo + 6fH/9Pf//P3/AAAAAAAA/v7/+/z/9fj/7fL/6/T/jZXbLzScrrP14en/7fL/+fv//v7/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+vz/8PP91dr34+f/8vb/8/f/9/r//P3//v//AAAAAAAAAAAA/v7/+Pr/8PX/1N3/ + QUqmAQRxBQ98m6Dm7PL/9fj//P3/AAAAAAAAAAAA/v7/+/z/9ff/8PX/5ez/ytH94ej/8vb/9vj/+/z/ + /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA + /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ + 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA + AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file diff --git a/Project/Panels/EditYtypArchetypePanel.Designer.cs b/Project/Panels/EditYtypArchetypePanel.Designer.cs new file mode 100644 index 0000000..6fbd3ff --- /dev/null +++ b/Project/Panels/EditYtypArchetypePanel.Designer.cs @@ -0,0 +1,632 @@ +namespace CodeWalker.Project.Panels +{ + partial class EditYtypArchetypePanel + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditYtypArchetypePanel)); + this.BaseArchetypeTabPage = new System.Windows.Forms.TabPage(); + this.ArchetypeDeleteButton = new System.Windows.Forms.Button(); + this.label13 = new System.Windows.Forms.Label(); + this.BSRadiusTextBox = new System.Windows.Forms.TextBox(); + this.BSCenterTextBox = new System.Windows.Forms.TextBox(); + this.BBMaxTextBox = new System.Windows.Forms.TextBox(); + this.BBMinTextBox = new System.Windows.Forms.TextBox(); + this.ArchetypeNameTextBox = new System.Windows.Forms.TextBox(); + this.ArchetypeFlagsTextBox = new System.Windows.Forms.TextBox(); + this.PhysicsDictionaryTextBox = new System.Windows.Forms.TextBox(); + this.ClipDictionaryTextBox = new System.Windows.Forms.TextBox(); + this.AssetNameTextBox = new System.Windows.Forms.TextBox(); + this.TextureDictTextBox = new System.Windows.Forms.TextBox(); + this.label12 = new System.Windows.Forms.Label(); + this.label11 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.PhysicsDictHashLabel = new System.Windows.Forms.Label(); + this.TextureDictHashLabel = new System.Windows.Forms.Label(); + this.EntityFlagsCheckedListBox = new System.Windows.Forms.CheckedListBox(); + this.label14 = new System.Windows.Forms.Label(); + this.SpecialAttributeNumericUpDown = new System.Windows.Forms.NumericUpDown(); + this.label10 = new System.Windows.Forms.Label(); + this.label9 = new System.Windows.Forms.Label(); + this.AssetTypeComboBox = new System.Windows.Forms.ComboBox(); + this.label8 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.HDTextureDistNumericUpDown = new System.Windows.Forms.NumericUpDown(); + this.label3 = new System.Windows.Forms.Label(); + this.LodDistNumericUpDown = new System.Windows.Forms.NumericUpDown(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.TabControl = new System.Windows.Forms.TabControl(); + this.MloArchetypeTabPage = new System.Windows.Forms.TabPage(); + this.EntitySetsListBox = new System.Windows.Forms.CheckedListBox(); + this.label15 = new System.Windows.Forms.Label(); + this.BaseArchetypeTabPage.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.SpecialAttributeNumericUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.HDTextureDistNumericUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.LodDistNumericUpDown)).BeginInit(); + this.TabControl.SuspendLayout(); + this.MloArchetypeTabPage.SuspendLayout(); + this.SuspendLayout(); + // + // BaseArchetypeTabPage + // + this.BaseArchetypeTabPage.Controls.Add(this.ArchetypeDeleteButton); + this.BaseArchetypeTabPage.Controls.Add(this.label13); + this.BaseArchetypeTabPage.Controls.Add(this.BSRadiusTextBox); + this.BaseArchetypeTabPage.Controls.Add(this.BSCenterTextBox); + this.BaseArchetypeTabPage.Controls.Add(this.BBMaxTextBox); + this.BaseArchetypeTabPage.Controls.Add(this.BBMinTextBox); + this.BaseArchetypeTabPage.Controls.Add(this.ArchetypeNameTextBox); + this.BaseArchetypeTabPage.Controls.Add(this.ArchetypeFlagsTextBox); + this.BaseArchetypeTabPage.Controls.Add(this.PhysicsDictionaryTextBox); + this.BaseArchetypeTabPage.Controls.Add(this.ClipDictionaryTextBox); + this.BaseArchetypeTabPage.Controls.Add(this.AssetNameTextBox); + this.BaseArchetypeTabPage.Controls.Add(this.TextureDictTextBox); + this.BaseArchetypeTabPage.Controls.Add(this.label12); + this.BaseArchetypeTabPage.Controls.Add(this.label11); + this.BaseArchetypeTabPage.Controls.Add(this.label5); + this.BaseArchetypeTabPage.Controls.Add(this.PhysicsDictHashLabel); + this.BaseArchetypeTabPage.Controls.Add(this.TextureDictHashLabel); + this.BaseArchetypeTabPage.Controls.Add(this.EntityFlagsCheckedListBox); + this.BaseArchetypeTabPage.Controls.Add(this.label14); + this.BaseArchetypeTabPage.Controls.Add(this.SpecialAttributeNumericUpDown); + this.BaseArchetypeTabPage.Controls.Add(this.label10); + this.BaseArchetypeTabPage.Controls.Add(this.label9); + this.BaseArchetypeTabPage.Controls.Add(this.AssetTypeComboBox); + this.BaseArchetypeTabPage.Controls.Add(this.label8); + this.BaseArchetypeTabPage.Controls.Add(this.label7); + this.BaseArchetypeTabPage.Controls.Add(this.label6); + this.BaseArchetypeTabPage.Controls.Add(this.label4); + this.BaseArchetypeTabPage.Controls.Add(this.HDTextureDistNumericUpDown); + this.BaseArchetypeTabPage.Controls.Add(this.label3); + this.BaseArchetypeTabPage.Controls.Add(this.LodDistNumericUpDown); + this.BaseArchetypeTabPage.Controls.Add(this.label2); + this.BaseArchetypeTabPage.Controls.Add(this.label1); + this.BaseArchetypeTabPage.Location = new System.Drawing.Point(4, 22); + this.BaseArchetypeTabPage.Name = "BaseArchetypeTabPage"; + this.BaseArchetypeTabPage.Padding = new System.Windows.Forms.Padding(3); + this.BaseArchetypeTabPage.Size = new System.Drawing.Size(631, 479); + this.BaseArchetypeTabPage.TabIndex = 0; + this.BaseArchetypeTabPage.Text = "Base Archetype Def"; + this.BaseArchetypeTabPage.UseVisualStyleBackColor = true; + // + // ArchetypeDeleteButton + // + this.ArchetypeDeleteButton.Anchor = System.Windows.Forms.AnchorStyles.Bottom; + this.ArchetypeDeleteButton.Location = new System.Drawing.Point(270, 450); + this.ArchetypeDeleteButton.Name = "ArchetypeDeleteButton"; + this.ArchetypeDeleteButton.Size = new System.Drawing.Size(126, 23); + this.ArchetypeDeleteButton.TabIndex = 79; + this.ArchetypeDeleteButton.Text = "Delete Archetype"; + this.ArchetypeDeleteButton.UseVisualStyleBackColor = true; + this.ArchetypeDeleteButton.Click += new System.EventHandler(this.DeleteArchetypeButton_Click); + // + // label13 + // + this.label13.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(8, 411); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(57, 13); + this.label13.TabIndex = 78; + this.label13.Text = "BSRadius:"; + // + // BSRadiusTextBox + // + this.BSRadiusTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.BSRadiusTextBox.Location = new System.Drawing.Point(71, 408); + this.BSRadiusTextBox.Name = "BSRadiusTextBox"; + this.BSRadiusTextBox.Size = new System.Drawing.Size(552, 20); + this.BSRadiusTextBox.TabIndex = 77; + this.BSRadiusTextBox.TextChanged += new System.EventHandler(this.BSRadiusTextBox_TextChanged); + // + // BSCenterTextBox + // + this.BSCenterTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.BSCenterTextBox.Location = new System.Drawing.Point(71, 382); + this.BSCenterTextBox.Name = "BSCenterTextBox"; + this.BSCenterTextBox.Size = new System.Drawing.Size(552, 20); + this.BSCenterTextBox.TabIndex = 75; + this.BSCenterTextBox.TextChanged += new System.EventHandler(this.BSCenterTextBox_TextChanged); + // + // BBMaxTextBox + // + this.BBMaxTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.BBMaxTextBox.Location = new System.Drawing.Point(71, 356); + this.BBMaxTextBox.Name = "BBMaxTextBox"; + this.BBMaxTextBox.Size = new System.Drawing.Size(552, 20); + this.BBMaxTextBox.TabIndex = 73; + this.BBMaxTextBox.TextChanged += new System.EventHandler(this.BBMaxTextBox_TextChanged); + // + // BBMinTextBox + // + this.BBMinTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.BBMinTextBox.Location = new System.Drawing.Point(71, 330); + this.BBMinTextBox.Name = "BBMinTextBox"; + this.BBMinTextBox.Size = new System.Drawing.Size(552, 20); + this.BBMinTextBox.TabIndex = 71; + this.BBMinTextBox.TextChanged += new System.EventHandler(this.BBMinTextBox_TextChanged); + // + // ArchetypeNameTextBox + // + this.ArchetypeNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ArchetypeNameTextBox.Location = new System.Drawing.Point(110, 9); + this.ArchetypeNameTextBox.Name = "ArchetypeNameTextBox"; + this.ArchetypeNameTextBox.Size = new System.Drawing.Size(247, 20); + this.ArchetypeNameTextBox.TabIndex = 70; + this.ArchetypeNameTextBox.TextChanged += new System.EventHandler(this.ArchetypeNameTextBox_TextChanged); + // + // ArchetypeFlagsTextBox + // + this.ArchetypeFlagsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ArchetypeFlagsTextBox.Location = new System.Drawing.Point(476, 12); + this.ArchetypeFlagsTextBox.Name = "ArchetypeFlagsTextBox"; + this.ArchetypeFlagsTextBox.Size = new System.Drawing.Size(147, 20); + this.ArchetypeFlagsTextBox.TabIndex = 66; + this.ArchetypeFlagsTextBox.TextChanged += new System.EventHandler(this.ArchetypeFlagsTextBox_TextChanged); + // + // PhysicsDictionaryTextBox + // + this.PhysicsDictionaryTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.PhysicsDictionaryTextBox.Location = new System.Drawing.Point(110, 191); + this.PhysicsDictionaryTextBox.Name = "PhysicsDictionaryTextBox"; + this.PhysicsDictionaryTextBox.Size = new System.Drawing.Size(206, 20); + this.PhysicsDictionaryTextBox.TabIndex = 60; + this.PhysicsDictionaryTextBox.TextChanged += new System.EventHandler(this.PhysicsDictionaryTextBox_TextChanged); + // + // ClipDictionaryTextBox + // + this.ClipDictionaryTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ClipDictionaryTextBox.Location = new System.Drawing.Point(110, 165); + this.ClipDictionaryTextBox.Name = "ClipDictionaryTextBox"; + this.ClipDictionaryTextBox.Size = new System.Drawing.Size(247, 20); + this.ClipDictionaryTextBox.TabIndex = 58; + this.ClipDictionaryTextBox.TextChanged += new System.EventHandler(this.ClipDictionaryTextBox_TextChanged); + // + // AssetNameTextBox + // + this.AssetNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.AssetNameTextBox.Location = new System.Drawing.Point(110, 35); + this.AssetNameTextBox.Name = "AssetNameTextBox"; + this.AssetNameTextBox.Size = new System.Drawing.Size(247, 20); + this.AssetNameTextBox.TabIndex = 56; + this.AssetNameTextBox.TextChanged += new System.EventHandler(this.AssetNameTextBox_TextChanged); + // + // TextureDictTextBox + // + this.TextureDictTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.TextureDictTextBox.Location = new System.Drawing.Point(110, 139); + this.TextureDictTextBox.Name = "TextureDictTextBox"; + this.TextureDictTextBox.Size = new System.Drawing.Size(206, 20); + this.TextureDictTextBox.TabIndex = 54; + this.TextureDictTextBox.TextChanged += new System.EventHandler(this.TextureDictTextBox_TextChanged); + // + // label12 + // + this.label12.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(8, 385); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(55, 13); + this.label12.TabIndex = 76; + this.label12.Text = "BSCenter:"; + // + // label11 + // + this.label11.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(19, 359); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(44, 13); + this.label11.TabIndex = 74; + this.label11.Text = "BBMax:"; + // + // label5 + // + this.label5.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(24, 333); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(41, 13); + this.label5.TabIndex = 72; + this.label5.Text = "BBMin:"; + // + // PhysicsDictHashLabel + // + this.PhysicsDictHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Right))); + this.PhysicsDictHashLabel.AutoSize = true; + this.PhysicsDictHashLabel.Location = new System.Drawing.Point(322, 194); + this.PhysicsDictHashLabel.Name = "PhysicsDictHashLabel"; + this.PhysicsDictHashLabel.Size = new System.Drawing.Size(35, 13); + this.PhysicsDictHashLabel.TabIndex = 69; + this.PhysicsDictHashLabel.Text = "Hash:"; + // + // TextureDictHashLabel + // + this.TextureDictHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Right))); + this.TextureDictHashLabel.AutoSize = true; + this.TextureDictHashLabel.Location = new System.Drawing.Point(322, 142); + this.TextureDictHashLabel.Name = "TextureDictHashLabel"; + this.TextureDictHashLabel.Size = new System.Drawing.Size(35, 13); + this.TextureDictHashLabel.TabIndex = 68; + this.TextureDictHashLabel.Text = "Hash:"; + // + // EntityFlagsCheckedListBox + // + this.EntityFlagsCheckedListBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Right))); + this.EntityFlagsCheckedListBox.CheckOnClick = true; + this.EntityFlagsCheckedListBox.FormattingEnabled = true; + this.EntityFlagsCheckedListBox.Items.AddRange(new object[] { + "1 - Unk01", + "2 - Unk02", + "4 - Unk03", + "8 - Unk04", + "16 - Unk05", + "32 - Static", + "64 - Unk07", + "128 - Unk08", + "256 - Unk09", + "512 - Unk10", + "1024 - Unk11", + "2048 - Unk12", + "4096 - Unk13", + "8192 - Unk14", + "16384 - Unk15", + "32768 - Unk16", + "65536 - Unk17", + "131072 - Unk18", + "262144 - Unk19", + "524288 - Unk20", + "1048576 - Unk21", + "2097152 - Unk22", + "4194304 - Unk23", + "8388608 - Unk24", + "16777216 - Unk25", + "33554432 - Unk26", + "67108864 - Unk27", + "134217728 - Unk28", + "268435456 - Unk29", + "536870912 - Unk30", + "1073741824 - Unk31", + "2147483648 - Unk32"}); + this.EntityFlagsCheckedListBox.Location = new System.Drawing.Point(422, 38); + this.EntityFlagsCheckedListBox.Name = "EntityFlagsCheckedListBox"; + this.EntityFlagsCheckedListBox.Size = new System.Drawing.Size(201, 274); + this.EntityFlagsCheckedListBox.TabIndex = 67; + this.EntityFlagsCheckedListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.ArchetypeFlagsCheckedListBox_ItemCheck); + // + // label14 + // + this.label14.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(419, 15); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(35, 13); + this.label14.TabIndex = 65; + this.label14.Text = "Flags:"; + // + // SpecialAttributeNumericUpDown + // + this.SpecialAttributeNumericUpDown.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.SpecialAttributeNumericUpDown.Location = new System.Drawing.Point(110, 113); + this.SpecialAttributeNumericUpDown.Maximum = new decimal(new int[] { + 9999999, + 0, + 0, + 0}); + this.SpecialAttributeNumericUpDown.Name = "SpecialAttributeNumericUpDown"; + this.SpecialAttributeNumericUpDown.Size = new System.Drawing.Size(247, 20); + this.SpecialAttributeNumericUpDown.TabIndex = 64; + this.SpecialAttributeNumericUpDown.ValueChanged += new System.EventHandler(this.SpecialAttributeNumericUpDown_ValueChanged); + // + // label10 + // + this.label10.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(17, 115); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(87, 13); + this.label10.TabIndex = 63; + this.label10.Text = "Special Attribute:"; + // + // label9 + // + this.label9.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(41, 220); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(63, 13); + this.label9.TabIndex = 62; + this.label9.Text = "Asset Type:"; + // + // AssetTypeComboBox + // + this.AssetTypeComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.AssetTypeComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.AssetTypeComboBox.FormattingEnabled = true; + this.AssetTypeComboBox.Location = new System.Drawing.Point(110, 217); + this.AssetTypeComboBox.Name = "AssetTypeComboBox"; + this.AssetTypeComboBox.Size = new System.Drawing.Size(247, 21); + this.AssetTypeComboBox.TabIndex = 61; + // + // label8 + // + this.label8.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(8, 194); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(96, 13); + this.label8.TabIndex = 59; + this.label8.Text = "Physics Dictionary:"; + // + // label7 + // + this.label7.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(27, 168); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(77, 13); + this.label7.TabIndex = 57; + this.label7.Text = "Clip Dictionary:"; + // + // label6 + // + this.label6.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(37, 38); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(67, 13); + this.label6.TabIndex = 55; + this.label6.Text = "Asset Name:"; + // + // label4 + // + this.label4.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(8, 142); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(96, 13); + this.label4.TabIndex = 53; + this.label4.Text = "Texture Dictionary:"; + // + // HDTextureDistNumericUpDown + // + this.HDTextureDistNumericUpDown.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.HDTextureDistNumericUpDown.DecimalPlaces = 8; + this.HDTextureDistNumericUpDown.Location = new System.Drawing.Point(110, 87); + this.HDTextureDistNumericUpDown.Maximum = new decimal(new int[] { + 9999999, + 0, + 0, + 0}); + this.HDTextureDistNumericUpDown.Name = "HDTextureDistNumericUpDown"; + this.HDTextureDistNumericUpDown.Size = new System.Drawing.Size(247, 20); + this.HDTextureDistNumericUpDown.TabIndex = 52; + this.HDTextureDistNumericUpDown.ValueChanged += new System.EventHandler(this.HDTextureDistNumericUpDown_ValueChanged); + // + // label3 + // + this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(18, 89); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(86, 13); + this.label3.TabIndex = 51; + this.label3.Text = "HD Texture Dist:"; + // + // LodDistNumericUpDown + // + this.LodDistNumericUpDown.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.LodDistNumericUpDown.DecimalPlaces = 8; + this.LodDistNumericUpDown.Location = new System.Drawing.Point(110, 61); + this.LodDistNumericUpDown.Maximum = new decimal(new int[] { + 9999999, + 0, + 0, + 0}); + this.LodDistNumericUpDown.Name = "LodDistNumericUpDown"; + this.LodDistNumericUpDown.Size = new System.Drawing.Size(247, 20); + this.LodDistNumericUpDown.TabIndex = 50; + this.LodDistNumericUpDown.ValueChanged += new System.EventHandler(this.LodDistNumericUpDown_ValueChanged); + // + // label2 + // + this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(55, 63); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(49, 13); + this.label2.TabIndex = 49; + this.label2.Text = "Lod Dist:"; + // + // label1 + // + this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(66, 12); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(38, 13); + this.label1.TabIndex = 48; + this.label1.Text = "Name:"; + // + // TabControl + // + this.TabControl.Controls.Add(this.BaseArchetypeTabPage); + this.TabControl.Controls.Add(this.MloArchetypeTabPage); + this.TabControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.TabControl.Location = new System.Drawing.Point(0, 0); + this.TabControl.Name = "TabControl"; + this.TabControl.SelectedIndex = 0; + this.TabControl.Size = new System.Drawing.Size(639, 505); + this.TabControl.TabIndex = 48; + // + // MloArchetypeTabPage + // + this.MloArchetypeTabPage.Controls.Add(this.EntitySetsListBox); + this.MloArchetypeTabPage.Controls.Add(this.label15); + this.MloArchetypeTabPage.Location = new System.Drawing.Point(4, 22); + this.MloArchetypeTabPage.Name = "MloArchetypeTabPage"; + this.MloArchetypeTabPage.Padding = new System.Windows.Forms.Padding(3); + this.MloArchetypeTabPage.Size = new System.Drawing.Size(631, 479); + this.MloArchetypeTabPage.TabIndex = 1; + this.MloArchetypeTabPage.Text = "Mlo Archetype Def"; + this.MloArchetypeTabPage.UseVisualStyleBackColor = true; + // + // EntitySetsListBox + // + this.EntitySetsListBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.EntitySetsListBox.CheckOnClick = true; + this.EntitySetsListBox.FormattingEnabled = true; + this.EntitySetsListBox.Location = new System.Drawing.Point(11, 42); + this.EntitySetsListBox.Name = "EntitySetsListBox"; + this.EntitySetsListBox.Size = new System.Drawing.Size(603, 214); + this.EntitySetsListBox.TabIndex = 2; + this.EntitySetsListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.EntitySetsListBox_ItemCheck); + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Location = new System.Drawing.Point(8, 26); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(57, 13); + this.label15.TabIndex = 1; + this.label15.Text = "EntitySets:"; + // + // EditYtypArchetypePanel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(639, 505); + this.Controls.Add(this.TabControl); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MinimumSize = new System.Drawing.Size(531, 458); + this.Name = "EditYtypArchetypePanel"; + this.Text = "Edit Archetype"; + this.Load += new System.EventHandler(this.EditYtypArchetypePanel_Load); + this.BaseArchetypeTabPage.ResumeLayout(false); + this.BaseArchetypeTabPage.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.SpecialAttributeNumericUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.HDTextureDistNumericUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.LodDistNumericUpDown)).EndInit(); + this.TabControl.ResumeLayout(false); + this.MloArchetypeTabPage.ResumeLayout(false); + this.MloArchetypeTabPage.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TabPage BaseArchetypeTabPage; + private System.Windows.Forms.Button ArchetypeDeleteButton; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.TextBox BSRadiusTextBox; + private System.Windows.Forms.TextBox BSCenterTextBox; + private System.Windows.Forms.TextBox BBMaxTextBox; + private System.Windows.Forms.TextBox BBMinTextBox; + private System.Windows.Forms.TextBox ArchetypeNameTextBox; + private System.Windows.Forms.TextBox ArchetypeFlagsTextBox; + private System.Windows.Forms.TextBox PhysicsDictionaryTextBox; + private System.Windows.Forms.TextBox ClipDictionaryTextBox; + private System.Windows.Forms.TextBox AssetNameTextBox; + private System.Windows.Forms.TextBox TextureDictTextBox; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label PhysicsDictHashLabel; + private System.Windows.Forms.Label TextureDictHashLabel; + private System.Windows.Forms.CheckedListBox EntityFlagsCheckedListBox; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.NumericUpDown SpecialAttributeNumericUpDown; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.ComboBox AssetTypeComboBox; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.NumericUpDown HDTextureDistNumericUpDown; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.NumericUpDown LodDistNumericUpDown; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TabControl TabControl; + private System.Windows.Forms.TabPage MloArchetypeTabPage; + private System.Windows.Forms.CheckedListBox EntitySetsListBox; + private System.Windows.Forms.Label label15; + } +} \ No newline at end of file diff --git a/Project/Panels/EditYtypArchetypePanel.cs b/Project/Panels/EditYtypArchetypePanel.cs new file mode 100644 index 0000000..79fc5a6 --- /dev/null +++ b/Project/Panels/EditYtypArchetypePanel.cs @@ -0,0 +1,353 @@ +using System; +using System.Globalization; +using System.Windows.Forms; +using CodeWalker.GameFiles; +using SharpDX; + +namespace CodeWalker.Project.Panels +{ + public partial class EditYtypArchetypePanel : ProjectPanel + { + public ProjectForm ProjectForm; + + private bool populatingui; + + public EditYtypArchetypePanel(ProjectForm owner) + { + InitializeComponent(); + + ProjectForm = owner; + } + + public Archetype CurrentArchetype { get; set; } + + private void EditYtypArchetypePanel_Load(object sender, EventArgs e) + { + AssetTypeComboBox.Items.AddRange(Enum.GetNames(typeof(Unk_1991964615))); + } + + public void SetArchetype(Archetype archetype) + { + CurrentArchetype = archetype; + Tag = archetype; + UpdateFormTitle(); + UpdateControls(); + } + + private void UpdateFormTitle() + { + Text = CurrentArchetype?.Name ?? "Edit Archetype"; + } + + private void UpdateControls() + { + if (CurrentArchetype != null) + { + ArchetypeDeleteButton.Enabled = ProjectForm.YtypExistsInProject(CurrentArchetype.Ytyp); + ArchetypeNameTextBox.Text = CurrentArchetype.Name; + AssetNameTextBox.Text = CurrentArchetype.AssetName; + LodDistNumericUpDown.Value = (decimal)CurrentArchetype._BaseArchetypeDef.lodDist; + HDTextureDistNumericUpDown.Value = (decimal)CurrentArchetype._BaseArchetypeDef.hdTextureDist; + SpecialAttributeNumericUpDown.Value = CurrentArchetype._BaseArchetypeDef.specialAttribute; + ArchetypeFlagsTextBox.Text = CurrentArchetype._BaseArchetypeDef.flags.ToString(); + TextureDictTextBox.Text = CurrentArchetype._BaseArchetypeDef.textureDictionary.ToCleanString(); + ClipDictionaryTextBox.Text = CurrentArchetype._BaseArchetypeDef.clipDictionary.ToCleanString(); + PhysicsDictionaryTextBox.Text = CurrentArchetype._BaseArchetypeDef.physicsDictionary.ToCleanString(); + AssetTypeComboBox.Text = CurrentArchetype._BaseArchetypeDef.assetType.ToString(); + BBMinTextBox.Text = FloatUtil.GetVector3String(CurrentArchetype._BaseArchetypeDef.bbMin); + BBMaxTextBox.Text = FloatUtil.GetVector3String(CurrentArchetype._BaseArchetypeDef.bbMax); + BSCenterTextBox.Text = FloatUtil.GetVector3String(CurrentArchetype._BaseArchetypeDef.bsCentre); + BSRadiusTextBox.Text = CurrentArchetype._BaseArchetypeDef.bsRadius.ToString(CultureInfo.InvariantCulture); + + EntitySetsListBox.Items.Clear(); + if (CurrentArchetype is MloArchetype MloArchetype) + { + if (!TabControl.TabPages.Contains(MloArchetypeTabPage)) + { + TabControl.TabPages.Add(MloArchetypeTabPage); + } + + MloInstanceData mloinstance = ProjectForm.TryGetMloInstance(MloArchetype); + if (mloinstance != null) + { + EntitySetsListBox.Enabled = true; + foreach (var sets in mloinstance.EntitySets) + { + MloInstanceEntitySet set = sets.Value; + EntitySetsListBox.Items.Add(set.EntitySet.ToString(), set.Visible); + } + } + else EntitySetsListBox.Enabled = false; + } + else TabControl.TabPages.Remove(MloArchetypeTabPage); + } + } + + private void ArchetypeFlagsTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentArchetype == null) return; + uint flags = 0; + uint.TryParse(ArchetypeFlagsTextBox.Text, out flags); + populatingui = true; + for (int i = 0; i < EntityFlagsCheckedListBox.Items.Count; i++) + { + var c = ((flags & (1u << i)) > 0); + EntityFlagsCheckedListBox.SetItemCheckState(i, c ? CheckState.Checked : CheckState.Unchecked); + } + populatingui = false; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentArchetype._BaseArchetypeDef.flags != flags) + { + CurrentArchetype._BaseArchetypeDef.flags = flags; + ProjectForm.SetYtypHasChanged(true); + } + } + } + + private void ArchetypeFlagsCheckedListBox_ItemCheck(object sender, ItemCheckEventArgs e) + { + if (populatingui) return; + if (CurrentArchetype == null) return; + uint flags = 0; + for (int i = 0; i < EntityFlagsCheckedListBox.Items.Count; i++) + { + if (e.Index == i) + { + if (e.NewValue == CheckState.Checked) + { + flags += (uint)(1 << i); + } + } + else + { + if (EntityFlagsCheckedListBox.GetItemChecked(i)) + { + flags += (uint)(1 << i); + } + } + } + populatingui = true; + ArchetypeFlagsTextBox.Text = flags.ToString(); + populatingui = false; + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentArchetype._BaseArchetypeDef.flags != flags) + { + CurrentArchetype._BaseArchetypeDef.flags = flags; + ProjectForm.SetYtypHasChanged(true); + } + } + } + + private void TextureDictTextBox_TextChanged(object sender, EventArgs e) + { + // Check that the form is not null before locking... + if (ProjectForm == null) + return; + + lock (ProjectForm.ProjectSyncRoot) + { + // Embedded... + if (TextureDictTextBox.Text == ArchetypeNameTextBox.Text) + { + TextureDictHashLabel.Text = "Embedded"; + CurrentArchetype._BaseArchetypeDef.textureDictionary = CurrentArchetype._BaseArchetypeDef.name; + return; + } + + var hash = JenkHash.GenHash(TextureDictTextBox.Text); + + if (CurrentArchetype._BaseArchetypeDef.textureDictionary != hash) + { + var ytd = ProjectForm.GameFileCache.GetYtd(hash); + if (ytd == null) + { + TextureDictHashLabel.Text = "Hash: " + hash.ToString() + " (invalid)"; + ProjectForm.SetYtypHasChanged(true); + return; + } + TextureDictHashLabel.Text = "Hash: " + hash.ToString(); + CurrentArchetype._BaseArchetypeDef.textureDictionary = hash; + ProjectForm.SetYtypHasChanged(true); + } + } + } + + private void PhysicsDictionaryTextBox_TextChanged(object sender, EventArgs e) + { + lock (ProjectForm.ProjectSyncRoot) + { + if (ProjectForm == null) + { + return; + } + + // Embedded... + if (PhysicsDictionaryTextBox.Text == ArchetypeNameTextBox.Text) + { + PhysicsDictHashLabel.Text = "Embedded"; + CurrentArchetype._BaseArchetypeDef.physicsDictionary = CurrentArchetype._BaseArchetypeDef.name; + return; + } + + var hash = JenkHash.GenHash(PhysicsDictionaryTextBox.Text); + + if (CurrentArchetype._BaseArchetypeDef.physicsDictionary != hash) + { + var ytd = ProjectForm.GameFileCache.GetYbn(hash); + if (ytd == null) + { + PhysicsDictHashLabel.Text = "Hash: " + hash.ToString() + " (invalid)"; + ProjectForm.SetYtypHasChanged(true); + return; + } + PhysicsDictHashLabel.Text = "Hash: " + hash.ToString(); + + CurrentArchetype._BaseArchetypeDef.physicsDictionary = hash; + ProjectForm.SetYtypHasChanged(true); + } + } + } + + private void ArchetypeNameTextBox_TextChanged(object sender, EventArgs e) + { + var hash = JenkHash.GenHash(ArchetypeNameTextBox.Text); + + if (CurrentArchetype._BaseArchetypeDef.name != hash) + { + CurrentArchetype._BaseArchetypeDef.name = hash; + UpdateFormTitle(); + + TreeNode tn = ProjectForm.ProjectExplorer?.FindArchetypeTreeNode(CurrentArchetype); + if (tn != null) + tn.Text = ArchetypeNameTextBox.Text ?? "0"; // using the text box text because the name may not be in the gfc. + + ProjectForm.SetYtypHasChanged(true); + } + } + + private void AssetNameTextBox_TextChanged(object sender, EventArgs e) + { + var hash = JenkHash.GenHash(AssetNameTextBox.Text); + + if (CurrentArchetype._BaseArchetypeDef.assetName != hash) + { + CurrentArchetype._BaseArchetypeDef.assetName = hash; + ProjectForm.SetYtypHasChanged(true); + } + } + + private void ClipDictionaryTextBox_TextChanged(object sender, EventArgs e) + { + var hash = JenkHash.GenHash(ClipDictionaryTextBox.Text); + + if (CurrentArchetype._BaseArchetypeDef.clipDictionary != hash) + { + CurrentArchetype._BaseArchetypeDef.clipDictionary = hash; + ProjectForm.SetYtypHasChanged(true); + } + } + + private void LodDistNumericUpDown_ValueChanged(object sender, EventArgs e) + { + var loddist = (float)LodDistNumericUpDown.Value; + if (!MathUtil.NearEqual(loddist, CurrentArchetype._BaseArchetypeDef.lodDist)) + { + CurrentArchetype._BaseArchetypeDef.lodDist = loddist; + ProjectForm.SetYtypHasChanged(true); + } + } + + private void HDTextureDistNumericUpDown_ValueChanged(object sender, EventArgs e) + { + var hddist = (float)HDTextureDistNumericUpDown.Value; + if (!MathUtil.NearEqual(hddist, CurrentArchetype._BaseArchetypeDef.hdTextureDist)) + { + CurrentArchetype._BaseArchetypeDef.hdTextureDist = hddist; + ProjectForm.SetYtypHasChanged(true); + } + } + + private void SpecialAttributeNumericUpDown_ValueChanged(object sender, EventArgs e) + { + var att = (uint)SpecialAttributeNumericUpDown.Value; + if (CurrentArchetype._BaseArchetypeDef.specialAttribute != att) + { + CurrentArchetype._BaseArchetypeDef.specialAttribute = att; + ProjectForm.SetYtypHasChanged(true); + } + } + + private void BBMinTextBox_TextChanged(object sender, EventArgs e) + { + Vector3 min = FloatUtil.ParseVector3String(BBMinTextBox.Text); + if (CurrentArchetype._BaseArchetypeDef.bbMin != min) + { + CurrentArchetype._BaseArchetypeDef.bbMin = min; + ProjectForm.SetYtypHasChanged(true); + } + } + + private void BBMaxTextBox_TextChanged(object sender, EventArgs e) + { + Vector3 max = FloatUtil.ParseVector3String(BBMaxTextBox.Text); + + if (CurrentArchetype._BaseArchetypeDef.bbMax != max) + { + CurrentArchetype._BaseArchetypeDef.bbMax = max; + ProjectForm.SetYtypHasChanged(true); + } + } + + private void BSCenterTextBox_TextChanged(object sender, EventArgs e) + { + Vector3 c = FloatUtil.ParseVector3String(BSCenterTextBox.Text); + + if (CurrentArchetype._BaseArchetypeDef.bsCentre != c) + { + CurrentArchetype._BaseArchetypeDef.bsCentre = c; + ProjectForm.SetYtypHasChanged(true); + } + } + + private void BSRadiusTextBox_TextChanged(object sender, EventArgs e) + { + if (float.TryParse(BSRadiusTextBox.Text, out float f)) + { + if (!MathUtil.NearEqual(CurrentArchetype._BaseArchetypeDef.bsRadius, f)) + { + CurrentArchetype._BaseArchetypeDef.bsRadius = f; + ProjectForm.SetYtypHasChanged(true); + } + } + else + { + CurrentArchetype._BaseArchetypeDef.bsRadius = 0f; + ProjectForm.SetYtypHasChanged(true); + } + } + + private void DeleteArchetypeButton_Click(object sender, EventArgs e) + { + ProjectForm.SetProjectItem(CurrentArchetype); + ProjectForm.DeleteArchetype(); + } + + private void EntitySetsListBox_ItemCheck(object sender, ItemCheckEventArgs e) + { + if (CurrentArchetype is MloArchetype MloArchetype) + { + var inst = ProjectForm.TryGetMloInstance(MloArchetype); + if (inst != null) + { + MloInstanceEntitySet mloInstanceEntitySet = inst.EntitySets[MloArchetype.entitySets[e.Index]._Data.name]; + mloInstanceEntitySet.Visible = e.NewValue == CheckState.Checked; + return; + } + } + e.NewValue = CheckState.Unchecked; + } + } +} diff --git a/Project/Panels/EditYtypArchetypePanel.resx b/Project/Panels/EditYtypArchetypePanel.resx new file mode 100644 index 0000000..2d9a79e --- /dev/null +++ b/Project/Panels/EditYtypArchetypePanel.resx @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAEBAAAAAAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAD////r7/3y9f7///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///+P + lce/xeb///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///+Ah7a0utv///////// + //////////8AAAAAAAAAAAD////x9P73+v7///////////+Mk8K6weH////s8Pu6wOj9/f////8AAAAA + AAAAAAD///+epdgZHILl6/z///////+NlMPIzuj///8rL41larT///////8AAAAAAAAAAAD////w9P9I + T6bAxuv///////+stNne5PP///96gMfv8/3///8AAAAAAAAAAAAAAAAAAAD////////////////M0/Fe + Z7NUXK3c4fX///////////8AAAAAAAAAAAAAAAAAAAD////////+/v+osd55gcRbYbZncLtPVqmwueP7 + /f/6/P/4+v/9/f8AAAAAAAAAAADo7fx+iNBSXLJKUqhxfsETGoRWYbOIk9QLDXNaYK5udr9kbLjv8/4A + AAD////////y9v3Cye66w+uPleA2PqM1PpmJlNF9h8tYX7LO1fLq7/zz9v7///8AAAD////j6fnf5Pf/ + ///////j6f+Lkd8rMplteMWDjNHw9Pz////l6vq4v+j4+v8AAADq7/4+Q520u+T////////////1+P/v + 9P7m6/v6+//////////a4foYGYShqNkAAADw8/3i5/n////4+v9jarba4Pf////h5/j9/v/9/v9YXrHC + yev////y9v3q7vwAAAAAAAAAAAD////K0e9LUaf9/v/7/P82OozT2O////9PVqlqcLv///8AAAAAAAAA + AAAAAAAAAAAAAAD2+P76+//////7/P+VndXh5vj////7/P/09/8AAAAAAAAAAAAAAAD//wAA/D8AAPw/ + AAD8AwAAgAMAAIADAACABwAAwAcAAMABAADAAQAAAAEAAAABAAAAAQAAAAEAAMAHAADgDwAA + + + \ No newline at end of file diff --git a/Project/Panels/EditYtypPanel.Designer.cs b/Project/Panels/EditYtypPanel.Designer.cs index 8b545b4..ac6c8c5 100644 --- a/Project/Panels/EditYtypPanel.Designer.cs +++ b/Project/Panels/EditYtypPanel.Designer.cs @@ -29,34 +29,20 @@ private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditYtypPanel)); - this.label1 = new System.Windows.Forms.Label(); this.SuspendLayout(); // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(58, 52); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(99, 13); - this.label1.TabIndex = 0; - this.label1.Text = "Ytyp editing TODO!"; - // // EditYtypPanel // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(469, 292); - this.Controls.Add(this.label1); + this.ClientSize = new System.Drawing.Size(599, 406); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Name = "EditYtypPanel"; this.Text = "Edit Ytyp"; this.ResumeLayout(false); - this.PerformLayout(); } #endregion - - private System.Windows.Forms.Label label1; } } \ No newline at end of file diff --git a/Project/Panels/ProjectExplorerPanel.cs b/Project/Panels/ProjectExplorerPanel.cs index 027b2e4..9fff95b 100644 --- a/Project/Panels/ProjectExplorerPanel.cs +++ b/Project/Panels/ProjectExplorerPanel.cs @@ -248,8 +248,53 @@ namespace CodeWalker.Project.Panels } } - private void LoadYtypTreeNodes(YtypFile ytyp, TreeNode node)//TODO! + private void LoadYtypTreeNodes(YtypFile ytyp, TreeNode node) { + if (ytyp == null) return; + + if (!string.IsNullOrEmpty(node.Name)) return; + + node.Nodes.Clear(); + + if ((ytyp.AllArchetypes != null) && (ytyp.AllArchetypes.Length > 0)) + { + var archetypesnode = node.Nodes.Add("Archetypes (" + ytyp.AllArchetypes.Length.ToString() + ")"); + archetypesnode.Name = "Archetypes"; + archetypesnode.Tag = ytyp; + var archetypes = ytyp.AllArchetypes; + for (int i = 0; i < archetypes.Length; i++) + { + var yarch = archetypes[i]; + var tarch = archetypesnode.Nodes.Add(yarch.Name); + tarch.Tag = yarch; + + if (yarch is MloArchetype mlo) + { + if ((mlo.entities.Length) > 0 && (mlo.rooms.Length > 0)) + { + MCEntityDef[] entities = mlo.entities; + var roomsnode = tarch.Nodes.Add("Rooms (" + mlo.rooms.Length.ToString() + ")"); + roomsnode.Name = "Rooms"; + for (int j = 0; j < mlo.rooms.Length; j++) + { + MCMloRoomDef room = mlo.rooms[j]; + var roomnode = roomsnode.Nodes.Add(room.RoomName); + roomnode.Tag = room; + var entitiesnode = roomnode.Nodes.Add("Attached Objects (" + room.AttachedObjects.Length + ")"); + entitiesnode.Name = "Attached Objects"; + + for (int k = 0; k < room.AttachedObjects.Length; k++) + { + uint attachedObject = room.AttachedObjects[k]; + MCEntityDef ent = entities[attachedObject]; + TreeNode entnode = entitiesnode.Nodes.Add(ent.ToString()); + entnode.Tag = ent; + } + } + } + } + } + } } private void LoadYndTreeNodes(YndFile ynd, TreeNode node) { @@ -726,7 +771,101 @@ namespace CodeWalker.Project.Panels } return null; } + public TreeNode FindYtypTreeNode(YtypFile ytyp) + { + if (ProjectTreeView.Nodes.Count <= 0) return null; + var projnode = ProjectTreeView.Nodes[0]; + var ytypsnode = GetChildTreeNode(projnode, "Ytyp"); + if (ytypsnode == null) return null; + for (int i = 0; i < ytypsnode.Nodes.Count; i++) + { + var ytypnode = ytypsnode.Nodes[i]; + if (ytypnode.Tag == ytyp) return ytypnode; + } + return null; + } + public TreeNode FindArchetypeTreeNode(Archetype archetype) + { + if (archetype == null) return null; + TreeNode ytypnode = FindYtypTreeNode(archetype.Ytyp); + if (ytypnode == null) return null; + var archetypenode = GetChildTreeNode(ytypnode, "Archetypes"); + if (archetypenode == null) return null; + for (int i = 0; i < archetypenode.Nodes.Count; i++) + { + TreeNode archnode = archetypenode.Nodes[i]; + if (archnode.Tag == archetype) return archnode; + } + return null; + } + public TreeNode FindMloRoomTreeNode(MCMloRoomDef room) + { + if (room == null) return null; + TreeNode ytypnode = FindYtypTreeNode(room.Archetype.Ytyp); + if (ytypnode == null) return null; + + TreeNode archetypesnode = GetChildTreeNode(ytypnode, "Archetypes"); + if (archetypesnode == null) return null; + + for (int i = 0; i < archetypesnode.Nodes.Count; i++) + { + TreeNode mloarchetypenode = archetypesnode.Nodes[i]; + if (mloarchetypenode.Tag == room.Archetype) + { + TreeNode roomsnode = GetChildTreeNode(mloarchetypenode, "Rooms"); + if (roomsnode == null) return null; + + for (int j = 0; j < roomsnode.Nodes.Count; j++) + { + TreeNode roomnode = roomsnode.Nodes[j]; + if (roomnode.Tag == room) return roomnode; + } + break; + } + } + return null; + } + public TreeNode FindMloEntityTreeNode(MCEntityDef ent) + { + MCMloRoomDef entityroom = ent?.Archetype?.GetEntityRoom(ent); + if (entityroom == null) return null; + + TreeNode ytypnode = FindYtypTreeNode(ent.Archetype.Ytyp); + if (ytypnode == null) return null; + + var archetypesnode = GetChildTreeNode(ytypnode, "Archetypes"); + if (archetypesnode == null) return null; + + for (int i = 0; i < archetypesnode.Nodes.Count; i++) + { + TreeNode mloarchetypenode = archetypesnode.Nodes[i]; + if (mloarchetypenode.Tag == ent.Archetype) + { + TreeNode roomsnode = GetChildTreeNode(mloarchetypenode, "Rooms"); + if (roomsnode == null) return null; + + for (int j = 0; j < roomsnode.Nodes.Count; j++) + { + TreeNode roomnode = roomsnode.Nodes[j]; + if (roomnode.Tag == entityroom) + { + TreeNode entitiesnode = GetChildTreeNode(roomnode, "Attached Objects"); + if (entitiesnode == null) return null; + + for (var k = 0; k < entitiesnode.Nodes.Count; k++) + { + TreeNode entitynode = entitiesnode.Nodes[k]; + if (entitynode.Tag == ent) return entitynode; + } + break; + } + } + break; + } + } + return null; + } public TreeNode FindYndTreeNode(YndFile ynd) { if (ProjectTreeView.Nodes.Count <= 0) return null; @@ -974,6 +1113,51 @@ namespace CodeWalker.Project.Panels } } } + public void TrySelectMloEntityTreeNode(MCEntityDef ent) + { + TreeNode entnode = FindMloEntityTreeNode(ent); + if (entnode != null) + { + if (ProjectTreeView.SelectedNode == entnode) + { + OnItemSelected?.Invoke(ent); + } + else + { + ProjectTreeView.SelectedNode = entnode; + } + } + } + public void TrySelectMloRoomTreeNode(MCMloRoomDef room) + { + TreeNode roomnode = FindMloRoomTreeNode(room); + if (roomnode != null) + { + if (ProjectTreeView.SelectedNode == roomnode) + { + OnItemSelected?.Invoke(room); + } + else + { + ProjectTreeView.SelectedNode = roomnode; + } + } + } + public void TrySelectArchetypeTreeNode(Archetype archetype) + { + TreeNode archetypenode = FindArchetypeTreeNode(archetype); + if (archetypenode != null) + { + if (ProjectTreeView.SelectedNode == archetypenode) + { + OnItemSelected?.Invoke(archetype); + } + else + { + ProjectTreeView.SelectedNode = archetypenode; + } + } + } public void TrySelectPathNodeTreeNode(YndNode node) { TreeNode tnode = FindPathNodeTreeNode(node); @@ -1195,6 +1379,16 @@ namespace CodeWalker.Project.Panels } } + + + public void UpdateArchetypeTreeNode(Archetype archetype) + { + var tn = FindArchetypeTreeNode(archetype); + if (tn != null) + { + tn.Text = archetype._BaseArchetypeDef.ToString(); + } + } public void UpdateCarGenTreeNode(YmapCarGen cargen) { var tn = FindCarGenTreeNode(cargen); @@ -1266,6 +1460,7 @@ namespace CodeWalker.Project.Panels } + public void RemoveEntityTreeNode(YmapEntityDef ent) { var tn = FindEntityTreeNode(ent); @@ -1275,6 +1470,7 @@ namespace CodeWalker.Project.Panels tn.Parent.Nodes.Remove(tn); } } + public void RemoveCarGenTreeNode(YmapCarGen cargen) { var tn = FindCarGenTreeNode(cargen); @@ -1294,6 +1490,28 @@ namespace CodeWalker.Project.Panels tn.Parent.Nodes.Remove(tn); } } + public void RemoveArchetypeTreeNode(Archetype archetype) + { + var tn = FindArchetypeTreeNode(archetype); + if ((tn != null) && (tn.Parent != null)) + { + tn.Parent.Text = "Archetypes (" + archetype.Ytyp.AllArchetypes.Length.ToString() + ")"; + tn.Parent.Nodes.Remove(tn); + } + } + public void RemoveMloEntityTreeNode(MCEntityDef ent) + { + var tn = FindMloEntityTreeNode(ent); + if ((tn != null) && (tn.Parent != null)) + { + var tnp = tn.Parent.Parent; + MCMloRoomDef room = null; + if (tnp != null) room = tnp.Tag as MCMloRoomDef; + + tn.Parent.Text = "Attached Objects (" + (room?.AttachedObjects.Length - 1 ?? 0) + ")"; + tn.Parent.Nodes.Remove(tn); + } + } public void RemovePathNodeTreeNode(YndNode node) { var tn = FindPathNodeTreeNode(node); diff --git a/Project/ProjectFile.cs b/Project/ProjectFile.cs index af5451e..9906b9f 100644 --- a/Project/ProjectFile.cs +++ b/Project/ProjectFile.cs @@ -59,10 +59,11 @@ namespace CodeWalker.Project Xml.AddChildWithInnerText(doc, ytypselem, "Item", ytypfilename); } + var yndselem = Xml.AddChild(doc, projelem, "YndFilenames"); foreach (string yndfilename in YndFilenames) { - Xml.AddChildWithInnerText(doc, yndselem, "Item", yndfilename); + Xml.AddChildWithInnerText(doc, ytypselem, "Item", yndfilename); } var ynvselem = Xml.AddChild(doc, projelem, "YnvFilenames"); diff --git a/Project/ProjectForm.Designer.cs b/Project/ProjectForm.Designer.cs index 00e8469..3faf152 100644 --- a/Project/ProjectForm.Designer.cs +++ b/Project/ProjectForm.Designer.cs @@ -155,6 +155,8 @@ this.ToolbarSaveButton = new System.Windows.Forms.ToolStripButton(); this.ToolbarSaveAllButton = new System.Windows.Forms.ToolStripButton(); this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); + this.YtypMloToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.YtypMloNewEntityToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.MainMenu.SuspendLayout(); this.MainToolbar.SuspendLayout(); this.SuspendLayout(); @@ -282,54 +284,54 @@ // FileOpenProjectMenu // this.FileOpenProjectMenu.Name = "FileOpenProjectMenu"; - this.FileOpenProjectMenu.Size = new System.Drawing.Size(149, 22); + this.FileOpenProjectMenu.Size = new System.Drawing.Size(152, 22); this.FileOpenProjectMenu.Text = "Project..."; this.FileOpenProjectMenu.Click += new System.EventHandler(this.FileOpenProjectMenu_Click); // // toolStripSeparator9 // this.toolStripSeparator9.Name = "toolStripSeparator9"; - this.toolStripSeparator9.Size = new System.Drawing.Size(146, 6); + this.toolStripSeparator9.Size = new System.Drawing.Size(149, 6); // // FileOpenYmapMenu // this.FileOpenYmapMenu.Name = "FileOpenYmapMenu"; - this.FileOpenYmapMenu.Size = new System.Drawing.Size(149, 22); + this.FileOpenYmapMenu.Size = new System.Drawing.Size(152, 22); this.FileOpenYmapMenu.Text = "Ymap File..."; this.FileOpenYmapMenu.Click += new System.EventHandler(this.FileOpenYmapMenu_Click); // // FileOpenYtypMenu // this.FileOpenYtypMenu.Name = "FileOpenYtypMenu"; - this.FileOpenYtypMenu.Size = new System.Drawing.Size(149, 22); + this.FileOpenYtypMenu.Size = new System.Drawing.Size(152, 22); this.FileOpenYtypMenu.Text = "Ytyp File..."; this.FileOpenYtypMenu.Click += new System.EventHandler(this.FileOpenYtypMenu_Click); // // FileOpenYndMenu // this.FileOpenYndMenu.Name = "FileOpenYndMenu"; - this.FileOpenYndMenu.Size = new System.Drawing.Size(149, 22); + this.FileOpenYndMenu.Size = new System.Drawing.Size(152, 22); this.FileOpenYndMenu.Text = "Ynd File..."; this.FileOpenYndMenu.Click += new System.EventHandler(this.FileOpenYndMenu_Click); // // FileOpenYnvMenu // this.FileOpenYnvMenu.Name = "FileOpenYnvMenu"; - this.FileOpenYnvMenu.Size = new System.Drawing.Size(149, 22); + this.FileOpenYnvMenu.Size = new System.Drawing.Size(152, 22); this.FileOpenYnvMenu.Text = "Ynv File..."; this.FileOpenYnvMenu.Click += new System.EventHandler(this.FileOpenYnvMenu_Click); // // FileOpenTrainsMenu // this.FileOpenTrainsMenu.Name = "FileOpenTrainsMenu"; - this.FileOpenTrainsMenu.Size = new System.Drawing.Size(149, 22); + this.FileOpenTrainsMenu.Size = new System.Drawing.Size(152, 22); this.FileOpenTrainsMenu.Text = "Trains File..."; this.FileOpenTrainsMenu.Click += new System.EventHandler(this.FileOpenTrainsMenu_Click); // // FileOpenScenarioMenu // this.FileOpenScenarioMenu.Name = "FileOpenScenarioMenu"; - this.FileOpenScenarioMenu.Size = new System.Drawing.Size(149, 22); + this.FileOpenScenarioMenu.Size = new System.Drawing.Size(152, 22); this.FileOpenScenarioMenu.Text = "Scenario File..."; this.FileOpenScenarioMenu.Click += new System.EventHandler(this.FileOpenScenarioMenu_Click); // @@ -594,6 +596,7 @@ this.YtypNameMenu, this.toolStripSeparator13, this.YtypNewArchetypeMenu, + this.YtypMloToolStripMenuItem, this.toolStripSeparator15, this.YtypAddToProjectMenu, this.YtypRemoveFromProjectMenu}); @@ -1174,6 +1177,22 @@ this.toolStripSeparator5.Name = "toolStripSeparator5"; this.toolStripSeparator5.Size = new System.Drawing.Size(6, 25); // + // YtypMloToolStripMenuItem + // + this.YtypMloToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.YtypMloNewEntityToolStripMenuItem}); + this.YtypMloToolStripMenuItem.Enabled = false; + this.YtypMloToolStripMenuItem.Name = "YtypMloToolStripMenuItem"; + this.YtypMloToolStripMenuItem.Size = new System.Drawing.Size(192, 22); + this.YtypMloToolStripMenuItem.Text = "Mlo"; + // + // YtypMloNewEntityToolStripMenuItem + // + this.YtypMloNewEntityToolStripMenuItem.Name = "YtypMloNewEntityToolStripMenuItem"; + this.YtypMloNewEntityToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.YtypMloNewEntityToolStripMenuItem.Text = "New Entity"; + this.YtypMloNewEntityToolStripMenuItem.Click += new System.EventHandler(this.YtypMloNewEntityToolStripMenuItem_Click); + // // ProjectForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -1325,5 +1344,7 @@ private System.Windows.Forms.ToolStripMenuItem ScenarioAddToProjectMenu; private System.Windows.Forms.ToolStripMenuItem ScenarioRemoveFromProjectMenu; private System.Windows.Forms.ToolStripMenuItem YmapNewGrassBatchMenu; + private System.Windows.Forms.ToolStripMenuItem YtypMloToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem YtypMloNewEntityToolStripMenuItem; } } \ No newline at end of file diff --git a/Project/ProjectForm.cs b/Project/ProjectForm.cs index 3a9b906..5c3bdb2 100644 --- a/Project/ProjectForm.cs +++ b/Project/ProjectForm.cs @@ -42,7 +42,9 @@ namespace CodeWalker.Project private YmapGrassInstanceBatch CurrentGrassBatch; private YtypFile CurrentYtypFile; - //private Archetype CurrentArchetype; + private Archetype CurrentArchetype; + private MCEntityDef CurrentMloEntity; + private MCMloRoomDef CurrentMloRoom; private YndFile CurrentYndFile; private YndNode CurrentPathNode; @@ -76,6 +78,7 @@ namespace CodeWalker.Project private Dictionary visibleynvs = new Dictionary(); private Dictionary visibletrains = new Dictionary(); private Dictionary visiblescenarios = new Dictionary(); + private Dictionary visiblemloentities = new Dictionary(); private bool ShowProjectItemInProcess = false; @@ -352,6 +355,13 @@ namespace CodeWalker.Project (panel) => { panel.SetYtyp(CurrentYtypFile); }, //updateFunc (panel) => { return panel.Ytyp == CurrentYtypFile; }); //findFunc } + private void ShowEditArchetypePanel(bool promote) + { + ShowPanel(promote, + () => { return new EditYtypArchetypePanel(this); }, //createFunc + (panel) => { panel.SetArchetype(CurrentArchetype); }, //updateFunc + (panel) => { return panel.CurrentArchetype == CurrentArchetype; }); //findFunc + } private void ShowEditYndPanel(bool promote) { ShowPanel(promote, @@ -422,6 +432,13 @@ namespace CodeWalker.Project (panel) => { panel.SetScenarioNode(CurrentScenarioNode); }, //updateFunc (panel) => { return panel.CurrentScenarioNode == CurrentScenarioNode; }); //findFunc } + private void ShowEditYtypArchetypeMloRoomPanel(bool promote) + { + ShowPanel(promote, + () => { return new EditYtypArchetypeMloRoomPanel(this); }, //createFunc + (panel) => { panel.SetRoom(CurrentMloRoom); }, //updateFunc + (panel) => { return panel.CurrentRoom == CurrentMloRoom; }); //findFunc + } private void ShowEditAudioFilePanel(bool promote) //TODO { } @@ -440,10 +457,22 @@ namespace CodeWalker.Project private void ShowCurrentProjectItem(bool promote) { - if (CurrentEntity != null) + if (CurrentMloEntity != null) { ShowEditYmapEntityPanel(promote); } + else if (CurrentMloRoom != null) + { + ShowEditYtypArchetypeMloRoomPanel(promote); + } + else if (CurrentEntity != null) + { + ShowEditYmapEntityPanel(promote); + } + else if (CurrentArchetype != null) + { + ShowEditArchetypePanel(promote); + } else if (CurrentCarGen != null) { ShowEditYmapCarGenPanel(promote); @@ -456,7 +485,7 @@ namespace CodeWalker.Project { ShowEditYmapPanel(promote); } - if (CurrentYtypFile != null) + else if (CurrentYtypFile != null) { ShowEditYtypPanel(promote); } @@ -542,10 +571,12 @@ namespace CodeWalker.Project public void SetProjectItem(object item) { CurrentYmapFile = item as YmapFile; + CurrentMloEntity = item as MCEntityDef; CurrentEntity = item as YmapEntityDef; CurrentCarGen = item as YmapCarGen; CurrentGrassBatch = item as YmapGrassInstanceBatch; CurrentYtypFile = item as YtypFile; + CurrentArchetype = item as Archetype; CurrentYndFile = item as YndFile; CurrentPathNode = item as YndNode; CurrentYnvFile = item as YnvFile; @@ -562,10 +593,33 @@ namespace CodeWalker.Project CurrentAudioEmitter = item as AudioPlacement; if (CurrentAudioEmitter?.AudioEmitter == null) CurrentAudioEmitter = null; CurrentAudioZoneList = item as Dat151AmbientZoneList; CurrentAudioEmitterList = item as Dat151AmbientEmitterList; + CurrentMloRoom = item as MCMloRoomDef; - if (CurrentEntity != null) + if (CurrentMloEntity != null) { - CurrentYmapFile = CurrentEntity.Ymap; + MloInstanceData instance = TryGetMloInstance(CurrentMloEntity.Archetype); + + if (instance != null) + { + CurrentEntity = instance.TryGetYmapEntity(CurrentMloEntity); + + CurrentYmapFile = instance.Owner?.Ymap; + } + + CurrentArchetype = CurrentEntity?.MloParent?.Archetype; + } + else if (CurrentEntity != null) + { + if (CurrentEntity.MloParent != null) + { + CurrentArchetype = CurrentEntity?.MloParent?.Archetype; + } + else + { + CurrentArchetype = CurrentEntity.Archetype; + + CurrentYmapFile = CurrentEntity.Ymap; + } } else if (CurrentCarGen != null) { @@ -575,6 +629,10 @@ namespace CodeWalker.Project { CurrentYmapFile = CurrentGrassBatch.Ymap; } + if (CurrentArchetype != null) + { + CurrentYtypFile = CurrentEntity?.MloParent?.Archetype?.Ytyp ?? CurrentArchetype?.Ytyp; + } if (CurrentPathNode != null) { CurrentYndFile = CurrentPathNode.Ynd; @@ -1372,30 +1430,56 @@ namespace CodeWalker.Project } public void AddEntityToProject() { - if (CurrentEntity == null) return; - - if (CurrentEntity.Ymap == null) + try { - MessageBox.Show("Sorry, interior entities cannot currently be added to the project."); - return; - } + if (CurrentEntity == null) return; + if (CurrentEntity.Ymap == null) + { + CurrentYtypFile = CurrentEntity.MloParent?.Archetype?.Ytyp; - CurrentYmapFile = CurrentEntity.Ymap; - if (!YmapExistsInProject(CurrentYmapFile)) - { - var ent = CurrentEntity; - CurrentYmapFile.HasChanged = true; - AddYmapToProject(CurrentYmapFile); + if (!YtypExistsInProject(CurrentYtypFile)) + { + if (CurrentEntity.MloParent?.MloInstance != null) + { + var inst = CurrentEntity.MloParent.MloInstance; + var mcEntity = inst.TryGetArchetypeEntity(CurrentEntity); + if (mcEntity != null) + { + YmapEntityDef ent = CurrentEntity; + CurrentYtypFile.HasChanged = true; + AddYtypToProject(CurrentYtypFile); + CurrentEntity = ent; + CurrentYtypFile = ent.MloParent.Archetype.Ytyp; + ProjectExplorer?.TrySelectMloEntityTreeNode(mcEntity); + } + } + } + return; + } - CurrentEntity = ent; //bug fix for some reason the treeview selects the project node here. - CurrentYmapFile = ent.Ymap; - ProjectExplorer?.TrySelectEntityTreeNode(ent); + CurrentYmapFile = CurrentEntity.Ymap; + if (!YmapExistsInProject(CurrentYmapFile)) + { + YmapEntityDef ent = CurrentEntity; + CurrentYmapFile.HasChanged = true; + AddYmapToProject(CurrentYmapFile); + + CurrentEntity = ent; //bug fix for some reason the treeview selects the project node here. + CurrentYmapFile = ent.Ymap; + ProjectExplorer?.TrySelectEntityTreeNode(ent); + } } + catch + { } } public bool DeleteEntity() { - if (CurrentYmapFile == null) return false; if (CurrentEntity == null) return false; + return CurrentYmapFile != null ? DeleteYmapEntity() : DeleteMloArchetypeEntity(); + } + + private bool DeleteYmapEntity() + { if (CurrentEntity.Ymap != CurrentYmapFile) return false; if (CurrentYmapFile.AllEntities == null) return false; //nothing to delete.. if (CurrentYmapFile.RootEntities == null) return false; //nothing to delete.. @@ -1932,8 +2016,73 @@ namespace CodeWalker.Project } } - public void SaveYtyp(bool saveas = false) //TODO! + public void SaveYtyp(bool saveas = false) { + if (CurrentYtypFile == null) return; + string ytypname = CurrentYtypFile.Name; + string filepath = CurrentYtypFile.FilePath; + if (string.IsNullOrEmpty(filepath)) + { + filepath = ytypname; + } + string origfile = filepath; + if (!File.Exists(filepath)) + { + saveas = true; + } + + + byte[] data; + lock (projectsyncroot) //need to sync writes to ytyp objects... + { + saveas = saveas || string.IsNullOrEmpty(filepath); + if (saveas) + { + filepath = ShowSaveDialog("Ytyp files|*.ytyp", filepath); + if (string.IsNullOrEmpty(filepath)) + { return; } + + string newname = Path.GetFileNameWithoutExtension(filepath); + JenkIndex.Ensure(newname); + CurrentYtypFile.FilePath = filepath; + CurrentYtypFile.RpfFileEntry.Name = new FileInfo(filepath).Name; + CurrentYtypFile.Name = CurrentYtypFile.RpfFileEntry.Name; + CurrentYtypFile._CMapTypes.name = new MetaHash(JenkHash.GenHash(newname)); + } + + data = CurrentYtypFile.Save(); + } + + + if (data != null) + { + File.WriteAllBytes(filepath, data); + } + + SetYtypHasChanged(false); + + if (saveas) + { + if (CurrentProjectFile != null) + { + string origpath = CurrentProjectFile.GetRelativePath(origfile); + string newpath = CurrentProjectFile.GetRelativePath(CurrentYtypFile.FilePath); + + if (!CurrentProjectFile.RenameYtyp(origpath, newpath)) + { //couldn't rename it in the project? + MessageBox.Show("Couldn't rename ytyp in project! This shouldn't happen - check the project file XML."); + } + } + SetProjectHasChanged(true); + SetCurrentSaveItem(); + } + + if (CurrentYtypFile.SaveWarnings != null) + { + string w = string.Join("\n", CurrentYtypFile.SaveWarnings); + MessageBox.Show(CurrentYtypFile.SaveWarnings.Count.ToString() + " warnings were generated while saving the ytyp:\n" + w); + CurrentYtypFile.SaveWarnings = null;//clear it out for next time.. + } } public void AddYtypToProject(YtypFile ytyp) { @@ -1968,6 +2117,241 @@ namespace CodeWalker.Project return CurrentProjectFile.ContainsYtyp(ytyp); } + public void NewArchetype(Archetype copy = null, bool copyPosition = false) + { + if (CurrentYtypFile == null) return; + var archetype = CurrentYtypFile.AddArchetype(); + var archetypeDef = archetype._BaseArchetypeDef; + if (copy == null) + { + copy = CurrentArchetype; + archetype._BaseArchetypeDef.name = JenkHash.GenHash("prop_alien_egg_01"); + } + if (copy != null) + { + archetype.Init(CurrentYtypFile, ref copy._BaseArchetypeDef); + } + archetype._BaseArchetypeDef = archetypeDef; + + LoadProjectTree(); + ProjectExplorer?.TrySelectArchetypeTreeNode(archetype); + CurrentArchetype = archetype; + } + public void NewMloEntity(YmapEntityDef copy = null, bool copyTransform = false) + { + if ((CurrentArchetype == null) || !(CurrentArchetype is MloArchetype mloArch)) + { + var arch = CurrentEntity?.MloParent.Archetype ?? CurrentMloRoom?.Archetype; + if (arch == null) + return; + + mloArch = arch as MloArchetype; + if (mloArch == null) + return; + + CurrentArchetype = mloArch; + } + + if (CurrentMloRoom == null) CurrentMloRoom = mloArch?.GetEntityRoom(CurrentMloEntity); + if (CurrentMloRoom == null) + { + return; + } + + MloInstanceData mloInstance = TryGetMloInstance(mloArch); + if (mloInstance == null) return; + + if (mloArch.rooms.Length <= 0) + { + MessageBox.Show($@"Mlo {mloArch.Name} has no rooms! Cannot create entity."); + return; + } + + int roomIndex = CurrentMloRoom.Index; + if (roomIndex < 0) + { + MessageBox.Show(@"Invalid room index."); + return; + } + if (roomIndex >= mloArch.rooms.Length) + { + MessageBox.Show( + $@"Room at index {roomIndex} does not exist in {mloArch.Name}! {mloArch.Name} only has { + mloArch.rooms.Length + } rooms."); + return; + } + + float spawndist = 5.0f; //use archetype BSradius if starting with a copy... + if (copy != null) + { + spawndist = copy.BSRadius * 2.5f; + } + + bool cp = copyTransform && (copy != null); + Vector3 pos = cp ? copy.CEntityDef.position : GetSpawnPosRel(spawndist, mloInstance.Owner.Position, mloInstance.Owner.Orientation); + Quaternion rot = cp ? copy.CEntityDef.rotation.ToQuaternion() : Quaternion.Identity; + + + CEntityDef cent = new CEntityDef(); + + if (copy != null) + { + cent = copy.CEntityDef; + //TODO: copy entity extensions! + } + else + { + cent.archetypeName = new MetaHash(JenkHash.GenHash("prop_alien_egg_01")); + cent.rotation = new Vector4(0, 0, 0, 1); + cent.scaleXY = 1.0f; + cent.scaleZ = 1.0f; + cent.flags = 1572872; + cent.parentIndex = -1; + cent.lodDist = 200.0f; + cent.lodLevel = Unk_1264241711.LODTYPES_DEPTH_ORPHANHD; + cent.priorityLevel = Unk_648413703.PRI_REQUIRED; + cent.ambientOcclusionMultiplier = 255; + cent.artificialAmbientOcclusion = 255; + } + + cent.position = pos; + cent.rotation = rot.ToVector4(); + + var createindex = mloArch.entities.Length; + MCEntityDef ment = new MCEntityDef(ref cent, mloArch); + + YmapEntityDef outEnt; + try + { + if (WorldForm != null) + { + lock (WorldForm.RenderSyncRoot) //don't try to do this while rendering... + { + // Add the entity to the mlo instance and archetype. + outEnt = mloInstance.CreateYmapEntity(mloInstance.Owner, ment, createindex); + mloArch.AddEntity(outEnt, roomIndex); + } + } + else + { + outEnt = mloInstance.CreateYmapEntity(mloInstance.Owner, ment, createindex); + mloArch.AddEntity(outEnt, roomIndex); + } + } + catch(Exception e) + { + MessageBox.Show(this, e.Message, "Create MLO Entity Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + + mloInstance.AddEntity(outEnt); + outEnt.SetArchetype(GameFileCache.GetArchetype(cent.archetypeName)); + + LoadProjectTree(); + ProjectExplorer?.TrySelectMloEntityTreeNode(mloInstance.TryGetArchetypeEntity(outEnt)); + CurrentEntity = outEnt; + CurrentYtypFile = CurrentEntity.MloParent?.Archetype?.Ytyp; + } + private bool DeleteMloArchetypeEntity() + { + if (CurrentEntity?.MloParent?.Archetype?.Ytyp == null) return false; + if (CurrentEntity.MloParent.Archetype.Ytyp != CurrentYtypFile) return false; + if (!(CurrentEntity.MloParent.Archetype is MloArchetype mloArchetype)) return false; + if (mloArchetype.entities == null) return false; //nothing to delete.. + //if (mloArchetype.InstancedEntities == null) return false; //nothing to delete.. + + if (CurrentEntity._CEntityDef.numChildren != 0) + { + MessageBox.Show("This entity's numChildren is not 0 - deleting entities with children is not currently supported by CodeWalker."); + return true; + } + + if (MessageBox.Show("Are you sure you want to delete this entity?\n" + CurrentEntity._CEntityDef.archetypeName.ToString() + "\n" + CurrentEntity.Position.ToString() + "\n\nThis operation cannot be undone. Continue?", "Confirm delete", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return true; + } + MloInstanceData mloInstance = CurrentEntity.MloParent.MloInstance; + if (mloInstance == null) return false; + + var ent = CurrentEntity; + var mcEnt = mloInstance.TryGetArchetypeEntity(ent); + ProjectExplorer?.RemoveMloEntityTreeNode(mcEnt); + + try + { + if (WorldForm != null) + { + lock (WorldForm.RenderSyncRoot) //don't try to do this while rendering... + { + mloInstance.DeleteEntity(ent); + //WorldForm.SelectItem(null, null, null); + } + } + else + { + mloInstance.DeleteEntity(ent); + } + } + catch (Exception e) // various failures could happen so we'll use a trycatch for when an exception is thrown. + { + MessageBox.Show(this, "Cannot delete entity: " + Environment.NewLine + e.Message); + return false; + } + + var delent = ent; + var delytyp = delent.MloParent.Archetype.Ytyp; + + ProjectExplorer?.SetYtypHasChanged(delytyp, true); + + ClosePanel((EditYmapEntityPanel p) => { return p.Tag == delent; }); + CurrentEntity = null; + WorldForm.SelectItem(null); + + return true; + } + public bool DeleteArchetype() + { + if (CurrentArchetype == null) return false; + if (CurrentArchetype.Ytyp != CurrentYtypFile) return false; + + if (MessageBox.Show("Are you sure you want to delete this archetype?\n" + CurrentArchetype._BaseArchetypeDef.name.ToString() + "\n\nThis operation cannot be undone. Continue?", "Confirm delete", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return true; + } + + bool res = false; + if (WorldForm != null) + { + lock (WorldForm.RenderSyncRoot) //don't try to do this while rendering... + { + res = CurrentArchetype.Ytyp.RemoveArchetype(CurrentArchetype); + //WorldForm.SelectItem(null, null, null); + } + } + else + { + res = CurrentArchetype.Ytyp.RemoveArchetype(CurrentArchetype); + } + if (!res) + { + MessageBox.Show("Archetype couldn't be removed!"); + return false; + } + + var delarch = CurrentArchetype; + var delytyp = delarch.Ytyp; + + ProjectExplorer?.RemoveArchetypeTreeNode(delarch); + ProjectExplorer?.SetYtypHasChanged(delytyp, true); + + ClosePanel((EditYtypArchetypePanel p) => { return p.Tag == delarch; }); + + CurrentArchetype = null; + + return true; + } public void NewYnd() { @@ -3998,6 +4382,18 @@ namespace CodeWalker.Project ymaps[isnew ? JenkHash.GenHash(ymap.Name) : ymap.RpfFileEntry.ShortNameHash] = ymap; } } + + visiblemloentities.Clear(); + foreach (var kvp in ymaps) + { + var ymap = kvp.Value; + if (ymap.MloEntities == null) continue; + foreach (var mloDef in ymap.MloEntities) + { + if (mloDef.Archetype == null) continue; // archetype was changed from an mlo to a regular archetype + visiblemloentities[mloDef.Archetype._BaseArchetypeDef.name] = mloDef; + } + } } } } @@ -4158,6 +4554,18 @@ namespace CodeWalker.Project } + public MloInstanceData TryGetMloInstance(MloArchetype arch) + { + lock (projectsyncroot) + { + if (arch == null) return null; + MetaHash name = arch._BaseArchetypeDef.name; + if (name == 0) return null; + if (!visiblemloentities.ContainsKey(name)) return null; + return visiblemloentities[name]?.MloInstance; + } + } + public void OnWorldSelectionChanged(MapSelection sel) { @@ -4169,6 +4577,8 @@ namespace CodeWalker.Project } else { + var mlo = sel.MloEntityDef; + var room = sel.MloRoomDef; var ent = sel.EntityDef; var cargen = sel.CarGenerator; var grassbatch = sel.GrassBatch; @@ -4181,7 +4591,9 @@ namespace CodeWalker.Project var scenariond = sel.ScenarioNode; var scenarioedge = sel.ScenarioEdge; var audiopl = sel.Audio; - YmapFile ymap = ent?.Ymap ?? cargen?.Ymap ?? grassbatch?.Ymap; + Archetype arch = mlo?.Archetype ?? ent?.MloParent?.Archetype ?? ent?.Archetype; + YtypFile ytyp = mlo?.Archetype?.Ytyp ?? ent?.MloParent?.Archetype?.Ytyp ?? ent?.Archetype?.Ytyp ?? room?.Archetype?.Ytyp; + YmapFile ymap = ent?.Ymap ?? cargen?.Ymap ?? grassbatch?.Ymap ?? mlo?.Ymap; YndFile ynd = pathnode?.Ynd; YnvFile ynv = navpoly?.Ynv ?? navpoint?.Ynv ?? navportal?.Ynv; TrainTrack traintrack = trainnode?.Track; @@ -4205,6 +4617,26 @@ namespace CodeWalker.Project } } + else if (YtypExistsInProject(ytyp)) + { + if (arch != CurrentArchetype) + { + ProjectExplorer?.TrySelectArchetypeTreeNode(mlo?.Archetype); + } + if (ent != CurrentEntity) + { + MloInstanceData mloInstance = ent.MloParent?.MloInstance; + if (mloInstance != null) + { + MCEntityDef entityDef = mloInstance.TryGetArchetypeEntity(ent); + ProjectExplorer?.TrySelectMloEntityTreeNode(entityDef); + } + } + if (room != CurrentMloRoom) + { + ProjectExplorer?.TrySelectMloRoomTreeNode(room); + } + } else if (YndExistsInProject(ynd)) { if (pathnode != CurrentPathNode) @@ -4259,9 +4691,11 @@ namespace CodeWalker.Project showcurrent = true; } + CurrentMloRoom = room; CurrentYmapFile = ymap; - CurrentYtypFile = null;//TODO: interiors! - CurrentEntity = ent; + CurrentYtypFile = ytyp; + CurrentArchetype = arch; + CurrentEntity = ent ?? mlo; CurrentCarGen = cargen; CurrentGrassBatch = grassbatch; CurrentYndFile = ynd; @@ -4335,7 +4769,6 @@ namespace CodeWalker.Project OnWorldAudioPlacementModified(sel.Audio); } } - private void OnWorldEntityModified(YmapEntityDef ent) { try @@ -4346,7 +4779,7 @@ namespace CodeWalker.Project } else { - if ((ent.Ymap == null) || (ent.MloParent != null)) + if ((ent.Ymap == null) && (ent.MloParent == null)) { return;//TODO: properly handle interior entities! } @@ -4356,26 +4789,62 @@ namespace CodeWalker.Project NewProject(); } - if (!YmapExistsInProject(ent.Ymap)) + if (ent.MloParent == null && ent.Ymap != null) { - ent.Ymap.HasChanged = true; - AddYmapToProject(ent.Ymap); - ProjectExplorer?.TrySelectEntityTreeNode(ent); - } - - if (ent != CurrentEntity) - { - CurrentEntity = ent; - ProjectExplorer?.TrySelectEntityTreeNode(ent); - } - - if (ent == CurrentEntity) - { - ShowEditYmapEntityPanel(false); - - if (ent.Ymap != null) + if (!YmapExistsInProject(ent.Ymap)) { - SetYmapHasChanged(true); + ent.Ymap.HasChanged = true; + AddYmapToProject(ent.Ymap); + ProjectExplorer?.TrySelectEntityTreeNode(ent); + } + + if (ent != CurrentEntity) + { + CurrentEntity = ent; + ProjectExplorer?.TrySelectEntityTreeNode(ent); + } + + if (ent == CurrentEntity) + { + ShowEditYmapEntityPanel(false); + + if (ent.Ymap != null) + { + SetYmapHasChanged(true); + } + } + } + else if (ent.MloParent != null && ent.Ymap == null) + { + MloInstanceData mloInstance = ent.MloParent?.MloInstance; + if (mloInstance != null) + { + var mcEntity = mloInstance.TryGetArchetypeEntity(ent); + if (mcEntity != null) + { + if (!YtypExistsInProject(ent.MloParent.Archetype.Ytyp)) + { + ent.MloParent.Archetype.Ytyp.HasChanged = true; + AddYtypToProject(ent.MloParent.Archetype.Ytyp); + ProjectExplorer?.TrySelectMloEntityTreeNode(mcEntity); + } + + if (ent != CurrentEntity) + { + CurrentEntity = ent; + ProjectExplorer?.TrySelectMloEntityTreeNode(mcEntity); + } + } + } + + if (ent == CurrentEntity) + { + ShowEditYmapEntityPanel(false); + + if (ent.MloParent.Archetype.Ytyp != null) + { + SetYtypHasChanged(true); + } } } } @@ -4909,6 +5378,23 @@ namespace CodeWalker.Project return pos; } + public Vector3 GetSpawnPosRel(float dist, Vector3 relPos, Quaternion relRot) + { + Vector3 pos = Vector3.Zero; + if (WorldForm != null) + { + Vector3 campos = WorldForm.GetCameraPosition(); + Vector3 camdir = WorldForm.GetCameraViewDir(); + pos = campos + camdir * dist; + + Quaternion rot = Quaternion.Invert(relRot); + Vector3 delta = pos - relPos; + Vector3 relativePos = rot.Multiply(delta); + pos = relativePos; + } + return pos; + } + public RpfFileEntry FindParentYmapEntry(uint hash) { if (CurrentProjectFile != null) @@ -4944,7 +5430,7 @@ namespace CodeWalker.Project ymap.Load(data); - GameFileCache.InitYmapEntityArchetypes(ymap); //this needs to be done after calling YmapFile.Load() + ymap.InitYmapEntityArchetypes(GameFileCache); //this needs to be done after calling YmapFile.Load() } private void LoadYtypFromFile(YtypFile ytyp, string filename) { @@ -5117,8 +5603,11 @@ namespace CodeWalker.Project { bool enable = (CurrentYtypFile != null); bool inproj = YtypExistsInProject(CurrentYtypFile); + bool ismlo = ((CurrentEntity != null) && (CurrentEntity.MloParent != null) || (CurrentMloRoom != null)) || (CurrentArchetype is MloArchetype); YtypNewArchetypeMenu.Enabled = enable && inproj; + YtypMloToolStripMenuItem.Enabled = enable && inproj && ismlo; + YtypMloNewEntityToolStripMenuItem.Enabled = YtypMloToolStripMenuItem.Enabled; if (CurrentYtypFile != null) { @@ -5516,10 +6005,6 @@ namespace CodeWalker.Project RemoveYmapFromProject(); } - private void YtypNewArchetypeMenu_Click(object sender, EventArgs e) - { - //NewArchetype(); - } private void YtypAddToProjectMenu_Click(object sender, EventArgs e) { AddYtypToProject(CurrentYtypFile); @@ -5528,6 +6013,14 @@ namespace CodeWalker.Project { RemoveYtypFromProject(); } + private void YtypNewArchetypeMenu_Click(object sender, EventArgs e) + { + NewArchetype(); + } + private void YtypMloNewEntityToolStripMenuItem_Click(object sender, EventArgs e) + { + NewMloEntity(); + } private void YndNewNodeMenu_Click(object sender, EventArgs e) { diff --git a/Project/ProjectFormOLD.cs b/Project/ProjectFormOLD.cs index f244a99..aa95737 100644 --- a/Project/ProjectFormOLD.cs +++ b/Project/ProjectFormOLD.cs @@ -1262,7 +1262,7 @@ namespace CodeWalker ymap.Load(data); - GameFileCache.InitYmapEntityArchetypes(ymap); //this needs to be done after calling YmapFile.Load() + ymap.InitYmapEntityArchetypes(GameFileCache); //this needs to be done after calling YmapFile.Load() } private void LoadYmapTreeNodes(YmapFile ymap, TreeNode node) @@ -1282,7 +1282,7 @@ namespace CodeWalker for (int i = 0; i < ents.Length; i++) { var ent = ents[i]; - var edef = ent.CEntityDef; + var edef = ent._CEntityDef; var enode = entsnode.Nodes.Add(edef.archetypeName.ToString()); enode.Tag = ent; } @@ -7542,7 +7542,7 @@ namespace CodeWalker if (CurrentEntity._CEntityDef.rotation != v) { Quaternion q = new Quaternion(v); - CurrentEntity.SetOrientationInv(q); + CurrentEntity.SetOrientation(q, true); SetYmapHasChanged(true); if (WorldForm != null) { diff --git a/Rendering/Renderer.cs b/Rendering/Renderer.cs index e5a1d7e..c677095 100644 --- a/Rendering/Renderer.cs +++ b/Rendering/Renderer.cs @@ -1745,24 +1745,55 @@ namespace CodeWalker.Rendering if (renderinteriors && ent.IsMlo) //render Mlo child entities... { - if ((ent.MloInstance != null) && (ent.MloInstance.Entities != null)) + if ((ent.MloInstance != null)) { - for (int j = 0; j < ent.MloInstance.Entities.Length; j++) + if (ent.MloInstance.Entities != null) { - var intent = ent.MloInstance.Entities[j]; - if (intent.Archetype == null) continue; //missing archetype... - if (!RenderIsEntityFinalRender(intent)) continue; //proxy or something.. - - intent.IsVisible = true; - - var iebscent = intent.Position + intent.BSCenter - camera.Position; - float iebsrad = intent.BSRadius; - if (!camera.ViewFrustum.ContainsSphereNoClipNoOpt(ref iebscent, iebsrad)) + for (int j = 0; j < ent.MloInstance.Entities.Length; j++) { - continue; //frustum cull interior ents - } + var intent = ent.MloInstance.Entities[j]; + if (intent.Archetype == null) continue; //missing archetype... + if (!RenderIsEntityFinalRender(intent)) continue; //proxy or something.. - renderworldentities.Add(intent); + intent.IsVisible = true; + + var iebscent = intent.Position + intent.BSCenter - camera.Position; + float iebsrad = intent.BSRadius; + if (!camera.ViewFrustum.ContainsSphereNoClipNoOpt(ref iebscent, iebsrad)) + { + continue; //frustum cull interior ents + } + + renderworldentities.Add(intent); + } + } + if (ent.MloInstance.EntitySets != null) + { + foreach (var entitysets in ent.MloInstance.EntitySets) + { + var entityset = entitysets.Value; + if (!entityset.Visible) continue; + + var entities = entityset.Entities; + for (int i = 0; i < entities.Count; i++) + { + var intent = entities[i]; + if (intent.Archetype == null) continue; //missing archetype... + if (!RenderIsEntityFinalRender(intent)) continue; //proxy or something.. + + intent.IsVisible = true; + + var iebscent = intent.Position + intent.BSCenter - camera.Position; + float iebsrad = intent.BSRadius; + if (!camera.ViewFrustum.ContainsSphereNoClipNoOpt(ref iebscent, iebsrad)) + { + continue; //frustum cull interior ents + } + + renderworldentities.Add(intent); + + } + } } } } diff --git a/Utils/MapUtils.cs b/Utils/MapUtils.cs index fdadbca..196bf0a 100644 --- a/Utils/MapUtils.cs +++ b/Utils/MapUtils.cs @@ -182,6 +182,7 @@ namespace CodeWalker public YmapGrassInstanceBatch GrassBatch { get; set; } public YmapDistantLODLights DistantLodLights { get; set; } public YmapEntityDef MloEntityDef { get; set; } + public MCMloRoomDef MloRoomDef { get; set; } public WaterQuad WaterQuad { get; set; } public Bounds CollisionBounds { get; set; } public YnvPoly NavPoly { get; set; } @@ -227,7 +228,8 @@ namespace CodeWalker (DistantLodLights != null) || (MloEntityDef != null) || (ScenarioNode != null) || - (Audio != null); + (Audio != null) || + (MloRoomDef != null); } } @@ -257,7 +259,8 @@ namespace CodeWalker || (PathNode != mhit.PathNode) || (TrainTrackNode != mhit.TrainTrackNode) || (ScenarioNode != mhit.ScenarioNode) - || (Audio != mhit.Audio); + || (Audio != mhit.Audio) + || (MloRoomDef != mhit.MloRoomDef); } public bool CheckForChanges() { @@ -280,7 +283,8 @@ namespace CodeWalker || (PathLink != null) || (TrainTrackNode != null) || (ScenarioNode != null) - || (Audio != null); + || (Audio != null) + || (MloRoomDef != null); } @@ -386,6 +390,10 @@ namespace CodeWalker { name = Audio.ShortTypeName + " " + Audio.GetNameString();// FloatUtil.GetVector3String(Audio.InnerPos); } + if (MloRoomDef != null) + { + name = "MloRoomDef " + MloRoomDef.RoomName; + } return name; } @@ -460,6 +468,10 @@ namespace CodeWalker { name = Audio.ShortTypeName + " " + Audio.GetNameString();// + FloatUtil.GetVector3String(Audio.InnerPos); } + if (MloRoomDef != null) + { + name = "MloRoomDef " + MloRoomDef.RoomName; + } return name; } diff --git a/WorldForm.cs b/WorldForm.cs index 2cc588a..3e92106 100644 --- a/WorldForm.cs +++ b/WorldForm.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.IO; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; @@ -3368,6 +3367,37 @@ namespace CodeWalker SelectItem(ms); } } + + public void SelectGrassBatch(YmapGrassInstanceBatch batch) + { + if (batch == null) + { + SelectItem(null); + } + else + { + MapSelection ms = new MapSelection(); + ms.GrassBatch = batch; + ms.AABB = new BoundingBox(batch.AABBMin, batch.AABBMax); + SelectItem(ms); + } + } + public void SelectMloRoom(MCMloRoomDef room, MloInstanceData instance) + { + if (room == null) + { + SelectItem(null); + } + else if (instance != null) + { + MapSelection ms = new MapSelection(); + ms.MloRoomDef = room; + Vector3 min = instance.Owner.Position + instance.Owner.Orientation.Multiply(room.BBMin_CW); + Vector3 max = instance.Owner.Position + instance.Owner.Orientation.Multiply(room.BBMax_CW); + ms.AABB = new BoundingBox(min, max); + SelectItem(ms); + } + } public void SelectNavPoly(YnvPoly poly) { if (poly == null) @@ -3915,6 +3945,7 @@ namespace CodeWalker { ProjectForm = new ProjectForm(this); ProjectForm.Show(this); + ProjectForm.OnWorldSelectionChanged(SelectedItem); // so that the project form isn't stuck on the welcome window. } else { @@ -5063,11 +5094,25 @@ namespace CodeWalker } else { - //project not open, or entity not selected there, just remove the entity from the ymap... + //project not open, or entity not selected there, just remove the entity from the ymap/nlo... var ymap = ent.Ymap; + var instance = ent.MloParent?.MloInstance; if (ymap == null) { - MessageBox.Show("Sorry, deleting interior entities is not currently supported."); + if (instance != null) + { + try + { + if (!instance.DeleteEntity(ent)) + { + SelectItem(null); + } + } + catch (Exception e) // various failures can happen here. + { + MessageBox.Show("Unable to remove entity..." + Environment.NewLine + e.Message); + } + } } else if (!ymap.RemoveEntity(ent)) { @@ -5088,7 +5133,16 @@ namespace CodeWalker { if (CopiedEntity == null) return; if (ProjectForm == null) return; - ProjectForm.NewEntity(CopiedEntity); + MloInstanceData instance = CopiedEntity.MloParent?.MloInstance; + MCEntityDef entdef = instance?.TryGetArchetypeEntity(CopiedEntity); + if (entdef != null) + { + ProjectForm.NewMloEntity(CopiedEntity, true); + } + else + { + ProjectForm.NewEntity(CopiedEntity, true); + } } private void CloneEntity() { From 6adb6b2cc4377a0596fe3a31473dea5ee20f4945 Mon Sep 17 00:00:00 2001 From: dexyfex Date: Mon, 3 Dec 2018 20:07:04 +1100 Subject: [PATCH 023/158] Removed ProjectFormOLD, fixed ProjectFile YND save bug --- CodeWalker.csproj | 9 - Project/ProjectFile.cs | 2 +- Project/ProjectFormOLD.Designer.cs | 8943 ---------------------- Project/ProjectFormOLD.cs | 10586 --------------------------- Project/ProjectFormOLD.resx | 436 -- 5 files changed, 1 insertion(+), 19975 deletions(-) delete mode 100644 Project/ProjectFormOLD.Designer.cs delete mode 100644 Project/ProjectFormOLD.cs delete mode 100644 Project/ProjectFormOLD.resx diff --git a/CodeWalker.csproj b/CodeWalker.csproj index 02e92d9..1b5eec7 100644 --- a/CodeWalker.csproj +++ b/CodeWalker.csproj @@ -487,12 +487,6 @@ - - Form - - - ProjectFormOLD.cs - Form @@ -681,9 +675,6 @@ SelectFolderForm.cs - - ProjectFormOLD.cs - SettingsForm.cs diff --git a/Project/ProjectFile.cs b/Project/ProjectFile.cs index 9906b9f..7589ba0 100644 --- a/Project/ProjectFile.cs +++ b/Project/ProjectFile.cs @@ -63,7 +63,7 @@ namespace CodeWalker.Project var yndselem = Xml.AddChild(doc, projelem, "YndFilenames"); foreach (string yndfilename in YndFilenames) { - Xml.AddChildWithInnerText(doc, ytypselem, "Item", yndfilename); + Xml.AddChildWithInnerText(doc, yndselem, "Item", yndfilename); } var ynvselem = Xml.AddChild(doc, projelem, "YnvFilenames"); diff --git a/Project/ProjectFormOLD.Designer.cs b/Project/ProjectFormOLD.Designer.cs deleted file mode 100644 index b57d476..0000000 --- a/Project/ProjectFormOLD.Designer.cs +++ /dev/null @@ -1,8943 +0,0 @@ -namespace CodeWalker -{ - partial class ProjectFormOLD - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ProjectFormOLD)); - this.splitContainer1 = new System.Windows.Forms.SplitContainer(); - this.ProjectTreeView = new System.Windows.Forms.TreeView(); - this.MainTabControl = new System.Windows.Forms.TabControl(); - this.ProjectTabPage = new System.Windows.Forms.TabPage(); - this.ProjectPanel = new System.Windows.Forms.Panel(); - this.ProjectTabControl = new System.Windows.Forms.TabControl(); - this.ProjectGeneralTabPage = new System.Windows.Forms.TabPage(); - this.ProjectNameTextBox = new System.Windows.Forms.TextBox(); - this.ProjectHideMapCheckBox = new System.Windows.Forms.CheckBox(); - this.ProjectVersionLabel = new System.Windows.Forms.Label(); - this.ProjectShowEntitiesCheckBox = new System.Windows.Forms.CheckBox(); - this.label1 = new System.Windows.Forms.Label(); - this.ProjectManifestTabPage = new System.Windows.Forms.TabPage(); - this.label162 = new System.Windows.Forms.Label(); - this.ProjectManifestGenerateButton = new System.Windows.Forms.Button(); - this.ProjectManifestTextBox = new FastColoredTextBoxNS.FastColoredTextBox(); - this.YmapTabPage = new System.Windows.Forms.TabPage(); - this.YmapTabControl = new System.Windows.Forms.TabControl(); - this.YmapYmapTabPage = new System.Windows.Forms.TabPage(); - this.YmapPanel = new System.Windows.Forms.Panel(); - this.tabControl1 = new System.Windows.Forms.TabControl(); - this.tabPage1 = new System.Windows.Forms.TabPage(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.YmapCFlagsGrassCheckBox = new System.Windows.Forms.CheckBox(); - this.YmapCFlagsCriticalCheckBox = new System.Windows.Forms.CheckBox(); - this.YmapCFlagsDistLightsCheckBox = new System.Windows.Forms.CheckBox(); - this.YmapCFlagsLODLightsCheckBox = new System.Windows.Forms.CheckBox(); - this.YmapCFlagsPhysicsCheckBox = new System.Windows.Forms.CheckBox(); - this.YmapCFlagsOcclusionCheckBox = new System.Windows.Forms.CheckBox(); - this.YmapCFlagsInteriorCheckBox = new System.Windows.Forms.CheckBox(); - this.YmapCFlagsSLODCheckBox = new System.Windows.Forms.CheckBox(); - this.YmapCFlagsSLOD2CheckBox = new System.Windows.Forms.CheckBox(); - this.YmapCFlagsLODCheckBox = new System.Windows.Forms.CheckBox(); - this.YmapCFlagsHDCheckBox = new System.Windows.Forms.CheckBox(); - this.YmapContentFlagsTextBox = new System.Windows.Forms.TextBox(); - this.label7 = new System.Windows.Forms.Label(); - this.YmapCalculateFlagsButton = new System.Windows.Forms.Button(); - this.groupBox2 = new System.Windows.Forms.GroupBox(); - this.YmapFlagsLODCheckBox = new System.Windows.Forms.CheckBox(); - this.YmapFlagsScriptedCheckBox = new System.Windows.Forms.CheckBox(); - this.YmapFlagsTextBox = new System.Windows.Forms.TextBox(); - this.label6 = new System.Windows.Forms.Label(); - this.tabPage2 = new System.Windows.Forms.TabPage(); - this.label12 = new System.Windows.Forms.Label(); - this.YmapPhysicsDictionariesTextBox = new CodeWalker.WinForms.TextBoxFix(); - this.YmapProjectPathTextBox = new System.Windows.Forms.TextBox(); - this.label30 = new System.Windows.Forms.Label(); - this.YmapFileLocationTextBox = new System.Windows.Forms.TextBox(); - this.label29 = new System.Windows.Forms.Label(); - this.YmapCalculateExtentsButton = new System.Windows.Forms.Button(); - this.YmapStreamingExtentsMaxTextBox = new System.Windows.Forms.TextBox(); - this.label10 = new System.Windows.Forms.Label(); - this.YmapStreamingExtentsMinTextBox = new System.Windows.Forms.TextBox(); - this.label11 = new System.Windows.Forms.Label(); - this.YmapEntitiesExtentsMaxTextBox = new System.Windows.Forms.TextBox(); - this.label9 = new System.Windows.Forms.Label(); - this.YmapEntitiesExtentsMinTextBox = new System.Windows.Forms.TextBox(); - this.label8 = new System.Windows.Forms.Label(); - this.YmapParentHashLabel = new System.Windows.Forms.Label(); - this.YmapNameHashLabel = new System.Windows.Forms.Label(); - this.YmapParentTextBox = new System.Windows.Forms.TextBox(); - this.label4 = new System.Windows.Forms.Label(); - this.label5 = new System.Windows.Forms.Label(); - this.YmapNameTextBox = new System.Windows.Forms.TextBox(); - this.label3 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.YmapEntityTabPage = new System.Windows.Forms.TabPage(); - this.EntityPanel = new System.Windows.Forms.Panel(); - this.EntityTabControl = new System.Windows.Forms.TabControl(); - this.EntityGeneralTabPage = new System.Windows.Forms.TabPage(); - this.EntityFlagsCheckedListBox = new System.Windows.Forms.CheckedListBox(); - this.label13 = new System.Windows.Forms.Label(); - this.label28 = new System.Windows.Forms.Label(); - this.EntityDeleteButton = new System.Windows.Forms.Button(); - this.EntityTintValueTextBox = new System.Windows.Forms.TextBox(); - this.EntityAddToProjectButton = new System.Windows.Forms.Button(); - this.label27 = new System.Windows.Forms.Label(); - this.EntityArtificialAOTextBox = new System.Windows.Forms.TextBox(); - this.label26 = new System.Windows.Forms.Label(); - this.EntityAOMultiplierTextBox = new System.Windows.Forms.TextBox(); - this.EntityGuidTextBox = new System.Windows.Forms.TextBox(); - this.EntityPriorityLevelComboBox = new System.Windows.Forms.ComboBox(); - this.label24 = new System.Windows.Forms.Label(); - this.label15 = new System.Windows.Forms.Label(); - this.EntityFlagsTextBox = new System.Windows.Forms.TextBox(); - this.label18 = new System.Windows.Forms.Label(); - this.EntityLodLevelComboBox = new System.Windows.Forms.ComboBox(); - this.label14 = new System.Windows.Forms.Label(); - this.label23 = new System.Windows.Forms.Label(); - this.EntityScaleXYTextBox = new System.Windows.Forms.TextBox(); - this.label22 = new System.Windows.Forms.Label(); - this.EntityArchetypeHashLabel = new System.Windows.Forms.Label(); - this.EntityChildLodDistTextBox = new System.Windows.Forms.TextBox(); - this.label19 = new System.Windows.Forms.Label(); - this.label21 = new System.Windows.Forms.Label(); - this.EntityScaleZTextBox = new System.Windows.Forms.TextBox(); - this.EntityLodDistTextBox = new System.Windows.Forms.TextBox(); - this.EntityArchetypeTextBox = new System.Windows.Forms.TextBox(); - this.label16 = new System.Windows.Forms.Label(); - this.EntityPositionTextBox = new System.Windows.Forms.TextBox(); - this.EntityNormalizeRotationButton = new System.Windows.Forms.Button(); - this.EntityGoToButton = new System.Windows.Forms.Button(); - this.label17 = new System.Windows.Forms.Label(); - this.EntityRotationTextBox = new System.Windows.Forms.TextBox(); - this.EntityLodTabPage = new System.Windows.Forms.TabPage(); - this.label20 = new System.Windows.Forms.Label(); - this.EntityParentIndexTextBox = new System.Windows.Forms.TextBox(); - this.EntityNumChildrenTextBox = new System.Windows.Forms.TextBox(); - this.label25 = new System.Windows.Forms.Label(); - this.EntityExtensionsTabPage = new System.Windows.Forms.TabPage(); - this.EntityPivotTabPage = new System.Windows.Forms.TabPage(); - this.label95 = new System.Windows.Forms.Label(); - this.EntityPivotEditCheckBox = new System.Windows.Forms.CheckBox(); - this.label93 = new System.Windows.Forms.Label(); - this.EntityPivotPositionTextBox = new System.Windows.Forms.TextBox(); - this.EntityPivotRotationNormalizeButton = new System.Windows.Forms.Button(); - this.label94 = new System.Windows.Forms.Label(); - this.EntityPivotRotationTextBox = new System.Windows.Forms.TextBox(); - this.YmapCarGenTabPage = new System.Windows.Forms.TabPage(); - this.CarGenPanel = new System.Windows.Forms.Panel(); - this.CarFlagsCheckedListBox = new System.Windows.Forms.CheckedListBox(); - this.CarDeleteButton = new System.Windows.Forms.Button(); - this.CarAddToProjectButton = new System.Windows.Forms.Button(); - this.label44 = new System.Windows.Forms.Label(); - this.CarLiveryTextBox = new System.Windows.Forms.TextBox(); - this.label43 = new System.Windows.Forms.Label(); - this.CarBodyColorRemap4TextBox = new System.Windows.Forms.TextBox(); - this.label42 = new System.Windows.Forms.Label(); - this.CarBodyColorRemap3TextBox = new System.Windows.Forms.TextBox(); - this.label41 = new System.Windows.Forms.Label(); - this.CarBodyColorRemap2TextBox = new System.Windows.Forms.TextBox(); - this.CarPopGroupTextBox = new System.Windows.Forms.TextBox(); - this.label39 = new System.Windows.Forms.Label(); - this.CarPopGroupHashLabel = new System.Windows.Forms.Label(); - this.label38 = new System.Windows.Forms.Label(); - this.CarBodyColorRemap1TextBox = new System.Windows.Forms.TextBox(); - this.label37 = new System.Windows.Forms.Label(); - this.CarFlagsTextBox = new System.Windows.Forms.TextBox(); - this.CarPerpendicularLengthTextBox = new System.Windows.Forms.TextBox(); - this.label36 = new System.Windows.Forms.Label(); - this.CarOrientYTextBox = new System.Windows.Forms.TextBox(); - this.label34 = new System.Windows.Forms.Label(); - this.CarOrientXTextBox = new System.Windows.Forms.TextBox(); - this.label35 = new System.Windows.Forms.Label(); - this.CarModelTextBox = new System.Windows.Forms.TextBox(); - this.label32 = new System.Windows.Forms.Label(); - this.CarModelHashLabel = new System.Windows.Forms.Label(); - this.CarGoToButton = new System.Windows.Forms.Button(); - this.CarPositionTextBox = new System.Windows.Forms.TextBox(); - this.label31 = new System.Windows.Forms.Label(); - this.YmapMloInstanceTabPage = new System.Windows.Forms.TabPage(); - this.YmapTimecycleModifierTabPage = new System.Windows.Forms.TabPage(); - this.YndTabPage = new System.Windows.Forms.TabPage(); - this.YndTabControl = new System.Windows.Forms.TabControl(); - this.YndYndTabPage = new System.Windows.Forms.TabPage(); - this.YndPanel = new System.Windows.Forms.Panel(); - this.label88 = new System.Windows.Forms.Label(); - this.YndAreaIDYUpDown = new System.Windows.Forms.NumericUpDown(); - this.label87 = new System.Windows.Forms.Label(); - this.YndAreaIDXUpDown = new System.Windows.Forms.NumericUpDown(); - this.label48 = new System.Windows.Forms.Label(); - this.YndProjectPathTextBox = new System.Windows.Forms.TextBox(); - this.label46 = new System.Windows.Forms.Label(); - this.YndFilePathTextBox = new System.Windows.Forms.TextBox(); - this.label47 = new System.Windows.Forms.Label(); - this.YndTotalNodesLabel = new System.Windows.Forms.Label(); - this.YndPedNodesUpDown = new System.Windows.Forms.NumericUpDown(); - this.label45 = new System.Windows.Forms.Label(); - this.YndVehicleNodesUpDown = new System.Windows.Forms.NumericUpDown(); - this.label40 = new System.Windows.Forms.Label(); - this.YndAreaIDInfoLabel = new System.Windows.Forms.Label(); - this.label33 = new System.Windows.Forms.Label(); - this.YndRpfPathTextBox = new System.Windows.Forms.TextBox(); - this.YndNodeTabPage = new System.Windows.Forms.TabPage(); - this.YndNodePanel = new System.Windows.Forms.Panel(); - this.PathNodeTabControl = new System.Windows.Forms.TabControl(); - this.PathNodePropertiesTabPage = new System.Windows.Forms.TabPage(); - this.PathNodeFlags5GroupBox = new System.Windows.Forms.GroupBox(); - this.PathNodeFlags52CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags53CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags51CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags5UpDown = new System.Windows.Forms.NumericUpDown(); - this.PathNodeFlags4GroupBox = new System.Windows.Forms.GroupBox(); - this.PathNodeFlags45CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags46CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags47CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags48CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags42UpDown = new System.Windows.Forms.NumericUpDown(); - this.label71 = new System.Windows.Forms.Label(); - this.PathNodeFlags41CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags4UpDown = new System.Windows.Forms.NumericUpDown(); - this.PathNodeFlags4Label = new System.Windows.Forms.Label(); - this.PathNodeFlags3GroupBox = new System.Windows.Forms.GroupBox(); - this.PathNodeFlags32UpDown = new System.Windows.Forms.NumericUpDown(); - this.label70 = new System.Windows.Forms.Label(); - this.PathNodeFlags31CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags3UpDown = new System.Windows.Forms.NumericUpDown(); - this.PathNodeFlags3Label = new System.Windows.Forms.Label(); - this.PathNodeFlags2GroupBox = new System.Windows.Forms.GroupBox(); - this.PathNodeFlags21CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags28CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags22CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags27CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags23CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags26CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags24CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags25CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags2UpDown = new System.Windows.Forms.NumericUpDown(); - this.PathNodeFlags2Label = new System.Windows.Forms.Label(); - this.PathNodeFlags1GroupBox = new System.Windows.Forms.GroupBox(); - this.PathNodeFlags11CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags18CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags12CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags17CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags13CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags16CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags14CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags15CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags1UpDown = new System.Windows.Forms.NumericUpDown(); - this.PathNodeFlags1Label = new System.Windows.Forms.Label(); - this.PathNodeFlags0GroupBox = new System.Windows.Forms.GroupBox(); - this.PathNodeFlags01CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags08CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags02CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags07CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags03CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags06CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags04CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags05CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeFlags0UpDown = new System.Windows.Forms.NumericUpDown(); - this.PathNodeFlags0Label = new System.Windows.Forms.Label(); - this.PathNodeDeleteButton = new System.Windows.Forms.Button(); - this.PathNodeAreaIDUpDown = new System.Windows.Forms.NumericUpDown(); - this.PathNodeAddToProjectButton = new System.Windows.Forms.Button(); - this.label49 = new System.Windows.Forms.Label(); - this.label50 = new System.Windows.Forms.Label(); - this.label68 = new System.Windows.Forms.Label(); - this.PathNodeNodeIDUpDown = new System.Windows.Forms.NumericUpDown(); - this.label52 = new System.Windows.Forms.Label(); - this.PathNodeStreetHashTextBox = new System.Windows.Forms.TextBox(); - this.PathNodeGoToButton = new System.Windows.Forms.Button(); - this.PathNodeStreetNameLabel = new System.Windows.Forms.Label(); - this.PathNodePositionTextBox = new System.Windows.Forms.TextBox(); - this.label55 = new System.Windows.Forms.Label(); - this.PathNodeLinksTabPage = new System.Windows.Forms.TabPage(); - this.splitContainer2 = new System.Windows.Forms.SplitContainer(); - this.PathNodeRemoveLinkButton = new System.Windows.Forms.Button(); - this.PathNodeAddLinkButton = new System.Windows.Forms.Button(); - this.PathNodeLinksListBox = new System.Windows.Forms.ListBox(); - this.PathNodeLinkCountLabel = new System.Windows.Forms.Label(); - this.PathNodeLinkPanel = new System.Windows.Forms.Panel(); - this.PathLinkFlags2GroupBox = new System.Windows.Forms.GroupBox(); - this.PathNodeLinkFlags21CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeLinkFlags22CheckBox = new System.Windows.Forms.CheckBox(); - this.label53 = new System.Windows.Forms.Label(); - this.PathNodeLinkFwdLanesUpDown = new System.Windows.Forms.NumericUpDown(); - this.label56 = new System.Windows.Forms.Label(); - this.PathNodeLinkBackLanesUpDown = new System.Windows.Forms.NumericUpDown(); - this.PathNodeLinkFlags2UpDown = new System.Windows.Forms.NumericUpDown(); - this.PathNodeLinkFlags2Label = new System.Windows.Forms.Label(); - this.PathLinkFlags1GroupBox = new System.Windows.Forms.GroupBox(); - this.PathNodeLinkOffsetSizeUpDown = new System.Windows.Forms.NumericUpDown(); - this.label61 = new System.Windows.Forms.Label(); - this.PathNodeLinkFlags11CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeLinkFlags18CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeLinkFlags12CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeLinkFlags13CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeLinkFlags14CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeLinkFlags1UpDown = new System.Windows.Forms.NumericUpDown(); - this.PathNodeLinkFlags1Label = new System.Windows.Forms.Label(); - this.PathLinkFlags0GroupBox = new System.Windows.Forms.GroupBox(); - this.PathNodeLinkFlags04UpDown = new System.Windows.Forms.NumericUpDown(); - this.label60 = new System.Windows.Forms.Label(); - this.PathNodeLinkFlags03UpDown = new System.Windows.Forms.NumericUpDown(); - this.label58 = new System.Windows.Forms.Label(); - this.PathNodeLinkFlags01CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeLinkFlags02CheckBox = new System.Windows.Forms.CheckBox(); - this.PathNodeLinkFlags0UpDown = new System.Windows.Forms.NumericUpDown(); - this.PathNodeLinkFlags0Label = new System.Windows.Forms.Label(); - this.PathNodeLinkageStatusLabel = new System.Windows.Forms.Label(); - this.PathNodeLinkLengthUpDown = new System.Windows.Forms.NumericUpDown(); - this.label57 = new System.Windows.Forms.Label(); - this.PathNodeLinkNodeIDUpDown = new System.Windows.Forms.NumericUpDown(); - this.label51 = new System.Windows.Forms.Label(); - this.PathNodeLinkAreaIDUpDown = new System.Windows.Forms.NumericUpDown(); - this.label54 = new System.Windows.Forms.Label(); - this.PathNodeJunctionTabPage = new System.Windows.Forms.TabPage(); - this.label78 = new System.Windows.Forms.Label(); - this.PathNodeJunctionPanel = new System.Windows.Forms.Panel(); - this.PathNodeJunctionPosYUpDown = new System.Windows.Forms.NumericUpDown(); - this.label59 = new System.Windows.Forms.Label(); - this.PathNodeJunctionPosXUpDown = new System.Windows.Forms.NumericUpDown(); - this.label69 = new System.Windows.Forms.Label(); - this.PathNodeJunctionHeightmapBytesTextBox = new CodeWalker.WinForms.TextBoxFix(); - this.PathNodeJunctionHeightmapDimYUpDown = new System.Windows.Forms.NumericUpDown(); - this.label77 = new System.Windows.Forms.Label(); - this.PathNodeJunctionHeightmapDimXUpDown = new System.Windows.Forms.NumericUpDown(); - this.label76 = new System.Windows.Forms.Label(); - this.PathNodeJunctionMinZUpDown = new System.Windows.Forms.NumericUpDown(); - this.label67 = new System.Windows.Forms.Label(); - this.PathNodeJunctionMaxZUpDown = new System.Windows.Forms.NumericUpDown(); - this.label65 = new System.Windows.Forms.Label(); - this.PathNodeJunctionEnableCheckBox = new System.Windows.Forms.CheckBox(); - this.YnvTabPage = new System.Windows.Forms.TabPage(); - this.YnvTabControl = new System.Windows.Forms.TabControl(); - this.YnvYnvTabPage = new System.Windows.Forms.TabPage(); - this.YnvPanel = new System.Windows.Forms.Panel(); - this.YnvAABBSizeTextBox = new System.Windows.Forms.TextBox(); - this.label91 = new System.Windows.Forms.Label(); - this.label89 = new System.Windows.Forms.Label(); - this.YnvAreaIDYUpDown = new System.Windows.Forms.NumericUpDown(); - this.label90 = new System.Windows.Forms.Label(); - this.YnvAreaIDXUpDown = new System.Windows.Forms.NumericUpDown(); - this.YnvAreaIDInfoLabel = new System.Windows.Forms.Label(); - this.label92 = new System.Windows.Forms.Label(); - this.YnvPolyTabPage = new System.Windows.Forms.TabPage(); - this.YnvPolygonPanel = new System.Windows.Forms.Panel(); - this.YnvPortalTabPage = new System.Windows.Forms.TabPage(); - this.YnvPortalPanel = new System.Windows.Forms.Panel(); - this.TrainsTabPage = new System.Windows.Forms.TabPage(); - this.TrainsTabControl = new System.Windows.Forms.TabControl(); - this.TrainTrackTabPage = new System.Windows.Forms.TabPage(); - this.TrainTrackFilePanel = new System.Windows.Forms.Panel(); - this.TrainTrackInfoLabel = new System.Windows.Forms.Label(); - this.label86 = new System.Windows.Forms.Label(); - this.TrainTrackBrakingDistTextBox = new System.Windows.Forms.TextBox(); - this.label85 = new System.Windows.Forms.Label(); - this.TrainTrackSpeedTextBox = new System.Windows.Forms.TextBox(); - this.TrainTrackMPStopsAtStationsCheckBox = new System.Windows.Forms.CheckBox(); - this.TrainTrackStopsAtStationsCheckBox = new System.Windows.Forms.CheckBox(); - this.TrainTrackIsPingPongCheckBox = new System.Windows.Forms.CheckBox(); - this.label84 = new System.Windows.Forms.Label(); - this.TrainTrackConfigNameTextBox = new System.Windows.Forms.TextBox(); - this.label83 = new System.Windows.Forms.Label(); - this.TrainTrackFilenameTextBox = new System.Windows.Forms.TextBox(); - this.label74 = new System.Windows.Forms.Label(); - this.TrainTrackProjectPathTextBox = new System.Windows.Forms.TextBox(); - this.label79 = new System.Windows.Forms.Label(); - this.TrainTrackFilePathTextBox = new System.Windows.Forms.TextBox(); - this.label80 = new System.Windows.Forms.Label(); - this.TrainTrackRpfPathTextBox = new System.Windows.Forms.TextBox(); - this.TrainNodeTabPage = new System.Windows.Forms.TabPage(); - this.TrainNodePanel = new System.Windows.Forms.Panel(); - this.TrainNodeTypeComboBox = new System.Windows.Forms.ComboBox(); - this.label82 = new System.Windows.Forms.Label(); - this.TrainNodeDeleteButton = new System.Windows.Forms.Button(); - this.TrainNodeAddToProjectButton = new System.Windows.Forms.Button(); - this.TrainNodeGoToButton = new System.Windows.Forms.Button(); - this.TrainNodePositionTextBox = new System.Windows.Forms.TextBox(); - this.label81 = new System.Windows.Forms.Label(); - this.ScenarioTabPage = new System.Windows.Forms.TabPage(); - this.ScenarioTabControl = new System.Windows.Forms.TabControl(); - this.ScenarioYmtTabPage = new System.Windows.Forms.TabPage(); - this.ScenarioYmtPanel = new System.Windows.Forms.Panel(); - this.ScenarioYmtExtentsMaxTextBox = new System.Windows.Forms.TextBox(); - this.label103 = new System.Windows.Forms.Label(); - this.ScenarioYmtExtentsMinTextBox = new System.Windows.Forms.TextBox(); - this.label150 = new System.Windows.Forms.Label(); - this.ScenarioYmtGridInfoLabel = new System.Windows.Forms.Label(); - this.ScenarioYmtGridScaleTextBox = new System.Windows.Forms.TextBox(); - this.label96 = new System.Windows.Forms.Label(); - this.ScenarioYmtProjectPathTextBox = new System.Windows.Forms.TextBox(); - this.label66 = new System.Windows.Forms.Label(); - this.ScenarioYmtFileLocationTextBox = new System.Windows.Forms.TextBox(); - this.label72 = new System.Windows.Forms.Label(); - this.ScenarioYmtGridMaxTextBox = new System.Windows.Forms.TextBox(); - this.label73 = new System.Windows.Forms.Label(); - this.ScenarioYmtGridMinTextBox = new System.Windows.Forms.TextBox(); - this.label75 = new System.Windows.Forms.Label(); - this.ScenarioYmtVersionTextBox = new System.Windows.Forms.TextBox(); - this.label64 = new System.Windows.Forms.Label(); - this.ScenarioYmtNameTextBox = new System.Windows.Forms.TextBox(); - this.label63 = new System.Windows.Forms.Label(); - this.ScenarioPointTabPage = new System.Windows.Forms.TabPage(); - this.ScenarioPointOuterPanel = new System.Windows.Forms.Panel(); - this.ScenarioPointCheckBox = new System.Windows.Forms.CheckBox(); - this.ScenarioPointPanel = new System.Windows.Forms.Panel(); - this.ScenarioPointImapHashLabel = new System.Windows.Forms.Label(); - this.ScenarioPointImapTextBox = new System.Windows.Forms.TextBox(); - this.label110 = new System.Windows.Forms.Label(); - this.ScenarioPointGroupHashLabel = new System.Windows.Forms.Label(); - this.ScenarioPointGroupTextBox = new System.Windows.Forms.TextBox(); - this.label156 = new System.Windows.Forms.Label(); - this.ScenarioPointInteriorHashLabel = new System.Windows.Forms.Label(); - this.ScenarioPointFlagsCheckedListBox = new System.Windows.Forms.CheckedListBox(); - this.label111 = new System.Windows.Forms.Label(); - this.ScenarioPointDirectionTextBox = new System.Windows.Forms.TextBox(); - this.label97 = new System.Windows.Forms.Label(); - this.ScenarioPointFlagsValueUpDown = new System.Windows.Forms.NumericUpDown(); - this.label109 = new System.Windows.Forms.Label(); - this.ScenarioPointGoToButton = new System.Windows.Forms.Button(); - this.ScenarioPointWaitTimeUpDown = new System.Windows.Forms.NumericUpDown(); - this.ScenarioPointPositionTextBox = new System.Windows.Forms.TextBox(); - this.label62 = new System.Windows.Forms.Label(); - this.label108 = new System.Windows.Forms.Label(); - this.ScenarioPointRadiusUpDown = new System.Windows.Forms.NumericUpDown(); - this.label107 = new System.Windows.Forms.Label(); - this.ScenarioPointSpOnlyFlagUpDown = new System.Windows.Forms.NumericUpDown(); - this.label106 = new System.Windows.Forms.Label(); - this.ScenarioPointProbabilityUpDown = new System.Windows.Forms.NumericUpDown(); - this.ScenarioPointInteriorTextBox = new System.Windows.Forms.TextBox(); - this.label102 = new System.Windows.Forms.Label(); - this.label101 = new System.Windows.Forms.Label(); - this.ScenarioPointTimeEndUpDown = new System.Windows.Forms.NumericUpDown(); - this.ScenarioPointTimeStartUpDown = new System.Windows.Forms.NumericUpDown(); - this.label100 = new System.Windows.Forms.Label(); - this.ScenarioPointModelSetComboBox = new System.Windows.Forms.ComboBox(); - this.label99 = new System.Windows.Forms.Label(); - this.ScenarioPointTypeComboBox = new System.Windows.Forms.ComboBox(); - this.label98 = new System.Windows.Forms.Label(); - this.ScenarioPointDeleteButton = new System.Windows.Forms.Button(); - this.ScenarioPointAddToProjectButton = new System.Windows.Forms.Button(); - this.ScenarioEntityTabPage = new System.Windows.Forms.TabPage(); - this.ScenarioEntityDeleteButton = new System.Windows.Forms.Button(); - this.ScenarioEntityPanel = new System.Windows.Forms.Panel(); - this.label160 = new System.Windows.Forms.Label(); - this.ScenarioEntityAddPointButton = new System.Windows.Forms.Button(); - this.label161 = new System.Windows.Forms.Label(); - this.ScenarioEntityPointsListBox = new System.Windows.Forms.ListBox(); - this.ScenarioEntityInfoLabel = new System.Windows.Forms.Label(); - this.label114 = new System.Windows.Forms.Label(); - this.ScenarioEntityUnk2UpDown = new System.Windows.Forms.NumericUpDown(); - this.label113 = new System.Windows.Forms.Label(); - this.ScenarioEntityUnk1UpDown = new System.Windows.Forms.NumericUpDown(); - this.ScenarioEntityTypeHashLabel = new System.Windows.Forms.Label(); - this.ScenarioEntityTypeTextBox = new System.Windows.Forms.TextBox(); - this.label112 = new System.Windows.Forms.Label(); - this.ScenarioEntityGoToButton = new System.Windows.Forms.Button(); - this.ScenarioEntityPositionTextBox = new System.Windows.Forms.TextBox(); - this.label104 = new System.Windows.Forms.Label(); - this.ScenarioEntityAddToProjectButton = new System.Windows.Forms.Button(); - this.ScenarioEntityCheckBox = new System.Windows.Forms.CheckBox(); - this.ScenarioEntityPointTabPage = new System.Windows.Forms.TabPage(); - this.ScenarioEntityPointDeleteButton = new System.Windows.Forms.Button(); - this.ScenarioEntityPointAddToProjectButton = new System.Windows.Forms.Button(); - this.ScenarioEntityPointCheckBox = new System.Windows.Forms.CheckBox(); - this.ScenarioEntityPointPanel = new System.Windows.Forms.Panel(); - this.ScenarioEntityPointNameHashLabel = new System.Windows.Forms.Label(); - this.ScenarioEntityPointNameTextBox = new System.Windows.Forms.TextBox(); - this.ScenarioEntityPointFlagsCheckedListBox = new System.Windows.Forms.CheckedListBox(); - this.label135 = new System.Windows.Forms.Label(); - this.ScenarioEntityPointFlagsUpDown = new System.Windows.Forms.NumericUpDown(); - this.ScenarioEntityPointShortRangeCheckBox = new System.Windows.Forms.CheckBox(); - this.ScenarioEntityPointExtendedRangeCheckBox = new System.Windows.Forms.CheckBox(); - this.ScenarioEntityPointHighPriCheckBox = new System.Windows.Forms.CheckBox(); - this.label133 = new System.Windows.Forms.Label(); - this.ScenarioEntityPointEndUpDown = new System.Windows.Forms.NumericUpDown(); - this.ScenarioEntityPointStartUpDown = new System.Windows.Forms.NumericUpDown(); - this.label134 = new System.Windows.Forms.Label(); - this.ScenarioEntityPointRadiusTextBox = new System.Windows.Forms.TextBox(); - this.label132 = new System.Windows.Forms.Label(); - this.ScenarioEntityPointTimeTillPedLeavesTextBox = new System.Windows.Forms.TextBox(); - this.label131 = new System.Windows.Forms.Label(); - this.ScenarioEntityPointProbabilityTextBox = new System.Windows.Forms.TextBox(); - this.label130 = new System.Windows.Forms.Label(); - this.ScenarioEntityPointAvailableInMpSpComboBox = new System.Windows.Forms.ComboBox(); - this.label129 = new System.Windows.Forms.Label(); - this.ScenarioEntityPointRequiredImapHashLabel = new System.Windows.Forms.Label(); - this.ScenarioEntityPointRequiredImapTextBox = new System.Windows.Forms.TextBox(); - this.label128 = new System.Windows.Forms.Label(); - this.ScenarioEntityPointInteriorHashLabel = new System.Windows.Forms.Label(); - this.ScenarioEntityPointInteriorTextBox = new System.Windows.Forms.TextBox(); - this.label126 = new System.Windows.Forms.Label(); - this.ScenarioEntityPointGroupHashLabel = new System.Windows.Forms.Label(); - this.ScenarioEntityPointGroupTextBox = new System.Windows.Forms.TextBox(); - this.label124 = new System.Windows.Forms.Label(); - this.ScenarioEntityPointPedTypeHashLabel = new System.Windows.Forms.Label(); - this.ScenarioEntityPointPedTypeTextBox = new System.Windows.Forms.TextBox(); - this.label122 = new System.Windows.Forms.Label(); - this.ScenarioEntityPointSpawnTypeHashLabel = new System.Windows.Forms.Label(); - this.ScenarioEntityPointSpawnTypeTextBox = new System.Windows.Forms.TextBox(); - this.label120 = new System.Windows.Forms.Label(); - this.ScenarioEntityPointRotationTextBox = new System.Windows.Forms.TextBox(); - this.label118 = new System.Windows.Forms.Label(); - this.ScenarioEntityPointGoToButton = new System.Windows.Forms.Button(); - this.ScenarioEntityPointPositionTextBox = new System.Windows.Forms.TextBox(); - this.label117 = new System.Windows.Forms.Label(); - this.label116 = new System.Windows.Forms.Label(); - this.ScenarioChainTabPage = new System.Windows.Forms.TabPage(); - this.ScenarioChainDeleteButton = new System.Windows.Forms.Button(); - this.ScenarioChainAddToProjectButton = new System.Windows.Forms.Button(); - this.splitContainer3 = new System.Windows.Forms.SplitContainer(); - this.ScenarioChainMoveEdgeDownButton = new System.Windows.Forms.Button(); - this.ScenarioChainMoveEdgeUpButton = new System.Windows.Forms.Button(); - this.label138 = new System.Windows.Forms.Label(); - this.ScenarioChainUnk1UpDown = new System.Windows.Forms.NumericUpDown(); - this.ScenarioChainRemoveEdgeButton = new System.Windows.Forms.Button(); - this.ScenarioChainAddEdgeButton = new System.Windows.Forms.Button(); - this.ScenarioChainEdgesListBox = new System.Windows.Forms.ListBox(); - this.ScenarioChainEdgeCountLabel = new System.Windows.Forms.Label(); - this.ScenarioChainEdgePanel = new System.Windows.Forms.Panel(); - this.ScenarioChainEdgeNavSpeedComboBox = new System.Windows.Forms.ComboBox(); - this.label137 = new System.Windows.Forms.Label(); - this.ScenarioChainEdgeNavModeComboBox = new System.Windows.Forms.ComboBox(); - this.label136 = new System.Windows.Forms.Label(); - this.ScenarioChainEdgeActionComboBox = new System.Windows.Forms.ComboBox(); - this.label127 = new System.Windows.Forms.Label(); - this.ScenarioChainEdgeNodeIndexToUpDown = new System.Windows.Forms.NumericUpDown(); - this.ScenarioChainEdgeNodeIndexFromUpDown = new System.Windows.Forms.NumericUpDown(); - this.label125 = new System.Windows.Forms.Label(); - this.label121 = new System.Windows.Forms.Label(); - this.ScenarioChainNodeTabPage = new System.Windows.Forms.TabPage(); - this.ScenarioChainNodePanel = new System.Windows.Forms.Panel(); - this.ScenarioChainNodeTypeComboBox = new System.Windows.Forms.ComboBox(); - this.ScenarioChainNodeIndexTextBox = new System.Windows.Forms.TextBox(); - this.label115 = new System.Windows.Forms.Label(); - this.ScenarioChainNodeLastCheckBox = new System.Windows.Forms.CheckBox(); - this.ScenarioChainNodeFirstCheckBox = new System.Windows.Forms.CheckBox(); - this.label123 = new System.Windows.Forms.Label(); - this.ScenarioChainNodeUnk1HashLabel = new System.Windows.Forms.Label(); - this.ScenarioChainNodeUnk1TextBox = new System.Windows.Forms.TextBox(); - this.label119 = new System.Windows.Forms.Label(); - this.ScenarioChainNodeGoToButton = new System.Windows.Forms.Button(); - this.ScenarioChainNodePositionTextBox = new System.Windows.Forms.TextBox(); - this.label105 = new System.Windows.Forms.Label(); - this.ScenarioChainNodeDeleteButton = new System.Windows.Forms.Button(); - this.ScenarioChainNodeCheckBox = new System.Windows.Forms.CheckBox(); - this.ScenarioChainNodeAddToProjectButton = new System.Windows.Forms.Button(); - this.ScenarioClusterTabPage = new System.Windows.Forms.TabPage(); - this.ScenarioClusterDeleteButton = new System.Windows.Forms.Button(); - this.ScenarioClusterAddToProjectButton = new System.Windows.Forms.Button(); - this.ScenarioClusterCheckBox = new System.Windows.Forms.CheckBox(); - this.ScenarioClusterPanel = new System.Windows.Forms.Panel(); - this.label159 = new System.Windows.Forms.Label(); - this.ScenarioClusterAddPointButton = new System.Windows.Forms.Button(); - this.label158 = new System.Windows.Forms.Label(); - this.ScenarioClusterPointsListBox = new System.Windows.Forms.ListBox(); - this.ScenarioClusterRadiusTextBox = new System.Windows.Forms.TextBox(); - this.label157 = new System.Windows.Forms.Label(); - this.ScenarioClusterUnk2CheckBox = new System.Windows.Forms.CheckBox(); - this.ScenarioClusterUnk1TextBox = new System.Windows.Forms.TextBox(); - this.label140 = new System.Windows.Forms.Label(); - this.ScenarioClusterGoToButton = new System.Windows.Forms.Button(); - this.ScenarioClusterCenterTextBox = new System.Windows.Forms.TextBox(); - this.label139 = new System.Windows.Forms.Label(); - this.ScenarioClusterPointTabPage = new System.Windows.Forms.TabPage(); - this.ScenarioClusterPointDeleteButton = new System.Windows.Forms.Button(); - this.ScenarioClusterPointAddToProjectButton = new System.Windows.Forms.Button(); - this.ScenarioClusterPointPanel = new System.Windows.Forms.Panel(); - this.ScenarioClusterPointImapHashLabel = new System.Windows.Forms.Label(); - this.ScenarioClusterPointImapTextBox = new System.Windows.Forms.TextBox(); - this.label143 = new System.Windows.Forms.Label(); - this.ScenarioClusterPointGroupHashLabel = new System.Windows.Forms.Label(); - this.ScenarioClusterPointGroupTextBox = new System.Windows.Forms.TextBox(); - this.label141 = new System.Windows.Forms.Label(); - this.ScenarioClusterPointInteriorHashLabel = new System.Windows.Forms.Label(); - this.ScenarioClusterPointFlagsCheckedListBox = new System.Windows.Forms.CheckedListBox(); - this.label142 = new System.Windows.Forms.Label(); - this.ScenarioClusterPointDirectionTextBox = new System.Windows.Forms.TextBox(); - this.label144 = new System.Windows.Forms.Label(); - this.ScenarioClusterPointFlagsUpDown = new System.Windows.Forms.NumericUpDown(); - this.label145 = new System.Windows.Forms.Label(); - this.ScenarioClusterPointGoToButton = new System.Windows.Forms.Button(); - this.ScenarioClusterPointWaitTimeUpDown = new System.Windows.Forms.NumericUpDown(); - this.ScenarioClusterPointPositionTextBox = new System.Windows.Forms.TextBox(); - this.label146 = new System.Windows.Forms.Label(); - this.label147 = new System.Windows.Forms.Label(); - this.ScenarioClusterPointRadiusUpDown = new System.Windows.Forms.NumericUpDown(); - this.label148 = new System.Windows.Forms.Label(); - this.ScenarioClusterPointAnimalFlagUpDown = new System.Windows.Forms.NumericUpDown(); - this.label149 = new System.Windows.Forms.Label(); - this.ScenarioClusterPointProbabilityUpDown = new System.Windows.Forms.NumericUpDown(); - this.ScenarioClusterPointInteriorTextBox = new System.Windows.Forms.TextBox(); - this.label151 = new System.Windows.Forms.Label(); - this.label152 = new System.Windows.Forms.Label(); - this.ScenarioClusterPointTimeEndUpDown = new System.Windows.Forms.NumericUpDown(); - this.ScenarioClusterPointTimeStartUpDown = new System.Windows.Forms.NumericUpDown(); - this.label153 = new System.Windows.Forms.Label(); - this.ScenarioClusterPointModelSetComboBox = new System.Windows.Forms.ComboBox(); - this.label154 = new System.Windows.Forms.Label(); - this.ScenarioClusterPointTypeComboBox = new System.Windows.Forms.ComboBox(); - this.label155 = new System.Windows.Forms.Label(); - this.ScenarioClusterPointCheckBox = new System.Windows.Forms.CheckBox(); - this.TopMenuStrip = new CodeWalker.WinForms.MenuStripFix(); - this.FileMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.FileNewMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.FileNewProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.FileNewYmapMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.FileNewYndMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.FileNewYnvMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.FileNewTrainsMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.FileNewScenarioMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.FileOpenMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.FileOpenProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.FileOpenYmapMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.FileOpenYndMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.FileOpenYnvMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.FileOpenTrainsMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.FileOpenScenarioMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); - this.FileCloseProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); - this.FileSaveProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.FileSaveProjectAsMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.FileSaveItemMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.FileSaveItemAsMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YmapMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YmapNameMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); - this.YmapNewEntityMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YmapNewCarGenMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); - this.YmapAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YmapRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YndMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YndNameMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); - this.YndNewNodeMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator(); - this.YndAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YndRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YnvMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YnvNameMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator9 = new System.Windows.Forms.ToolStripSeparator(); - this.YnvNewPolygonMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator10 = new System.Windows.Forms.ToolStripSeparator(); - this.YnvAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.YnvRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.TrainsMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.TrainsNameMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator(); - this.TrainsNewNodeMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator(); - this.TrainsAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.TrainsRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.ScenarioMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.ScenarioNameMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator11 = new System.Windows.Forms.ToolStripSeparator(); - this.ScenarioNewPointMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.ScenarioNewPointFromSelectedMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.ScenarioNewEntityOverrideMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.ScenarioNewChainMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.ScenarioNewClusterMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator12 = new System.Windows.Forms.ToolStripSeparator(); - this.ScenarioAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.ScenarioRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.ToolsMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.ToolsImportMenyooXmlMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.OptionsMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.OptionsHideGTAVMapMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.SaveFileDialog = new System.Windows.Forms.SaveFileDialog(); - this.OpenFileDialog = new System.Windows.Forms.OpenFileDialog(); - this.ScenarioImportChainMenu = new System.Windows.Forms.ToolStripMenuItem(); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); - this.splitContainer1.Panel1.SuspendLayout(); - this.splitContainer1.Panel2.SuspendLayout(); - this.splitContainer1.SuspendLayout(); - this.MainTabControl.SuspendLayout(); - this.ProjectTabPage.SuspendLayout(); - this.ProjectPanel.SuspendLayout(); - this.ProjectTabControl.SuspendLayout(); - this.ProjectGeneralTabPage.SuspendLayout(); - this.ProjectManifestTabPage.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ProjectManifestTextBox)).BeginInit(); - this.YmapTabPage.SuspendLayout(); - this.YmapTabControl.SuspendLayout(); - this.YmapYmapTabPage.SuspendLayout(); - this.YmapPanel.SuspendLayout(); - this.tabControl1.SuspendLayout(); - this.tabPage1.SuspendLayout(); - this.groupBox1.SuspendLayout(); - this.groupBox2.SuspendLayout(); - this.tabPage2.SuspendLayout(); - this.YmapEntityTabPage.SuspendLayout(); - this.EntityPanel.SuspendLayout(); - this.EntityTabControl.SuspendLayout(); - this.EntityGeneralTabPage.SuspendLayout(); - this.EntityLodTabPage.SuspendLayout(); - this.EntityPivotTabPage.SuspendLayout(); - this.YmapCarGenTabPage.SuspendLayout(); - this.CarGenPanel.SuspendLayout(); - this.YndTabPage.SuspendLayout(); - this.YndTabControl.SuspendLayout(); - this.YndYndTabPage.SuspendLayout(); - this.YndPanel.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.YndAreaIDYUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.YndAreaIDXUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.YndPedNodesUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.YndVehicleNodesUpDown)).BeginInit(); - this.YndNodeTabPage.SuspendLayout(); - this.YndNodePanel.SuspendLayout(); - this.PathNodeTabControl.SuspendLayout(); - this.PathNodePropertiesTabPage.SuspendLayout(); - this.PathNodeFlags5GroupBox.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeFlags5UpDown)).BeginInit(); - this.PathNodeFlags4GroupBox.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeFlags42UpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeFlags4UpDown)).BeginInit(); - this.PathNodeFlags3GroupBox.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeFlags32UpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeFlags3UpDown)).BeginInit(); - this.PathNodeFlags2GroupBox.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeFlags2UpDown)).BeginInit(); - this.PathNodeFlags1GroupBox.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeFlags1UpDown)).BeginInit(); - this.PathNodeFlags0GroupBox.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeFlags0UpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeAreaIDUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeNodeIDUpDown)).BeginInit(); - this.PathNodeLinksTabPage.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); - this.splitContainer2.Panel1.SuspendLayout(); - this.splitContainer2.Panel2.SuspendLayout(); - this.splitContainer2.SuspendLayout(); - this.PathNodeLinkPanel.SuspendLayout(); - this.PathLinkFlags2GroupBox.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkFwdLanesUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkBackLanesUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkFlags2UpDown)).BeginInit(); - this.PathLinkFlags1GroupBox.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkOffsetSizeUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkFlags1UpDown)).BeginInit(); - this.PathLinkFlags0GroupBox.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkFlags04UpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkFlags03UpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkFlags0UpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkLengthUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkNodeIDUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkAreaIDUpDown)).BeginInit(); - this.PathNodeJunctionTabPage.SuspendLayout(); - this.PathNodeJunctionPanel.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeJunctionPosYUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeJunctionPosXUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeJunctionHeightmapDimYUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeJunctionHeightmapDimXUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeJunctionMinZUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeJunctionMaxZUpDown)).BeginInit(); - this.YnvTabPage.SuspendLayout(); - this.YnvTabControl.SuspendLayout(); - this.YnvYnvTabPage.SuspendLayout(); - this.YnvPanel.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.YnvAreaIDYUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.YnvAreaIDXUpDown)).BeginInit(); - this.YnvPolyTabPage.SuspendLayout(); - this.YnvPortalTabPage.SuspendLayout(); - this.TrainsTabPage.SuspendLayout(); - this.TrainsTabControl.SuspendLayout(); - this.TrainTrackTabPage.SuspendLayout(); - this.TrainTrackFilePanel.SuspendLayout(); - this.TrainNodeTabPage.SuspendLayout(); - this.TrainNodePanel.SuspendLayout(); - this.ScenarioTabPage.SuspendLayout(); - this.ScenarioTabControl.SuspendLayout(); - this.ScenarioYmtTabPage.SuspendLayout(); - this.ScenarioYmtPanel.SuspendLayout(); - this.ScenarioPointTabPage.SuspendLayout(); - this.ScenarioPointOuterPanel.SuspendLayout(); - this.ScenarioPointPanel.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioPointFlagsValueUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioPointWaitTimeUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioPointRadiusUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioPointSpOnlyFlagUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioPointProbabilityUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioPointTimeEndUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioPointTimeStartUpDown)).BeginInit(); - this.ScenarioEntityTabPage.SuspendLayout(); - this.ScenarioEntityPanel.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioEntityUnk2UpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioEntityUnk1UpDown)).BeginInit(); - this.ScenarioEntityPointTabPage.SuspendLayout(); - this.ScenarioEntityPointPanel.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioEntityPointFlagsUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioEntityPointEndUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioEntityPointStartUpDown)).BeginInit(); - this.ScenarioChainTabPage.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit(); - this.splitContainer3.Panel1.SuspendLayout(); - this.splitContainer3.Panel2.SuspendLayout(); - this.splitContainer3.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioChainUnk1UpDown)).BeginInit(); - this.ScenarioChainEdgePanel.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioChainEdgeNodeIndexToUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioChainEdgeNodeIndexFromUpDown)).BeginInit(); - this.ScenarioChainNodeTabPage.SuspendLayout(); - this.ScenarioChainNodePanel.SuspendLayout(); - this.ScenarioClusterTabPage.SuspendLayout(); - this.ScenarioClusterPanel.SuspendLayout(); - this.ScenarioClusterPointTabPage.SuspendLayout(); - this.ScenarioClusterPointPanel.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioClusterPointFlagsUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioClusterPointWaitTimeUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioClusterPointRadiusUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioClusterPointAnimalFlagUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioClusterPointProbabilityUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioClusterPointTimeEndUpDown)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioClusterPointTimeStartUpDown)).BeginInit(); - this.TopMenuStrip.SuspendLayout(); - this.SuspendLayout(); - // - // splitContainer1 - // - this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; - this.splitContainer1.Location = new System.Drawing.Point(0, 27); - this.splitContainer1.Name = "splitContainer1"; - // - // splitContainer1.Panel1 - // - this.splitContainer1.Panel1.Controls.Add(this.ProjectTreeView); - // - // splitContainer1.Panel2 - // - this.splitContainer1.Panel2.Controls.Add(this.MainTabControl); - this.splitContainer1.Size = new System.Drawing.Size(776, 504); - this.splitContainer1.SplitterDistance = 237; - this.splitContainer1.TabIndex = 0; - // - // ProjectTreeView - // - this.ProjectTreeView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ProjectTreeView.FullRowSelect = true; - this.ProjectTreeView.HideSelection = false; - this.ProjectTreeView.Location = new System.Drawing.Point(3, 3); - this.ProjectTreeView.Name = "ProjectTreeView"; - this.ProjectTreeView.ShowRootLines = false; - this.ProjectTreeView.Size = new System.Drawing.Size(231, 498); - this.ProjectTreeView.TabIndex = 1; - this.ProjectTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.ProjectTreeView_AfterSelect); - // - // MainTabControl - // - this.MainTabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.MainTabControl.Controls.Add(this.ProjectTabPage); - this.MainTabControl.Controls.Add(this.YmapTabPage); - this.MainTabControl.Controls.Add(this.YndTabPage); - this.MainTabControl.Controls.Add(this.YnvTabPage); - this.MainTabControl.Controls.Add(this.TrainsTabPage); - this.MainTabControl.Controls.Add(this.ScenarioTabPage); - this.MainTabControl.Location = new System.Drawing.Point(3, 3); - this.MainTabControl.Name = "MainTabControl"; - this.MainTabControl.SelectedIndex = 0; - this.MainTabControl.Size = new System.Drawing.Size(529, 498); - this.MainTabControl.TabIndex = 2; - // - // ProjectTabPage - // - this.ProjectTabPage.Controls.Add(this.ProjectPanel); - this.ProjectTabPage.Location = new System.Drawing.Point(4, 22); - this.ProjectTabPage.Name = "ProjectTabPage"; - this.ProjectTabPage.Padding = new System.Windows.Forms.Padding(3); - this.ProjectTabPage.Size = new System.Drawing.Size(521, 472); - this.ProjectTabPage.TabIndex = 0; - this.ProjectTabPage.Text = "Project"; - this.ProjectTabPage.UseVisualStyleBackColor = true; - // - // ProjectPanel - // - this.ProjectPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ProjectPanel.Controls.Add(this.ProjectTabControl); - this.ProjectPanel.Enabled = false; - this.ProjectPanel.Location = new System.Drawing.Point(0, 0); - this.ProjectPanel.Name = "ProjectPanel"; - this.ProjectPanel.Size = new System.Drawing.Size(521, 472); - this.ProjectPanel.TabIndex = 3; - // - // ProjectTabControl - // - this.ProjectTabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ProjectTabControl.Controls.Add(this.ProjectGeneralTabPage); - this.ProjectTabControl.Controls.Add(this.ProjectManifestTabPage); - this.ProjectTabControl.Location = new System.Drawing.Point(0, 3); - this.ProjectTabControl.Name = "ProjectTabControl"; - this.ProjectTabControl.SelectedIndex = 0; - this.ProjectTabControl.Size = new System.Drawing.Size(518, 469); - this.ProjectTabControl.TabIndex = 26; - // - // ProjectGeneralTabPage - // - this.ProjectGeneralTabPage.Controls.Add(this.ProjectNameTextBox); - this.ProjectGeneralTabPage.Controls.Add(this.ProjectHideMapCheckBox); - this.ProjectGeneralTabPage.Controls.Add(this.ProjectVersionLabel); - this.ProjectGeneralTabPage.Controls.Add(this.ProjectShowEntitiesCheckBox); - this.ProjectGeneralTabPage.Controls.Add(this.label1); - this.ProjectGeneralTabPage.Location = new System.Drawing.Point(4, 22); - this.ProjectGeneralTabPage.Name = "ProjectGeneralTabPage"; - this.ProjectGeneralTabPage.Padding = new System.Windows.Forms.Padding(3); - this.ProjectGeneralTabPage.Size = new System.Drawing.Size(510, 443); - this.ProjectGeneralTabPage.TabIndex = 0; - this.ProjectGeneralTabPage.Text = "General"; - this.ProjectGeneralTabPage.UseVisualStyleBackColor = true; - // - // ProjectNameTextBox - // - this.ProjectNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ProjectNameTextBox.Location = new System.Drawing.Point(82, 16); - this.ProjectNameTextBox.Name = "ProjectNameTextBox"; - this.ProjectNameTextBox.Size = new System.Drawing.Size(265, 20); - this.ProjectNameTextBox.TabIndex = 1; - this.ProjectNameTextBox.TextChanged += new System.EventHandler(this.ProjectNameTextBox_TextChanged); - // - // ProjectHideMapCheckBox - // - this.ProjectHideMapCheckBox.AutoSize = true; - this.ProjectHideMapCheckBox.Location = new System.Drawing.Point(82, 123); - this.ProjectHideMapCheckBox.Name = "ProjectHideMapCheckBox"; - this.ProjectHideMapCheckBox.Size = new System.Drawing.Size(103, 17); - this.ProjectHideMapCheckBox.TabIndex = 25; - this.ProjectHideMapCheckBox.Text = "Hide GTAV map"; - this.ProjectHideMapCheckBox.UseVisualStyleBackColor = true; - this.ProjectHideMapCheckBox.CheckedChanged += new System.EventHandler(this.ProjectHideMapCheckBox_CheckedChanged); - // - // ProjectVersionLabel - // - this.ProjectVersionLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ProjectVersionLabel.AutoSize = true; - this.ProjectVersionLabel.Location = new System.Drawing.Point(375, 19); - this.ProjectVersionLabel.Name = "ProjectVersionLabel"; - this.ProjectVersionLabel.Size = new System.Drawing.Size(51, 13); - this.ProjectVersionLabel.TabIndex = 2; - this.ProjectVersionLabel.Text = "Version: -"; - // - // ProjectShowEntitiesCheckBox - // - this.ProjectShowEntitiesCheckBox.AutoSize = true; - this.ProjectShowEntitiesCheckBox.Checked = true; - this.ProjectShowEntitiesCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; - this.ProjectShowEntitiesCheckBox.Location = new System.Drawing.Point(82, 100); - this.ProjectShowEntitiesCheckBox.Name = "ProjectShowEntitiesCheckBox"; - this.ProjectShowEntitiesCheckBox.Size = new System.Drawing.Size(156, 17); - this.ProjectShowEntitiesCheckBox.TabIndex = 24; - this.ProjectShowEntitiesCheckBox.Text = "Show entities in World view"; - this.ProjectShowEntitiesCheckBox.UseVisualStyleBackColor = true; - this.ProjectShowEntitiesCheckBox.CheckedChanged += new System.EventHandler(this.ProjectShowEntitiesCheckBox_CheckedChanged); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(19, 19); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(38, 13); - this.label1.TabIndex = 0; - this.label1.Text = "Name:"; - // - // ProjectManifestTabPage - // - this.ProjectManifestTabPage.Controls.Add(this.label162); - this.ProjectManifestTabPage.Controls.Add(this.ProjectManifestGenerateButton); - this.ProjectManifestTabPage.Controls.Add(this.ProjectManifestTextBox); - this.ProjectManifestTabPage.Location = new System.Drawing.Point(4, 22); - this.ProjectManifestTabPage.Name = "ProjectManifestTabPage"; - this.ProjectManifestTabPage.Padding = new System.Windows.Forms.Padding(3); - this.ProjectManifestTabPage.Size = new System.Drawing.Size(510, 443); - this.ProjectManifestTabPage.TabIndex = 1; - this.ProjectManifestTabPage.Text = "Manifest"; - this.ProjectManifestTabPage.UseVisualStyleBackColor = true; - // - // label162 - // - this.label162.AutoSize = true; - this.label162.Location = new System.Drawing.Point(99, 11); - this.label162.Name = "label162"; - this.label162.Size = new System.Drawing.Size(111, 13); - this.label162.TabIndex = 2; - this.label162.Text = "XML for _manifest.ymf"; - // - // ProjectManifestGenerateButton - // - this.ProjectManifestGenerateButton.Location = new System.Drawing.Point(6, 6); - this.ProjectManifestGenerateButton.Name = "ProjectManifestGenerateButton"; - this.ProjectManifestGenerateButton.Size = new System.Drawing.Size(75, 23); - this.ProjectManifestGenerateButton.TabIndex = 1; - this.ProjectManifestGenerateButton.Text = "Generate"; - this.ProjectManifestGenerateButton.UseVisualStyleBackColor = true; - this.ProjectManifestGenerateButton.Click += new System.EventHandler(this.ProjectManifestGenerateButton_Click); - // - // ProjectManifestTextBox - // - this.ProjectManifestTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ProjectManifestTextBox.AutoCompleteBracketsList = new char[] { - '(', - ')', - '{', - '}', - '[', - ']', - '\"', - '\"', - '\'', - '\''}; - this.ProjectManifestTextBox.AutoIndentCharsPatterns = ""; - this.ProjectManifestTextBox.AutoScrollMinSize = new System.Drawing.Size(2, 14); - this.ProjectManifestTextBox.BackBrush = null; - this.ProjectManifestTextBox.CharHeight = 14; - this.ProjectManifestTextBox.CharWidth = 8; - this.ProjectManifestTextBox.CommentPrefix = null; - this.ProjectManifestTextBox.Cursor = System.Windows.Forms.Cursors.IBeam; - this.ProjectManifestTextBox.DisabledColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(180)))), ((int)(((byte)(180)))), ((int)(((byte)(180))))); - this.ProjectManifestTextBox.Font = new System.Drawing.Font("Courier New", 9.75F); - this.ProjectManifestTextBox.IsReplaceMode = false; - this.ProjectManifestTextBox.Language = FastColoredTextBoxNS.Language.XML; - this.ProjectManifestTextBox.LeftBracket = '<'; - this.ProjectManifestTextBox.LeftBracket2 = '('; - this.ProjectManifestTextBox.Location = new System.Drawing.Point(3, 35); - this.ProjectManifestTextBox.Name = "ProjectManifestTextBox"; - this.ProjectManifestTextBox.Paddings = new System.Windows.Forms.Padding(0); - this.ProjectManifestTextBox.RightBracket = '>'; - this.ProjectManifestTextBox.RightBracket2 = ')'; - this.ProjectManifestTextBox.SelectionColor = System.Drawing.Color.FromArgb(((int)(((byte)(60)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(255))))); - this.ProjectManifestTextBox.ServiceColors = ((FastColoredTextBoxNS.ServiceColors)(resources.GetObject("ProjectManifestTextBox.ServiceColors"))); - this.ProjectManifestTextBox.Size = new System.Drawing.Size(504, 408); - this.ProjectManifestTextBox.TabIndex = 0; - this.ProjectManifestTextBox.Zoom = 100; - // - // YmapTabPage - // - this.YmapTabPage.Controls.Add(this.YmapTabControl); - this.YmapTabPage.Location = new System.Drawing.Point(4, 22); - this.YmapTabPage.Name = "YmapTabPage"; - this.YmapTabPage.Padding = new System.Windows.Forms.Padding(3); - this.YmapTabPage.Size = new System.Drawing.Size(521, 472); - this.YmapTabPage.TabIndex = 1; - this.YmapTabPage.Text = "Map"; - this.YmapTabPage.UseVisualStyleBackColor = true; - // - // YmapTabControl - // - this.YmapTabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.YmapTabControl.Controls.Add(this.YmapYmapTabPage); - this.YmapTabControl.Controls.Add(this.YmapEntityTabPage); - this.YmapTabControl.Controls.Add(this.YmapCarGenTabPage); - this.YmapTabControl.Controls.Add(this.YmapMloInstanceTabPage); - this.YmapTabControl.Controls.Add(this.YmapTimecycleModifierTabPage); - this.YmapTabControl.Location = new System.Drawing.Point(0, 3); - this.YmapTabControl.Name = "YmapTabControl"; - this.YmapTabControl.SelectedIndex = 0; - this.YmapTabControl.Size = new System.Drawing.Size(518, 469); - this.YmapTabControl.TabIndex = 0; - // - // YmapYmapTabPage - // - this.YmapYmapTabPage.Controls.Add(this.YmapPanel); - this.YmapYmapTabPage.Location = new System.Drawing.Point(4, 22); - this.YmapYmapTabPage.Name = "YmapYmapTabPage"; - this.YmapYmapTabPage.Padding = new System.Windows.Forms.Padding(3); - this.YmapYmapTabPage.Size = new System.Drawing.Size(510, 443); - this.YmapYmapTabPage.TabIndex = 0; - this.YmapYmapTabPage.Text = "Ymap"; - this.YmapYmapTabPage.UseVisualStyleBackColor = true; - // - // YmapPanel - // - this.YmapPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.YmapPanel.Controls.Add(this.tabControl1); - this.YmapPanel.Controls.Add(this.YmapProjectPathTextBox); - this.YmapPanel.Controls.Add(this.label30); - this.YmapPanel.Controls.Add(this.YmapFileLocationTextBox); - this.YmapPanel.Controls.Add(this.label29); - this.YmapPanel.Controls.Add(this.YmapCalculateExtentsButton); - this.YmapPanel.Controls.Add(this.YmapStreamingExtentsMaxTextBox); - this.YmapPanel.Controls.Add(this.label10); - this.YmapPanel.Controls.Add(this.YmapStreamingExtentsMinTextBox); - this.YmapPanel.Controls.Add(this.label11); - this.YmapPanel.Controls.Add(this.YmapEntitiesExtentsMaxTextBox); - this.YmapPanel.Controls.Add(this.label9); - this.YmapPanel.Controls.Add(this.YmapEntitiesExtentsMinTextBox); - this.YmapPanel.Controls.Add(this.label8); - this.YmapPanel.Controls.Add(this.YmapParentHashLabel); - this.YmapPanel.Controls.Add(this.YmapNameHashLabel); - this.YmapPanel.Controls.Add(this.YmapParentTextBox); - this.YmapPanel.Controls.Add(this.label4); - this.YmapPanel.Controls.Add(this.label5); - this.YmapPanel.Controls.Add(this.YmapNameTextBox); - this.YmapPanel.Controls.Add(this.label3); - this.YmapPanel.Controls.Add(this.label2); - this.YmapPanel.Enabled = false; - this.YmapPanel.Location = new System.Drawing.Point(0, 0); - this.YmapPanel.Name = "YmapPanel"; - this.YmapPanel.Size = new System.Drawing.Size(510, 443); - this.YmapPanel.TabIndex = 5; - // - // tabControl1 - // - this.tabControl1.Controls.Add(this.tabPage1); - this.tabControl1.Controls.Add(this.tabPage2); - this.tabControl1.Location = new System.Drawing.Point(3, 61); - this.tabControl1.Name = "tabControl1"; - this.tabControl1.SelectedIndex = 0; - this.tabControl1.Size = new System.Drawing.Size(504, 203); - this.tabControl1.TabIndex = 41; - // - // tabPage1 - // - this.tabPage1.Controls.Add(this.groupBox1); - this.tabPage1.Controls.Add(this.YmapCalculateFlagsButton); - this.tabPage1.Controls.Add(this.groupBox2); - this.tabPage1.Location = new System.Drawing.Point(4, 22); - this.tabPage1.Name = "tabPage1"; - this.tabPage1.Padding = new System.Windows.Forms.Padding(3); - this.tabPage1.Size = new System.Drawing.Size(496, 177); - this.tabPage1.TabIndex = 0; - this.tabPage1.Text = "Flags"; - this.tabPage1.UseVisualStyleBackColor = true; - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.YmapCFlagsGrassCheckBox); - this.groupBox1.Controls.Add(this.YmapCFlagsCriticalCheckBox); - this.groupBox1.Controls.Add(this.YmapCFlagsDistLightsCheckBox); - this.groupBox1.Controls.Add(this.YmapCFlagsLODLightsCheckBox); - this.groupBox1.Controls.Add(this.YmapCFlagsPhysicsCheckBox); - this.groupBox1.Controls.Add(this.YmapCFlagsOcclusionCheckBox); - this.groupBox1.Controls.Add(this.YmapCFlagsInteriorCheckBox); - this.groupBox1.Controls.Add(this.YmapCFlagsSLODCheckBox); - this.groupBox1.Controls.Add(this.YmapCFlagsSLOD2CheckBox); - this.groupBox1.Controls.Add(this.YmapCFlagsLODCheckBox); - this.groupBox1.Controls.Add(this.YmapCFlagsHDCheckBox); - this.groupBox1.Controls.Add(this.YmapContentFlagsTextBox); - this.groupBox1.Controls.Add(this.label7); - this.groupBox1.Location = new System.Drawing.Point(6, 6); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(259, 166); - this.groupBox1.TabIndex = 13; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "Content Flags"; - // - // YmapCFlagsGrassCheckBox - // - this.YmapCFlagsGrassCheckBox.AutoSize = true; - this.YmapCFlagsGrassCheckBox.Location = new System.Drawing.Point(138, 113); - this.YmapCFlagsGrassCheckBox.Name = "YmapCFlagsGrassCheckBox"; - this.YmapCFlagsGrassCheckBox.Size = new System.Drawing.Size(86, 17); - this.YmapCFlagsGrassCheckBox.TabIndex = 10; - this.YmapCFlagsGrassCheckBox.Text = "Grass (1024)"; - this.YmapCFlagsGrassCheckBox.UseVisualStyleBackColor = true; - this.YmapCFlagsGrassCheckBox.CheckedChanged += new System.EventHandler(this.YmapCFlagsGrassCheckBox_CheckedChanged); - // - // YmapCFlagsCriticalCheckBox - // - this.YmapCFlagsCriticalCheckBox.AutoSize = true; - this.YmapCFlagsCriticalCheckBox.Location = new System.Drawing.Point(6, 113); - this.YmapCFlagsCriticalCheckBox.Name = "YmapCFlagsCriticalCheckBox"; - this.YmapCFlagsCriticalCheckBox.Size = new System.Drawing.Size(84, 17); - this.YmapCFlagsCriticalCheckBox.TabIndex = 9; - this.YmapCFlagsCriticalCheckBox.Text = "Critical (512)"; - this.YmapCFlagsCriticalCheckBox.UseVisualStyleBackColor = true; - this.YmapCFlagsCriticalCheckBox.CheckedChanged += new System.EventHandler(this.YmapCFlagsCriticalCheckBox_CheckedChanged); - // - // YmapCFlagsDistLightsCheckBox - // - this.YmapCFlagsDistLightsCheckBox.AutoSize = true; - this.YmapCFlagsDistLightsCheckBox.Location = new System.Drawing.Point(138, 90); - this.YmapCFlagsDistLightsCheckBox.Name = "YmapCFlagsDistLightsCheckBox"; - this.YmapCFlagsDistLightsCheckBox.Size = new System.Drawing.Size(117, 17); - this.YmapCFlagsDistLightsCheckBox.TabIndex = 8; - this.YmapCFlagsDistLightsCheckBox.Text = "Distant Lights (256)"; - this.YmapCFlagsDistLightsCheckBox.UseVisualStyleBackColor = true; - this.YmapCFlagsDistLightsCheckBox.CheckedChanged += new System.EventHandler(this.YmapCFlagsDistLightsCheckBox_CheckedChanged); - // - // YmapCFlagsLODLightsCheckBox - // - this.YmapCFlagsLODLightsCheckBox.AutoSize = true; - this.YmapCFlagsLODLightsCheckBox.Location = new System.Drawing.Point(6, 90); - this.YmapCFlagsLODLightsCheckBox.Name = "YmapCFlagsLODLightsCheckBox"; - this.YmapCFlagsLODLightsCheckBox.Size = new System.Drawing.Size(106, 17); - this.YmapCFlagsLODLightsCheckBox.TabIndex = 7; - this.YmapCFlagsLODLightsCheckBox.Text = "LOD Lights (128)"; - this.YmapCFlagsLODLightsCheckBox.UseVisualStyleBackColor = true; - this.YmapCFlagsLODLightsCheckBox.CheckedChanged += new System.EventHandler(this.YmapCFlagsLODLightsCheckBox_CheckedChanged); - // - // YmapCFlagsPhysicsCheckBox - // - this.YmapCFlagsPhysicsCheckBox.AutoSize = true; - this.YmapCFlagsPhysicsCheckBox.Location = new System.Drawing.Point(138, 67); - this.YmapCFlagsPhysicsCheckBox.Name = "YmapCFlagsPhysicsCheckBox"; - this.YmapCFlagsPhysicsCheckBox.Size = new System.Drawing.Size(83, 17); - this.YmapCFlagsPhysicsCheckBox.TabIndex = 6; - this.YmapCFlagsPhysicsCheckBox.Text = "Physics (64)"; - this.YmapCFlagsPhysicsCheckBox.UseVisualStyleBackColor = true; - this.YmapCFlagsPhysicsCheckBox.CheckedChanged += new System.EventHandler(this.YmapCFlagsPhysicsCheckBox_CheckedChanged); - // - // YmapCFlagsOcclusionCheckBox - // - this.YmapCFlagsOcclusionCheckBox.AutoSize = true; - this.YmapCFlagsOcclusionCheckBox.Location = new System.Drawing.Point(6, 67); - this.YmapCFlagsOcclusionCheckBox.Name = "YmapCFlagsOcclusionCheckBox"; - this.YmapCFlagsOcclusionCheckBox.Size = new System.Drawing.Size(94, 17); - this.YmapCFlagsOcclusionCheckBox.TabIndex = 5; - this.YmapCFlagsOcclusionCheckBox.Text = "Occlusion (32)"; - this.YmapCFlagsOcclusionCheckBox.UseVisualStyleBackColor = true; - this.YmapCFlagsOcclusionCheckBox.CheckedChanged += new System.EventHandler(this.YmapCFlagsOcclusionCheckBox_CheckedChanged); - // - // YmapCFlagsInteriorCheckBox - // - this.YmapCFlagsInteriorCheckBox.AutoSize = true; - this.YmapCFlagsInteriorCheckBox.Location = new System.Drawing.Point(6, 44); - this.YmapCFlagsInteriorCheckBox.Name = "YmapCFlagsInteriorCheckBox"; - this.YmapCFlagsInteriorCheckBox.Size = new System.Drawing.Size(73, 17); - this.YmapCFlagsInteriorCheckBox.TabIndex = 4; - this.YmapCFlagsInteriorCheckBox.Text = "Interior (8)"; - this.YmapCFlagsInteriorCheckBox.UseVisualStyleBackColor = true; - this.YmapCFlagsInteriorCheckBox.CheckedChanged += new System.EventHandler(this.YmapCFlagsInteriorCheckBox_CheckedChanged); - // - // YmapCFlagsSLODCheckBox - // - this.YmapCFlagsSLODCheckBox.AutoSize = true; - this.YmapCFlagsSLODCheckBox.Location = new System.Drawing.Point(138, 44); - this.YmapCFlagsSLODCheckBox.Name = "YmapCFlagsSLODCheckBox"; - this.YmapCFlagsSLODCheckBox.Size = new System.Drawing.Size(76, 17); - this.YmapCFlagsSLODCheckBox.TabIndex = 3; - this.YmapCFlagsSLODCheckBox.Text = "SLOD (16)"; - this.YmapCFlagsSLODCheckBox.UseVisualStyleBackColor = true; - this.YmapCFlagsSLODCheckBox.CheckedChanged += new System.EventHandler(this.YmapCFlagsSLODCheckBox_CheckedChanged); - // - // YmapCFlagsSLOD2CheckBox - // - this.YmapCFlagsSLOD2CheckBox.AutoSize = true; - this.YmapCFlagsSLOD2CheckBox.Location = new System.Drawing.Point(138, 21); - this.YmapCFlagsSLOD2CheckBox.Name = "YmapCFlagsSLOD2CheckBox"; - this.YmapCFlagsSLOD2CheckBox.Size = new System.Drawing.Size(82, 17); - this.YmapCFlagsSLOD2CheckBox.TabIndex = 2; - this.YmapCFlagsSLOD2CheckBox.Text = "SLOD2+ (4)"; - this.YmapCFlagsSLOD2CheckBox.UseVisualStyleBackColor = true; - this.YmapCFlagsSLOD2CheckBox.CheckedChanged += new System.EventHandler(this.YmapCFlagsSLOD2CheckBox_CheckedChanged); - // - // YmapCFlagsLODCheckBox - // - this.YmapCFlagsLODCheckBox.AutoSize = true; - this.YmapCFlagsLODCheckBox.Location = new System.Drawing.Point(69, 21); - this.YmapCFlagsLODCheckBox.Name = "YmapCFlagsLODCheckBox"; - this.YmapCFlagsLODCheckBox.Size = new System.Drawing.Size(63, 17); - this.YmapCFlagsLODCheckBox.TabIndex = 1; - this.YmapCFlagsLODCheckBox.Text = "LOD (2)"; - this.YmapCFlagsLODCheckBox.UseVisualStyleBackColor = true; - this.YmapCFlagsLODCheckBox.CheckedChanged += new System.EventHandler(this.YmapCFlagsLODCheckBox_CheckedChanged); - // - // YmapCFlagsHDCheckBox - // - this.YmapCFlagsHDCheckBox.AutoSize = true; - this.YmapCFlagsHDCheckBox.Location = new System.Drawing.Point(6, 21); - this.YmapCFlagsHDCheckBox.Name = "YmapCFlagsHDCheckBox"; - this.YmapCFlagsHDCheckBox.Size = new System.Drawing.Size(57, 17); - this.YmapCFlagsHDCheckBox.TabIndex = 0; - this.YmapCFlagsHDCheckBox.Text = "HD (1)"; - this.YmapCFlagsHDCheckBox.UseVisualStyleBackColor = true; - this.YmapCFlagsHDCheckBox.CheckedChanged += new System.EventHandler(this.YmapCFlagsHDCheckBox_CheckedChanged); - // - // YmapContentFlagsTextBox - // - this.YmapContentFlagsTextBox.Location = new System.Drawing.Point(69, 140); - this.YmapContentFlagsTextBox.Name = "YmapContentFlagsTextBox"; - this.YmapContentFlagsTextBox.Size = new System.Drawing.Size(130, 20); - this.YmapContentFlagsTextBox.TabIndex = 13; - this.YmapContentFlagsTextBox.TextChanged += new System.EventHandler(this.YmapContentFlagsTextBox_TextChanged); - // - // label7 - // - this.label7.AutoSize = true; - this.label7.Location = new System.Drawing.Point(26, 143); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(37, 13); - this.label7.TabIndex = 12; - this.label7.Text = "Value:"; - // - // YmapCalculateFlagsButton - // - this.YmapCalculateFlagsButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.YmapCalculateFlagsButton.Location = new System.Drawing.Point(385, 144); - this.YmapCalculateFlagsButton.Name = "YmapCalculateFlagsButton"; - this.YmapCalculateFlagsButton.Size = new System.Drawing.Size(106, 23); - this.YmapCalculateFlagsButton.TabIndex = 40; - this.YmapCalculateFlagsButton.Text = "Calculate all flags"; - this.YmapCalculateFlagsButton.UseVisualStyleBackColor = true; - this.YmapCalculateFlagsButton.Click += new System.EventHandler(this.YmapCalculateFlagsButton_Click); - // - // groupBox2 - // - this.groupBox2.Controls.Add(this.YmapFlagsLODCheckBox); - this.groupBox2.Controls.Add(this.YmapFlagsScriptedCheckBox); - this.groupBox2.Controls.Add(this.YmapFlagsTextBox); - this.groupBox2.Controls.Add(this.label6); - this.groupBox2.Location = new System.Drawing.Point(271, 6); - this.groupBox2.Name = "groupBox2"; - this.groupBox2.Size = new System.Drawing.Size(219, 74); - this.groupBox2.TabIndex = 14; - this.groupBox2.TabStop = false; - this.groupBox2.Text = "Flags"; - // - // YmapFlagsLODCheckBox - // - this.YmapFlagsLODCheckBox.AutoSize = true; - this.YmapFlagsLODCheckBox.Location = new System.Drawing.Point(92, 21); - this.YmapFlagsLODCheckBox.Name = "YmapFlagsLODCheckBox"; - this.YmapFlagsLODCheckBox.Size = new System.Drawing.Size(63, 17); - this.YmapFlagsLODCheckBox.TabIndex = 13; - this.YmapFlagsLODCheckBox.Text = "LOD (2)"; - this.YmapFlagsLODCheckBox.UseVisualStyleBackColor = true; - this.YmapFlagsLODCheckBox.CheckedChanged += new System.EventHandler(this.YmapFlagsLODCheckBox_CheckedChanged); - // - // YmapFlagsScriptedCheckBox - // - this.YmapFlagsScriptedCheckBox.AutoSize = true; - this.YmapFlagsScriptedCheckBox.Location = new System.Drawing.Point(6, 21); - this.YmapFlagsScriptedCheckBox.Name = "YmapFlagsScriptedCheckBox"; - this.YmapFlagsScriptedCheckBox.Size = new System.Drawing.Size(80, 17); - this.YmapFlagsScriptedCheckBox.TabIndex = 12; - this.YmapFlagsScriptedCheckBox.Text = "Scripted (1)"; - this.YmapFlagsScriptedCheckBox.UseVisualStyleBackColor = true; - this.YmapFlagsScriptedCheckBox.CheckedChanged += new System.EventHandler(this.YmapFlagsScriptedCheckBox_CheckedChanged); - // - // YmapFlagsTextBox - // - this.YmapFlagsTextBox.Location = new System.Drawing.Point(78, 48); - this.YmapFlagsTextBox.Name = "YmapFlagsTextBox"; - this.YmapFlagsTextBox.Size = new System.Drawing.Size(130, 20); - this.YmapFlagsTextBox.TabIndex = 11; - this.YmapFlagsTextBox.TextChanged += new System.EventHandler(this.YmapFlagsTextBox_TextChanged); - // - // label6 - // - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(35, 51); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(37, 13); - this.label6.TabIndex = 10; - this.label6.Text = "Value:"; - // - // tabPage2 - // - this.tabPage2.Controls.Add(this.label12); - this.tabPage2.Controls.Add(this.YmapPhysicsDictionariesTextBox); - this.tabPage2.Location = new System.Drawing.Point(4, 22); - this.tabPage2.Name = "tabPage2"; - this.tabPage2.Padding = new System.Windows.Forms.Padding(3); - this.tabPage2.Size = new System.Drawing.Size(496, 177); - this.tabPage2.TabIndex = 1; - this.tabPage2.Text = "Physics Dictionaries"; - this.tabPage2.UseVisualStyleBackColor = true; - // - // label12 - // - this.label12.AutoSize = true; - this.label12.Location = new System.Drawing.Point(3, 9); - this.label12.Name = "label12"; - this.label12.Size = new System.Drawing.Size(75, 13); - this.label12.TabIndex = 52; - this.label12.Text = "Name hashes:"; - // - // YmapPhysicsDictionariesTextBox - // - this.YmapPhysicsDictionariesTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.YmapPhysicsDictionariesTextBox.Location = new System.Drawing.Point(84, 6); - this.YmapPhysicsDictionariesTextBox.Multiline = true; - this.YmapPhysicsDictionariesTextBox.Name = "YmapPhysicsDictionariesTextBox"; - this.YmapPhysicsDictionariesTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.YmapPhysicsDictionariesTextBox.Size = new System.Drawing.Size(248, 165); - this.YmapPhysicsDictionariesTextBox.TabIndex = 51; - this.YmapPhysicsDictionariesTextBox.WordWrap = false; - this.YmapPhysicsDictionariesTextBox.TextChanged += new System.EventHandler(this.YmapPhysicsDictionariesTextBox_TextChanged); - // - // YmapProjectPathTextBox - // - this.YmapProjectPathTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.YmapProjectPathTextBox.Location = new System.Drawing.Point(84, 417); - this.YmapProjectPathTextBox.Name = "YmapProjectPathTextBox"; - this.YmapProjectPathTextBox.ReadOnly = true; - this.YmapProjectPathTextBox.Size = new System.Drawing.Size(414, 20); - this.YmapProjectPathTextBox.TabIndex = 37; - // - // label30 - // - this.label30.AutoSize = true; - this.label30.Location = new System.Drawing.Point(6, 420); - this.label30.Name = "label30"; - this.label30.Size = new System.Drawing.Size(67, 13); - this.label30.TabIndex = 36; - this.label30.Text = "Project path:"; - // - // YmapFileLocationTextBox - // - this.YmapFileLocationTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.YmapFileLocationTextBox.Location = new System.Drawing.Point(84, 391); - this.YmapFileLocationTextBox.Name = "YmapFileLocationTextBox"; - this.YmapFileLocationTextBox.ReadOnly = true; - this.YmapFileLocationTextBox.Size = new System.Drawing.Size(414, 20); - this.YmapFileLocationTextBox.TabIndex = 35; - // - // label29 - // - this.label29.AutoSize = true; - this.label29.Location = new System.Drawing.Point(6, 394); - this.label29.Name = "label29"; - this.label29.Size = new System.Drawing.Size(66, 13); - this.label29.TabIndex = 34; - this.label29.Text = "File location:"; - // - // YmapCalculateExtentsButton - // - this.YmapCalculateExtentsButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.YmapCalculateExtentsButton.Location = new System.Drawing.Point(392, 350); - this.YmapCalculateExtentsButton.Name = "YmapCalculateExtentsButton"; - this.YmapCalculateExtentsButton.Size = new System.Drawing.Size(106, 23); - this.YmapCalculateExtentsButton.TabIndex = 25; - this.YmapCalculateExtentsButton.Text = "Calculate extents"; - this.YmapCalculateExtentsButton.UseVisualStyleBackColor = true; - this.YmapCalculateExtentsButton.Click += new System.EventHandler(this.YmapCalculateExtentsButton_Click); - // - // YmapStreamingExtentsMaxTextBox - // - this.YmapStreamingExtentsMaxTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.YmapStreamingExtentsMaxTextBox.Location = new System.Drawing.Point(127, 352); - this.YmapStreamingExtentsMaxTextBox.Name = "YmapStreamingExtentsMaxTextBox"; - this.YmapStreamingExtentsMaxTextBox.Size = new System.Drawing.Size(259, 20); - this.YmapStreamingExtentsMaxTextBox.TabIndex = 21; - this.YmapStreamingExtentsMaxTextBox.TextChanged += new System.EventHandler(this.YmapStreamingExtentsMaxTextBox_TextChanged); - // - // label10 - // - this.label10.AutoSize = true; - this.label10.Location = new System.Drawing.Point(6, 355); - this.label10.Name = "label10"; - this.label10.Size = new System.Drawing.Size(118, 13); - this.label10.TabIndex = 20; - this.label10.Text = "Streaming Extents Max:"; - // - // YmapStreamingExtentsMinTextBox - // - this.YmapStreamingExtentsMinTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.YmapStreamingExtentsMinTextBox.Location = new System.Drawing.Point(127, 326); - this.YmapStreamingExtentsMinTextBox.Name = "YmapStreamingExtentsMinTextBox"; - this.YmapStreamingExtentsMinTextBox.Size = new System.Drawing.Size(259, 20); - this.YmapStreamingExtentsMinTextBox.TabIndex = 19; - this.YmapStreamingExtentsMinTextBox.TextChanged += new System.EventHandler(this.YmapStreamingExtentsMinTextBox_TextChanged); - // - // label11 - // - this.label11.AutoSize = true; - this.label11.Location = new System.Drawing.Point(6, 329); - this.label11.Name = "label11"; - this.label11.Size = new System.Drawing.Size(115, 13); - this.label11.TabIndex = 18; - this.label11.Text = "Streaming Extents Min:"; - // - // YmapEntitiesExtentsMaxTextBox - // - this.YmapEntitiesExtentsMaxTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.YmapEntitiesExtentsMaxTextBox.Location = new System.Drawing.Point(127, 300); - this.YmapEntitiesExtentsMaxTextBox.Name = "YmapEntitiesExtentsMaxTextBox"; - this.YmapEntitiesExtentsMaxTextBox.Size = new System.Drawing.Size(259, 20); - this.YmapEntitiesExtentsMaxTextBox.TabIndex = 17; - this.YmapEntitiesExtentsMaxTextBox.TextChanged += new System.EventHandler(this.YmapEntitiesExtentsMaxTextBox_TextChanged); - // - // label9 - // - this.label9.AutoSize = true; - this.label9.Location = new System.Drawing.Point(6, 303); - this.label9.Name = "label9"; - this.label9.Size = new System.Drawing.Size(105, 13); - this.label9.TabIndex = 16; - this.label9.Text = "Entities Extents Max:"; - // - // YmapEntitiesExtentsMinTextBox - // - this.YmapEntitiesExtentsMinTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.YmapEntitiesExtentsMinTextBox.Location = new System.Drawing.Point(127, 274); - this.YmapEntitiesExtentsMinTextBox.Name = "YmapEntitiesExtentsMinTextBox"; - this.YmapEntitiesExtentsMinTextBox.Size = new System.Drawing.Size(259, 20); - this.YmapEntitiesExtentsMinTextBox.TabIndex = 15; - this.YmapEntitiesExtentsMinTextBox.TextChanged += new System.EventHandler(this.YmapEntitiesExtentsMinTextBox_TextChanged); - // - // label8 - // - this.label8.AutoSize = true; - this.label8.Location = new System.Drawing.Point(6, 277); - this.label8.Name = "label8"; - this.label8.Size = new System.Drawing.Size(102, 13); - this.label8.TabIndex = 14; - this.label8.Text = "Entities Extents Min:"; - // - // YmapParentHashLabel - // - this.YmapParentHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.YmapParentHashLabel.AutoSize = true; - this.YmapParentHashLabel.Location = new System.Drawing.Point(350, 38); - this.YmapParentHashLabel.Name = "YmapParentHashLabel"; - this.YmapParentHashLabel.Size = new System.Drawing.Size(44, 13); - this.YmapParentHashLabel.TabIndex = 9; - this.YmapParentHashLabel.Text = "Hash: 0"; - // - // YmapNameHashLabel - // - this.YmapNameHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.YmapNameHashLabel.AutoSize = true; - this.YmapNameHashLabel.Location = new System.Drawing.Point(350, 12); - this.YmapNameHashLabel.Name = "YmapNameHashLabel"; - this.YmapNameHashLabel.Size = new System.Drawing.Size(44, 13); - this.YmapNameHashLabel.TabIndex = 8; - this.YmapNameHashLabel.Text = "Hash: 0"; - // - // YmapParentTextBox - // - this.YmapParentTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.YmapParentTextBox.Location = new System.Drawing.Point(84, 35); - this.YmapParentTextBox.Name = "YmapParentTextBox"; - this.YmapParentTextBox.Size = new System.Drawing.Size(216, 20); - this.YmapParentTextBox.TabIndex = 6; - this.YmapParentTextBox.TextChanged += new System.EventHandler(this.YmapParentTextBox_TextChanged); - // - // label4 - // - this.label4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(299, 38); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(35, 13); - this.label4.TabIndex = 7; - this.label4.Text = ".ymap"; - // - // label5 - // - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(6, 38); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(41, 13); - this.label5.TabIndex = 5; - this.label5.Text = "Parent:"; - // - // YmapNameTextBox - // - this.YmapNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.YmapNameTextBox.Location = new System.Drawing.Point(84, 9); - this.YmapNameTextBox.Name = "YmapNameTextBox"; - this.YmapNameTextBox.Size = new System.Drawing.Size(216, 20); - this.YmapNameTextBox.TabIndex = 3; - this.YmapNameTextBox.TextChanged += new System.EventHandler(this.YmapNameTextBox_TextChanged); - // - // label3 - // - this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(299, 12); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(35, 13); - this.label3.TabIndex = 4; - this.label3.Text = ".ymap"; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(6, 12); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(38, 13); - this.label2.TabIndex = 2; - this.label2.Text = "Name:"; - // - // YmapEntityTabPage - // - this.YmapEntityTabPage.Controls.Add(this.EntityPanel); - this.YmapEntityTabPage.Location = new System.Drawing.Point(4, 22); - this.YmapEntityTabPage.Name = "YmapEntityTabPage"; - this.YmapEntityTabPage.Padding = new System.Windows.Forms.Padding(3); - this.YmapEntityTabPage.Size = new System.Drawing.Size(510, 443); - this.YmapEntityTabPage.TabIndex = 1; - this.YmapEntityTabPage.Text = "Entity"; - this.YmapEntityTabPage.UseVisualStyleBackColor = true; - // - // EntityPanel - // - this.EntityPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.EntityPanel.Controls.Add(this.EntityTabControl); - this.EntityPanel.Enabled = false; - this.EntityPanel.Location = new System.Drawing.Point(0, 0); - this.EntityPanel.Name = "EntityPanel"; - this.EntityPanel.Size = new System.Drawing.Size(510, 443); - this.EntityPanel.TabIndex = 24; - // - // EntityTabControl - // - this.EntityTabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.EntityTabControl.Controls.Add(this.EntityGeneralTabPage); - this.EntityTabControl.Controls.Add(this.EntityLodTabPage); - this.EntityTabControl.Controls.Add(this.EntityExtensionsTabPage); - this.EntityTabControl.Controls.Add(this.EntityPivotTabPage); - this.EntityTabControl.Location = new System.Drawing.Point(0, 3); - this.EntityTabControl.Name = "EntityTabControl"; - this.EntityTabControl.SelectedIndex = 0; - this.EntityTabControl.Size = new System.Drawing.Size(507, 440); - this.EntityTabControl.TabIndex = 44; - // - // EntityGeneralTabPage - // - this.EntityGeneralTabPage.Controls.Add(this.EntityFlagsCheckedListBox); - this.EntityGeneralTabPage.Controls.Add(this.label13); - this.EntityGeneralTabPage.Controls.Add(this.label28); - this.EntityGeneralTabPage.Controls.Add(this.EntityDeleteButton); - this.EntityGeneralTabPage.Controls.Add(this.EntityTintValueTextBox); - this.EntityGeneralTabPage.Controls.Add(this.EntityAddToProjectButton); - this.EntityGeneralTabPage.Controls.Add(this.label27); - this.EntityGeneralTabPage.Controls.Add(this.EntityArtificialAOTextBox); - this.EntityGeneralTabPage.Controls.Add(this.label26); - this.EntityGeneralTabPage.Controls.Add(this.EntityAOMultiplierTextBox); - this.EntityGeneralTabPage.Controls.Add(this.EntityGuidTextBox); - this.EntityGeneralTabPage.Controls.Add(this.EntityPriorityLevelComboBox); - this.EntityGeneralTabPage.Controls.Add(this.label24); - this.EntityGeneralTabPage.Controls.Add(this.label15); - this.EntityGeneralTabPage.Controls.Add(this.EntityFlagsTextBox); - this.EntityGeneralTabPage.Controls.Add(this.label18); - this.EntityGeneralTabPage.Controls.Add(this.EntityLodLevelComboBox); - this.EntityGeneralTabPage.Controls.Add(this.label14); - this.EntityGeneralTabPage.Controls.Add(this.label23); - this.EntityGeneralTabPage.Controls.Add(this.EntityScaleXYTextBox); - this.EntityGeneralTabPage.Controls.Add(this.label22); - this.EntityGeneralTabPage.Controls.Add(this.EntityArchetypeHashLabel); - this.EntityGeneralTabPage.Controls.Add(this.EntityChildLodDistTextBox); - this.EntityGeneralTabPage.Controls.Add(this.label19); - this.EntityGeneralTabPage.Controls.Add(this.label21); - this.EntityGeneralTabPage.Controls.Add(this.EntityScaleZTextBox); - this.EntityGeneralTabPage.Controls.Add(this.EntityLodDistTextBox); - this.EntityGeneralTabPage.Controls.Add(this.EntityArchetypeTextBox); - this.EntityGeneralTabPage.Controls.Add(this.label16); - this.EntityGeneralTabPage.Controls.Add(this.EntityPositionTextBox); - this.EntityGeneralTabPage.Controls.Add(this.EntityNormalizeRotationButton); - this.EntityGeneralTabPage.Controls.Add(this.EntityGoToButton); - this.EntityGeneralTabPage.Controls.Add(this.label17); - this.EntityGeneralTabPage.Controls.Add(this.EntityRotationTextBox); - this.EntityGeneralTabPage.Location = new System.Drawing.Point(4, 22); - this.EntityGeneralTabPage.Name = "EntityGeneralTabPage"; - this.EntityGeneralTabPage.Padding = new System.Windows.Forms.Padding(3); - this.EntityGeneralTabPage.Size = new System.Drawing.Size(499, 414); - this.EntityGeneralTabPage.TabIndex = 0; - this.EntityGeneralTabPage.Text = "General"; - this.EntityGeneralTabPage.UseVisualStyleBackColor = true; - // - // EntityFlagsCheckedListBox - // - this.EntityFlagsCheckedListBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Right))); - this.EntityFlagsCheckedListBox.CheckOnClick = true; - this.EntityFlagsCheckedListBox.FormattingEnabled = true; - this.EntityFlagsCheckedListBox.Items.AddRange(new object[] { - "1 - Unk01", - "2 - Unk02", - "4 - Unk03", - "8 - Unk04", - "16 - Unk05", - "32 - Unk06", - "64 - Unk07", - "128 - Unk08", - "256 - Unk09", - "512 - Unk10", - "1024 - Unk11", - "2048 - Unk12", - "4096 - Unk13", - "8192 - Unk14", - "16384 - Unk15", - "32768 - Unk16", - "65536 - Unk17", - "131072 - Unk18", - "262144 - Unk19", - "524288 - Unk20", - "1048576 - Unk21", - "2097152 - Unk22", - "4194304 - Unk23", - "8388608 - Unk24", - "16777216 - Unk25", - "33554432 - Unk26", - "67108864 - Unk27", - "134217728 - Unk28", - "268435456 - Unk29", - "536870912 - Unk30", - "1073741824 - Unk31", - "2147483648 - Unk32"}); - this.EntityFlagsCheckedListBox.Location = new System.Drawing.Point(292, 113); - this.EntityFlagsCheckedListBox.Name = "EntityFlagsCheckedListBox"; - this.EntityFlagsCheckedListBox.Size = new System.Drawing.Size(201, 289); - this.EntityFlagsCheckedListBox.TabIndex = 32; - this.EntityFlagsCheckedListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.EntityFlagsCheckedListBox_ItemCheck); - // - // label13 - // - this.label13.AutoSize = true; - this.label13.Location = new System.Drawing.Point(15, 64); - this.label13.Name = "label13"; - this.label13.Size = new System.Drawing.Size(58, 13); - this.label13.TabIndex = 7; - this.label13.Text = "Archetype:"; - // - // label28 - // - this.label28.AutoSize = true; - this.label28.Location = new System.Drawing.Point(15, 326); - this.label28.Name = "label28"; - this.label28.Size = new System.Drawing.Size(55, 13); - this.label28.TabIndex = 28; - this.label28.Text = "TintValue:"; - // - // EntityDeleteButton - // - this.EntityDeleteButton.Location = new System.Drawing.Point(175, 376); - this.EntityDeleteButton.Name = "EntityDeleteButton"; - this.EntityDeleteButton.Size = new System.Drawing.Size(95, 23); - this.EntityDeleteButton.TabIndex = 34; - this.EntityDeleteButton.Text = "Delete Entity"; - this.EntityDeleteButton.UseVisualStyleBackColor = true; - this.EntityDeleteButton.Click += new System.EventHandler(this.EntityDeleteButton_Click); - // - // EntityTintValueTextBox - // - this.EntityTintValueTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.EntityTintValueTextBox.Location = new System.Drawing.Point(93, 323); - this.EntityTintValueTextBox.Name = "EntityTintValueTextBox"; - this.EntityTintValueTextBox.Size = new System.Drawing.Size(177, 20); - this.EntityTintValueTextBox.TabIndex = 29; - this.EntityTintValueTextBox.TextChanged += new System.EventHandler(this.EntityTintValueTextBox_TextChanged); - // - // EntityAddToProjectButton - // - this.EntityAddToProjectButton.Location = new System.Drawing.Point(74, 376); - this.EntityAddToProjectButton.Name = "EntityAddToProjectButton"; - this.EntityAddToProjectButton.Size = new System.Drawing.Size(95, 23); - this.EntityAddToProjectButton.TabIndex = 33; - this.EntityAddToProjectButton.Text = "Add to Project"; - this.EntityAddToProjectButton.UseVisualStyleBackColor = true; - this.EntityAddToProjectButton.Click += new System.EventHandler(this.EntityAddToProjectButton_Click); - // - // label27 - // - this.label27.AutoSize = true; - this.label27.Location = new System.Drawing.Point(15, 300); - this.label27.Name = "label27"; - this.label27.Size = new System.Drawing.Size(61, 13); - this.label27.TabIndex = 26; - this.label27.Text = "ArtificialAO:"; - // - // EntityArtificialAOTextBox - // - this.EntityArtificialAOTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.EntityArtificialAOTextBox.Location = new System.Drawing.Point(93, 297); - this.EntityArtificialAOTextBox.Name = "EntityArtificialAOTextBox"; - this.EntityArtificialAOTextBox.Size = new System.Drawing.Size(177, 20); - this.EntityArtificialAOTextBox.TabIndex = 27; - this.EntityArtificialAOTextBox.TextChanged += new System.EventHandler(this.EntityArtificialAOTextBox_TextChanged); - // - // label26 - // - this.label26.AutoSize = true; - this.label26.Location = new System.Drawing.Point(15, 274); - this.label26.Name = "label26"; - this.label26.Size = new System.Drawing.Size(66, 13); - this.label26.TabIndex = 24; - this.label26.Text = "AOMultiplier:"; - // - // EntityAOMultiplierTextBox - // - this.EntityAOMultiplierTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.EntityAOMultiplierTextBox.Location = new System.Drawing.Point(93, 271); - this.EntityAOMultiplierTextBox.Name = "EntityAOMultiplierTextBox"; - this.EntityAOMultiplierTextBox.Size = new System.Drawing.Size(177, 20); - this.EntityAOMultiplierTextBox.TabIndex = 25; - this.EntityAOMultiplierTextBox.TextChanged += new System.EventHandler(this.EntityAOMultiplierTextBox_TextChanged); - // - // EntityGuidTextBox - // - this.EntityGuidTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.EntityGuidTextBox.Location = new System.Drawing.Point(93, 87); - this.EntityGuidTextBox.Name = "EntityGuidTextBox"; - this.EntityGuidTextBox.Size = new System.Drawing.Size(177, 20); - this.EntityGuidTextBox.TabIndex = 11; - this.EntityGuidTextBox.TextChanged += new System.EventHandler(this.EntityGuidTextBox_TextChanged); - // - // EntityPriorityLevelComboBox - // - this.EntityPriorityLevelComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.EntityPriorityLevelComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.EntityPriorityLevelComboBox.FormattingEnabled = true; - this.EntityPriorityLevelComboBox.Location = new System.Drawing.Point(93, 244); - this.EntityPriorityLevelComboBox.Name = "EntityPriorityLevelComboBox"; - this.EntityPriorityLevelComboBox.Size = new System.Drawing.Size(177, 21); - this.EntityPriorityLevelComboBox.TabIndex = 23; - this.EntityPriorityLevelComboBox.SelectedIndexChanged += new System.EventHandler(this.EntityPriorityLevelComboBox_SelectedIndexChanged); - // - // label24 - // - this.label24.AutoSize = true; - this.label24.Location = new System.Drawing.Point(15, 247); - this.label24.Name = "label24"; - this.label24.Size = new System.Drawing.Size(67, 13); - this.label24.TabIndex = 22; - this.label24.Text = "PriorityLevel:"; - // - // label15 - // - this.label15.AutoSize = true; - this.label15.Location = new System.Drawing.Point(15, 90); - this.label15.Name = "label15"; - this.label15.Size = new System.Drawing.Size(37, 13); - this.label15.TabIndex = 10; - this.label15.Text = "GUID:"; - // - // EntityFlagsTextBox - // - this.EntityFlagsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.EntityFlagsTextBox.Location = new System.Drawing.Point(346, 87); - this.EntityFlagsTextBox.Name = "EntityFlagsTextBox"; - this.EntityFlagsTextBox.Size = new System.Drawing.Size(147, 20); - this.EntityFlagsTextBox.TabIndex = 31; - this.EntityFlagsTextBox.TextChanged += new System.EventHandler(this.EntityFlagsTextBox_TextChanged); - // - // label18 - // - this.label18.AutoSize = true; - this.label18.Location = new System.Drawing.Point(15, 116); - this.label18.Name = "label18"; - this.label18.Size = new System.Drawing.Size(51, 13); - this.label18.TabIndex = 12; - this.label18.Text = "ScaleXY:"; - // - // EntityLodLevelComboBox - // - this.EntityLodLevelComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.EntityLodLevelComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.EntityLodLevelComboBox.FormattingEnabled = true; - this.EntityLodLevelComboBox.Location = new System.Drawing.Point(93, 217); - this.EntityLodLevelComboBox.Name = "EntityLodLevelComboBox"; - this.EntityLodLevelComboBox.Size = new System.Drawing.Size(177, 21); - this.EntityLodLevelComboBox.TabIndex = 21; - this.EntityLodLevelComboBox.SelectedIndexChanged += new System.EventHandler(this.EntityLodLevelComboBox_SelectedIndexChanged); - // - // label14 - // - this.label14.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.label14.AutoSize = true; - this.label14.Location = new System.Drawing.Point(305, 90); - this.label14.Name = "label14"; - this.label14.Size = new System.Drawing.Size(35, 13); - this.label14.TabIndex = 30; - this.label14.Text = "Flags:"; - // - // label23 - // - this.label23.AutoSize = true; - this.label23.Location = new System.Drawing.Point(15, 220); - this.label23.Name = "label23"; - this.label23.Size = new System.Drawing.Size(54, 13); - this.label23.TabIndex = 20; - this.label23.Text = "LodLevel:"; - // - // EntityScaleXYTextBox - // - this.EntityScaleXYTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.EntityScaleXYTextBox.Location = new System.Drawing.Point(93, 113); - this.EntityScaleXYTextBox.Name = "EntityScaleXYTextBox"; - this.EntityScaleXYTextBox.Size = new System.Drawing.Size(177, 20); - this.EntityScaleXYTextBox.TabIndex = 13; - this.EntityScaleXYTextBox.TextChanged += new System.EventHandler(this.EntityScaleXYTextBox_TextChanged); - // - // label22 - // - this.label22.AutoSize = true; - this.label22.Location = new System.Drawing.Point(15, 194); - this.label22.Name = "label22"; - this.label22.Size = new System.Drawing.Size(69, 13); - this.label22.TabIndex = 18; - this.label22.Text = "ChildLodDist:"; - // - // EntityArchetypeHashLabel - // - this.EntityArchetypeHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.EntityArchetypeHashLabel.AutoSize = true; - this.EntityArchetypeHashLabel.Location = new System.Drawing.Point(276, 64); - this.EntityArchetypeHashLabel.Name = "EntityArchetypeHashLabel"; - this.EntityArchetypeHashLabel.Size = new System.Drawing.Size(44, 13); - this.EntityArchetypeHashLabel.TabIndex = 9; - this.EntityArchetypeHashLabel.Text = "Hash: 0"; - // - // EntityChildLodDistTextBox - // - this.EntityChildLodDistTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.EntityChildLodDistTextBox.Location = new System.Drawing.Point(93, 191); - this.EntityChildLodDistTextBox.Name = "EntityChildLodDistTextBox"; - this.EntityChildLodDistTextBox.Size = new System.Drawing.Size(177, 20); - this.EntityChildLodDistTextBox.TabIndex = 19; - this.EntityChildLodDistTextBox.TextChanged += new System.EventHandler(this.EntityChildLodDistTextBox_TextChanged); - // - // label19 - // - this.label19.AutoSize = true; - this.label19.Location = new System.Drawing.Point(15, 142); - this.label19.Name = "label19"; - this.label19.Size = new System.Drawing.Size(44, 13); - this.label19.TabIndex = 14; - this.label19.Text = "ScaleZ:"; - // - // label21 - // - this.label21.AutoSize = true; - this.label21.Location = new System.Drawing.Point(15, 168); - this.label21.Name = "label21"; - this.label21.Size = new System.Drawing.Size(46, 13); - this.label21.TabIndex = 16; - this.label21.Text = "LodDist:"; - // - // EntityScaleZTextBox - // - this.EntityScaleZTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.EntityScaleZTextBox.Location = new System.Drawing.Point(93, 139); - this.EntityScaleZTextBox.Name = "EntityScaleZTextBox"; - this.EntityScaleZTextBox.Size = new System.Drawing.Size(177, 20); - this.EntityScaleZTextBox.TabIndex = 15; - this.EntityScaleZTextBox.TextChanged += new System.EventHandler(this.EntityScaleZTextBox_TextChanged); - // - // EntityLodDistTextBox - // - this.EntityLodDistTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.EntityLodDistTextBox.Location = new System.Drawing.Point(93, 165); - this.EntityLodDistTextBox.Name = "EntityLodDistTextBox"; - this.EntityLodDistTextBox.Size = new System.Drawing.Size(177, 20); - this.EntityLodDistTextBox.TabIndex = 17; - this.EntityLodDistTextBox.TextChanged += new System.EventHandler(this.EntityLodDistTextBox_TextChanged); - // - // EntityArchetypeTextBox - // - this.EntityArchetypeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.EntityArchetypeTextBox.Location = new System.Drawing.Point(93, 61); - this.EntityArchetypeTextBox.Name = "EntityArchetypeTextBox"; - this.EntityArchetypeTextBox.Size = new System.Drawing.Size(177, 20); - this.EntityArchetypeTextBox.TabIndex = 8; - this.EntityArchetypeTextBox.TextChanged += new System.EventHandler(this.EntityArchetypeTextBox_TextChanged); - // - // label16 - // - this.label16.AutoSize = true; - this.label16.Location = new System.Drawing.Point(15, 12); - this.label16.Name = "label16"; - this.label16.Size = new System.Drawing.Size(47, 13); - this.label16.TabIndex = 1; - this.label16.Text = "Position:"; - // - // EntityPositionTextBox - // - this.EntityPositionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.EntityPositionTextBox.Location = new System.Drawing.Point(93, 9); - this.EntityPositionTextBox.Name = "EntityPositionTextBox"; - this.EntityPositionTextBox.Size = new System.Drawing.Size(326, 20); - this.EntityPositionTextBox.TabIndex = 2; - this.EntityPositionTextBox.TextChanged += new System.EventHandler(this.EntityPositionTextBox_TextChanged); - // - // EntityNormalizeRotationButton - // - this.EntityNormalizeRotationButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.EntityNormalizeRotationButton.Location = new System.Drawing.Point(425, 33); - this.EntityNormalizeRotationButton.Name = "EntityNormalizeRotationButton"; - this.EntityNormalizeRotationButton.Size = new System.Drawing.Size(68, 23); - this.EntityNormalizeRotationButton.TabIndex = 6; - this.EntityNormalizeRotationButton.Text = "Normalize"; - this.EntityNormalizeRotationButton.UseVisualStyleBackColor = true; - this.EntityNormalizeRotationButton.Click += new System.EventHandler(this.EntityNormalizeRotationButton_Click); - // - // EntityGoToButton - // - this.EntityGoToButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.EntityGoToButton.Location = new System.Drawing.Point(425, 7); - this.EntityGoToButton.Name = "EntityGoToButton"; - this.EntityGoToButton.Size = new System.Drawing.Size(68, 23); - this.EntityGoToButton.TabIndex = 3; - this.EntityGoToButton.Text = "Go to"; - this.EntityGoToButton.UseVisualStyleBackColor = true; - this.EntityGoToButton.Click += new System.EventHandler(this.EntityGoToButton_Click); - // - // label17 - // - this.label17.AutoSize = true; - this.label17.Location = new System.Drawing.Point(15, 38); - this.label17.Name = "label17"; - this.label17.Size = new System.Drawing.Size(50, 13); - this.label17.TabIndex = 4; - this.label17.Text = "Rotation:"; - // - // EntityRotationTextBox - // - this.EntityRotationTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.EntityRotationTextBox.Location = new System.Drawing.Point(93, 35); - this.EntityRotationTextBox.Name = "EntityRotationTextBox"; - this.EntityRotationTextBox.Size = new System.Drawing.Size(326, 20); - this.EntityRotationTextBox.TabIndex = 5; - this.EntityRotationTextBox.TextChanged += new System.EventHandler(this.EntityRotationTextBox_TextChanged); - // - // EntityLodTabPage - // - this.EntityLodTabPage.Controls.Add(this.label20); - this.EntityLodTabPage.Controls.Add(this.EntityParentIndexTextBox); - this.EntityLodTabPage.Controls.Add(this.EntityNumChildrenTextBox); - this.EntityLodTabPage.Controls.Add(this.label25); - this.EntityLodTabPage.Location = new System.Drawing.Point(4, 22); - this.EntityLodTabPage.Name = "EntityLodTabPage"; - this.EntityLodTabPage.Padding = new System.Windows.Forms.Padding(3); - this.EntityLodTabPage.Size = new System.Drawing.Size(499, 414); - this.EntityLodTabPage.TabIndex = 1; - this.EntityLodTabPage.Text = "LOD Hierarchy"; - this.EntityLodTabPage.UseVisualStyleBackColor = true; - // - // label20 - // - this.label20.AutoSize = true; - this.label20.Location = new System.Drawing.Point(15, 16); - this.label20.Name = "label20"; - this.label20.Size = new System.Drawing.Size(67, 13); - this.label20.TabIndex = 24; - this.label20.Text = "ParentIndex:"; - // - // EntityParentIndexTextBox - // - this.EntityParentIndexTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.EntityParentIndexTextBox.Location = new System.Drawing.Point(93, 13); - this.EntityParentIndexTextBox.Name = "EntityParentIndexTextBox"; - this.EntityParentIndexTextBox.Size = new System.Drawing.Size(189, 20); - this.EntityParentIndexTextBox.TabIndex = 25; - this.EntityParentIndexTextBox.TextChanged += new System.EventHandler(this.EntityParentIndexTextBox_TextChanged); - // - // EntityNumChildrenTextBox - // - this.EntityNumChildrenTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.EntityNumChildrenTextBox.Location = new System.Drawing.Point(93, 39); - this.EntityNumChildrenTextBox.Name = "EntityNumChildrenTextBox"; - this.EntityNumChildrenTextBox.Size = new System.Drawing.Size(189, 20); - this.EntityNumChildrenTextBox.TabIndex = 35; - this.EntityNumChildrenTextBox.TextChanged += new System.EventHandler(this.EntityNumChildrenTextBox_TextChanged); - // - // label25 - // - this.label25.AutoSize = true; - this.label25.Location = new System.Drawing.Point(15, 42); - this.label25.Name = "label25"; - this.label25.Size = new System.Drawing.Size(70, 13); - this.label25.TabIndex = 34; - this.label25.Text = "NumChildren:"; - // - // EntityExtensionsTabPage - // - this.EntityExtensionsTabPage.Location = new System.Drawing.Point(4, 22); - this.EntityExtensionsTabPage.Name = "EntityExtensionsTabPage"; - this.EntityExtensionsTabPage.Size = new System.Drawing.Size(499, 414); - this.EntityExtensionsTabPage.TabIndex = 2; - this.EntityExtensionsTabPage.Text = "Extensions"; - this.EntityExtensionsTabPage.UseVisualStyleBackColor = true; - // - // EntityPivotTabPage - // - this.EntityPivotTabPage.Controls.Add(this.label95); - this.EntityPivotTabPage.Controls.Add(this.EntityPivotEditCheckBox); - this.EntityPivotTabPage.Controls.Add(this.label93); - this.EntityPivotTabPage.Controls.Add(this.EntityPivotPositionTextBox); - this.EntityPivotTabPage.Controls.Add(this.EntityPivotRotationNormalizeButton); - this.EntityPivotTabPage.Controls.Add(this.label94); - this.EntityPivotTabPage.Controls.Add(this.EntityPivotRotationTextBox); - this.EntityPivotTabPage.Location = new System.Drawing.Point(4, 22); - this.EntityPivotTabPage.Name = "EntityPivotTabPage"; - this.EntityPivotTabPage.Size = new System.Drawing.Size(499, 414); - this.EntityPivotTabPage.TabIndex = 3; - this.EntityPivotTabPage.Text = "Pivot"; - this.EntityPivotTabPage.UseVisualStyleBackColor = true; - // - // label95 - // - this.label95.Location = new System.Drawing.Point(90, 152); - this.label95.Name = "label95"; - this.label95.Size = new System.Drawing.Size(329, 51); - this.label95.TabIndex = 27; - this.label95.Text = "Note: Custom pivot is not saved. It will be reset if you close the project or res" + - "tart CodeWalker."; - // - // EntityPivotEditCheckBox - // - this.EntityPivotEditCheckBox.AutoSize = true; - this.EntityPivotEditCheckBox.Location = new System.Drawing.Point(93, 32); - this.EntityPivotEditCheckBox.Name = "EntityPivotEditCheckBox"; - this.EntityPivotEditCheckBox.Size = new System.Drawing.Size(137, 17); - this.EntityPivotEditCheckBox.TabIndex = 20; - this.EntityPivotEditCheckBox.Text = "Edit pivot in World view"; - this.EntityPivotEditCheckBox.UseVisualStyleBackColor = true; - this.EntityPivotEditCheckBox.CheckedChanged += new System.EventHandler(this.EntityPivotEditCheckBox_CheckedChanged); - // - // label93 - // - this.label93.AutoSize = true; - this.label93.Location = new System.Drawing.Point(15, 73); - this.label93.Name = "label93"; - this.label93.Size = new System.Drawing.Size(47, 13); - this.label93.TabIndex = 21; - this.label93.Text = "Position:"; - // - // EntityPivotPositionTextBox - // - this.EntityPivotPositionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.EntityPivotPositionTextBox.Location = new System.Drawing.Point(93, 70); - this.EntityPivotPositionTextBox.Name = "EntityPivotPositionTextBox"; - this.EntityPivotPositionTextBox.Size = new System.Drawing.Size(326, 20); - this.EntityPivotPositionTextBox.TabIndex = 22; - this.EntityPivotPositionTextBox.TextChanged += new System.EventHandler(this.EntityPivotPositionTextBox_TextChanged); - // - // EntityPivotRotationNormalizeButton - // - this.EntityPivotRotationNormalizeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.EntityPivotRotationNormalizeButton.Location = new System.Drawing.Point(425, 94); - this.EntityPivotRotationNormalizeButton.Name = "EntityPivotRotationNormalizeButton"; - this.EntityPivotRotationNormalizeButton.Size = new System.Drawing.Size(68, 23); - this.EntityPivotRotationNormalizeButton.TabIndex = 26; - this.EntityPivotRotationNormalizeButton.Text = "Normalize"; - this.EntityPivotRotationNormalizeButton.UseVisualStyleBackColor = true; - this.EntityPivotRotationNormalizeButton.Click += new System.EventHandler(this.EntityPivotRotationNormalizeButton_Click); - // - // label94 - // - this.label94.AutoSize = true; - this.label94.Location = new System.Drawing.Point(15, 99); - this.label94.Name = "label94"; - this.label94.Size = new System.Drawing.Size(50, 13); - this.label94.TabIndex = 24; - this.label94.Text = "Rotation:"; - // - // EntityPivotRotationTextBox - // - this.EntityPivotRotationTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.EntityPivotRotationTextBox.Location = new System.Drawing.Point(93, 96); - this.EntityPivotRotationTextBox.Name = "EntityPivotRotationTextBox"; - this.EntityPivotRotationTextBox.Size = new System.Drawing.Size(326, 20); - this.EntityPivotRotationTextBox.TabIndex = 25; - this.EntityPivotRotationTextBox.TextChanged += new System.EventHandler(this.EntityPivotRotationTextBox_TextChanged); - // - // YmapCarGenTabPage - // - this.YmapCarGenTabPage.Controls.Add(this.CarGenPanel); - this.YmapCarGenTabPage.Location = new System.Drawing.Point(4, 22); - this.YmapCarGenTabPage.Name = "YmapCarGenTabPage"; - this.YmapCarGenTabPage.Size = new System.Drawing.Size(510, 443); - this.YmapCarGenTabPage.TabIndex = 2; - this.YmapCarGenTabPage.Text = "Car Gen"; - this.YmapCarGenTabPage.UseVisualStyleBackColor = true; - // - // CarGenPanel - // - this.CarGenPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.CarGenPanel.Controls.Add(this.CarFlagsCheckedListBox); - this.CarGenPanel.Controls.Add(this.CarDeleteButton); - this.CarGenPanel.Controls.Add(this.CarAddToProjectButton); - this.CarGenPanel.Controls.Add(this.label44); - this.CarGenPanel.Controls.Add(this.CarLiveryTextBox); - this.CarGenPanel.Controls.Add(this.label43); - this.CarGenPanel.Controls.Add(this.CarBodyColorRemap4TextBox); - this.CarGenPanel.Controls.Add(this.label42); - this.CarGenPanel.Controls.Add(this.CarBodyColorRemap3TextBox); - this.CarGenPanel.Controls.Add(this.label41); - this.CarGenPanel.Controls.Add(this.CarBodyColorRemap2TextBox); - this.CarGenPanel.Controls.Add(this.CarPopGroupTextBox); - this.CarGenPanel.Controls.Add(this.label39); - this.CarGenPanel.Controls.Add(this.CarPopGroupHashLabel); - this.CarGenPanel.Controls.Add(this.label38); - this.CarGenPanel.Controls.Add(this.CarBodyColorRemap1TextBox); - this.CarGenPanel.Controls.Add(this.label37); - this.CarGenPanel.Controls.Add(this.CarFlagsTextBox); - this.CarGenPanel.Controls.Add(this.CarPerpendicularLengthTextBox); - this.CarGenPanel.Controls.Add(this.label36); - this.CarGenPanel.Controls.Add(this.CarOrientYTextBox); - this.CarGenPanel.Controls.Add(this.label34); - this.CarGenPanel.Controls.Add(this.CarOrientXTextBox); - this.CarGenPanel.Controls.Add(this.label35); - this.CarGenPanel.Controls.Add(this.CarModelTextBox); - this.CarGenPanel.Controls.Add(this.label32); - this.CarGenPanel.Controls.Add(this.CarModelHashLabel); - this.CarGenPanel.Controls.Add(this.CarGoToButton); - this.CarGenPanel.Controls.Add(this.CarPositionTextBox); - this.CarGenPanel.Controls.Add(this.label31); - this.CarGenPanel.Enabled = false; - this.CarGenPanel.Location = new System.Drawing.Point(0, 0); - this.CarGenPanel.Name = "CarGenPanel"; - this.CarGenPanel.Size = new System.Drawing.Size(510, 443); - this.CarGenPanel.TabIndex = 0; - // - // CarFlagsCheckedListBox - // - this.CarFlagsCheckedListBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Right))); - this.CarFlagsCheckedListBox.CheckOnClick = true; - this.CarFlagsCheckedListBox.FormattingEnabled = true; - this.CarFlagsCheckedListBox.Items.AddRange(new object[] { - "1 - Unk01", - "2 - Unk02", - "4 - Unk03", - "8 - Unk04", - "16 - Unk05", - "32 - Unk06", - "64 - Unk07", - "128 - Unk08", - "256 - Unk09", - "512 - Unk10", - "1024 - Unk11", - "2048 - Unk12", - "4096 - Unk13", - "8192 - Unk14", - "16384 - Unk15", - "32768 - Unk16", - "65536 - Unk17", - "131072 - Unk18", - "262144 - Unk19", - "524288 - Unk20", - "1048576 - Unk21", - "2097152 - Unk22", - "4194304 - Unk23", - "8388608 - Unk24", - "16777216 - Unk25", - "33554432 - Unk26", - "67108864 - Unk27", - "134217728 - Unk28", - "268435456 - Unk29", - "536870912 - Unk30", - "1073741824 - Unk31", - "2147483648 - Unk32"}); - this.CarFlagsCheckedListBox.Location = new System.Drawing.Point(304, 113); - this.CarFlagsCheckedListBox.Name = "CarFlagsCheckedListBox"; - this.CarFlagsCheckedListBox.Size = new System.Drawing.Size(201, 319); - this.CarFlagsCheckedListBox.TabIndex = 73; - this.CarFlagsCheckedListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.CarFlagsCheckedListBox_ItemCheck); - // - // CarDeleteButton - // - this.CarDeleteButton.Location = new System.Drawing.Point(168, 392); - this.CarDeleteButton.Name = "CarDeleteButton"; - this.CarDeleteButton.Size = new System.Drawing.Size(95, 23); - this.CarDeleteButton.TabIndex = 75; - this.CarDeleteButton.Text = "Delete CarGen"; - this.CarDeleteButton.UseVisualStyleBackColor = true; - this.CarDeleteButton.Click += new System.EventHandler(this.CarDeleteButton_Click); - // - // CarAddToProjectButton - // - this.CarAddToProjectButton.Location = new System.Drawing.Point(67, 392); - this.CarAddToProjectButton.Name = "CarAddToProjectButton"; - this.CarAddToProjectButton.Size = new System.Drawing.Size(95, 23); - this.CarAddToProjectButton.TabIndex = 74; - this.CarAddToProjectButton.Text = "Add to Project"; - this.CarAddToProjectButton.UseVisualStyleBackColor = true; - this.CarAddToProjectButton.Click += new System.EventHandler(this.CarAddToProjectButton_Click); - // - // label44 - // - this.label44.AutoSize = true; - this.label44.Location = new System.Drawing.Point(6, 272); - this.label44.Name = "label44"; - this.label44.Size = new System.Drawing.Size(38, 13); - this.label44.TabIndex = 69; - this.label44.Text = "Livery:"; - // - // CarLiveryTextBox - // - this.CarLiveryTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.CarLiveryTextBox.Location = new System.Drawing.Point(120, 269); - this.CarLiveryTextBox.Name = "CarLiveryTextBox"; - this.CarLiveryTextBox.Size = new System.Drawing.Size(155, 20); - this.CarLiveryTextBox.TabIndex = 70; - this.CarLiveryTextBox.TextChanged += new System.EventHandler(this.CarLiveryTextBox_TextChanged); - // - // label43 - // - this.label43.AutoSize = true; - this.label43.Location = new System.Drawing.Point(6, 246); - this.label43.Name = "label43"; - this.label43.Size = new System.Drawing.Size(98, 13); - this.label43.TabIndex = 67; - this.label43.Text = "BodyColorRemap4:"; - // - // CarBodyColorRemap4TextBox - // - this.CarBodyColorRemap4TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.CarBodyColorRemap4TextBox.Location = new System.Drawing.Point(120, 243); - this.CarBodyColorRemap4TextBox.Name = "CarBodyColorRemap4TextBox"; - this.CarBodyColorRemap4TextBox.Size = new System.Drawing.Size(155, 20); - this.CarBodyColorRemap4TextBox.TabIndex = 68; - this.CarBodyColorRemap4TextBox.TextChanged += new System.EventHandler(this.CarBodyColorRemap4TextBox_TextChanged); - // - // label42 - // - this.label42.AutoSize = true; - this.label42.Location = new System.Drawing.Point(6, 220); - this.label42.Name = "label42"; - this.label42.Size = new System.Drawing.Size(98, 13); - this.label42.TabIndex = 65; - this.label42.Text = "BodyColorRemap3:"; - // - // CarBodyColorRemap3TextBox - // - this.CarBodyColorRemap3TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.CarBodyColorRemap3TextBox.Location = new System.Drawing.Point(120, 217); - this.CarBodyColorRemap3TextBox.Name = "CarBodyColorRemap3TextBox"; - this.CarBodyColorRemap3TextBox.Size = new System.Drawing.Size(155, 20); - this.CarBodyColorRemap3TextBox.TabIndex = 66; - this.CarBodyColorRemap3TextBox.TextChanged += new System.EventHandler(this.CarBodyColorRemap3TextBox_TextChanged); - // - // label41 - // - this.label41.AutoSize = true; - this.label41.Location = new System.Drawing.Point(6, 194); - this.label41.Name = "label41"; - this.label41.Size = new System.Drawing.Size(98, 13); - this.label41.TabIndex = 63; - this.label41.Text = "BodyColorRemap2:"; - // - // CarBodyColorRemap2TextBox - // - this.CarBodyColorRemap2TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.CarBodyColorRemap2TextBox.Location = new System.Drawing.Point(120, 191); - this.CarBodyColorRemap2TextBox.Name = "CarBodyColorRemap2TextBox"; - this.CarBodyColorRemap2TextBox.Size = new System.Drawing.Size(155, 20); - this.CarBodyColorRemap2TextBox.TabIndex = 64; - this.CarBodyColorRemap2TextBox.TextChanged += new System.EventHandler(this.CarBodyColorRemap2TextBox_TextChanged); - // - // CarPopGroupTextBox - // - this.CarPopGroupTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.CarPopGroupTextBox.Location = new System.Drawing.Point(84, 61); - this.CarPopGroupTextBox.Name = "CarPopGroupTextBox"; - this.CarPopGroupTextBox.Size = new System.Drawing.Size(267, 20); - this.CarPopGroupTextBox.TabIndex = 50; - this.CarPopGroupTextBox.TextChanged += new System.EventHandler(this.CarPopGroupTextBox_TextChanged); - // - // label39 - // - this.label39.AutoSize = true; - this.label39.Location = new System.Drawing.Point(6, 64); - this.label39.Name = "label39"; - this.label39.Size = new System.Drawing.Size(58, 13); - this.label39.TabIndex = 49; - this.label39.Text = "PopGroup:"; - // - // CarPopGroupHashLabel - // - this.CarPopGroupHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.CarPopGroupHashLabel.AutoSize = true; - this.CarPopGroupHashLabel.Location = new System.Drawing.Point(357, 64); - this.CarPopGroupHashLabel.Name = "CarPopGroupHashLabel"; - this.CarPopGroupHashLabel.Size = new System.Drawing.Size(44, 13); - this.CarPopGroupHashLabel.TabIndex = 51; - this.CarPopGroupHashLabel.Text = "Hash: 0"; - // - // label38 - // - this.label38.AutoSize = true; - this.label38.Location = new System.Drawing.Point(6, 168); - this.label38.Name = "label38"; - this.label38.Size = new System.Drawing.Size(98, 13); - this.label38.TabIndex = 61; - this.label38.Text = "BodyColorRemap1:"; - // - // CarBodyColorRemap1TextBox - // - this.CarBodyColorRemap1TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.CarBodyColorRemap1TextBox.Location = new System.Drawing.Point(120, 165); - this.CarBodyColorRemap1TextBox.Name = "CarBodyColorRemap1TextBox"; - this.CarBodyColorRemap1TextBox.Size = new System.Drawing.Size(155, 20); - this.CarBodyColorRemap1TextBox.TabIndex = 62; - this.CarBodyColorRemap1TextBox.TextChanged += new System.EventHandler(this.CarBodyColorRemap1TextBox_TextChanged); - // - // label37 - // - this.label37.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.label37.AutoSize = true; - this.label37.Location = new System.Drawing.Point(321, 90); - this.label37.Name = "label37"; - this.label37.Size = new System.Drawing.Size(35, 13); - this.label37.TabIndex = 71; - this.label37.Text = "Flags:"; - // - // CarFlagsTextBox - // - this.CarFlagsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.CarFlagsTextBox.Location = new System.Drawing.Point(362, 87); - this.CarFlagsTextBox.Name = "CarFlagsTextBox"; - this.CarFlagsTextBox.Size = new System.Drawing.Size(143, 20); - this.CarFlagsTextBox.TabIndex = 72; - this.CarFlagsTextBox.TextChanged += new System.EventHandler(this.CarFlagsTextBox_TextChanged); - // - // CarPerpendicularLengthTextBox - // - this.CarPerpendicularLengthTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.CarPerpendicularLengthTextBox.Location = new System.Drawing.Point(120, 139); - this.CarPerpendicularLengthTextBox.Name = "CarPerpendicularLengthTextBox"; - this.CarPerpendicularLengthTextBox.Size = new System.Drawing.Size(155, 20); - this.CarPerpendicularLengthTextBox.TabIndex = 60; - this.CarPerpendicularLengthTextBox.TextChanged += new System.EventHandler(this.CarPerpendicularLengthTextBox_TextChanged); - // - // label36 - // - this.label36.AutoSize = true; - this.label36.Location = new System.Drawing.Point(6, 142); - this.label36.Name = "label36"; - this.label36.Size = new System.Drawing.Size(108, 13); - this.label36.TabIndex = 59; - this.label36.Text = "PerpendicularLength:"; - // - // CarOrientYTextBox - // - this.CarOrientYTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.CarOrientYTextBox.Location = new System.Drawing.Point(84, 113); - this.CarOrientYTextBox.Name = "CarOrientYTextBox"; - this.CarOrientYTextBox.Size = new System.Drawing.Size(191, 20); - this.CarOrientYTextBox.TabIndex = 58; - this.CarOrientYTextBox.TextChanged += new System.EventHandler(this.CarOrientYTextBox_TextChanged); - // - // label34 - // - this.label34.AutoSize = true; - this.label34.Location = new System.Drawing.Point(6, 116); - this.label34.Name = "label34"; - this.label34.Size = new System.Drawing.Size(45, 13); - this.label34.TabIndex = 57; - this.label34.Text = "OrientY:"; - // - // CarOrientXTextBox - // - this.CarOrientXTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.CarOrientXTextBox.Location = new System.Drawing.Point(84, 87); - this.CarOrientXTextBox.Name = "CarOrientXTextBox"; - this.CarOrientXTextBox.Size = new System.Drawing.Size(191, 20); - this.CarOrientXTextBox.TabIndex = 56; - this.CarOrientXTextBox.TextChanged += new System.EventHandler(this.CarOrientXTextBox_TextChanged); - // - // label35 - // - this.label35.AutoSize = true; - this.label35.Location = new System.Drawing.Point(6, 90); - this.label35.Name = "label35"; - this.label35.Size = new System.Drawing.Size(45, 13); - this.label35.TabIndex = 55; - this.label35.Text = "OrientX:"; - // - // CarModelTextBox - // - this.CarModelTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.CarModelTextBox.Location = new System.Drawing.Point(84, 35); - this.CarModelTextBox.Name = "CarModelTextBox"; - this.CarModelTextBox.Size = new System.Drawing.Size(267, 20); - this.CarModelTextBox.TabIndex = 47; - this.CarModelTextBox.TextChanged += new System.EventHandler(this.CarModelTextBox_TextChanged); - // - // label32 - // - this.label32.AutoSize = true; - this.label32.Location = new System.Drawing.Point(6, 38); - this.label32.Name = "label32"; - this.label32.Size = new System.Drawing.Size(55, 13); - this.label32.TabIndex = 46; - this.label32.Text = "CarModel:"; - // - // CarModelHashLabel - // - this.CarModelHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.CarModelHashLabel.AutoSize = true; - this.CarModelHashLabel.Location = new System.Drawing.Point(357, 38); - this.CarModelHashLabel.Name = "CarModelHashLabel"; - this.CarModelHashLabel.Size = new System.Drawing.Size(44, 13); - this.CarModelHashLabel.TabIndex = 48; - this.CarModelHashLabel.Text = "Hash: 0"; - // - // CarGoToButton - // - this.CarGoToButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.CarGoToButton.Location = new System.Drawing.Point(437, 7); - this.CarGoToButton.Name = "CarGoToButton"; - this.CarGoToButton.Size = new System.Drawing.Size(68, 23); - this.CarGoToButton.TabIndex = 54; - this.CarGoToButton.Text = "Go to"; - this.CarGoToButton.UseVisualStyleBackColor = true; - this.CarGoToButton.Click += new System.EventHandler(this.CarGoToButton_Click); - // - // CarPositionTextBox - // - this.CarPositionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.CarPositionTextBox.Location = new System.Drawing.Point(84, 9); - this.CarPositionTextBox.Name = "CarPositionTextBox"; - this.CarPositionTextBox.Size = new System.Drawing.Size(347, 20); - this.CarPositionTextBox.TabIndex = 53; - this.CarPositionTextBox.TextChanged += new System.EventHandler(this.CarPositionTextBox_TextChanged); - // - // label31 - // - this.label31.AutoSize = true; - this.label31.Location = new System.Drawing.Point(6, 12); - this.label31.Name = "label31"; - this.label31.Size = new System.Drawing.Size(47, 13); - this.label31.TabIndex = 52; - this.label31.Text = "Position:"; - // - // YmapMloInstanceTabPage - // - this.YmapMloInstanceTabPage.Location = new System.Drawing.Point(4, 22); - this.YmapMloInstanceTabPage.Name = "YmapMloInstanceTabPage"; - this.YmapMloInstanceTabPage.Size = new System.Drawing.Size(510, 443); - this.YmapMloInstanceTabPage.TabIndex = 3; - this.YmapMloInstanceTabPage.Text = "Mlo Instance"; - this.YmapMloInstanceTabPage.UseVisualStyleBackColor = true; - // - // YmapTimecycleModifierTabPage - // - this.YmapTimecycleModifierTabPage.Location = new System.Drawing.Point(4, 22); - this.YmapTimecycleModifierTabPage.Name = "YmapTimecycleModifierTabPage"; - this.YmapTimecycleModifierTabPage.Size = new System.Drawing.Size(510, 443); - this.YmapTimecycleModifierTabPage.TabIndex = 4; - this.YmapTimecycleModifierTabPage.Text = "Time Cycle Modifier"; - this.YmapTimecycleModifierTabPage.UseVisualStyleBackColor = true; - // - // YndTabPage - // - this.YndTabPage.Controls.Add(this.YndTabControl); - this.YndTabPage.Location = new System.Drawing.Point(4, 22); - this.YndTabPage.Name = "YndTabPage"; - this.YndTabPage.Size = new System.Drawing.Size(521, 472); - this.YndTabPage.TabIndex = 2; - this.YndTabPage.Text = "Traffic"; - this.YndTabPage.UseVisualStyleBackColor = true; - // - // YndTabControl - // - this.YndTabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.YndTabControl.Controls.Add(this.YndYndTabPage); - this.YndTabControl.Controls.Add(this.YndNodeTabPage); - this.YndTabControl.Location = new System.Drawing.Point(0, 3); - this.YndTabControl.Name = "YndTabControl"; - this.YndTabControl.SelectedIndex = 0; - this.YndTabControl.Size = new System.Drawing.Size(518, 469); - this.YndTabControl.TabIndex = 1; - // - // YndYndTabPage - // - this.YndYndTabPage.Controls.Add(this.YndPanel); - this.YndYndTabPage.Location = new System.Drawing.Point(4, 22); - this.YndYndTabPage.Name = "YndYndTabPage"; - this.YndYndTabPage.Padding = new System.Windows.Forms.Padding(3); - this.YndYndTabPage.Size = new System.Drawing.Size(510, 443); - this.YndYndTabPage.TabIndex = 0; - this.YndYndTabPage.Text = "Ynd"; - this.YndYndTabPage.UseVisualStyleBackColor = true; - // - // YndPanel - // - this.YndPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.YndPanel.Controls.Add(this.label88); - this.YndPanel.Controls.Add(this.YndAreaIDYUpDown); - this.YndPanel.Controls.Add(this.label87); - this.YndPanel.Controls.Add(this.YndAreaIDXUpDown); - this.YndPanel.Controls.Add(this.label48); - this.YndPanel.Controls.Add(this.YndProjectPathTextBox); - this.YndPanel.Controls.Add(this.label46); - this.YndPanel.Controls.Add(this.YndFilePathTextBox); - this.YndPanel.Controls.Add(this.label47); - this.YndPanel.Controls.Add(this.YndTotalNodesLabel); - this.YndPanel.Controls.Add(this.YndPedNodesUpDown); - this.YndPanel.Controls.Add(this.label45); - this.YndPanel.Controls.Add(this.YndVehicleNodesUpDown); - this.YndPanel.Controls.Add(this.label40); - this.YndPanel.Controls.Add(this.YndAreaIDInfoLabel); - this.YndPanel.Controls.Add(this.label33); - this.YndPanel.Controls.Add(this.YndRpfPathTextBox); - this.YndPanel.Enabled = false; - this.YndPanel.Location = new System.Drawing.Point(0, 0); - this.YndPanel.Name = "YndPanel"; - this.YndPanel.Size = new System.Drawing.Size(510, 443); - this.YndPanel.TabIndex = 0; - // - // label88 - // - this.label88.AutoSize = true; - this.label88.Location = new System.Drawing.Point(166, 11); - this.label88.Name = "label88"; - this.label88.Size = new System.Drawing.Size(17, 13); - this.label88.TabIndex = 19; - this.label88.Text = "Y:"; - // - // YndAreaIDYUpDown - // - this.YndAreaIDYUpDown.Location = new System.Drawing.Point(189, 9); - this.YndAreaIDYUpDown.Maximum = new decimal(new int[] { - 31, - 0, - 0, - 0}); - this.YndAreaIDYUpDown.Name = "YndAreaIDYUpDown"; - this.YndAreaIDYUpDown.Size = new System.Drawing.Size(48, 20); - this.YndAreaIDYUpDown.TabIndex = 18; - this.YndAreaIDYUpDown.ValueChanged += new System.EventHandler(this.YndAreaIDYUpDown_ValueChanged); - // - // label87 - // - this.label87.AutoSize = true; - this.label87.Location = new System.Drawing.Point(84, 11); - this.label87.Name = "label87"; - this.label87.Size = new System.Drawing.Size(17, 13); - this.label87.TabIndex = 17; - this.label87.Text = "X:"; - // - // YndAreaIDXUpDown - // - this.YndAreaIDXUpDown.Location = new System.Drawing.Point(107, 9); - this.YndAreaIDXUpDown.Maximum = new decimal(new int[] { - 31, - 0, - 0, - 0}); - this.YndAreaIDXUpDown.Name = "YndAreaIDXUpDown"; - this.YndAreaIDXUpDown.Size = new System.Drawing.Size(48, 20); - this.YndAreaIDXUpDown.TabIndex = 16; - this.YndAreaIDXUpDown.ValueChanged += new System.EventHandler(this.YndAreaIDXUpDown_ValueChanged); - // - // label48 - // - this.label48.AutoSize = true; - this.label48.Location = new System.Drawing.Point(6, 207); - this.label48.Name = "label48"; - this.label48.Size = new System.Drawing.Size(68, 13); - this.label48.TabIndex = 15; - this.label48.Text = "Project Path:"; - // - // YndProjectPathTextBox - // - this.YndProjectPathTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.YndProjectPathTextBox.Location = new System.Drawing.Point(80, 204); - this.YndProjectPathTextBox.Name = "YndProjectPathTextBox"; - this.YndProjectPathTextBox.ReadOnly = true; - this.YndProjectPathTextBox.Size = new System.Drawing.Size(386, 20); - this.YndProjectPathTextBox.TabIndex = 14; - // - // label46 - // - this.label46.AutoSize = true; - this.label46.Location = new System.Drawing.Point(6, 181); - this.label46.Name = "label46"; - this.label46.Size = new System.Drawing.Size(51, 13); - this.label46.TabIndex = 13; - this.label46.Text = "File Path:"; - // - // YndFilePathTextBox - // - this.YndFilePathTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.YndFilePathTextBox.Location = new System.Drawing.Point(80, 178); - this.YndFilePathTextBox.Name = "YndFilePathTextBox"; - this.YndFilePathTextBox.ReadOnly = true; - this.YndFilePathTextBox.Size = new System.Drawing.Size(386, 20); - this.YndFilePathTextBox.TabIndex = 12; - // - // label47 - // - this.label47.AutoSize = true; - this.label47.Location = new System.Drawing.Point(6, 155); - this.label47.Name = "label47"; - this.label47.Size = new System.Drawing.Size(52, 13); - this.label47.TabIndex = 11; - this.label47.Text = "Rpf Path:"; - // - // YndTotalNodesLabel - // - this.YndTotalNodesLabel.AutoSize = true; - this.YndTotalNodesLabel.Location = new System.Drawing.Point(6, 50); - this.YndTotalNodesLabel.Name = "YndTotalNodesLabel"; - this.YndTotalNodesLabel.Size = new System.Drawing.Size(77, 13); - this.YndTotalNodesLabel.TabIndex = 10; - this.YndTotalNodesLabel.Text = "Total Nodes: 0"; - // - // YndPedNodesUpDown - // - this.YndPedNodesUpDown.Location = new System.Drawing.Point(360, 48); - this.YndPedNodesUpDown.Maximum = new decimal(new int[] { - 0, - 0, - 0, - 0}); - this.YndPedNodesUpDown.Name = "YndPedNodesUpDown"; - this.YndPedNodesUpDown.Size = new System.Drawing.Size(74, 20); - this.YndPedNodesUpDown.TabIndex = 9; - this.YndPedNodesUpDown.ValueChanged += new System.EventHandler(this.YndPedNodesUpDown_ValueChanged); - // - // label45 - // - this.label45.AutoSize = true; - this.label45.Location = new System.Drawing.Point(291, 50); - this.label45.Name = "label45"; - this.label45.Size = new System.Drawing.Size(63, 13); - this.label45.TabIndex = 8; - this.label45.Text = "Ped Nodes:"; - // - // YndVehicleNodesUpDown - // - this.YndVehicleNodesUpDown.Location = new System.Drawing.Point(189, 48); - this.YndVehicleNodesUpDown.Maximum = new decimal(new int[] { - 0, - 0, - 0, - 0}); - this.YndVehicleNodesUpDown.Name = "YndVehicleNodesUpDown"; - this.YndVehicleNodesUpDown.Size = new System.Drawing.Size(74, 20); - this.YndVehicleNodesUpDown.TabIndex = 7; - this.YndVehicleNodesUpDown.ValueChanged += new System.EventHandler(this.YndVehicleNodesUpDown_ValueChanged); - // - // label40 - // - this.label40.AutoSize = true; - this.label40.Location = new System.Drawing.Point(104, 50); - this.label40.Name = "label40"; - this.label40.Size = new System.Drawing.Size(79, 13); - this.label40.TabIndex = 6; - this.label40.Text = "Vehicle Nodes:"; - // - // YndAreaIDInfoLabel - // - this.YndAreaIDInfoLabel.AutoSize = true; - this.YndAreaIDInfoLabel.Location = new System.Drawing.Point(254, 11); - this.YndAreaIDInfoLabel.Name = "YndAreaIDInfoLabel"; - this.YndAreaIDInfoLabel.Size = new System.Drawing.Size(30, 13); - this.YndAreaIDInfoLabel.TabIndex = 5; - this.YndAreaIDInfoLabel.Text = "ID: 0"; - // - // label33 - // - this.label33.AutoSize = true; - this.label33.Location = new System.Drawing.Point(28, 11); - this.label33.Name = "label33"; - this.label33.Size = new System.Drawing.Size(46, 13); - this.label33.TabIndex = 3; - this.label33.Text = "Area ID:"; - // - // YndRpfPathTextBox - // - this.YndRpfPathTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.YndRpfPathTextBox.Location = new System.Drawing.Point(80, 152); - this.YndRpfPathTextBox.Name = "YndRpfPathTextBox"; - this.YndRpfPathTextBox.ReadOnly = true; - this.YndRpfPathTextBox.Size = new System.Drawing.Size(386, 20); - this.YndRpfPathTextBox.TabIndex = 0; - // - // YndNodeTabPage - // - this.YndNodeTabPage.Controls.Add(this.YndNodePanel); - this.YndNodeTabPage.Location = new System.Drawing.Point(4, 22); - this.YndNodeTabPage.Name = "YndNodeTabPage"; - this.YndNodeTabPage.Padding = new System.Windows.Forms.Padding(3); - this.YndNodeTabPage.Size = new System.Drawing.Size(510, 443); - this.YndNodeTabPage.TabIndex = 1; - this.YndNodeTabPage.Text = "Node"; - this.YndNodeTabPage.UseVisualStyleBackColor = true; - // - // YndNodePanel - // - this.YndNodePanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.YndNodePanel.Controls.Add(this.PathNodeTabControl); - this.YndNodePanel.Enabled = false; - this.YndNodePanel.Location = new System.Drawing.Point(0, 0); - this.YndNodePanel.Name = "YndNodePanel"; - this.YndNodePanel.Size = new System.Drawing.Size(510, 443); - this.YndNodePanel.TabIndex = 0; - // - // PathNodeTabControl - // - this.PathNodeTabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.PathNodeTabControl.Controls.Add(this.PathNodePropertiesTabPage); - this.PathNodeTabControl.Controls.Add(this.PathNodeLinksTabPage); - this.PathNodeTabControl.Controls.Add(this.PathNodeJunctionTabPage); - this.PathNodeTabControl.Location = new System.Drawing.Point(0, 3); - this.PathNodeTabControl.Name = "PathNodeTabControl"; - this.PathNodeTabControl.SelectedIndex = 0; - this.PathNodeTabControl.Size = new System.Drawing.Size(507, 440); - this.PathNodeTabControl.TabIndex = 28; - // - // PathNodePropertiesTabPage - // - this.PathNodePropertiesTabPage.Controls.Add(this.PathNodeFlags5GroupBox); - this.PathNodePropertiesTabPage.Controls.Add(this.PathNodeFlags4GroupBox); - this.PathNodePropertiesTabPage.Controls.Add(this.PathNodeFlags3GroupBox); - this.PathNodePropertiesTabPage.Controls.Add(this.PathNodeFlags2GroupBox); - this.PathNodePropertiesTabPage.Controls.Add(this.PathNodeFlags1GroupBox); - this.PathNodePropertiesTabPage.Controls.Add(this.PathNodeFlags0GroupBox); - this.PathNodePropertiesTabPage.Controls.Add(this.PathNodeDeleteButton); - this.PathNodePropertiesTabPage.Controls.Add(this.PathNodeAreaIDUpDown); - this.PathNodePropertiesTabPage.Controls.Add(this.PathNodeAddToProjectButton); - this.PathNodePropertiesTabPage.Controls.Add(this.label49); - this.PathNodePropertiesTabPage.Controls.Add(this.label50); - this.PathNodePropertiesTabPage.Controls.Add(this.label68); - this.PathNodePropertiesTabPage.Controls.Add(this.PathNodeNodeIDUpDown); - this.PathNodePropertiesTabPage.Controls.Add(this.label52); - this.PathNodePropertiesTabPage.Controls.Add(this.PathNodeStreetHashTextBox); - this.PathNodePropertiesTabPage.Controls.Add(this.PathNodeGoToButton); - this.PathNodePropertiesTabPage.Controls.Add(this.PathNodeStreetNameLabel); - this.PathNodePropertiesTabPage.Controls.Add(this.PathNodePositionTextBox); - this.PathNodePropertiesTabPage.Controls.Add(this.label55); - this.PathNodePropertiesTabPage.Location = new System.Drawing.Point(4, 22); - this.PathNodePropertiesTabPage.Name = "PathNodePropertiesTabPage"; - this.PathNodePropertiesTabPage.Size = new System.Drawing.Size(499, 414); - this.PathNodePropertiesTabPage.TabIndex = 2; - this.PathNodePropertiesTabPage.Text = "Node Properties"; - this.PathNodePropertiesTabPage.UseVisualStyleBackColor = true; - // - // PathNodeFlags5GroupBox - // - this.PathNodeFlags5GroupBox.Controls.Add(this.PathNodeFlags52CheckBox); - this.PathNodeFlags5GroupBox.Controls.Add(this.PathNodeFlags53CheckBox); - this.PathNodeFlags5GroupBox.Controls.Add(this.PathNodeFlags51CheckBox); - this.PathNodeFlags5GroupBox.Controls.Add(this.PathNodeFlags5UpDown); - this.PathNodeFlags5GroupBox.Location = new System.Drawing.Point(249, 318); - this.PathNodeFlags5GroupBox.Name = "PathNodeFlags5GroupBox"; - this.PathNodeFlags5GroupBox.Size = new System.Drawing.Size(223, 84); - this.PathNodeFlags5GroupBox.TabIndex = 48; - this.PathNodeFlags5GroupBox.TabStop = false; - this.PathNodeFlags5GroupBox.Text = "Flags 5"; - // - // PathNodeFlags52CheckBox - // - this.PathNodeFlags52CheckBox.AutoSize = true; - this.PathNodeFlags52CheckBox.Location = new System.Drawing.Point(80, 41); - this.PathNodeFlags52CheckBox.Name = "PathNodeFlags52CheckBox"; - this.PathNodeFlags52CheckBox.Size = new System.Drawing.Size(87, 17); - this.PathNodeFlags52CheckBox.TabIndex = 36; - this.PathNodeFlags52CheckBox.Text = "Speed unk 1"; - this.PathNodeFlags52CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags52CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags52CheckBox_CheckedChanged); - // - // PathNodeFlags53CheckBox - // - this.PathNodeFlags53CheckBox.AutoSize = true; - this.PathNodeFlags53CheckBox.Location = new System.Drawing.Point(80, 62); - this.PathNodeFlags53CheckBox.Name = "PathNodeFlags53CheckBox"; - this.PathNodeFlags53CheckBox.Size = new System.Drawing.Size(87, 17); - this.PathNodeFlags53CheckBox.TabIndex = 37; - this.PathNodeFlags53CheckBox.Text = "Speed unk 2"; - this.PathNodeFlags53CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags53CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags53CheckBox_CheckedChanged); - // - // PathNodeFlags51CheckBox - // - this.PathNodeFlags51CheckBox.AutoSize = true; - this.PathNodeFlags51CheckBox.Location = new System.Drawing.Point(80, 20); - this.PathNodeFlags51CheckBox.Name = "PathNodeFlags51CheckBox"; - this.PathNodeFlags51CheckBox.Size = new System.Drawing.Size(137, 17); - this.PathNodeFlags51CheckBox.TabIndex = 35; - this.PathNodeFlags51CheckBox.Text = "Has junction heightmap"; - this.PathNodeFlags51CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags51CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags51CheckBox_CheckedChanged); - // - // PathNodeFlags5UpDown - // - this.PathNodeFlags5UpDown.Location = new System.Drawing.Point(6, 19); - this.PathNodeFlags5UpDown.Maximum = new decimal(new int[] { - 7, - 0, - 0, - 0}); - this.PathNodeFlags5UpDown.Name = "PathNodeFlags5UpDown"; - this.PathNodeFlags5UpDown.Size = new System.Drawing.Size(62, 20); - this.PathNodeFlags5UpDown.TabIndex = 43; - this.PathNodeFlags5UpDown.ValueChanged += new System.EventHandler(this.PathNodeFlags5UpDown_ValueChanged); - // - // PathNodeFlags4GroupBox - // - this.PathNodeFlags4GroupBox.Controls.Add(this.PathNodeFlags45CheckBox); - this.PathNodeFlags4GroupBox.Controls.Add(this.PathNodeFlags46CheckBox); - this.PathNodeFlags4GroupBox.Controls.Add(this.PathNodeFlags47CheckBox); - this.PathNodeFlags4GroupBox.Controls.Add(this.PathNodeFlags48CheckBox); - this.PathNodeFlags4GroupBox.Controls.Add(this.PathNodeFlags42UpDown); - this.PathNodeFlags4GroupBox.Controls.Add(this.label71); - this.PathNodeFlags4GroupBox.Controls.Add(this.PathNodeFlags41CheckBox); - this.PathNodeFlags4GroupBox.Controls.Add(this.PathNodeFlags4UpDown); - this.PathNodeFlags4GroupBox.Controls.Add(this.PathNodeFlags4Label); - this.PathNodeFlags4GroupBox.Location = new System.Drawing.Point(370, 96); - this.PathNodeFlags4GroupBox.Name = "PathNodeFlags4GroupBox"; - this.PathNodeFlags4GroupBox.Size = new System.Drawing.Size(115, 175); - this.PathNodeFlags4GroupBox.TabIndex = 47; - this.PathNodeFlags4GroupBox.TabStop = false; - this.PathNodeFlags4GroupBox.Text = "Flags 4"; - // - // PathNodeFlags45CheckBox - // - this.PathNodeFlags45CheckBox.AutoSize = true; - this.PathNodeFlags45CheckBox.Location = new System.Drawing.Point(6, 66); - this.PathNodeFlags45CheckBox.Name = "PathNodeFlags45CheckBox"; - this.PathNodeFlags45CheckBox.Size = new System.Drawing.Size(70, 17); - this.PathNodeFlags45CheckBox.TabIndex = 36; - this.PathNodeFlags45CheckBox.Text = "Special 1"; - this.PathNodeFlags45CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags45CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags45CheckBox_CheckedChanged); - // - // PathNodeFlags46CheckBox - // - this.PathNodeFlags46CheckBox.AutoSize = true; - this.PathNodeFlags46CheckBox.Location = new System.Drawing.Point(6, 87); - this.PathNodeFlags46CheckBox.Name = "PathNodeFlags46CheckBox"; - this.PathNodeFlags46CheckBox.Size = new System.Drawing.Size(70, 17); - this.PathNodeFlags46CheckBox.TabIndex = 37; - this.PathNodeFlags46CheckBox.Text = "Special 2"; - this.PathNodeFlags46CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags46CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags46CheckBox_CheckedChanged); - // - // PathNodeFlags47CheckBox - // - this.PathNodeFlags47CheckBox.AutoSize = true; - this.PathNodeFlags47CheckBox.Location = new System.Drawing.Point(6, 108); - this.PathNodeFlags47CheckBox.Name = "PathNodeFlags47CheckBox"; - this.PathNodeFlags47CheckBox.Size = new System.Drawing.Size(70, 17); - this.PathNodeFlags47CheckBox.TabIndex = 38; - this.PathNodeFlags47CheckBox.Text = "Special 3"; - this.PathNodeFlags47CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags47CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags47CheckBox_CheckedChanged); - // - // PathNodeFlags48CheckBox - // - this.PathNodeFlags48CheckBox.AutoSize = true; - this.PathNodeFlags48CheckBox.Location = new System.Drawing.Point(6, 129); - this.PathNodeFlags48CheckBox.Name = "PathNodeFlags48CheckBox"; - this.PathNodeFlags48CheckBox.Size = new System.Drawing.Size(96, 17); - this.PathNodeFlags48CheckBox.TabIndex = 39; - this.PathNodeFlags48CheckBox.Text = "Junction unk 6"; - this.PathNodeFlags48CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags48CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags48CheckBox_CheckedChanged); - // - // PathNodeFlags42UpDown - // - this.PathNodeFlags42UpDown.Location = new System.Drawing.Point(41, 150); - this.PathNodeFlags42UpDown.Maximum = new decimal(new int[] { - 7, - 0, - 0, - 0}); - this.PathNodeFlags42UpDown.Name = "PathNodeFlags42UpDown"; - this.PathNodeFlags42UpDown.Size = new System.Drawing.Size(57, 20); - this.PathNodeFlags42UpDown.TabIndex = 41; - this.PathNodeFlags42UpDown.ValueChanged += new System.EventHandler(this.PathNodeFlags42UpDown_ValueChanged); - // - // label71 - // - this.label71.AutoSize = true; - this.label71.Location = new System.Drawing.Point(4, 152); - this.label71.Name = "label71"; - this.label71.Size = new System.Drawing.Size(30, 13); - this.label71.TabIndex = 40; - this.label71.Text = "Unk:"; - // - // PathNodeFlags41CheckBox - // - this.PathNodeFlags41CheckBox.AutoSize = true; - this.PathNodeFlags41CheckBox.Location = new System.Drawing.Point(6, 45); - this.PathNodeFlags41CheckBox.Name = "PathNodeFlags41CheckBox"; - this.PathNodeFlags41CheckBox.Size = new System.Drawing.Size(79, 17); - this.PathNodeFlags41CheckBox.TabIndex = 35; - this.PathNodeFlags41CheckBox.Text = "Slow unk 4"; - this.PathNodeFlags41CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags41CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags41CheckBox_CheckedChanged); - // - // PathNodeFlags4UpDown - // - this.PathNodeFlags4UpDown.Location = new System.Drawing.Point(6, 19); - this.PathNodeFlags4UpDown.Maximum = new decimal(new int[] { - 255, - 0, - 0, - 0}); - this.PathNodeFlags4UpDown.Name = "PathNodeFlags4UpDown"; - this.PathNodeFlags4UpDown.Size = new System.Drawing.Size(62, 20); - this.PathNodeFlags4UpDown.TabIndex = 43; - this.PathNodeFlags4UpDown.ValueChanged += new System.EventHandler(this.PathNodeFlags4UpDown_ValueChanged); - // - // PathNodeFlags4Label - // - this.PathNodeFlags4Label.AutoSize = true; - this.PathNodeFlags4Label.Location = new System.Drawing.Point(74, 21); - this.PathNodeFlags4Label.Name = "PathNodeFlags4Label"; - this.PathNodeFlags4Label.Size = new System.Drawing.Size(30, 13); - this.PathNodeFlags4Label.TabIndex = 44; - this.PathNodeFlags4Label.Text = "0x00"; - // - // PathNodeFlags3GroupBox - // - this.PathNodeFlags3GroupBox.Controls.Add(this.PathNodeFlags32UpDown); - this.PathNodeFlags3GroupBox.Controls.Add(this.label70); - this.PathNodeFlags3GroupBox.Controls.Add(this.PathNodeFlags31CheckBox); - this.PathNodeFlags3GroupBox.Controls.Add(this.PathNodeFlags3UpDown); - this.PathNodeFlags3GroupBox.Controls.Add(this.PathNodeFlags3Label); - this.PathNodeFlags3GroupBox.Location = new System.Drawing.Point(7, 318); - this.PathNodeFlags3GroupBox.Name = "PathNodeFlags3GroupBox"; - this.PathNodeFlags3GroupBox.Size = new System.Drawing.Size(223, 84); - this.PathNodeFlags3GroupBox.TabIndex = 46; - this.PathNodeFlags3GroupBox.TabStop = false; - this.PathNodeFlags3GroupBox.Text = "Flags 3"; - // - // PathNodeFlags32UpDown - // - this.PathNodeFlags32UpDown.Location = new System.Drawing.Point(147, 44); - this.PathNodeFlags32UpDown.Maximum = new decimal(new int[] { - 127, - 0, - 0, - 0}); - this.PathNodeFlags32UpDown.Name = "PathNodeFlags32UpDown"; - this.PathNodeFlags32UpDown.Size = new System.Drawing.Size(62, 20); - this.PathNodeFlags32UpDown.TabIndex = 37; - this.PathNodeFlags32UpDown.ValueChanged += new System.EventHandler(this.PathNodeFlags32UpDown_ValueChanged); - // - // label70 - // - this.label70.AutoSize = true; - this.label70.Location = new System.Drawing.Point(111, 46); - this.label70.Name = "label70"; - this.label70.Size = new System.Drawing.Size(30, 13); - this.label70.TabIndex = 36; - this.label70.Text = "Unk:"; - // - // PathNodeFlags31CheckBox - // - this.PathNodeFlags31CheckBox.AutoSize = true; - this.PathNodeFlags31CheckBox.Location = new System.Drawing.Point(6, 45); - this.PathNodeFlags31CheckBox.Name = "PathNodeFlags31CheckBox"; - this.PathNodeFlags31CheckBox.Size = new System.Drawing.Size(85, 17); - this.PathNodeFlags31CheckBox.TabIndex = 35; - this.PathNodeFlags31CheckBox.Text = "Interior node"; - this.PathNodeFlags31CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags31CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags31CheckBox_CheckedChanged); - // - // PathNodeFlags3UpDown - // - this.PathNodeFlags3UpDown.Location = new System.Drawing.Point(6, 19); - this.PathNodeFlags3UpDown.Maximum = new decimal(new int[] { - 255, - 0, - 0, - 0}); - this.PathNodeFlags3UpDown.Name = "PathNodeFlags3UpDown"; - this.PathNodeFlags3UpDown.Size = new System.Drawing.Size(62, 20); - this.PathNodeFlags3UpDown.TabIndex = 43; - this.PathNodeFlags3UpDown.ValueChanged += new System.EventHandler(this.PathNodeFlags3UpDown_ValueChanged); - // - // PathNodeFlags3Label - // - this.PathNodeFlags3Label.AutoSize = true; - this.PathNodeFlags3Label.Location = new System.Drawing.Point(74, 21); - this.PathNodeFlags3Label.Name = "PathNodeFlags3Label"; - this.PathNodeFlags3Label.Size = new System.Drawing.Size(30, 13); - this.PathNodeFlags3Label.TabIndex = 44; - this.PathNodeFlags3Label.Text = "0x00"; - // - // PathNodeFlags2GroupBox - // - this.PathNodeFlags2GroupBox.Controls.Add(this.PathNodeFlags21CheckBox); - this.PathNodeFlags2GroupBox.Controls.Add(this.PathNodeFlags28CheckBox); - this.PathNodeFlags2GroupBox.Controls.Add(this.PathNodeFlags22CheckBox); - this.PathNodeFlags2GroupBox.Controls.Add(this.PathNodeFlags27CheckBox); - this.PathNodeFlags2GroupBox.Controls.Add(this.PathNodeFlags23CheckBox); - this.PathNodeFlags2GroupBox.Controls.Add(this.PathNodeFlags26CheckBox); - this.PathNodeFlags2GroupBox.Controls.Add(this.PathNodeFlags24CheckBox); - this.PathNodeFlags2GroupBox.Controls.Add(this.PathNodeFlags25CheckBox); - this.PathNodeFlags2GroupBox.Controls.Add(this.PathNodeFlags2UpDown); - this.PathNodeFlags2GroupBox.Controls.Add(this.PathNodeFlags2Label); - this.PathNodeFlags2GroupBox.Location = new System.Drawing.Point(249, 96); - this.PathNodeFlags2GroupBox.Name = "PathNodeFlags2GroupBox"; - this.PathNodeFlags2GroupBox.Size = new System.Drawing.Size(115, 216); - this.PathNodeFlags2GroupBox.TabIndex = 45; - this.PathNodeFlags2GroupBox.TabStop = false; - this.PathNodeFlags2GroupBox.Text = "Flags 2"; - // - // PathNodeFlags21CheckBox - // - this.PathNodeFlags21CheckBox.AutoSize = true; - this.PathNodeFlags21CheckBox.Location = new System.Drawing.Point(6, 45); - this.PathNodeFlags21CheckBox.Name = "PathNodeFlags21CheckBox"; - this.PathNodeFlags21CheckBox.Size = new System.Drawing.Size(79, 17); - this.PathNodeFlags21CheckBox.TabIndex = 35; - this.PathNodeFlags21CheckBox.Text = "Slow unk 2"; - this.PathNodeFlags21CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags21CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags21CheckBox_CheckedChanged); - // - // PathNodeFlags28CheckBox - // - this.PathNodeFlags28CheckBox.AutoSize = true; - this.PathNodeFlags28CheckBox.Location = new System.Drawing.Point(6, 192); - this.PathNodeFlags28CheckBox.Name = "PathNodeFlags28CheckBox"; - this.PathNodeFlags28CheckBox.Size = new System.Drawing.Size(81, 17); - this.PathNodeFlags28CheckBox.TabIndex = 42; - this.PathNodeFlags28CheckBox.Text = "Back road?"; - this.PathNodeFlags28CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags28CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags28CheckBox_CheckedChanged); - // - // PathNodeFlags22CheckBox - // - this.PathNodeFlags22CheckBox.AutoSize = true; - this.PathNodeFlags22CheckBox.Location = new System.Drawing.Point(6, 66); - this.PathNodeFlags22CheckBox.Name = "PathNodeFlags22CheckBox"; - this.PathNodeFlags22CheckBox.Size = new System.Drawing.Size(72, 17); - this.PathNodeFlags22CheckBox.TabIndex = 36; - this.PathNodeFlags22CheckBox.Text = "Unused 2"; - this.PathNodeFlags22CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags22CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags22CheckBox_CheckedChanged); - // - // PathNodeFlags27CheckBox - // - this.PathNodeFlags27CheckBox.AutoSize = true; - this.PathNodeFlags27CheckBox.Location = new System.Drawing.Point(6, 171); - this.PathNodeFlags27CheckBox.Name = "PathNodeFlags27CheckBox"; - this.PathNodeFlags27CheckBox.Size = new System.Drawing.Size(66, 17); - this.PathNodeFlags27CheckBox.TabIndex = 41; - this.PathNodeFlags27CheckBox.Text = "Freeway"; - this.PathNodeFlags27CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags27CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags27CheckBox_CheckedChanged); - // - // PathNodeFlags23CheckBox - // - this.PathNodeFlags23CheckBox.AutoSize = true; - this.PathNodeFlags23CheckBox.Location = new System.Drawing.Point(6, 87); - this.PathNodeFlags23CheckBox.Name = "PathNodeFlags23CheckBox"; - this.PathNodeFlags23CheckBox.Size = new System.Drawing.Size(96, 17); - this.PathNodeFlags23CheckBox.TabIndex = 37; - this.PathNodeFlags23CheckBox.Text = "Junction unk 5"; - this.PathNodeFlags23CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags23CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags23CheckBox_CheckedChanged); - // - // PathNodeFlags26CheckBox - // - this.PathNodeFlags26CheckBox.AutoSize = true; - this.PathNodeFlags26CheckBox.Location = new System.Drawing.Point(6, 150); - this.PathNodeFlags26CheckBox.Name = "PathNodeFlags26CheckBox"; - this.PathNodeFlags26CheckBox.Size = new System.Drawing.Size(86, 17); - this.PathNodeFlags26CheckBox.TabIndex = 40; - this.PathNodeFlags26CheckBox.Text = "Water/boats"; - this.PathNodeFlags26CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags26CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags26CheckBox_CheckedChanged); - // - // PathNodeFlags24CheckBox - // - this.PathNodeFlags24CheckBox.AutoSize = true; - this.PathNodeFlags24CheckBox.Location = new System.Drawing.Point(6, 108); - this.PathNodeFlags24CheckBox.Name = "PathNodeFlags24CheckBox"; - this.PathNodeFlags24CheckBox.Size = new System.Drawing.Size(72, 17); - this.PathNodeFlags24CheckBox.TabIndex = 38; - this.PathNodeFlags24CheckBox.Text = "Unused 8"; - this.PathNodeFlags24CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags24CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags24CheckBox_CheckedChanged); - // - // PathNodeFlags25CheckBox - // - this.PathNodeFlags25CheckBox.AutoSize = true; - this.PathNodeFlags25CheckBox.Location = new System.Drawing.Point(6, 129); - this.PathNodeFlags25CheckBox.Name = "PathNodeFlags25CheckBox"; - this.PathNodeFlags25CheckBox.Size = new System.Drawing.Size(79, 17); - this.PathNodeFlags25CheckBox.TabIndex = 39; - this.PathNodeFlags25CheckBox.Text = "Slow unk 3"; - this.PathNodeFlags25CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags25CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags25CheckBox_CheckedChanged); - // - // PathNodeFlags2UpDown - // - this.PathNodeFlags2UpDown.Location = new System.Drawing.Point(6, 19); - this.PathNodeFlags2UpDown.Maximum = new decimal(new int[] { - 255, - 0, - 0, - 0}); - this.PathNodeFlags2UpDown.Name = "PathNodeFlags2UpDown"; - this.PathNodeFlags2UpDown.Size = new System.Drawing.Size(62, 20); - this.PathNodeFlags2UpDown.TabIndex = 43; - this.PathNodeFlags2UpDown.ValueChanged += new System.EventHandler(this.PathNodeFlags2UpDown_ValueChanged); - // - // PathNodeFlags2Label - // - this.PathNodeFlags2Label.AutoSize = true; - this.PathNodeFlags2Label.Location = new System.Drawing.Point(74, 21); - this.PathNodeFlags2Label.Name = "PathNodeFlags2Label"; - this.PathNodeFlags2Label.Size = new System.Drawing.Size(30, 13); - this.PathNodeFlags2Label.TabIndex = 44; - this.PathNodeFlags2Label.Text = "0x00"; - // - // PathNodeFlags1GroupBox - // - this.PathNodeFlags1GroupBox.Controls.Add(this.PathNodeFlags11CheckBox); - this.PathNodeFlags1GroupBox.Controls.Add(this.PathNodeFlags18CheckBox); - this.PathNodeFlags1GroupBox.Controls.Add(this.PathNodeFlags12CheckBox); - this.PathNodeFlags1GroupBox.Controls.Add(this.PathNodeFlags17CheckBox); - this.PathNodeFlags1GroupBox.Controls.Add(this.PathNodeFlags13CheckBox); - this.PathNodeFlags1GroupBox.Controls.Add(this.PathNodeFlags16CheckBox); - this.PathNodeFlags1GroupBox.Controls.Add(this.PathNodeFlags14CheckBox); - this.PathNodeFlags1GroupBox.Controls.Add(this.PathNodeFlags15CheckBox); - this.PathNodeFlags1GroupBox.Controls.Add(this.PathNodeFlags1UpDown); - this.PathNodeFlags1GroupBox.Controls.Add(this.PathNodeFlags1Label); - this.PathNodeFlags1GroupBox.Location = new System.Drawing.Point(128, 96); - this.PathNodeFlags1GroupBox.Name = "PathNodeFlags1GroupBox"; - this.PathNodeFlags1GroupBox.Size = new System.Drawing.Size(115, 216); - this.PathNodeFlags1GroupBox.TabIndex = 44; - this.PathNodeFlags1GroupBox.TabStop = false; - this.PathNodeFlags1GroupBox.Text = "Flags 1"; - // - // PathNodeFlags11CheckBox - // - this.PathNodeFlags11CheckBox.AutoSize = true; - this.PathNodeFlags11CheckBox.Location = new System.Drawing.Point(6, 45); - this.PathNodeFlags11CheckBox.Name = "PathNodeFlags11CheckBox"; - this.PathNodeFlags11CheckBox.Size = new System.Drawing.Size(82, 17); - this.PathNodeFlags11CheckBox.TabIndex = 35; - this.PathNodeFlags11CheckBox.Text = "L turn lane?"; - this.PathNodeFlags11CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags11CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags11CheckBox_CheckedChanged); - // - // PathNodeFlags18CheckBox - // - this.PathNodeFlags18CheckBox.AutoSize = true; - this.PathNodeFlags18CheckBox.Location = new System.Drawing.Point(6, 192); - this.PathNodeFlags18CheckBox.Name = "PathNodeFlags18CheckBox"; - this.PathNodeFlags18CheckBox.Size = new System.Drawing.Size(96, 17); - this.PathNodeFlags18CheckBox.TabIndex = 42; - this.PathNodeFlags18CheckBox.Text = "Junction unk 4"; - this.PathNodeFlags18CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags18CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags18CheckBox_CheckedChanged); - // - // PathNodeFlags12CheckBox - // - this.PathNodeFlags12CheckBox.AutoSize = true; - this.PathNodeFlags12CheckBox.Location = new System.Drawing.Point(6, 66); - this.PathNodeFlags12CheckBox.Name = "PathNodeFlags12CheckBox"; - this.PathNodeFlags12CheckBox.Size = new System.Drawing.Size(98, 17); - this.PathNodeFlags12CheckBox.TabIndex = 36; - this.PathNodeFlags12CheckBox.Text = "L turn no return"; - this.PathNodeFlags12CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags12CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags12CheckBox_CheckedChanged); - // - // PathNodeFlags17CheckBox - // - this.PathNodeFlags17CheckBox.AutoSize = true; - this.PathNodeFlags17CheckBox.Location = new System.Drawing.Point(6, 171); - this.PathNodeFlags17CheckBox.Name = "PathNodeFlags17CheckBox"; - this.PathNodeFlags17CheckBox.Size = new System.Drawing.Size(108, 17); - this.PathNodeFlags17CheckBox.TabIndex = 41; - this.PathNodeFlags17CheckBox.Text = "Traffic light unk 3"; - this.PathNodeFlags17CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags17CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags17CheckBox_CheckedChanged); - // - // PathNodeFlags13CheckBox - // - this.PathNodeFlags13CheckBox.AutoSize = true; - this.PathNodeFlags13CheckBox.Location = new System.Drawing.Point(6, 87); - this.PathNodeFlags13CheckBox.Name = "PathNodeFlags13CheckBox"; - this.PathNodeFlags13CheckBox.Size = new System.Drawing.Size(100, 17); - this.PathNodeFlags13CheckBox.TabIndex = 37; - this.PathNodeFlags13CheckBox.Text = "R turn no return"; - this.PathNodeFlags13CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags13CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags13CheckBox_CheckedChanged); - // - // PathNodeFlags16CheckBox - // - this.PathNodeFlags16CheckBox.AutoSize = true; - this.PathNodeFlags16CheckBox.Location = new System.Drawing.Point(6, 150); - this.PathNodeFlags16CheckBox.Name = "PathNodeFlags16CheckBox"; - this.PathNodeFlags16CheckBox.Size = new System.Drawing.Size(96, 17); - this.PathNodeFlags16CheckBox.TabIndex = 40; - this.PathNodeFlags16CheckBox.Text = "Junction unk 3"; - this.PathNodeFlags16CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags16CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags16CheckBox_CheckedChanged); - // - // PathNodeFlags14CheckBox - // - this.PathNodeFlags14CheckBox.AutoSize = true; - this.PathNodeFlags14CheckBox.Location = new System.Drawing.Point(6, 108); - this.PathNodeFlags14CheckBox.Name = "PathNodeFlags14CheckBox"; - this.PathNodeFlags14CheckBox.Size = new System.Drawing.Size(108, 17); - this.PathNodeFlags14CheckBox.TabIndex = 38; - this.PathNodeFlags14CheckBox.Text = "Traffic light unk 1"; - this.PathNodeFlags14CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags14CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags14CheckBox_CheckedChanged); - // - // PathNodeFlags15CheckBox - // - this.PathNodeFlags15CheckBox.AutoSize = true; - this.PathNodeFlags15CheckBox.Location = new System.Drawing.Point(6, 129); - this.PathNodeFlags15CheckBox.Name = "PathNodeFlags15CheckBox"; - this.PathNodeFlags15CheckBox.Size = new System.Drawing.Size(108, 17); - this.PathNodeFlags15CheckBox.TabIndex = 39; - this.PathNodeFlags15CheckBox.Text = "Traffic light unk 2"; - this.PathNodeFlags15CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags15CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags15CheckBox_CheckedChanged); - // - // PathNodeFlags1UpDown - // - this.PathNodeFlags1UpDown.Location = new System.Drawing.Point(6, 19); - this.PathNodeFlags1UpDown.Maximum = new decimal(new int[] { - 255, - 0, - 0, - 0}); - this.PathNodeFlags1UpDown.Name = "PathNodeFlags1UpDown"; - this.PathNodeFlags1UpDown.Size = new System.Drawing.Size(62, 20); - this.PathNodeFlags1UpDown.TabIndex = 43; - this.PathNodeFlags1UpDown.ValueChanged += new System.EventHandler(this.PathNodeFlags1UpDown_ValueChanged); - // - // PathNodeFlags1Label - // - this.PathNodeFlags1Label.AutoSize = true; - this.PathNodeFlags1Label.Location = new System.Drawing.Point(74, 21); - this.PathNodeFlags1Label.Name = "PathNodeFlags1Label"; - this.PathNodeFlags1Label.Size = new System.Drawing.Size(30, 13); - this.PathNodeFlags1Label.TabIndex = 44; - this.PathNodeFlags1Label.Text = "0x00"; - // - // PathNodeFlags0GroupBox - // - this.PathNodeFlags0GroupBox.Controls.Add(this.PathNodeFlags01CheckBox); - this.PathNodeFlags0GroupBox.Controls.Add(this.PathNodeFlags08CheckBox); - this.PathNodeFlags0GroupBox.Controls.Add(this.PathNodeFlags02CheckBox); - this.PathNodeFlags0GroupBox.Controls.Add(this.PathNodeFlags07CheckBox); - this.PathNodeFlags0GroupBox.Controls.Add(this.PathNodeFlags03CheckBox); - this.PathNodeFlags0GroupBox.Controls.Add(this.PathNodeFlags06CheckBox); - this.PathNodeFlags0GroupBox.Controls.Add(this.PathNodeFlags04CheckBox); - this.PathNodeFlags0GroupBox.Controls.Add(this.PathNodeFlags05CheckBox); - this.PathNodeFlags0GroupBox.Controls.Add(this.PathNodeFlags0UpDown); - this.PathNodeFlags0GroupBox.Controls.Add(this.PathNodeFlags0Label); - this.PathNodeFlags0GroupBox.Location = new System.Drawing.Point(7, 96); - this.PathNodeFlags0GroupBox.Name = "PathNodeFlags0GroupBox"; - this.PathNodeFlags0GroupBox.Size = new System.Drawing.Size(115, 216); - this.PathNodeFlags0GroupBox.TabIndex = 43; - this.PathNodeFlags0GroupBox.TabStop = false; - this.PathNodeFlags0GroupBox.Text = "Flags 0"; - // - // PathNodeFlags01CheckBox - // - this.PathNodeFlags01CheckBox.AutoSize = true; - this.PathNodeFlags01CheckBox.Location = new System.Drawing.Point(6, 45); - this.PathNodeFlags01CheckBox.Name = "PathNodeFlags01CheckBox"; - this.PathNodeFlags01CheckBox.Size = new System.Drawing.Size(65, 17); - this.PathNodeFlags01CheckBox.TabIndex = 35; - this.PathNodeFlags01CheckBox.Text = "Scripted"; - this.PathNodeFlags01CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags01CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags01CheckBox_CheckedChanged); - // - // PathNodeFlags08CheckBox - // - this.PathNodeFlags08CheckBox.AutoSize = true; - this.PathNodeFlags08CheckBox.Location = new System.Drawing.Point(6, 192); - this.PathNodeFlags08CheckBox.Name = "PathNodeFlags08CheckBox"; - this.PathNodeFlags08CheckBox.Size = new System.Drawing.Size(96, 17); - this.PathNodeFlags08CheckBox.TabIndex = 42; - this.PathNodeFlags08CheckBox.Text = "Junction unk 2"; - this.PathNodeFlags08CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags08CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags08CheckBox_CheckedChanged); - // - // PathNodeFlags02CheckBox - // - this.PathNodeFlags02CheckBox.AutoSize = true; - this.PathNodeFlags02CheckBox.Location = new System.Drawing.Point(6, 66); - this.PathNodeFlags02CheckBox.Name = "PathNodeFlags02CheckBox"; - this.PathNodeFlags02CheckBox.Size = new System.Drawing.Size(89, 17); - this.PathNodeFlags02CheckBox.TabIndex = 36; - this.PathNodeFlags02CheckBox.Text = "GPS enable?"; - this.PathNodeFlags02CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags02CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags02CheckBox_CheckedChanged); - // - // PathNodeFlags07CheckBox - // - this.PathNodeFlags07CheckBox.AutoSize = true; - this.PathNodeFlags07CheckBox.Location = new System.Drawing.Point(6, 171); - this.PathNodeFlags07CheckBox.Name = "PathNodeFlags07CheckBox"; - this.PathNodeFlags07CheckBox.Size = new System.Drawing.Size(96, 17); - this.PathNodeFlags07CheckBox.TabIndex = 41; - this.PathNodeFlags07CheckBox.Text = "Junction unk 1"; - this.PathNodeFlags07CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags07CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags07CheckBox_CheckedChanged); - // - // PathNodeFlags03CheckBox - // - this.PathNodeFlags03CheckBox.AutoSize = true; - this.PathNodeFlags03CheckBox.Location = new System.Drawing.Point(6, 87); - this.PathNodeFlags03CheckBox.Name = "PathNodeFlags03CheckBox"; - this.PathNodeFlags03CheckBox.Size = new System.Drawing.Size(72, 17); - this.PathNodeFlags03CheckBox.TabIndex = 37; - this.PathNodeFlags03CheckBox.Text = "Unused 4"; - this.PathNodeFlags03CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags03CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags03CheckBox_CheckedChanged); - // - // PathNodeFlags06CheckBox - // - this.PathNodeFlags06CheckBox.AutoSize = true; - this.PathNodeFlags06CheckBox.Location = new System.Drawing.Point(6, 150); - this.PathNodeFlags06CheckBox.Name = "PathNodeFlags06CheckBox"; - this.PathNodeFlags06CheckBox.Size = new System.Drawing.Size(79, 17); - this.PathNodeFlags06CheckBox.TabIndex = 40; - this.PathNodeFlags06CheckBox.Text = "Slow unk 1"; - this.PathNodeFlags06CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags06CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags06CheckBox_CheckedChanged); - // - // PathNodeFlags04CheckBox - // - this.PathNodeFlags04CheckBox.AutoSize = true; - this.PathNodeFlags04CheckBox.Location = new System.Drawing.Point(6, 108); - this.PathNodeFlags04CheckBox.Name = "PathNodeFlags04CheckBox"; - this.PathNodeFlags04CheckBox.Size = new System.Drawing.Size(87, 17); - this.PathNodeFlags04CheckBox.TabIndex = 38; - this.PathNodeFlags04CheckBox.Text = "Gravel road?"; - this.PathNodeFlags04CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags04CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags04CheckBox_CheckedChanged); - // - // PathNodeFlags05CheckBox - // - this.PathNodeFlags05CheckBox.AutoSize = true; - this.PathNodeFlags05CheckBox.Location = new System.Drawing.Point(6, 129); - this.PathNodeFlags05CheckBox.Name = "PathNodeFlags05CheckBox"; - this.PathNodeFlags05CheckBox.Size = new System.Drawing.Size(78, 17); - this.PathNodeFlags05CheckBox.TabIndex = 39; - this.PathNodeFlags05CheckBox.Text = "Unused 16"; - this.PathNodeFlags05CheckBox.UseVisualStyleBackColor = true; - this.PathNodeFlags05CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeFlags05CheckBox_CheckedChanged); - // - // PathNodeFlags0UpDown - // - this.PathNodeFlags0UpDown.Location = new System.Drawing.Point(6, 19); - this.PathNodeFlags0UpDown.Maximum = new decimal(new int[] { - 255, - 0, - 0, - 0}); - this.PathNodeFlags0UpDown.Name = "PathNodeFlags0UpDown"; - this.PathNodeFlags0UpDown.Size = new System.Drawing.Size(62, 20); - this.PathNodeFlags0UpDown.TabIndex = 43; - this.PathNodeFlags0UpDown.ValueChanged += new System.EventHandler(this.PathNodeFlags0UpDown_ValueChanged); - // - // PathNodeFlags0Label - // - this.PathNodeFlags0Label.AutoSize = true; - this.PathNodeFlags0Label.Location = new System.Drawing.Point(74, 21); - this.PathNodeFlags0Label.Name = "PathNodeFlags0Label"; - this.PathNodeFlags0Label.Size = new System.Drawing.Size(30, 13); - this.PathNodeFlags0Label.TabIndex = 44; - this.PathNodeFlags0Label.Text = "0x00"; - // - // PathNodeDeleteButton - // - this.PathNodeDeleteButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.PathNodeDeleteButton.Enabled = false; - this.PathNodeDeleteButton.Location = new System.Drawing.Point(406, 36); - this.PathNodeDeleteButton.Name = "PathNodeDeleteButton"; - this.PathNodeDeleteButton.Size = new System.Drawing.Size(90, 23); - this.PathNodeDeleteButton.TabIndex = 12; - this.PathNodeDeleteButton.Text = "Delete Node"; - this.PathNodeDeleteButton.UseVisualStyleBackColor = true; - this.PathNodeDeleteButton.Click += new System.EventHandler(this.PathNodeDeleteButton_Click); - // - // PathNodeAreaIDUpDown - // - this.PathNodeAreaIDUpDown.Location = new System.Drawing.Point(78, 12); - this.PathNodeAreaIDUpDown.Maximum = new decimal(new int[] { - 1023, - 0, - 0, - 0}); - this.PathNodeAreaIDUpDown.Name = "PathNodeAreaIDUpDown"; - this.PathNodeAreaIDUpDown.Size = new System.Drawing.Size(74, 20); - this.PathNodeAreaIDUpDown.TabIndex = 6; - this.PathNodeAreaIDUpDown.ValueChanged += new System.EventHandler(this.PathNodeAreaIDUpDown_ValueChanged); - // - // PathNodeAddToProjectButton - // - this.PathNodeAddToProjectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.PathNodeAddToProjectButton.Enabled = false; - this.PathNodeAddToProjectButton.Location = new System.Drawing.Point(310, 36); - this.PathNodeAddToProjectButton.Name = "PathNodeAddToProjectButton"; - this.PathNodeAddToProjectButton.Size = new System.Drawing.Size(90, 23); - this.PathNodeAddToProjectButton.TabIndex = 11; - this.PathNodeAddToProjectButton.Text = "Add to Project"; - this.PathNodeAddToProjectButton.UseVisualStyleBackColor = true; - this.PathNodeAddToProjectButton.Click += new System.EventHandler(this.PathNodeAddToProjectButton_Click); - // - // label49 - // - this.label49.AutoSize = true; - this.label49.Location = new System.Drawing.Point(26, 14); - this.label49.Name = "label49"; - this.label49.Size = new System.Drawing.Size(46, 13); - this.label49.TabIndex = 5; - this.label49.Text = "Area ID:"; - // - // label50 - // - this.label50.AutoSize = true; - this.label50.Location = new System.Drawing.Point(166, 14); - this.label50.Name = "label50"; - this.label50.Size = new System.Drawing.Size(50, 13); - this.label50.TabIndex = 7; - this.label50.Text = "Node ID:"; - // - // label68 - // - this.label68.AutoSize = true; - this.label68.Location = new System.Drawing.Point(302, 14); - this.label68.Name = "label68"; - this.label68.Size = new System.Drawing.Size(156, 13); - this.label68.TabIndex = 32; - this.label68.Text = "(These will be set automatically)"; - // - // PathNodeNodeIDUpDown - // - this.PathNodeNodeIDUpDown.Location = new System.Drawing.Point(222, 12); - this.PathNodeNodeIDUpDown.Maximum = new decimal(new int[] { - 100000, - 0, - 0, - 0}); - this.PathNodeNodeIDUpDown.Name = "PathNodeNodeIDUpDown"; - this.PathNodeNodeIDUpDown.Size = new System.Drawing.Size(74, 20); - this.PathNodeNodeIDUpDown.TabIndex = 8; - this.PathNodeNodeIDUpDown.ValueChanged += new System.EventHandler(this.PathNodeNodeIDUpDown_ValueChanged); - // - // label52 - // - this.label52.AutoSize = true; - this.label52.Location = new System.Drawing.Point(4, 67); - this.label52.Name = "label52"; - this.label52.Size = new System.Drawing.Size(70, 13); - this.label52.TabIndex = 9; - this.label52.Text = "Street (hash):"; - // - // PathNodeStreetHashTextBox - // - this.PathNodeStreetHashTextBox.Location = new System.Drawing.Point(78, 64); - this.PathNodeStreetHashTextBox.Name = "PathNodeStreetHashTextBox"; - this.PathNodeStreetHashTextBox.Size = new System.Drawing.Size(138, 20); - this.PathNodeStreetHashTextBox.TabIndex = 13; - this.PathNodeStreetHashTextBox.TextChanged += new System.EventHandler(this.PathNodeStreetHashTextBox_TextChanged); - // - // PathNodeGoToButton - // - this.PathNodeGoToButton.Location = new System.Drawing.Point(222, 36); - this.PathNodeGoToButton.Name = "PathNodeGoToButton"; - this.PathNodeGoToButton.Size = new System.Drawing.Size(68, 23); - this.PathNodeGoToButton.TabIndex = 10; - this.PathNodeGoToButton.Text = "Go to"; - this.PathNodeGoToButton.UseVisualStyleBackColor = true; - this.PathNodeGoToButton.Click += new System.EventHandler(this.PathNodeGoToButton_Click); - // - // PathNodeStreetNameLabel - // - this.PathNodeStreetNameLabel.AutoSize = true; - this.PathNodeStreetNameLabel.Location = new System.Drawing.Point(223, 67); - this.PathNodeStreetNameLabel.Name = "PathNodeStreetNameLabel"; - this.PathNodeStreetNameLabel.Size = new System.Drawing.Size(73, 13); - this.PathNodeStreetNameLabel.TabIndex = 11; - this.PathNodeStreetNameLabel.Text = "Name: [None]"; - // - // PathNodePositionTextBox - // - this.PathNodePositionTextBox.Location = new System.Drawing.Point(78, 38); - this.PathNodePositionTextBox.Name = "PathNodePositionTextBox"; - this.PathNodePositionTextBox.Size = new System.Drawing.Size(138, 20); - this.PathNodePositionTextBox.TabIndex = 9; - this.PathNodePositionTextBox.TextChanged += new System.EventHandler(this.PathNodePositionTextBox_TextChanged); - // - // label55 - // - this.label55.AutoSize = true; - this.label55.Location = new System.Drawing.Point(25, 41); - this.label55.Name = "label55"; - this.label55.Size = new System.Drawing.Size(47, 13); - this.label55.TabIndex = 28; - this.label55.Text = "Position:"; - // - // PathNodeLinksTabPage - // - this.PathNodeLinksTabPage.Controls.Add(this.splitContainer2); - this.PathNodeLinksTabPage.Location = new System.Drawing.Point(4, 22); - this.PathNodeLinksTabPage.Name = "PathNodeLinksTabPage"; - this.PathNodeLinksTabPage.Padding = new System.Windows.Forms.Padding(3); - this.PathNodeLinksTabPage.Size = new System.Drawing.Size(499, 414); - this.PathNodeLinksTabPage.TabIndex = 0; - this.PathNodeLinksTabPage.Text = "Path Links"; - this.PathNodeLinksTabPage.UseVisualStyleBackColor = true; - // - // splitContainer2 - // - this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; - this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; - this.splitContainer2.Location = new System.Drawing.Point(3, 3); - this.splitContainer2.Name = "splitContainer2"; - // - // splitContainer2.Panel1 - // - this.splitContainer2.Panel1.Controls.Add(this.PathNodeRemoveLinkButton); - this.splitContainer2.Panel1.Controls.Add(this.PathNodeAddLinkButton); - this.splitContainer2.Panel1.Controls.Add(this.PathNodeLinksListBox); - this.splitContainer2.Panel1.Controls.Add(this.PathNodeLinkCountLabel); - // - // splitContainer2.Panel2 - // - this.splitContainer2.Panel2.Controls.Add(this.PathNodeLinkPanel); - this.splitContainer2.Size = new System.Drawing.Size(493, 408); - this.splitContainer2.SplitterDistance = 168; - this.splitContainer2.TabIndex = 0; - // - // PathNodeRemoveLinkButton - // - this.PathNodeRemoveLinkButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.PathNodeRemoveLinkButton.Location = new System.Drawing.Point(85, 382); - this.PathNodeRemoveLinkButton.Name = "PathNodeRemoveLinkButton"; - this.PathNodeRemoveLinkButton.Size = new System.Drawing.Size(76, 23); - this.PathNodeRemoveLinkButton.TabIndex = 2; - this.PathNodeRemoveLinkButton.Text = "Remove"; - this.PathNodeRemoveLinkButton.UseVisualStyleBackColor = true; - this.PathNodeRemoveLinkButton.Click += new System.EventHandler(this.PathNodeRemoveLinkButton_Click); - // - // PathNodeAddLinkButton - // - this.PathNodeAddLinkButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.PathNodeAddLinkButton.Location = new System.Drawing.Point(3, 382); - this.PathNodeAddLinkButton.Name = "PathNodeAddLinkButton"; - this.PathNodeAddLinkButton.Size = new System.Drawing.Size(76, 23); - this.PathNodeAddLinkButton.TabIndex = 1; - this.PathNodeAddLinkButton.Text = "Add"; - this.PathNodeAddLinkButton.UseVisualStyleBackColor = true; - this.PathNodeAddLinkButton.Click += new System.EventHandler(this.PathNodeAddLinkButton_Click); - // - // PathNodeLinksListBox - // - this.PathNodeLinksListBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.PathNodeLinksListBox.FormattingEnabled = true; - this.PathNodeLinksListBox.Location = new System.Drawing.Point(0, 0); - this.PathNodeLinksListBox.Name = "PathNodeLinksListBox"; - this.PathNodeLinksListBox.Size = new System.Drawing.Size(165, 342); - this.PathNodeLinksListBox.TabIndex = 0; - this.PathNodeLinksListBox.SelectedIndexChanged += new System.EventHandler(this.PathNodeLinksListBox_SelectedIndexChanged); - // - // PathNodeLinkCountLabel - // - this.PathNodeLinkCountLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.PathNodeLinkCountLabel.AutoSize = true; - this.PathNodeLinkCountLabel.Location = new System.Drawing.Point(3, 366); - this.PathNodeLinkCountLabel.Name = "PathNodeLinkCountLabel"; - this.PathNodeLinkCountLabel.Size = new System.Drawing.Size(70, 13); - this.PathNodeLinkCountLabel.TabIndex = 31; - this.PathNodeLinkCountLabel.Text = "Link Count: 0"; - // - // PathNodeLinkPanel - // - this.PathNodeLinkPanel.Controls.Add(this.PathLinkFlags2GroupBox); - this.PathNodeLinkPanel.Controls.Add(this.PathLinkFlags1GroupBox); - this.PathNodeLinkPanel.Controls.Add(this.PathLinkFlags0GroupBox); - this.PathNodeLinkPanel.Controls.Add(this.PathNodeLinkageStatusLabel); - this.PathNodeLinkPanel.Controls.Add(this.PathNodeLinkLengthUpDown); - this.PathNodeLinkPanel.Controls.Add(this.label57); - this.PathNodeLinkPanel.Controls.Add(this.PathNodeLinkNodeIDUpDown); - this.PathNodeLinkPanel.Controls.Add(this.label51); - this.PathNodeLinkPanel.Controls.Add(this.PathNodeLinkAreaIDUpDown); - this.PathNodeLinkPanel.Controls.Add(this.label54); - this.PathNodeLinkPanel.Dock = System.Windows.Forms.DockStyle.Fill; - this.PathNodeLinkPanel.Enabled = false; - this.PathNodeLinkPanel.Location = new System.Drawing.Point(0, 0); - this.PathNodeLinkPanel.Name = "PathNodeLinkPanel"; - this.PathNodeLinkPanel.Size = new System.Drawing.Size(321, 408); - this.PathNodeLinkPanel.TabIndex = 0; - // - // PathLinkFlags2GroupBox - // - this.PathLinkFlags2GroupBox.Controls.Add(this.PathNodeLinkFlags21CheckBox); - this.PathLinkFlags2GroupBox.Controls.Add(this.PathNodeLinkFlags22CheckBox); - this.PathLinkFlags2GroupBox.Controls.Add(this.label53); - this.PathLinkFlags2GroupBox.Controls.Add(this.PathNodeLinkFwdLanesUpDown); - this.PathLinkFlags2GroupBox.Controls.Add(this.label56); - this.PathLinkFlags2GroupBox.Controls.Add(this.PathNodeLinkBackLanesUpDown); - this.PathLinkFlags2GroupBox.Controls.Add(this.PathNodeLinkFlags2UpDown); - this.PathLinkFlags2GroupBox.Controls.Add(this.PathNodeLinkFlags2Label); - this.PathLinkFlags2GroupBox.Location = new System.Drawing.Point(13, 240); - this.PathLinkFlags2GroupBox.Name = "PathLinkFlags2GroupBox"; - this.PathLinkFlags2GroupBox.Size = new System.Drawing.Size(141, 145); - this.PathLinkFlags2GroupBox.TabIndex = 18; - this.PathLinkFlags2GroupBox.TabStop = false; - this.PathLinkFlags2GroupBox.Text = "Flags 2"; - // - // PathNodeLinkFlags21CheckBox - // - this.PathNodeLinkFlags21CheckBox.AutoSize = true; - this.PathNodeLinkFlags21CheckBox.Location = new System.Drawing.Point(6, 45); - this.PathNodeLinkFlags21CheckBox.Name = "PathNodeLinkFlags21CheckBox"; - this.PathNodeLinkFlags21CheckBox.Size = new System.Drawing.Size(123, 17); - this.PathNodeLinkFlags21CheckBox.TabIndex = 33; - this.PathNodeLinkFlags21CheckBox.Text = "Angled/merged links"; - this.PathNodeLinkFlags21CheckBox.UseVisualStyleBackColor = true; - this.PathNodeLinkFlags21CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeLinkFlags21CheckBox_CheckedChanged); - // - // PathNodeLinkFlags22CheckBox - // - this.PathNodeLinkFlags22CheckBox.AutoSize = true; - this.PathNodeLinkFlags22CheckBox.Location = new System.Drawing.Point(6, 66); - this.PathNodeLinkFlags22CheckBox.Name = "PathNodeLinkFlags22CheckBox"; - this.PathNodeLinkFlags22CheckBox.Size = new System.Drawing.Size(129, 17); - this.PathNodeLinkFlags22CheckBox.TabIndex = 34; - this.PathNodeLinkFlags22CheckBox.Text = "Lane change / U-turn"; - this.PathNodeLinkFlags22CheckBox.UseVisualStyleBackColor = true; - this.PathNodeLinkFlags22CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeLinkFlags22CheckBox_CheckedChanged); - // - // label53 - // - this.label53.AutoSize = true; - this.label53.Location = new System.Drawing.Point(7, 118); - this.label53.Name = "label53"; - this.label53.Size = new System.Drawing.Size(58, 13); - this.label53.TabIndex = 37; - this.label53.Text = "Fwd lanes:"; - // - // PathNodeLinkFwdLanesUpDown - // - this.PathNodeLinkFwdLanesUpDown.Location = new System.Drawing.Point(71, 116); - this.PathNodeLinkFwdLanesUpDown.Maximum = new decimal(new int[] { - 7, - 0, - 0, - 0}); - this.PathNodeLinkFwdLanesUpDown.Name = "PathNodeLinkFwdLanesUpDown"; - this.PathNodeLinkFwdLanesUpDown.Size = new System.Drawing.Size(62, 20); - this.PathNodeLinkFwdLanesUpDown.TabIndex = 38; - this.PathNodeLinkFwdLanesUpDown.ValueChanged += new System.EventHandler(this.PathNodeLinkFwdLanesUpDown_ValueChanged); - // - // label56 - // - this.label56.AutoSize = true; - this.label56.Location = new System.Drawing.Point(3, 92); - this.label56.Name = "label56"; - this.label56.Size = new System.Drawing.Size(63, 13); - this.label56.TabIndex = 35; - this.label56.Text = "Back lanes:"; - // - // PathNodeLinkBackLanesUpDown - // - this.PathNodeLinkBackLanesUpDown.Location = new System.Drawing.Point(72, 90); - this.PathNodeLinkBackLanesUpDown.Maximum = new decimal(new int[] { - 7, - 0, - 0, - 0}); - this.PathNodeLinkBackLanesUpDown.Name = "PathNodeLinkBackLanesUpDown"; - this.PathNodeLinkBackLanesUpDown.Size = new System.Drawing.Size(62, 20); - this.PathNodeLinkBackLanesUpDown.TabIndex = 36; - this.PathNodeLinkBackLanesUpDown.ValueChanged += new System.EventHandler(this.PathNodeLinkBackLanesUpDown_ValueChanged); - // - // PathNodeLinkFlags2UpDown - // - this.PathNodeLinkFlags2UpDown.Location = new System.Drawing.Point(6, 19); - this.PathNodeLinkFlags2UpDown.Maximum = new decimal(new int[] { - 255, - 0, - 0, - 0}); - this.PathNodeLinkFlags2UpDown.Name = "PathNodeLinkFlags2UpDown"; - this.PathNodeLinkFlags2UpDown.Size = new System.Drawing.Size(62, 20); - this.PathNodeLinkFlags2UpDown.TabIndex = 31; - this.PathNodeLinkFlags2UpDown.ValueChanged += new System.EventHandler(this.PathNodeLinkFlags2UpDown_ValueChanged); - // - // PathNodeLinkFlags2Label - // - this.PathNodeLinkFlags2Label.AutoSize = true; - this.PathNodeLinkFlags2Label.Location = new System.Drawing.Point(74, 21); - this.PathNodeLinkFlags2Label.Name = "PathNodeLinkFlags2Label"; - this.PathNodeLinkFlags2Label.Size = new System.Drawing.Size(30, 13); - this.PathNodeLinkFlags2Label.TabIndex = 32; - this.PathNodeLinkFlags2Label.Text = "0x00"; - // - // PathLinkFlags1GroupBox - // - this.PathLinkFlags1GroupBox.Controls.Add(this.PathNodeLinkOffsetSizeUpDown); - this.PathLinkFlags1GroupBox.Controls.Add(this.label61); - this.PathLinkFlags1GroupBox.Controls.Add(this.PathNodeLinkFlags11CheckBox); - this.PathLinkFlags1GroupBox.Controls.Add(this.PathNodeLinkFlags18CheckBox); - this.PathLinkFlags1GroupBox.Controls.Add(this.PathNodeLinkFlags12CheckBox); - this.PathLinkFlags1GroupBox.Controls.Add(this.PathNodeLinkFlags13CheckBox); - this.PathLinkFlags1GroupBox.Controls.Add(this.PathNodeLinkFlags14CheckBox); - this.PathLinkFlags1GroupBox.Controls.Add(this.PathNodeLinkFlags1UpDown); - this.PathLinkFlags1GroupBox.Controls.Add(this.PathNodeLinkFlags1Label); - this.PathLinkFlags1GroupBox.Location = new System.Drawing.Point(165, 93); - this.PathLinkFlags1GroupBox.Name = "PathLinkFlags1GroupBox"; - this.PathLinkFlags1GroupBox.Size = new System.Drawing.Size(133, 181); - this.PathLinkFlags1GroupBox.TabIndex = 17; - this.PathLinkFlags1GroupBox.TabStop = false; - this.PathLinkFlags1GroupBox.Text = "Flags 1"; - // - // PathNodeLinkOffsetSizeUpDown - // - this.PathNodeLinkOffsetSizeUpDown.Location = new System.Drawing.Point(70, 152); - this.PathNodeLinkOffsetSizeUpDown.Maximum = new decimal(new int[] { - 7, - 0, - 0, - 0}); - this.PathNodeLinkOffsetSizeUpDown.Name = "PathNodeLinkOffsetSizeUpDown"; - this.PathNodeLinkOffsetSizeUpDown.Size = new System.Drawing.Size(57, 20); - this.PathNodeLinkOffsetSizeUpDown.TabIndex = 39; - this.PathNodeLinkOffsetSizeUpDown.ValueChanged += new System.EventHandler(this.PathNodeLinkOffsetSizeUpDown_ValueChanged); - // - // label61 - // - this.label61.AutoSize = true; - this.label61.Location = new System.Drawing.Point(6, 154); - this.label61.Name = "label61"; - this.label61.Size = new System.Drawing.Size(59, 13); - this.label61.TabIndex = 38; - this.label61.Text = "Offset size:"; - // - // PathNodeLinkFlags11CheckBox - // - this.PathNodeLinkFlags11CheckBox.AutoSize = true; - this.PathNodeLinkFlags11CheckBox.Location = new System.Drawing.Point(6, 45); - this.PathNodeLinkFlags11CheckBox.Name = "PathNodeLinkFlags11CheckBox"; - this.PathNodeLinkFlags11CheckBox.Size = new System.Drawing.Size(72, 17); - this.PathNodeLinkFlags11CheckBox.TabIndex = 30; - this.PathNodeLinkFlags11CheckBox.Text = "Unused 1"; - this.PathNodeLinkFlags11CheckBox.UseVisualStyleBackColor = true; - this.PathNodeLinkFlags11CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeLinkFlags11CheckBox_CheckedChanged); - // - // PathNodeLinkFlags18CheckBox - // - this.PathNodeLinkFlags18CheckBox.AutoSize = true; - this.PathNodeLinkFlags18CheckBox.Location = new System.Drawing.Point(6, 129); - this.PathNodeLinkFlags18CheckBox.Name = "PathNodeLinkFlags18CheckBox"; - this.PathNodeLinkFlags18CheckBox.Size = new System.Drawing.Size(98, 17); - this.PathNodeLinkFlags18CheckBox.TabIndex = 37; - this.PathNodeLinkFlags18CheckBox.Text = "Negative offset"; - this.PathNodeLinkFlags18CheckBox.UseVisualStyleBackColor = true; - this.PathNodeLinkFlags18CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeLinkFlags18CheckBox_CheckedChanged); - // - // PathNodeLinkFlags12CheckBox - // - this.PathNodeLinkFlags12CheckBox.AutoSize = true; - this.PathNodeLinkFlags12CheckBox.Location = new System.Drawing.Point(6, 66); - this.PathNodeLinkFlags12CheckBox.Name = "PathNodeLinkFlags12CheckBox"; - this.PathNodeLinkFlags12CheckBox.Size = new System.Drawing.Size(81, 17); - this.PathNodeLinkFlags12CheckBox.TabIndex = 31; - this.PathNodeLinkFlags12CheckBox.Text = "Unknown 1"; - this.PathNodeLinkFlags12CheckBox.UseVisualStyleBackColor = true; - this.PathNodeLinkFlags12CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeLinkFlags12CheckBox_CheckedChanged); - // - // PathNodeLinkFlags13CheckBox - // - this.PathNodeLinkFlags13CheckBox.AutoSize = true; - this.PathNodeLinkFlags13CheckBox.Location = new System.Drawing.Point(6, 87); - this.PathNodeLinkFlags13CheckBox.Name = "PathNodeLinkFlags13CheckBox"; - this.PathNodeLinkFlags13CheckBox.Size = new System.Drawing.Size(73, 17); - this.PathNodeLinkFlags13CheckBox.TabIndex = 32; - this.PathNodeLinkFlags13CheckBox.Text = "Dead end"; - this.PathNodeLinkFlags13CheckBox.UseVisualStyleBackColor = true; - this.PathNodeLinkFlags13CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeLinkFlags13CheckBox_CheckedChanged); - // - // PathNodeLinkFlags14CheckBox - // - this.PathNodeLinkFlags14CheckBox.AutoSize = true; - this.PathNodeLinkFlags14CheckBox.Location = new System.Drawing.Point(6, 108); - this.PathNodeLinkFlags14CheckBox.Name = "PathNodeLinkFlags14CheckBox"; - this.PathNodeLinkFlags14CheckBox.Size = new System.Drawing.Size(92, 17); - this.PathNodeLinkFlags14CheckBox.TabIndex = 33; - this.PathNodeLinkFlags14CheckBox.Text = "Dead end exit"; - this.PathNodeLinkFlags14CheckBox.UseVisualStyleBackColor = true; - this.PathNodeLinkFlags14CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeLinkFlags14CheckBox_CheckedChanged); - // - // PathNodeLinkFlags1UpDown - // - this.PathNodeLinkFlags1UpDown.Location = new System.Drawing.Point(6, 19); - this.PathNodeLinkFlags1UpDown.Maximum = new decimal(new int[] { - 255, - 0, - 0, - 0}); - this.PathNodeLinkFlags1UpDown.Name = "PathNodeLinkFlags1UpDown"; - this.PathNodeLinkFlags1UpDown.Size = new System.Drawing.Size(62, 20); - this.PathNodeLinkFlags1UpDown.TabIndex = 28; - this.PathNodeLinkFlags1UpDown.ValueChanged += new System.EventHandler(this.PathNodeLinkFlags1UpDown_ValueChanged); - // - // PathNodeLinkFlags1Label - // - this.PathNodeLinkFlags1Label.AutoSize = true; - this.PathNodeLinkFlags1Label.Location = new System.Drawing.Point(74, 21); - this.PathNodeLinkFlags1Label.Name = "PathNodeLinkFlags1Label"; - this.PathNodeLinkFlags1Label.Size = new System.Drawing.Size(30, 13); - this.PathNodeLinkFlags1Label.TabIndex = 29; - this.PathNodeLinkFlags1Label.Text = "0x00"; - // - // PathLinkFlags0GroupBox - // - this.PathLinkFlags0GroupBox.Controls.Add(this.PathNodeLinkFlags04UpDown); - this.PathLinkFlags0GroupBox.Controls.Add(this.label60); - this.PathLinkFlags0GroupBox.Controls.Add(this.PathNodeLinkFlags03UpDown); - this.PathLinkFlags0GroupBox.Controls.Add(this.label58); - this.PathLinkFlags0GroupBox.Controls.Add(this.PathNodeLinkFlags01CheckBox); - this.PathLinkFlags0GroupBox.Controls.Add(this.PathNodeLinkFlags02CheckBox); - this.PathLinkFlags0GroupBox.Controls.Add(this.PathNodeLinkFlags0UpDown); - this.PathLinkFlags0GroupBox.Controls.Add(this.PathNodeLinkFlags0Label); - this.PathLinkFlags0GroupBox.Location = new System.Drawing.Point(13, 93); - this.PathLinkFlags0GroupBox.Name = "PathLinkFlags0GroupBox"; - this.PathLinkFlags0GroupBox.Size = new System.Drawing.Size(141, 141); - this.PathLinkFlags0GroupBox.TabIndex = 16; - this.PathLinkFlags0GroupBox.TabStop = false; - this.PathLinkFlags0GroupBox.Text = "Flags 0"; - // - // PathNodeLinkFlags04UpDown - // - this.PathNodeLinkFlags04UpDown.Location = new System.Drawing.Point(71, 112); - this.PathNodeLinkFlags04UpDown.Maximum = new decimal(new int[] { - 7, - 0, - 0, - 0}); - this.PathNodeLinkFlags04UpDown.Name = "PathNodeLinkFlags04UpDown"; - this.PathNodeLinkFlags04UpDown.Size = new System.Drawing.Size(57, 20); - this.PathNodeLinkFlags04UpDown.TabIndex = 32; - this.PathNodeLinkFlags04UpDown.ValueChanged += new System.EventHandler(this.PathNodeLinkFlags04UpDown_ValueChanged); - // - // label60 - // - this.label60.AutoSize = true; - this.label60.Location = new System.Drawing.Point(26, 114); - this.label60.Name = "label60"; - this.label60.Size = new System.Drawing.Size(39, 13); - this.label60.TabIndex = 31; - this.label60.Text = "Unk 2:"; - // - // PathNodeLinkFlags03UpDown - // - this.PathNodeLinkFlags03UpDown.Location = new System.Drawing.Point(71, 88); - this.PathNodeLinkFlags03UpDown.Maximum = new decimal(new int[] { - 7, - 0, - 0, - 0}); - this.PathNodeLinkFlags03UpDown.Name = "PathNodeLinkFlags03UpDown"; - this.PathNodeLinkFlags03UpDown.Size = new System.Drawing.Size(57, 20); - this.PathNodeLinkFlags03UpDown.TabIndex = 30; - this.PathNodeLinkFlags03UpDown.ValueChanged += new System.EventHandler(this.PathNodeLinkFlags03UpDown_ValueChanged); - // - // label58 - // - this.label58.AutoSize = true; - this.label58.Location = new System.Drawing.Point(26, 90); - this.label58.Name = "label58"; - this.label58.Size = new System.Drawing.Size(39, 13); - this.label58.TabIndex = 29; - this.label58.Text = "Unk 1:"; - // - // PathNodeLinkFlags01CheckBox - // - this.PathNodeLinkFlags01CheckBox.AutoSize = true; - this.PathNodeLinkFlags01CheckBox.Location = new System.Drawing.Point(6, 45); - this.PathNodeLinkFlags01CheckBox.Name = "PathNodeLinkFlags01CheckBox"; - this.PathNodeLinkFlags01CheckBox.Size = new System.Drawing.Size(70, 17); - this.PathNodeLinkFlags01CheckBox.TabIndex = 27; - this.PathNodeLinkFlags01CheckBox.Text = "Special 1"; - this.PathNodeLinkFlags01CheckBox.UseVisualStyleBackColor = true; - this.PathNodeLinkFlags01CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeLinkFlags01CheckBox_CheckedChanged); - // - // PathNodeLinkFlags02CheckBox - // - this.PathNodeLinkFlags02CheckBox.AutoSize = true; - this.PathNodeLinkFlags02CheckBox.Location = new System.Drawing.Point(6, 66); - this.PathNodeLinkFlags02CheckBox.Name = "PathNodeLinkFlags02CheckBox"; - this.PathNodeLinkFlags02CheckBox.Size = new System.Drawing.Size(86, 17); - this.PathNodeLinkFlags02CheckBox.TabIndex = 28; - this.PathNodeLinkFlags02CheckBox.Text = "Scripted unk"; - this.PathNodeLinkFlags02CheckBox.UseVisualStyleBackColor = true; - this.PathNodeLinkFlags02CheckBox.CheckedChanged += new System.EventHandler(this.PathNodeLinkFlags02CheckBox_CheckedChanged); - // - // PathNodeLinkFlags0UpDown - // - this.PathNodeLinkFlags0UpDown.Location = new System.Drawing.Point(6, 19); - this.PathNodeLinkFlags0UpDown.Maximum = new decimal(new int[] { - 255, - 0, - 0, - 0}); - this.PathNodeLinkFlags0UpDown.Name = "PathNodeLinkFlags0UpDown"; - this.PathNodeLinkFlags0UpDown.Size = new System.Drawing.Size(62, 20); - this.PathNodeLinkFlags0UpDown.TabIndex = 25; - this.PathNodeLinkFlags0UpDown.ValueChanged += new System.EventHandler(this.PathNodeLinkFlags0UpDown_ValueChanged); - // - // PathNodeLinkFlags0Label - // - this.PathNodeLinkFlags0Label.AutoSize = true; - this.PathNodeLinkFlags0Label.Location = new System.Drawing.Point(74, 21); - this.PathNodeLinkFlags0Label.Name = "PathNodeLinkFlags0Label"; - this.PathNodeLinkFlags0Label.Size = new System.Drawing.Size(30, 13); - this.PathNodeLinkFlags0Label.TabIndex = 26; - this.PathNodeLinkFlags0Label.Text = "0x00"; - // - // PathNodeLinkageStatusLabel - // - this.PathNodeLinkageStatusLabel.AutoSize = true; - this.PathNodeLinkageStatusLabel.Location = new System.Drawing.Point(74, 33); - this.PathNodeLinkageStatusLabel.Name = "PathNodeLinkageStatusLabel"; - this.PathNodeLinkageStatusLabel.Size = new System.Drawing.Size(10, 13); - this.PathNodeLinkageStatusLabel.TabIndex = 13; - this.PathNodeLinkageStatusLabel.Text = "-"; - // - // PathNodeLinkLengthUpDown - // - this.PathNodeLinkLengthUpDown.Location = new System.Drawing.Point(74, 57); - this.PathNodeLinkLengthUpDown.Maximum = new decimal(new int[] { - 255, - 0, - 0, - 0}); - this.PathNodeLinkLengthUpDown.Name = "PathNodeLinkLengthUpDown"; - this.PathNodeLinkLengthUpDown.Size = new System.Drawing.Size(74, 20); - this.PathNodeLinkLengthUpDown.TabIndex = 15; - this.PathNodeLinkLengthUpDown.ValueChanged += new System.EventHandler(this.PathNodeLinkLengthUpDown_ValueChanged); - // - // label57 - // - this.label57.AutoSize = true; - this.label57.Location = new System.Drawing.Point(6, 59); - this.label57.Name = "label57"; - this.label57.Size = new System.Drawing.Size(62, 13); - this.label57.TabIndex = 14; - this.label57.Text = "Link length:"; - // - // PathNodeLinkNodeIDUpDown - // - this.PathNodeLinkNodeIDUpDown.Location = new System.Drawing.Point(219, 8); - this.PathNodeLinkNodeIDUpDown.Maximum = new decimal(new int[] { - 100000, - 0, - 0, - 0}); - this.PathNodeLinkNodeIDUpDown.Name = "PathNodeLinkNodeIDUpDown"; - this.PathNodeLinkNodeIDUpDown.Size = new System.Drawing.Size(74, 20); - this.PathNodeLinkNodeIDUpDown.TabIndex = 12; - this.PathNodeLinkNodeIDUpDown.ValueChanged += new System.EventHandler(this.PathNodeLinkNodeIDUpDown_ValueChanged); - // - // label51 - // - this.label51.AutoSize = true; - this.label51.Location = new System.Drawing.Point(163, 10); - this.label51.Name = "label51"; - this.label51.Size = new System.Drawing.Size(50, 13); - this.label51.TabIndex = 11; - this.label51.Text = "Node ID:"; - // - // PathNodeLinkAreaIDUpDown - // - this.PathNodeLinkAreaIDUpDown.Location = new System.Drawing.Point(74, 8); - this.PathNodeLinkAreaIDUpDown.Maximum = new decimal(new int[] { - 1023, - 0, - 0, - 0}); - this.PathNodeLinkAreaIDUpDown.Name = "PathNodeLinkAreaIDUpDown"; - this.PathNodeLinkAreaIDUpDown.Size = new System.Drawing.Size(74, 20); - this.PathNodeLinkAreaIDUpDown.TabIndex = 10; - this.PathNodeLinkAreaIDUpDown.ValueChanged += new System.EventHandler(this.PathNodeLinkAreaIDUpDown_ValueChanged); - // - // label54 - // - this.label54.AutoSize = true; - this.label54.Location = new System.Drawing.Point(22, 10); - this.label54.Name = "label54"; - this.label54.Size = new System.Drawing.Size(46, 13); - this.label54.TabIndex = 9; - this.label54.Text = "Area ID:"; - // - // PathNodeJunctionTabPage - // - this.PathNodeJunctionTabPage.Controls.Add(this.label78); - this.PathNodeJunctionTabPage.Controls.Add(this.PathNodeJunctionPanel); - this.PathNodeJunctionTabPage.Controls.Add(this.PathNodeJunctionEnableCheckBox); - this.PathNodeJunctionTabPage.Location = new System.Drawing.Point(4, 22); - this.PathNodeJunctionTabPage.Name = "PathNodeJunctionTabPage"; - this.PathNodeJunctionTabPage.Padding = new System.Windows.Forms.Padding(3); - this.PathNodeJunctionTabPage.Size = new System.Drawing.Size(499, 414); - this.PathNodeJunctionTabPage.TabIndex = 1; - this.PathNodeJunctionTabPage.Text = "Junction"; - this.PathNodeJunctionTabPage.UseVisualStyleBackColor = true; - // - // label78 - // - this.label78.AutoSize = true; - this.label78.Location = new System.Drawing.Point(182, 7); - this.label78.Name = "label78"; - this.label78.Size = new System.Drawing.Size(113, 13); - this.label78.TabIndex = 51; - this.label78.Text = "Height map byte array:"; - // - // PathNodeJunctionPanel - // - this.PathNodeJunctionPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.PathNodeJunctionPanel.Controls.Add(this.PathNodeJunctionPosYUpDown); - this.PathNodeJunctionPanel.Controls.Add(this.label59); - this.PathNodeJunctionPanel.Controls.Add(this.PathNodeJunctionPosXUpDown); - this.PathNodeJunctionPanel.Controls.Add(this.label69); - this.PathNodeJunctionPanel.Controls.Add(this.PathNodeJunctionHeightmapBytesTextBox); - this.PathNodeJunctionPanel.Controls.Add(this.PathNodeJunctionHeightmapDimYUpDown); - this.PathNodeJunctionPanel.Controls.Add(this.label77); - this.PathNodeJunctionPanel.Controls.Add(this.PathNodeJunctionHeightmapDimXUpDown); - this.PathNodeJunctionPanel.Controls.Add(this.label76); - this.PathNodeJunctionPanel.Controls.Add(this.PathNodeJunctionMinZUpDown); - this.PathNodeJunctionPanel.Controls.Add(this.label67); - this.PathNodeJunctionPanel.Controls.Add(this.PathNodeJunctionMaxZUpDown); - this.PathNodeJunctionPanel.Controls.Add(this.label65); - this.PathNodeJunctionPanel.Enabled = false; - this.PathNodeJunctionPanel.Location = new System.Drawing.Point(6, 29); - this.PathNodeJunctionPanel.Name = "PathNodeJunctionPanel"; - this.PathNodeJunctionPanel.Size = new System.Drawing.Size(490, 379); - this.PathNodeJunctionPanel.TabIndex = 1; - // - // PathNodeJunctionPosYUpDown - // - this.PathNodeJunctionPosYUpDown.Location = new System.Drawing.Point(57, 81); - this.PathNodeJunctionPosYUpDown.Maximum = new decimal(new int[] { - 32767, - 0, - 0, - 0}); - this.PathNodeJunctionPosYUpDown.Minimum = new decimal(new int[] { - 32768, - 0, - 0, - -2147483648}); - this.PathNodeJunctionPosYUpDown.Name = "PathNodeJunctionPosYUpDown"; - this.PathNodeJunctionPosYUpDown.Size = new System.Drawing.Size(86, 20); - this.PathNodeJunctionPosYUpDown.TabIndex = 53; - this.PathNodeJunctionPosYUpDown.ValueChanged += new System.EventHandler(this.PathNodeJunctionPosYUpDown_ValueChanged); - // - // label59 - // - this.label59.AutoSize = true; - this.label59.Location = new System.Drawing.Point(13, 83); - this.label59.Name = "label59"; - this.label59.Size = new System.Drawing.Size(38, 13); - this.label59.TabIndex = 54; - this.label59.Text = "Pos Y:"; - // - // PathNodeJunctionPosXUpDown - // - this.PathNodeJunctionPosXUpDown.Location = new System.Drawing.Point(57, 55); - this.PathNodeJunctionPosXUpDown.Maximum = new decimal(new int[] { - 32767, - 0, - 0, - 0}); - this.PathNodeJunctionPosXUpDown.Minimum = new decimal(new int[] { - 32768, - 0, - 0, - -2147483648}); - this.PathNodeJunctionPosXUpDown.Name = "PathNodeJunctionPosXUpDown"; - this.PathNodeJunctionPosXUpDown.Size = new System.Drawing.Size(86, 20); - this.PathNodeJunctionPosXUpDown.TabIndex = 51; - this.PathNodeJunctionPosXUpDown.ValueChanged += new System.EventHandler(this.PathNodeJunctionPosXUpDown_ValueChanged); - // - // label69 - // - this.label69.AutoSize = true; - this.label69.Location = new System.Drawing.Point(13, 57); - this.label69.Name = "label69"; - this.label69.Size = new System.Drawing.Size(38, 13); - this.label69.TabIndex = 52; - this.label69.Text = "Pos X:"; - // - // PathNodeJunctionHeightmapBytesTextBox - // - this.PathNodeJunctionHeightmapBytesTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.PathNodeJunctionHeightmapBytesTextBox.Location = new System.Drawing.Point(159, 3); - this.PathNodeJunctionHeightmapBytesTextBox.Multiline = true; - this.PathNodeJunctionHeightmapBytesTextBox.Name = "PathNodeJunctionHeightmapBytesTextBox"; - this.PathNodeJunctionHeightmapBytesTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.PathNodeJunctionHeightmapBytesTextBox.Size = new System.Drawing.Size(328, 373); - this.PathNodeJunctionHeightmapBytesTextBox.TabIndex = 50; - this.PathNodeJunctionHeightmapBytesTextBox.WordWrap = false; - this.PathNodeJunctionHeightmapBytesTextBox.TextChanged += new System.EventHandler(this.PathNodeJunctionHeightmapBytesTextBox_TextChanged); - // - // PathNodeJunctionHeightmapDimYUpDown - // - this.PathNodeJunctionHeightmapDimYUpDown.Location = new System.Drawing.Point(57, 133); - this.PathNodeJunctionHeightmapDimYUpDown.Maximum = new decimal(new int[] { - 255, - 0, - 0, - 0}); - this.PathNodeJunctionHeightmapDimYUpDown.Minimum = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.PathNodeJunctionHeightmapDimYUpDown.Name = "PathNodeJunctionHeightmapDimYUpDown"; - this.PathNodeJunctionHeightmapDimYUpDown.Size = new System.Drawing.Size(62, 20); - this.PathNodeJunctionHeightmapDimYUpDown.TabIndex = 49; - this.PathNodeJunctionHeightmapDimYUpDown.Value = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.PathNodeJunctionHeightmapDimYUpDown.ValueChanged += new System.EventHandler(this.PathNodeJunctionHeightmapDimYUpDown_ValueChanged); - // - // label77 - // - this.label77.AutoSize = true; - this.label77.Location = new System.Drawing.Point(11, 135); - this.label77.Name = "label77"; - this.label77.Size = new System.Drawing.Size(40, 13); - this.label77.TabIndex = 48; - this.label77.Text = "Size Y:"; - // - // PathNodeJunctionHeightmapDimXUpDown - // - this.PathNodeJunctionHeightmapDimXUpDown.Location = new System.Drawing.Point(57, 107); - this.PathNodeJunctionHeightmapDimXUpDown.Maximum = new decimal(new int[] { - 255, - 0, - 0, - 0}); - this.PathNodeJunctionHeightmapDimXUpDown.Minimum = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.PathNodeJunctionHeightmapDimXUpDown.Name = "PathNodeJunctionHeightmapDimXUpDown"; - this.PathNodeJunctionHeightmapDimXUpDown.Size = new System.Drawing.Size(62, 20); - this.PathNodeJunctionHeightmapDimXUpDown.TabIndex = 47; - this.PathNodeJunctionHeightmapDimXUpDown.Value = new decimal(new int[] { - 1, - 0, - 0, - 0}); - this.PathNodeJunctionHeightmapDimXUpDown.ValueChanged += new System.EventHandler(this.PathNodeJunctionHeightmapDimXUpDown_ValueChanged); - // - // label76 - // - this.label76.AutoSize = true; - this.label76.Location = new System.Drawing.Point(11, 109); - this.label76.Name = "label76"; - this.label76.Size = new System.Drawing.Size(40, 13); - this.label76.TabIndex = 46; - this.label76.Text = "Size X:"; - // - // PathNodeJunctionMinZUpDown - // - this.PathNodeJunctionMinZUpDown.Location = new System.Drawing.Point(57, 29); - this.PathNodeJunctionMinZUpDown.Maximum = new decimal(new int[] { - 32767, - 0, - 0, - 0}); - this.PathNodeJunctionMinZUpDown.Minimum = new decimal(new int[] { - 32768, - 0, - 0, - -2147483648}); - this.PathNodeJunctionMinZUpDown.Name = "PathNodeJunctionMinZUpDown"; - this.PathNodeJunctionMinZUpDown.Size = new System.Drawing.Size(86, 20); - this.PathNodeJunctionMinZUpDown.TabIndex = 32; - this.PathNodeJunctionMinZUpDown.ValueChanged += new System.EventHandler(this.PathNodeJunctionMinZUpDown_ValueChanged); - // - // label67 - // - this.label67.AutoSize = true; - this.label67.Location = new System.Drawing.Point(14, 32); - this.label67.Name = "label67"; - this.label67.Size = new System.Drawing.Size(37, 13); - this.label67.TabIndex = 33; - this.label67.Text = "Min Z:"; - // - // PathNodeJunctionMaxZUpDown - // - this.PathNodeJunctionMaxZUpDown.Location = new System.Drawing.Point(57, 3); - this.PathNodeJunctionMaxZUpDown.Maximum = new decimal(new int[] { - 32767, - 0, - 0, - 0}); - this.PathNodeJunctionMaxZUpDown.Minimum = new decimal(new int[] { - 32768, - 0, - 0, - -2147483648}); - this.PathNodeJunctionMaxZUpDown.Name = "PathNodeJunctionMaxZUpDown"; - this.PathNodeJunctionMaxZUpDown.Size = new System.Drawing.Size(86, 20); - this.PathNodeJunctionMaxZUpDown.TabIndex = 30; - this.PathNodeJunctionMaxZUpDown.ValueChanged += new System.EventHandler(this.PathNodeJunctionMaxZUpDown_ValueChanged); - // - // label65 - // - this.label65.AutoSize = true; - this.label65.Location = new System.Drawing.Point(11, 5); - this.label65.Name = "label65"; - this.label65.Size = new System.Drawing.Size(40, 13); - this.label65.TabIndex = 31; - this.label65.Text = "Max Z:"; - // - // PathNodeJunctionEnableCheckBox - // - this.PathNodeJunctionEnableCheckBox.AutoSize = true; - this.PathNodeJunctionEnableCheckBox.Location = new System.Drawing.Point(6, 6); - this.PathNodeJunctionEnableCheckBox.Name = "PathNodeJunctionEnableCheckBox"; - this.PathNodeJunctionEnableCheckBox.Size = new System.Drawing.Size(156, 17); - this.PathNodeJunctionEnableCheckBox.TabIndex = 0; - this.PathNodeJunctionEnableCheckBox.Text = "Enable Junction Heightmap"; - this.PathNodeJunctionEnableCheckBox.UseVisualStyleBackColor = true; - this.PathNodeJunctionEnableCheckBox.CheckedChanged += new System.EventHandler(this.PathNodeJunctionEnableCheckBox_CheckedChanged); - // - // YnvTabPage - // - this.YnvTabPage.Controls.Add(this.YnvTabControl); - this.YnvTabPage.Location = new System.Drawing.Point(4, 22); - this.YnvTabPage.Name = "YnvTabPage"; - this.YnvTabPage.Size = new System.Drawing.Size(521, 472); - this.YnvTabPage.TabIndex = 4; - this.YnvTabPage.Text = "Nav Mesh"; - this.YnvTabPage.UseVisualStyleBackColor = true; - // - // YnvTabControl - // - this.YnvTabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.YnvTabControl.Controls.Add(this.YnvYnvTabPage); - this.YnvTabControl.Controls.Add(this.YnvPolyTabPage); - this.YnvTabControl.Controls.Add(this.YnvPortalTabPage); - this.YnvTabControl.Location = new System.Drawing.Point(0, 3); - this.YnvTabControl.Name = "YnvTabControl"; - this.YnvTabControl.SelectedIndex = 0; - this.YnvTabControl.Size = new System.Drawing.Size(518, 469); - this.YnvTabControl.TabIndex = 0; - // - // YnvYnvTabPage - // - this.YnvYnvTabPage.Controls.Add(this.YnvPanel); - this.YnvYnvTabPage.Location = new System.Drawing.Point(4, 22); - this.YnvYnvTabPage.Name = "YnvYnvTabPage"; - this.YnvYnvTabPage.Padding = new System.Windows.Forms.Padding(3); - this.YnvYnvTabPage.Size = new System.Drawing.Size(510, 443); - this.YnvYnvTabPage.TabIndex = 0; - this.YnvYnvTabPage.Text = "Ynv"; - this.YnvYnvTabPage.UseVisualStyleBackColor = true; - // - // YnvPanel - // - this.YnvPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.YnvPanel.Controls.Add(this.YnvAABBSizeTextBox); - this.YnvPanel.Controls.Add(this.label91); - this.YnvPanel.Controls.Add(this.label89); - this.YnvPanel.Controls.Add(this.YnvAreaIDYUpDown); - this.YnvPanel.Controls.Add(this.label90); - this.YnvPanel.Controls.Add(this.YnvAreaIDXUpDown); - this.YnvPanel.Controls.Add(this.YnvAreaIDInfoLabel); - this.YnvPanel.Controls.Add(this.label92); - this.YnvPanel.Enabled = false; - this.YnvPanel.Location = new System.Drawing.Point(0, 0); - this.YnvPanel.Name = "YnvPanel"; - this.YnvPanel.Size = new System.Drawing.Size(510, 443); - this.YnvPanel.TabIndex = 0; - // - // YnvAABBSizeTextBox - // - this.YnvAABBSizeTextBox.Location = new System.Drawing.Point(107, 45); - this.YnvAABBSizeTextBox.Name = "YnvAABBSizeTextBox"; - this.YnvAABBSizeTextBox.Size = new System.Drawing.Size(138, 20); - this.YnvAABBSizeTextBox.TabIndex = 29; - // - // label91 - // - this.label91.AutoSize = true; - this.label91.Location = new System.Drawing.Point(40, 48); - this.label91.Name = "label91"; - this.label91.Size = new System.Drawing.Size(61, 13); - this.label91.TabIndex = 30; - this.label91.Text = "AABB Size:"; - // - // label89 - // - this.label89.AutoSize = true; - this.label89.Location = new System.Drawing.Point(166, 11); - this.label89.Name = "label89"; - this.label89.Size = new System.Drawing.Size(17, 13); - this.label89.TabIndex = 25; - this.label89.Text = "Y:"; - // - // YnvAreaIDYUpDown - // - this.YnvAreaIDYUpDown.Location = new System.Drawing.Point(189, 9); - this.YnvAreaIDYUpDown.Maximum = new decimal(new int[] { - 31, - 0, - 0, - 0}); - this.YnvAreaIDYUpDown.Name = "YnvAreaIDYUpDown"; - this.YnvAreaIDYUpDown.Size = new System.Drawing.Size(48, 20); - this.YnvAreaIDYUpDown.TabIndex = 24; - // - // label90 - // - this.label90.AutoSize = true; - this.label90.Location = new System.Drawing.Point(84, 11); - this.label90.Name = "label90"; - this.label90.Size = new System.Drawing.Size(17, 13); - this.label90.TabIndex = 23; - this.label90.Text = "X:"; - // - // YnvAreaIDXUpDown - // - this.YnvAreaIDXUpDown.Location = new System.Drawing.Point(107, 9); - this.YnvAreaIDXUpDown.Maximum = new decimal(new int[] { - 31, - 0, - 0, - 0}); - this.YnvAreaIDXUpDown.Name = "YnvAreaIDXUpDown"; - this.YnvAreaIDXUpDown.Size = new System.Drawing.Size(48, 20); - this.YnvAreaIDXUpDown.TabIndex = 22; - // - // YnvAreaIDInfoLabel - // - this.YnvAreaIDInfoLabel.AutoSize = true; - this.YnvAreaIDInfoLabel.Location = new System.Drawing.Point(254, 11); - this.YnvAreaIDInfoLabel.Name = "YnvAreaIDInfoLabel"; - this.YnvAreaIDInfoLabel.Size = new System.Drawing.Size(30, 13); - this.YnvAreaIDInfoLabel.TabIndex = 21; - this.YnvAreaIDInfoLabel.Text = "ID: 0"; - // - // label92 - // - this.label92.AutoSize = true; - this.label92.Location = new System.Drawing.Point(28, 11); - this.label92.Name = "label92"; - this.label92.Size = new System.Drawing.Size(46, 13); - this.label92.TabIndex = 20; - this.label92.Text = "Area ID:"; - // - // YnvPolyTabPage - // - this.YnvPolyTabPage.Controls.Add(this.YnvPolygonPanel); - this.YnvPolyTabPage.Location = new System.Drawing.Point(4, 22); - this.YnvPolyTabPage.Name = "YnvPolyTabPage"; - this.YnvPolyTabPage.Padding = new System.Windows.Forms.Padding(3); - this.YnvPolyTabPage.Size = new System.Drawing.Size(510, 443); - this.YnvPolyTabPage.TabIndex = 1; - this.YnvPolyTabPage.Text = "Polygon"; - this.YnvPolyTabPage.UseVisualStyleBackColor = true; - // - // YnvPolygonPanel - // - this.YnvPolygonPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.YnvPolygonPanel.Enabled = false; - this.YnvPolygonPanel.Location = new System.Drawing.Point(0, 0); - this.YnvPolygonPanel.Name = "YnvPolygonPanel"; - this.YnvPolygonPanel.Size = new System.Drawing.Size(510, 443); - this.YnvPolygonPanel.TabIndex = 1; - // - // YnvPortalTabPage - // - this.YnvPortalTabPage.Controls.Add(this.YnvPortalPanel); - this.YnvPortalTabPage.Location = new System.Drawing.Point(4, 22); - this.YnvPortalTabPage.Name = "YnvPortalTabPage"; - this.YnvPortalTabPage.Size = new System.Drawing.Size(510, 443); - this.YnvPortalTabPage.TabIndex = 2; - this.YnvPortalTabPage.Text = "Portal"; - this.YnvPortalTabPage.UseVisualStyleBackColor = true; - // - // YnvPortalPanel - // - this.YnvPortalPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.YnvPortalPanel.Enabled = false; - this.YnvPortalPanel.Location = new System.Drawing.Point(0, 0); - this.YnvPortalPanel.Name = "YnvPortalPanel"; - this.YnvPortalPanel.Size = new System.Drawing.Size(510, 443); - this.YnvPortalPanel.TabIndex = 1; - // - // TrainsTabPage - // - this.TrainsTabPage.Controls.Add(this.TrainsTabControl); - this.TrainsTabPage.Location = new System.Drawing.Point(4, 22); - this.TrainsTabPage.Name = "TrainsTabPage"; - this.TrainsTabPage.Size = new System.Drawing.Size(521, 472); - this.TrainsTabPage.TabIndex = 3; - this.TrainsTabPage.Text = "Trains"; - this.TrainsTabPage.UseVisualStyleBackColor = true; - // - // TrainsTabControl - // - this.TrainsTabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.TrainsTabControl.Controls.Add(this.TrainTrackTabPage); - this.TrainsTabControl.Controls.Add(this.TrainNodeTabPage); - this.TrainsTabControl.Location = new System.Drawing.Point(0, 3); - this.TrainsTabControl.Name = "TrainsTabControl"; - this.TrainsTabControl.SelectedIndex = 0; - this.TrainsTabControl.Size = new System.Drawing.Size(518, 469); - this.TrainsTabControl.TabIndex = 0; - // - // TrainTrackTabPage - // - this.TrainTrackTabPage.Controls.Add(this.TrainTrackFilePanel); - this.TrainTrackTabPage.Location = new System.Drawing.Point(4, 22); - this.TrainTrackTabPage.Name = "TrainTrackTabPage"; - this.TrainTrackTabPage.Padding = new System.Windows.Forms.Padding(3); - this.TrainTrackTabPage.Size = new System.Drawing.Size(510, 443); - this.TrainTrackTabPage.TabIndex = 0; - this.TrainTrackTabPage.Text = "Track File"; - this.TrainTrackTabPage.UseVisualStyleBackColor = true; - // - // TrainTrackFilePanel - // - this.TrainTrackFilePanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.TrainTrackFilePanel.Controls.Add(this.TrainTrackInfoLabel); - this.TrainTrackFilePanel.Controls.Add(this.label86); - this.TrainTrackFilePanel.Controls.Add(this.TrainTrackBrakingDistTextBox); - this.TrainTrackFilePanel.Controls.Add(this.label85); - this.TrainTrackFilePanel.Controls.Add(this.TrainTrackSpeedTextBox); - this.TrainTrackFilePanel.Controls.Add(this.TrainTrackMPStopsAtStationsCheckBox); - this.TrainTrackFilePanel.Controls.Add(this.TrainTrackStopsAtStationsCheckBox); - this.TrainTrackFilePanel.Controls.Add(this.TrainTrackIsPingPongCheckBox); - this.TrainTrackFilePanel.Controls.Add(this.label84); - this.TrainTrackFilePanel.Controls.Add(this.TrainTrackConfigNameTextBox); - this.TrainTrackFilePanel.Controls.Add(this.label83); - this.TrainTrackFilePanel.Controls.Add(this.TrainTrackFilenameTextBox); - this.TrainTrackFilePanel.Controls.Add(this.label74); - this.TrainTrackFilePanel.Controls.Add(this.TrainTrackProjectPathTextBox); - this.TrainTrackFilePanel.Controls.Add(this.label79); - this.TrainTrackFilePanel.Controls.Add(this.TrainTrackFilePathTextBox); - this.TrainTrackFilePanel.Controls.Add(this.label80); - this.TrainTrackFilePanel.Controls.Add(this.TrainTrackRpfPathTextBox); - this.TrainTrackFilePanel.Enabled = false; - this.TrainTrackFilePanel.Location = new System.Drawing.Point(0, 0); - this.TrainTrackFilePanel.Name = "TrainTrackFilePanel"; - this.TrainTrackFilePanel.Size = new System.Drawing.Size(510, 443); - this.TrainTrackFilePanel.TabIndex = 1; - // - // TrainTrackInfoLabel - // - this.TrainTrackInfoLabel.AutoSize = true; - this.TrainTrackInfoLabel.Location = new System.Drawing.Point(97, 133); - this.TrainTrackInfoLabel.Name = "TrainTrackInfoLabel"; - this.TrainTrackInfoLabel.Size = new System.Drawing.Size(10, 13); - this.TrainTrackInfoLabel.TabIndex = 36; - this.TrainTrackInfoLabel.Text = "-"; - // - // label86 - // - this.label86.AutoSize = true; - this.label86.Location = new System.Drawing.Point(282, 84); - this.label86.Name = "label86"; - this.label86.Size = new System.Drawing.Size(63, 13); - this.label86.TabIndex = 32; - this.label86.Text = "brakingDist:"; - // - // TrainTrackBrakingDistTextBox - // - this.TrainTrackBrakingDistTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.TrainTrackBrakingDistTextBox.Location = new System.Drawing.Point(351, 81); - this.TrainTrackBrakingDistTextBox.Name = "TrainTrackBrakingDistTextBox"; - this.TrainTrackBrakingDistTextBox.ReadOnly = true; - this.TrainTrackBrakingDistTextBox.Size = new System.Drawing.Size(107, 20); - this.TrainTrackBrakingDistTextBox.TabIndex = 31; - // - // label85 - // - this.label85.AutoSize = true; - this.label85.Location = new System.Drawing.Point(55, 84); - this.label85.Name = "label85"; - this.label85.Size = new System.Drawing.Size(39, 13); - this.label85.TabIndex = 30; - this.label85.Text = "speed:"; - // - // TrainTrackSpeedTextBox - // - this.TrainTrackSpeedTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.TrainTrackSpeedTextBox.Location = new System.Drawing.Point(100, 81); - this.TrainTrackSpeedTextBox.Name = "TrainTrackSpeedTextBox"; - this.TrainTrackSpeedTextBox.ReadOnly = true; - this.TrainTrackSpeedTextBox.Size = new System.Drawing.Size(107, 20); - this.TrainTrackSpeedTextBox.TabIndex = 29; - // - // TrainTrackMPStopsAtStationsCheckBox - // - this.TrainTrackMPStopsAtStationsCheckBox.AutoSize = true; - this.TrainTrackMPStopsAtStationsCheckBox.Enabled = false; - this.TrainTrackMPStopsAtStationsCheckBox.Location = new System.Drawing.Point(351, 58); - this.TrainTrackMPStopsAtStationsCheckBox.Name = "TrainTrackMPStopsAtStationsCheckBox"; - this.TrainTrackMPStopsAtStationsCheckBox.Size = new System.Drawing.Size(115, 17); - this.TrainTrackMPStopsAtStationsCheckBox.TabIndex = 28; - this.TrainTrackMPStopsAtStationsCheckBox.Text = "MPstopsAtStations"; - this.TrainTrackMPStopsAtStationsCheckBox.UseVisualStyleBackColor = true; - // - // TrainTrackStopsAtStationsCheckBox - // - this.TrainTrackStopsAtStationsCheckBox.AutoSize = true; - this.TrainTrackStopsAtStationsCheckBox.Enabled = false; - this.TrainTrackStopsAtStationsCheckBox.Location = new System.Drawing.Point(225, 58); - this.TrainTrackStopsAtStationsCheckBox.Name = "TrainTrackStopsAtStationsCheckBox"; - this.TrainTrackStopsAtStationsCheckBox.Size = new System.Drawing.Size(99, 17); - this.TrainTrackStopsAtStationsCheckBox.TabIndex = 27; - this.TrainTrackStopsAtStationsCheckBox.Text = "stopsAtStations"; - this.TrainTrackStopsAtStationsCheckBox.UseVisualStyleBackColor = true; - // - // TrainTrackIsPingPongCheckBox - // - this.TrainTrackIsPingPongCheckBox.AutoSize = true; - this.TrainTrackIsPingPongCheckBox.Enabled = false; - this.TrainTrackIsPingPongCheckBox.Location = new System.Drawing.Point(100, 58); - this.TrainTrackIsPingPongCheckBox.Name = "TrainTrackIsPingPongCheckBox"; - this.TrainTrackIsPingPongCheckBox.Size = new System.Drawing.Size(107, 17); - this.TrainTrackIsPingPongCheckBox.TabIndex = 26; - this.TrainTrackIsPingPongCheckBox.Text = "isPingPongTrack"; - this.TrainTrackIsPingPongCheckBox.UseVisualStyleBackColor = true; - // - // label84 - // - this.label84.AutoSize = true; - this.label84.Location = new System.Drawing.Point(6, 35); - this.label84.Name = "label84"; - this.label84.Size = new System.Drawing.Size(88, 13); - this.label84.TabIndex = 25; - this.label84.Text = "trainConfigName:"; - // - // TrainTrackConfigNameTextBox - // - this.TrainTrackConfigNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.TrainTrackConfigNameTextBox.Location = new System.Drawing.Point(100, 32); - this.TrainTrackConfigNameTextBox.Name = "TrainTrackConfigNameTextBox"; - this.TrainTrackConfigNameTextBox.ReadOnly = true; - this.TrainTrackConfigNameTextBox.Size = new System.Drawing.Size(366, 20); - this.TrainTrackConfigNameTextBox.TabIndex = 24; - // - // label83 - // - this.label83.AutoSize = true; - this.label83.Location = new System.Drawing.Point(45, 9); - this.label83.Name = "label83"; - this.label83.Size = new System.Drawing.Size(49, 13); - this.label83.TabIndex = 23; - this.label83.Text = "filename:"; - // - // TrainTrackFilenameTextBox - // - this.TrainTrackFilenameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.TrainTrackFilenameTextBox.Location = new System.Drawing.Point(100, 6); - this.TrainTrackFilenameTextBox.Name = "TrainTrackFilenameTextBox"; - this.TrainTrackFilenameTextBox.ReadOnly = true; - this.TrainTrackFilenameTextBox.Size = new System.Drawing.Size(366, 20); - this.TrainTrackFilenameTextBox.TabIndex = 22; - // - // label74 - // - this.label74.AutoSize = true; - this.label74.Location = new System.Drawing.Point(6, 254); - this.label74.Name = "label74"; - this.label74.Size = new System.Drawing.Size(68, 13); - this.label74.TabIndex = 21; - this.label74.Text = "Project Path:"; - // - // TrainTrackProjectPathTextBox - // - this.TrainTrackProjectPathTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.TrainTrackProjectPathTextBox.Location = new System.Drawing.Point(80, 251); - this.TrainTrackProjectPathTextBox.Name = "TrainTrackProjectPathTextBox"; - this.TrainTrackProjectPathTextBox.ReadOnly = true; - this.TrainTrackProjectPathTextBox.Size = new System.Drawing.Size(386, 20); - this.TrainTrackProjectPathTextBox.TabIndex = 35; - // - // label79 - // - this.label79.AutoSize = true; - this.label79.Location = new System.Drawing.Point(6, 228); - this.label79.Name = "label79"; - this.label79.Size = new System.Drawing.Size(51, 13); - this.label79.TabIndex = 19; - this.label79.Text = "File Path:"; - // - // TrainTrackFilePathTextBox - // - this.TrainTrackFilePathTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.TrainTrackFilePathTextBox.Location = new System.Drawing.Point(80, 225); - this.TrainTrackFilePathTextBox.Name = "TrainTrackFilePathTextBox"; - this.TrainTrackFilePathTextBox.ReadOnly = true; - this.TrainTrackFilePathTextBox.Size = new System.Drawing.Size(386, 20); - this.TrainTrackFilePathTextBox.TabIndex = 34; - // - // label80 - // - this.label80.AutoSize = true; - this.label80.Location = new System.Drawing.Point(6, 202); - this.label80.Name = "label80"; - this.label80.Size = new System.Drawing.Size(52, 13); - this.label80.TabIndex = 17; - this.label80.Text = "Rpf Path:"; - // - // TrainTrackRpfPathTextBox - // - this.TrainTrackRpfPathTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.TrainTrackRpfPathTextBox.Location = new System.Drawing.Point(80, 199); - this.TrainTrackRpfPathTextBox.Name = "TrainTrackRpfPathTextBox"; - this.TrainTrackRpfPathTextBox.ReadOnly = true; - this.TrainTrackRpfPathTextBox.Size = new System.Drawing.Size(386, 20); - this.TrainTrackRpfPathTextBox.TabIndex = 33; - // - // TrainNodeTabPage - // - this.TrainNodeTabPage.Controls.Add(this.TrainNodePanel); - this.TrainNodeTabPage.Location = new System.Drawing.Point(4, 22); - this.TrainNodeTabPage.Name = "TrainNodeTabPage"; - this.TrainNodeTabPage.Padding = new System.Windows.Forms.Padding(3); - this.TrainNodeTabPage.Size = new System.Drawing.Size(510, 443); - this.TrainNodeTabPage.TabIndex = 1; - this.TrainNodeTabPage.Text = "Node"; - this.TrainNodeTabPage.UseVisualStyleBackColor = true; - // - // TrainNodePanel - // - this.TrainNodePanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.TrainNodePanel.Controls.Add(this.TrainNodeTypeComboBox); - this.TrainNodePanel.Controls.Add(this.label82); - this.TrainNodePanel.Controls.Add(this.TrainNodeDeleteButton); - this.TrainNodePanel.Controls.Add(this.TrainNodeAddToProjectButton); - this.TrainNodePanel.Controls.Add(this.TrainNodeGoToButton); - this.TrainNodePanel.Controls.Add(this.TrainNodePositionTextBox); - this.TrainNodePanel.Controls.Add(this.label81); - this.TrainNodePanel.Enabled = false; - this.TrainNodePanel.Location = new System.Drawing.Point(0, 0); - this.TrainNodePanel.Name = "TrainNodePanel"; - this.TrainNodePanel.Size = new System.Drawing.Size(510, 443); - this.TrainNodePanel.TabIndex = 0; - // - // TrainNodeTypeComboBox - // - this.TrainNodeTypeComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.TrainNodeTypeComboBox.FormattingEnabled = true; - this.TrainNodeTypeComboBox.Items.AddRange(new object[] { - "0 - Default", - "1 - Default Station", - "2 - Freight Station", - "3 - (Not used)", - "4 - Underground", - "5 - Underground Station"}); - this.TrainNodeTypeComboBox.Location = new System.Drawing.Point(75, 62); - this.TrainNodeTypeComboBox.Name = "TrainNodeTypeComboBox"; - this.TrainNodeTypeComboBox.Size = new System.Drawing.Size(142, 21); - this.TrainNodeTypeComboBox.TabIndex = 40; - this.TrainNodeTypeComboBox.SelectedIndexChanged += new System.EventHandler(this.TrainNodeTypeComboBox_SelectedIndexChanged); - // - // label82 - // - this.label82.AutoSize = true; - this.label82.Location = new System.Drawing.Point(22, 65); - this.label82.Name = "label82"; - this.label82.Size = new System.Drawing.Size(34, 13); - this.label82.TabIndex = 39; - this.label82.Text = "Type:"; - // - // TrainNodeDeleteButton - // - this.TrainNodeDeleteButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.TrainNodeDeleteButton.Enabled = false; - this.TrainNodeDeleteButton.Location = new System.Drawing.Point(401, 99); - this.TrainNodeDeleteButton.Name = "TrainNodeDeleteButton"; - this.TrainNodeDeleteButton.Size = new System.Drawing.Size(90, 23); - this.TrainNodeDeleteButton.TabIndex = 42; - this.TrainNodeDeleteButton.Text = "Delete Node"; - this.TrainNodeDeleteButton.UseVisualStyleBackColor = true; - this.TrainNodeDeleteButton.Click += new System.EventHandler(this.TrainNodeDeleteButton_Click); - // - // TrainNodeAddToProjectButton - // - this.TrainNodeAddToProjectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.TrainNodeAddToProjectButton.Enabled = false; - this.TrainNodeAddToProjectButton.Location = new System.Drawing.Point(305, 99); - this.TrainNodeAddToProjectButton.Name = "TrainNodeAddToProjectButton"; - this.TrainNodeAddToProjectButton.Size = new System.Drawing.Size(90, 23); - this.TrainNodeAddToProjectButton.TabIndex = 41; - this.TrainNodeAddToProjectButton.Text = "Add to Project"; - this.TrainNodeAddToProjectButton.UseVisualStyleBackColor = true; - this.TrainNodeAddToProjectButton.Click += new System.EventHandler(this.TrainNodeAddToProjectButton_Click); - // - // TrainNodeGoToButton - // - this.TrainNodeGoToButton.Location = new System.Drawing.Point(305, 27); - this.TrainNodeGoToButton.Name = "TrainNodeGoToButton"; - this.TrainNodeGoToButton.Size = new System.Drawing.Size(68, 23); - this.TrainNodeGoToButton.TabIndex = 35; - this.TrainNodeGoToButton.Text = "Go to"; - this.TrainNodeGoToButton.UseVisualStyleBackColor = true; - this.TrainNodeGoToButton.Click += new System.EventHandler(this.TrainNodeGoToButton_Click); - // - // TrainNodePositionTextBox - // - this.TrainNodePositionTextBox.Location = new System.Drawing.Point(75, 29); - this.TrainNodePositionTextBox.Name = "TrainNodePositionTextBox"; - this.TrainNodePositionTextBox.Size = new System.Drawing.Size(224, 20); - this.TrainNodePositionTextBox.TabIndex = 34; - this.TrainNodePositionTextBox.TextChanged += new System.EventHandler(this.TrainNodePositionTextBox_TextChanged); - // - // label81 - // - this.label81.AutoSize = true; - this.label81.Location = new System.Drawing.Point(22, 32); - this.label81.Name = "label81"; - this.label81.Size = new System.Drawing.Size(47, 13); - this.label81.TabIndex = 38; - this.label81.Text = "Position:"; - // - // ScenarioTabPage - // - this.ScenarioTabPage.Controls.Add(this.ScenarioTabControl); - this.ScenarioTabPage.Location = new System.Drawing.Point(4, 22); - this.ScenarioTabPage.Name = "ScenarioTabPage"; - this.ScenarioTabPage.Size = new System.Drawing.Size(521, 472); - this.ScenarioTabPage.TabIndex = 5; - this.ScenarioTabPage.Text = "Scenario"; - this.ScenarioTabPage.UseVisualStyleBackColor = true; - // - // ScenarioTabControl - // - this.ScenarioTabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioTabControl.Controls.Add(this.ScenarioYmtTabPage); - this.ScenarioTabControl.Controls.Add(this.ScenarioPointTabPage); - this.ScenarioTabControl.Controls.Add(this.ScenarioEntityTabPage); - this.ScenarioTabControl.Controls.Add(this.ScenarioEntityPointTabPage); - this.ScenarioTabControl.Controls.Add(this.ScenarioChainTabPage); - this.ScenarioTabControl.Controls.Add(this.ScenarioChainNodeTabPage); - this.ScenarioTabControl.Controls.Add(this.ScenarioClusterTabPage); - this.ScenarioTabControl.Controls.Add(this.ScenarioClusterPointTabPage); - this.ScenarioTabControl.Location = new System.Drawing.Point(0, 3); - this.ScenarioTabControl.Name = "ScenarioTabControl"; - this.ScenarioTabControl.SelectedIndex = 0; - this.ScenarioTabControl.Size = new System.Drawing.Size(518, 469); - this.ScenarioTabControl.TabIndex = 0; - // - // ScenarioYmtTabPage - // - this.ScenarioYmtTabPage.Controls.Add(this.ScenarioYmtPanel); - this.ScenarioYmtTabPage.Location = new System.Drawing.Point(4, 22); - this.ScenarioYmtTabPage.Name = "ScenarioYmtTabPage"; - this.ScenarioYmtTabPage.Padding = new System.Windows.Forms.Padding(3); - this.ScenarioYmtTabPage.Size = new System.Drawing.Size(510, 443); - this.ScenarioYmtTabPage.TabIndex = 0; - this.ScenarioYmtTabPage.Text = "Ymt"; - this.ScenarioYmtTabPage.UseVisualStyleBackColor = true; - // - // ScenarioYmtPanel - // - this.ScenarioYmtPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioYmtPanel.Controls.Add(this.ScenarioYmtExtentsMaxTextBox); - this.ScenarioYmtPanel.Controls.Add(this.label103); - this.ScenarioYmtPanel.Controls.Add(this.ScenarioYmtExtentsMinTextBox); - this.ScenarioYmtPanel.Controls.Add(this.label150); - this.ScenarioYmtPanel.Controls.Add(this.ScenarioYmtGridInfoLabel); - this.ScenarioYmtPanel.Controls.Add(this.ScenarioYmtGridScaleTextBox); - this.ScenarioYmtPanel.Controls.Add(this.label96); - this.ScenarioYmtPanel.Controls.Add(this.ScenarioYmtProjectPathTextBox); - this.ScenarioYmtPanel.Controls.Add(this.label66); - this.ScenarioYmtPanel.Controls.Add(this.ScenarioYmtFileLocationTextBox); - this.ScenarioYmtPanel.Controls.Add(this.label72); - this.ScenarioYmtPanel.Controls.Add(this.ScenarioYmtGridMaxTextBox); - this.ScenarioYmtPanel.Controls.Add(this.label73); - this.ScenarioYmtPanel.Controls.Add(this.ScenarioYmtGridMinTextBox); - this.ScenarioYmtPanel.Controls.Add(this.label75); - this.ScenarioYmtPanel.Controls.Add(this.ScenarioYmtVersionTextBox); - this.ScenarioYmtPanel.Controls.Add(this.label64); - this.ScenarioYmtPanel.Controls.Add(this.ScenarioYmtNameTextBox); - this.ScenarioYmtPanel.Controls.Add(this.label63); - this.ScenarioYmtPanel.Enabled = false; - this.ScenarioYmtPanel.Location = new System.Drawing.Point(0, 0); - this.ScenarioYmtPanel.Name = "ScenarioYmtPanel"; - this.ScenarioYmtPanel.Size = new System.Drawing.Size(510, 443); - this.ScenarioYmtPanel.TabIndex = 0; - // - // ScenarioYmtExtentsMaxTextBox - // - this.ScenarioYmtExtentsMaxTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioYmtExtentsMaxTextBox.Location = new System.Drawing.Point(94, 256); - this.ScenarioYmtExtentsMaxTextBox.Name = "ScenarioYmtExtentsMaxTextBox"; - this.ScenarioYmtExtentsMaxTextBox.ReadOnly = true; - this.ScenarioYmtExtentsMaxTextBox.Size = new System.Drawing.Size(277, 20); - this.ScenarioYmtExtentsMaxTextBox.TabIndex = 15; - // - // label103 - // - this.label103.AutoSize = true; - this.label103.Location = new System.Drawing.Point(6, 259); - this.label103.Name = "label103"; - this.label103.Size = new System.Drawing.Size(68, 13); - this.label103.TabIndex = 14; - this.label103.Text = "Extents Max:"; - // - // ScenarioYmtExtentsMinTextBox - // - this.ScenarioYmtExtentsMinTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioYmtExtentsMinTextBox.Location = new System.Drawing.Point(94, 230); - this.ScenarioYmtExtentsMinTextBox.Name = "ScenarioYmtExtentsMinTextBox"; - this.ScenarioYmtExtentsMinTextBox.ReadOnly = true; - this.ScenarioYmtExtentsMinTextBox.Size = new System.Drawing.Size(277, 20); - this.ScenarioYmtExtentsMinTextBox.TabIndex = 13; - // - // label150 - // - this.label150.AutoSize = true; - this.label150.Location = new System.Drawing.Point(6, 233); - this.label150.Name = "label150"; - this.label150.Size = new System.Drawing.Size(65, 13); - this.label150.TabIndex = 12; - this.label150.Text = "Extents Min:"; - // - // ScenarioYmtGridInfoLabel - // - this.ScenarioYmtGridInfoLabel.AutoSize = true; - this.ScenarioYmtGridInfoLabel.Location = new System.Drawing.Point(91, 169); - this.ScenarioYmtGridInfoLabel.Name = "ScenarioYmtGridInfoLabel"; - this.ScenarioYmtGridInfoLabel.Size = new System.Drawing.Size(94, 13); - this.ScenarioYmtGridInfoLabel.TabIndex = 11; - this.ScenarioYmtGridInfoLabel.Text = "Total grid points: 0"; - // - // ScenarioYmtGridScaleTextBox - // - this.ScenarioYmtGridScaleTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioYmtGridScaleTextBox.Location = new System.Drawing.Point(94, 131); - this.ScenarioYmtGridScaleTextBox.Name = "ScenarioYmtGridScaleTextBox"; - this.ScenarioYmtGridScaleTextBox.ReadOnly = true; - this.ScenarioYmtGridScaleTextBox.Size = new System.Drawing.Size(277, 20); - this.ScenarioYmtGridScaleTextBox.TabIndex = 10; - // - // label96 - // - this.label96.AutoSize = true; - this.label96.Location = new System.Drawing.Point(6, 134); - this.label96.Name = "label96"; - this.label96.Size = new System.Drawing.Size(59, 13); - this.label96.TabIndex = 9; - this.label96.Text = "Grid Scale:"; - // - // ScenarioYmtProjectPathTextBox - // - this.ScenarioYmtProjectPathTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioYmtProjectPathTextBox.Location = new System.Drawing.Point(94, 379); - this.ScenarioYmtProjectPathTextBox.Name = "ScenarioYmtProjectPathTextBox"; - this.ScenarioYmtProjectPathTextBox.ReadOnly = true; - this.ScenarioYmtProjectPathTextBox.Size = new System.Drawing.Size(404, 20); - this.ScenarioYmtProjectPathTextBox.TabIndex = 19; - // - // label66 - // - this.label66.AutoSize = true; - this.label66.Location = new System.Drawing.Point(6, 382); - this.label66.Name = "label66"; - this.label66.Size = new System.Drawing.Size(67, 13); - this.label66.TabIndex = 18; - this.label66.Text = "Project path:"; - // - // ScenarioYmtFileLocationTextBox - // - this.ScenarioYmtFileLocationTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioYmtFileLocationTextBox.Location = new System.Drawing.Point(94, 353); - this.ScenarioYmtFileLocationTextBox.Name = "ScenarioYmtFileLocationTextBox"; - this.ScenarioYmtFileLocationTextBox.ReadOnly = true; - this.ScenarioYmtFileLocationTextBox.Size = new System.Drawing.Size(404, 20); - this.ScenarioYmtFileLocationTextBox.TabIndex = 17; - // - // label72 - // - this.label72.AutoSize = true; - this.label72.Location = new System.Drawing.Point(6, 356); - this.label72.Name = "label72"; - this.label72.Size = new System.Drawing.Size(66, 13); - this.label72.TabIndex = 16; - this.label72.Text = "File location:"; - // - // ScenarioYmtGridMaxTextBox - // - this.ScenarioYmtGridMaxTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioYmtGridMaxTextBox.Location = new System.Drawing.Point(94, 105); - this.ScenarioYmtGridMaxTextBox.Name = "ScenarioYmtGridMaxTextBox"; - this.ScenarioYmtGridMaxTextBox.ReadOnly = true; - this.ScenarioYmtGridMaxTextBox.Size = new System.Drawing.Size(277, 20); - this.ScenarioYmtGridMaxTextBox.TabIndex = 8; - // - // label73 - // - this.label73.AutoSize = true; - this.label73.Location = new System.Drawing.Point(6, 108); - this.label73.Name = "label73"; - this.label73.Size = new System.Drawing.Size(52, 13); - this.label73.TabIndex = 7; - this.label73.Text = "Grid Max:"; - // - // ScenarioYmtGridMinTextBox - // - this.ScenarioYmtGridMinTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioYmtGridMinTextBox.Location = new System.Drawing.Point(94, 79); - this.ScenarioYmtGridMinTextBox.Name = "ScenarioYmtGridMinTextBox"; - this.ScenarioYmtGridMinTextBox.ReadOnly = true; - this.ScenarioYmtGridMinTextBox.Size = new System.Drawing.Size(277, 20); - this.ScenarioYmtGridMinTextBox.TabIndex = 6; - // - // label75 - // - this.label75.AutoSize = true; - this.label75.Location = new System.Drawing.Point(6, 82); - this.label75.Name = "label75"; - this.label75.Size = new System.Drawing.Size(49, 13); - this.label75.TabIndex = 5; - this.label75.Text = "Grid Min:"; - // - // ScenarioYmtVersionTextBox - // - this.ScenarioYmtVersionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioYmtVersionTextBox.Location = new System.Drawing.Point(94, 36); - this.ScenarioYmtVersionTextBox.Name = "ScenarioYmtVersionTextBox"; - this.ScenarioYmtVersionTextBox.Size = new System.Drawing.Size(277, 20); - this.ScenarioYmtVersionTextBox.TabIndex = 4; - this.ScenarioYmtVersionTextBox.TextChanged += new System.EventHandler(this.ScenarioYmtVersionTextBox_TextChanged); - // - // label64 - // - this.label64.AutoSize = true; - this.label64.Location = new System.Drawing.Point(6, 39); - this.label64.Name = "label64"; - this.label64.Size = new System.Drawing.Size(82, 13); - this.label64.TabIndex = 3; - this.label64.Text = "VersionNumber:"; - // - // ScenarioYmtNameTextBox - // - this.ScenarioYmtNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioYmtNameTextBox.Location = new System.Drawing.Point(94, 10); - this.ScenarioYmtNameTextBox.Name = "ScenarioYmtNameTextBox"; - this.ScenarioYmtNameTextBox.ReadOnly = true; - this.ScenarioYmtNameTextBox.Size = new System.Drawing.Size(277, 20); - this.ScenarioYmtNameTextBox.TabIndex = 2; - // - // label63 - // - this.label63.AutoSize = true; - this.label63.Location = new System.Drawing.Point(6, 13); - this.label63.Name = "label63"; - this.label63.Size = new System.Drawing.Size(38, 13); - this.label63.TabIndex = 1; - this.label63.Text = "Name:"; - // - // ScenarioPointTabPage - // - this.ScenarioPointTabPage.Controls.Add(this.ScenarioPointOuterPanel); - this.ScenarioPointTabPage.Location = new System.Drawing.Point(4, 22); - this.ScenarioPointTabPage.Name = "ScenarioPointTabPage"; - this.ScenarioPointTabPage.Padding = new System.Windows.Forms.Padding(3); - this.ScenarioPointTabPage.Size = new System.Drawing.Size(510, 443); - this.ScenarioPointTabPage.TabIndex = 1; - this.ScenarioPointTabPage.Text = "Point"; - this.ScenarioPointTabPage.UseVisualStyleBackColor = true; - // - // ScenarioPointOuterPanel - // - this.ScenarioPointOuterPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioPointOuterPanel.Controls.Add(this.ScenarioPointCheckBox); - this.ScenarioPointOuterPanel.Controls.Add(this.ScenarioPointPanel); - this.ScenarioPointOuterPanel.Controls.Add(this.ScenarioPointDeleteButton); - this.ScenarioPointOuterPanel.Controls.Add(this.ScenarioPointAddToProjectButton); - this.ScenarioPointOuterPanel.Location = new System.Drawing.Point(0, 0); - this.ScenarioPointOuterPanel.Name = "ScenarioPointOuterPanel"; - this.ScenarioPointOuterPanel.Size = new System.Drawing.Size(510, 443); - this.ScenarioPointOuterPanel.TabIndex = 1; - // - // ScenarioPointCheckBox - // - this.ScenarioPointCheckBox.AutoSize = true; - this.ScenarioPointCheckBox.Location = new System.Drawing.Point(6, 6); - this.ScenarioPointCheckBox.Name = "ScenarioPointCheckBox"; - this.ScenarioPointCheckBox.Size = new System.Drawing.Size(98, 17); - this.ScenarioPointCheckBox.TabIndex = 1; - this.ScenarioPointCheckBox.Text = "Define MyPoint"; - this.ScenarioPointCheckBox.UseVisualStyleBackColor = true; - this.ScenarioPointCheckBox.CheckedChanged += new System.EventHandler(this.ScenarioPointCheckBox_CheckedChanged); - // - // ScenarioPointPanel - // - this.ScenarioPointPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioPointPanel.Controls.Add(this.ScenarioPointImapHashLabel); - this.ScenarioPointPanel.Controls.Add(this.ScenarioPointImapTextBox); - this.ScenarioPointPanel.Controls.Add(this.label110); - this.ScenarioPointPanel.Controls.Add(this.ScenarioPointGroupHashLabel); - this.ScenarioPointPanel.Controls.Add(this.ScenarioPointGroupTextBox); - this.ScenarioPointPanel.Controls.Add(this.label156); - this.ScenarioPointPanel.Controls.Add(this.ScenarioPointInteriorHashLabel); - this.ScenarioPointPanel.Controls.Add(this.ScenarioPointFlagsCheckedListBox); - this.ScenarioPointPanel.Controls.Add(this.label111); - this.ScenarioPointPanel.Controls.Add(this.ScenarioPointDirectionTextBox); - this.ScenarioPointPanel.Controls.Add(this.label97); - this.ScenarioPointPanel.Controls.Add(this.ScenarioPointFlagsValueUpDown); - this.ScenarioPointPanel.Controls.Add(this.label109); - this.ScenarioPointPanel.Controls.Add(this.ScenarioPointGoToButton); - this.ScenarioPointPanel.Controls.Add(this.ScenarioPointWaitTimeUpDown); - this.ScenarioPointPanel.Controls.Add(this.ScenarioPointPositionTextBox); - this.ScenarioPointPanel.Controls.Add(this.label62); - this.ScenarioPointPanel.Controls.Add(this.label108); - this.ScenarioPointPanel.Controls.Add(this.ScenarioPointRadiusUpDown); - this.ScenarioPointPanel.Controls.Add(this.label107); - this.ScenarioPointPanel.Controls.Add(this.ScenarioPointSpOnlyFlagUpDown); - this.ScenarioPointPanel.Controls.Add(this.label106); - this.ScenarioPointPanel.Controls.Add(this.ScenarioPointProbabilityUpDown); - this.ScenarioPointPanel.Controls.Add(this.ScenarioPointInteriorTextBox); - this.ScenarioPointPanel.Controls.Add(this.label102); - this.ScenarioPointPanel.Controls.Add(this.label101); - this.ScenarioPointPanel.Controls.Add(this.ScenarioPointTimeEndUpDown); - this.ScenarioPointPanel.Controls.Add(this.ScenarioPointTimeStartUpDown); - this.ScenarioPointPanel.Controls.Add(this.label100); - this.ScenarioPointPanel.Controls.Add(this.ScenarioPointModelSetComboBox); - this.ScenarioPointPanel.Controls.Add(this.label99); - this.ScenarioPointPanel.Controls.Add(this.ScenarioPointTypeComboBox); - this.ScenarioPointPanel.Controls.Add(this.label98); - this.ScenarioPointPanel.Enabled = false; - this.ScenarioPointPanel.Location = new System.Drawing.Point(0, 29); - this.ScenarioPointPanel.Name = "ScenarioPointPanel"; - this.ScenarioPointPanel.Size = new System.Drawing.Size(510, 414); - this.ScenarioPointPanel.TabIndex = 0; - // - // ScenarioPointImapHashLabel - // - this.ScenarioPointImapHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioPointImapHashLabel.AutoSize = true; - this.ScenarioPointImapHashLabel.Location = new System.Drawing.Point(341, 146); - this.ScenarioPointImapHashLabel.Name = "ScenarioPointImapHashLabel"; - this.ScenarioPointImapHashLabel.Size = new System.Drawing.Size(44, 13); - this.ScenarioPointImapHashLabel.TabIndex = 21; - this.ScenarioPointImapHashLabel.Text = "Hash: 0"; - // - // ScenarioPointImapTextBox - // - this.ScenarioPointImapTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioPointImapTextBox.Location = new System.Drawing.Point(73, 143); - this.ScenarioPointImapTextBox.Name = "ScenarioPointImapTextBox"; - this.ScenarioPointImapTextBox.Size = new System.Drawing.Size(262, 20); - this.ScenarioPointImapTextBox.TabIndex = 20; - this.ScenarioPointImapTextBox.TextChanged += new System.EventHandler(this.ScenarioPointImapTextBox_TextChanged); - // - // label110 - // - this.label110.AutoSize = true; - this.label110.Location = new System.Drawing.Point(34, 146); - this.label110.Name = "label110"; - this.label110.Size = new System.Drawing.Size(33, 13); - this.label110.TabIndex = 19; - this.label110.Text = "Imap:"; - // - // ScenarioPointGroupHashLabel - // - this.ScenarioPointGroupHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioPointGroupHashLabel.AutoSize = true; - this.ScenarioPointGroupHashLabel.Location = new System.Drawing.Point(341, 123); - this.ScenarioPointGroupHashLabel.Name = "ScenarioPointGroupHashLabel"; - this.ScenarioPointGroupHashLabel.Size = new System.Drawing.Size(44, 13); - this.ScenarioPointGroupHashLabel.TabIndex = 18; - this.ScenarioPointGroupHashLabel.Text = "Hash: 0"; - // - // ScenarioPointGroupTextBox - // - this.ScenarioPointGroupTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioPointGroupTextBox.Location = new System.Drawing.Point(73, 120); - this.ScenarioPointGroupTextBox.Name = "ScenarioPointGroupTextBox"; - this.ScenarioPointGroupTextBox.Size = new System.Drawing.Size(262, 20); - this.ScenarioPointGroupTextBox.TabIndex = 17; - this.ScenarioPointGroupTextBox.TextChanged += new System.EventHandler(this.ScenarioPointGroupTextBox_TextChanged); - // - // label156 - // - this.label156.AutoSize = true; - this.label156.Location = new System.Drawing.Point(28, 123); - this.label156.Name = "label156"; - this.label156.Size = new System.Drawing.Size(39, 13); - this.label156.TabIndex = 16; - this.label156.Text = "Group:"; - // - // ScenarioPointInteriorHashLabel - // - this.ScenarioPointInteriorHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioPointInteriorHashLabel.AutoSize = true; - this.ScenarioPointInteriorHashLabel.Location = new System.Drawing.Point(341, 100); - this.ScenarioPointInteriorHashLabel.Name = "ScenarioPointInteriorHashLabel"; - this.ScenarioPointInteriorHashLabel.Size = new System.Drawing.Size(44, 13); - this.ScenarioPointInteriorHashLabel.TabIndex = 15; - this.ScenarioPointInteriorHashLabel.Text = "Hash: 0"; - // - // ScenarioPointFlagsCheckedListBox - // - this.ScenarioPointFlagsCheckedListBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioPointFlagsCheckedListBox.CheckOnClick = true; - this.ScenarioPointFlagsCheckedListBox.FormattingEnabled = true; - this.ScenarioPointFlagsCheckedListBox.Items.AddRange(new object[] { - "1 - IgnoreMaxInRange", - "2 - NoSpawn", - "4 - StationaryReactions", - "8 - Unk", - "16 - Unk", - "32 - ActivateVehicleSiren", - "64 - AggressiveVehicleDriving", - "128 - Unk", - "256 - Unk", - "512 - Unk", - "1024 - AerialVehiclePoint", - "2048 - TerritorialScenario", - "4096 - Unk", - "8192 - Unk", - "16384 - Unk", - "32768 - Unk", - "65536 - InWater", - "131072 - Unk", - "262144 - OpenDoor", - "524288 - PreciseUseTime", - "1048576 - Unk", - "2097152 - Unk", - "4194304 - ExtendedRange", - "8388608 - ShortRange", - "16777216 - HighPriority", - "33554432 - IgnoreLoitering", - "67108864 - UseSearchlight", - "134217728 - ResetNoCollisionOnCleanUp", - "268435456 - Unk", - "536870912 - Unk", - "1073741824 - IgnoreWeatherRestrictions"}); - this.ScenarioPointFlagsCheckedListBox.Location = new System.Drawing.Point(195, 167); - this.ScenarioPointFlagsCheckedListBox.Name = "ScenarioPointFlagsCheckedListBox"; - this.ScenarioPointFlagsCheckedListBox.Size = new System.Drawing.Size(214, 244); - this.ScenarioPointFlagsCheckedListBox.TabIndex = 36; - this.ScenarioPointFlagsCheckedListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.ScenarioPointFlagsCheckedListBox_ItemCheck); - // - // label111 - // - this.label111.AutoSize = true; - this.label111.Location = new System.Drawing.Point(32, 390); - this.label111.Name = "label111"; - this.label111.Size = new System.Drawing.Size(35, 13); - this.label111.TabIndex = 34; - this.label111.Text = "Flags:"; - // - // ScenarioPointDirectionTextBox - // - this.ScenarioPointDirectionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioPointDirectionTextBox.Location = new System.Drawing.Point(73, 26); - this.ScenarioPointDirectionTextBox.Name = "ScenarioPointDirectionTextBox"; - this.ScenarioPointDirectionTextBox.Size = new System.Drawing.Size(262, 20); - this.ScenarioPointDirectionTextBox.TabIndex = 8; - this.ScenarioPointDirectionTextBox.TextChanged += new System.EventHandler(this.ScenarioPointDirectionTextBox_TextChanged); - // - // label97 - // - this.label97.AutoSize = true; - this.label97.Location = new System.Drawing.Point(15, 29); - this.label97.Name = "label97"; - this.label97.Size = new System.Drawing.Size(52, 13); - this.label97.TabIndex = 7; - this.label97.Text = "Direction:"; - // - // ScenarioPointFlagsValueUpDown - // - this.ScenarioPointFlagsValueUpDown.Location = new System.Drawing.Point(73, 388); - this.ScenarioPointFlagsValueUpDown.Maximum = new decimal(new int[] { - -1, - 0, - 0, - 0}); - this.ScenarioPointFlagsValueUpDown.Name = "ScenarioPointFlagsValueUpDown"; - this.ScenarioPointFlagsValueUpDown.Size = new System.Drawing.Size(116, 20); - this.ScenarioPointFlagsValueUpDown.TabIndex = 35; - this.ScenarioPointFlagsValueUpDown.ValueChanged += new System.EventHandler(this.ScenarioPointFlagsValueUpDown_ValueChanged); - // - // label109 - // - this.label109.AutoSize = true; - this.label109.Location = new System.Drawing.Point(13, 299); - this.label109.Name = "label109"; - this.label109.Size = new System.Drawing.Size(54, 13); - this.label109.TabIndex = 32; - this.label109.Text = "Wait time:"; - // - // ScenarioPointGoToButton - // - this.ScenarioPointGoToButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioPointGoToButton.Location = new System.Drawing.Point(341, 1); - this.ScenarioPointGoToButton.Name = "ScenarioPointGoToButton"; - this.ScenarioPointGoToButton.Size = new System.Drawing.Size(68, 23); - this.ScenarioPointGoToButton.TabIndex = 6; - this.ScenarioPointGoToButton.Text = "Go to"; - this.ScenarioPointGoToButton.UseVisualStyleBackColor = true; - this.ScenarioPointGoToButton.Click += new System.EventHandler(this.ScenarioPointGoToButton_Click); - // - // ScenarioPointWaitTimeUpDown - // - this.ScenarioPointWaitTimeUpDown.Location = new System.Drawing.Point(73, 297); - this.ScenarioPointWaitTimeUpDown.Maximum = new decimal(new int[] { - 255, - 0, - 0, - 0}); - this.ScenarioPointWaitTimeUpDown.Name = "ScenarioPointWaitTimeUpDown"; - this.ScenarioPointWaitTimeUpDown.Size = new System.Drawing.Size(57, 20); - this.ScenarioPointWaitTimeUpDown.TabIndex = 33; - this.ScenarioPointWaitTimeUpDown.ValueChanged += new System.EventHandler(this.ScenarioPointWaitTimeUpDown_ValueChanged); - // - // ScenarioPointPositionTextBox - // - this.ScenarioPointPositionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioPointPositionTextBox.Location = new System.Drawing.Point(73, 3); - this.ScenarioPointPositionTextBox.Name = "ScenarioPointPositionTextBox"; - this.ScenarioPointPositionTextBox.Size = new System.Drawing.Size(262, 20); - this.ScenarioPointPositionTextBox.TabIndex = 5; - this.ScenarioPointPositionTextBox.TextChanged += new System.EventHandler(this.ScenarioPointPositionTextBox_TextChanged); - // - // label62 - // - this.label62.AutoSize = true; - this.label62.Location = new System.Drawing.Point(20, 6); - this.label62.Name = "label62"; - this.label62.Size = new System.Drawing.Size(47, 13); - this.label62.TabIndex = 4; - this.label62.Text = "Position:"; - // - // label108 - // - this.label108.AutoSize = true; - this.label108.Location = new System.Drawing.Point(24, 273); - this.label108.Name = "label108"; - this.label108.Size = new System.Drawing.Size(43, 13); - this.label108.TabIndex = 30; - this.label108.Text = "Radius:"; - // - // ScenarioPointRadiusUpDown - // - this.ScenarioPointRadiusUpDown.Location = new System.Drawing.Point(73, 271); - this.ScenarioPointRadiusUpDown.Maximum = new decimal(new int[] { - 255, - 0, - 0, - 0}); - this.ScenarioPointRadiusUpDown.Name = "ScenarioPointRadiusUpDown"; - this.ScenarioPointRadiusUpDown.Size = new System.Drawing.Size(57, 20); - this.ScenarioPointRadiusUpDown.TabIndex = 31; - this.ScenarioPointRadiusUpDown.ValueChanged += new System.EventHandler(this.ScenarioPointRadiusUpDown_ValueChanged); - // - // label107 - // - this.label107.AutoSize = true; - this.label107.Location = new System.Drawing.Point(3, 247); - this.label107.Name = "label107"; - this.label107.Size = new System.Drawing.Size(64, 13); - this.label107.TabIndex = 28; - this.label107.Text = "SpOnly flag:"; - // - // ScenarioPointSpOnlyFlagUpDown - // - this.ScenarioPointSpOnlyFlagUpDown.Location = new System.Drawing.Point(73, 245); - this.ScenarioPointSpOnlyFlagUpDown.Maximum = new decimal(new int[] { - 255, - 0, - 0, - 0}); - this.ScenarioPointSpOnlyFlagUpDown.Name = "ScenarioPointSpOnlyFlagUpDown"; - this.ScenarioPointSpOnlyFlagUpDown.Size = new System.Drawing.Size(57, 20); - this.ScenarioPointSpOnlyFlagUpDown.TabIndex = 29; - this.ScenarioPointSpOnlyFlagUpDown.ValueChanged += new System.EventHandler(this.ScenarioPointSpOnlyFlagUpDown_ValueChanged); - // - // label106 - // - this.label106.AutoSize = true; - this.label106.Location = new System.Drawing.Point(9, 221); - this.label106.Name = "label106"; - this.label106.Size = new System.Drawing.Size(58, 13); - this.label106.TabIndex = 26; - this.label106.Text = "Probability:"; - // - // ScenarioPointProbabilityUpDown - // - this.ScenarioPointProbabilityUpDown.Location = new System.Drawing.Point(73, 219); - this.ScenarioPointProbabilityUpDown.Maximum = new decimal(new int[] { - 255, - 0, - 0, - 0}); - this.ScenarioPointProbabilityUpDown.Name = "ScenarioPointProbabilityUpDown"; - this.ScenarioPointProbabilityUpDown.Size = new System.Drawing.Size(57, 20); - this.ScenarioPointProbabilityUpDown.TabIndex = 27; - this.ScenarioPointProbabilityUpDown.ValueChanged += new System.EventHandler(this.ScenarioPointProbabilityUpDown_ValueChanged); - // - // ScenarioPointInteriorTextBox - // - this.ScenarioPointInteriorTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioPointInteriorTextBox.Location = new System.Drawing.Point(73, 97); - this.ScenarioPointInteriorTextBox.Name = "ScenarioPointInteriorTextBox"; - this.ScenarioPointInteriorTextBox.Size = new System.Drawing.Size(262, 20); - this.ScenarioPointInteriorTextBox.TabIndex = 14; - this.ScenarioPointInteriorTextBox.TextChanged += new System.EventHandler(this.ScenarioPointInteriorTextBox_TextChanged); - // - // label102 - // - this.label102.AutoSize = true; - this.label102.Location = new System.Drawing.Point(25, 100); - this.label102.Name = "label102"; - this.label102.Size = new System.Drawing.Size(42, 13); - this.label102.TabIndex = 13; - this.label102.Text = "Interior:"; - // - // label101 - // - this.label101.AutoSize = true; - this.label101.Location = new System.Drawing.Point(13, 195); - this.label101.Name = "label101"; - this.label101.Size = new System.Drawing.Size(54, 13); - this.label101.TabIndex = 24; - this.label101.Text = "Time end:"; - // - // ScenarioPointTimeEndUpDown - // - this.ScenarioPointTimeEndUpDown.Location = new System.Drawing.Point(73, 193); - this.ScenarioPointTimeEndUpDown.Maximum = new decimal(new int[] { - 24, - 0, - 0, - 0}); - this.ScenarioPointTimeEndUpDown.Name = "ScenarioPointTimeEndUpDown"; - this.ScenarioPointTimeEndUpDown.Size = new System.Drawing.Size(57, 20); - this.ScenarioPointTimeEndUpDown.TabIndex = 25; - this.ScenarioPointTimeEndUpDown.ValueChanged += new System.EventHandler(this.ScenarioPointTimeEndUpDown_ValueChanged); - // - // ScenarioPointTimeStartUpDown - // - this.ScenarioPointTimeStartUpDown.Location = new System.Drawing.Point(73, 167); - this.ScenarioPointTimeStartUpDown.Maximum = new decimal(new int[] { - 24, - 0, - 0, - 0}); - this.ScenarioPointTimeStartUpDown.Name = "ScenarioPointTimeStartUpDown"; - this.ScenarioPointTimeStartUpDown.Size = new System.Drawing.Size(57, 20); - this.ScenarioPointTimeStartUpDown.TabIndex = 23; - this.ScenarioPointTimeStartUpDown.ValueChanged += new System.EventHandler(this.ScenarioPointTimeStartUpDown_ValueChanged); - // - // label100 - // - this.label100.AutoSize = true; - this.label100.Location = new System.Drawing.Point(11, 169); - this.label100.Name = "label100"; - this.label100.Size = new System.Drawing.Size(56, 13); - this.label100.TabIndex = 22; - this.label100.Text = "Time start:"; - // - // ScenarioPointModelSetComboBox - // - this.ScenarioPointModelSetComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioPointModelSetComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.ScenarioPointModelSetComboBox.FormattingEnabled = true; - this.ScenarioPointModelSetComboBox.Location = new System.Drawing.Point(73, 73); - this.ScenarioPointModelSetComboBox.Name = "ScenarioPointModelSetComboBox"; - this.ScenarioPointModelSetComboBox.Size = new System.Drawing.Size(336, 21); - this.ScenarioPointModelSetComboBox.TabIndex = 12; - this.ScenarioPointModelSetComboBox.SelectedIndexChanged += new System.EventHandler(this.ScenarioPointModelSetComboBox_SelectedIndexChanged); - // - // label99 - // - this.label99.AutoSize = true; - this.label99.Location = new System.Drawing.Point(9, 76); - this.label99.Name = "label99"; - this.label99.Size = new System.Drawing.Size(58, 13); - this.label99.TabIndex = 11; - this.label99.Text = "Model Set:"; - // - // ScenarioPointTypeComboBox - // - this.ScenarioPointTypeComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioPointTypeComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.ScenarioPointTypeComboBox.FormattingEnabled = true; - this.ScenarioPointTypeComboBox.Location = new System.Drawing.Point(73, 49); - this.ScenarioPointTypeComboBox.Name = "ScenarioPointTypeComboBox"; - this.ScenarioPointTypeComboBox.Size = new System.Drawing.Size(336, 21); - this.ScenarioPointTypeComboBox.TabIndex = 10; - this.ScenarioPointTypeComboBox.SelectedIndexChanged += new System.EventHandler(this.ScenarioPointTypeComboBox_SelectedIndexChanged); - // - // label98 - // - this.label98.AutoSize = true; - this.label98.Location = new System.Drawing.Point(33, 52); - this.label98.Name = "label98"; - this.label98.Size = new System.Drawing.Size(34, 13); - this.label98.TabIndex = 9; - this.label98.Text = "Type:"; - // - // ScenarioPointDeleteButton - // - this.ScenarioPointDeleteButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioPointDeleteButton.Enabled = false; - this.ScenarioPointDeleteButton.Location = new System.Drawing.Point(415, 2); - this.ScenarioPointDeleteButton.Name = "ScenarioPointDeleteButton"; - this.ScenarioPointDeleteButton.Size = new System.Drawing.Size(90, 23); - this.ScenarioPointDeleteButton.TabIndex = 3; - this.ScenarioPointDeleteButton.Text = "Delete Point"; - this.ScenarioPointDeleteButton.UseVisualStyleBackColor = true; - this.ScenarioPointDeleteButton.Click += new System.EventHandler(this.ScenarioPointDeleteButton_Click); - // - // ScenarioPointAddToProjectButton - // - this.ScenarioPointAddToProjectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioPointAddToProjectButton.Enabled = false; - this.ScenarioPointAddToProjectButton.Location = new System.Drawing.Point(319, 2); - this.ScenarioPointAddToProjectButton.Name = "ScenarioPointAddToProjectButton"; - this.ScenarioPointAddToProjectButton.Size = new System.Drawing.Size(90, 23); - this.ScenarioPointAddToProjectButton.TabIndex = 2; - this.ScenarioPointAddToProjectButton.Text = "Add to Project"; - this.ScenarioPointAddToProjectButton.UseVisualStyleBackColor = true; - this.ScenarioPointAddToProjectButton.Click += new System.EventHandler(this.ScenarioPointAddToProjectButton_Click); - // - // ScenarioEntityTabPage - // - this.ScenarioEntityTabPage.Controls.Add(this.ScenarioEntityDeleteButton); - this.ScenarioEntityTabPage.Controls.Add(this.ScenarioEntityPanel); - this.ScenarioEntityTabPage.Controls.Add(this.ScenarioEntityAddToProjectButton); - this.ScenarioEntityTabPage.Controls.Add(this.ScenarioEntityCheckBox); - this.ScenarioEntityTabPage.Location = new System.Drawing.Point(4, 22); - this.ScenarioEntityTabPage.Name = "ScenarioEntityTabPage"; - this.ScenarioEntityTabPage.Size = new System.Drawing.Size(510, 443); - this.ScenarioEntityTabPage.TabIndex = 7; - this.ScenarioEntityTabPage.Text = "Entity"; - this.ScenarioEntityTabPage.UseVisualStyleBackColor = true; - // - // ScenarioEntityDeleteButton - // - this.ScenarioEntityDeleteButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioEntityDeleteButton.Enabled = false; - this.ScenarioEntityDeleteButton.Location = new System.Drawing.Point(415, 2); - this.ScenarioEntityDeleteButton.Name = "ScenarioEntityDeleteButton"; - this.ScenarioEntityDeleteButton.Size = new System.Drawing.Size(90, 23); - this.ScenarioEntityDeleteButton.TabIndex = 7; - this.ScenarioEntityDeleteButton.Text = "Delete Override"; - this.ScenarioEntityDeleteButton.UseVisualStyleBackColor = true; - this.ScenarioEntityDeleteButton.Click += new System.EventHandler(this.ScenarioEntityDeleteButton_Click); - // - // ScenarioEntityPanel - // - this.ScenarioEntityPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioEntityPanel.Controls.Add(this.label160); - this.ScenarioEntityPanel.Controls.Add(this.ScenarioEntityAddPointButton); - this.ScenarioEntityPanel.Controls.Add(this.label161); - this.ScenarioEntityPanel.Controls.Add(this.ScenarioEntityPointsListBox); - this.ScenarioEntityPanel.Controls.Add(this.ScenarioEntityInfoLabel); - this.ScenarioEntityPanel.Controls.Add(this.label114); - this.ScenarioEntityPanel.Controls.Add(this.ScenarioEntityUnk2UpDown); - this.ScenarioEntityPanel.Controls.Add(this.label113); - this.ScenarioEntityPanel.Controls.Add(this.ScenarioEntityUnk1UpDown); - this.ScenarioEntityPanel.Controls.Add(this.ScenarioEntityTypeHashLabel); - this.ScenarioEntityPanel.Controls.Add(this.ScenarioEntityTypeTextBox); - this.ScenarioEntityPanel.Controls.Add(this.label112); - this.ScenarioEntityPanel.Controls.Add(this.ScenarioEntityGoToButton); - this.ScenarioEntityPanel.Controls.Add(this.ScenarioEntityPositionTextBox); - this.ScenarioEntityPanel.Controls.Add(this.label104); - this.ScenarioEntityPanel.Enabled = false; - this.ScenarioEntityPanel.Location = new System.Drawing.Point(0, 29); - this.ScenarioEntityPanel.Name = "ScenarioEntityPanel"; - this.ScenarioEntityPanel.Size = new System.Drawing.Size(510, 414); - this.ScenarioEntityPanel.TabIndex = 8; - // - // label160 - // - this.label160.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.label160.AutoSize = true; - this.label160.Location = new System.Drawing.Point(332, 160); - this.label160.Name = "label160"; - this.label160.Size = new System.Drawing.Size(141, 13); - this.label160.TabIndex = 20; - this.label160.Text = "(Double-click to select point)"; - // - // ScenarioEntityAddPointButton - // - this.ScenarioEntityAddPointButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.ScenarioEntityAddPointButton.Location = new System.Drawing.Point(91, 347); - this.ScenarioEntityAddPointButton.Name = "ScenarioEntityAddPointButton"; - this.ScenarioEntityAddPointButton.Size = new System.Drawing.Size(90, 23); - this.ScenarioEntityAddPointButton.TabIndex = 19; - this.ScenarioEntityAddPointButton.Text = "Add Point"; - this.ScenarioEntityAddPointButton.UseVisualStyleBackColor = true; - this.ScenarioEntityAddPointButton.Click += new System.EventHandler(this.ScenarioEntityAddPointButton_Click); - // - // label161 - // - this.label161.AutoSize = true; - this.label161.Location = new System.Drawing.Point(42, 160); - this.label161.Name = "label161"; - this.label161.Size = new System.Drawing.Size(39, 13); - this.label161.TabIndex = 18; - this.label161.Text = "Points:"; - // - // ScenarioEntityPointsListBox - // - this.ScenarioEntityPointsListBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioEntityPointsListBox.FormattingEnabled = true; - this.ScenarioEntityPointsListBox.Location = new System.Drawing.Point(91, 158); - this.ScenarioEntityPointsListBox.Name = "ScenarioEntityPointsListBox"; - this.ScenarioEntityPointsListBox.Size = new System.Drawing.Size(235, 173); - this.ScenarioEntityPointsListBox.TabIndex = 17; - this.ScenarioEntityPointsListBox.DoubleClick += new System.EventHandler(this.ScenarioEntityPointsListBox_DoubleClick); - // - // ScenarioEntityInfoLabel - // - this.ScenarioEntityInfoLabel.AutoSize = true; - this.ScenarioEntityInfoLabel.Location = new System.Drawing.Point(88, 123); - this.ScenarioEntityInfoLabel.Name = "ScenarioEntityInfoLabel"; - this.ScenarioEntityInfoLabel.Size = new System.Drawing.Size(85, 13); - this.ScenarioEntityInfoLabel.TabIndex = 14; - this.ScenarioEntityInfoLabel.Text = "0 override points"; - // - // label114 - // - this.label114.AutoSize = true; - this.label114.Location = new System.Drawing.Point(46, 83); - this.label114.Name = "label114"; - this.label114.Size = new System.Drawing.Size(39, 13); - this.label114.TabIndex = 12; - this.label114.Text = "Unk 2:"; - // - // ScenarioEntityUnk2UpDown - // - this.ScenarioEntityUnk2UpDown.Location = new System.Drawing.Point(91, 81); - this.ScenarioEntityUnk2UpDown.Maximum = new decimal(new int[] { - 255, - 0, - 0, - 0}); - this.ScenarioEntityUnk2UpDown.Name = "ScenarioEntityUnk2UpDown"; - this.ScenarioEntityUnk2UpDown.Size = new System.Drawing.Size(57, 20); - this.ScenarioEntityUnk2UpDown.TabIndex = 13; - this.ScenarioEntityUnk2UpDown.ValueChanged += new System.EventHandler(this.ScenarioEntityUnk2UpDown_ValueChanged); - // - // label113 - // - this.label113.AutoSize = true; - this.label113.Location = new System.Drawing.Point(46, 57); - this.label113.Name = "label113"; - this.label113.Size = new System.Drawing.Size(39, 13); - this.label113.TabIndex = 10; - this.label113.Text = "Unk 1:"; - // - // ScenarioEntityUnk1UpDown - // - this.ScenarioEntityUnk1UpDown.Location = new System.Drawing.Point(91, 55); - this.ScenarioEntityUnk1UpDown.Maximum = new decimal(new int[] { - 255, - 0, - 0, - 0}); - this.ScenarioEntityUnk1UpDown.Name = "ScenarioEntityUnk1UpDown"; - this.ScenarioEntityUnk1UpDown.Size = new System.Drawing.Size(57, 20); - this.ScenarioEntityUnk1UpDown.TabIndex = 11; - this.ScenarioEntityUnk1UpDown.ValueChanged += new System.EventHandler(this.ScenarioEntityUnk1UpDown_ValueChanged); - // - // ScenarioEntityTypeHashLabel - // - this.ScenarioEntityTypeHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioEntityTypeHashLabel.AutoSize = true; - this.ScenarioEntityTypeHashLabel.Location = new System.Drawing.Point(341, 32); - this.ScenarioEntityTypeHashLabel.Name = "ScenarioEntityTypeHashLabel"; - this.ScenarioEntityTypeHashLabel.Size = new System.Drawing.Size(44, 13); - this.ScenarioEntityTypeHashLabel.TabIndex = 9; - this.ScenarioEntityTypeHashLabel.Text = "Hash: 0"; - // - // ScenarioEntityTypeTextBox - // - this.ScenarioEntityTypeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioEntityTypeTextBox.Location = new System.Drawing.Point(91, 29); - this.ScenarioEntityTypeTextBox.Name = "ScenarioEntityTypeTextBox"; - this.ScenarioEntityTypeTextBox.Size = new System.Drawing.Size(244, 20); - this.ScenarioEntityTypeTextBox.TabIndex = 8; - this.ScenarioEntityTypeTextBox.TextChanged += new System.EventHandler(this.ScenarioEntityTypeTextBox_TextChanged); - // - // label112 - // - this.label112.AutoSize = true; - this.label112.Location = new System.Drawing.Point(26, 32); - this.label112.Name = "label112"; - this.label112.Size = new System.Drawing.Size(59, 13); - this.label112.TabIndex = 7; - this.label112.Text = "Entity type:"; - // - // ScenarioEntityGoToButton - // - this.ScenarioEntityGoToButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioEntityGoToButton.Location = new System.Drawing.Point(341, 1); - this.ScenarioEntityGoToButton.Name = "ScenarioEntityGoToButton"; - this.ScenarioEntityGoToButton.Size = new System.Drawing.Size(68, 23); - this.ScenarioEntityGoToButton.TabIndex = 6; - this.ScenarioEntityGoToButton.Text = "Go to"; - this.ScenarioEntityGoToButton.UseVisualStyleBackColor = true; - this.ScenarioEntityGoToButton.Click += new System.EventHandler(this.ScenarioEntityGoToButton_Click); - // - // ScenarioEntityPositionTextBox - // - this.ScenarioEntityPositionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioEntityPositionTextBox.Location = new System.Drawing.Point(91, 3); - this.ScenarioEntityPositionTextBox.Name = "ScenarioEntityPositionTextBox"; - this.ScenarioEntityPositionTextBox.Size = new System.Drawing.Size(244, 20); - this.ScenarioEntityPositionTextBox.TabIndex = 5; - this.ScenarioEntityPositionTextBox.TextChanged += new System.EventHandler(this.ScenarioEntityPositionTextBox_TextChanged); - // - // label104 - // - this.label104.AutoSize = true; - this.label104.Location = new System.Drawing.Point(10, 6); - this.label104.Name = "label104"; - this.label104.Size = new System.Drawing.Size(75, 13); - this.label104.TabIndex = 4; - this.label104.Text = "Entity position:"; - // - // ScenarioEntityAddToProjectButton - // - this.ScenarioEntityAddToProjectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioEntityAddToProjectButton.Enabled = false; - this.ScenarioEntityAddToProjectButton.Location = new System.Drawing.Point(319, 2); - this.ScenarioEntityAddToProjectButton.Name = "ScenarioEntityAddToProjectButton"; - this.ScenarioEntityAddToProjectButton.Size = new System.Drawing.Size(90, 23); - this.ScenarioEntityAddToProjectButton.TabIndex = 6; - this.ScenarioEntityAddToProjectButton.Text = "Add to Project"; - this.ScenarioEntityAddToProjectButton.UseVisualStyleBackColor = true; - this.ScenarioEntityAddToProjectButton.Click += new System.EventHandler(this.ScenarioEntityAddToProjectButton_Click); - // - // ScenarioEntityCheckBox - // - this.ScenarioEntityCheckBox.AutoSize = true; - this.ScenarioEntityCheckBox.Location = new System.Drawing.Point(6, 6); - this.ScenarioEntityCheckBox.Name = "ScenarioEntityCheckBox"; - this.ScenarioEntityCheckBox.Size = new System.Drawing.Size(129, 17); - this.ScenarioEntityCheckBox.TabIndex = 5; - this.ScenarioEntityCheckBox.Text = "Define Entity Override"; - this.ScenarioEntityCheckBox.UseVisualStyleBackColor = true; - this.ScenarioEntityCheckBox.CheckedChanged += new System.EventHandler(this.ScenarioEntityCheckBox_CheckedChanged); - // - // ScenarioEntityPointTabPage - // - this.ScenarioEntityPointTabPage.Controls.Add(this.ScenarioEntityPointDeleteButton); - this.ScenarioEntityPointTabPage.Controls.Add(this.ScenarioEntityPointAddToProjectButton); - this.ScenarioEntityPointTabPage.Controls.Add(this.ScenarioEntityPointCheckBox); - this.ScenarioEntityPointTabPage.Controls.Add(this.ScenarioEntityPointPanel); - this.ScenarioEntityPointTabPage.Location = new System.Drawing.Point(4, 22); - this.ScenarioEntityPointTabPage.Name = "ScenarioEntityPointTabPage"; - this.ScenarioEntityPointTabPage.Size = new System.Drawing.Size(510, 443); - this.ScenarioEntityPointTabPage.TabIndex = 2; - this.ScenarioEntityPointTabPage.Text = "Entity Point"; - this.ScenarioEntityPointTabPage.UseVisualStyleBackColor = true; - // - // ScenarioEntityPointDeleteButton - // - this.ScenarioEntityPointDeleteButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioEntityPointDeleteButton.Enabled = false; - this.ScenarioEntityPointDeleteButton.Location = new System.Drawing.Point(415, 2); - this.ScenarioEntityPointDeleteButton.Name = "ScenarioEntityPointDeleteButton"; - this.ScenarioEntityPointDeleteButton.Size = new System.Drawing.Size(90, 23); - this.ScenarioEntityPointDeleteButton.TabIndex = 3; - this.ScenarioEntityPointDeleteButton.Text = "Delete Point"; - this.ScenarioEntityPointDeleteButton.UseVisualStyleBackColor = true; - this.ScenarioEntityPointDeleteButton.Click += new System.EventHandler(this.ScenarioEntityPointDeleteButton_Click); - // - // ScenarioEntityPointAddToProjectButton - // - this.ScenarioEntityPointAddToProjectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioEntityPointAddToProjectButton.Enabled = false; - this.ScenarioEntityPointAddToProjectButton.Location = new System.Drawing.Point(319, 2); - this.ScenarioEntityPointAddToProjectButton.Name = "ScenarioEntityPointAddToProjectButton"; - this.ScenarioEntityPointAddToProjectButton.Size = new System.Drawing.Size(90, 23); - this.ScenarioEntityPointAddToProjectButton.TabIndex = 2; - this.ScenarioEntityPointAddToProjectButton.Text = "Add to Project"; - this.ScenarioEntityPointAddToProjectButton.UseVisualStyleBackColor = true; - this.ScenarioEntityPointAddToProjectButton.Click += new System.EventHandler(this.ScenarioEntityPointAddToProjectButton_Click); - // - // ScenarioEntityPointCheckBox - // - this.ScenarioEntityPointCheckBox.AutoSize = true; - this.ScenarioEntityPointCheckBox.Location = new System.Drawing.Point(6, 6); - this.ScenarioEntityPointCheckBox.Name = "ScenarioEntityPointCheckBox"; - this.ScenarioEntityPointCheckBox.Size = new System.Drawing.Size(156, 17); - this.ScenarioEntityPointCheckBox.TabIndex = 1; - this.ScenarioEntityPointCheckBox.Text = "Define Entity Override Point"; - this.ScenarioEntityPointCheckBox.UseVisualStyleBackColor = true; - this.ScenarioEntityPointCheckBox.CheckedChanged += new System.EventHandler(this.ScenarioEntityPointCheckBox_CheckedChanged); - // - // ScenarioEntityPointPanel - // - this.ScenarioEntityPointPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointNameHashLabel); - this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointNameTextBox); - this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointFlagsCheckedListBox); - this.ScenarioEntityPointPanel.Controls.Add(this.label135); - this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointFlagsUpDown); - this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointShortRangeCheckBox); - this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointExtendedRangeCheckBox); - this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointHighPriCheckBox); - this.ScenarioEntityPointPanel.Controls.Add(this.label133); - this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointEndUpDown); - this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointStartUpDown); - this.ScenarioEntityPointPanel.Controls.Add(this.label134); - this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointRadiusTextBox); - this.ScenarioEntityPointPanel.Controls.Add(this.label132); - this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointTimeTillPedLeavesTextBox); - this.ScenarioEntityPointPanel.Controls.Add(this.label131); - this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointProbabilityTextBox); - this.ScenarioEntityPointPanel.Controls.Add(this.label130); - this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointAvailableInMpSpComboBox); - this.ScenarioEntityPointPanel.Controls.Add(this.label129); - this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointRequiredImapHashLabel); - this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointRequiredImapTextBox); - this.ScenarioEntityPointPanel.Controls.Add(this.label128); - this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointInteriorHashLabel); - this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointInteriorTextBox); - this.ScenarioEntityPointPanel.Controls.Add(this.label126); - this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointGroupHashLabel); - this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointGroupTextBox); - this.ScenarioEntityPointPanel.Controls.Add(this.label124); - this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointPedTypeHashLabel); - this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointPedTypeTextBox); - this.ScenarioEntityPointPanel.Controls.Add(this.label122); - this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointSpawnTypeHashLabel); - this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointSpawnTypeTextBox); - this.ScenarioEntityPointPanel.Controls.Add(this.label120); - this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointRotationTextBox); - this.ScenarioEntityPointPanel.Controls.Add(this.label118); - this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointGoToButton); - this.ScenarioEntityPointPanel.Controls.Add(this.ScenarioEntityPointPositionTextBox); - this.ScenarioEntityPointPanel.Controls.Add(this.label117); - this.ScenarioEntityPointPanel.Controls.Add(this.label116); - this.ScenarioEntityPointPanel.Enabled = false; - this.ScenarioEntityPointPanel.Location = new System.Drawing.Point(0, 29); - this.ScenarioEntityPointPanel.Name = "ScenarioEntityPointPanel"; - this.ScenarioEntityPointPanel.Size = new System.Drawing.Size(510, 414); - this.ScenarioEntityPointPanel.TabIndex = 4; - // - // ScenarioEntityPointNameHashLabel - // - this.ScenarioEntityPointNameHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioEntityPointNameHashLabel.AutoSize = true; - this.ScenarioEntityPointNameHashLabel.Location = new System.Drawing.Point(387, 53); - this.ScenarioEntityPointNameHashLabel.Name = "ScenarioEntityPointNameHashLabel"; - this.ScenarioEntityPointNameHashLabel.Size = new System.Drawing.Size(44, 13); - this.ScenarioEntityPointNameHashLabel.TabIndex = 12; - this.ScenarioEntityPointNameHashLabel.Text = "Hash: 0"; - // - // ScenarioEntityPointNameTextBox - // - this.ScenarioEntityPointNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioEntityPointNameTextBox.Location = new System.Drawing.Point(109, 50); - this.ScenarioEntityPointNameTextBox.Name = "ScenarioEntityPointNameTextBox"; - this.ScenarioEntityPointNameTextBox.Size = new System.Drawing.Size(272, 20); - this.ScenarioEntityPointNameTextBox.TabIndex = 11; - this.ScenarioEntityPointNameTextBox.TextChanged += new System.EventHandler(this.ScenarioEntityPointNameTextBox_TextChanged); - // - // ScenarioEntityPointFlagsCheckedListBox - // - this.ScenarioEntityPointFlagsCheckedListBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioEntityPointFlagsCheckedListBox.CheckOnClick = true; - this.ScenarioEntityPointFlagsCheckedListBox.FormattingEnabled = true; - this.ScenarioEntityPointFlagsCheckedListBox.Items.AddRange(new object[] { - "1 - IgnoreMaxInRange", - "2 - NoSpawn", - "4 - StationaryReactions", - "8 - Unk", - "16 - Unk", - "32 - ActivateVehicleSiren", - "64 - AggressiveVehicleDriving", - "128 - Unk", - "256 - Unk", - "512 - Unk", - "1024 - AerialVehiclePoint", - "2048 - TerritorialScenario", - "4096 - Unk", - "8192 - Unk", - "16384 - Unk", - "32768 - Unk", - "65536 - InWater", - "131072 - Unk", - "262144 - OpenDoor", - "524288 - PreciseUseTime", - "1048576 - Unk", - "2097152 - Unk", - "4194304 - ExtendedRange", - "8388608 - ShortRange", - "16777216 - HighPriority", - "33554432 - IgnoreLoitering", - "67108864 - UseSearchlight", - "134217728 - ResetNoCollisionOnCleanUp", - "268435456 - Unk", - "536870912 - Unk", - "1073741824 - IgnoreWeatherRestrictions"}); - this.ScenarioEntityPointFlagsCheckedListBox.Location = new System.Drawing.Point(269, 193); - this.ScenarioEntityPointFlagsCheckedListBox.Name = "ScenarioEntityPointFlagsCheckedListBox"; - this.ScenarioEntityPointFlagsCheckedListBox.Size = new System.Drawing.Size(214, 214); - this.ScenarioEntityPointFlagsCheckedListBox.TabIndex = 45; - this.ScenarioEntityPointFlagsCheckedListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.ScenarioEntityPointFlagsCheckedListBox_ItemCheck); - // - // label135 - // - this.label135.AutoSize = true; - this.label135.Location = new System.Drawing.Point(68, 389); - this.label135.Name = "label135"; - this.label135.Size = new System.Drawing.Size(35, 13); - this.label135.TabIndex = 43; - this.label135.Text = "Flags:"; - // - // ScenarioEntityPointFlagsUpDown - // - this.ScenarioEntityPointFlagsUpDown.Location = new System.Drawing.Point(109, 387); - this.ScenarioEntityPointFlagsUpDown.Maximum = new decimal(new int[] { - -1, - 0, - 0, - 0}); - this.ScenarioEntityPointFlagsUpDown.Name = "ScenarioEntityPointFlagsUpDown"; - this.ScenarioEntityPointFlagsUpDown.Size = new System.Drawing.Size(154, 20); - this.ScenarioEntityPointFlagsUpDown.TabIndex = 44; - this.ScenarioEntityPointFlagsUpDown.ValueChanged += new System.EventHandler(this.ScenarioEntityPointFlagsUpDown_ValueChanged); - // - // ScenarioEntityPointShortRangeCheckBox - // - this.ScenarioEntityPointShortRangeCheckBox.AutoSize = true; - this.ScenarioEntityPointShortRangeCheckBox.Location = new System.Drawing.Point(109, 364); - this.ScenarioEntityPointShortRangeCheckBox.Name = "ScenarioEntityPointShortRangeCheckBox"; - this.ScenarioEntityPointShortRangeCheckBox.Size = new System.Drawing.Size(83, 17); - this.ScenarioEntityPointShortRangeCheckBox.TabIndex = 42; - this.ScenarioEntityPointShortRangeCheckBox.Text = "ShortRange"; - this.ScenarioEntityPointShortRangeCheckBox.UseVisualStyleBackColor = true; - this.ScenarioEntityPointShortRangeCheckBox.CheckedChanged += new System.EventHandler(this.ScenarioEntityPointShortRangeCheckBox_CheckedChanged); - // - // ScenarioEntityPointExtendedRangeCheckBox - // - this.ScenarioEntityPointExtendedRangeCheckBox.AutoSize = true; - this.ScenarioEntityPointExtendedRangeCheckBox.Location = new System.Drawing.Point(109, 346); - this.ScenarioEntityPointExtendedRangeCheckBox.Name = "ScenarioEntityPointExtendedRangeCheckBox"; - this.ScenarioEntityPointExtendedRangeCheckBox.Size = new System.Drawing.Size(103, 17); - this.ScenarioEntityPointExtendedRangeCheckBox.TabIndex = 41; - this.ScenarioEntityPointExtendedRangeCheckBox.Text = "ExtendedRange"; - this.ScenarioEntityPointExtendedRangeCheckBox.UseVisualStyleBackColor = true; - this.ScenarioEntityPointExtendedRangeCheckBox.CheckedChanged += new System.EventHandler(this.ScenarioEntityPointExtendedRangeCheckBox_CheckedChanged); - // - // ScenarioEntityPointHighPriCheckBox - // - this.ScenarioEntityPointHighPriCheckBox.AutoSize = true; - this.ScenarioEntityPointHighPriCheckBox.Location = new System.Drawing.Point(109, 328); - this.ScenarioEntityPointHighPriCheckBox.Name = "ScenarioEntityPointHighPriCheckBox"; - this.ScenarioEntityPointHighPriCheckBox.Size = new System.Drawing.Size(60, 17); - this.ScenarioEntityPointHighPriCheckBox.TabIndex = 40; - this.ScenarioEntityPointHighPriCheckBox.Text = "HighPri"; - this.ScenarioEntityPointHighPriCheckBox.UseVisualStyleBackColor = true; - this.ScenarioEntityPointHighPriCheckBox.CheckedChanged += new System.EventHandler(this.ScenarioEntityPointHighPriCheckBox_CheckedChanged); - // - // label133 - // - this.label133.AutoSize = true; - this.label133.Location = new System.Drawing.Point(74, 306); - this.label133.Name = "label133"; - this.label133.Size = new System.Drawing.Size(29, 13); - this.label133.TabIndex = 38; - this.label133.Text = "End:"; - // - // ScenarioEntityPointEndUpDown - // - this.ScenarioEntityPointEndUpDown.Location = new System.Drawing.Point(109, 304); - this.ScenarioEntityPointEndUpDown.Maximum = new decimal(new int[] { - 24, - 0, - 0, - 0}); - this.ScenarioEntityPointEndUpDown.Name = "ScenarioEntityPointEndUpDown"; - this.ScenarioEntityPointEndUpDown.Size = new System.Drawing.Size(57, 20); - this.ScenarioEntityPointEndUpDown.TabIndex = 39; - this.ScenarioEntityPointEndUpDown.ValueChanged += new System.EventHandler(this.ScenarioEntityPointEndUpDown_ValueChanged); - // - // ScenarioEntityPointStartUpDown - // - this.ScenarioEntityPointStartUpDown.Location = new System.Drawing.Point(109, 281); - this.ScenarioEntityPointStartUpDown.Maximum = new decimal(new int[] { - 24, - 0, - 0, - 0}); - this.ScenarioEntityPointStartUpDown.Name = "ScenarioEntityPointStartUpDown"; - this.ScenarioEntityPointStartUpDown.Size = new System.Drawing.Size(57, 20); - this.ScenarioEntityPointStartUpDown.TabIndex = 37; - this.ScenarioEntityPointStartUpDown.ValueChanged += new System.EventHandler(this.ScenarioEntityPointStartUpDown_ValueChanged); - // - // label134 - // - this.label134.AutoSize = true; - this.label134.Location = new System.Drawing.Point(71, 283); - this.label134.Name = "label134"; - this.label134.Size = new System.Drawing.Size(32, 13); - this.label134.TabIndex = 36; - this.label134.Text = "Start:"; - // - // ScenarioEntityPointRadiusTextBox - // - this.ScenarioEntityPointRadiusTextBox.Location = new System.Drawing.Point(109, 258); - this.ScenarioEntityPointRadiusTextBox.Name = "ScenarioEntityPointRadiusTextBox"; - this.ScenarioEntityPointRadiusTextBox.Size = new System.Drawing.Size(88, 20); - this.ScenarioEntityPointRadiusTextBox.TabIndex = 35; - this.ScenarioEntityPointRadiusTextBox.TextChanged += new System.EventHandler(this.ScenarioEntityPointRadiusTextBox_TextChanged); - // - // label132 - // - this.label132.AutoSize = true; - this.label132.Location = new System.Drawing.Point(60, 261); - this.label132.Name = "label132"; - this.label132.Size = new System.Drawing.Size(43, 13); - this.label132.TabIndex = 34; - this.label132.Text = "Radius:"; - // - // ScenarioEntityPointTimeTillPedLeavesTextBox - // - this.ScenarioEntityPointTimeTillPedLeavesTextBox.Location = new System.Drawing.Point(109, 235); - this.ScenarioEntityPointTimeTillPedLeavesTextBox.Name = "ScenarioEntityPointTimeTillPedLeavesTextBox"; - this.ScenarioEntityPointTimeTillPedLeavesTextBox.Size = new System.Drawing.Size(88, 20); - this.ScenarioEntityPointTimeTillPedLeavesTextBox.TabIndex = 33; - this.ScenarioEntityPointTimeTillPedLeavesTextBox.TextChanged += new System.EventHandler(this.ScenarioEntityPointTimeTillPedLeavesTextBox_TextChanged); - // - // label131 - // - this.label131.AutoSize = true; - this.label131.Location = new System.Drawing.Point(3, 238); - this.label131.Name = "label131"; - this.label131.Size = new System.Drawing.Size(100, 13); - this.label131.TabIndex = 32; - this.label131.Text = "TimeTillPedLeaves:"; - // - // ScenarioEntityPointProbabilityTextBox - // - this.ScenarioEntityPointProbabilityTextBox.Location = new System.Drawing.Point(109, 212); - this.ScenarioEntityPointProbabilityTextBox.Name = "ScenarioEntityPointProbabilityTextBox"; - this.ScenarioEntityPointProbabilityTextBox.Size = new System.Drawing.Size(88, 20); - this.ScenarioEntityPointProbabilityTextBox.TabIndex = 31; - this.ScenarioEntityPointProbabilityTextBox.TextChanged += new System.EventHandler(this.ScenarioEntityPointProbabilityTextBox_TextChanged); - // - // label130 - // - this.label130.AutoSize = true; - this.label130.Location = new System.Drawing.Point(45, 215); - this.label130.Name = "label130"; - this.label130.Size = new System.Drawing.Size(58, 13); - this.label130.TabIndex = 30; - this.label130.Text = "Probability:"; - // - // ScenarioEntityPointAvailableInMpSpComboBox - // - this.ScenarioEntityPointAvailableInMpSpComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.ScenarioEntityPointAvailableInMpSpComboBox.FormattingEnabled = true; - this.ScenarioEntityPointAvailableInMpSpComboBox.Location = new System.Drawing.Point(109, 188); - this.ScenarioEntityPointAvailableInMpSpComboBox.Name = "ScenarioEntityPointAvailableInMpSpComboBox"; - this.ScenarioEntityPointAvailableInMpSpComboBox.Size = new System.Drawing.Size(88, 21); - this.ScenarioEntityPointAvailableInMpSpComboBox.TabIndex = 29; - this.ScenarioEntityPointAvailableInMpSpComboBox.SelectedIndexChanged += new System.EventHandler(this.ScenarioEntityPointAvailableInMpSpComboBox_SelectedIndexChanged); - // - // label129 - // - this.label129.AutoSize = true; - this.label129.Location = new System.Drawing.Point(14, 191); - this.label129.Name = "label129"; - this.label129.Size = new System.Drawing.Size(90, 13); - this.label129.TabIndex = 28; - this.label129.Text = "AvailableInMpSp:"; - // - // ScenarioEntityPointRequiredImapHashLabel - // - this.ScenarioEntityPointRequiredImapHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioEntityPointRequiredImapHashLabel.AutoSize = true; - this.ScenarioEntityPointRequiredImapHashLabel.Location = new System.Drawing.Point(387, 168); - this.ScenarioEntityPointRequiredImapHashLabel.Name = "ScenarioEntityPointRequiredImapHashLabel"; - this.ScenarioEntityPointRequiredImapHashLabel.Size = new System.Drawing.Size(44, 13); - this.ScenarioEntityPointRequiredImapHashLabel.TabIndex = 27; - this.ScenarioEntityPointRequiredImapHashLabel.Text = "Hash: 0"; - // - // ScenarioEntityPointRequiredImapTextBox - // - this.ScenarioEntityPointRequiredImapTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioEntityPointRequiredImapTextBox.Location = new System.Drawing.Point(109, 165); - this.ScenarioEntityPointRequiredImapTextBox.Name = "ScenarioEntityPointRequiredImapTextBox"; - this.ScenarioEntityPointRequiredImapTextBox.Size = new System.Drawing.Size(272, 20); - this.ScenarioEntityPointRequiredImapTextBox.TabIndex = 26; - this.ScenarioEntityPointRequiredImapTextBox.TextChanged += new System.EventHandler(this.ScenarioEntityPointRequiredImapTextBox_TextChanged); - // - // label128 - // - this.label128.AutoSize = true; - this.label128.Location = new System.Drawing.Point(24, 168); - this.label128.Name = "label128"; - this.label128.Size = new System.Drawing.Size(79, 13); - this.label128.TabIndex = 25; - this.label128.Text = "Required Imap:"; - // - // ScenarioEntityPointInteriorHashLabel - // - this.ScenarioEntityPointInteriorHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioEntityPointInteriorHashLabel.AutoSize = true; - this.ScenarioEntityPointInteriorHashLabel.Location = new System.Drawing.Point(387, 145); - this.ScenarioEntityPointInteriorHashLabel.Name = "ScenarioEntityPointInteriorHashLabel"; - this.ScenarioEntityPointInteriorHashLabel.Size = new System.Drawing.Size(44, 13); - this.ScenarioEntityPointInteriorHashLabel.TabIndex = 24; - this.ScenarioEntityPointInteriorHashLabel.Text = "Hash: 0"; - // - // ScenarioEntityPointInteriorTextBox - // - this.ScenarioEntityPointInteriorTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioEntityPointInteriorTextBox.Location = new System.Drawing.Point(109, 142); - this.ScenarioEntityPointInteriorTextBox.Name = "ScenarioEntityPointInteriorTextBox"; - this.ScenarioEntityPointInteriorTextBox.Size = new System.Drawing.Size(272, 20); - this.ScenarioEntityPointInteriorTextBox.TabIndex = 23; - this.ScenarioEntityPointInteriorTextBox.TextChanged += new System.EventHandler(this.ScenarioEntityPointInteriorTextBox_TextChanged); - // - // label126 - // - this.label126.AutoSize = true; - this.label126.Location = new System.Drawing.Point(61, 145); - this.label126.Name = "label126"; - this.label126.Size = new System.Drawing.Size(42, 13); - this.label126.TabIndex = 22; - this.label126.Text = "Interior:"; - // - // ScenarioEntityPointGroupHashLabel - // - this.ScenarioEntityPointGroupHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioEntityPointGroupHashLabel.AutoSize = true; - this.ScenarioEntityPointGroupHashLabel.Location = new System.Drawing.Point(387, 122); - this.ScenarioEntityPointGroupHashLabel.Name = "ScenarioEntityPointGroupHashLabel"; - this.ScenarioEntityPointGroupHashLabel.Size = new System.Drawing.Size(44, 13); - this.ScenarioEntityPointGroupHashLabel.TabIndex = 21; - this.ScenarioEntityPointGroupHashLabel.Text = "Hash: 0"; - // - // ScenarioEntityPointGroupTextBox - // - this.ScenarioEntityPointGroupTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioEntityPointGroupTextBox.Location = new System.Drawing.Point(109, 119); - this.ScenarioEntityPointGroupTextBox.Name = "ScenarioEntityPointGroupTextBox"; - this.ScenarioEntityPointGroupTextBox.Size = new System.Drawing.Size(272, 20); - this.ScenarioEntityPointGroupTextBox.TabIndex = 20; - this.ScenarioEntityPointGroupTextBox.TextChanged += new System.EventHandler(this.ScenarioEntityPointGroupTextBox_TextChanged); - // - // label124 - // - this.label124.AutoSize = true; - this.label124.Location = new System.Drawing.Point(64, 122); - this.label124.Name = "label124"; - this.label124.Size = new System.Drawing.Size(39, 13); - this.label124.TabIndex = 19; - this.label124.Text = "Group:"; - // - // ScenarioEntityPointPedTypeHashLabel - // - this.ScenarioEntityPointPedTypeHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioEntityPointPedTypeHashLabel.AutoSize = true; - this.ScenarioEntityPointPedTypeHashLabel.Location = new System.Drawing.Point(387, 99); - this.ScenarioEntityPointPedTypeHashLabel.Name = "ScenarioEntityPointPedTypeHashLabel"; - this.ScenarioEntityPointPedTypeHashLabel.Size = new System.Drawing.Size(44, 13); - this.ScenarioEntityPointPedTypeHashLabel.TabIndex = 18; - this.ScenarioEntityPointPedTypeHashLabel.Text = "Hash: 0"; - // - // ScenarioEntityPointPedTypeTextBox - // - this.ScenarioEntityPointPedTypeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioEntityPointPedTypeTextBox.Location = new System.Drawing.Point(109, 96); - this.ScenarioEntityPointPedTypeTextBox.Name = "ScenarioEntityPointPedTypeTextBox"; - this.ScenarioEntityPointPedTypeTextBox.Size = new System.Drawing.Size(272, 20); - this.ScenarioEntityPointPedTypeTextBox.TabIndex = 17; - this.ScenarioEntityPointPedTypeTextBox.TextChanged += new System.EventHandler(this.ScenarioEntityPointPedTypeTextBox_TextChanged); - // - // label122 - // - this.label122.AutoSize = true; - this.label122.Location = new System.Drawing.Point(51, 99); - this.label122.Name = "label122"; - this.label122.Size = new System.Drawing.Size(52, 13); - this.label122.TabIndex = 16; - this.label122.Text = "Ped type:"; - // - // ScenarioEntityPointSpawnTypeHashLabel - // - this.ScenarioEntityPointSpawnTypeHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioEntityPointSpawnTypeHashLabel.AutoSize = true; - this.ScenarioEntityPointSpawnTypeHashLabel.Location = new System.Drawing.Point(387, 76); - this.ScenarioEntityPointSpawnTypeHashLabel.Name = "ScenarioEntityPointSpawnTypeHashLabel"; - this.ScenarioEntityPointSpawnTypeHashLabel.Size = new System.Drawing.Size(44, 13); - this.ScenarioEntityPointSpawnTypeHashLabel.TabIndex = 15; - this.ScenarioEntityPointSpawnTypeHashLabel.Text = "Hash: 0"; - // - // ScenarioEntityPointSpawnTypeTextBox - // - this.ScenarioEntityPointSpawnTypeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioEntityPointSpawnTypeTextBox.Location = new System.Drawing.Point(109, 73); - this.ScenarioEntityPointSpawnTypeTextBox.Name = "ScenarioEntityPointSpawnTypeTextBox"; - this.ScenarioEntityPointSpawnTypeTextBox.Size = new System.Drawing.Size(272, 20); - this.ScenarioEntityPointSpawnTypeTextBox.TabIndex = 14; - this.ScenarioEntityPointSpawnTypeTextBox.TextChanged += new System.EventHandler(this.ScenarioEntityPointSpawnTypeTextBox_TextChanged); - // - // label120 - // - this.label120.AutoSize = true; - this.label120.Location = new System.Drawing.Point(37, 76); - this.label120.Name = "label120"; - this.label120.Size = new System.Drawing.Size(66, 13); - this.label120.TabIndex = 13; - this.label120.Text = "Spawn type:"; - // - // ScenarioEntityPointRotationTextBox - // - this.ScenarioEntityPointRotationTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioEntityPointRotationTextBox.Location = new System.Drawing.Point(109, 27); - this.ScenarioEntityPointRotationTextBox.Name = "ScenarioEntityPointRotationTextBox"; - this.ScenarioEntityPointRotationTextBox.Size = new System.Drawing.Size(272, 20); - this.ScenarioEntityPointRotationTextBox.TabIndex = 9; - this.ScenarioEntityPointRotationTextBox.TextChanged += new System.EventHandler(this.ScenarioEntityPointRotationTextBox_TextChanged); - // - // label118 - // - this.label118.AutoSize = true; - this.label118.Location = new System.Drawing.Point(27, 30); - this.label118.Name = "label118"; - this.label118.Size = new System.Drawing.Size(76, 13); - this.label118.TabIndex = 8; - this.label118.Text = "Offset rotation:"; - // - // ScenarioEntityPointGoToButton - // - this.ScenarioEntityPointGoToButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioEntityPointGoToButton.Location = new System.Drawing.Point(387, 2); - this.ScenarioEntityPointGoToButton.Name = "ScenarioEntityPointGoToButton"; - this.ScenarioEntityPointGoToButton.Size = new System.Drawing.Size(68, 23); - this.ScenarioEntityPointGoToButton.TabIndex = 7; - this.ScenarioEntityPointGoToButton.Text = "Go to"; - this.ScenarioEntityPointGoToButton.UseVisualStyleBackColor = true; - this.ScenarioEntityPointGoToButton.Click += new System.EventHandler(this.ScenarioEntityPointGoToButton_Click); - // - // ScenarioEntityPointPositionTextBox - // - this.ScenarioEntityPointPositionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioEntityPointPositionTextBox.Location = new System.Drawing.Point(109, 4); - this.ScenarioEntityPointPositionTextBox.Name = "ScenarioEntityPointPositionTextBox"; - this.ScenarioEntityPointPositionTextBox.Size = new System.Drawing.Size(272, 20); - this.ScenarioEntityPointPositionTextBox.TabIndex = 6; - this.ScenarioEntityPointPositionTextBox.TextChanged += new System.EventHandler(this.ScenarioEntityPointPositionTextBox_TextChanged); - // - // label117 - // - this.label117.AutoSize = true; - this.label117.Location = new System.Drawing.Point(26, 7); - this.label117.Name = "label117"; - this.label117.Size = new System.Drawing.Size(77, 13); - this.label117.TabIndex = 5; - this.label117.Text = "Offset position:"; - // - // label116 - // - this.label116.AutoSize = true; - this.label116.Location = new System.Drawing.Point(65, 53); - this.label116.Name = "label116"; - this.label116.Size = new System.Drawing.Size(38, 13); - this.label116.TabIndex = 10; - this.label116.Text = "Name:"; - // - // ScenarioChainTabPage - // - this.ScenarioChainTabPage.Controls.Add(this.ScenarioChainDeleteButton); - this.ScenarioChainTabPage.Controls.Add(this.ScenarioChainAddToProjectButton); - this.ScenarioChainTabPage.Controls.Add(this.splitContainer3); - this.ScenarioChainTabPage.Location = new System.Drawing.Point(4, 22); - this.ScenarioChainTabPage.Name = "ScenarioChainTabPage"; - this.ScenarioChainTabPage.Size = new System.Drawing.Size(510, 443); - this.ScenarioChainTabPage.TabIndex = 3; - this.ScenarioChainTabPage.Text = "Chain"; - this.ScenarioChainTabPage.UseVisualStyleBackColor = true; - // - // ScenarioChainDeleteButton - // - this.ScenarioChainDeleteButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioChainDeleteButton.Enabled = false; - this.ScenarioChainDeleteButton.Location = new System.Drawing.Point(415, 2); - this.ScenarioChainDeleteButton.Name = "ScenarioChainDeleteButton"; - this.ScenarioChainDeleteButton.Size = new System.Drawing.Size(90, 23); - this.ScenarioChainDeleteButton.TabIndex = 9; - this.ScenarioChainDeleteButton.Text = "Delete Chain"; - this.ScenarioChainDeleteButton.UseVisualStyleBackColor = true; - this.ScenarioChainDeleteButton.Click += new System.EventHandler(this.ScenarioChainDeleteButton_Click); - // - // ScenarioChainAddToProjectButton - // - this.ScenarioChainAddToProjectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioChainAddToProjectButton.Enabled = false; - this.ScenarioChainAddToProjectButton.Location = new System.Drawing.Point(319, 2); - this.ScenarioChainAddToProjectButton.Name = "ScenarioChainAddToProjectButton"; - this.ScenarioChainAddToProjectButton.Size = new System.Drawing.Size(90, 23); - this.ScenarioChainAddToProjectButton.TabIndex = 8; - this.ScenarioChainAddToProjectButton.Text = "Add to Project"; - this.ScenarioChainAddToProjectButton.UseVisualStyleBackColor = true; - this.ScenarioChainAddToProjectButton.Click += new System.EventHandler(this.ScenarioChainAddToProjectButton_Click); - // - // splitContainer3 - // - this.splitContainer3.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.splitContainer3.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; - this.splitContainer3.Location = new System.Drawing.Point(0, 31); - this.splitContainer3.Name = "splitContainer3"; - // - // splitContainer3.Panel1 - // - this.splitContainer3.Panel1.Controls.Add(this.ScenarioChainMoveEdgeDownButton); - this.splitContainer3.Panel1.Controls.Add(this.ScenarioChainMoveEdgeUpButton); - this.splitContainer3.Panel1.Controls.Add(this.label138); - this.splitContainer3.Panel1.Controls.Add(this.ScenarioChainUnk1UpDown); - this.splitContainer3.Panel1.Controls.Add(this.ScenarioChainRemoveEdgeButton); - this.splitContainer3.Panel1.Controls.Add(this.ScenarioChainAddEdgeButton); - this.splitContainer3.Panel1.Controls.Add(this.ScenarioChainEdgesListBox); - this.splitContainer3.Panel1.Controls.Add(this.ScenarioChainEdgeCountLabel); - // - // splitContainer3.Panel2 - // - this.splitContainer3.Panel2.Controls.Add(this.ScenarioChainEdgePanel); - this.splitContainer3.Size = new System.Drawing.Size(510, 412); - this.splitContainer3.SplitterDistance = 205; - this.splitContainer3.TabIndex = 1; - // - // ScenarioChainMoveEdgeDownButton - // - this.ScenarioChainMoveEdgeDownButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.ScenarioChainMoveEdgeDownButton.Location = new System.Drawing.Point(85, 353); - this.ScenarioChainMoveEdgeDownButton.Name = "ScenarioChainMoveEdgeDownButton"; - this.ScenarioChainMoveEdgeDownButton.Size = new System.Drawing.Size(76, 23); - this.ScenarioChainMoveEdgeDownButton.TabIndex = 5; - this.ScenarioChainMoveEdgeDownButton.Text = "Move Down"; - this.ScenarioChainMoveEdgeDownButton.UseVisualStyleBackColor = true; - this.ScenarioChainMoveEdgeDownButton.Click += new System.EventHandler(this.ScenarioChainMoveEdgeDownButton_Click); - // - // ScenarioChainMoveEdgeUpButton - // - this.ScenarioChainMoveEdgeUpButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.ScenarioChainMoveEdgeUpButton.Location = new System.Drawing.Point(3, 353); - this.ScenarioChainMoveEdgeUpButton.Name = "ScenarioChainMoveEdgeUpButton"; - this.ScenarioChainMoveEdgeUpButton.Size = new System.Drawing.Size(76, 23); - this.ScenarioChainMoveEdgeUpButton.TabIndex = 4; - this.ScenarioChainMoveEdgeUpButton.Text = "Move Up"; - this.ScenarioChainMoveEdgeUpButton.UseVisualStyleBackColor = true; - this.ScenarioChainMoveEdgeUpButton.Click += new System.EventHandler(this.ScenarioChainMoveEdgeUpButton_Click); - // - // label138 - // - this.label138.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.label138.AutoSize = true; - this.label138.Location = new System.Drawing.Point(10, 391); - this.label138.Name = "label138"; - this.label138.Size = new System.Drawing.Size(69, 13); - this.label138.TabIndex = 6; - this.label138.Text = "Chain Unk 1:"; - // - // ScenarioChainUnk1UpDown - // - this.ScenarioChainUnk1UpDown.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.ScenarioChainUnk1UpDown.Location = new System.Drawing.Point(85, 389); - this.ScenarioChainUnk1UpDown.Maximum = new decimal(new int[] { - 255, - 0, - 0, - 0}); - this.ScenarioChainUnk1UpDown.Name = "ScenarioChainUnk1UpDown"; - this.ScenarioChainUnk1UpDown.Size = new System.Drawing.Size(57, 20); - this.ScenarioChainUnk1UpDown.TabIndex = 7; - this.ScenarioChainUnk1UpDown.ValueChanged += new System.EventHandler(this.ScenarioChainUnk1UpDown_ValueChanged); - // - // ScenarioChainRemoveEdgeButton - // - this.ScenarioChainRemoveEdgeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.ScenarioChainRemoveEdgeButton.Location = new System.Drawing.Point(85, 324); - this.ScenarioChainRemoveEdgeButton.Name = "ScenarioChainRemoveEdgeButton"; - this.ScenarioChainRemoveEdgeButton.Size = new System.Drawing.Size(76, 23); - this.ScenarioChainRemoveEdgeButton.TabIndex = 3; - this.ScenarioChainRemoveEdgeButton.Text = "Remove"; - this.ScenarioChainRemoveEdgeButton.UseVisualStyleBackColor = true; - this.ScenarioChainRemoveEdgeButton.Click += new System.EventHandler(this.ScenarioChainRemoveEdgeButton_Click); - // - // ScenarioChainAddEdgeButton - // - this.ScenarioChainAddEdgeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.ScenarioChainAddEdgeButton.Location = new System.Drawing.Point(3, 324); - this.ScenarioChainAddEdgeButton.Name = "ScenarioChainAddEdgeButton"; - this.ScenarioChainAddEdgeButton.Size = new System.Drawing.Size(76, 23); - this.ScenarioChainAddEdgeButton.TabIndex = 2; - this.ScenarioChainAddEdgeButton.Text = "Add"; - this.ScenarioChainAddEdgeButton.UseVisualStyleBackColor = true; - this.ScenarioChainAddEdgeButton.Click += new System.EventHandler(this.ScenarioChainAddEdgeButton_Click); - // - // ScenarioChainEdgesListBox - // - this.ScenarioChainEdgesListBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioChainEdgesListBox.FormattingEnabled = true; - this.ScenarioChainEdgesListBox.Location = new System.Drawing.Point(0, 0); - this.ScenarioChainEdgesListBox.Name = "ScenarioChainEdgesListBox"; - this.ScenarioChainEdgesListBox.Size = new System.Drawing.Size(202, 290); - this.ScenarioChainEdgesListBox.TabIndex = 0; - this.ScenarioChainEdgesListBox.SelectedIndexChanged += new System.EventHandler(this.ScenarioChainEdgesListBox_SelectedIndexChanged); - // - // ScenarioChainEdgeCountLabel - // - this.ScenarioChainEdgeCountLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.ScenarioChainEdgeCountLabel.AutoSize = true; - this.ScenarioChainEdgeCountLabel.Location = new System.Drawing.Point(3, 308); - this.ScenarioChainEdgeCountLabel.Name = "ScenarioChainEdgeCountLabel"; - this.ScenarioChainEdgeCountLabel.Size = new System.Drawing.Size(75, 13); - this.ScenarioChainEdgeCountLabel.TabIndex = 1; - this.ScenarioChainEdgeCountLabel.Text = "Edge Count: 0"; - // - // ScenarioChainEdgePanel - // - this.ScenarioChainEdgePanel.Controls.Add(this.ScenarioChainEdgeNavSpeedComboBox); - this.ScenarioChainEdgePanel.Controls.Add(this.label137); - this.ScenarioChainEdgePanel.Controls.Add(this.ScenarioChainEdgeNavModeComboBox); - this.ScenarioChainEdgePanel.Controls.Add(this.label136); - this.ScenarioChainEdgePanel.Controls.Add(this.ScenarioChainEdgeActionComboBox); - this.ScenarioChainEdgePanel.Controls.Add(this.label127); - this.ScenarioChainEdgePanel.Controls.Add(this.ScenarioChainEdgeNodeIndexToUpDown); - this.ScenarioChainEdgePanel.Controls.Add(this.ScenarioChainEdgeNodeIndexFromUpDown); - this.ScenarioChainEdgePanel.Controls.Add(this.label125); - this.ScenarioChainEdgePanel.Controls.Add(this.label121); - this.ScenarioChainEdgePanel.Dock = System.Windows.Forms.DockStyle.Fill; - this.ScenarioChainEdgePanel.Enabled = false; - this.ScenarioChainEdgePanel.Location = new System.Drawing.Point(0, 0); - this.ScenarioChainEdgePanel.Name = "ScenarioChainEdgePanel"; - this.ScenarioChainEdgePanel.Size = new System.Drawing.Size(301, 412); - this.ScenarioChainEdgePanel.TabIndex = 0; - // - // ScenarioChainEdgeNavSpeedComboBox - // - this.ScenarioChainEdgeNavSpeedComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.ScenarioChainEdgeNavSpeedComboBox.FormattingEnabled = true; - this.ScenarioChainEdgeNavSpeedComboBox.Location = new System.Drawing.Point(100, 118); - this.ScenarioChainEdgeNavSpeedComboBox.Name = "ScenarioChainEdgeNavSpeedComboBox"; - this.ScenarioChainEdgeNavSpeedComboBox.Size = new System.Drawing.Size(142, 21); - this.ScenarioChainEdgeNavSpeedComboBox.TabIndex = 10; - this.ScenarioChainEdgeNavSpeedComboBox.SelectedIndexChanged += new System.EventHandler(this.ScenarioChainEdgeNavSpeedComboBox_SelectedIndexChanged); - // - // label137 - // - this.label137.AutoSize = true; - this.label137.Location = new System.Drawing.Point(33, 121); - this.label137.Name = "label137"; - this.label137.Size = new System.Drawing.Size(61, 13); - this.label137.TabIndex = 9; - this.label137.Text = "NavSpeed:"; - // - // ScenarioChainEdgeNavModeComboBox - // - this.ScenarioChainEdgeNavModeComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.ScenarioChainEdgeNavModeComboBox.FormattingEnabled = true; - this.ScenarioChainEdgeNavModeComboBox.Location = new System.Drawing.Point(100, 91); - this.ScenarioChainEdgeNavModeComboBox.Name = "ScenarioChainEdgeNavModeComboBox"; - this.ScenarioChainEdgeNavModeComboBox.Size = new System.Drawing.Size(142, 21); - this.ScenarioChainEdgeNavModeComboBox.TabIndex = 8; - this.ScenarioChainEdgeNavModeComboBox.SelectedIndexChanged += new System.EventHandler(this.ScenarioChainEdgeNavModeComboBox_SelectedIndexChanged); - // - // label136 - // - this.label136.AutoSize = true; - this.label136.Location = new System.Drawing.Point(37, 94); - this.label136.Name = "label136"; - this.label136.Size = new System.Drawing.Size(57, 13); - this.label136.TabIndex = 7; - this.label136.Text = "NavMode:"; - // - // ScenarioChainEdgeActionComboBox - // - this.ScenarioChainEdgeActionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.ScenarioChainEdgeActionComboBox.FormattingEnabled = true; - this.ScenarioChainEdgeActionComboBox.Location = new System.Drawing.Point(100, 64); - this.ScenarioChainEdgeActionComboBox.Name = "ScenarioChainEdgeActionComboBox"; - this.ScenarioChainEdgeActionComboBox.Size = new System.Drawing.Size(142, 21); - this.ScenarioChainEdgeActionComboBox.TabIndex = 6; - this.ScenarioChainEdgeActionComboBox.SelectedIndexChanged += new System.EventHandler(this.ScenarioChainEdgeActionComboBox_SelectedIndexChanged); - // - // label127 - // - this.label127.AutoSize = true; - this.label127.Location = new System.Drawing.Point(54, 67); - this.label127.Name = "label127"; - this.label127.Size = new System.Drawing.Size(40, 13); - this.label127.TabIndex = 5; - this.label127.Text = "Action:"; - // - // ScenarioChainEdgeNodeIndexToUpDown - // - this.ScenarioChainEdgeNodeIndexToUpDown.Location = new System.Drawing.Point(100, 38); - this.ScenarioChainEdgeNodeIndexToUpDown.Maximum = new decimal(new int[] { - 65535, - 0, - 0, - 0}); - this.ScenarioChainEdgeNodeIndexToUpDown.Name = "ScenarioChainEdgeNodeIndexToUpDown"; - this.ScenarioChainEdgeNodeIndexToUpDown.Size = new System.Drawing.Size(81, 20); - this.ScenarioChainEdgeNodeIndexToUpDown.TabIndex = 4; - this.ScenarioChainEdgeNodeIndexToUpDown.ValueChanged += new System.EventHandler(this.ScenarioChainEdgeNodeIndexToUpDown_ValueChanged); - // - // ScenarioChainEdgeNodeIndexFromUpDown - // - this.ScenarioChainEdgeNodeIndexFromUpDown.Location = new System.Drawing.Point(100, 12); - this.ScenarioChainEdgeNodeIndexFromUpDown.Maximum = new decimal(new int[] { - 65535, - 0, - 0, - 0}); - this.ScenarioChainEdgeNodeIndexFromUpDown.Name = "ScenarioChainEdgeNodeIndexFromUpDown"; - this.ScenarioChainEdgeNodeIndexFromUpDown.Size = new System.Drawing.Size(81, 20); - this.ScenarioChainEdgeNodeIndexFromUpDown.TabIndex = 2; - this.ScenarioChainEdgeNodeIndexFromUpDown.ValueChanged += new System.EventHandler(this.ScenarioChainEdgeNodeIndexFromUpDown_ValueChanged); - // - // label125 - // - this.label125.AutoSize = true; - this.label125.Location = new System.Drawing.Point(19, 40); - this.label125.Name = "label125"; - this.label125.Size = new System.Drawing.Size(75, 13); - this.label125.TabIndex = 3; - this.label125.Text = "NodeIndexTo:"; - // - // label121 - // - this.label121.AutoSize = true; - this.label121.Location = new System.Drawing.Point(9, 14); - this.label121.Name = "label121"; - this.label121.Size = new System.Drawing.Size(85, 13); - this.label121.TabIndex = 1; - this.label121.Text = "NodeIndexFrom:"; - // - // ScenarioChainNodeTabPage - // - this.ScenarioChainNodeTabPage.Controls.Add(this.ScenarioChainNodePanel); - this.ScenarioChainNodeTabPage.Controls.Add(this.ScenarioChainNodeDeleteButton); - this.ScenarioChainNodeTabPage.Controls.Add(this.ScenarioChainNodeCheckBox); - this.ScenarioChainNodeTabPage.Controls.Add(this.ScenarioChainNodeAddToProjectButton); - this.ScenarioChainNodeTabPage.Location = new System.Drawing.Point(4, 22); - this.ScenarioChainNodeTabPage.Name = "ScenarioChainNodeTabPage"; - this.ScenarioChainNodeTabPage.Size = new System.Drawing.Size(510, 443); - this.ScenarioChainNodeTabPage.TabIndex = 6; - this.ScenarioChainNodeTabPage.Text = "Chain Node"; - this.ScenarioChainNodeTabPage.UseVisualStyleBackColor = true; - // - // ScenarioChainNodePanel - // - this.ScenarioChainNodePanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioChainNodePanel.Controls.Add(this.ScenarioChainNodeTypeComboBox); - this.ScenarioChainNodePanel.Controls.Add(this.ScenarioChainNodeIndexTextBox); - this.ScenarioChainNodePanel.Controls.Add(this.label115); - this.ScenarioChainNodePanel.Controls.Add(this.ScenarioChainNodeLastCheckBox); - this.ScenarioChainNodePanel.Controls.Add(this.ScenarioChainNodeFirstCheckBox); - this.ScenarioChainNodePanel.Controls.Add(this.label123); - this.ScenarioChainNodePanel.Controls.Add(this.ScenarioChainNodeUnk1HashLabel); - this.ScenarioChainNodePanel.Controls.Add(this.ScenarioChainNodeUnk1TextBox); - this.ScenarioChainNodePanel.Controls.Add(this.label119); - this.ScenarioChainNodePanel.Controls.Add(this.ScenarioChainNodeGoToButton); - this.ScenarioChainNodePanel.Controls.Add(this.ScenarioChainNodePositionTextBox); - this.ScenarioChainNodePanel.Controls.Add(this.label105); - this.ScenarioChainNodePanel.Enabled = false; - this.ScenarioChainNodePanel.Location = new System.Drawing.Point(0, 29); - this.ScenarioChainNodePanel.Name = "ScenarioChainNodePanel"; - this.ScenarioChainNodePanel.Size = new System.Drawing.Size(510, 201); - this.ScenarioChainNodePanel.TabIndex = 8; - // - // ScenarioChainNodeTypeComboBox - // - this.ScenarioChainNodeTypeComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioChainNodeTypeComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.ScenarioChainNodeTypeComboBox.FormattingEnabled = true; - this.ScenarioChainNodeTypeComboBox.Location = new System.Drawing.Point(73, 55); - this.ScenarioChainNodeTypeComboBox.Name = "ScenarioChainNodeTypeComboBox"; - this.ScenarioChainNodeTypeComboBox.Size = new System.Drawing.Size(336, 21); - this.ScenarioChainNodeTypeComboBox.TabIndex = 12; - this.ScenarioChainNodeTypeComboBox.SelectedIndexChanged += new System.EventHandler(this.ScenarioChainNodeTypeComboBox_SelectedIndexChanged); - // - // ScenarioChainNodeIndexTextBox - // - this.ScenarioChainNodeIndexTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioChainNodeIndexTextBox.Location = new System.Drawing.Point(73, 142); - this.ScenarioChainNodeIndexTextBox.Name = "ScenarioChainNodeIndexTextBox"; - this.ScenarioChainNodeIndexTextBox.ReadOnly = true; - this.ScenarioChainNodeIndexTextBox.Size = new System.Drawing.Size(94, 20); - this.ScenarioChainNodeIndexTextBox.TabIndex = 17; - // - // label115 - // - this.label115.AutoSize = true; - this.label115.Location = new System.Drawing.Point(33, 145); - this.label115.Name = "label115"; - this.label115.Size = new System.Drawing.Size(36, 13); - this.label115.TabIndex = 16; - this.label115.Text = "Index:"; - // - // ScenarioChainNodeLastCheckBox - // - this.ScenarioChainNodeLastCheckBox.AutoSize = true; - this.ScenarioChainNodeLastCheckBox.Location = new System.Drawing.Point(73, 105); - this.ScenarioChainNodeLastCheckBox.Name = "ScenarioChainNodeLastCheckBox"; - this.ScenarioChainNodeLastCheckBox.Size = new System.Drawing.Size(86, 17); - this.ScenarioChainNodeLastCheckBox.TabIndex = 15; - this.ScenarioChainNodeLastCheckBox.Text = "Last in chain"; - this.ScenarioChainNodeLastCheckBox.UseVisualStyleBackColor = true; - this.ScenarioChainNodeLastCheckBox.CheckedChanged += new System.EventHandler(this.ScenarioChainNodeLastCheckBox_CheckedChanged); - // - // ScenarioChainNodeFirstCheckBox - // - this.ScenarioChainNodeFirstCheckBox.AutoSize = true; - this.ScenarioChainNodeFirstCheckBox.Location = new System.Drawing.Point(73, 82); - this.ScenarioChainNodeFirstCheckBox.Name = "ScenarioChainNodeFirstCheckBox"; - this.ScenarioChainNodeFirstCheckBox.Size = new System.Drawing.Size(85, 17); - this.ScenarioChainNodeFirstCheckBox.TabIndex = 14; - this.ScenarioChainNodeFirstCheckBox.Text = "First in chain"; - this.ScenarioChainNodeFirstCheckBox.UseVisualStyleBackColor = true; - this.ScenarioChainNodeFirstCheckBox.CheckedChanged += new System.EventHandler(this.ScenarioChainNodeFirstCheckBox_CheckedChanged); - // - // label123 - // - this.label123.AutoSize = true; - this.label123.Location = new System.Drawing.Point(33, 58); - this.label123.Name = "label123"; - this.label123.Size = new System.Drawing.Size(34, 13); - this.label123.TabIndex = 11; - this.label123.Text = "Type:"; - // - // ScenarioChainNodeUnk1HashLabel - // - this.ScenarioChainNodeUnk1HashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioChainNodeUnk1HashLabel.AutoSize = true; - this.ScenarioChainNodeUnk1HashLabel.Location = new System.Drawing.Point(341, 32); - this.ScenarioChainNodeUnk1HashLabel.Name = "ScenarioChainNodeUnk1HashLabel"; - this.ScenarioChainNodeUnk1HashLabel.Size = new System.Drawing.Size(44, 13); - this.ScenarioChainNodeUnk1HashLabel.TabIndex = 10; - this.ScenarioChainNodeUnk1HashLabel.Text = "Hash: 0"; - // - // ScenarioChainNodeUnk1TextBox - // - this.ScenarioChainNodeUnk1TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioChainNodeUnk1TextBox.Location = new System.Drawing.Point(73, 29); - this.ScenarioChainNodeUnk1TextBox.Name = "ScenarioChainNodeUnk1TextBox"; - this.ScenarioChainNodeUnk1TextBox.Size = new System.Drawing.Size(262, 20); - this.ScenarioChainNodeUnk1TextBox.TabIndex = 9; - this.ScenarioChainNodeUnk1TextBox.TextChanged += new System.EventHandler(this.ScenarioChainNodeUnk1TextBox_TextChanged); - // - // label119 - // - this.label119.AutoSize = true; - this.label119.Location = new System.Drawing.Point(28, 32); - this.label119.Name = "label119"; - this.label119.Size = new System.Drawing.Size(39, 13); - this.label119.TabIndex = 8; - this.label119.Text = "Unk 1:"; - // - // ScenarioChainNodeGoToButton - // - this.ScenarioChainNodeGoToButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioChainNodeGoToButton.Location = new System.Drawing.Point(341, 1); - this.ScenarioChainNodeGoToButton.Name = "ScenarioChainNodeGoToButton"; - this.ScenarioChainNodeGoToButton.Size = new System.Drawing.Size(68, 23); - this.ScenarioChainNodeGoToButton.TabIndex = 7; - this.ScenarioChainNodeGoToButton.Text = "Go to"; - this.ScenarioChainNodeGoToButton.UseVisualStyleBackColor = true; - this.ScenarioChainNodeGoToButton.Click += new System.EventHandler(this.ScenarioChainNodeGoToButton_Click); - // - // ScenarioChainNodePositionTextBox - // - this.ScenarioChainNodePositionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioChainNodePositionTextBox.Location = new System.Drawing.Point(73, 3); - this.ScenarioChainNodePositionTextBox.Name = "ScenarioChainNodePositionTextBox"; - this.ScenarioChainNodePositionTextBox.Size = new System.Drawing.Size(262, 20); - this.ScenarioChainNodePositionTextBox.TabIndex = 6; - this.ScenarioChainNodePositionTextBox.TextChanged += new System.EventHandler(this.ScenarioChainNodePositionTextBox_TextChanged); - // - // label105 - // - this.label105.AutoSize = true; - this.label105.Location = new System.Drawing.Point(20, 6); - this.label105.Name = "label105"; - this.label105.Size = new System.Drawing.Size(47, 13); - this.label105.TabIndex = 5; - this.label105.Text = "Position:"; - // - // ScenarioChainNodeDeleteButton - // - this.ScenarioChainNodeDeleteButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioChainNodeDeleteButton.Enabled = false; - this.ScenarioChainNodeDeleteButton.Location = new System.Drawing.Point(415, 2); - this.ScenarioChainNodeDeleteButton.Name = "ScenarioChainNodeDeleteButton"; - this.ScenarioChainNodeDeleteButton.Size = new System.Drawing.Size(90, 23); - this.ScenarioChainNodeDeleteButton.TabIndex = 7; - this.ScenarioChainNodeDeleteButton.Text = "Delete Node"; - this.ScenarioChainNodeDeleteButton.UseVisualStyleBackColor = true; - this.ScenarioChainNodeDeleteButton.Click += new System.EventHandler(this.ScenarioChainNodeDeleteButton_Click); - // - // ScenarioChainNodeCheckBox - // - this.ScenarioChainNodeCheckBox.AutoSize = true; - this.ScenarioChainNodeCheckBox.Location = new System.Drawing.Point(6, 6); - this.ScenarioChainNodeCheckBox.Name = "ScenarioChainNodeCheckBox"; - this.ScenarioChainNodeCheckBox.Size = new System.Drawing.Size(116, 17); - this.ScenarioChainNodeCheckBox.TabIndex = 5; - this.ScenarioChainNodeCheckBox.Text = "Define Chain Node"; - this.ScenarioChainNodeCheckBox.UseVisualStyleBackColor = true; - this.ScenarioChainNodeCheckBox.CheckedChanged += new System.EventHandler(this.ScenarioChainNodeCheckBox_CheckedChanged); - // - // ScenarioChainNodeAddToProjectButton - // - this.ScenarioChainNodeAddToProjectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioChainNodeAddToProjectButton.Enabled = false; - this.ScenarioChainNodeAddToProjectButton.Location = new System.Drawing.Point(319, 2); - this.ScenarioChainNodeAddToProjectButton.Name = "ScenarioChainNodeAddToProjectButton"; - this.ScenarioChainNodeAddToProjectButton.Size = new System.Drawing.Size(90, 23); - this.ScenarioChainNodeAddToProjectButton.TabIndex = 6; - this.ScenarioChainNodeAddToProjectButton.Text = "Add to Project"; - this.ScenarioChainNodeAddToProjectButton.UseVisualStyleBackColor = true; - this.ScenarioChainNodeAddToProjectButton.Click += new System.EventHandler(this.ScenarioChainNodeAddToProjectButton_Click); - // - // ScenarioClusterTabPage - // - this.ScenarioClusterTabPage.Controls.Add(this.ScenarioClusterDeleteButton); - this.ScenarioClusterTabPage.Controls.Add(this.ScenarioClusterAddToProjectButton); - this.ScenarioClusterTabPage.Controls.Add(this.ScenarioClusterCheckBox); - this.ScenarioClusterTabPage.Controls.Add(this.ScenarioClusterPanel); - this.ScenarioClusterTabPage.Location = new System.Drawing.Point(4, 22); - this.ScenarioClusterTabPage.Name = "ScenarioClusterTabPage"; - this.ScenarioClusterTabPage.Size = new System.Drawing.Size(510, 443); - this.ScenarioClusterTabPage.TabIndex = 4; - this.ScenarioClusterTabPage.Text = "Cluster"; - this.ScenarioClusterTabPage.UseVisualStyleBackColor = true; - // - // ScenarioClusterDeleteButton - // - this.ScenarioClusterDeleteButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioClusterDeleteButton.Enabled = false; - this.ScenarioClusterDeleteButton.Location = new System.Drawing.Point(415, 2); - this.ScenarioClusterDeleteButton.Name = "ScenarioClusterDeleteButton"; - this.ScenarioClusterDeleteButton.Size = new System.Drawing.Size(90, 23); - this.ScenarioClusterDeleteButton.TabIndex = 3; - this.ScenarioClusterDeleteButton.Text = "Delete Cluster"; - this.ScenarioClusterDeleteButton.UseVisualStyleBackColor = true; - this.ScenarioClusterDeleteButton.Click += new System.EventHandler(this.ScenarioClusterDeleteButton_Click); - // - // ScenarioClusterAddToProjectButton - // - this.ScenarioClusterAddToProjectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioClusterAddToProjectButton.Enabled = false; - this.ScenarioClusterAddToProjectButton.Location = new System.Drawing.Point(319, 2); - this.ScenarioClusterAddToProjectButton.Name = "ScenarioClusterAddToProjectButton"; - this.ScenarioClusterAddToProjectButton.Size = new System.Drawing.Size(90, 23); - this.ScenarioClusterAddToProjectButton.TabIndex = 2; - this.ScenarioClusterAddToProjectButton.Text = "Add to Project"; - this.ScenarioClusterAddToProjectButton.UseVisualStyleBackColor = true; - this.ScenarioClusterAddToProjectButton.Click += new System.EventHandler(this.ScenarioClusterAddToProjectButton_Click); - // - // ScenarioClusterCheckBox - // - this.ScenarioClusterCheckBox.AutoSize = true; - this.ScenarioClusterCheckBox.Location = new System.Drawing.Point(6, 6); - this.ScenarioClusterCheckBox.Name = "ScenarioClusterCheckBox"; - this.ScenarioClusterCheckBox.Size = new System.Drawing.Size(92, 17); - this.ScenarioClusterCheckBox.TabIndex = 1; - this.ScenarioClusterCheckBox.Text = "Define Cluster"; - this.ScenarioClusterCheckBox.UseVisualStyleBackColor = true; - this.ScenarioClusterCheckBox.CheckedChanged += new System.EventHandler(this.ScenarioClusterCheckBox_CheckedChanged); - // - // ScenarioClusterPanel - // - this.ScenarioClusterPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioClusterPanel.Controls.Add(this.label159); - this.ScenarioClusterPanel.Controls.Add(this.ScenarioClusterAddPointButton); - this.ScenarioClusterPanel.Controls.Add(this.label158); - this.ScenarioClusterPanel.Controls.Add(this.ScenarioClusterPointsListBox); - this.ScenarioClusterPanel.Controls.Add(this.ScenarioClusterRadiusTextBox); - this.ScenarioClusterPanel.Controls.Add(this.label157); - this.ScenarioClusterPanel.Controls.Add(this.ScenarioClusterUnk2CheckBox); - this.ScenarioClusterPanel.Controls.Add(this.ScenarioClusterUnk1TextBox); - this.ScenarioClusterPanel.Controls.Add(this.label140); - this.ScenarioClusterPanel.Controls.Add(this.ScenarioClusterGoToButton); - this.ScenarioClusterPanel.Controls.Add(this.ScenarioClusterCenterTextBox); - this.ScenarioClusterPanel.Controls.Add(this.label139); - this.ScenarioClusterPanel.Enabled = false; - this.ScenarioClusterPanel.Location = new System.Drawing.Point(0, 29); - this.ScenarioClusterPanel.Name = "ScenarioClusterPanel"; - this.ScenarioClusterPanel.Size = new System.Drawing.Size(510, 415); - this.ScenarioClusterPanel.TabIndex = 4; - // - // label159 - // - this.label159.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.label159.AutoSize = true; - this.label159.Location = new System.Drawing.Point(341, 150); - this.label159.Name = "label159"; - this.label159.Size = new System.Drawing.Size(141, 13); - this.label159.TabIndex = 16; - this.label159.Text = "(Double-click to select point)"; - // - // ScenarioClusterAddPointButton - // - this.ScenarioClusterAddPointButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.ScenarioClusterAddPointButton.Location = new System.Drawing.Point(100, 337); - this.ScenarioClusterAddPointButton.Name = "ScenarioClusterAddPointButton"; - this.ScenarioClusterAddPointButton.Size = new System.Drawing.Size(90, 23); - this.ScenarioClusterAddPointButton.TabIndex = 15; - this.ScenarioClusterAddPointButton.Text = "Add Point"; - this.ScenarioClusterAddPointButton.UseVisualStyleBackColor = true; - this.ScenarioClusterAddPointButton.Click += new System.EventHandler(this.ScenarioClusterAddPointButton_Click); - // - // label158 - // - this.label158.AutoSize = true; - this.label158.Location = new System.Drawing.Point(51, 150); - this.label158.Name = "label158"; - this.label158.Size = new System.Drawing.Size(39, 13); - this.label158.TabIndex = 14; - this.label158.Text = "Points:"; - // - // ScenarioClusterPointsListBox - // - this.ScenarioClusterPointsListBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioClusterPointsListBox.FormattingEnabled = true; - this.ScenarioClusterPointsListBox.Location = new System.Drawing.Point(100, 148); - this.ScenarioClusterPointsListBox.Name = "ScenarioClusterPointsListBox"; - this.ScenarioClusterPointsListBox.Size = new System.Drawing.Size(235, 173); - this.ScenarioClusterPointsListBox.TabIndex = 13; - this.ScenarioClusterPointsListBox.DoubleClick += new System.EventHandler(this.ScenarioClusterPointsListBox_DoubleClick); - // - // ScenarioClusterRadiusTextBox - // - this.ScenarioClusterRadiusTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioClusterRadiusTextBox.Location = new System.Drawing.Point(100, 29); - this.ScenarioClusterRadiusTextBox.Name = "ScenarioClusterRadiusTextBox"; - this.ScenarioClusterRadiusTextBox.Size = new System.Drawing.Size(163, 20); - this.ScenarioClusterRadiusTextBox.TabIndex = 9; - this.ScenarioClusterRadiusTextBox.TextChanged += new System.EventHandler(this.ScenarioClusterRadiusTextBox_TextChanged); - // - // label157 - // - this.label157.AutoSize = true; - this.label157.Location = new System.Drawing.Point(51, 32); - this.label157.Name = "label157"; - this.label157.Size = new System.Drawing.Size(43, 13); - this.label157.TabIndex = 8; - this.label157.Text = "Radius:"; - // - // ScenarioClusterUnk2CheckBox - // - this.ScenarioClusterUnk2CheckBox.AutoSize = true; - this.ScenarioClusterUnk2CheckBox.Location = new System.Drawing.Point(100, 81); - this.ScenarioClusterUnk2CheckBox.Name = "ScenarioClusterUnk2CheckBox"; - this.ScenarioClusterUnk2CheckBox.Size = new System.Drawing.Size(55, 17); - this.ScenarioClusterUnk2CheckBox.TabIndex = 12; - this.ScenarioClusterUnk2CheckBox.Text = "Unk 2"; - this.ScenarioClusterUnk2CheckBox.UseVisualStyleBackColor = true; - this.ScenarioClusterUnk2CheckBox.CheckedChanged += new System.EventHandler(this.ScenarioClusterUnk2CheckBox_CheckedChanged); - // - // ScenarioClusterUnk1TextBox - // - this.ScenarioClusterUnk1TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioClusterUnk1TextBox.Location = new System.Drawing.Point(100, 55); - this.ScenarioClusterUnk1TextBox.Name = "ScenarioClusterUnk1TextBox"; - this.ScenarioClusterUnk1TextBox.Size = new System.Drawing.Size(163, 20); - this.ScenarioClusterUnk1TextBox.TabIndex = 11; - this.ScenarioClusterUnk1TextBox.TextChanged += new System.EventHandler(this.ScenarioClusterUnk1TextBox_TextChanged); - // - // label140 - // - this.label140.AutoSize = true; - this.label140.Location = new System.Drawing.Point(4, 58); - this.label140.Name = "label140"; - this.label140.Size = new System.Drawing.Size(90, 13); - this.label140.TabIndex = 10; - this.label140.Text = "Probability Unk 1:"; - // - // ScenarioClusterGoToButton - // - this.ScenarioClusterGoToButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioClusterGoToButton.Location = new System.Drawing.Point(341, 1); - this.ScenarioClusterGoToButton.Name = "ScenarioClusterGoToButton"; - this.ScenarioClusterGoToButton.Size = new System.Drawing.Size(68, 23); - this.ScenarioClusterGoToButton.TabIndex = 7; - this.ScenarioClusterGoToButton.Text = "Go to"; - this.ScenarioClusterGoToButton.UseVisualStyleBackColor = true; - this.ScenarioClusterGoToButton.Click += new System.EventHandler(this.ScenarioClusterGoToButton_Click); - // - // ScenarioClusterCenterTextBox - // - this.ScenarioClusterCenterTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioClusterCenterTextBox.Location = new System.Drawing.Point(100, 3); - this.ScenarioClusterCenterTextBox.Name = "ScenarioClusterCenterTextBox"; - this.ScenarioClusterCenterTextBox.Size = new System.Drawing.Size(235, 20); - this.ScenarioClusterCenterTextBox.TabIndex = 6; - this.ScenarioClusterCenterTextBox.TextChanged += new System.EventHandler(this.ScenarioClusterCenterTextBox_TextChanged); - // - // label139 - // - this.label139.AutoSize = true; - this.label139.Location = new System.Drawing.Point(53, 6); - this.label139.Name = "label139"; - this.label139.Size = new System.Drawing.Size(41, 13); - this.label139.TabIndex = 5; - this.label139.Text = "Center:"; - // - // ScenarioClusterPointTabPage - // - this.ScenarioClusterPointTabPage.Controls.Add(this.ScenarioClusterPointDeleteButton); - this.ScenarioClusterPointTabPage.Controls.Add(this.ScenarioClusterPointAddToProjectButton); - this.ScenarioClusterPointTabPage.Controls.Add(this.ScenarioClusterPointPanel); - this.ScenarioClusterPointTabPage.Controls.Add(this.ScenarioClusterPointCheckBox); - this.ScenarioClusterPointTabPage.Location = new System.Drawing.Point(4, 22); - this.ScenarioClusterPointTabPage.Name = "ScenarioClusterPointTabPage"; - this.ScenarioClusterPointTabPage.Size = new System.Drawing.Size(510, 443); - this.ScenarioClusterPointTabPage.TabIndex = 5; - this.ScenarioClusterPointTabPage.Text = "Cluster Point"; - this.ScenarioClusterPointTabPage.UseVisualStyleBackColor = true; - // - // ScenarioClusterPointDeleteButton - // - this.ScenarioClusterPointDeleteButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioClusterPointDeleteButton.Enabled = false; - this.ScenarioClusterPointDeleteButton.Location = new System.Drawing.Point(415, 2); - this.ScenarioClusterPointDeleteButton.Name = "ScenarioClusterPointDeleteButton"; - this.ScenarioClusterPointDeleteButton.Size = new System.Drawing.Size(90, 23); - this.ScenarioClusterPointDeleteButton.TabIndex = 7; - this.ScenarioClusterPointDeleteButton.Text = "Delete Point"; - this.ScenarioClusterPointDeleteButton.UseVisualStyleBackColor = true; - this.ScenarioClusterPointDeleteButton.Click += new System.EventHandler(this.ScenarioClusterPointDeleteButton_Click); - // - // ScenarioClusterPointAddToProjectButton - // - this.ScenarioClusterPointAddToProjectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioClusterPointAddToProjectButton.Enabled = false; - this.ScenarioClusterPointAddToProjectButton.Location = new System.Drawing.Point(319, 2); - this.ScenarioClusterPointAddToProjectButton.Name = "ScenarioClusterPointAddToProjectButton"; - this.ScenarioClusterPointAddToProjectButton.Size = new System.Drawing.Size(90, 23); - this.ScenarioClusterPointAddToProjectButton.TabIndex = 6; - this.ScenarioClusterPointAddToProjectButton.Text = "Add to Project"; - this.ScenarioClusterPointAddToProjectButton.UseVisualStyleBackColor = true; - this.ScenarioClusterPointAddToProjectButton.Click += new System.EventHandler(this.ScenarioClusterPointAddToProjectButton_Click); - // - // ScenarioClusterPointPanel - // - this.ScenarioClusterPointPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointImapHashLabel); - this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointImapTextBox); - this.ScenarioClusterPointPanel.Controls.Add(this.label143); - this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointGroupHashLabel); - this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointGroupTextBox); - this.ScenarioClusterPointPanel.Controls.Add(this.label141); - this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointInteriorHashLabel); - this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointFlagsCheckedListBox); - this.ScenarioClusterPointPanel.Controls.Add(this.label142); - this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointDirectionTextBox); - this.ScenarioClusterPointPanel.Controls.Add(this.label144); - this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointFlagsUpDown); - this.ScenarioClusterPointPanel.Controls.Add(this.label145); - this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointGoToButton); - this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointWaitTimeUpDown); - this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointPositionTextBox); - this.ScenarioClusterPointPanel.Controls.Add(this.label146); - this.ScenarioClusterPointPanel.Controls.Add(this.label147); - this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointRadiusUpDown); - this.ScenarioClusterPointPanel.Controls.Add(this.label148); - this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointAnimalFlagUpDown); - this.ScenarioClusterPointPanel.Controls.Add(this.label149); - this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointProbabilityUpDown); - this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointInteriorTextBox); - this.ScenarioClusterPointPanel.Controls.Add(this.label151); - this.ScenarioClusterPointPanel.Controls.Add(this.label152); - this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointTimeEndUpDown); - this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointTimeStartUpDown); - this.ScenarioClusterPointPanel.Controls.Add(this.label153); - this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointModelSetComboBox); - this.ScenarioClusterPointPanel.Controls.Add(this.label154); - this.ScenarioClusterPointPanel.Controls.Add(this.ScenarioClusterPointTypeComboBox); - this.ScenarioClusterPointPanel.Controls.Add(this.label155); - this.ScenarioClusterPointPanel.Enabled = false; - this.ScenarioClusterPointPanel.Location = new System.Drawing.Point(0, 29); - this.ScenarioClusterPointPanel.Name = "ScenarioClusterPointPanel"; - this.ScenarioClusterPointPanel.Size = new System.Drawing.Size(510, 414); - this.ScenarioClusterPointPanel.TabIndex = 8; - // - // ScenarioClusterPointImapHashLabel - // - this.ScenarioClusterPointImapHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioClusterPointImapHashLabel.AutoSize = true; - this.ScenarioClusterPointImapHashLabel.Location = new System.Drawing.Point(341, 146); - this.ScenarioClusterPointImapHashLabel.Name = "ScenarioClusterPointImapHashLabel"; - this.ScenarioClusterPointImapHashLabel.Size = new System.Drawing.Size(44, 13); - this.ScenarioClusterPointImapHashLabel.TabIndex = 22; - this.ScenarioClusterPointImapHashLabel.Text = "Hash: 0"; - // - // ScenarioClusterPointImapTextBox - // - this.ScenarioClusterPointImapTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioClusterPointImapTextBox.Location = new System.Drawing.Point(73, 143); - this.ScenarioClusterPointImapTextBox.Name = "ScenarioClusterPointImapTextBox"; - this.ScenarioClusterPointImapTextBox.Size = new System.Drawing.Size(262, 20); - this.ScenarioClusterPointImapTextBox.TabIndex = 21; - this.ScenarioClusterPointImapTextBox.TextChanged += new System.EventHandler(this.ScenarioClusterPointImapTextBox_TextChanged); - // - // label143 - // - this.label143.AutoSize = true; - this.label143.Location = new System.Drawing.Point(34, 146); - this.label143.Name = "label143"; - this.label143.Size = new System.Drawing.Size(33, 13); - this.label143.TabIndex = 20; - this.label143.Text = "Imap:"; - // - // ScenarioClusterPointGroupHashLabel - // - this.ScenarioClusterPointGroupHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioClusterPointGroupHashLabel.AutoSize = true; - this.ScenarioClusterPointGroupHashLabel.Location = new System.Drawing.Point(341, 123); - this.ScenarioClusterPointGroupHashLabel.Name = "ScenarioClusterPointGroupHashLabel"; - this.ScenarioClusterPointGroupHashLabel.Size = new System.Drawing.Size(44, 13); - this.ScenarioClusterPointGroupHashLabel.TabIndex = 19; - this.ScenarioClusterPointGroupHashLabel.Text = "Hash: 0"; - // - // ScenarioClusterPointGroupTextBox - // - this.ScenarioClusterPointGroupTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioClusterPointGroupTextBox.Location = new System.Drawing.Point(73, 120); - this.ScenarioClusterPointGroupTextBox.Name = "ScenarioClusterPointGroupTextBox"; - this.ScenarioClusterPointGroupTextBox.Size = new System.Drawing.Size(262, 20); - this.ScenarioClusterPointGroupTextBox.TabIndex = 18; - this.ScenarioClusterPointGroupTextBox.TextChanged += new System.EventHandler(this.ScenarioClusterPointGroupTextBox_TextChanged); - // - // label141 - // - this.label141.AutoSize = true; - this.label141.Location = new System.Drawing.Point(28, 123); - this.label141.Name = "label141"; - this.label141.Size = new System.Drawing.Size(39, 13); - this.label141.TabIndex = 17; - this.label141.Text = "Group:"; - // - // ScenarioClusterPointInteriorHashLabel - // - this.ScenarioClusterPointInteriorHashLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioClusterPointInteriorHashLabel.AutoSize = true; - this.ScenarioClusterPointInteriorHashLabel.Location = new System.Drawing.Point(341, 100); - this.ScenarioClusterPointInteriorHashLabel.Name = "ScenarioClusterPointInteriorHashLabel"; - this.ScenarioClusterPointInteriorHashLabel.Size = new System.Drawing.Size(44, 13); - this.ScenarioClusterPointInteriorHashLabel.TabIndex = 16; - this.ScenarioClusterPointInteriorHashLabel.Text = "Hash: 0"; - // - // ScenarioClusterPointFlagsCheckedListBox - // - this.ScenarioClusterPointFlagsCheckedListBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioClusterPointFlagsCheckedListBox.CheckOnClick = true; - this.ScenarioClusterPointFlagsCheckedListBox.FormattingEnabled = true; - this.ScenarioClusterPointFlagsCheckedListBox.Items.AddRange(new object[] { - "1 - IgnoreMaxInRange", - "2 - NoSpawn", - "4 - StationaryReactions", - "8 - Unk", - "16 - Unk", - "32 - ActivateVehicleSiren", - "64 - AggressiveVehicleDriving", - "128 - Unk", - "256 - Unk", - "512 - Unk", - "1024 - AerialVehiclePoint", - "2048 - TerritorialScenario", - "4096 - Unk", - "8192 - Unk", - "16384 - Unk", - "32768 - Unk", - "65536 - InWater", - "131072 - Unk", - "262144 - OpenDoor", - "524288 - PreciseUseTime", - "1048576 - Unk", - "2097152 - Unk", - "4194304 - ExtendedRange", - "8388608 - ShortRange", - "16777216 - HighPriority", - "33554432 - IgnoreLoitering", - "67108864 - UseSearchlight", - "134217728 - ResetNoCollisionOnCleanUp", - "268435456 - Unk", - "536870912 - Unk", - "1073741824 - IgnoreWeatherRestrictions"}); - this.ScenarioClusterPointFlagsCheckedListBox.Location = new System.Drawing.Point(195, 167); - this.ScenarioClusterPointFlagsCheckedListBox.Name = "ScenarioClusterPointFlagsCheckedListBox"; - this.ScenarioClusterPointFlagsCheckedListBox.Size = new System.Drawing.Size(214, 244); - this.ScenarioClusterPointFlagsCheckedListBox.TabIndex = 37; - this.ScenarioClusterPointFlagsCheckedListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.ScenarioClusterPointFlagsCheckedListBox_ItemCheck); - // - // label142 - // - this.label142.AutoSize = true; - this.label142.Location = new System.Drawing.Point(32, 390); - this.label142.Name = "label142"; - this.label142.Size = new System.Drawing.Size(35, 13); - this.label142.TabIndex = 35; - this.label142.Text = "Flags:"; - // - // ScenarioClusterPointDirectionTextBox - // - this.ScenarioClusterPointDirectionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioClusterPointDirectionTextBox.Location = new System.Drawing.Point(73, 26); - this.ScenarioClusterPointDirectionTextBox.Name = "ScenarioClusterPointDirectionTextBox"; - this.ScenarioClusterPointDirectionTextBox.Size = new System.Drawing.Size(262, 20); - this.ScenarioClusterPointDirectionTextBox.TabIndex = 9; - this.ScenarioClusterPointDirectionTextBox.TextChanged += new System.EventHandler(this.ScenarioClusterPointDirectionTextBox_TextChanged); - // - // label144 - // - this.label144.AutoSize = true; - this.label144.Location = new System.Drawing.Point(15, 29); - this.label144.Name = "label144"; - this.label144.Size = new System.Drawing.Size(52, 13); - this.label144.TabIndex = 8; - this.label144.Text = "Direction:"; - // - // ScenarioClusterPointFlagsUpDown - // - this.ScenarioClusterPointFlagsUpDown.Location = new System.Drawing.Point(73, 388); - this.ScenarioClusterPointFlagsUpDown.Maximum = new decimal(new int[] { - -1, - 0, - 0, - 0}); - this.ScenarioClusterPointFlagsUpDown.Name = "ScenarioClusterPointFlagsUpDown"; - this.ScenarioClusterPointFlagsUpDown.Size = new System.Drawing.Size(116, 20); - this.ScenarioClusterPointFlagsUpDown.TabIndex = 36; - this.ScenarioClusterPointFlagsUpDown.ValueChanged += new System.EventHandler(this.ScenarioClusterPointFlagsUpDown_ValueChanged); - // - // label145 - // - this.label145.AutoSize = true; - this.label145.Location = new System.Drawing.Point(13, 299); - this.label145.Name = "label145"; - this.label145.Size = new System.Drawing.Size(54, 13); - this.label145.TabIndex = 33; - this.label145.Text = "Wait time:"; - // - // ScenarioClusterPointGoToButton - // - this.ScenarioClusterPointGoToButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioClusterPointGoToButton.Location = new System.Drawing.Point(341, 1); - this.ScenarioClusterPointGoToButton.Name = "ScenarioClusterPointGoToButton"; - this.ScenarioClusterPointGoToButton.Size = new System.Drawing.Size(68, 23); - this.ScenarioClusterPointGoToButton.TabIndex = 7; - this.ScenarioClusterPointGoToButton.Text = "Go to"; - this.ScenarioClusterPointGoToButton.UseVisualStyleBackColor = true; - this.ScenarioClusterPointGoToButton.Click += new System.EventHandler(this.ScenarioClusterPointGoToButton_Click); - // - // ScenarioClusterPointWaitTimeUpDown - // - this.ScenarioClusterPointWaitTimeUpDown.Location = new System.Drawing.Point(73, 297); - this.ScenarioClusterPointWaitTimeUpDown.Maximum = new decimal(new int[] { - 255, - 0, - 0, - 0}); - this.ScenarioClusterPointWaitTimeUpDown.Name = "ScenarioClusterPointWaitTimeUpDown"; - this.ScenarioClusterPointWaitTimeUpDown.Size = new System.Drawing.Size(57, 20); - this.ScenarioClusterPointWaitTimeUpDown.TabIndex = 34; - this.ScenarioClusterPointWaitTimeUpDown.ValueChanged += new System.EventHandler(this.ScenarioClusterPointWaitTimeUpDown_ValueChanged); - // - // ScenarioClusterPointPositionTextBox - // - this.ScenarioClusterPointPositionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioClusterPointPositionTextBox.Location = new System.Drawing.Point(73, 3); - this.ScenarioClusterPointPositionTextBox.Name = "ScenarioClusterPointPositionTextBox"; - this.ScenarioClusterPointPositionTextBox.Size = new System.Drawing.Size(262, 20); - this.ScenarioClusterPointPositionTextBox.TabIndex = 6; - this.ScenarioClusterPointPositionTextBox.TextChanged += new System.EventHandler(this.ScenarioClusterPointPositionTextBox_TextChanged); - // - // label146 - // - this.label146.AutoSize = true; - this.label146.Location = new System.Drawing.Point(20, 6); - this.label146.Name = "label146"; - this.label146.Size = new System.Drawing.Size(47, 13); - this.label146.TabIndex = 5; - this.label146.Text = "Position:"; - // - // label147 - // - this.label147.AutoSize = true; - this.label147.Location = new System.Drawing.Point(24, 273); - this.label147.Name = "label147"; - this.label147.Size = new System.Drawing.Size(43, 13); - this.label147.TabIndex = 31; - this.label147.Text = "Radius:"; - // - // ScenarioClusterPointRadiusUpDown - // - this.ScenarioClusterPointRadiusUpDown.Location = new System.Drawing.Point(73, 271); - this.ScenarioClusterPointRadiusUpDown.Maximum = new decimal(new int[] { - 255, - 0, - 0, - 0}); - this.ScenarioClusterPointRadiusUpDown.Name = "ScenarioClusterPointRadiusUpDown"; - this.ScenarioClusterPointRadiusUpDown.Size = new System.Drawing.Size(57, 20); - this.ScenarioClusterPointRadiusUpDown.TabIndex = 32; - this.ScenarioClusterPointRadiusUpDown.ValueChanged += new System.EventHandler(this.ScenarioClusterPointRadiusUpDown_ValueChanged); - // - // label148 - // - this.label148.AutoSize = true; - this.label148.Location = new System.Drawing.Point(6, 247); - this.label148.Name = "label148"; - this.label148.Size = new System.Drawing.Size(61, 13); - this.label148.TabIndex = 29; - this.label148.Text = "Animal flag:"; - // - // ScenarioClusterPointAnimalFlagUpDown - // - this.ScenarioClusterPointAnimalFlagUpDown.Location = new System.Drawing.Point(73, 245); - this.ScenarioClusterPointAnimalFlagUpDown.Maximum = new decimal(new int[] { - 255, - 0, - 0, - 0}); - this.ScenarioClusterPointAnimalFlagUpDown.Name = "ScenarioClusterPointAnimalFlagUpDown"; - this.ScenarioClusterPointAnimalFlagUpDown.Size = new System.Drawing.Size(57, 20); - this.ScenarioClusterPointAnimalFlagUpDown.TabIndex = 30; - this.ScenarioClusterPointAnimalFlagUpDown.ValueChanged += new System.EventHandler(this.ScenarioClusterPointAnimalFlagUpDown_ValueChanged); - // - // label149 - // - this.label149.AutoSize = true; - this.label149.Location = new System.Drawing.Point(9, 221); - this.label149.Name = "label149"; - this.label149.Size = new System.Drawing.Size(58, 13); - this.label149.TabIndex = 27; - this.label149.Text = "Probability:"; - // - // ScenarioClusterPointProbabilityUpDown - // - this.ScenarioClusterPointProbabilityUpDown.Location = new System.Drawing.Point(73, 219); - this.ScenarioClusterPointProbabilityUpDown.Maximum = new decimal(new int[] { - 255, - 0, - 0, - 0}); - this.ScenarioClusterPointProbabilityUpDown.Name = "ScenarioClusterPointProbabilityUpDown"; - this.ScenarioClusterPointProbabilityUpDown.Size = new System.Drawing.Size(57, 20); - this.ScenarioClusterPointProbabilityUpDown.TabIndex = 28; - this.ScenarioClusterPointProbabilityUpDown.ValueChanged += new System.EventHandler(this.ScenarioClusterPointProbabilityUpDown_ValueChanged); - // - // ScenarioClusterPointInteriorTextBox - // - this.ScenarioClusterPointInteriorTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioClusterPointInteriorTextBox.Location = new System.Drawing.Point(73, 97); - this.ScenarioClusterPointInteriorTextBox.Name = "ScenarioClusterPointInteriorTextBox"; - this.ScenarioClusterPointInteriorTextBox.Size = new System.Drawing.Size(262, 20); - this.ScenarioClusterPointInteriorTextBox.TabIndex = 15; - this.ScenarioClusterPointInteriorTextBox.TextChanged += new System.EventHandler(this.ScenarioClusterPointInteriorTextBox_TextChanged); - // - // label151 - // - this.label151.AutoSize = true; - this.label151.Location = new System.Drawing.Point(25, 100); - this.label151.Name = "label151"; - this.label151.Size = new System.Drawing.Size(42, 13); - this.label151.TabIndex = 14; - this.label151.Text = "Interior:"; - // - // label152 - // - this.label152.AutoSize = true; - this.label152.Location = new System.Drawing.Point(13, 195); - this.label152.Name = "label152"; - this.label152.Size = new System.Drawing.Size(54, 13); - this.label152.TabIndex = 25; - this.label152.Text = "Time end:"; - // - // ScenarioClusterPointTimeEndUpDown - // - this.ScenarioClusterPointTimeEndUpDown.Location = new System.Drawing.Point(73, 193); - this.ScenarioClusterPointTimeEndUpDown.Maximum = new decimal(new int[] { - 24, - 0, - 0, - 0}); - this.ScenarioClusterPointTimeEndUpDown.Name = "ScenarioClusterPointTimeEndUpDown"; - this.ScenarioClusterPointTimeEndUpDown.Size = new System.Drawing.Size(57, 20); - this.ScenarioClusterPointTimeEndUpDown.TabIndex = 26; - this.ScenarioClusterPointTimeEndUpDown.ValueChanged += new System.EventHandler(this.ScenarioClusterPointTimeEndUpDown_ValueChanged); - // - // ScenarioClusterPointTimeStartUpDown - // - this.ScenarioClusterPointTimeStartUpDown.Location = new System.Drawing.Point(73, 167); - this.ScenarioClusterPointTimeStartUpDown.Maximum = new decimal(new int[] { - 24, - 0, - 0, - 0}); - this.ScenarioClusterPointTimeStartUpDown.Name = "ScenarioClusterPointTimeStartUpDown"; - this.ScenarioClusterPointTimeStartUpDown.Size = new System.Drawing.Size(57, 20); - this.ScenarioClusterPointTimeStartUpDown.TabIndex = 24; - this.ScenarioClusterPointTimeStartUpDown.ValueChanged += new System.EventHandler(this.ScenarioClusterPointTimeStartUpDown_ValueChanged); - // - // label153 - // - this.label153.AutoSize = true; - this.label153.Location = new System.Drawing.Point(11, 169); - this.label153.Name = "label153"; - this.label153.Size = new System.Drawing.Size(56, 13); - this.label153.TabIndex = 23; - this.label153.Text = "Time start:"; - // - // ScenarioClusterPointModelSetComboBox - // - this.ScenarioClusterPointModelSetComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioClusterPointModelSetComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.ScenarioClusterPointModelSetComboBox.FormattingEnabled = true; - this.ScenarioClusterPointModelSetComboBox.Location = new System.Drawing.Point(73, 73); - this.ScenarioClusterPointModelSetComboBox.Name = "ScenarioClusterPointModelSetComboBox"; - this.ScenarioClusterPointModelSetComboBox.Size = new System.Drawing.Size(336, 21); - this.ScenarioClusterPointModelSetComboBox.TabIndex = 13; - this.ScenarioClusterPointModelSetComboBox.SelectedIndexChanged += new System.EventHandler(this.ScenarioClusterPointModelSetComboBox_SelectedIndexChanged); - // - // label154 - // - this.label154.AutoSize = true; - this.label154.Location = new System.Drawing.Point(9, 76); - this.label154.Name = "label154"; - this.label154.Size = new System.Drawing.Size(58, 13); - this.label154.TabIndex = 12; - this.label154.Text = "Model Set:"; - // - // ScenarioClusterPointTypeComboBox - // - this.ScenarioClusterPointTypeComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioClusterPointTypeComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.ScenarioClusterPointTypeComboBox.FormattingEnabled = true; - this.ScenarioClusterPointTypeComboBox.Location = new System.Drawing.Point(73, 49); - this.ScenarioClusterPointTypeComboBox.Name = "ScenarioClusterPointTypeComboBox"; - this.ScenarioClusterPointTypeComboBox.Size = new System.Drawing.Size(336, 21); - this.ScenarioClusterPointTypeComboBox.TabIndex = 11; - this.ScenarioClusterPointTypeComboBox.SelectedIndexChanged += new System.EventHandler(this.ScenarioClusterPointTypeComboBox_SelectedIndexChanged); - // - // label155 - // - this.label155.AutoSize = true; - this.label155.Location = new System.Drawing.Point(33, 52); - this.label155.Name = "label155"; - this.label155.Size = new System.Drawing.Size(34, 13); - this.label155.TabIndex = 10; - this.label155.Text = "Type:"; - // - // ScenarioClusterPointCheckBox - // - this.ScenarioClusterPointCheckBox.AutoSize = true; - this.ScenarioClusterPointCheckBox.Location = new System.Drawing.Point(6, 6); - this.ScenarioClusterPointCheckBox.Name = "ScenarioClusterPointCheckBox"; - this.ScenarioClusterPointCheckBox.Size = new System.Drawing.Size(119, 17); - this.ScenarioClusterPointCheckBox.TabIndex = 5; - this.ScenarioClusterPointCheckBox.Text = "Define Cluster Point"; - this.ScenarioClusterPointCheckBox.UseVisualStyleBackColor = true; - this.ScenarioClusterPointCheckBox.CheckedChanged += new System.EventHandler(this.ScenarioClusterPointCheckBox_CheckedChanged); - // - // TopMenuStrip - // - this.TopMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.FileMenu, - this.YmapMenu, - this.YndMenu, - this.YnvMenu, - this.TrainsMenu, - this.ScenarioMenu, - this.ToolsMenu, - this.OptionsMenu}); - this.TopMenuStrip.Location = new System.Drawing.Point(0, 0); - this.TopMenuStrip.Name = "TopMenuStrip"; - this.TopMenuStrip.Size = new System.Drawing.Size(776, 24); - this.TopMenuStrip.TabIndex = 1; - this.TopMenuStrip.Text = "menuStrip1"; - // - // FileMenu - // - this.FileMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.FileNewMenu, - this.FileOpenMenu, - this.toolStripSeparator1, - this.FileCloseProjectMenu, - this.toolStripSeparator2, - this.FileSaveProjectMenu, - this.FileSaveProjectAsMenu, - this.FileSaveItemMenu, - this.FileSaveItemAsMenu}); - this.FileMenu.Name = "FileMenu"; - this.FileMenu.Size = new System.Drawing.Size(37, 20); - this.FileMenu.Text = "File"; - // - // FileNewMenu - // - this.FileNewMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.FileNewProjectMenu, - this.FileNewYmapMenu, - this.FileNewYndMenu, - this.FileNewYnvMenu, - this.FileNewTrainsMenu, - this.FileNewScenarioMenu}); - this.FileNewMenu.Name = "FileNewMenu"; - this.FileNewMenu.Size = new System.Drawing.Size(163, 22); - this.FileNewMenu.Text = "New"; - // - // FileNewProjectMenu - // - this.FileNewProjectMenu.Name = "FileNewProjectMenu"; - this.FileNewProjectMenu.Size = new System.Drawing.Size(138, 22); - this.FileNewProjectMenu.Text = "Project..."; - this.FileNewProjectMenu.Click += new System.EventHandler(this.FileNewProjectMenu_Click); - // - // FileNewYmapMenu - // - this.FileNewYmapMenu.Name = "FileNewYmapMenu"; - this.FileNewYmapMenu.Size = new System.Drawing.Size(138, 22); - this.FileNewYmapMenu.Text = "Ymap file"; - this.FileNewYmapMenu.Click += new System.EventHandler(this.FileNewYmapMenu_Click); - // - // FileNewYndMenu - // - this.FileNewYndMenu.Name = "FileNewYndMenu"; - this.FileNewYndMenu.Size = new System.Drawing.Size(138, 22); - this.FileNewYndMenu.Text = "Ynd file"; - this.FileNewYndMenu.Click += new System.EventHandler(this.FileNewYndMenu_Click); - // - // FileNewYnvMenu - // - this.FileNewYnvMenu.Name = "FileNewYnvMenu"; - this.FileNewYnvMenu.Size = new System.Drawing.Size(138, 22); - this.FileNewYnvMenu.Text = "Ynv file"; - this.FileNewYnvMenu.Visible = false; - this.FileNewYnvMenu.Click += new System.EventHandler(this.FileNewYnvMenu_Click); - // - // FileNewTrainsMenu - // - this.FileNewTrainsMenu.Name = "FileNewTrainsMenu"; - this.FileNewTrainsMenu.Size = new System.Drawing.Size(138, 22); - this.FileNewTrainsMenu.Text = "Trains file"; - this.FileNewTrainsMenu.Click += new System.EventHandler(this.FileNewTrainsMenu_Click); - // - // FileNewScenarioMenu - // - this.FileNewScenarioMenu.Name = "FileNewScenarioMenu"; - this.FileNewScenarioMenu.Size = new System.Drawing.Size(138, 22); - this.FileNewScenarioMenu.Text = "Scenario file"; - this.FileNewScenarioMenu.Click += new System.EventHandler(this.FileNewScenarioMenu_Click); - // - // FileOpenMenu - // - this.FileOpenMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.FileOpenProjectMenu, - this.FileOpenYmapMenu, - this.FileOpenYndMenu, - this.FileOpenYnvMenu, - this.FileOpenTrainsMenu, - this.FileOpenScenarioMenu}); - this.FileOpenMenu.Name = "FileOpenMenu"; - this.FileOpenMenu.Size = new System.Drawing.Size(163, 22); - this.FileOpenMenu.Text = "Open"; - // - // FileOpenProjectMenu - // - this.FileOpenProjectMenu.Name = "FileOpenProjectMenu"; - this.FileOpenProjectMenu.Size = new System.Drawing.Size(147, 22); - this.FileOpenProjectMenu.Text = "Project..."; - this.FileOpenProjectMenu.Click += new System.EventHandler(this.FileOpenProjectMenu_Click); - // - // FileOpenYmapMenu - // - this.FileOpenYmapMenu.Name = "FileOpenYmapMenu"; - this.FileOpenYmapMenu.Size = new System.Drawing.Size(147, 22); - this.FileOpenYmapMenu.Text = "Ymap file..."; - this.FileOpenYmapMenu.Click += new System.EventHandler(this.FileOpenYmapMenu_Click); - // - // FileOpenYndMenu - // - this.FileOpenYndMenu.Name = "FileOpenYndMenu"; - this.FileOpenYndMenu.Size = new System.Drawing.Size(147, 22); - this.FileOpenYndMenu.Text = "Ynd file..."; - this.FileOpenYndMenu.Click += new System.EventHandler(this.FileOpenYndMenu_Click); - // - // FileOpenYnvMenu - // - this.FileOpenYnvMenu.Name = "FileOpenYnvMenu"; - this.FileOpenYnvMenu.Size = new System.Drawing.Size(147, 22); - this.FileOpenYnvMenu.Text = "Ynv file..."; - this.FileOpenYnvMenu.Visible = false; - this.FileOpenYnvMenu.Click += new System.EventHandler(this.FileOpenYnvMenu_Click); - // - // FileOpenTrainsMenu - // - this.FileOpenTrainsMenu.Name = "FileOpenTrainsMenu"; - this.FileOpenTrainsMenu.Size = new System.Drawing.Size(147, 22); - this.FileOpenTrainsMenu.Text = "Trains file..."; - this.FileOpenTrainsMenu.Click += new System.EventHandler(this.FileOpenTrainsMenu_Click); - // - // FileOpenScenarioMenu - // - this.FileOpenScenarioMenu.Name = "FileOpenScenarioMenu"; - this.FileOpenScenarioMenu.Size = new System.Drawing.Size(147, 22); - this.FileOpenScenarioMenu.Text = "Scenario file..."; - this.FileOpenScenarioMenu.Click += new System.EventHandler(this.FileOpenScenarioMenu_Click); - // - // toolStripSeparator1 - // - this.toolStripSeparator1.Name = "toolStripSeparator1"; - this.toolStripSeparator1.Size = new System.Drawing.Size(160, 6); - // - // FileCloseProjectMenu - // - this.FileCloseProjectMenu.Enabled = false; - this.FileCloseProjectMenu.Name = "FileCloseProjectMenu"; - this.FileCloseProjectMenu.Size = new System.Drawing.Size(163, 22); - this.FileCloseProjectMenu.Text = "Close Project"; - this.FileCloseProjectMenu.Click += new System.EventHandler(this.FileCloseProjectMenu_Click); - // - // toolStripSeparator2 - // - this.toolStripSeparator2.Name = "toolStripSeparator2"; - this.toolStripSeparator2.Size = new System.Drawing.Size(160, 6); - // - // FileSaveProjectMenu - // - this.FileSaveProjectMenu.Enabled = false; - this.FileSaveProjectMenu.Name = "FileSaveProjectMenu"; - this.FileSaveProjectMenu.Size = new System.Drawing.Size(163, 22); - this.FileSaveProjectMenu.Text = "Save Project"; - this.FileSaveProjectMenu.Click += new System.EventHandler(this.FileSaveProjectMenu_Click); - // - // FileSaveProjectAsMenu - // - this.FileSaveProjectAsMenu.Enabled = false; - this.FileSaveProjectAsMenu.Name = "FileSaveProjectAsMenu"; - this.FileSaveProjectAsMenu.Size = new System.Drawing.Size(163, 22); - this.FileSaveProjectAsMenu.Text = "Save Project As..."; - this.FileSaveProjectAsMenu.Click += new System.EventHandler(this.FileSaveProjectAsMenu_Click); - // - // FileSaveItemMenu - // - this.FileSaveItemMenu.Enabled = false; - this.FileSaveItemMenu.Name = "FileSaveItemMenu"; - this.FileSaveItemMenu.Size = new System.Drawing.Size(163, 22); - this.FileSaveItemMenu.Text = "Save Item"; - this.FileSaveItemMenu.Visible = false; - this.FileSaveItemMenu.Click += new System.EventHandler(this.FileSaveItemMenu_Click); - // - // FileSaveItemAsMenu - // - this.FileSaveItemAsMenu.Enabled = false; - this.FileSaveItemAsMenu.Name = "FileSaveItemAsMenu"; - this.FileSaveItemAsMenu.Size = new System.Drawing.Size(163, 22); - this.FileSaveItemAsMenu.Text = "Save Item As..."; - this.FileSaveItemAsMenu.Visible = false; - this.FileSaveItemAsMenu.Click += new System.EventHandler(this.FileSaveItemAsMenu_Click); - // - // YmapMenu - // - this.YmapMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.YmapNameMenu, - this.toolStripSeparator3, - this.YmapNewEntityMenu, - this.YmapNewCarGenMenu, - this.toolStripSeparator5, - this.YmapAddToProjectMenu, - this.YmapRemoveFromProjectMenu}); - this.YmapMenu.Name = "YmapMenu"; - this.YmapMenu.Size = new System.Drawing.Size(49, 20); - this.YmapMenu.Text = "Ymap"; - // - // YmapNameMenu - // - this.YmapNameMenu.Enabled = false; - this.YmapNameMenu.Name = "YmapNameMenu"; - this.YmapNameMenu.Size = new System.Drawing.Size(199, 22); - this.YmapNameMenu.Text = "(No .ymap file selected)"; - // - // toolStripSeparator3 - // - this.toolStripSeparator3.Name = "toolStripSeparator3"; - this.toolStripSeparator3.Size = new System.Drawing.Size(196, 6); - // - // YmapNewEntityMenu - // - this.YmapNewEntityMenu.Enabled = false; - this.YmapNewEntityMenu.Name = "YmapNewEntityMenu"; - this.YmapNewEntityMenu.Size = new System.Drawing.Size(199, 22); - this.YmapNewEntityMenu.Text = "New Entity"; - this.YmapNewEntityMenu.Click += new System.EventHandler(this.YmapNewEntityMenu_Click); - // - // YmapNewCarGenMenu - // - this.YmapNewCarGenMenu.Enabled = false; - this.YmapNewCarGenMenu.Name = "YmapNewCarGenMenu"; - this.YmapNewCarGenMenu.Size = new System.Drawing.Size(199, 22); - this.YmapNewCarGenMenu.Text = "New Car Generator"; - this.YmapNewCarGenMenu.Click += new System.EventHandler(this.YmapNewCarGenMenu_Click); - // - // toolStripSeparator5 - // - this.toolStripSeparator5.Name = "toolStripSeparator5"; - this.toolStripSeparator5.Size = new System.Drawing.Size(196, 6); - // - // YmapAddToProjectMenu - // - this.YmapAddToProjectMenu.Enabled = false; - this.YmapAddToProjectMenu.Name = "YmapAddToProjectMenu"; - this.YmapAddToProjectMenu.Size = new System.Drawing.Size(199, 22); - this.YmapAddToProjectMenu.Text = "Add to Project"; - this.YmapAddToProjectMenu.Click += new System.EventHandler(this.YmapAddToProjectMenu_Click); - // - // YmapRemoveFromProjectMenu - // - this.YmapRemoveFromProjectMenu.Enabled = false; - this.YmapRemoveFromProjectMenu.Name = "YmapRemoveFromProjectMenu"; - this.YmapRemoveFromProjectMenu.Size = new System.Drawing.Size(199, 22); - this.YmapRemoveFromProjectMenu.Text = "Remove from Project"; - this.YmapRemoveFromProjectMenu.Click += new System.EventHandler(this.YmapRemoveFromProjectMenu_Click); - // - // YndMenu - // - this.YndMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.YndNameMenu, - this.toolStripSeparator4, - this.YndNewNodeMenu, - this.toolStripSeparator6, - this.YndAddToProjectMenu, - this.YndRemoveFromProjectMenu}); - this.YndMenu.Name = "YndMenu"; - this.YndMenu.Size = new System.Drawing.Size(39, 20); - this.YndMenu.Text = "Ynd"; - // - // YndNameMenu - // - this.YndNameMenu.Enabled = false; - this.YndNameMenu.Name = "YndNameMenu"; - this.YndNameMenu.Size = new System.Drawing.Size(189, 22); - this.YndNameMenu.Text = "(No .ynd file selected)"; - // - // toolStripSeparator4 - // - this.toolStripSeparator4.Name = "toolStripSeparator4"; - this.toolStripSeparator4.Size = new System.Drawing.Size(186, 6); - // - // YndNewNodeMenu - // - this.YndNewNodeMenu.Enabled = false; - this.YndNewNodeMenu.Name = "YndNewNodeMenu"; - this.YndNewNodeMenu.Size = new System.Drawing.Size(189, 22); - this.YndNewNodeMenu.Text = "New Node"; - this.YndNewNodeMenu.Click += new System.EventHandler(this.YndNewNodeMenu_Click); - // - // toolStripSeparator6 - // - this.toolStripSeparator6.Name = "toolStripSeparator6"; - this.toolStripSeparator6.Size = new System.Drawing.Size(186, 6); - // - // YndAddToProjectMenu - // - this.YndAddToProjectMenu.Enabled = false; - this.YndAddToProjectMenu.Name = "YndAddToProjectMenu"; - this.YndAddToProjectMenu.Size = new System.Drawing.Size(189, 22); - this.YndAddToProjectMenu.Text = "Add to Project"; - this.YndAddToProjectMenu.Click += new System.EventHandler(this.YndAddToProjectMenu_Click); - // - // YndRemoveFromProjectMenu - // - this.YndRemoveFromProjectMenu.Enabled = false; - this.YndRemoveFromProjectMenu.Name = "YndRemoveFromProjectMenu"; - this.YndRemoveFromProjectMenu.Size = new System.Drawing.Size(189, 22); - this.YndRemoveFromProjectMenu.Text = "Remove from Project"; - this.YndRemoveFromProjectMenu.Click += new System.EventHandler(this.YndRemoveFromProjectMenu_Click); - // - // YnvMenu - // - this.YnvMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.YnvNameMenu, - this.toolStripSeparator9, - this.YnvNewPolygonMenu, - this.toolStripSeparator10, - this.YnvAddToProjectMenu, - this.YnvRemoveFromProjectMenu}); - this.YnvMenu.Name = "YnvMenu"; - this.YnvMenu.Size = new System.Drawing.Size(38, 20); - this.YnvMenu.Text = "Ynv"; - this.YnvMenu.Visible = false; - // - // YnvNameMenu - // - this.YnvNameMenu.Enabled = false; - this.YnvNameMenu.Name = "YnvNameMenu"; - this.YnvNameMenu.Size = new System.Drawing.Size(188, 22); - this.YnvNameMenu.Text = "(No .ynv file selected)"; - // - // toolStripSeparator9 - // - this.toolStripSeparator9.Name = "toolStripSeparator9"; - this.toolStripSeparator9.Size = new System.Drawing.Size(185, 6); - // - // YnvNewPolygonMenu - // - this.YnvNewPolygonMenu.Enabled = false; - this.YnvNewPolygonMenu.Name = "YnvNewPolygonMenu"; - this.YnvNewPolygonMenu.Size = new System.Drawing.Size(188, 22); - this.YnvNewPolygonMenu.Text = "New Polygon"; - this.YnvNewPolygonMenu.Click += new System.EventHandler(this.YnvNewPolygonMenu_Click); - // - // toolStripSeparator10 - // - this.toolStripSeparator10.Name = "toolStripSeparator10"; - this.toolStripSeparator10.Size = new System.Drawing.Size(185, 6); - // - // YnvAddToProjectMenu - // - this.YnvAddToProjectMenu.Enabled = false; - this.YnvAddToProjectMenu.Name = "YnvAddToProjectMenu"; - this.YnvAddToProjectMenu.Size = new System.Drawing.Size(188, 22); - this.YnvAddToProjectMenu.Text = "Add to Project"; - this.YnvAddToProjectMenu.Click += new System.EventHandler(this.YnvAddToProjectMenu_Click); - // - // YnvRemoveFromProjectMenu - // - this.YnvRemoveFromProjectMenu.Enabled = false; - this.YnvRemoveFromProjectMenu.Name = "YnvRemoveFromProjectMenu"; - this.YnvRemoveFromProjectMenu.Size = new System.Drawing.Size(188, 22); - this.YnvRemoveFromProjectMenu.Text = "Remove from Project"; - this.YnvRemoveFromProjectMenu.Click += new System.EventHandler(this.YnvRemoveFromProjectMenu_Click); - // - // TrainsMenu - // - this.TrainsMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.TrainsNameMenu, - this.toolStripSeparator7, - this.TrainsNewNodeMenu, - this.toolStripSeparator8, - this.TrainsAddToProjectMenu, - this.TrainsRemoveFromProjectMenu}); - this.TrainsMenu.Name = "TrainsMenu"; - this.TrainsMenu.Size = new System.Drawing.Size(50, 20); - this.TrainsMenu.Text = "Trains"; - // - // TrainsNameMenu - // - this.TrainsNameMenu.Enabled = false; - this.TrainsNameMenu.Name = "TrainsNameMenu"; - this.TrainsNameMenu.Size = new System.Drawing.Size(200, 22); - this.TrainsNameMenu.Text = "(No train track selected)"; - // - // toolStripSeparator7 - // - this.toolStripSeparator7.Name = "toolStripSeparator7"; - this.toolStripSeparator7.Size = new System.Drawing.Size(197, 6); - // - // TrainsNewNodeMenu - // - this.TrainsNewNodeMenu.Enabled = false; - this.TrainsNewNodeMenu.Name = "TrainsNewNodeMenu"; - this.TrainsNewNodeMenu.Size = new System.Drawing.Size(200, 22); - this.TrainsNewNodeMenu.Text = "New Node"; - this.TrainsNewNodeMenu.Click += new System.EventHandler(this.TrainsNewNodeMenu_Click); - // - // toolStripSeparator8 - // - this.toolStripSeparator8.Name = "toolStripSeparator8"; - this.toolStripSeparator8.Size = new System.Drawing.Size(197, 6); - // - // TrainsAddToProjectMenu - // - this.TrainsAddToProjectMenu.Enabled = false; - this.TrainsAddToProjectMenu.Name = "TrainsAddToProjectMenu"; - this.TrainsAddToProjectMenu.Size = new System.Drawing.Size(200, 22); - this.TrainsAddToProjectMenu.Text = "Add to Project"; - this.TrainsAddToProjectMenu.Click += new System.EventHandler(this.TrainsAddToProjectMenu_Click); - // - // TrainsRemoveFromProjectMenu - // - this.TrainsRemoveFromProjectMenu.Enabled = false; - this.TrainsRemoveFromProjectMenu.Name = "TrainsRemoveFromProjectMenu"; - this.TrainsRemoveFromProjectMenu.Size = new System.Drawing.Size(200, 22); - this.TrainsRemoveFromProjectMenu.Text = "Remove from Project"; - this.TrainsRemoveFromProjectMenu.Click += new System.EventHandler(this.TrainsRemoveFromProjectMenu_Click); - // - // ScenarioMenu - // - this.ScenarioMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.ScenarioNameMenu, - this.toolStripSeparator11, - this.ScenarioNewPointMenu, - this.ScenarioNewPointFromSelectedMenu, - this.ScenarioNewEntityOverrideMenu, - this.ScenarioNewChainMenu, - this.ScenarioNewClusterMenu, - this.ScenarioImportChainMenu, - this.toolStripSeparator12, - this.ScenarioAddToProjectMenu, - this.ScenarioRemoveFromProjectMenu}); - this.ScenarioMenu.Name = "ScenarioMenu"; - this.ScenarioMenu.Size = new System.Drawing.Size(64, 20); - this.ScenarioMenu.Text = "Scenario"; - // - // ScenarioNameMenu - // - this.ScenarioNameMenu.Enabled = false; - this.ScenarioNameMenu.Name = "ScenarioNameMenu"; - this.ScenarioNameMenu.Size = new System.Drawing.Size(228, 22); - this.ScenarioNameMenu.Text = "(No scenario region selected)"; - // - // toolStripSeparator11 - // - this.toolStripSeparator11.Name = "toolStripSeparator11"; - this.toolStripSeparator11.Size = new System.Drawing.Size(225, 6); - // - // ScenarioNewPointMenu - // - this.ScenarioNewPointMenu.Enabled = false; - this.ScenarioNewPointMenu.Name = "ScenarioNewPointMenu"; - this.ScenarioNewPointMenu.Size = new System.Drawing.Size(228, 22); - this.ScenarioNewPointMenu.Text = "New Point (Blank)"; - this.ScenarioNewPointMenu.Click += new System.EventHandler(this.ScenarioNewPointMenu_Click); - // - // ScenarioNewPointFromSelectedMenu - // - this.ScenarioNewPointFromSelectedMenu.Enabled = false; - this.ScenarioNewPointFromSelectedMenu.Name = "ScenarioNewPointFromSelectedMenu"; - this.ScenarioNewPointFromSelectedMenu.Size = new System.Drawing.Size(228, 22); - this.ScenarioNewPointFromSelectedMenu.Text = "New Point (from Selected)"; - this.ScenarioNewPointFromSelectedMenu.Click += new System.EventHandler(this.ScenarioNewPointFromSelectedMenu_Click); - // - // ScenarioNewEntityOverrideMenu - // - this.ScenarioNewEntityOverrideMenu.Enabled = false; - this.ScenarioNewEntityOverrideMenu.Name = "ScenarioNewEntityOverrideMenu"; - this.ScenarioNewEntityOverrideMenu.Size = new System.Drawing.Size(228, 22); - this.ScenarioNewEntityOverrideMenu.Text = "New Entity Override"; - this.ScenarioNewEntityOverrideMenu.Click += new System.EventHandler(this.ScenarioNewEntityOverrideMenu_Click); - // - // ScenarioNewChainMenu - // - this.ScenarioNewChainMenu.Enabled = false; - this.ScenarioNewChainMenu.Name = "ScenarioNewChainMenu"; - this.ScenarioNewChainMenu.Size = new System.Drawing.Size(228, 22); - this.ScenarioNewChainMenu.Text = "New Chain"; - this.ScenarioNewChainMenu.Click += new System.EventHandler(this.ScenarioNewChainMenu_Click); - // - // ScenarioNewClusterMenu - // - this.ScenarioNewClusterMenu.Enabled = false; - this.ScenarioNewClusterMenu.Name = "ScenarioNewClusterMenu"; - this.ScenarioNewClusterMenu.Size = new System.Drawing.Size(228, 22); - this.ScenarioNewClusterMenu.Text = "New Cluster"; - this.ScenarioNewClusterMenu.Click += new System.EventHandler(this.ScenarioNewClusterMenu_Click); - // - // toolStripSeparator12 - // - this.toolStripSeparator12.Name = "toolStripSeparator12"; - this.toolStripSeparator12.Size = new System.Drawing.Size(225, 6); - // - // ScenarioAddToProjectMenu - // - this.ScenarioAddToProjectMenu.Enabled = false; - this.ScenarioAddToProjectMenu.Name = "ScenarioAddToProjectMenu"; - this.ScenarioAddToProjectMenu.Size = new System.Drawing.Size(228, 22); - this.ScenarioAddToProjectMenu.Text = "Add to Project"; - this.ScenarioAddToProjectMenu.Click += new System.EventHandler(this.ScenarioAddToProjectMenu_Click); - // - // ScenarioRemoveFromProjectMenu - // - this.ScenarioRemoveFromProjectMenu.Enabled = false; - this.ScenarioRemoveFromProjectMenu.Name = "ScenarioRemoveFromProjectMenu"; - this.ScenarioRemoveFromProjectMenu.Size = new System.Drawing.Size(228, 22); - this.ScenarioRemoveFromProjectMenu.Text = "Remove from Project"; - this.ScenarioRemoveFromProjectMenu.Click += new System.EventHandler(this.ScenarioRemoveFromProjectMenu_Click); - // - // ToolsMenu - // - this.ToolsMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.ToolsImportMenyooXmlMenu}); - this.ToolsMenu.Name = "ToolsMenu"; - this.ToolsMenu.Size = new System.Drawing.Size(47, 20); - this.ToolsMenu.Text = "Tools"; - // - // ToolsImportMenyooXmlMenu - // - this.ToolsImportMenyooXmlMenu.Name = "ToolsImportMenyooXmlMenu"; - this.ToolsImportMenyooXmlMenu.Size = new System.Drawing.Size(193, 22); - this.ToolsImportMenyooXmlMenu.Text = "Import Menyoo XML..."; - this.ToolsImportMenyooXmlMenu.Click += new System.EventHandler(this.ToolsImportMenyooXmlMenu_Click); - // - // OptionsMenu - // - this.OptionsMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.OptionsHideGTAVMapMenu}); - this.OptionsMenu.Name = "OptionsMenu"; - this.OptionsMenu.Size = new System.Drawing.Size(61, 20); - this.OptionsMenu.Text = "Options"; - // - // OptionsHideGTAVMapMenu - // - this.OptionsHideGTAVMapMenu.Name = "OptionsHideGTAVMapMenu"; - this.OptionsHideGTAVMapMenu.Size = new System.Drawing.Size(157, 22); - this.OptionsHideGTAVMapMenu.Text = "Hide GTAV map"; - this.OptionsHideGTAVMapMenu.Click += new System.EventHandler(this.OptionsHideGTAVMapMenu_Click); - // - // SaveFileDialog - // - this.SaveFileDialog.Filter = "CodeWalker Projects|*.cwproj"; - // - // OpenFileDialog - // - this.OpenFileDialog.Filter = "CodeWalker Projects|*.cwproj"; - // - // ScenarioImportChainMenu - // - this.ScenarioImportChainMenu.Enabled = false; - this.ScenarioImportChainMenu.Name = "ScenarioImportChainMenu"; - this.ScenarioImportChainMenu.Size = new System.Drawing.Size(228, 22); - this.ScenarioImportChainMenu.Text = "Import Chain..."; - this.ScenarioImportChainMenu.Click += new System.EventHandler(this.ScenarioImportChainMenu_Click); - // - // ProjectForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(776, 531); - this.Controls.Add(this.splitContainer1); - this.Controls.Add(this.TopMenuStrip); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.MainMenuStrip = this.TopMenuStrip; - this.Name = "ProjectForm"; - this.Text = "Project - CodeWalker by dexyfex"; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ProjectForm_FormClosing); - this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.ProjectForm_FormClosed); - this.splitContainer1.Panel1.ResumeLayout(false); - this.splitContainer1.Panel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); - this.splitContainer1.ResumeLayout(false); - this.MainTabControl.ResumeLayout(false); - this.ProjectTabPage.ResumeLayout(false); - this.ProjectPanel.ResumeLayout(false); - this.ProjectTabControl.ResumeLayout(false); - this.ProjectGeneralTabPage.ResumeLayout(false); - this.ProjectGeneralTabPage.PerformLayout(); - this.ProjectManifestTabPage.ResumeLayout(false); - this.ProjectManifestTabPage.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ProjectManifestTextBox)).EndInit(); - this.YmapTabPage.ResumeLayout(false); - this.YmapTabControl.ResumeLayout(false); - this.YmapYmapTabPage.ResumeLayout(false); - this.YmapPanel.ResumeLayout(false); - this.YmapPanel.PerformLayout(); - this.tabControl1.ResumeLayout(false); - this.tabPage1.ResumeLayout(false); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.groupBox2.ResumeLayout(false); - this.groupBox2.PerformLayout(); - this.tabPage2.ResumeLayout(false); - this.tabPage2.PerformLayout(); - this.YmapEntityTabPage.ResumeLayout(false); - this.EntityPanel.ResumeLayout(false); - this.EntityTabControl.ResumeLayout(false); - this.EntityGeneralTabPage.ResumeLayout(false); - this.EntityGeneralTabPage.PerformLayout(); - this.EntityLodTabPage.ResumeLayout(false); - this.EntityLodTabPage.PerformLayout(); - this.EntityPivotTabPage.ResumeLayout(false); - this.EntityPivotTabPage.PerformLayout(); - this.YmapCarGenTabPage.ResumeLayout(false); - this.CarGenPanel.ResumeLayout(false); - this.CarGenPanel.PerformLayout(); - this.YndTabPage.ResumeLayout(false); - this.YndTabControl.ResumeLayout(false); - this.YndYndTabPage.ResumeLayout(false); - this.YndPanel.ResumeLayout(false); - this.YndPanel.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.YndAreaIDYUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.YndAreaIDXUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.YndPedNodesUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.YndVehicleNodesUpDown)).EndInit(); - this.YndNodeTabPage.ResumeLayout(false); - this.YndNodePanel.ResumeLayout(false); - this.PathNodeTabControl.ResumeLayout(false); - this.PathNodePropertiesTabPage.ResumeLayout(false); - this.PathNodePropertiesTabPage.PerformLayout(); - this.PathNodeFlags5GroupBox.ResumeLayout(false); - this.PathNodeFlags5GroupBox.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeFlags5UpDown)).EndInit(); - this.PathNodeFlags4GroupBox.ResumeLayout(false); - this.PathNodeFlags4GroupBox.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeFlags42UpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeFlags4UpDown)).EndInit(); - this.PathNodeFlags3GroupBox.ResumeLayout(false); - this.PathNodeFlags3GroupBox.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeFlags32UpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeFlags3UpDown)).EndInit(); - this.PathNodeFlags2GroupBox.ResumeLayout(false); - this.PathNodeFlags2GroupBox.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeFlags2UpDown)).EndInit(); - this.PathNodeFlags1GroupBox.ResumeLayout(false); - this.PathNodeFlags1GroupBox.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeFlags1UpDown)).EndInit(); - this.PathNodeFlags0GroupBox.ResumeLayout(false); - this.PathNodeFlags0GroupBox.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeFlags0UpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeAreaIDUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeNodeIDUpDown)).EndInit(); - this.PathNodeLinksTabPage.ResumeLayout(false); - this.splitContainer2.Panel1.ResumeLayout(false); - this.splitContainer2.Panel1.PerformLayout(); - this.splitContainer2.Panel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); - this.splitContainer2.ResumeLayout(false); - this.PathNodeLinkPanel.ResumeLayout(false); - this.PathNodeLinkPanel.PerformLayout(); - this.PathLinkFlags2GroupBox.ResumeLayout(false); - this.PathLinkFlags2GroupBox.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkFwdLanesUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkBackLanesUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkFlags2UpDown)).EndInit(); - this.PathLinkFlags1GroupBox.ResumeLayout(false); - this.PathLinkFlags1GroupBox.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkOffsetSizeUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkFlags1UpDown)).EndInit(); - this.PathLinkFlags0GroupBox.ResumeLayout(false); - this.PathLinkFlags0GroupBox.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkFlags04UpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkFlags03UpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkFlags0UpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkLengthUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkNodeIDUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeLinkAreaIDUpDown)).EndInit(); - this.PathNodeJunctionTabPage.ResumeLayout(false); - this.PathNodeJunctionTabPage.PerformLayout(); - this.PathNodeJunctionPanel.ResumeLayout(false); - this.PathNodeJunctionPanel.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeJunctionPosYUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeJunctionPosXUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeJunctionHeightmapDimYUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeJunctionHeightmapDimXUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeJunctionMinZUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.PathNodeJunctionMaxZUpDown)).EndInit(); - this.YnvTabPage.ResumeLayout(false); - this.YnvTabControl.ResumeLayout(false); - this.YnvYnvTabPage.ResumeLayout(false); - this.YnvPanel.ResumeLayout(false); - this.YnvPanel.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.YnvAreaIDYUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.YnvAreaIDXUpDown)).EndInit(); - this.YnvPolyTabPage.ResumeLayout(false); - this.YnvPortalTabPage.ResumeLayout(false); - this.TrainsTabPage.ResumeLayout(false); - this.TrainsTabControl.ResumeLayout(false); - this.TrainTrackTabPage.ResumeLayout(false); - this.TrainTrackFilePanel.ResumeLayout(false); - this.TrainTrackFilePanel.PerformLayout(); - this.TrainNodeTabPage.ResumeLayout(false); - this.TrainNodePanel.ResumeLayout(false); - this.TrainNodePanel.PerformLayout(); - this.ScenarioTabPage.ResumeLayout(false); - this.ScenarioTabControl.ResumeLayout(false); - this.ScenarioYmtTabPage.ResumeLayout(false); - this.ScenarioYmtPanel.ResumeLayout(false); - this.ScenarioYmtPanel.PerformLayout(); - this.ScenarioPointTabPage.ResumeLayout(false); - this.ScenarioPointOuterPanel.ResumeLayout(false); - this.ScenarioPointOuterPanel.PerformLayout(); - this.ScenarioPointPanel.ResumeLayout(false); - this.ScenarioPointPanel.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioPointFlagsValueUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioPointWaitTimeUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioPointRadiusUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioPointSpOnlyFlagUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioPointProbabilityUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioPointTimeEndUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioPointTimeStartUpDown)).EndInit(); - this.ScenarioEntityTabPage.ResumeLayout(false); - this.ScenarioEntityTabPage.PerformLayout(); - this.ScenarioEntityPanel.ResumeLayout(false); - this.ScenarioEntityPanel.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioEntityUnk2UpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioEntityUnk1UpDown)).EndInit(); - this.ScenarioEntityPointTabPage.ResumeLayout(false); - this.ScenarioEntityPointTabPage.PerformLayout(); - this.ScenarioEntityPointPanel.ResumeLayout(false); - this.ScenarioEntityPointPanel.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioEntityPointFlagsUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioEntityPointEndUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioEntityPointStartUpDown)).EndInit(); - this.ScenarioChainTabPage.ResumeLayout(false); - this.splitContainer3.Panel1.ResumeLayout(false); - this.splitContainer3.Panel1.PerformLayout(); - this.splitContainer3.Panel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).EndInit(); - this.splitContainer3.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioChainUnk1UpDown)).EndInit(); - this.ScenarioChainEdgePanel.ResumeLayout(false); - this.ScenarioChainEdgePanel.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioChainEdgeNodeIndexToUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioChainEdgeNodeIndexFromUpDown)).EndInit(); - this.ScenarioChainNodeTabPage.ResumeLayout(false); - this.ScenarioChainNodeTabPage.PerformLayout(); - this.ScenarioChainNodePanel.ResumeLayout(false); - this.ScenarioChainNodePanel.PerformLayout(); - this.ScenarioClusterTabPage.ResumeLayout(false); - this.ScenarioClusterTabPage.PerformLayout(); - this.ScenarioClusterPanel.ResumeLayout(false); - this.ScenarioClusterPanel.PerformLayout(); - this.ScenarioClusterPointTabPage.ResumeLayout(false); - this.ScenarioClusterPointTabPage.PerformLayout(); - this.ScenarioClusterPointPanel.ResumeLayout(false); - this.ScenarioClusterPointPanel.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioClusterPointFlagsUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioClusterPointWaitTimeUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioClusterPointRadiusUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioClusterPointAnimalFlagUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioClusterPointProbabilityUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioClusterPointTimeEndUpDown)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.ScenarioClusterPointTimeStartUpDown)).EndInit(); - this.TopMenuStrip.ResumeLayout(false); - this.TopMenuStrip.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.SplitContainer splitContainer1; - private System.Windows.Forms.TreeView ProjectTreeView; - private CodeWalker.WinForms.MenuStripFix TopMenuStrip; - private System.Windows.Forms.ToolStripMenuItem FileMenu; - private System.Windows.Forms.ToolStripMenuItem FileNewMenu; - private System.Windows.Forms.ToolStripMenuItem FileNewProjectMenu; - private System.Windows.Forms.ToolStripMenuItem FileNewYmapMenu; - private System.Windows.Forms.ToolStripMenuItem FileOpenMenu; - private System.Windows.Forms.ToolStripMenuItem FileOpenProjectMenu; - private System.Windows.Forms.ToolStripMenuItem FileOpenYmapMenu; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; - private System.Windows.Forms.ToolStripMenuItem FileCloseProjectMenu; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; - private System.Windows.Forms.ToolStripMenuItem FileSaveProjectMenu; - private System.Windows.Forms.ToolStripMenuItem FileSaveProjectAsMenu; - private System.Windows.Forms.SaveFileDialog SaveFileDialog; - private System.Windows.Forms.OpenFileDialog OpenFileDialog; - private System.Windows.Forms.TabControl MainTabControl; - private System.Windows.Forms.TabPage ProjectTabPage; - private System.Windows.Forms.TabPage YmapTabPage; - private System.Windows.Forms.Label ProjectVersionLabel; - private System.Windows.Forms.TextBox ProjectNameTextBox; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.TextBox YmapNameTextBox; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Panel YmapPanel; - private System.Windows.Forms.Panel ProjectPanel; - private System.Windows.Forms.TextBox YmapParentTextBox; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.Label YmapParentHashLabel; - private System.Windows.Forms.Label YmapNameHashLabel; - private System.Windows.Forms.TextBox YmapContentFlagsTextBox; - private System.Windows.Forms.Label label7; - private System.Windows.Forms.TextBox YmapFlagsTextBox; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.TextBox YmapStreamingExtentsMaxTextBox; - private System.Windows.Forms.Label label10; - private System.Windows.Forms.TextBox YmapStreamingExtentsMinTextBox; - private System.Windows.Forms.Label label11; - private System.Windows.Forms.TextBox YmapEntitiesExtentsMaxTextBox; - private System.Windows.Forms.Label label9; - private System.Windows.Forms.TextBox YmapEntitiesExtentsMinTextBox; - private System.Windows.Forms.Label label8; - private System.Windows.Forms.ToolStripMenuItem FileSaveItemMenu; - private System.Windows.Forms.ToolStripMenuItem FileSaveItemAsMenu; - private System.Windows.Forms.Label EntityArchetypeHashLabel; - private System.Windows.Forms.TextBox EntityArchetypeTextBox; - private System.Windows.Forms.Label label13; - private System.Windows.Forms.TextBox EntityGuidTextBox; - private System.Windows.Forms.Label label15; - private System.Windows.Forms.TextBox EntityFlagsTextBox; - private System.Windows.Forms.Label label14; - private System.Windows.Forms.TextBox EntityRotationTextBox; - private System.Windows.Forms.Label label17; - private System.Windows.Forms.TextBox EntityPositionTextBox; - private System.Windows.Forms.Label label16; - private System.Windows.Forms.Panel EntityPanel; - private System.Windows.Forms.TextBox EntityScaleZTextBox; - private System.Windows.Forms.Label label19; - private System.Windows.Forms.TextBox EntityScaleXYTextBox; - private System.Windows.Forms.Label label18; - private System.Windows.Forms.Label label20; - private System.Windows.Forms.TextBox EntityParentIndexTextBox; - private System.Windows.Forms.Label label22; - private System.Windows.Forms.TextBox EntityChildLodDistTextBox; - private System.Windows.Forms.Label label21; - private System.Windows.Forms.TextBox EntityLodDistTextBox; - private System.Windows.Forms.ComboBox EntityLodLevelComboBox; - private System.Windows.Forms.Label label23; - private System.Windows.Forms.ComboBox EntityPriorityLevelComboBox; - private System.Windows.Forms.Label label24; - private System.Windows.Forms.Label label25; - private System.Windows.Forms.TextBox EntityNumChildrenTextBox; - private System.Windows.Forms.Label label26; - private System.Windows.Forms.TextBox EntityAOMultiplierTextBox; - private System.Windows.Forms.Label label28; - private System.Windows.Forms.TextBox EntityTintValueTextBox; - private System.Windows.Forms.Label label27; - private System.Windows.Forms.TextBox EntityArtificialAOTextBox; - private System.Windows.Forms.CheckBox ProjectShowEntitiesCheckBox; - private System.Windows.Forms.CheckBox ProjectHideMapCheckBox; - private System.Windows.Forms.Button EntityGoToButton; - private System.Windows.Forms.ToolStripMenuItem YmapMenu; - private System.Windows.Forms.ToolStripMenuItem YmapNewEntityMenu; - private System.Windows.Forms.ToolStripMenuItem YmapNameMenu; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; - private System.Windows.Forms.Button YmapCalculateExtentsButton; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator5; - private System.Windows.Forms.ToolStripMenuItem YmapRemoveFromProjectMenu; - private System.Windows.Forms.Button EntityNormalizeRotationButton; - private System.Windows.Forms.TextBox YmapProjectPathTextBox; - private System.Windows.Forms.Label label30; - private System.Windows.Forms.TextBox YmapFileLocationTextBox; - private System.Windows.Forms.Label label29; - private System.Windows.Forms.Panel CarGenPanel; - private System.Windows.Forms.Button CarGoToButton; - private System.Windows.Forms.TextBox CarPositionTextBox; - private System.Windows.Forms.Label label31; - private System.Windows.Forms.TextBox CarModelTextBox; - private System.Windows.Forms.Label label32; - private System.Windows.Forms.Label CarModelHashLabel; - private System.Windows.Forms.TextBox CarOrientYTextBox; - private System.Windows.Forms.Label label34; - private System.Windows.Forms.TextBox CarOrientXTextBox; - private System.Windows.Forms.Label label35; - private System.Windows.Forms.TextBox CarPerpendicularLengthTextBox; - private System.Windows.Forms.Label label36; - private System.Windows.Forms.Label label37; - private System.Windows.Forms.TextBox CarFlagsTextBox; - private System.Windows.Forms.Label label38; - private System.Windows.Forms.TextBox CarBodyColorRemap1TextBox; - private System.Windows.Forms.Label label43; - private System.Windows.Forms.TextBox CarBodyColorRemap4TextBox; - private System.Windows.Forms.Label label42; - private System.Windows.Forms.TextBox CarBodyColorRemap3TextBox; - private System.Windows.Forms.Label label41; - private System.Windows.Forms.TextBox CarBodyColorRemap2TextBox; - private System.Windows.Forms.TextBox CarPopGroupTextBox; - private System.Windows.Forms.Label label39; - private System.Windows.Forms.Label CarPopGroupHashLabel; - private System.Windows.Forms.Label label44; - private System.Windows.Forms.TextBox CarLiveryTextBox; - private System.Windows.Forms.Button EntityDeleteButton; - private System.Windows.Forms.Button EntityAddToProjectButton; - private System.Windows.Forms.ToolStripMenuItem YmapNewCarGenMenu; - private System.Windows.Forms.ToolStripMenuItem YmapAddToProjectMenu; - private System.Windows.Forms.Button CarDeleteButton; - private System.Windows.Forms.Button CarAddToProjectButton; - private System.Windows.Forms.TabControl YmapTabControl; - private System.Windows.Forms.TabPage YmapYmapTabPage; - private System.Windows.Forms.TabPage YmapEntityTabPage; - private System.Windows.Forms.TabPage YmapCarGenTabPage; - private System.Windows.Forms.TabPage YndTabPage; - private System.Windows.Forms.Panel YndPanel; - private System.Windows.Forms.TextBox YndRpfPathTextBox; - private System.Windows.Forms.TabControl YndTabControl; - private System.Windows.Forms.TabPage YndYndTabPage; - private System.Windows.Forms.TabPage YndNodeTabPage; - private System.Windows.Forms.Label label33; - private System.Windows.Forms.Label YndAreaIDInfoLabel; - private System.Windows.Forms.Label YndTotalNodesLabel; - private System.Windows.Forms.NumericUpDown YndPedNodesUpDown; - private System.Windows.Forms.Label label45; - private System.Windows.Forms.NumericUpDown YndVehicleNodesUpDown; - private System.Windows.Forms.Label label40; - private System.Windows.Forms.Label label47; - private System.Windows.Forms.ToolStripMenuItem FileNewYndMenu; - private System.Windows.Forms.ToolStripMenuItem FileOpenYndMenu; - private System.Windows.Forms.ToolStripMenuItem YndMenu; - private System.Windows.Forms.ToolStripMenuItem YndNameMenu; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; - private System.Windows.Forms.ToolStripMenuItem YndNewNodeMenu; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator6; - private System.Windows.Forms.ToolStripMenuItem YndAddToProjectMenu; - private System.Windows.Forms.ToolStripMenuItem YndRemoveFromProjectMenu; - private System.Windows.Forms.Label label46; - private System.Windows.Forms.TextBox YndFilePathTextBox; - private System.Windows.Forms.Panel YndNodePanel; - private System.Windows.Forms.Label label48; - private System.Windows.Forms.TextBox YndProjectPathTextBox; - private System.Windows.Forms.Label PathNodeStreetNameLabel; - private System.Windows.Forms.TextBox PathNodeStreetHashTextBox; - private System.Windows.Forms.Label label52; - private System.Windows.Forms.NumericUpDown PathNodeNodeIDUpDown; - private System.Windows.Forms.Label label50; - private System.Windows.Forms.NumericUpDown PathNodeAreaIDUpDown; - private System.Windows.Forms.Label label49; - private System.Windows.Forms.Label PathNodeFlags4Label; - private System.Windows.Forms.NumericUpDown PathNodeFlags4UpDown; - private System.Windows.Forms.Label PathNodeFlags3Label; - private System.Windows.Forms.NumericUpDown PathNodeFlags3UpDown; - private System.Windows.Forms.Label PathNodeFlags2Label; - private System.Windows.Forms.NumericUpDown PathNodeFlags2UpDown; - private System.Windows.Forms.Label PathNodeFlags1Label; - private System.Windows.Forms.NumericUpDown PathNodeFlags1UpDown; - private System.Windows.Forms.Label PathNodeFlags0Label; - private System.Windows.Forms.NumericUpDown PathNodeFlags0UpDown; - private System.Windows.Forms.TabControl PathNodeTabControl; - private System.Windows.Forms.TabPage PathNodeLinksTabPage; - private System.Windows.Forms.TabPage PathNodeJunctionTabPage; - private System.Windows.Forms.SplitContainer splitContainer2; - private System.Windows.Forms.ListBox PathNodeLinksListBox; - private System.Windows.Forms.Panel PathNodeLinkPanel; - private System.Windows.Forms.NumericUpDown PathNodeLinkNodeIDUpDown; - private System.Windows.Forms.Label label51; - private System.Windows.Forms.NumericUpDown PathNodeLinkAreaIDUpDown; - private System.Windows.Forms.Label label54; - private System.Windows.Forms.NumericUpDown PathNodeLinkLengthUpDown; - private System.Windows.Forms.Label label57; - private System.Windows.Forms.Label PathNodeLinkFlags2Label; - private System.Windows.Forms.NumericUpDown PathNodeLinkFlags2UpDown; - private System.Windows.Forms.Label PathNodeLinkFlags1Label; - private System.Windows.Forms.NumericUpDown PathNodeLinkFlags1UpDown; - private System.Windows.Forms.Label PathNodeLinkFlags0Label; - private System.Windows.Forms.NumericUpDown PathNodeLinkFlags0UpDown; - private System.Windows.Forms.Button PathNodeGoToButton; - private System.Windows.Forms.TextBox PathNodePositionTextBox; - private System.Windows.Forms.Label label55; - private System.Windows.Forms.NumericUpDown PathNodeFlags5UpDown; - private System.Windows.Forms.Button PathNodeRemoveLinkButton; - private System.Windows.Forms.Button PathNodeAddLinkButton; - private System.Windows.Forms.Panel PathNodeJunctionPanel; - private System.Windows.Forms.NumericUpDown PathNodeJunctionMaxZUpDown; - private System.Windows.Forms.Label label65; - private System.Windows.Forms.CheckBox PathNodeJunctionEnableCheckBox; - private System.Windows.Forms.NumericUpDown PathNodeJunctionMinZUpDown; - private System.Windows.Forms.Label label67; - private System.Windows.Forms.NumericUpDown PathNodeJunctionHeightmapDimYUpDown; - private System.Windows.Forms.Label label77; - private System.Windows.Forms.NumericUpDown PathNodeJunctionHeightmapDimXUpDown; - private System.Windows.Forms.Label label76; - private System.Windows.Forms.Label label78; - private WinForms.TextBoxFix PathNodeJunctionHeightmapBytesTextBox; - private System.Windows.Forms.Label PathNodeLinkCountLabel; - private System.Windows.Forms.Label label68; - private System.Windows.Forms.Label PathNodeLinkageStatusLabel; - private System.Windows.Forms.Button PathNodeDeleteButton; - private System.Windows.Forms.Button PathNodeAddToProjectButton; - private System.Windows.Forms.TabPage TrainsTabPage; - private System.Windows.Forms.TabControl TrainsTabControl; - private System.Windows.Forms.TabPage TrainTrackTabPage; - private System.Windows.Forms.TabPage TrainNodeTabPage; - private System.Windows.Forms.Panel TrainNodePanel; - private System.Windows.Forms.Panel TrainTrackFilePanel; - private System.Windows.Forms.Label label74; - private System.Windows.Forms.TextBox TrainTrackProjectPathTextBox; - private System.Windows.Forms.Label label79; - private System.Windows.Forms.TextBox TrainTrackFilePathTextBox; - private System.Windows.Forms.Label label80; - private System.Windows.Forms.TextBox TrainTrackRpfPathTextBox; - private System.Windows.Forms.Button TrainNodeDeleteButton; - private System.Windows.Forms.Button TrainNodeAddToProjectButton; - private System.Windows.Forms.Button TrainNodeGoToButton; - private System.Windows.Forms.TextBox TrainNodePositionTextBox; - private System.Windows.Forms.Label label81; - private System.Windows.Forms.ComboBox TrainNodeTypeComboBox; - private System.Windows.Forms.Label label82; - private System.Windows.Forms.Label label83; - private System.Windows.Forms.TextBox TrainTrackFilenameTextBox; - private System.Windows.Forms.Label label84; - private System.Windows.Forms.TextBox TrainTrackConfigNameTextBox; - private System.Windows.Forms.CheckBox TrainTrackMPStopsAtStationsCheckBox; - private System.Windows.Forms.CheckBox TrainTrackStopsAtStationsCheckBox; - private System.Windows.Forms.CheckBox TrainTrackIsPingPongCheckBox; - private System.Windows.Forms.Label label86; - private System.Windows.Forms.TextBox TrainTrackBrakingDistTextBox; - private System.Windows.Forms.Label label85; - private System.Windows.Forms.TextBox TrainTrackSpeedTextBox; - private System.Windows.Forms.ToolStripMenuItem TrainsMenu; - private System.Windows.Forms.ToolStripMenuItem TrainsNameMenu; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator7; - private System.Windows.Forms.ToolStripMenuItem TrainsNewNodeMenu; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator8; - private System.Windows.Forms.ToolStripMenuItem TrainsAddToProjectMenu; - private System.Windows.Forms.ToolStripMenuItem TrainsRemoveFromProjectMenu; - private System.Windows.Forms.ToolStripMenuItem FileNewTrainsMenu; - private System.Windows.Forms.ToolStripMenuItem FileOpenTrainsMenu; - private System.Windows.Forms.TabPage YnvTabPage; - private System.Windows.Forms.TabControl YnvTabControl; - private System.Windows.Forms.TabPage YnvYnvTabPage; - private System.Windows.Forms.TabPage YnvPolyTabPage; - private System.Windows.Forms.TabPage YnvPortalTabPage; - private System.Windows.Forms.Panel YnvPanel; - private System.Windows.Forms.Panel YnvPolygonPanel; - private System.Windows.Forms.Panel YnvPortalPanel; - private System.Windows.Forms.ToolStripMenuItem FileNewYnvMenu; - private System.Windows.Forms.ToolStripMenuItem FileOpenYnvMenu; - private System.Windows.Forms.ToolStripMenuItem YnvMenu; - private System.Windows.Forms.ToolStripMenuItem YnvNameMenu; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator9; - private System.Windows.Forms.ToolStripMenuItem YnvNewPolygonMenu; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator10; - private System.Windows.Forms.ToolStripMenuItem YnvAddToProjectMenu; - private System.Windows.Forms.ToolStripMenuItem YnvRemoveFromProjectMenu; - private System.Windows.Forms.Label label88; - private System.Windows.Forms.NumericUpDown YndAreaIDYUpDown; - private System.Windows.Forms.Label label87; - private System.Windows.Forms.NumericUpDown YndAreaIDXUpDown; - private System.Windows.Forms.Label label89; - private System.Windows.Forms.NumericUpDown YnvAreaIDYUpDown; - private System.Windows.Forms.Label label90; - private System.Windows.Forms.NumericUpDown YnvAreaIDXUpDown; - private System.Windows.Forms.Label YnvAreaIDInfoLabel; - private System.Windows.Forms.Label label92; - private System.Windows.Forms.TextBox YnvAABBSizeTextBox; - private System.Windows.Forms.Label label91; - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.CheckBox YmapCFlagsSLOD2CheckBox; - private System.Windows.Forms.CheckBox YmapCFlagsLODCheckBox; - private System.Windows.Forms.CheckBox YmapCFlagsHDCheckBox; - private System.Windows.Forms.CheckBox YmapCFlagsOcclusionCheckBox; - private System.Windows.Forms.CheckBox YmapCFlagsInteriorCheckBox; - private System.Windows.Forms.CheckBox YmapCFlagsSLODCheckBox; - private System.Windows.Forms.CheckBox YmapCFlagsPhysicsCheckBox; - private System.Windows.Forms.CheckBox YmapCFlagsCriticalCheckBox; - private System.Windows.Forms.CheckBox YmapCFlagsDistLightsCheckBox; - private System.Windows.Forms.CheckBox YmapCFlagsLODLightsCheckBox; - private System.Windows.Forms.CheckBox YmapCFlagsGrassCheckBox; - private System.Windows.Forms.GroupBox groupBox2; - private System.Windows.Forms.CheckBox YmapFlagsLODCheckBox; - private System.Windows.Forms.CheckBox YmapFlagsScriptedCheckBox; - private System.Windows.Forms.Button YmapCalculateFlagsButton; - private System.Windows.Forms.TabControl tabControl1; - private System.Windows.Forms.TabPage tabPage1; - private System.Windows.Forms.TabPage tabPage2; - private System.Windows.Forms.Label label12; - private WinForms.TextBoxFix YmapPhysicsDictionariesTextBox; - private System.Windows.Forms.TabControl EntityTabControl; - private System.Windows.Forms.TabPage EntityGeneralTabPage; - private System.Windows.Forms.TabPage EntityLodTabPage; - private System.Windows.Forms.TabPage EntityExtensionsTabPage; - private System.Windows.Forms.TabPage EntityPivotTabPage; - private System.Windows.Forms.Label label93; - private System.Windows.Forms.TextBox EntityPivotPositionTextBox; - private System.Windows.Forms.Button EntityPivotRotationNormalizeButton; - private System.Windows.Forms.Label label94; - private System.Windows.Forms.TextBox EntityPivotRotationTextBox; - private System.Windows.Forms.CheckBox EntityPivotEditCheckBox; - private System.Windows.Forms.Label label95; - private System.Windows.Forms.NumericUpDown PathNodeJunctionPosYUpDown; - private System.Windows.Forms.Label label59; - private System.Windows.Forms.NumericUpDown PathNodeJunctionPosXUpDown; - private System.Windows.Forms.Label label69; - private System.Windows.Forms.Label TrainTrackInfoLabel; - private System.Windows.Forms.TabPage PathNodePropertiesTabPage; - private System.Windows.Forms.CheckBox PathNodeFlags08CheckBox; - private System.Windows.Forms.CheckBox PathNodeFlags07CheckBox; - private System.Windows.Forms.CheckBox PathNodeFlags06CheckBox; - private System.Windows.Forms.CheckBox PathNodeFlags05CheckBox; - private System.Windows.Forms.CheckBox PathNodeFlags04CheckBox; - private System.Windows.Forms.CheckBox PathNodeFlags03CheckBox; - private System.Windows.Forms.CheckBox PathNodeFlags02CheckBox; - private System.Windows.Forms.CheckBox PathNodeFlags01CheckBox; - private System.Windows.Forms.GroupBox PathNodeFlags0GroupBox; - private System.Windows.Forms.GroupBox PathNodeFlags1GroupBox; - private System.Windows.Forms.CheckBox PathNodeFlags11CheckBox; - private System.Windows.Forms.CheckBox PathNodeFlags18CheckBox; - private System.Windows.Forms.CheckBox PathNodeFlags12CheckBox; - private System.Windows.Forms.CheckBox PathNodeFlags17CheckBox; - private System.Windows.Forms.CheckBox PathNodeFlags13CheckBox; - private System.Windows.Forms.CheckBox PathNodeFlags16CheckBox; - private System.Windows.Forms.CheckBox PathNodeFlags14CheckBox; - private System.Windows.Forms.CheckBox PathNodeFlags15CheckBox; - private System.Windows.Forms.GroupBox PathNodeFlags2GroupBox; - private System.Windows.Forms.CheckBox PathNodeFlags21CheckBox; - private System.Windows.Forms.CheckBox PathNodeFlags28CheckBox; - private System.Windows.Forms.CheckBox PathNodeFlags22CheckBox; - private System.Windows.Forms.CheckBox PathNodeFlags27CheckBox; - private System.Windows.Forms.CheckBox PathNodeFlags23CheckBox; - private System.Windows.Forms.CheckBox PathNodeFlags26CheckBox; - private System.Windows.Forms.CheckBox PathNodeFlags24CheckBox; - private System.Windows.Forms.CheckBox PathNodeFlags25CheckBox; - private System.Windows.Forms.GroupBox PathNodeFlags3GroupBox; - private System.Windows.Forms.CheckBox PathNodeFlags31CheckBox; - private System.Windows.Forms.Label label70; - private System.Windows.Forms.GroupBox PathNodeFlags4GroupBox; - private System.Windows.Forms.Label label71; - private System.Windows.Forms.CheckBox PathNodeFlags41CheckBox; - private System.Windows.Forms.NumericUpDown PathNodeFlags42UpDown; - private System.Windows.Forms.GroupBox PathNodeFlags5GroupBox; - private System.Windows.Forms.CheckBox PathNodeFlags51CheckBox; - private System.Windows.Forms.CheckBox PathNodeFlags45CheckBox; - private System.Windows.Forms.CheckBox PathNodeFlags46CheckBox; - private System.Windows.Forms.CheckBox PathNodeFlags47CheckBox; - private System.Windows.Forms.CheckBox PathNodeFlags48CheckBox; - private System.Windows.Forms.NumericUpDown PathNodeFlags32UpDown; - private System.Windows.Forms.CheckBox PathNodeFlags52CheckBox; - private System.Windows.Forms.CheckBox PathNodeFlags53CheckBox; - private System.Windows.Forms.NumericUpDown PathNodeLinkBackLanesUpDown; - private System.Windows.Forms.Label label56; - private System.Windows.Forms.NumericUpDown PathNodeLinkFwdLanesUpDown; - private System.Windows.Forms.Label label53; - private System.Windows.Forms.GroupBox PathLinkFlags0GroupBox; - private System.Windows.Forms.CheckBox PathNodeLinkFlags01CheckBox; - private System.Windows.Forms.CheckBox PathNodeLinkFlags02CheckBox; - private System.Windows.Forms.GroupBox PathLinkFlags1GroupBox; - private System.Windows.Forms.CheckBox PathNodeLinkFlags11CheckBox; - private System.Windows.Forms.CheckBox PathNodeLinkFlags18CheckBox; - private System.Windows.Forms.CheckBox PathNodeLinkFlags12CheckBox; - private System.Windows.Forms.CheckBox PathNodeLinkFlags13CheckBox; - private System.Windows.Forms.CheckBox PathNodeLinkFlags14CheckBox; - private System.Windows.Forms.GroupBox PathLinkFlags2GroupBox; - private System.Windows.Forms.CheckBox PathNodeLinkFlags21CheckBox; - private System.Windows.Forms.CheckBox PathNodeLinkFlags22CheckBox; - private System.Windows.Forms.NumericUpDown PathNodeLinkFlags04UpDown; - private System.Windows.Forms.Label label60; - private System.Windows.Forms.NumericUpDown PathNodeLinkFlags03UpDown; - private System.Windows.Forms.Label label58; - private System.Windows.Forms.NumericUpDown PathNodeLinkOffsetSizeUpDown; - private System.Windows.Forms.Label label61; - private System.Windows.Forms.TabPage ScenarioTabPage; - private System.Windows.Forms.TabControl ScenarioTabControl; - private System.Windows.Forms.TabPage ScenarioYmtTabPage; - private System.Windows.Forms.TabPage ScenarioPointTabPage; - private System.Windows.Forms.Panel ScenarioYmtPanel; - private System.Windows.Forms.Panel ScenarioPointOuterPanel; - private System.Windows.Forms.TextBox ScenarioYmtNameTextBox; - private System.Windows.Forms.Label label63; - private System.Windows.Forms.TextBox ScenarioYmtVersionTextBox; - private System.Windows.Forms.Label label64; - private System.Windows.Forms.TextBox ScenarioYmtProjectPathTextBox; - private System.Windows.Forms.Label label66; - private System.Windows.Forms.TextBox ScenarioYmtFileLocationTextBox; - private System.Windows.Forms.Label label72; - private System.Windows.Forms.TextBox ScenarioYmtGridMaxTextBox; - private System.Windows.Forms.Label label73; - private System.Windows.Forms.TextBox ScenarioYmtGridMinTextBox; - private System.Windows.Forms.Label label75; - private System.Windows.Forms.Label ScenarioYmtGridInfoLabel; - private System.Windows.Forms.TextBox ScenarioYmtGridScaleTextBox; - private System.Windows.Forms.Label label96; - private System.Windows.Forms.ToolStripMenuItem FileOpenScenarioMenu; - private System.Windows.Forms.ToolStripMenuItem ScenarioMenu; - private System.Windows.Forms.ToolStripMenuItem ScenarioNameMenu; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator11; - private System.Windows.Forms.ToolStripMenuItem ScenarioNewPointMenu; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator12; - private System.Windows.Forms.ToolStripMenuItem ScenarioAddToProjectMenu; - private System.Windows.Forms.ToolStripMenuItem ScenarioRemoveFromProjectMenu; - private System.Windows.Forms.ToolStripMenuItem FileNewScenarioMenu; - private System.Windows.Forms.TextBox ScenarioPointDirectionTextBox; - private System.Windows.Forms.Label label97; - private System.Windows.Forms.Button ScenarioPointDeleteButton; - private System.Windows.Forms.Button ScenarioPointAddToProjectButton; - private System.Windows.Forms.Button ScenarioPointGoToButton; - private System.Windows.Forms.TextBox ScenarioPointPositionTextBox; - private System.Windows.Forms.Label label62; - private System.Windows.Forms.Panel ScenarioPointPanel; - private System.Windows.Forms.ComboBox ScenarioPointTypeComboBox; - private System.Windows.Forms.Label label98; - private System.Windows.Forms.NumericUpDown ScenarioPointTimeEndUpDown; - private System.Windows.Forms.NumericUpDown ScenarioPointTimeStartUpDown; - private System.Windows.Forms.Label label100; - private System.Windows.Forms.ComboBox ScenarioPointModelSetComboBox; - private System.Windows.Forms.Label label99; - private System.Windows.Forms.Label label101; - private System.Windows.Forms.TextBox ScenarioPointInteriorTextBox; - private System.Windows.Forms.Label label102; - private System.Windows.Forms.Label label106; - private System.Windows.Forms.NumericUpDown ScenarioPointProbabilityUpDown; - private System.Windows.Forms.Label label107; - private System.Windows.Forms.NumericUpDown ScenarioPointSpOnlyFlagUpDown; - private System.Windows.Forms.Label label108; - private System.Windows.Forms.NumericUpDown ScenarioPointRadiusUpDown; - private System.Windows.Forms.Label label109; - private System.Windows.Forms.NumericUpDown ScenarioPointWaitTimeUpDown; - private System.Windows.Forms.Label label111; - private System.Windows.Forms.NumericUpDown ScenarioPointFlagsValueUpDown; - private System.Windows.Forms.CheckedListBox ScenarioPointFlagsCheckedListBox; - private System.Windows.Forms.CheckBox ScenarioPointCheckBox; - private System.Windows.Forms.TabPage ScenarioEntityPointTabPage; - private System.Windows.Forms.Panel ScenarioEntityPointPanel; - private System.Windows.Forms.CheckBox ScenarioEntityPointCheckBox; - private System.Windows.Forms.TabPage ScenarioChainTabPage; - private System.Windows.Forms.TabPage ScenarioClusterTabPage; - private System.Windows.Forms.Panel ScenarioClusterPanel; - private System.Windows.Forms.CheckBox ScenarioClusterCheckBox; - private System.Windows.Forms.Label ScenarioPointInteriorHashLabel; - private System.Windows.Forms.Label label116; - private System.Windows.Forms.Button ScenarioEntityPointGoToButton; - private System.Windows.Forms.TextBox ScenarioEntityPointPositionTextBox; - private System.Windows.Forms.Label label117; - private System.Windows.Forms.TextBox ScenarioEntityPointRotationTextBox; - private System.Windows.Forms.Label label118; - private System.Windows.Forms.Label ScenarioEntityPointPedTypeHashLabel; - private System.Windows.Forms.TextBox ScenarioEntityPointPedTypeTextBox; - private System.Windows.Forms.Label label122; - private System.Windows.Forms.Label ScenarioEntityPointSpawnTypeHashLabel; - private System.Windows.Forms.TextBox ScenarioEntityPointSpawnTypeTextBox; - private System.Windows.Forms.Label label120; - private System.Windows.Forms.Label ScenarioEntityPointRequiredImapHashLabel; - private System.Windows.Forms.TextBox ScenarioEntityPointRequiredImapTextBox; - private System.Windows.Forms.Label label128; - private System.Windows.Forms.Label ScenarioEntityPointInteriorHashLabel; - private System.Windows.Forms.TextBox ScenarioEntityPointInteriorTextBox; - private System.Windows.Forms.Label label126; - private System.Windows.Forms.Label ScenarioEntityPointGroupHashLabel; - private System.Windows.Forms.TextBox ScenarioEntityPointGroupTextBox; - private System.Windows.Forms.Label label124; - private System.Windows.Forms.ComboBox ScenarioEntityPointAvailableInMpSpComboBox; - private System.Windows.Forms.Label label129; - private System.Windows.Forms.TextBox ScenarioEntityPointProbabilityTextBox; - private System.Windows.Forms.Label label130; - private System.Windows.Forms.TextBox ScenarioEntityPointTimeTillPedLeavesTextBox; - private System.Windows.Forms.Label label131; - private System.Windows.Forms.TextBox ScenarioEntityPointRadiusTextBox; - private System.Windows.Forms.Label label132; - private System.Windows.Forms.Label label133; - private System.Windows.Forms.NumericUpDown ScenarioEntityPointEndUpDown; - private System.Windows.Forms.NumericUpDown ScenarioEntityPointStartUpDown; - private System.Windows.Forms.Label label134; - private System.Windows.Forms.CheckBox ScenarioEntityPointHighPriCheckBox; - private System.Windows.Forms.CheckBox ScenarioEntityPointExtendedRangeCheckBox; - private System.Windows.Forms.CheckedListBox ScenarioEntityPointFlagsCheckedListBox; - private System.Windows.Forms.Label label135; - private System.Windows.Forms.NumericUpDown ScenarioEntityPointFlagsUpDown; - private System.Windows.Forms.CheckBox ScenarioEntityPointShortRangeCheckBox; - private System.Windows.Forms.Button ScenarioEntityPointDeleteButton; - private System.Windows.Forms.Button ScenarioEntityPointAddToProjectButton; - private System.Windows.Forms.Button ScenarioClusterDeleteButton; - private System.Windows.Forms.Button ScenarioClusterAddToProjectButton; - private System.Windows.Forms.Label ScenarioEntityPointNameHashLabel; - private System.Windows.Forms.TextBox ScenarioEntityPointNameTextBox; - private System.Windows.Forms.SplitContainer splitContainer3; - private System.Windows.Forms.Button ScenarioChainRemoveEdgeButton; - private System.Windows.Forms.Button ScenarioChainAddEdgeButton; - private System.Windows.Forms.ListBox ScenarioChainEdgesListBox; - private System.Windows.Forms.Label ScenarioChainEdgeCountLabel; - private System.Windows.Forms.Panel ScenarioChainEdgePanel; - private System.Windows.Forms.Label label121; - private System.Windows.Forms.Label label125; - private System.Windows.Forms.NumericUpDown ScenarioChainEdgeNodeIndexToUpDown; - private System.Windows.Forms.NumericUpDown ScenarioChainEdgeNodeIndexFromUpDown; - private System.Windows.Forms.ComboBox ScenarioChainEdgeActionComboBox; - private System.Windows.Forms.Label label127; - private System.Windows.Forms.ComboBox ScenarioChainEdgeNavSpeedComboBox; - private System.Windows.Forms.Label label137; - private System.Windows.Forms.ComboBox ScenarioChainEdgeNavModeComboBox; - private System.Windows.Forms.Label label136; - private System.Windows.Forms.Label label138; - private System.Windows.Forms.NumericUpDown ScenarioChainUnk1UpDown; - private System.Windows.Forms.Button ScenarioClusterGoToButton; - private System.Windows.Forms.TextBox ScenarioClusterCenterTextBox; - private System.Windows.Forms.Label label139; - private System.Windows.Forms.TextBox ScenarioClusterUnk1TextBox; - private System.Windows.Forms.Label label140; - private System.Windows.Forms.CheckBox ScenarioClusterUnk2CheckBox; - private System.Windows.Forms.Label ScenarioPointGroupHashLabel; - private System.Windows.Forms.TextBox ScenarioPointGroupTextBox; - private System.Windows.Forms.Label label156; - private System.Windows.Forms.Label ScenarioPointImapHashLabel; - private System.Windows.Forms.TextBox ScenarioPointImapTextBox; - private System.Windows.Forms.Label label110; - private System.Windows.Forms.TabPage ScenarioClusterPointTabPage; - private System.Windows.Forms.Button ScenarioClusterPointDeleteButton; - private System.Windows.Forms.Button ScenarioClusterPointAddToProjectButton; - private System.Windows.Forms.Panel ScenarioClusterPointPanel; - private System.Windows.Forms.Label ScenarioClusterPointImapHashLabel; - private System.Windows.Forms.TextBox ScenarioClusterPointImapTextBox; - private System.Windows.Forms.Label label143; - private System.Windows.Forms.Label ScenarioClusterPointGroupHashLabel; - private System.Windows.Forms.TextBox ScenarioClusterPointGroupTextBox; - private System.Windows.Forms.Label label141; - private System.Windows.Forms.Label ScenarioClusterPointInteriorHashLabel; - private System.Windows.Forms.CheckedListBox ScenarioClusterPointFlagsCheckedListBox; - private System.Windows.Forms.Label label142; - private System.Windows.Forms.TextBox ScenarioClusterPointDirectionTextBox; - private System.Windows.Forms.Label label144; - private System.Windows.Forms.NumericUpDown ScenarioClusterPointFlagsUpDown; - private System.Windows.Forms.Label label145; - private System.Windows.Forms.Button ScenarioClusterPointGoToButton; - private System.Windows.Forms.NumericUpDown ScenarioClusterPointWaitTimeUpDown; - private System.Windows.Forms.TextBox ScenarioClusterPointPositionTextBox; - private System.Windows.Forms.Label label146; - private System.Windows.Forms.Label label147; - private System.Windows.Forms.NumericUpDown ScenarioClusterPointRadiusUpDown; - private System.Windows.Forms.Label label148; - private System.Windows.Forms.NumericUpDown ScenarioClusterPointAnimalFlagUpDown; - private System.Windows.Forms.Label label149; - private System.Windows.Forms.NumericUpDown ScenarioClusterPointProbabilityUpDown; - private System.Windows.Forms.TextBox ScenarioClusterPointInteriorTextBox; - private System.Windows.Forms.Label label151; - private System.Windows.Forms.Label label152; - private System.Windows.Forms.NumericUpDown ScenarioClusterPointTimeEndUpDown; - private System.Windows.Forms.NumericUpDown ScenarioClusterPointTimeStartUpDown; - private System.Windows.Forms.Label label153; - private System.Windows.Forms.ComboBox ScenarioClusterPointModelSetComboBox; - private System.Windows.Forms.Label label154; - private System.Windows.Forms.ComboBox ScenarioClusterPointTypeComboBox; - private System.Windows.Forms.Label label155; - private System.Windows.Forms.CheckBox ScenarioClusterPointCheckBox; - private System.Windows.Forms.TabPage ScenarioChainNodeTabPage; - private System.Windows.Forms.Panel ScenarioChainNodePanel; - private System.Windows.Forms.ComboBox ScenarioChainNodeTypeComboBox; - private System.Windows.Forms.TextBox ScenarioChainNodeIndexTextBox; - private System.Windows.Forms.Label label115; - private System.Windows.Forms.CheckBox ScenarioChainNodeLastCheckBox; - private System.Windows.Forms.CheckBox ScenarioChainNodeFirstCheckBox; - private System.Windows.Forms.Label label123; - private System.Windows.Forms.Label ScenarioChainNodeUnk1HashLabel; - private System.Windows.Forms.TextBox ScenarioChainNodeUnk1TextBox; - private System.Windows.Forms.Label label119; - private System.Windows.Forms.Button ScenarioChainNodeGoToButton; - private System.Windows.Forms.TextBox ScenarioChainNodePositionTextBox; - private System.Windows.Forms.Label label105; - private System.Windows.Forms.Button ScenarioChainNodeDeleteButton; - private System.Windows.Forms.CheckBox ScenarioChainNodeCheckBox; - private System.Windows.Forms.Button ScenarioChainNodeAddToProjectButton; - private System.Windows.Forms.TabPage ScenarioEntityTabPage; - private System.Windows.Forms.Button ScenarioEntityDeleteButton; - private System.Windows.Forms.Panel ScenarioEntityPanel; - private System.Windows.Forms.Label ScenarioEntityInfoLabel; - private System.Windows.Forms.Label label114; - private System.Windows.Forms.NumericUpDown ScenarioEntityUnk2UpDown; - private System.Windows.Forms.Label label113; - private System.Windows.Forms.NumericUpDown ScenarioEntityUnk1UpDown; - private System.Windows.Forms.Label ScenarioEntityTypeHashLabel; - private System.Windows.Forms.TextBox ScenarioEntityTypeTextBox; - private System.Windows.Forms.Label label112; - private System.Windows.Forms.Button ScenarioEntityGoToButton; - private System.Windows.Forms.TextBox ScenarioEntityPositionTextBox; - private System.Windows.Forms.Label label104; - private System.Windows.Forms.Button ScenarioEntityAddToProjectButton; - private System.Windows.Forms.CheckBox ScenarioEntityCheckBox; - private System.Windows.Forms.Button ScenarioChainDeleteButton; - private System.Windows.Forms.Button ScenarioChainAddToProjectButton; - private System.Windows.Forms.TextBox ScenarioYmtExtentsMaxTextBox; - private System.Windows.Forms.Label label103; - private System.Windows.Forms.TextBox ScenarioYmtExtentsMinTextBox; - private System.Windows.Forms.Label label150; - private System.Windows.Forms.ToolStripMenuItem ScenarioNewPointFromSelectedMenu; - private System.Windows.Forms.ToolStripMenuItem ScenarioNewEntityOverrideMenu; - private System.Windows.Forms.ToolStripMenuItem ScenarioNewChainMenu; - private System.Windows.Forms.ToolStripMenuItem ScenarioNewClusterMenu; - private System.Windows.Forms.TextBox ScenarioClusterRadiusTextBox; - private System.Windows.Forms.Label label157; - private System.Windows.Forms.Button ScenarioChainMoveEdgeDownButton; - private System.Windows.Forms.Button ScenarioChainMoveEdgeUpButton; - private System.Windows.Forms.Button ScenarioClusterAddPointButton; - private System.Windows.Forms.Label label158; - private System.Windows.Forms.ListBox ScenarioClusterPointsListBox; - private System.Windows.Forms.Label label159; - private System.Windows.Forms.Label label160; - private System.Windows.Forms.Button ScenarioEntityAddPointButton; - private System.Windows.Forms.Label label161; - private System.Windows.Forms.ListBox ScenarioEntityPointsListBox; - private System.Windows.Forms.TabControl ProjectTabControl; - private System.Windows.Forms.TabPage ProjectGeneralTabPage; - private System.Windows.Forms.TabPage ProjectManifestTabPage; - private System.Windows.Forms.ToolStripMenuItem OptionsMenu; - private System.Windows.Forms.ToolStripMenuItem OptionsHideGTAVMapMenu; - private System.Windows.Forms.Button ProjectManifestGenerateButton; - private FastColoredTextBoxNS.FastColoredTextBox ProjectManifestTextBox; - private System.Windows.Forms.Label label162; - private System.Windows.Forms.CheckedListBox CarFlagsCheckedListBox; - private System.Windows.Forms.CheckedListBox EntityFlagsCheckedListBox; - private System.Windows.Forms.ToolStripMenuItem ToolsMenu; - private System.Windows.Forms.ToolStripMenuItem ToolsImportMenyooXmlMenu; - private System.Windows.Forms.TabPage YmapMloInstanceTabPage; - private System.Windows.Forms.TabPage YmapTimecycleModifierTabPage; - private System.Windows.Forms.ToolStripMenuItem ScenarioImportChainMenu; - } -} \ No newline at end of file diff --git a/Project/ProjectFormOLD.cs b/Project/ProjectFormOLD.cs deleted file mode 100644 index aa95737..0000000 --- a/Project/ProjectFormOLD.cs +++ /dev/null @@ -1,10586 +0,0 @@ -using CodeWalker.GameFiles; -using CodeWalker.Project; -using CodeWalker.Properties; -using CodeWalker.World; -using SharpDX; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using System.Windows.Forms; - -namespace CodeWalker -{ - public partial class ProjectFormOLD : Form - { - WorldForm WorldForm; - GameFileCache GameFileCache; - RpfManager RpfMan; - - ProjectFile CurrentProjectFile; - YmapFile CurrentYmapFile; - YmapEntityDef CurrentEntity; - YmapCarGen CurrentCarGen; - - YndFile CurrentYndFile; - YndNode CurrentPathNode; - YndLink CurrentPathLink; - - YnvFile CurrentYnvFile; - YnvPoly CurrentNavPoly; - - TrainTrack CurrentTrainTrack; - TrainTrackNode CurrentTrainNode; - - YmtFile CurrentScenario; - ScenarioNode CurrentScenarioNode; - MCScenarioChainingEdge CurrentScenarioChainEdge; - - - bool renderentities = true; - bool hidegtavmap = false; - - object ymapsyncroot = new object(); - object yndsyncroot = new object(); - object ynvsyncroot = new object(); - object trainsyncroot = new object(); - object scenariosyncroot = new object(); - - Dictionary visibleynds = new Dictionary(); - Dictionary visibleynvs = new Dictionary(); - Dictionary visibletrains = new Dictionary(); - Dictionary visiblescenarios = new Dictionary(); - - - bool populatingui = false; - - - - public bool IsProjectLoaded - { - get { return CurrentProjectFile != null; } - } - - - public ProjectFormOLD(WorldForm worldForm) - { - InitializeComponent(); - - MainTabControl.TabPages.Remove(YnvTabPage);//TODO - EntityTabControl.TabPages.Remove(EntityExtensionsTabPage);//TODO - - LoadDropDowns(); - - WorldForm = worldForm; - if ((WorldForm != null) && (WorldForm.GameFileCache != null)) - { - GameFileCache = WorldForm.GameFileCache; - RpfMan = GameFileCache.RpfMan; - } - else - { - GameFileCache = GameFileCacheFactory.Create(); - new Thread(new ThreadStart(() => { - GameFileCache.Init(UpdateStatus, UpdateStatus); - RpfMan = GameFileCache.RpfMan; - })).Start(); - } - - } - - - private void LoadDropDowns() - { - EntityLodLevelComboBox.Items.Clear(); - EntityLodLevelComboBox.Items.Add(Unk_1264241711.LODTYPES_DEPTH_ORPHANHD); - EntityLodLevelComboBox.Items.Add(Unk_1264241711.LODTYPES_DEPTH_HD); - EntityLodLevelComboBox.Items.Add(Unk_1264241711.LODTYPES_DEPTH_LOD); - EntityLodLevelComboBox.Items.Add(Unk_1264241711.LODTYPES_DEPTH_SLOD1); - EntityLodLevelComboBox.Items.Add(Unk_1264241711.LODTYPES_DEPTH_SLOD2); - EntityLodLevelComboBox.Items.Add(Unk_1264241711.LODTYPES_DEPTH_SLOD3); - EntityLodLevelComboBox.Items.Add(Unk_1264241711.LODTYPES_DEPTH_SLOD4); - - EntityPriorityLevelComboBox.Items.Clear(); - EntityPriorityLevelComboBox.Items.Add(Unk_648413703.PRI_REQUIRED); - EntityPriorityLevelComboBox.Items.Add(Unk_648413703.PRI_OPTIONAL_HIGH); - EntityPriorityLevelComboBox.Items.Add(Unk_648413703.PRI_OPTIONAL_MEDIUM); - EntityPriorityLevelComboBox.Items.Add(Unk_648413703.PRI_OPTIONAL_LOW); - } - - - private void UpdateStatus(string text) - { - try - { - if (InvokeRequired) - { - BeginInvoke(new Action(() => { UpdateStatus(text); })); - } - else - { - //TODO: status text - //StatusLabel.Text = text; - } - } - catch { } - } - - - - - private void UpdateFormTitleText() - { - if (CurrentProjectFile == null) - { - Text = "Project - CodeWalker by dexyfex"; - } - else - { - Text = CurrentProjectFile.Name + " - CodeWalker by dexyfex"; - } - } - - private void RefreshProjectUI() - { - bool enable = (CurrentProjectFile != null); - FileCloseProjectMenu.Enabled = enable; - FileSaveProjectMenu.Enabled = enable; - FileSaveProjectAsMenu.Enabled = enable; - } - - private void RefreshYmapUI() - { - bool enable = (CurrentYmapFile != null); - bool inproj = YmapExistsInProject(CurrentYmapFile); - - YmapNewEntityMenu.Enabled = enable && inproj; - YmapNewCarGenMenu.Enabled = enable && inproj; - - if (CurrentYmapFile != null) - { - YmapNameMenu.Text = "(" + CurrentYmapFile.Name + ")"; - } - else - { - YmapNameMenu.Text = "(No .ymap file selected)"; - } - - YmapAddToProjectMenu.Enabled = enable && !inproj; - YmapRemoveFromProjectMenu.Enabled = inproj; - - if (WorldForm != null) - { - WorldForm.EnableYmapUI(enable, CurrentYmapFile?.Name ?? ""); - } - } - - private void RefreshEntityUI() - { - bool enable = (CurrentEntity != null); - bool isinproj = false; - - if (CurrentEntity != null) - { - isinproj = YmapExistsInProject(CurrentEntity.Ymap); - } - - EntityAddToProjectButton.Enabled = !isinproj; - EntityDeleteButton.Enabled = isinproj; - } - - private void RefreshCarGenUI() - { - bool enable = (CurrentCarGen != null); - bool isinproj = false; - - if (CurrentCarGen != null) - { - isinproj = YmapExistsInProject(CurrentCarGen.Ymap); - } - - CarAddToProjectButton.Enabled = !isinproj; - CarDeleteButton.Enabled = isinproj; - } - - private void RefreshYndUI() - { - bool enable = (CurrentYndFile != null); - bool inproj = YndExistsInProject(CurrentYndFile); - - YndNewNodeMenu.Enabled = enable && inproj; - - if (CurrentYndFile != null) - { - YndNameMenu.Text = "(" + CurrentYndFile.Name + ")"; - } - else - { - YndNameMenu.Text = "(No .ynd file selected)"; - } - - YndAddToProjectMenu.Enabled = enable && !inproj; - YndRemoveFromProjectMenu.Enabled = inproj; - - - if (WorldForm != null) - { - WorldForm.EnableYndUI(enable, CurrentYndFile?.Name ?? ""); - } - } - - private void RefreshYnvUI() - { - bool enable = (CurrentYnvFile != null); - bool inproj = YnvExistsInProject(CurrentYnvFile); - - YnvNewPolygonMenu.Enabled = enable && inproj; - - if (CurrentYnvFile != null) - { - YnvNameMenu.Text = "(" + CurrentYnvFile.Name + ")"; - } - else - { - YnvNameMenu.Text = "(No .ynv file selected)"; - } - - YnvAddToProjectMenu.Enabled = enable && !inproj; - YnvRemoveFromProjectMenu.Enabled = inproj; - - - if (WorldForm != null) - { - WorldForm.EnableYnvUI(enable, CurrentYnvFile?.Name ?? ""); - } - } - - private void RefreshTrainTrackUI() - { - bool enable = (CurrentTrainTrack != null); - bool inproj = TrainTrackExistsInProject(CurrentTrainTrack); - - TrainsNewNodeMenu.Enabled = enable && inproj; - - if (CurrentTrainTrack != null) - { - TrainsNameMenu.Text = "(" + CurrentTrainTrack.Name + ")"; - } - else - { - TrainsNameMenu.Text = "(No train track selected)"; - } - - TrainsAddToProjectMenu.Enabled = enable && !inproj; - TrainsRemoveFromProjectMenu.Enabled = inproj; - - - if (WorldForm != null) - { - WorldForm.EnableTrainsUI(enable, CurrentTrainTrack?.Name ?? ""); - } - } - - private void RefreshScenarioUI() - { - bool enable = (CurrentScenario != null); - bool inproj = ScenarioExistsInProject(CurrentScenario); - - ScenarioNewPointMenu.Enabled = enable && inproj; - ScenarioNewPointFromSelectedMenu.Enabled = enable && inproj && (CurrentScenarioNode != null); - ScenarioNewEntityOverrideMenu.Enabled = enable && inproj; - ScenarioNewChainMenu.Enabled = enable && inproj; - ScenarioNewClusterMenu.Enabled = enable && inproj; - ScenarioImportChainMenu.Enabled = enable && inproj; - - if (CurrentScenario != null) - { - ScenarioNameMenu.Text = "(" + CurrentScenario.Name + ")"; - } - else - { - ScenarioNameMenu.Text = "(No scenario region selected)"; - } - - ScenarioAddToProjectMenu.Enabled = enable && !inproj; - ScenarioRemoveFromProjectMenu.Enabled = inproj; - - - if (WorldForm != null) - { - WorldForm.EnableScenarioUI(enable, CurrentScenario?.Name ?? ""); - } - } - - private void RefreshUI() - { - RefreshYmapUI(); - RefreshEntityUI(); - RefreshCarGenUI(); - RefreshYndUI(); - RefreshYnvUI(); - RefreshTrainTrackUI(); - RefreshScenarioUI(); - SetCurrentSaveItem(); - LoadYmapTabPage(); - LoadEntityTabPage(); - LoadCarGenTabPage(); - LoadYndTabPage(); - LoadYnvTabPage(); - LoadPathNodeTabPage(); - LoadTrainTrackTabPage(); - LoadTrainNodeTabPage(); - LoadScenarioTabPage(); - LoadScenarioNodeTabPages(); - } - - - private void SetCurrentSaveItem() - { - string filename = null; - if (CurrentYmapFile != null) - { - filename = CurrentYmapFile.RpfFileEntry?.Name; - } - else if (CurrentYndFile != null) - { - filename = CurrentYndFile.RpfFileEntry?.Name; - } - else if (CurrentYnvFile != null) - { - filename = CurrentYnvFile.RpfFileEntry?.Name; - } - else if (CurrentTrainTrack != null) - { - filename = CurrentTrainTrack.RpfFileEntry?.Name; - } - else if (CurrentScenario != null) - { - filename = CurrentScenario.RpfFileEntry?.Name; - } - - bool enable = !string.IsNullOrEmpty(filename); - - if (enable) - { - FileSaveItemMenu.Text = "Save " + filename; - FileSaveItemAsMenu.Text = "Save " + filename + " As..."; - } - else - { - FileSaveItemMenu.Text = "Save"; - FileSaveItemAsMenu.Text = "Save As..."; - } - - FileSaveItemMenu.Tag = filename; - FileSaveItemAsMenu.Tag = filename; - - FileSaveItemMenu.Enabled = enable; - FileSaveItemMenu.Visible = enable; - FileSaveItemAsMenu.Enabled = enable; - FileSaveItemAsMenu.Visible = enable; - - if (WorldForm != null) - { - WorldForm.SetCurrentSaveItem(filename); - } - } - - - - public void Save() - { - if (CurrentYmapFile != null) - { - SaveYmap(); - } - else if (CurrentYndFile != null) - { - SaveYnd(); - } - else if (CurrentYnvFile != null) - { - SaveYnv(); - } - else if (CurrentTrainTrack != null) - { - SaveTrainTrack(); - } - else if (CurrentScenario != null) - { - SaveScenario(); - } - else if (CurrentProjectFile != null) - { - SaveProject(); - } - } - - public void SaveAll() - { - if (CurrentProjectFile != null) - { - if (CurrentProjectFile.YmapFiles != null) - { - var cymap = CurrentYmapFile; - foreach (var ymap in CurrentProjectFile.YmapFiles) - { - CurrentYmapFile = ymap; - SaveYmap(); - } - CurrentYmapFile = cymap; - LoadYmapTabPage(); - } - - if (CurrentProjectFile.YndFiles != null) - { - var cynd = CurrentYndFile; - foreach (var ynd in CurrentProjectFile.YndFiles) - { - CurrentYndFile = ynd; - SaveYnd(); - } - CurrentYndFile = cynd; - LoadYndTabPage(); - } - - if (CurrentProjectFile.YnvFiles != null) - { - var cynv = CurrentYnvFile; - foreach (var ynv in CurrentProjectFile.YnvFiles) - { - CurrentYnvFile = ynv; - SaveYnv(); - } - CurrentYnvFile = cynv; - LoadYnvTabPage(); - } - - if (CurrentProjectFile.TrainsFiles != null) - { - var ctrack = CurrentTrainTrack; - foreach (var track in CurrentProjectFile.TrainsFiles) - { - CurrentTrainTrack = track; - SaveYnd(); - } - CurrentTrainTrack = ctrack; - LoadTrainTrackTabPage(); - } - - if (CurrentProjectFile.ScenarioFiles != null) - { - var cscen = CurrentScenario; - foreach (var scen in CurrentProjectFile.ScenarioFiles) - { - CurrentScenario = scen; - SaveScenario(); - } - CurrentScenario = cscen; - LoadScenarioTabPage(); - } - - - SaveProject(); - } - } - - - private void SaveCurrentItem(bool saveas = false) - { - if (CurrentYmapFile != null) - { - SaveYmap(saveas); - } - else if (CurrentYndFile != null) - { - SaveYnd(saveas); - } - else if (CurrentYnvFile != null) - { - SaveYnv(saveas); - } - else if (CurrentTrainTrack != null) - { - SaveTrainTrack(saveas); - } - else if (CurrentScenario != null) - { - SaveScenario(saveas); - } - } - - - - public void NewProject() - { - if (CurrentProjectFile != null) - { - ////unload current project first - CloseProject(); - } - - CurrentProjectFile = new ProjectFile(); - CurrentProjectFile.Name = "New CodeWalker Project"; - CurrentProjectFile.Version = 1; - CurrentProjectFile.HasChanged = true; - LoadProjectUI(); - } - - public void OpenProject() - { - string file = ShowOpenDialog("CodeWalker Projects|*.cwproj", string.Empty); - if (string.IsNullOrEmpty(file)) - { - return; - } - - CloseProject(); - - CurrentProjectFile = new ProjectFile(); - CurrentProjectFile.Load(file); - - string cpath = new FileInfo(CurrentProjectFile.Filepath).Directory.FullName; - - foreach (var ymap in CurrentProjectFile.YmapFiles) - { - string filename = ymap.FilePath; - if (!File.Exists(filename)) - { - filename = cpath + "\\" + filename; - } - if (File.Exists(filename)) - { - LoadYmapFromFile(ymap, filename); - } - else - { - MessageBox.Show("Couldn't find file: " + filename); - } - } - - foreach (var ynd in CurrentProjectFile.YndFiles) - { - string filename = ynd.FilePath; - if (!File.Exists(filename)) - { - filename = cpath + "\\" + filename; - } - if (File.Exists(filename)) - { - LoadYndFromFile(ynd, filename); - } - else - { - MessageBox.Show("Couldn't find file: " + filename); - } - } - - foreach (var ynv in CurrentProjectFile.YnvFiles) - { - string filename = ynv.FilePath; - if (!File.Exists(filename)) - { - filename = cpath + "\\" + filename; - } - if (File.Exists(filename)) - { - LoadYnvFromFile(ynv, filename); - } - else - { - MessageBox.Show("Couldn't find file: " + filename); - } - } - - foreach (var track in CurrentProjectFile.TrainsFiles) - { - string filename = track.FilePath; - if (!File.Exists(filename)) - { - filename = cpath + "\\" + filename; - } - if (File.Exists(filename)) - { - LoadTrainTrackFromFile(track, filename); - } - else - { - MessageBox.Show("Couldn't find file: " + filename); - } - } - - foreach (var scenario in CurrentProjectFile.ScenarioFiles) - { - string filename = scenario.FilePath; - if (!File.Exists(filename)) - { - filename = cpath + "\\" + filename; - } - if (File.Exists(filename)) - { - LoadScenarioFromFile(scenario, filename); - } - else - { - MessageBox.Show("Couldn't find file: " + filename); - } - } - - - LoadProjectUI(); - } - - public void SaveProject(bool saveas = false) - { - if (CurrentProjectFile == null) return; - if (string.IsNullOrEmpty(CurrentProjectFile.Filepath) || saveas) - { - string fileName = ShowSaveDialog("CodeWalker Projects|*.cwproj", CurrentProjectFile.Filepath); - if (string.IsNullOrEmpty(fileName)) - { return; } //user cancelled - - string oldpath = CurrentProjectFile.Filepath; - CurrentProjectFile.Filepath = fileName; - CurrentProjectFile.Filename = new FileInfo(fileName).Name; - CurrentProjectFile.UpdateFilenames(oldpath); - } - - CurrentProjectFile.Save(); - - SetProjectHasChanged(false); - } - - private void CloseProject() - { - if (CurrentProjectFile == null) return; - - foreach (var ymap in CurrentProjectFile.YmapFiles) - { - if ((ymap != null) && (ymap.HasChanged)) - { - //save the current ymap first? - if (MessageBox.Show("Would you like to save "+ymap.Name+" before closing?", "Save .ymap before closing?", MessageBoxButtons.YesNo) == DialogResult.Yes) - { - CurrentYmapFile = ymap; - SaveYmap(); - } - } - } - - foreach (var ynd in CurrentProjectFile.YndFiles) - { - if ((ynd != null) && (ynd.HasChanged)) - { - //save the current ynd first? - if (MessageBox.Show("Would you like to save " + ynd.Name + " before closing?", "Save .ynd before closing?", MessageBoxButtons.YesNo) == DialogResult.Yes) - { - CurrentYndFile = ynd; - SaveYnd(); - } - } - } - - foreach (var ynv in CurrentProjectFile.YnvFiles) - { - if ((ynv != null) && (ynv.HasChanged)) - { - //save the current ynv first? - if (MessageBox.Show("Would you like to save " + ynv.Name + " before closing?", "Save .ynv before closing?", MessageBoxButtons.YesNo) == DialogResult.Yes) - { - CurrentYnvFile = ynv; - SaveYnv(); - } - } - } - - foreach (var trains in CurrentProjectFile.TrainsFiles) - { - if ((trains != null) && (trains.HasChanged)) - { - //save the current trains file first? - if (MessageBox.Show("Would you like to save " + trains.Name + " before closing?", "Save trains file before closing?", MessageBoxButtons.YesNo) == DialogResult.Yes) - { - CurrentTrainTrack = trains; - SaveTrainTrack(); - } - } - } - - foreach (var scenario in CurrentProjectFile.ScenarioFiles) - { - if ((scenario != null) && (scenario.HasChanged)) - { - //save the current scenario file first? - if (MessageBox.Show("Would you like to save " + scenario.Name + " before closing?", "Save scenario file before closing?", MessageBoxButtons.YesNo) == DialogResult.Yes) - { - CurrentScenario = scenario; - SaveScenario(); - } - } - } - - - if (CurrentProjectFile.HasChanged) - { - //save the current project first? - if (MessageBox.Show("Would you like to save the current project before closing?", "Save project before closing?", MessageBoxButtons.YesNo) == DialogResult.Yes) - { - SaveProject(); - } - } - - CurrentProjectFile = null; - CurrentYmapFile = null; - CurrentYndFile = null; - - LoadProjectUI(); - - - if (WorldForm != null) - { - WorldForm.SelectItem(null);//make sure current selected item isn't still selected... - } - } - - private void LoadProjectUI() - { - RefreshProjectUI(); - UpdateFormTitleText(); - LoadProjectTree(); - LoadProjectTabPage(); - RefreshUI(); - } - - - private void LoadProjectTree() - { - ProjectTreeView.Nodes.Clear(); - - if (CurrentProjectFile == null) return; - - var pcstr = CurrentProjectFile.HasChanged ? "*" : ""; - - var projnode = ProjectTreeView.Nodes.Add(pcstr + CurrentProjectFile.Name); - projnode.Tag = CurrentProjectFile; - - - if (CurrentProjectFile.YmapFiles.Count > 0) - { - var ymapsnode = projnode.Nodes.Add("Ymap Files"); - ymapsnode.Name = "Ymap"; - - foreach (var ymapfile in CurrentProjectFile.YmapFiles) - { - var ycstr = ymapfile.HasChanged ? "*" : ""; - string name = ymapfile.Name; - if (ymapfile.RpfFileEntry != null) - { - name = ymapfile.RpfFileEntry.Name; - } - var ymapnode = ymapsnode.Nodes.Add(ycstr + name); - ymapnode.Tag = ymapfile; - - LoadYmapTreeNodes(ymapfile, ymapnode); - - JenkIndex.Ensure(name); - JenkIndex.Ensure(Path.GetFileNameWithoutExtension(name)); - } - ymapsnode.Expand(); - } - - if (CurrentProjectFile.YndFiles.Count > 0) - { - var yndsnode = projnode.Nodes.Add("Ynd Files"); - yndsnode.Name = "Ynd"; - - foreach (var yndfile in CurrentProjectFile.YndFiles) - { - var ycstr = yndfile.HasChanged ? "*" : ""; - string name = yndfile.Name; - if (yndfile.RpfFileEntry != null) - { - name = yndfile.RpfFileEntry.Name; - } - var yndnode = yndsnode.Nodes.Add(ycstr + name); - yndnode.Tag = yndfile; - - LoadYndTreeNodes(yndfile, yndnode); - } - yndsnode.Expand(); - } - - if (CurrentProjectFile.YnvFiles.Count > 0) - { - var ynvsnode = projnode.Nodes.Add("Ynv Files"); - ynvsnode.Name = "Ynv"; - - foreach (var ynvfile in CurrentProjectFile.YnvFiles) - { - var ycstr = ynvfile.HasChanged ? "*" : ""; - string name = ynvfile.Name; - if (ynvfile.RpfFileEntry != null) - { - name = ynvfile.RpfFileEntry.Name; - } - var ynvnode = ynvsnode.Nodes.Add(ycstr + name); - ynvnode.Tag = ynvfile; - - LoadYnvTreeNodes(ynvfile, ynvnode); - } - ynvsnode.Expand(); - } - - if (CurrentProjectFile.TrainsFiles.Count > 0) - { - var trainsnode = projnode.Nodes.Add("Trains Files"); - trainsnode.Name = "Trains"; - - foreach (var trainfile in CurrentProjectFile.TrainsFiles) - { - var tcstr = trainfile.HasChanged ? "*" : ""; - string name = trainfile.Name; - if (trainfile.RpfFileEntry != null) - { - name = trainfile.RpfFileEntry.Name; - } - var trainnode = trainsnode.Nodes.Add(tcstr + name); - trainnode.Tag = trainfile; - - LoadTrainTrackTreeNodes(trainfile, trainnode); - } - trainsnode.Expand(); - } - - if (CurrentProjectFile.ScenarioFiles.Count > 0) - { - var scenariosnode = projnode.Nodes.Add("Scenario Files"); - scenariosnode.Name = "Scenarios"; - - foreach (var scenariofile in CurrentProjectFile.ScenarioFiles) - { - var scstr = scenariofile.HasChanged ? "*" : ""; - string name = scenariofile.Name; - if (scenariofile.RpfFileEntry != null) - { - name = scenariofile.RpfFileEntry.Name; - } - var scenarionode = scenariosnode.Nodes.Add(scstr + name); - scenarionode.Tag = scenariofile; - - LoadScenarioTreeNodes(scenariofile, scenarionode); - } - scenariosnode.Expand(); - } - - projnode.Expand(); - - } - - private void LoadProjectTabPage() - { - if (CurrentProjectFile == null) - { - ProjectPanel.Enabled = false; - ProjectNameTextBox.Text = ""; - ProjectVersionLabel.Text = "Version: -"; - } - else - { - ProjectPanel.Enabled = true; - ProjectNameTextBox.Text = CurrentProjectFile.Name; - ProjectVersionLabel.Text = "Version: " + CurrentProjectFile.Version.ToString(); - } - } - - private void SetProjectHasChanged(bool changed) - { - if (CurrentProjectFile == null) return; - - CurrentProjectFile.HasChanged = changed; - - if (ProjectTreeView.Nodes.Count > 0) - { - //first node is the project... - string changestr = changed ? "*" : ""; - ProjectTreeView.Nodes[0].Text = changestr + CurrentProjectFile.Name; - } - - UpdateFormTitleText(); - } - - - private void GenerateProjectManifest() - { - StringBuilder sb = new StringBuilder(); - Dictionary deps = new Dictionary(); - - sb.AppendLine(""); - sb.AppendLine(""); - sb.AppendLine(" "); - sb.AppendLine(" "); - sb.AppendLine(" "); - - - if ((CurrentProjectFile != null) && (CurrentProjectFile.YmapFiles.Count > 0)) - { - sb.AppendLine(" "); - foreach (var ymap in CurrentProjectFile.YmapFiles) - { - var ymapname = ymap.RpfFileEntry?.NameLower; - if (string.IsNullOrEmpty(ymapname)) - { - ymapname = ymap.Name.ToLowerInvariant(); - } - if (ymapname.EndsWith(".ymap")) - { - ymapname = ymapname.Substring(0, ymapname.Length - 5); - } - - deps.Clear(); - if (ymap.AllEntities != null) - { - foreach (var ent in ymap.AllEntities) - { - var ytyp = ent.Archetype?.Ytyp; - if (ytyp != null) - { - var ytypname = ytyp.RpfFileEntry?.NameLower; - if (string.IsNullOrEmpty(ytypname)) - { - ytypname = ytyp.RpfFileEntry?.Name?.ToLowerInvariant(); - if (ytypname == null) ytypname = ""; - } - if (ytypname.EndsWith(".ytyp")) - { - ytypname = ytypname.Substring(0, ytypname.Length - 5); - } - deps[ytypname] = ytyp; - } - } - } - - sb.AppendLine(" "); - sb.AppendLine(" " + ymapname + ""); - sb.AppendLine(" "); - sb.AppendLine(" "); - foreach (var kvp in deps) - { - sb.AppendLine(" " + kvp.Key + ""); - } - sb.AppendLine(" "); - sb.AppendLine(" "); - } - sb.AppendLine(" "); - } - else - { - sb.AppendLine(" "); - } - - sb.AppendLine(" "); - sb.AppendLine(" "); - sb.AppendLine(""); - - ProjectManifestTextBox.Text = sb.ToString(); - } - - - - - public void NewYmap() - { - if (CurrentProjectFile == null) - { - NewProject(); - } - if (CurrentProjectFile == null) return; - - int testi = 1; - string fname = string.Empty; - bool filenameok = false; - while (!filenameok) - { - fname = "map" + testi.ToString() + ".ymap"; - filenameok = !CurrentProjectFile.ContainsYmap(fname); - testi++; - } - - lock (ymapsyncroot) - { - YmapFile ymap = CurrentProjectFile.AddYmapFile(fname); - if (ymap != null) - { - ymap.Loaded = true; - ymap.HasChanged = true; //new ymap, flag as not saved - ymap._CMapData.contentFlags = 65; //stream flags value - } - } - - CurrentProjectFile.HasChanged = true; - - LoadProjectTree(); - } - - public void OpenYmap() - { - string[] files = ShowOpenDialogMulti("Ymap files|*.ymap", string.Empty); - if (files == null) - { - return; - } - - if (CurrentProjectFile == null) - { - NewProject(); - } - - foreach (string file in files) - { - if (!File.Exists(file)) continue; - - var ymap = CurrentProjectFile.AddYmapFile(file); - - if (ymap != null) - { - SetProjectHasChanged(true); - - LoadYmapFromFile(ymap, file); - - LoadProjectTree(); - } - else - { - MessageBox.Show("Couldn't add\n" + file + "\n - the file already exists in the project."); - } - - } - } - - public void SaveYmap(bool saveas = false) - { - - if (CurrentYmapFile == null) return; - string ymapname = CurrentYmapFile.Name; - string filepath = CurrentYmapFile.FilePath; - if (string.IsNullOrEmpty(filepath)) - { - filepath = ymapname; - } - string origfile = filepath; - if (!File.Exists(filepath)) - { - saveas = true; - } - - - byte[] data; - lock (ymapsyncroot) //need to sync writes to ymap objects... - { - saveas = saveas || string.IsNullOrEmpty(filepath); - if (saveas) - { - filepath = ShowSaveDialog("Ymap files|*.ymap", filepath); - if (string.IsNullOrEmpty(filepath)) - { return; } - - string newname = Path.GetFileNameWithoutExtension(filepath); - JenkIndex.Ensure(newname); - CurrentYmapFile.FilePath = filepath; - CurrentYmapFile.RpfFileEntry.Name = new FileInfo(filepath).Name; - CurrentYmapFile.Name = CurrentYmapFile.RpfFileEntry.Name; - CurrentYmapFile._CMapData.name = new MetaHash(JenkHash.GenHash(newname)); - } - - data = CurrentYmapFile.Save(); - } - - - if (data != null) - { - File.WriteAllBytes(filepath, data); - } - - SetYmapHasChanged(false); - - if (saveas) - { - LoadYmapTabPage(); - if (CurrentProjectFile != null) - { - //string newname = CurrentYmapFile.Name; - string origpath = CurrentProjectFile.GetRelativePath(origfile); - string newpath = CurrentProjectFile.GetRelativePath(CurrentYmapFile.FilePath); - - if (!CurrentProjectFile.RenameYmap(origpath, newpath)) - { //couldn't rename it in the project? - MessageBox.Show("Couldn't rename ymap in project! This shouldn't happen - check the project file XML."); - } - } - SetProjectHasChanged(true); - SetCurrentSaveItem(); - } - - if (CurrentYmapFile.SaveWarnings != null) - { - string w = string.Join("\n", CurrentYmapFile.SaveWarnings); - MessageBox.Show(CurrentYmapFile.SaveWarnings.Count.ToString() + " warnings were generated while saving the ymap:\n" + w); - CurrentYmapFile.SaveWarnings = null;//clear it out for next time.. - } - } - - private void AddYmapToProject(YmapFile ymap) - { - if (ymap == null) return; - if (CurrentProjectFile == null) - { - NewProject(); - } - if (YmapExistsInProject(ymap)) return; - if (CurrentProjectFile.AddYmapFile(ymap)) - { - ymap.HasChanged = true; - CurrentProjectFile.HasChanged = true; - LoadProjectTree(); - } - CurrentYmapFile = ymap; - RefreshUI(); - if (CurrentEntity != null) - { - TrySelectEntityTreeNode(CurrentEntity); - } - else if (CurrentCarGen != null) - { - TrySelectCarGenTreeNode(CurrentCarGen); - } - } - - private void RemoveYmapFromProject() - { - if (CurrentYmapFile == null) return; - if (CurrentProjectFile == null) return; - CurrentProjectFile.RemoveYmapFile(CurrentYmapFile); - CurrentYmapFile = null; - LoadProjectTree(); - RefreshUI(); - } - - private void LoadYmapTabPage() - { - if (CurrentYmapFile == null) - { - YmapPanel.Enabled = false; - YmapNameTextBox.Text = ""; - YmapNameHashLabel.Text = "Hash: 0"; - YmapParentTextBox.Text = string.Empty; - YmapParentHashLabel.Text = "Hash: 0"; - YmapFlagsTextBox.Text = string.Empty; - YmapContentFlagsTextBox.Text = string.Empty; - YmapCFlagsHDCheckBox.Checked = false; - YmapCFlagsLODCheckBox.Checked = false; - YmapCFlagsSLOD2CheckBox.Checked = false; - YmapCFlagsInteriorCheckBox.Checked = false; - YmapCFlagsSLODCheckBox.Checked = false; - YmapCFlagsOcclusionCheckBox.Checked = false; - YmapCFlagsPhysicsCheckBox.Checked = false; - YmapCFlagsLODLightsCheckBox.Checked = false; - YmapCFlagsDistLightsCheckBox.Checked = false; - YmapCFlagsCriticalCheckBox.Checked = false; - YmapCFlagsGrassCheckBox.Checked = false; - YmapFlagsScriptedCheckBox.Checked = false; - YmapFlagsLODCheckBox.Checked = false; - YmapPhysicsDictionariesTextBox.Text = string.Empty; - YmapEntitiesExtentsMinTextBox.Text = string.Empty; - YmapEntitiesExtentsMaxTextBox.Text = string.Empty; - YmapStreamingExtentsMinTextBox.Text = string.Empty; - YmapStreamingExtentsMaxTextBox.Text = string.Empty; - YmapFileLocationTextBox.Text = string.Empty; - YmapProjectPathTextBox.Text = string.Empty; - } - else - { - populatingui = true; - var md = CurrentYmapFile.CMapData; - if (md.name.Hash == 0) - { - string name = Path.GetFileNameWithoutExtension(CurrentYmapFile.Name); - JenkIndex.Ensure(name); - md.name = new MetaHash(JenkHash.GenHash(name)); - } - - YmapPanel.Enabled = true; - YmapNameTextBox.Text = md.name.ToString(); - YmapNameHashLabel.Text = "Hash: " + md.name.Hash.ToString(); - YmapParentTextBox.Text = md.parent.ToString(); - YmapParentHashLabel.Text = "Hash: " + md.parent.Hash.ToString(); - YmapEntitiesExtentsMinTextBox.Text = FloatUtil.GetVector3String(md.entitiesExtentsMin); - YmapEntitiesExtentsMaxTextBox.Text = FloatUtil.GetVector3String(md.entitiesExtentsMax); - YmapStreamingExtentsMinTextBox.Text = FloatUtil.GetVector3String(md.streamingExtentsMin); - YmapStreamingExtentsMaxTextBox.Text = FloatUtil.GetVector3String(md.streamingExtentsMax); - YmapFileLocationTextBox.Text = CurrentYmapFile.FilePath; - YmapProjectPathTextBox.Text = (CurrentProjectFile != null) ? CurrentProjectFile.GetRelativePath(CurrentYmapFile.FilePath) : CurrentYmapFile.FilePath; - - UpdateYmapFlagsUI(true, true); - - UpdateYmapPhysicsDictionariesUI(); - - populatingui = false; - - ////struct CMapData: - //MetaHash name { get; set; } //8 8: Hash: 0: name - //MetaHash parent { get; set; } //12 12: Hash: 0: parent - //uint flags { get; set; } //16 16: UnsignedInt: 0: flags - //uint contentFlags { get; set; } //20 20: UnsignedInt: 0: contentFlags//1785155637 - //Vector3 streamingExtentsMin { get; set; } //32 32: Float_XYZ: 0: streamingExtentsMin//3710026271 - //Vector3 streamingExtentsMax { get; set; } //48 48: Float_XYZ: 0: streamingExtentsMax//2720965429 - //Vector3 entitiesExtentsMin { get; set; } //64 64: Float_XYZ: 0: entitiesExtentsMin//477478129 - //Vector3 entitiesExtentsMax { get; set; } //80 80: Float_XYZ: 0: entitiesExtentsMax//1829192759 - //Array_StructurePointer entities { get; set; } //96 96: Array: 0: entities {0: StructurePointer: 0: 256} - //Array_Structure containerLods { get; set; } //112 112: Array: 0: containerLods//2935983381 {0: Structure: 372253349: 256} - //Array_Structure boxOccluders { get; set; } //128 128: Array: 0: boxOccluders//3983590932 {0: Structure: SectionUNKNOWN7: 256} - //Array_Structure occludeModels { get; set; } //144 144: Array: 0: occludeModels//2132383965 {0: Structure: SectionUNKNOWN5: 256} - //Array_uint physicsDictionaries { get; set; } //160 160: Array: 0: physicsDictionaries//949589348 {0: Hash: 0: 256} - //rage__fwInstancedMapData instancedData { get; set; } //176 176: Structure: rage__fwInstancedMapData: instancedData//2569067561 - //Array_Structure timeCycleModifiers { get; set; } //224 224: Array: 0: timeCycleModifiers {0: Structure: CTimeCycleModifier: 256} - //Array_Structure carGenerators { get; set; } //240 240: Array: 0: carGenerators//3254823756 {0: Structure: CCarGen: 256} - //CLODLight LODLightsSOA { get; set; } //256 256: Structure: CLODLight: LODLightsSOA//1774371066 - //CDistantLODLight DistantLODLightsSOA { get; set; } //392 392: Structure: CDistantLODLight: DistantLODLightsSOA//2954466641 - //CBlockDesc block { get; set; } //440 440: Structure: CBlockDesc//3072355914: block - - } - } - - private void LoadYmapFromFile(YmapFile ymap, string filename) - { - byte[] data = File.ReadAllBytes(filename); - - ymap.Load(data); - - ymap.InitYmapEntityArchetypes(GameFileCache); //this needs to be done after calling YmapFile.Load() - } - - private void LoadYmapTreeNodes(YmapFile ymap, TreeNode node) - { - if (ymap == null) return; - - if (!string.IsNullOrEmpty(node.Name)) return; //named nodes are eg Entities and CarGens - - node.Nodes.Clear(); - - if ((ymap.AllEntities != null)&& (ymap.AllEntities.Length > 0)) - { - var entsnode = node.Nodes.Add("Entities (" + ymap.AllEntities.Length.ToString() + ")"); - entsnode.Name = "Entities"; - entsnode.Tag = ymap; - var ents = ymap.AllEntities; - for (int i = 0; i < ents.Length; i++) - { - var ent = ents[i]; - var edef = ent._CEntityDef; - var enode = entsnode.Nodes.Add(edef.archetypeName.ToString()); - enode.Tag = ent; - } - } - if ((ymap.CarGenerators != null) && (ymap.CarGenerators.Length > 0)) - { - var cargensnode = node.Nodes.Add("Car Generators (" + ymap.CarGenerators.Length.ToString() + ")"); - cargensnode.Name = "CarGens"; - cargensnode.Tag = ymap; - var cargens = ymap.CarGenerators; - for (int i = 0; i < cargens.Length; i++) - { - var cargen = cargens[i]; - var ccgnode = cargensnode.Nodes.Add(cargen.ToString()); - ccgnode.Tag = cargen; - } - } - if ((ymap.GrassInstanceBatches != null) && (ymap.GrassInstanceBatches.Length > 0)) - { - var grassbatchesnodes = node.Nodes.Add("Grass Batches (" + ymap.GrassInstanceBatches.Length.ToString() + ")"); - grassbatchesnodes.Name = "GrassBatches"; - grassbatchesnodes.Tag = ymap; - var grassbatches = ymap.GrassInstanceBatches; - for (int i = 0; i < grassbatches.Length; i++) - { - var batch = grassbatches[i]; - var gbnode = grassbatchesnodes.Nodes.Add(batch.ToString()); - gbnode.Tag = batch; - } - } - - } - - private void SetYmapHasChanged(bool changed) - { - if (CurrentYmapFile == null) return; - - bool changechange = changed != CurrentYmapFile.HasChanged; - if (!changechange) return; - - CurrentYmapFile.HasChanged = changed; - - SetYmapHasChangedUI(changed); - } - - private void SetYmapHasChangedUI(bool changed) - { - if (ProjectTreeView.Nodes.Count > 0) - { - var pnode = ProjectTreeView.Nodes[0]; - var ymnode = GetChildTreeNode(pnode, "Ymap"); - if (ymnode == null) return; - string changestr = changed ? "*" : ""; - for (int i = 0; i < ymnode.Nodes.Count; i++) - { - var ynode = ymnode.Nodes[i]; - if (ynode.Tag == CurrentYmapFile) - { - string name = CurrentYmapFile.Name; - if (CurrentYmapFile.RpfFileEntry != null) - { - name = CurrentYmapFile.RpfFileEntry.Name; - } - ynode.Text = changestr + name; - break; - } - } - } - } - - private void UpdateYmapFlagsUI(bool updateCheckboxes, bool updateTextboxes) - { - if (CurrentYmapFile == null) return; - - var md = CurrentYmapFile.CMapData; - var flags = md.flags; - var contentFlags = md.contentFlags; - - if (updateCheckboxes) - { - YmapCFlagsHDCheckBox.Checked = IsBitSet(contentFlags, 0); //1 - YmapCFlagsLODCheckBox.Checked = IsBitSet(contentFlags, 1); //2 - YmapCFlagsSLOD2CheckBox.Checked = IsBitSet(contentFlags, 2); //4 - YmapCFlagsInteriorCheckBox.Checked = IsBitSet(contentFlags, 3); //8 - YmapCFlagsSLODCheckBox.Checked = IsBitSet(contentFlags, 4); //16 - YmapCFlagsOcclusionCheckBox.Checked = IsBitSet(contentFlags, 5); //32 - YmapCFlagsPhysicsCheckBox.Checked = IsBitSet(contentFlags, 6); //64 - YmapCFlagsLODLightsCheckBox.Checked = IsBitSet(contentFlags, 7); //128 - YmapCFlagsDistLightsCheckBox.Checked = IsBitSet(contentFlags, 8); //256 - YmapCFlagsCriticalCheckBox.Checked = IsBitSet(contentFlags, 9); //512 - YmapCFlagsGrassCheckBox.Checked = IsBitSet(contentFlags, 10); //1024 - - YmapFlagsScriptedCheckBox.Checked = IsBitSet(flags, 0); //1 - YmapFlagsLODCheckBox.Checked = IsBitSet(flags, 1); //2 - } - if (updateTextboxes) - { - YmapFlagsTextBox.Text = flags.ToString(); - YmapContentFlagsTextBox.Text = contentFlags.ToString(); - } - } - - private void SetYmapFlagsFromCheckBoxes() - { - if (populatingui) return; - if (CurrentYmapFile == null) return; - - uint flags = 0; - uint contentFlags = 0; - - contentFlags = UpdateBit(contentFlags, 0, YmapCFlagsHDCheckBox.Checked); - contentFlags = UpdateBit(contentFlags, 1, YmapCFlagsLODCheckBox.Checked); - contentFlags = UpdateBit(contentFlags, 2, YmapCFlagsSLOD2CheckBox.Checked); - contentFlags = UpdateBit(contentFlags, 3, YmapCFlagsInteriorCheckBox.Checked); - contentFlags = UpdateBit(contentFlags, 4, YmapCFlagsSLODCheckBox.Checked); - contentFlags = UpdateBit(contentFlags, 5, YmapCFlagsOcclusionCheckBox.Checked); - contentFlags = UpdateBit(contentFlags, 6, YmapCFlagsPhysicsCheckBox.Checked); - contentFlags = UpdateBit(contentFlags, 7, YmapCFlagsLODLightsCheckBox.Checked); - contentFlags = UpdateBit(contentFlags, 8, YmapCFlagsDistLightsCheckBox.Checked); - contentFlags = UpdateBit(contentFlags, 9, YmapCFlagsCriticalCheckBox.Checked); - contentFlags = UpdateBit(contentFlags, 10, YmapCFlagsGrassCheckBox.Checked); - - flags = UpdateBit(flags, 0, YmapFlagsScriptedCheckBox.Checked); - flags = UpdateBit(flags, 1, YmapFlagsLODCheckBox.Checked); - - - lock (ymapsyncroot) - { - if (CurrentYmapFile._CMapData.flags != flags) - { - CurrentYmapFile._CMapData.flags = flags; - SetYmapHasChanged(true); - } - if (CurrentYmapFile._CMapData.contentFlags != contentFlags) - { - CurrentYmapFile._CMapData.contentFlags = contentFlags; - SetYmapHasChanged(true); - } - } - - populatingui = true; - UpdateYmapFlagsUI(false, true); //update textbox - populatingui = false; - } - - private void SetYmapFlagsFromTextBoxes() - { - if (populatingui) return; - if (CurrentYmapFile == null) return; - - uint flags = 0; - uint contentFlags = 0; - uint.TryParse(YmapFlagsTextBox.Text, out flags); - uint.TryParse(YmapContentFlagsTextBox.Text, out contentFlags); - lock (ymapsyncroot) - { - if (CurrentYmapFile._CMapData.flags != flags) - { - CurrentYmapFile._CMapData.flags = flags; - SetYmapHasChanged(true); - } - if (CurrentYmapFile._CMapData.contentFlags != contentFlags) - { - CurrentYmapFile._CMapData.contentFlags = contentFlags; - SetYmapHasChanged(true); - } - } - - populatingui = true; - UpdateYmapFlagsUI(true, false); //update checkboxes - populatingui = false; - } - - private void CalcYmapFlags() - { - if (populatingui) return; - if (CurrentYmapFile == null) return; - - lock (ymapsyncroot) - { - if (CurrentYmapFile.CalcFlags()) - { - SetYmapHasChanged(true); - } - } - - populatingui = true; - UpdateYmapFlagsUI(true, true); //update checkboxes and textboxes - populatingui = false; - } - - private void CalcYmapExtents() - { - if (CurrentYmapFile == null) return; - - var allents = CurrentYmapFile.AllEntities; - var allbatches = CurrentYmapFile.GrassInstanceBatches; - - if ((allents == null) && (allbatches == null)) - { - MessageBox.Show("No items to calculate extents from."); - return; - } - - lock (ymapsyncroot) - { - if (CurrentYmapFile.CalcExtents()) - { - SetYmapHasChanged(true); - } - } - - populatingui = true; - var md = CurrentYmapFile.CMapData; - YmapEntitiesExtentsMinTextBox.Text = FloatUtil.GetVector3String(md.entitiesExtentsMin); - YmapEntitiesExtentsMaxTextBox.Text = FloatUtil.GetVector3String(md.entitiesExtentsMax); - YmapStreamingExtentsMinTextBox.Text = FloatUtil.GetVector3String(md.streamingExtentsMin); - YmapStreamingExtentsMaxTextBox.Text = FloatUtil.GetVector3String(md.streamingExtentsMax); - populatingui = false; - } - - private void UpdateYmapPhysicsDictionariesUI() - { - if ((CurrentYmapFile == null) || (CurrentYmapFile.physicsDictionaries == null)) - { - YmapPhysicsDictionariesTextBox.Text = string.Empty; - } - else - { - StringBuilder sb = new StringBuilder(); - foreach (var hash in CurrentYmapFile.physicsDictionaries) - { - sb.AppendLine(hash.ToString()); - } - YmapPhysicsDictionariesTextBox.Text = sb.ToString(); - } - } - - private void SetYmapPhysicsDictionariesFromTextbox() - { - if (populatingui) return; - if (CurrentYmapFile == null) return; - - List hashes = new List(); - - var strs = YmapPhysicsDictionariesTextBox.Text.Split('\n'); - foreach (var str in strs) - { - var tstr = str.Trim(); - if (!string.IsNullOrEmpty(tstr)) - { - uint h = 0; - if (uint.TryParse(tstr, out h)) - { - hashes.Add(h); - } - else - { - h = JenkHash.GenHash(tstr.ToLowerInvariant()); - hashes.Add(h); - } - } - } - - lock (ymapsyncroot) - { - CurrentYmapFile.physicsDictionaries = (hashes.Count > 0) ? hashes.ToArray() : null; - SetYmapHasChanged(true); - } - } - - - private Vector3 GetSpawnPos(float dist) - { - Vector3 pos = Vector3.Zero; - if (WorldForm != null) - { - Vector3 campos = WorldForm.GetCameraPosition(); - Vector3 camdir = WorldForm.GetCameraViewDir(); - pos = campos + camdir * dist; - } - return pos; - } - - - public void NewEntity(YmapEntityDef copy = null, bool copyPosition = false) - { - if (CurrentYmapFile == null) return; - - - - float spawndist = 5.0f; //use archetype BSradius if starting with a copy... - if (copy != null) - { - spawndist = copy.BSRadius * 2.5f; - } - bool cp = copyPosition && (copy != null); - Vector3 pos = cp ? copy.Position : GetSpawnPos(spawndist); - - - CEntityDef cent = new CEntityDef(); - - if (copy != null) - { - cent = copy.CEntityDef; - //TODO: copy entity extensions! - } - else - { - cent.archetypeName = new MetaHash(JenkHash.GenHash("prop_alien_egg_01")); - cent.rotation = new Vector4(0, 0, 0, 1); - cent.scaleXY = 1.0f; - cent.scaleZ = 1.0f; - cent.flags = 1572872; - cent.parentIndex = -1; - cent.lodDist = 200.0f; - cent.lodLevel = Unk_1264241711.LODTYPES_DEPTH_ORPHANHD; - cent.priorityLevel = Unk_648413703.PRI_REQUIRED; - cent.ambientOcclusionMultiplier = 255; - cent.artificialAmbientOcclusion = 255; - } - - cent.position = pos; - - - YmapEntityDef ent = new YmapEntityDef(CurrentYmapFile, 0, ref cent); - - ent.SetArchetype(GameFileCache.GetArchetype(cent.archetypeName)); - - if (WorldForm != null) - { - lock (WorldForm.RenderSyncRoot) //don't try to do this while rendering... - { - CurrentYmapFile.AddEntity(ent); - } - } - else - { - CurrentYmapFile.AddEntity(ent); - } - - - LoadProjectTree(); - - TrySelectEntityTreeNode(ent); - CurrentEntity = ent; - LoadEntityTabPage(); - } - - public bool DeleteEntity() - { - if (CurrentYmapFile == null) return false; - if (CurrentEntity == null) return false; - if (CurrentEntity.Ymap != CurrentYmapFile) return false; - if (CurrentYmapFile.AllEntities == null) return false; //nothing to delete.. - if (CurrentYmapFile.RootEntities == null) return false; //nothing to delete.. - - if (CurrentEntity._CEntityDef.numChildren != 0) - { - MessageBox.Show("This entity's numChildren is not 0 - deleting entities with children is not currently supported by CodeWalker."); - return true; - } - - int idx = CurrentEntity.Index; - for (int i = idx + 1; i < CurrentYmapFile.AllEntities.Length; i++) - { - var ent = CurrentYmapFile.AllEntities[i]; - if (ent._CEntityDef.numChildren != 0) - { - MessageBox.Show("There are other entities present in this .ymap that have children. Deleting this entity is not currently supported by CodeWalker."); - return true; - } - } - - if (MessageBox.Show("Are you sure you want to delete this entity?\n" + CurrentEntity._CEntityDef.archetypeName.ToString() + "\n" + CurrentEntity.Position.ToString() + "\n\nThis operation cannot be undone. Continue?", "Confirm delete", MessageBoxButtons.YesNo) != DialogResult.Yes) - { - return true; - } - - //find this now to remove it later. - var tn = FindEntityTreeNode(CurrentEntity); - - bool res = false; - if (WorldForm != null) - { - lock (WorldForm.RenderSyncRoot) //don't try to do this while rendering... - { - res = CurrentYmapFile.RemoveEntity(CurrentEntity); - - //WorldForm.SelectItem(null, null, null); - } - } - else - { - res = CurrentYmapFile.RemoveEntity(CurrentEntity); - } - if (!res) - { - MessageBox.Show("Entity.Index didn't match the index of the entity in the ymap. This shouldn't happen, check LOD linkages!"); - } - - SetYmapHasChangedUI(true); - - CurrentEntity = null; - if ((tn != null) && (tn.Parent != null)) - { - tn.Parent.Text = "Entities (" + CurrentYmapFile.AllEntities.Length.ToString() + ")"; - tn.Parent.Nodes.Remove(tn); - } - else - { - //no need for this when removing the node above will select something else. - LoadEntityTabPage(); //this case really shouldn't happen... - } - - return true; - } - - private void AddEntityToProject() - { - if (CurrentEntity == null) return; - - if (CurrentEntity.Ymap == null) - { - MessageBox.Show("Sorry, interior entities cannot currently be added to the project."); - return; - } - - CurrentYmapFile = CurrentEntity.Ymap; - if (!YmapExistsInProject(CurrentYmapFile)) - { - var ent = CurrentEntity; - CurrentYmapFile.HasChanged = true; - AddYmapToProject(CurrentYmapFile); - - CurrentEntity = ent; //bug fix for some reason the treeview selects the project node here. - CurrentYmapFile = ent.Ymap; - TrySelectEntityTreeNode(ent); - } - } - - private void LoadEntityTabPage() - { - if (CurrentEntity == null) - { - EntityPanel.Enabled = false; - EntityArchetypeTextBox.Text = string.Empty; - EntityArchetypeHashLabel.Text = "Hash: 0"; - EntityFlagsTextBox.Text = string.Empty; - EntityGuidTextBox.Text = string.Empty; - EntityPositionTextBox.Text = string.Empty; - EntityRotationTextBox.Text = string.Empty; - EntityScaleXYTextBox.Text = string.Empty; - EntityScaleZTextBox.Text = string.Empty; - EntityParentIndexTextBox.Text = string.Empty; - EntityLodDistTextBox.Text = string.Empty; - EntityChildLodDistTextBox.Text = string.Empty; - EntityLodLevelComboBox.SelectedIndex = 0;// Math.Max(EntityLodLevelComboBox.FindString(), 0); - EntityNumChildrenTextBox.Text = string.Empty; - EntityPriorityLevelComboBox.SelectedIndex = 0; //Math.Max(.. - EntityAOMultiplierTextBox.Text = string.Empty; - EntityArtificialAOTextBox.Text = string.Empty; - EntityTintValueTextBox.Text = string.Empty; - EntityPivotEditCheckBox.Checked = false; - EntityPivotPositionTextBox.Text = string.Empty; - EntityPivotRotationTextBox.Text = string.Empty; - foreach (int i in EntityFlagsCheckedListBox.CheckedIndices) - { - EntityFlagsCheckedListBox.SetItemCheckState(i, CheckState.Unchecked); - } - } - else - { - populatingui = true; - var e = CurrentEntity.CEntityDef; - var po = CurrentEntity.PivotOrientation; - EntityPanel.Enabled = true; - EntityArchetypeTextBox.Text = e.archetypeName.ToString(); - EntityArchetypeHashLabel.Text = "Hash: " + e.archetypeName.Hash.ToString(); - EntityFlagsTextBox.Text = e.flags.ToString(); - EntityGuidTextBox.Text = e.guid.ToString(); - EntityPositionTextBox.Text = FloatUtil.GetVector3String(e.position); - EntityRotationTextBox.Text = FloatUtil.GetVector4String(e.rotation); - EntityScaleXYTextBox.Text = FloatUtil.ToString(e.scaleXY); - EntityScaleZTextBox.Text = FloatUtil.ToString(e.scaleZ); - EntityParentIndexTextBox.Text = e.parentIndex.ToString(); - EntityLodDistTextBox.Text = FloatUtil.ToString(e.lodDist); - EntityChildLodDistTextBox.Text = FloatUtil.ToString(e.childLodDist); - EntityLodLevelComboBox.SelectedIndex = Math.Max(EntityLodLevelComboBox.FindString(e.lodLevel.ToString()), 0); - EntityNumChildrenTextBox.Text = e.numChildren.ToString(); - EntityPriorityLevelComboBox.SelectedIndex = Math.Max(EntityPriorityLevelComboBox.FindString(e.priorityLevel.ToString()), 0); - EntityAOMultiplierTextBox.Text = e.ambientOcclusionMultiplier.ToString(); - EntityArtificialAOTextBox.Text = e.artificialAmbientOcclusion.ToString(); - EntityTintValueTextBox.Text = e.tintValue.ToString(); - EntityPivotPositionTextBox.Text = FloatUtil.GetVector3String(CurrentEntity.PivotPosition); - EntityPivotRotationTextBox.Text = FloatUtil.GetVector4String(new Vector4(po.X, po.Y, po.Z, po.W)); - for (int i = 0; i < EntityFlagsCheckedListBox.Items.Count; i++) - { - var cv = ((e.flags & (1u << i)) > 0); - EntityFlagsCheckedListBox.SetItemCheckState(i, cv ? CheckState.Checked : CheckState.Unchecked); - } - populatingui = false; - - - - if (WorldForm != null) - { - WorldForm.SelectEntity(CurrentEntity); //hopefully the drawable is already loaded - this will try get from cache - } - - ////struct CEntityDef: - //MetaHash archetypeName { get; set; } //8 8: Hash: 0: archetypeName - //uint flags { get; set; } //12 12: UnsignedInt: 0: flags - //uint guid { get; set; } //16 16: UnsignedInt: 0: guid - //Vector3 position { get; set; } //32 32: Float_XYZ: 0: position - //Vector4 rotation { get; set; } //48 48: Float_XYZW: 0: rotation - //float scaleXY { get; set; } //64 64: Float: 0: 2627937847 - //float scaleZ { get; set; } //68 68: Float: 0: 284916802 - //int parentIndex { get; set; } //72 72: SignedInt: 0: parentIndex - //float lodDist { get; set; } //76 76: Float: 0: lodDist - //float childLodDist { get; set; } //80 80: Float: 0: childLodDist//3398912973 - //Unk_1264241711 lodLevel { get; set; } //84 84: IntEnum: 1264241711: lodLevel //LODTYPES_DEPTH_ - //uint numChildren { get; set; } //88 88: UnsignedInt: 0: numChildren//2793909385 - //Unk_648413703 priorityLevel { get; set; } //92 92: IntEnum: 648413703: priorityLevel//647098393 - //Array_StructurePointer extensions { get; set; } //96 96: Array: 0: extensions {0: StructurePointer: 0: 256} - //int ambientOcclusionMultiplier { get; set; } //112 112: SignedInt: 0: ambientOcclusionMultiplier//415356295 - //int artificialAmbientOcclusion { get; set; } //116 116: SignedInt: 0: artificialAmbientOcclusion//599844163 - //uint tintValue { get; set; } //120 120: UnsignedInt: 0: tintValue//1015358759 - } - } - - public bool IsCurrentEntity(YmapEntityDef ent) - { - return CurrentEntity == ent; - } - - - - public void NewCarGen(YmapCarGen copy = null, bool copyPosition = false) - { - if (CurrentYmapFile == null) return; - - - Vector3 pos = GetSpawnPos(10.0f); - - - CCarGen ccg = new CCarGen(); - - if (copy != null) - { - ccg = copy.CCarGen; - } - else - { - ccg.flags = 3680; - ccg.orientX = 5.0f; - ccg.perpendicularLength = 2.6f; - //TODO: set default values for cargen - } - - if (!copyPosition || (copy == null)) - { - ccg.position = pos; - } - - - YmapCarGen cg = new YmapCarGen(CurrentYmapFile, ccg); - - if (WorldForm != null) - { - lock (WorldForm.RenderSyncRoot) //don't try to do this while rendering... - { - CurrentYmapFile.AddCarGen(cg); - } - } - else - { - CurrentYmapFile.AddCarGen(cg); - } - - - LoadProjectTree(); - - TrySelectCarGenTreeNode(cg); - CurrentCarGen = cg; - LoadCarGenTabPage(); - } - - public bool DeleteCarGen() - { - if (CurrentYmapFile == null) return false; - if (CurrentCarGen == null) return false; - if (CurrentCarGen.Ymap != CurrentYmapFile) return false; - if (CurrentYmapFile.CarGenerators == null) return false; //nothing to delete.. - - if (MessageBox.Show("Are you sure you want to delete this car generator?\n" + CurrentCarGen.ToString() + "\n\nThis operation cannot be undone. Continue?", "Confirm delete", MessageBoxButtons.YesNo) != DialogResult.Yes) - { - return true; - } - - //find this now to remove it later. - var tn = FindCarGenTreeNode(CurrentCarGen); - - bool res = false; - if (WorldForm != null) - { - lock (WorldForm.RenderSyncRoot) //don't try to do this while rendering... - { - res = CurrentYmapFile.RemoveCarGen(CurrentCarGen); - - //WorldForm.SelectItem(null, null, null); - } - } - else - { - res = CurrentYmapFile.RemoveCarGen(CurrentCarGen); - } - if (!res) - { - MessageBox.Show("Unable to delete the car generator. This shouldn't happen!"); - } - - SetYmapHasChangedUI(true); - - CurrentCarGen = null; - if ((tn != null) && (tn.Parent != null)) - { - tn.Parent.Text = "Car Generators (" + CurrentYmapFile.CarGenerators.Length.ToString() + ")"; - tn.Parent.Nodes.Remove(tn); - } - else - { - //no need for this when removing the node above will select something else. - LoadCarGenTabPage(); //this case really shouldn't happen... - } - - return true; - } - - private void AddCarGenToProject() - { - if (CurrentCarGen == null) return; - - CurrentYmapFile = CurrentCarGen.Ymap; - if (!YmapExistsInProject(CurrentYmapFile)) - { - var cargen = CurrentCarGen; - CurrentYmapFile.HasChanged = true; - AddYmapToProject(CurrentYmapFile); - - CurrentCarGen = cargen; //bug fix for some reason the treeview selects the project node here. - CurrentYmapFile = cargen.Ymap; - TrySelectCarGenTreeNode(cargen); - } - } - - private void LoadCarGenTabPage() - { - - if (CurrentCarGen == null) - { - CarGenPanel.Enabled = false; - CarModelTextBox.Text = string.Empty; - CarModelHashLabel.Text = "Hash: 0"; - CarPopGroupTextBox.Text = string.Empty; - CarPopGroupHashLabel.Text = "Hash: 0"; - CarFlagsTextBox.Text = string.Empty; - CarPositionTextBox.Text = string.Empty; - CarOrientXTextBox.Text = string.Empty; - CarOrientYTextBox.Text = string.Empty; - CarPerpendicularLengthTextBox.Text = string.Empty; - CarBodyColorRemap1TextBox.Text = string.Empty; - CarBodyColorRemap2TextBox.Text = string.Empty; - CarBodyColorRemap3TextBox.Text = string.Empty; - CarBodyColorRemap4TextBox.Text = string.Empty; - CarLiveryTextBox.Text = string.Empty; - foreach (int i in CarFlagsCheckedListBox.CheckedIndices) - { - CarFlagsCheckedListBox.SetItemCheckState(i, CheckState.Unchecked); - } - } - else - { - populatingui = true; - var c = CurrentCarGen.CCarGen; - CarGenPanel.Enabled = true; - CarModelTextBox.Text = c.carModel.ToString(); - CarModelHashLabel.Text = "Hash: " + c.carModel.Hash.ToString(); - CarPopGroupTextBox.Text = c.popGroup.ToString(); - CarPopGroupHashLabel.Text = "Hash: " + c.popGroup.Hash.ToString(); - CarFlagsTextBox.Text = c.flags.ToString(); - CarPositionTextBox.Text = FloatUtil.GetVector3String(c.position); - CarOrientXTextBox.Text = FloatUtil.ToString(c.orientX); - CarOrientYTextBox.Text = FloatUtil.ToString(c.orientY); - CarPerpendicularLengthTextBox.Text = FloatUtil.ToString(c.perpendicularLength); - CarBodyColorRemap1TextBox.Text = c.bodyColorRemap1.ToString(); - CarBodyColorRemap2TextBox.Text = c.bodyColorRemap2.ToString(); - CarBodyColorRemap3TextBox.Text = c.bodyColorRemap3.ToString(); - CarBodyColorRemap4TextBox.Text = c.bodyColorRemap4.ToString(); - CarLiveryTextBox.Text = c.livery.ToString(); - for (int i = 0; i < CarFlagsCheckedListBox.Items.Count; i++) - { - var cv = ((c.flags & (1u << i)) > 0); - CarFlagsCheckedListBox.SetItemCheckState(i, cv ? CheckState.Checked : CheckState.Unchecked); - } - populatingui = false; - - if (WorldForm != null) - { - WorldForm.SelectCarGen(CurrentCarGen); - } - - ////struct CCarGen: - //Vector3 position { get; set; } //16 16: Float_XYZ: 0: position - //float orientX { get; set; } //32 32: Float: 0: orientX=735213009 - //float orientY { get; set; } //36 36: Float: 0: orientY=979440342 - //float perpendicularLength { get; set; } //40 40: Float: 0: perpendicularLength=124715667 - //MetaHash carModel { get; set; } //44 44: Hash: 0: carModel - //uint flags { get; set; } //48 48: UnsignedInt: 0: flags - //int bodyColorRemap1 { get; set; } //52 52: SignedInt: 0: bodyColorRemap1=1429703670 - //int bodyColorRemap2 { get; set; } //56 56: SignedInt: 0: bodyColorRemap2=1254848286 - //int bodyColorRemap3 { get; set; } //60 60: SignedInt: 0: bodyColorRemap3=1880965569 - //int bodyColorRemap4 { get; set; } //64 64: SignedInt: 0: bodyColorRemap4=1719152247 - //MetaHash popGroup { get; set; } //68 68: Hash: 0: popGroup=911358791 - //sbyte livery { get; set; } //72 72: SignedByte: 0: livery - } - } - - public bool IsCurrentCarGen(YmapCarGen cargen) - { - return CurrentCarGen == cargen; - } - - - - - public void NewYnd() - { - if (CurrentProjectFile == null) - { - NewProject(); - } - if (CurrentProjectFile == null) return; - - int testi = 1; - string fname = string.Empty; - bool filenameok = false; - while (!filenameok) - { - fname = "nodes" + testi.ToString() + ".ynd"; - filenameok = !CurrentProjectFile.ContainsYnd(fname); - testi++; - } - - lock (yndsyncroot) - { - YndFile ynd = CurrentProjectFile.AddYndFile(fname); - if (ynd != null) - { - ynd.Loaded = true; - ynd.HasChanged = true; //new ynd, flag as not saved - - //TODO: set new ynd default values... - ynd.NodeDictionary = new NodeDictionary(); - - - } - } - - CurrentProjectFile.HasChanged = true; - - LoadProjectTree(); - } - - public void OpenYnd() - { - string[] files = ShowOpenDialogMulti("Ynd files|*.ynd", string.Empty); - if (files == null) - { - return; - } - - if (CurrentProjectFile == null) - { - NewProject(); - } - - foreach (string file in files) - { - if (!File.Exists(file)) continue; - - var ynd = CurrentProjectFile.AddYndFile(file); - - if (ynd != null) - { - SetProjectHasChanged(true); - - LoadYndFromFile(ynd, file); - - LoadProjectTree(); - } - else - { - MessageBox.Show("Couldn't add\n" + file + "\n - the file already exists in the project."); - } - - } - } - - public void SaveYnd(bool saveas = false) - { - if ((CurrentYndFile == null) && (CurrentPathNode != null)) CurrentYndFile = CurrentPathNode.Ynd; - if (CurrentYndFile == null) return; - string yndname = CurrentYndFile.Name; - string filepath = CurrentYndFile.FilePath; - if (string.IsNullOrEmpty(filepath)) - { - filepath = yndname; - } - string origfile = filepath; - if (!File.Exists(filepath)) - { - saveas = true; - } - - - byte[] data; - lock (yndsyncroot) //need to sync writes to ynd objects... - { - saveas = saveas || string.IsNullOrEmpty(filepath); - if (saveas) - { - filepath = ShowSaveDialog("Ynd files|*.ynd", filepath); - if (string.IsNullOrEmpty(filepath)) - { return; } - - string newname = Path.GetFileNameWithoutExtension(filepath); - JenkIndex.Ensure(newname); - CurrentYndFile.FilePath = filepath; - CurrentYndFile.RpfFileEntry.Name = new FileInfo(filepath).Name; - CurrentYndFile.Name = CurrentYndFile.RpfFileEntry.Name; - } - - - data = CurrentYndFile.Save(); - } - - - if (data != null) - { - File.WriteAllBytes(filepath, data); - } - - SetYndHasChanged(false); - - if (saveas) - { - LoadYndTabPage(); - if (CurrentProjectFile != null) - { - string origpath = CurrentProjectFile.GetRelativePath(origfile); - string newpath = CurrentProjectFile.GetRelativePath(CurrentYndFile.FilePath); - if (!CurrentProjectFile.RenameYnd(origpath, newpath)) - { //couldn't rename it in the project? happens when project not saved yet... - //MessageBox.Show("Couldn't rename ynd in project! This shouldn't happen - check the project file XML."); - } - } - SetProjectHasChanged(true); - SetCurrentSaveItem(); - } - - } - - private void AddYndToProject(YndFile ynd) - { - if (ynd == null) return; - if (CurrentProjectFile == null) - { - NewProject(); - } - if (YndExistsInProject(ynd)) return; - if (CurrentProjectFile.AddYndFile(ynd)) - { - ynd.HasChanged = true; - CurrentProjectFile.HasChanged = true; - LoadProjectTree(); - } - CurrentYndFile = ynd; - RefreshUI(); - if (CurrentPathNode != null) - { - TrySelectPathNodeTreeNode(CurrentPathNode); - } - } - - private void RemoveYndFromProject() - { - if (CurrentYndFile == null) return; - if (CurrentProjectFile == null) return; - CurrentProjectFile.RemoveYndFile(CurrentYndFile); - CurrentYndFile = null; - LoadProjectTree(); - RefreshUI(); - } - - private void LoadYndTabPage() - { - if (CurrentYndFile == null) - { - YndPanel.Enabled = false; - YndRpfPathTextBox.Text = string.Empty; - YndFilePathTextBox.Text = string.Empty; - YndProjectPathTextBox.Text = string.Empty; - YndAreaIDXUpDown.Value = 0; - YndAreaIDYUpDown.Value = 0; - YndAreaIDInfoLabel.Text = "ID: 0"; - YndTotalNodesLabel.Text = "Total Nodes: 0"; - YndVehicleNodesUpDown.Value = 0; - YndVehicleNodesUpDown.Maximum = 0; - YndPedNodesUpDown.Value = 0; - YndPedNodesUpDown.Maximum = 0; - } - else - { - populatingui = true; - var nd = CurrentYndFile.NodeDictionary; - YndPanel.Enabled = true; - YndRpfPathTextBox.Text = CurrentYndFile.RpfFileEntry.Path; - YndFilePathTextBox.Text = CurrentYndFile.FilePath; - YndProjectPathTextBox.Text = (CurrentProjectFile != null) ? CurrentProjectFile.GetRelativePath(CurrentYndFile.FilePath) : CurrentYndFile.FilePath; - YndAreaIDXUpDown.Value = CurrentYndFile.CellX; - YndAreaIDYUpDown.Value = CurrentYndFile.CellY; - YndAreaIDInfoLabel.Text = "ID: " + CurrentYndFile.AreaID.ToString(); - YndTotalNodesLabel.Text = "Total Nodes: " + (nd?.NodesCount.ToString()??"0"); - YndVehicleNodesUpDown.Maximum = nd?.NodesCount??0; - YndVehicleNodesUpDown.Value = Math.Min(nd?.NodesCountVehicle??0, YndVehicleNodesUpDown.Maximum); - YndPedNodesUpDown.Maximum = nd?.NodesCount??0; - YndPedNodesUpDown.Value = Math.Min(nd?.NodesCountPed??0, YndPedNodesUpDown.Maximum); - populatingui = false; - } - } - - private void LoadYndFromFile(YndFile ynd, string filename) - { - byte[] data = File.ReadAllBytes(filename); - - ynd.Load(data); - - - - if (WorldForm != null) - { - WorldForm.UpdatePathYndGraphics(ynd, true); //links don't get drawn until something changes otherwise - //note: this is actually necessary to properly populate junctions data........ - } - } - - private void LoadYndTreeNodes(YndFile ynd, TreeNode node) - { - if (ynd == null) return; - - if (!string.IsNullOrEmpty(node.Name)) return; //named nodes are eg Nodes - - node.Nodes.Clear(); - - - - if ((ynd.Nodes != null) && (ynd.Nodes.Length > 0)) - { - var nodesnode = node.Nodes.Add("Nodes (" + ynd.Nodes.Length.ToString() + ")"); - nodesnode.Name = "Nodes"; - nodesnode.Tag = ynd; - var nodes = ynd.Nodes; - for (int i = 0; i < nodes.Length; i++) - { - var ynode = nodes[i]; - var nnode = ynode.RawData; - var tnode = nodesnode.Nodes.Add(nnode.ToString()); - tnode.Tag = ynode; - } - } - - } - - private void SetYndHasChanged(bool changed) - { - if (CurrentYndFile == null) return; - - bool changechange = changed != CurrentYndFile.HasChanged; - if (!changechange) return; - - CurrentYndFile.HasChanged = changed; - - SetYndHasChangedUI(changed); - } - - private void SetYndHasChangedUI(bool changed) - { - if (ProjectTreeView.Nodes.Count > 0) - { - var pnode = ProjectTreeView.Nodes[0]; - var ynnode = GetChildTreeNode(pnode, "Ynd"); - if (ynnode == null) return; - string changestr = changed ? "*" : ""; - for (int i = 0; i < ynnode.Nodes.Count; i++) - { - var ynode = ynnode.Nodes[i]; - if (ynode.Tag == CurrentYndFile) - { - string name = CurrentYndFile.Name; - if (CurrentYndFile.RpfFileEntry != null) - { - name = CurrentYndFile.RpfFileEntry.Name; - } - ynode.Text = changestr + name; - break; - } - } - } - } - - - - public void NewPathNode(YndNode copy = null, bool copyPosition = false) - { - if (CurrentYndFile == null) return; - - var n = CurrentYndFile.AddNode(); - var areaid = n.AreaID; - var nodeid = n.NodeID; - if (copy == null) - { - copy = CurrentPathNode; - } - if (copy != null) - { - n.Init(CurrentYndFile, copy.RawData); - n.LinkCountUnk = copy.LinkCountUnk; - } - n.AreaID = areaid; - n.NodeID = nodeid; - - bool cp = copyPosition && (copy != null); - Vector3 pos = cp ? copy.Position : GetSpawnPos(10.0f); - n.SetPosition(pos); - - - if (copy != null) - { - var link1 = n.AddLink(copy); - var link2 = copy.AddLink(n); - if ((copy.Links != null) && (copy.Links.Length > 0)) - { - var clink = copy.Links[0]; - link1.CopyFlags(clink); - var clnode = clink.Node2; - if (clnode.Links != null) - { - for (int i = 0; i < clnode.Links.Length; i++) - { - var clnlink = clnode.Links[i]; - if (clnlink.Node2 == copy) - { - link2.CopyFlags(clnlink); - break; - } - } - } - } - } - - CurrentYndFile.UpdateAllNodePositions(); //for the graphics... - CurrentYndFile.BuildBVH(); - - - LoadProjectTree(); - - TrySelectPathNodeTreeNode(n); - CurrentPathNode = n; - LoadYndTabPage(); - LoadPathNodeTabPage(); - - - if (WorldForm != null) - { - WorldForm.UpdatePathYndGraphics(CurrentYndFile, false); - } - } - - public bool DeletePathNode() - { - if (CurrentYndFile == null) return false; - if (CurrentPathNode == null) return false; - if (CurrentPathNode.Ynd != CurrentYndFile) return false; - if (CurrentYndFile.Nodes == null) return false; //nothing to delete.. - - if (MessageBox.Show("Are you sure you want to delete this path node?\n" + CurrentPathNode.ToString() + "\n\nThis operation cannot be undone. Continue?", "Confirm delete", MessageBoxButtons.YesNo) != DialogResult.Yes) - { - return true; - } - - //find this now to remove it later. - var tn = FindPathNodeTreeNode(CurrentPathNode); - - bool res = false; - if (WorldForm != null) - { - lock (WorldForm.RenderSyncRoot) //don't try to do this while rendering... - { - res = CurrentYndFile.RemoveNode(CurrentPathNode); - - //WorldForm.SelectItem(null, null, null); - } - } - else - { - res = CurrentYndFile.RemoveNode(CurrentPathNode); - } - if (!res) - { - MessageBox.Show("Unable to delete the path node. This shouldn't happen!"); - } - - SetYndHasChangedUI(true); - - CurrentPathNode = null; - if ((tn != null) && (tn.Parent != null)) - { - tn.Parent.Text = "Nodes (" + CurrentYndFile.Nodes.Length.ToString() + ")"; - tn.Parent.Nodes.Remove(tn); - } - else - { - //no need for this when removing the node above will select something else. - LoadPathNodeTabPage(); //this case really shouldn't happen... - } - - if (WorldForm != null) - { - WorldForm.UpdatePathYndGraphics(CurrentYndFile, false); - } - - - return true; - } - - private void AddPathNodeToProject() - { - if (CurrentPathNode == null) return; - if (CurrentYndFile != null) - { - AddYndToProject(CurrentYndFile); - } - } - - private void LoadPathNodeTabPage() - { - - CurrentPathLink = null; - - if (CurrentPathNode == null) - { - YndNodePanel.Enabled = false; - PathNodeDeleteButton.Enabled = false; - PathNodeAddToProjectButton.Enabled = false; - PathNodeAreaIDUpDown.Value = 0; - PathNodeNodeIDUpDown.Value = 0; - PathNodePositionTextBox.Text = string.Empty; - PathNodeStreetHashTextBox.Text = string.Empty; - PathNodeStreetNameLabel.Text = "Name: [None]"; - - UpdatePathNodeFlagsUI(true, true); - - PathNodeLinkCountLabel.Text = "Link Count: 0"; - PathNodeLinksListBox.Items.Clear(); - - } - else - { - populatingui = true; - var n = CurrentPathNode.RawData; - YndNodePanel.Enabled = true; - PathNodeDeleteButton.Enabled = YndExistsInProject(CurrentYndFile); - PathNodeAddToProjectButton.Enabled = !PathNodeDeleteButton.Enabled; - var streetname = GlobalText.TryGetString(n.StreetName.Hash); - PathNodeAreaIDUpDown.Value = n.AreaID; - PathNodeNodeIDUpDown.Value = n.NodeID; - PathNodePositionTextBox.Text = FloatUtil.GetVector3String(CurrentPathNode.Position); - PathNodeStreetHashTextBox.Text = n.StreetName.Hash.ToString(); - PathNodeStreetNameLabel.Text = "Name: " + ((n.StreetName.Hash == 0) ? "[None]" : (string.IsNullOrEmpty(streetname) ? "[Not found]" : streetname)); - - UpdatePathNodeFlagsUI(true, true); - - PathNodeLinkCountLabel.Text = "Link Count: " + CurrentPathNode.LinkCount.ToString(); - PathNodeLinksListBox.Items.Clear(); - if (CurrentPathNode.Links != null) - { - foreach (var link in CurrentPathNode.Links) - { - PathNodeLinksListBox.Items.Add(link); - } - } - populatingui = false; - - - if (WorldForm != null) - { - WorldForm.SelectPathNode(CurrentPathNode); - } - - } - - - LoadPathNodeJunctionPage(); - - LoadPathNodeLinkPage(); - } - - private void LoadPathNodeLinkPage() - { - if (CurrentPathLink == null) - { - PathNodeLinkPanel.Enabled = false; - PathNodeLinkAreaIDUpDown.Value = 0; - PathNodeLinkNodeIDUpDown.Value = 0; - - UpdatePathNodeLinkFlagsUI(true, true); - - PathNodeLinkLengthUpDown.Value = 0; - PathNodeLinkageStatusLabel.Text = ""; - } - else - { - populatingui = true; - PathNodeLinkPanel.Enabled = true; - PathNodeLinkAreaIDUpDown.Value = CurrentPathLink._RawData.AreaID; - PathNodeLinkNodeIDUpDown.Value = CurrentPathLink._RawData.NodeID; - - UpdatePathNodeLinkFlagsUI(true, true); - - PathNodeLinkLengthUpDown.Value = CurrentPathLink.LinkLength.Value; - PathNodeLinkageStatusLabel.Text = ""; - populatingui = false; - - if (WorldForm != null) - { - WorldForm.SelectPathLink(CurrentPathLink); - } - } - - } - - private void LoadPathNodeJunctionPage() - { - - var junc = CurrentPathNode?.Junction; - if (junc == null) - { - PathNodeJunctionEnableCheckBox.Checked = false; - PathNodeJunctionPanel.Enabled = false; - PathNodeJunctionMaxZUpDown.Value = 0; - PathNodeJunctionMinZUpDown.Value = 0; - PathNodeJunctionPosXUpDown.Value = 0; - PathNodeJunctionPosYUpDown.Value = 0; - PathNodeJunctionHeightmapDimXUpDown.Value = 1; - PathNodeJunctionHeightmapDimYUpDown.Value = 1; - PathNodeJunctionHeightmapBytesTextBox.Text = string.Empty; - } - else - { - populatingui = true; - PathNodeJunctionEnableCheckBox.Checked = CurrentPathNode.HasJunction; - PathNodeJunctionPanel.Enabled = PathNodeJunctionEnableCheckBox.Checked; - PathNodeJunctionMaxZUpDown.Value = junc.MaxZ; - PathNodeJunctionMinZUpDown.Value = junc.MinZ; - PathNodeJunctionPosXUpDown.Value = junc.PositionX; - PathNodeJunctionPosYUpDown.Value = junc.PositionY; - PathNodeJunctionHeightmapDimXUpDown.Value = junc.Heightmap.CountX; - PathNodeJunctionHeightmapDimYUpDown.Value = junc.Heightmap.CountY; - PathNodeJunctionHeightmapBytesTextBox.Text = junc.Heightmap?.GetDataString() ?? ""; - populatingui = false; - } - - - } - - public bool IsCurrentPathNode(YndNode pathnode) - { - return CurrentPathNode == pathnode; - } - - - private void UpdatePathNodeFlagsUI(bool updateCheckboxes, bool updateUpDowns) - { - - var flags0 = CurrentPathNode?.Flags0.Value ?? 0; - var flags1 = CurrentPathNode?.Flags1.Value ?? 0; - var flags2 = CurrentPathNode?.Flags2.Value ?? 0; - var flags3 = CurrentPathNode?.Flags3.Value ?? 0; - var flags4 = CurrentPathNode?.Flags4.Value ?? 0; - var flags5 = (uint)(CurrentPathNode?.LinkCountUnk ?? 0); - - - if (updateCheckboxes) - { - PathNodeFlags01CheckBox.Checked = IsBitSet(flags0, 0); - PathNodeFlags02CheckBox.Checked = IsBitSet(flags0, 1); - PathNodeFlags03CheckBox.Checked = IsBitSet(flags0, 2); - PathNodeFlags04CheckBox.Checked = IsBitSet(flags0, 3); - PathNodeFlags05CheckBox.Checked = IsBitSet(flags0, 4); - PathNodeFlags06CheckBox.Checked = IsBitSet(flags0, 5); - PathNodeFlags07CheckBox.Checked = IsBitSet(flags0, 6); - PathNodeFlags08CheckBox.Checked = IsBitSet(flags0, 7); - - PathNodeFlags11CheckBox.Checked = IsBitSet(flags1, 0); - PathNodeFlags12CheckBox.Checked = IsBitSet(flags1, 1); - PathNodeFlags13CheckBox.Checked = IsBitSet(flags1, 2); - PathNodeFlags14CheckBox.Checked = IsBitSet(flags1, 3); - PathNodeFlags15CheckBox.Checked = IsBitSet(flags1, 4); - PathNodeFlags16CheckBox.Checked = IsBitSet(flags1, 5); - PathNodeFlags17CheckBox.Checked = IsBitSet(flags1, 6); - PathNodeFlags18CheckBox.Checked = IsBitSet(flags1, 7); - - PathNodeFlags21CheckBox.Checked = IsBitSet(flags2, 0); - PathNodeFlags22CheckBox.Checked = IsBitSet(flags2, 1); - PathNodeFlags23CheckBox.Checked = IsBitSet(flags2, 2); - PathNodeFlags24CheckBox.Checked = IsBitSet(flags2, 3); - PathNodeFlags25CheckBox.Checked = IsBitSet(flags2, 4); - PathNodeFlags26CheckBox.Checked = IsBitSet(flags2, 5); - PathNodeFlags27CheckBox.Checked = IsBitSet(flags2, 6); - PathNodeFlags28CheckBox.Checked = IsBitSet(flags2, 7); - - PathNodeFlags31CheckBox.Checked = IsBitSet(flags3, 0); - PathNodeFlags32UpDown.Value = (flags3 >> 1) & 127; - - PathNodeFlags41CheckBox.Checked = IsBitSet(flags4, 0); - PathNodeFlags42UpDown.Value = (flags4 >> 1) & 7; - PathNodeFlags45CheckBox.Checked = IsBitSet(flags4, 4); - PathNodeFlags46CheckBox.Checked = IsBitSet(flags4, 5); - PathNodeFlags47CheckBox.Checked = IsBitSet(flags4, 6); - PathNodeFlags48CheckBox.Checked = IsBitSet(flags4, 7); - - PathNodeFlags51CheckBox.Checked = IsBitSet(flags5, 0); - PathNodeFlags52CheckBox.Checked = IsBitSet(flags5, 1); - PathNodeFlags53CheckBox.Checked = IsBitSet(flags5, 2); - } - if (updateUpDowns) - { - PathNodeFlags0UpDown.Value = flags0; - PathNodeFlags1UpDown.Value = flags1; - PathNodeFlags2UpDown.Value = flags2; - PathNodeFlags3UpDown.Value = flags3; - PathNodeFlags4UpDown.Value = flags4; - PathNodeFlags5UpDown.Value = flags5; - } - - var n = CurrentPathNode; - if (n != null) - { - PathNodeFlags0Label.Text = n.Flags0.ToHexString(); - PathNodeFlags1Label.Text = n.Flags1.ToHexString(); - PathNodeFlags2Label.Text = n.Flags2.ToHexString(); - PathNodeFlags3Label.Text = n.Flags3.ToHexString(); - PathNodeFlags4Label.Text = n.Flags4.ToHexString(); - } - else - { - PathNodeFlags0Label.Text = "0x00"; - PathNodeFlags1Label.Text = "0x00"; - PathNodeFlags2Label.Text = "0x00"; - PathNodeFlags3Label.Text = "0x00"; - PathNodeFlags4Label.Text = "0x00"; - } - } - - private void SetPathNodeFlagsFromCheckBoxes() - { - if (populatingui) return; - if (CurrentPathNode == null) return; - - uint flags0 = 0; - uint flags1 = 0; - uint flags2 = 0; - uint flags3 = 0; - uint flags4 = 0; - uint flags5 = 0; - flags0 = UpdateBit(flags0, 0, PathNodeFlags01CheckBox.Checked); - flags0 = UpdateBit(flags0, 1, PathNodeFlags02CheckBox.Checked); - flags0 = UpdateBit(flags0, 2, PathNodeFlags03CheckBox.Checked); - flags0 = UpdateBit(flags0, 3, PathNodeFlags04CheckBox.Checked); - flags0 = UpdateBit(flags0, 4, PathNodeFlags05CheckBox.Checked); - flags0 = UpdateBit(flags0, 5, PathNodeFlags06CheckBox.Checked); - flags0 = UpdateBit(flags0, 6, PathNodeFlags07CheckBox.Checked); - flags0 = UpdateBit(flags0, 7, PathNodeFlags08CheckBox.Checked); - - flags1 = UpdateBit(flags1, 0, PathNodeFlags11CheckBox.Checked); - flags1 = UpdateBit(flags1, 1, PathNodeFlags12CheckBox.Checked); - flags1 = UpdateBit(flags1, 2, PathNodeFlags13CheckBox.Checked); - flags1 = UpdateBit(flags1, 3, PathNodeFlags14CheckBox.Checked); - flags1 = UpdateBit(flags1, 4, PathNodeFlags15CheckBox.Checked); - flags1 = UpdateBit(flags1, 5, PathNodeFlags16CheckBox.Checked); - flags1 = UpdateBit(flags1, 6, PathNodeFlags17CheckBox.Checked); - flags1 = UpdateBit(flags1, 7, PathNodeFlags18CheckBox.Checked); - - flags2 = UpdateBit(flags2, 0, PathNodeFlags21CheckBox.Checked); - flags2 = UpdateBit(flags2, 1, PathNodeFlags22CheckBox.Checked); - flags2 = UpdateBit(flags2, 2, PathNodeFlags23CheckBox.Checked); - flags2 = UpdateBit(flags2, 3, PathNodeFlags24CheckBox.Checked); - flags2 = UpdateBit(flags2, 4, PathNodeFlags25CheckBox.Checked); - flags2 = UpdateBit(flags2, 5, PathNodeFlags26CheckBox.Checked); - flags2 = UpdateBit(flags2, 6, PathNodeFlags27CheckBox.Checked); - flags2 = UpdateBit(flags2, 7, PathNodeFlags28CheckBox.Checked); - - flags3 = UpdateBit(flags3, 0, PathNodeFlags31CheckBox.Checked); - flags3 += (((uint)PathNodeFlags32UpDown.Value & 127u) << 1); - - flags4 = UpdateBit(flags4, 0, PathNodeFlags41CheckBox.Checked); - flags4 += (((uint)PathNodeFlags42UpDown.Value & 7u) << 1); - flags4 = UpdateBit(flags4, 4, PathNodeFlags45CheckBox.Checked); - flags4 = UpdateBit(flags4, 5, PathNodeFlags46CheckBox.Checked); - flags4 = UpdateBit(flags4, 6, PathNodeFlags47CheckBox.Checked); - flags4 = UpdateBit(flags4, 7, PathNodeFlags48CheckBox.Checked); - - flags5 = UpdateBit(flags5, 0, PathNodeFlags51CheckBox.Checked); - flags5 = UpdateBit(flags5, 1, PathNodeFlags52CheckBox.Checked); - flags5 = UpdateBit(flags5, 2, PathNodeFlags53CheckBox.Checked); - - - lock (yndsyncroot) - { - if (CurrentPathNode.Flags0.Value != flags0) - { - CurrentPathNode.Flags0 = (byte)flags0; - SetYndHasChanged(true); - } - if (CurrentPathNode.Flags1.Value != flags1) - { - CurrentPathNode.Flags1 = (byte)flags1; - SetYndHasChanged(true); - } - if (CurrentPathNode.Flags2.Value != flags2) - { - CurrentPathNode.Flags2 = (byte)flags2; - SetYndHasChanged(true); - } - if (CurrentPathNode.Flags3.Value != flags3) - { - CurrentPathNode.Flags3 = (byte)flags3; - SetYndHasChanged(true); - } - if (CurrentPathNode.Flags4.Value != flags4) - { - CurrentPathNode.Flags4 = (byte)flags4; - SetYndHasChanged(true); - } - if (CurrentPathNode.LinkCountUnk != flags5) - { - CurrentPathNode.LinkCountUnk = (byte)flags5; - SetYndHasChanged(true); - } - } - - populatingui = true; - UpdatePathNodeFlagsUI(false, true); //update updowns - populatingui = false; - } - - private void SetPathNodeFlagsFromUpDowns() - { - if (populatingui) return; - if (CurrentPathNode == null) return; - - uint flags0 = (uint)PathNodeFlags0UpDown.Value; - uint flags1 = (uint)PathNodeFlags1UpDown.Value; - uint flags2 = (uint)PathNodeFlags2UpDown.Value; - uint flags3 = (uint)PathNodeFlags3UpDown.Value; - uint flags4 = (uint)PathNodeFlags4UpDown.Value; - uint flags5 = (uint)PathNodeFlags5UpDown.Value; - - lock (yndsyncroot) - { - if (CurrentPathNode.Flags0.Value != flags0) - { - CurrentPathNode.Flags0 = (byte)flags0; - SetYndHasChanged(true); - } - if (CurrentPathNode.Flags1.Value != flags1) - { - CurrentPathNode.Flags1 = (byte)flags1; - SetYndHasChanged(true); - } - if (CurrentPathNode.Flags2.Value != flags2) - { - CurrentPathNode.Flags2 = (byte)flags2; - SetYndHasChanged(true); - } - if (CurrentPathNode.Flags3.Value != flags3) - { - CurrentPathNode.Flags3 = (byte)flags3; - SetYndHasChanged(true); - } - if (CurrentPathNode.Flags4.Value != flags4) - { - CurrentPathNode.Flags4 = (byte)flags4; - SetYndHasChanged(true); - } - if (CurrentPathNode.LinkCountUnk != flags5) - { - CurrentPathNode.LinkCountUnk = (byte)flags5; - SetYndHasChanged(true); - } - } - - populatingui = true; - UpdatePathNodeFlagsUI(true, false); //update checkboxes - populatingui = false; - } - - - private void UpdatePathNodeLinkFlagsUI(bool updateCheckboxes, bool updateUpDowns) - { - var flags0 = CurrentPathLink?.Flags0.Value ?? 0; - var flags1 = CurrentPathLink?.Flags1.Value ?? 0; - var flags2 = CurrentPathLink?.Flags2.Value ?? 0; - - - if (updateCheckboxes) - { - PathNodeLinkFlags01CheckBox.Checked = IsBitSet(flags0, 0); - PathNodeLinkFlags02CheckBox.Checked = IsBitSet(flags0, 1); - PathNodeLinkFlags03UpDown.Value = (flags0 >> 2) & 7; - PathNodeLinkFlags04UpDown.Value = (flags0 >> 5) & 7; - - PathNodeLinkFlags11CheckBox.Checked = IsBitSet(flags1, 0); - PathNodeLinkFlags12CheckBox.Checked = IsBitSet(flags1, 1); - PathNodeLinkFlags13CheckBox.Checked = IsBitSet(flags1, 2); - PathNodeLinkFlags14CheckBox.Checked = IsBitSet(flags1, 3); - PathNodeLinkOffsetSizeUpDown.Value = (flags1 >> 4) & 7; - PathNodeLinkFlags18CheckBox.Checked = IsBitSet(flags1, 7); - - PathNodeLinkFlags21CheckBox.Checked = IsBitSet(flags2, 0); - PathNodeLinkFlags22CheckBox.Checked = IsBitSet(flags2, 1); - PathNodeLinkBackLanesUpDown.Value = (flags2 >> 2) & 7; - PathNodeLinkFwdLanesUpDown.Value = (flags2 >> 5) & 7; - } - if (updateUpDowns) - { - PathNodeLinkFlags0UpDown.Value = flags0; - PathNodeLinkFlags1UpDown.Value = flags1; - PathNodeLinkFlags2UpDown.Value = flags2; - } - - var l = CurrentPathLink; - if (l != null) - { - PathNodeLinkFlags0Label.Text = l.Flags0.ToHexString(); - PathNodeLinkFlags1Label.Text = l.Flags1.ToHexString(); - PathNodeLinkFlags2Label.Text = l.Flags2.ToHexString(); - } - else - { - PathNodeLinkFlags0Label.Text = "0x00"; - PathNodeLinkFlags1Label.Text = "0x00"; - PathNodeLinkFlags2Label.Text = "0x00"; - } - } - - private void SetPathNodeLinkFlagsFromCheckBoxes() - { - if (populatingui) return; - if (CurrentPathLink == null) return; - - uint flags0 = 0; - uint flags1 = 0; - uint flags2 = 0; - flags0 = UpdateBit(flags0, 0, PathNodeLinkFlags01CheckBox.Checked); - flags0 = UpdateBit(flags0, 1, PathNodeLinkFlags02CheckBox.Checked); - flags0 += (((uint)PathNodeLinkFlags03UpDown.Value & 7u) << 2); - flags0 += (((uint)PathNodeLinkFlags04UpDown.Value & 7u) << 5); - - flags1 = UpdateBit(flags1, 0, PathNodeLinkFlags11CheckBox.Checked); - flags1 = UpdateBit(flags1, 1, PathNodeLinkFlags12CheckBox.Checked); - flags1 = UpdateBit(flags1, 2, PathNodeLinkFlags13CheckBox.Checked); - flags1 = UpdateBit(flags1, 3, PathNodeLinkFlags14CheckBox.Checked); - flags1 += (((uint)PathNodeLinkOffsetSizeUpDown.Value & 7u) << 4); - flags1 = UpdateBit(flags1, 7, PathNodeLinkFlags18CheckBox.Checked); - - flags2 = UpdateBit(flags2, 0, PathNodeLinkFlags21CheckBox.Checked); - flags2 = UpdateBit(flags2, 1, PathNodeLinkFlags22CheckBox.Checked); - flags2 += (((uint)PathNodeLinkBackLanesUpDown.Value & 7u) << 2); - flags2 += (((uint)PathNodeLinkFwdLanesUpDown.Value & 7u) << 5); - - bool updgfx = false; - lock (yndsyncroot) - { - if (CurrentPathLink.Flags0.Value != flags0) - { - CurrentPathLink.Flags0 = (byte)flags0; - SetYndHasChanged(true); - } - if (CurrentPathLink.Flags1.Value != flags1) - { - CurrentPathLink.Flags1 = (byte)flags1; - SetYndHasChanged(true); - updgfx = true; - } - if (CurrentPathLink.Flags2.Value != flags2) - { - CurrentPathLink.Flags2 = (byte)flags2; - SetYndHasChanged(true); - updgfx = true; - } - } - - populatingui = true; - UpdatePathNodeLinkFlagsUI(false, true); //update updowns - populatingui = false; - - if (updgfx && (WorldForm != null) && (CurrentYndFile != null)) - { - WorldForm.UpdatePathYndGraphics(CurrentYndFile, false); - } - } - - private void SetPathNodeLinkFlagsFromUpDowns() - { - if (populatingui) return; - if (CurrentPathLink == null) return; - - uint flags0 = (uint)PathNodeLinkFlags0UpDown.Value; - uint flags1 = (uint)PathNodeLinkFlags1UpDown.Value; - uint flags2 = (uint)PathNodeLinkFlags2UpDown.Value; - - bool updgfx = false; - lock (yndsyncroot) - { - if (CurrentPathLink.Flags0.Value != flags0) - { - CurrentPathLink.Flags0 = (byte)flags0; - SetYndHasChanged(true); - } - if (CurrentPathLink.Flags1.Value != flags1) - { - CurrentPathLink.Flags1 = (byte)flags1; - SetYndHasChanged(true); - } - if (CurrentPathLink.Flags2.Value != flags2) - { - CurrentPathLink.Flags2 = (byte)flags2; - SetYndHasChanged(true); - updgfx = true; - } - } - - populatingui = true; - UpdatePathNodeLinkFlagsUI(true, false); //update checkboxes - populatingui = false; - - if (updgfx && (WorldForm != null) && (CurrentYndFile != null)) - { - WorldForm.UpdatePathYndGraphics(CurrentYndFile, false); - } - } - - - - private void AddPathLink() - { - if (CurrentPathNode == null) return; - - var l = CurrentPathNode.AddLink(); - - LoadPathNodeTabPage(); - - PathNodeLinksListBox.SelectedItem = l; - - if (WorldForm != null) - { - WorldForm.UpdatePathNodeGraphics(CurrentPathNode, false); - } - } - - private void RemovePathLink() - { - if (CurrentPathLink == null) return; - if (CurrentPathNode == null) return; - - var r = CurrentPathNode.RemoveLink(CurrentPathLink); - - if (!r) return; - - LoadPathNodeTabPage(); - - if (WorldForm != null) - { - WorldForm.UpdatePathNodeGraphics(CurrentPathNode, false); - } - } - - private void UpdatePathNodeLinkage() - { - if (CurrentPathLink == null) return; - if (CurrentYndFile == null) return; - - YndNode linknode = null; - ushort areaid = CurrentPathLink._RawData.AreaID; - ushort nodeid = CurrentPathLink._RawData.NodeID; - if (areaid == CurrentYndFile.AreaID) - { - //link to the same ynd. find the new node in the current ynd. - if ((CurrentYndFile.Nodes != null) && (nodeid < CurrentYndFile.Nodes.Length)) - { - linknode = CurrentYndFile.Nodes[nodeid]; - } - } - else - { - //try lookup the link node from the space. - if (WorldForm != null) - { - linknode = WorldForm.GetPathNodeFromSpace(areaid, nodeid); - } - } - - if (linknode == null) - { - PathNodeLinkageStatusLabel.Text = "Unable to find node " + areaid.ToString() + ":" + nodeid.ToString() + "."; - } - else - { - PathNodeLinkageStatusLabel.Text = ""; - } - - CurrentPathLink.Node2 = linknode; - CurrentPathLink.UpdateLength(); - - - ////need to rebuild the link verts.. updating the graphics should do it... - if (WorldForm != null) - { - WorldForm.UpdatePathYndGraphics(CurrentYndFile, false); - } - } - - - - - - - - - - - - public void NewYnv()//TODO! - { - } - - public void OpenYnv()//TODO! - { - } - - public void SaveYnv(bool saveas = false)//TODO! - { - } - - private void AddYnvToProject(YnvFile ynv)//TODO! - { - } - - private void RemoveYnvFromProject()//TODO! - { - } - - private void LoadYnvTabPage()//TODO! - { - } - - private void LoadYnvFromFile(YnvFile ynv, string filename)//TODO! - { - } - - private void LoadYnvTreeNodes(YnvFile ynv, TreeNode node)//TODO! - { - } - - private void SetYnvHasChanged(bool changed)//TODO! - { - } - - private void SetYnvHasChangedUI(bool changed)//TODO! - { - } - - - public void NewNavPoly(YnvPoly copy = null, bool copyposition = false)//TODO! - { - } - - public bool DeleteNavPoly()//TODO! - { - return false; - } - - private void AddNavPolyToProject()//TODO! - { - } - - private void LoadNavPolyTabPage()//TODO! - { - } - - public bool IsCurrentNavPoly(YnvPoly poly) - { - return poly == CurrentNavPoly; - } - - - - - - - - - - - - public void NewTrainTrack() - { - if (CurrentProjectFile == null) - { - NewProject(); - } - if (CurrentProjectFile == null) return; - - int testi = 13; - string fname = string.Empty; - bool filenameok = false; - while (!filenameok) - { - fname = "trains" + testi.ToString() + ".dat"; - filenameok = !CurrentProjectFile.ContainsTrainTrack(fname); - testi++; - } - - lock (trainsyncroot) - { - TrainTrack track = CurrentProjectFile.AddTrainsFile(fname); - if (track != null) - { - track.Loaded = true; - track.HasChanged = true; //new track, flag as not saved - - //TODO: set new train track default values... - - } - } - - CurrentProjectFile.HasChanged = true; - - LoadProjectTree(); - } - - public void OpenTrainTrack() - { - string[] files = ShowOpenDialogMulti("Dat files|*.dat", string.Empty); - if (files == null) - { - return; - } - - if (CurrentProjectFile == null) - { - NewProject(); - } - - foreach (string file in files) - { - if (!File.Exists(file)) continue; - - var track = CurrentProjectFile.AddTrainsFile(file); - - if (track != null) - { - SetProjectHasChanged(true); - - LoadTrainTrackFromFile(track, file); - - LoadProjectTree(); - } - else - { - MessageBox.Show("Couldn't add\n" + file + "\n - the file already exists in the project."); - } - - } - } - - public void SaveTrainTrack(bool saveas = false) - { - if ((CurrentTrainTrack == null) && (CurrentTrainNode != null)) CurrentTrainTrack = CurrentTrainNode.Track; - if (CurrentTrainTrack == null) return; - string trackname = CurrentTrainTrack.Name; - string filepath = CurrentTrainTrack.FilePath; - if (string.IsNullOrEmpty(filepath)) - { - filepath = trackname; - } - string origfile = filepath; - if (!File.Exists(filepath)) - { - saveas = true; - } - - - byte[] data; - lock (trainsyncroot) //need to sync writes to ynd objects... - { - saveas = saveas || string.IsNullOrEmpty(filepath); - if (saveas) - { - filepath = ShowSaveDialog("Dat files|*.dat", filepath); - if (string.IsNullOrEmpty(filepath)) - { return; } - - string newname = Path.GetFileNameWithoutExtension(filepath); - //JenkIndex.Ensure(newname); - CurrentTrainTrack.FilePath = filepath; - CurrentTrainTrack.RpfFileEntry.Name = new FileInfo(filepath).Name; - CurrentTrainTrack.Name = CurrentTrainTrack.RpfFileEntry.Name; - } - - - data = CurrentTrainTrack.Save(); - } - - - if (data != null) - { - File.WriteAllBytes(filepath, data); - } - - SetTrainTrackHasChanged(false); - - if (saveas) - { - LoadTrainTrackTabPage(); - if (CurrentProjectFile != null) - { - string origpath = CurrentProjectFile.GetRelativePath(origfile); - string newpath = CurrentProjectFile.GetRelativePath(CurrentTrainTrack.FilePath); - if (!CurrentProjectFile.RenameTrainTrack(origpath, newpath)) - { //couldn't rename it in the project? happens when project not saved yet... - //MessageBox.Show("Couldn't rename train track in project! This shouldn't happen - check the project file XML."); - } - } - SetProjectHasChanged(true); - SetCurrentSaveItem(); - } - - } - - private void AddTrainTrackToProject(TrainTrack track) - { - if (track == null) return; - if (CurrentProjectFile == null) - { - NewProject(); - } - if (TrainTrackExistsInProject(track)) return; - if (CurrentProjectFile.AddTrainsFile(track)) - { - track.HasChanged = true; - CurrentProjectFile.HasChanged = true; - LoadProjectTree(); - } - CurrentTrainTrack = track; - RefreshUI(); - if (CurrentTrainNode != null) - { - TrySelectTrainNodeTreeNode(CurrentTrainNode); - } - } - - private void RemoveTrainTrackFromProject() - { - if (CurrentTrainTrack == null) return; - if (CurrentProjectFile == null) return; - CurrentProjectFile.RemoveTrainsFile(CurrentTrainTrack); - CurrentTrainTrack = null; - LoadProjectTree(); - RefreshUI(); - } - - private void LoadTrainTrackTabPage() - { - if (CurrentTrainTrack == null) - { - TrainTrackFilePanel.Enabled = false; - TrainTrackFilenameTextBox.Text = string.Empty; - TrainTrackConfigNameTextBox.Text = string.Empty; - TrainTrackIsPingPongCheckBox.Checked = false; - TrainTrackStopsAtStationsCheckBox.Checked = false; - TrainTrackMPStopsAtStationsCheckBox.Checked = false; - TrainTrackSpeedTextBox.Text = string.Empty; - TrainTrackBrakingDistTextBox.Text = string.Empty; - TrainTrackRpfPathTextBox.Text = string.Empty; - TrainTrackFilePathTextBox.Text = string.Empty; - TrainTrackProjectPathTextBox.Text = string.Empty; - TrainTrackInfoLabel.Text = string.Empty; - } - else - { - populatingui = true; - TrainTrackFilePanel.Enabled = true; - TrainTrackFilenameTextBox.Text = CurrentTrainTrack.filename; - TrainTrackConfigNameTextBox.Text = CurrentTrainTrack.trainConfigName; - TrainTrackIsPingPongCheckBox.Checked = CurrentTrainTrack.isPingPongTrack; - TrainTrackStopsAtStationsCheckBox.Checked = CurrentTrainTrack.stopsAtStations; - TrainTrackMPStopsAtStationsCheckBox.Checked = CurrentTrainTrack.MPstopsAtStations; - TrainTrackSpeedTextBox.Text = FloatUtil.ToString(CurrentTrainTrack.speed); - TrainTrackBrakingDistTextBox.Text = FloatUtil.ToString(CurrentTrainTrack.brakingDist); - TrainTrackRpfPathTextBox.Text = CurrentTrainTrack.RpfFileEntry?.Path ?? string.Empty; - TrainTrackFilePathTextBox.Text = string.Empty; //todo - TrainTrackProjectPathTextBox.Text = string.Empty; //todo - TrainTrackInfoLabel.Text = CurrentTrainTrack.StationCount.ToString() + " stations"; - populatingui = false; - } - } - - private void LoadTrainTrackFromFile(TrainTrack track, string filename) - { - byte[] data = File.ReadAllBytes(filename); - - string fname = new FileInfo(filename).Name; - - track.Load(data); - - track.Name = fname; - track.FilePath = filename; - track.RpfFileEntry.Name = fname; - track.RpfFileEntry.NameLower = fname.ToLowerInvariant(); - - - if (WorldForm != null) - { - WorldForm.UpdateTrainTrackGraphics(track, true); //links don't get drawn until something changes otherwise - } - } - - private void LoadTrainTrackTreeNodes(TrainTrack track, TreeNode node) - { - if (track == null) return; - - if (!string.IsNullOrEmpty(node.Name)) return; //named nodes are eg Nodes - - node.Nodes.Clear(); - - - - if ((track.Nodes != null) && (track.Nodes.Count > 0)) - { - var nodesnode = node.Nodes.Add("Nodes (" + track.Nodes.Count.ToString() + ")"); - nodesnode.Name = "Nodes"; - nodesnode.Tag = track; - var nodes = track.Nodes; - for (int i = 0; i < nodes.Count; i++) - { - var ynode = nodes[i]; - var tnode = nodesnode.Nodes.Add(ynode.ToString()); - tnode.Tag = ynode; - } - } - - } - - private void SetTrainTrackHasChanged(bool changed) - { - if (CurrentTrainTrack == null) return; - - bool changechange = changed != CurrentTrainTrack.HasChanged; - if (!changechange) return; - - CurrentTrainTrack.HasChanged = changed; - - SetTrainTrackHasChangedUI(changed); - } - - private void SetTrainTrackHasChangedUI(bool changed) - { - if (ProjectTreeView.Nodes.Count > 0) - { - var pnode = ProjectTreeView.Nodes[0]; - var trnode = GetChildTreeNode(pnode, "Trains"); - if (trnode == null) return; - string changestr = changed ? "*" : ""; - for (int i = 0; i < trnode.Nodes.Count; i++) - { - var tnode = trnode.Nodes[i]; - if (tnode.Tag == CurrentTrainTrack) - { - string name = CurrentTrainTrack.Name; - if (CurrentTrainTrack.RpfFileEntry != null) - { - name = CurrentTrainTrack.RpfFileEntry.Name; - } - tnode.Text = changestr + name; - break; - } - } - } - } - - - - public void NewTrainNode(TrainTrackNode copy = null, bool copyPosition = false) - { - if (CurrentTrainTrack == null) return; - - var afternode = copyPosition ? copy : null; - - var n = CurrentTrainTrack.AddNode(afternode); - if (copy == null) - { - copy = CurrentTrainNode; - } - if (copy != null) - { - n.NodeType = copy.NodeType; - } - - bool cp = copyPosition && (copy != null); - Vector3 pos = cp ? copy.Position : GetSpawnPos(10.0f); - n.SetPosition(pos); - - - //CurrentTrainTrack.BuildVertices(); //for the graphics... - CurrentTrainTrack.BuildBVH(); - - - LoadProjectTree(); - - TrySelectTrainNodeTreeNode(n); - CurrentTrainNode = n; - LoadTrainNodeTabPage(); - - - if (WorldForm != null) - { - WorldForm.UpdateTrainTrackGraphics(CurrentTrainTrack, false); - } - } - - public bool DeleteTrainNode() - { - if (CurrentTrainTrack == null) return false; - if (CurrentTrainNode == null) return false; - if (CurrentTrainNode.Track != CurrentTrainTrack) return false; - if (CurrentTrainTrack.Nodes == null) return false; //nothing to delete.. - - if (MessageBox.Show("Are you sure you want to delete this train track node?\n" + CurrentTrainNode.ToString() + "\n\nThis operation cannot be undone. Continue?", "Confirm delete", MessageBoxButtons.YesNo) != DialogResult.Yes) - { - return true; - } - - //find this now to remove it later. - var tn = FindTrainNodeTreeNode(CurrentTrainNode); - - bool res = false; - if (WorldForm != null) - { - lock (WorldForm.RenderSyncRoot) //don't try to do this while rendering... - { - res = CurrentTrainTrack.RemoveNode(CurrentTrainNode); - - //WorldForm.SelectItem(null, null, null); - } - } - else - { - res = CurrentTrainTrack.RemoveNode(CurrentTrainNode); - } - if (!res) - { - MessageBox.Show("Unable to delete the train track node. This shouldn't happen!"); - } - - SetTrainTrackHasChangedUI(true); - - CurrentTrainNode = null; - if ((tn != null) && (tn.Parent != null)) - { - tn.Parent.Text = "Nodes (" + CurrentTrainTrack.Nodes.Count.ToString() + ")"; - tn.Parent.Nodes.Remove(tn); - } - else - { - //no need for this when removing the node above will select something else. - LoadTrainNodeTabPage(); //this case really shouldn't happen... - } - - if (WorldForm != null) - { - WorldForm.UpdateTrainTrackGraphics(CurrentTrainTrack, false); - } - - - return true; - } - - private void AddTrainNodeToProject() - { - if (CurrentTrainNode == null) return; - if (CurrentTrainTrack != null) - { - AddTrainTrackToProject(CurrentTrainTrack); - } - } - - private void LoadTrainNodeTabPage() - { - if (CurrentTrainNode == null) - { - TrainNodePanel.Enabled = false; - TrainNodeDeleteButton.Enabled = false; - TrainNodeAddToProjectButton.Enabled = false; - TrainNodePositionTextBox.Text = string.Empty; - TrainNodeTypeComboBox.SelectedIndex = -1; - } - else - { - populatingui = true; - TrainNodePanel.Enabled = true; - TrainNodeDeleteButton.Enabled = TrainTrackExistsInProject(CurrentTrainTrack); - TrainNodeAddToProjectButton.Enabled = !TrainNodeDeleteButton.Enabled; - TrainNodePositionTextBox.Text = FloatUtil.GetVector3String(CurrentTrainNode.Position); - TrainNodeTypeComboBox.SelectedIndex = CurrentTrainNode.NodeType; - populatingui = false; - - if (WorldForm != null) - { - WorldForm.SelectTrainTrackNode(CurrentTrainNode); - } - } - } - - public bool IsCurrentTrainNode(TrainTrackNode node) - { - return node == CurrentTrainNode; - } - - - - - - - - - - - - - - - - - - public void NewScenario() - { - if (CurrentProjectFile == null) - { - NewProject(); - } - if (CurrentProjectFile == null) return; - - int testi = 1; - string fname = string.Empty; - bool filenameok = false; - while (!filenameok) - { - fname = "scenario" + testi.ToString() + ".ymt"; - filenameok = !CurrentProjectFile.ContainsScenario(fname); - testi++; - } - - lock (scenariosyncroot) - { - YmtFile ymt = CurrentProjectFile.AddScenarioFile(fname); - if (ymt != null) - { - ymt.CScenarioPointRegion = new MCScenarioPointRegion(); - ymt.CScenarioPointRegion.Ymt = ymt; - ymt.CScenarioPointRegion.Points = new MCScenarioPointContainer(ymt.CScenarioPointRegion); - ymt.CScenarioPointRegion.Paths = new MUnk_4023740759(ymt.CScenarioPointRegion); - ymt.CScenarioPointRegion.LookUps = new MCScenarioPointLookUps(ymt.CScenarioPointRegion); - - ymt.ScenarioRegion = new ScenarioRegion(); - ymt.ScenarioRegion.Region = ymt.CScenarioPointRegion; - ymt.ScenarioRegion.Ymt = ymt; - - ymt.ScenarioRegion.BuildNodes(); //should be empty - ymt.ScenarioRegion.BuildBVH(); //should be empty - ymt.ScenarioRegion.BuildVertices(); //should be empty - - ymt.HasChanged = true; //new ymt, flag as not saved - ymt.Loaded = true; - } - } - - CurrentProjectFile.HasChanged = true; - - LoadProjectTree(); - } - - public void OpenScenario() - { - string[] files = ShowOpenDialogMulti("Ymt files|*.ymt", string.Empty); - if (files == null) - { - return; - } - - if (CurrentProjectFile == null) - { - NewProject(); - } - - foreach (string file in files) - { - if (!File.Exists(file)) continue; - - var ymt = CurrentProjectFile.AddScenarioFile(file); - - if (ymt != null) - { - SetProjectHasChanged(true); - - LoadScenarioFromFile(ymt, file); - - LoadProjectTree(); - } - else - { - MessageBox.Show("Couldn't add\n" + file + "\n - the file already exists in the project."); - } - - } - } - - public void SaveScenario(bool saveas = false) - { - if ((CurrentScenario == null) && (CurrentScenarioNode != null)) CurrentScenario = CurrentScenarioNode.Ymt; - if (CurrentScenario == null) return; - string ymtname = CurrentScenario.Name; - string filepath = CurrentScenario.FilePath; - if (string.IsNullOrEmpty(filepath)) - { - filepath = ymtname; - } - string origfile = filepath; - if (!File.Exists(filepath)) - { - saveas = true; - } - - - byte[] data; - lock (scenariosyncroot) //need to sync writes to scenario... - { - saveas = saveas || string.IsNullOrEmpty(filepath); - if (saveas) - { - filepath = ShowSaveDialog("Ymt files|*.ymt", filepath); - if (string.IsNullOrEmpty(filepath)) - { return; } - - string newname = Path.GetFileNameWithoutExtension(filepath); - JenkIndex.Ensure(newname); - CurrentScenario.FilePath = filepath; - CurrentScenario.RpfFileEntry.Name = new FileInfo(filepath).Name; - CurrentScenario.Name = CurrentScenario.RpfFileEntry.Name; - } - - - CurrentScenario.ContentType = YmtFileContentType.ScenarioPointRegion;//just to be sure.. - - data = CurrentScenario.Save(); - } - - - if (data != null) - { - File.WriteAllBytes(filepath, data); - } - - SetScenarioHasChanged(false); - - if (saveas) - { - LoadScenarioTabPage(); - if (CurrentProjectFile != null) - { - string origpath = CurrentProjectFile.GetRelativePath(origfile); - string newpath = CurrentProjectFile.GetRelativePath(CurrentScenario.FilePath); - if (!CurrentProjectFile.RenameScenario(origpath, newpath)) - { //couldn't rename it in the project? happens when project not saved yet... - //MessageBox.Show("Couldn't rename scenario in project! This shouldn't happen - check the project file XML."); - } - } - SetProjectHasChanged(true); - SetCurrentSaveItem(); - } - } - - private void AddScenarioToProject(YmtFile ymt) - { - if (ymt == null) return; - if (CurrentProjectFile == null) - { - NewProject(); - } - if (ScenarioExistsInProject(ymt)) return; - if (CurrentProjectFile.AddScenarioFile(ymt)) - { - ymt.HasChanged = true; - CurrentProjectFile.HasChanged = true; - LoadProjectTree(); - } - CurrentScenario = ymt; - RefreshUI(); - if (CurrentScenarioNode != null) - { - TrySelectScenarioNodeTreeNode(CurrentScenarioNode); - } - } - - private void RemoveScenarioFromProject() - { - if (CurrentScenario == null) return; - if (CurrentProjectFile == null) return; - CurrentProjectFile.RemoveScenarioFile(CurrentScenario); - CurrentScenario = null; - LoadProjectTree(); - RefreshUI(); - } - - private void LoadScenarioTabPage() - { - if (CurrentScenario == null) - { - populatingui = true; - ScenarioYmtPanel.Enabled = false; - ScenarioYmtNameTextBox.Text = string.Empty; - ScenarioYmtVersionTextBox.Text = string.Empty; - ScenarioYmtGridMinTextBox.Text = string.Empty; - ScenarioYmtGridMaxTextBox.Text = string.Empty; - ScenarioYmtGridScaleTextBox.Text = string.Empty; - ScenarioYmtGridInfoLabel.Text = "Total grid points: 0"; - ScenarioYmtExtentsMinTextBox.Text = string.Empty; - ScenarioYmtExtentsMaxTextBox.Text = string.Empty; - ScenarioYmtFileLocationTextBox.Text = string.Empty; - ScenarioYmtProjectPathTextBox.Text = string.Empty; - populatingui = false; - } - else - { - var rgn = CurrentScenario.CScenarioPointRegion; - var accg = rgn?._Data.AccelGrid ?? new rage__spdGrid2D(); - var bvh = CurrentScenario.ScenarioRegion?.BVH; - var emin = bvh?.Box.Minimum ?? Vector3.Zero; - var emax = bvh?.Box.Maximum ?? Vector3.Zero; - - populatingui = true; - ScenarioYmtPanel.Enabled = true; - ScenarioYmtNameTextBox.Text = CurrentScenario.Name; - ScenarioYmtVersionTextBox.Text = rgn?.VersionNumber.ToString() ?? ""; - ScenarioYmtGridMinTextBox.Text = FloatUtil.GetVector2String(accg.Min); - ScenarioYmtGridMaxTextBox.Text = FloatUtil.GetVector2String(accg.Max); - ScenarioYmtGridScaleTextBox.Text = FloatUtil.GetVector2String(accg.Scale); - ScenarioYmtGridInfoLabel.Text = "Total grid points: " + (rgn?.Unk_3844724227?.Length ?? 0).ToString(); - ScenarioYmtExtentsMinTextBox.Text = FloatUtil.GetVector3String(emin); - ScenarioYmtExtentsMaxTextBox.Text = FloatUtil.GetVector3String(emax); - ScenarioYmtFileLocationTextBox.Text = CurrentScenario.RpfFileEntry?.Path ?? ""; - ScenarioYmtProjectPathTextBox.Text = (CurrentProjectFile != null) ? CurrentProjectFile.GetRelativePath(CurrentScenario.FilePath) : CurrentScenario.FilePath; - populatingui = false; - } - } - - private void LoadScenarioFromFile(YmtFile ymt, string filename) - { - byte[] data = File.ReadAllBytes(filename); - - ymt.Load(data); - } - - private void LoadScenarioTreeNodes(YmtFile ymt, TreeNode node) - { - if (!string.IsNullOrEmpty(node.Name)) return; //named nodes are eg Points - - node.Nodes.Clear(); - - var region = ymt?.ScenarioRegion; - - if (region == null) return; - - var nodes = region.Nodes; - if ((nodes == null) || (nodes.Count == 0)) return; - - var pointsnode = node.Nodes.Add("Points (" + nodes.Count.ToString() + ")"); - pointsnode.Name = "Points"; - pointsnode.Tag = ymt; - for (int i = 0; i < nodes.Count; i++) - { - var snode = nodes[i]; - var tnode = pointsnode.Nodes.Add(snode.MedTypeName + ": " + snode.StringText); - tnode.Tag = snode; - } - - //var sr = region.Region; - //if (sr == null) return; - //int pointCount = (sr.Points?.LoadSavePoints?.Length ?? 0) + (sr.Points?.MyPoints?.Length ?? 0); - //int entityOverrideCount = (sr.EntityOverrides?.Length ?? 0); - //int chainCount = (sr.Paths?.Chains?.Length ?? 0); - //int clusterCount = (sr.Clusters?.Length ?? 0); - //TreeNode pointsNode = null; - //TreeNode entityOverridesNode = null; - //TreeNode chainsNode = null; - //TreeNode clustersNode = null; - //if (pointCount > 0) - //{ - // pointsNode = node.Nodes.Add("Points (" + pointCount.ToString() + ")"); - //} - //if (entityOverrideCount > 0) - //{ - // entityOverridesNode = node.Nodes.Add("Entity Overrides (" + entityOverrideCount.ToString() + ")"); - //} - //if (chainCount > 0) - //{ - // chainsNode = node.Nodes.Add("Chains (" + chainsNode.ToString() + ")"); - //} - //if (clusterCount > 0) - //{ - // clustersNode = node.Nodes.Add("Clusters (" + clusterCount.ToString() + ")"); - //} - //for (int i = 0; i < nodes.Count; i++) - //{ - // var snode = nodes[i]; - // if (snode == null) continue; - // if ((pointsNode != null) && ((snode.LoadSavePoint != null) || (snode.MyPoint != null))) - // { - // pointsNode.Nodes.Add(snode.ToString()).Tag = snode; - // } - // if ((entityOverridesNode != null) && ((snode.EntityOverride != null) || (snode.EntityPoint != null))) - // { - // entityOverridesNode.Nodes.Add(snode.ToString()).Tag = snode; - // } - // if ((chainsNode != null) && (snode.ChainingNode != null)) - // { - // chainsNode.Nodes.Add(snode.ToString()).Tag = snode; - // } - // if ((clustersNode != null) && ((snode.Cluster != null) || (snode.ClusterLoadSavePoint != null) || (snode.ClusterMyPoint != null))) - // { - // clustersNode.Nodes.Add(snode.ToString()).Tag = snode; - // } - //} - - } - - private void SetScenarioHasChanged(bool changed) - { - if (CurrentScenario == null) return; - - bool changechange = changed != CurrentScenario.HasChanged; - if (!changechange) return; - - CurrentScenario.HasChanged = changed; - - SetScenarioHasChangedUI(changed); - } - - private void SetScenarioHasChangedUI(bool changed) - { - if (ProjectTreeView.Nodes.Count > 0) - { - var pnode = ProjectTreeView.Nodes[0]; - var scnode = GetChildTreeNode(pnode, "Scenarios"); - if (scnode == null) return; - string changestr = changed ? "*" : ""; - for (int i = 0; i < scnode.Nodes.Count; i++) - { - var snode = scnode.Nodes[i]; - if (snode.Tag == CurrentScenario) - { - string name = CurrentScenario.Name; - if (CurrentScenario.RpfFileEntry != null) - { - name = CurrentScenario.RpfFileEntry.Name; - } - snode.Text = changestr + name; - break; - } - } - } - } - - - - public void NewScenarioNode(ScenarioNode copy = null, bool copyPosition = false) - { - if (CurrentScenario == null) return; - if (CurrentScenario.ScenarioRegion == null) return; - - if (copy == null) - { - copy = CurrentScenarioNode; - } - - var n = CurrentScenario.ScenarioRegion.AddNode(copy); - - bool cp = copyPosition && (copy != null); - Vector3 pos = cp ? copy.Position : GetSpawnPos(10.0f); - Quaternion ori = cp ? copy.Orientation : Quaternion.Identity; - n.SetPosition(pos); - n.SetOrientation(ori); - - - LoadProjectTree(); - - TrySelectScenarioNodeTreeNode(n); - CurrentScenarioNode = n; - LoadScenarioTabPage(); - LoadScenarioNodeTabPages(); - - - if (WorldForm != null) - { - WorldForm.UpdateScenarioGraphics(CurrentScenario, false); - } - else - { - CurrentScenario.ScenarioRegion.BuildBVH(); - CurrentScenario.ScenarioRegion.BuildVertices(); //for the graphics... - } - } - - public bool DeleteScenarioNode() - { - if (CurrentScenario == null) return false; - if (CurrentScenario.ScenarioRegion == null) return false; - if (CurrentScenarioNode == null) return false; - - - if (MessageBox.Show("Are you sure you want to delete this scenario node?\n" + CurrentScenarioNode.ToString() + "\n\nThis operation cannot be undone. Continue?", "Confirm delete", MessageBoxButtons.YesNo) != DialogResult.Yes) - { - return true; - } - - //find this now to remove it later. - var tn = FindScenarioNodeTreeNode(CurrentScenarioNode); - - bool res = false; - if (WorldForm != null) - { - lock (WorldForm.RenderSyncRoot) //don't try to do this while rendering... - { - res = CurrentScenario.ScenarioRegion.RemoveNode(CurrentScenarioNode); - } - } - else - { - res = CurrentScenario.ScenarioRegion.RemoveNode(CurrentScenarioNode); - } - if (!res) - { - MessageBox.Show("Unable to delete the scenario node. This shouldn't happen!"); - } - - SetScenarioHasChangedUI(true); - - CurrentScenarioNode = null; - if ((tn != null) && (tn.Parent != null)) - { - tn.Parent.Text = "Points (" + (CurrentScenario?.ScenarioRegion?.Nodes?.Count ?? 0).ToString() + ")"; - tn.Parent.Nodes.Remove(tn); - } - else - { - //no need for this when removing the node above will select something else. - LoadScenarioNodeTabPages(); //this case really shouldn't happen... - } - - if (WorldForm != null) - { - WorldForm.UpdateScenarioGraphics(CurrentScenario, false); - } - - - return true; - } - - private void AddScenarioNodeToProject() - { - if (CurrentScenarioNode == null) return; - if (CurrentScenario != null) - { - AddScenarioToProject(CurrentScenario); - } - } - - private void LoadScenarioNodeTabPages() - { - populatingui = true; - - LoadScenarioDropDowns(); - - LoadScenarioPointTabPage(); - LoadScenarioEntityTabPage(); - LoadScenarioEntityPointTabPage(); - LoadScenarioChainTabPage(); - LoadScenarioChainEdgeTabPage(); - LoadScenarioChainNodeTabPage(); - LoadScenarioClusterTabPage(); - LoadScenarioClusterPointTabPage(); - populatingui = false; - - if (CurrentScenarioNode != null) - { - if (WorldForm != null) - { - WorldForm.SelectScenarioNode(CurrentScenarioNode); - } - } - } - - private void LoadScenarioDropDowns() - { - if (ScenarioPointTypeComboBox.Items.Count > 0) return; - - var types = Scenarios.ScenarioTypes; //these are loaded by Scenarios.Init - if (types == null) - { return; } - - var stypes = types.GetScenarioTypes(); - if (stypes == null) return; - - var pmsets = types.GetPedModelSets(); - if (pmsets == null) return; - - var vmsets = types.GetVehicleModelSets(); - if (vmsets == null) return; - - ScenarioPointTypeComboBox.Items.Clear(); - ScenarioPointTypeComboBox.Items.Add(""); - ScenarioClusterPointTypeComboBox.Items.Clear(); - ScenarioClusterPointTypeComboBox.Items.Add(""); - ScenarioChainNodeTypeComboBox.Items.Clear(); - ScenarioChainNodeTypeComboBox.Items.Add(""); - foreach (var stype in stypes) - { - ScenarioPointTypeComboBox.Items.Add(stype); - ScenarioClusterPointTypeComboBox.Items.Add(stype); - ScenarioChainNodeTypeComboBox.Items.Add(stype); - } - - ScenarioPointModelSetComboBox.Items.Clear(); - ScenarioPointModelSetComboBox.Items.Add(""); - ScenarioClusterPointModelSetComboBox.Items.Clear(); - ScenarioClusterPointModelSetComboBox.Items.Add(""); - foreach (var pmset in pmsets) - { - ScenarioPointModelSetComboBox.Items.Add(pmset); - ScenarioClusterPointModelSetComboBox.Items.Add(pmset); - } - foreach (var vmset in vmsets) - { - ScenarioPointModelSetComboBox.Items.Add(vmset); - ScenarioClusterPointModelSetComboBox.Items.Add(vmset); - } - - - ScenarioEntityPointAvailableInMpSpComboBox.Items.Clear(); - ScenarioEntityPointAvailableInMpSpComboBox.Items.Add(Unk_3573596290.kBoth); - ScenarioEntityPointAvailableInMpSpComboBox.Items.Add(Unk_3573596290.kOnlySp); - ScenarioEntityPointAvailableInMpSpComboBox.Items.Add(Unk_3573596290.kOnlyMp); - - - ScenarioChainEdgeActionComboBox.Items.Clear(); - ScenarioChainEdgeActionComboBox.Items.Add(Unk_3609807418.Move); - ScenarioChainEdgeActionComboBox.Items.Add(Unk_3609807418.Unk_7865678); - ScenarioChainEdgeActionComboBox.Items.Add(Unk_3609807418.MoveFollowMaster); - - ScenarioChainEdgeNavModeComboBox.Items.Clear(); - ScenarioChainEdgeNavModeComboBox.Items.Add(Unk_3971773454.Direct); - ScenarioChainEdgeNavModeComboBox.Items.Add(Unk_3971773454.NavMesh); - ScenarioChainEdgeNavModeComboBox.Items.Add(Unk_3971773454.Roads); - - ScenarioChainEdgeNavSpeedComboBox.Items.Clear(); - ScenarioChainEdgeNavSpeedComboBox.Items.Add(Unk_941086046.Unk_00_3279574318); - ScenarioChainEdgeNavSpeedComboBox.Items.Add(Unk_941086046.Unk_01_2212923970); - ScenarioChainEdgeNavSpeedComboBox.Items.Add(Unk_941086046.Unk_02_4022799658); - ScenarioChainEdgeNavSpeedComboBox.Items.Add(Unk_941086046.Unk_03_1425672334); - ScenarioChainEdgeNavSpeedComboBox.Items.Add(Unk_941086046.Unk_04_957720931); - ScenarioChainEdgeNavSpeedComboBox.Items.Add(Unk_941086046.Unk_05_3795195414); - ScenarioChainEdgeNavSpeedComboBox.Items.Add(Unk_941086046.Unk_06_2834622009); - ScenarioChainEdgeNavSpeedComboBox.Items.Add(Unk_941086046.Unk_07_1876554076); - ScenarioChainEdgeNavSpeedComboBox.Items.Add(Unk_941086046.Unk_08_698543797); - ScenarioChainEdgeNavSpeedComboBox.Items.Add(Unk_941086046.Unk_09_1544199634); - ScenarioChainEdgeNavSpeedComboBox.Items.Add(Unk_941086046.Unk_10_2725613303); - ScenarioChainEdgeNavSpeedComboBox.Items.Add(Unk_941086046.Unk_11_4033265820); - ScenarioChainEdgeNavSpeedComboBox.Items.Add(Unk_941086046.Unk_12_3054809929); - ScenarioChainEdgeNavSpeedComboBox.Items.Add(Unk_941086046.Unk_13_3911005380); - ScenarioChainEdgeNavSpeedComboBox.Items.Add(Unk_941086046.Unk_14_3717649022); - ScenarioChainEdgeNavSpeedComboBox.Items.Add(Unk_941086046.Unk_15_3356026130); - - } - - private void LoadScenarioPointTabPage() - { - var p = CurrentScenarioNode?.MyPoint; - if (p == null) - { - ScenarioPointPanel.Enabled = false; - ScenarioPointCheckBox.Checked = false; - ScenarioPointAddToProjectButton.Enabled = false; - ScenarioPointDeleteButton.Enabled = false; - ScenarioPointPositionTextBox.Text = ""; - ScenarioPointDirectionTextBox.Text = ""; - ScenarioPointTypeComboBox.SelectedItem = null; - ScenarioPointModelSetComboBox.SelectedItem = null; - ScenarioPointInteriorTextBox.Text = ""; - ScenarioPointInteriorHashLabel.Text = "Hash: 0"; - ScenarioPointGroupTextBox.Text = ""; - ScenarioPointGroupHashLabel.Text = "Hash: 0"; - ScenarioPointImapTextBox.Text = ""; - ScenarioPointImapHashLabel.Text = "Hash: 0"; - ScenarioPointTimeStartUpDown.Value = 0; - ScenarioPointTimeEndUpDown.Value = 0; - ScenarioPointProbabilityUpDown.Value = 0; - ScenarioPointSpOnlyFlagUpDown.Value = 0; - ScenarioPointRadiusUpDown.Value = 0; - ScenarioPointWaitTimeUpDown.Value = 0; - ScenarioPointFlagsValueUpDown.Value = 0; - foreach (int i in ScenarioPointFlagsCheckedListBox.CheckedIndices) - { - ScenarioPointFlagsCheckedListBox.SetItemCheckState(i, CheckState.Unchecked); - } - } - else - { - ScenarioPointPanel.Enabled = true; - ScenarioPointCheckBox.Checked = true; - ScenarioPointDeleteButton.Enabled = ScenarioExistsInProject(CurrentScenario); - ScenarioPointAddToProjectButton.Enabled = !ScenarioPointDeleteButton.Enabled; - ScenarioPointPositionTextBox.Text = FloatUtil.GetVector3String(p.Position); - ScenarioPointDirectionTextBox.Text = FloatUtil.ToString(p.Direction); - ScenarioPointTypeComboBox.SelectedItem = ((object)p.Type) ?? ""; - ScenarioPointModelSetComboBox.SelectedItem = ((object)p.ModelSet) ?? ""; - ScenarioPointInteriorTextBox.Text = p.InteriorName.ToString(); - ScenarioPointInteriorHashLabel.Text = "Hash: " + p.InteriorName.Hash.ToString(); - ScenarioPointGroupTextBox.Text = p.GroupName.ToString(); - ScenarioPointGroupHashLabel.Text = "Hash: " + p.GroupName.Hash.ToString(); - ScenarioPointImapTextBox.Text = p.IMapName.ToString(); - ScenarioPointImapHashLabel.Text = "Hash: " + p.IMapName.Hash.ToString(); - ScenarioPointTimeStartUpDown.Value = p.TimeStart; - ScenarioPointTimeEndUpDown.Value = p.TimeEnd; - ScenarioPointProbabilityUpDown.Value = p.Probability; - ScenarioPointSpOnlyFlagUpDown.Value = p.AvailableMpSp; - ScenarioPointRadiusUpDown.Value = p.Radius; - ScenarioPointWaitTimeUpDown.Value = p.WaitTime; - var iflags = (int)p.Flags; - ScenarioPointFlagsValueUpDown.Value = iflags; - for (int i = 0; i < ScenarioPointFlagsCheckedListBox.Items.Count; i++) - { - var c = ((iflags & (1 << i)) > 0); - ScenarioPointFlagsCheckedListBox.SetItemCheckState(i, c ? CheckState.Checked : CheckState.Unchecked); - } - } - } - - private void LoadScenarioEntityTabPage() - { - var e = CurrentScenarioNode?.Entity; - if (e == null) - { - ScenarioEntityPanel.Enabled = false; - ScenarioEntityCheckBox.Checked = false; - ScenarioEntityAddToProjectButton.Enabled = false; - ScenarioEntityDeleteButton.Enabled = false; - ScenarioEntityPositionTextBox.Text = ""; - ScenarioEntityTypeTextBox.Text = ""; - ScenarioEntityTypeHashLabel.Text = "Hash: 0"; - ScenarioEntityUnk1UpDown.Value = 0; - ScenarioEntityUnk2UpDown.Value = 0; - ScenarioEntityInfoLabel.Text = "0 override points"; - ScenarioEntityPointsListBox.Items.Clear(); - ScenarioEntityAddPointButton.Enabled = false; - } - else - { - ScenarioEntityPanel.Enabled = true; - ScenarioEntityCheckBox.Checked = true; - ScenarioEntityDeleteButton.Enabled = ScenarioExistsInProject(CurrentScenario); - ScenarioEntityAddToProjectButton.Enabled = !ScenarioEntityDeleteButton.Enabled; - ScenarioEntityPositionTextBox.Text = FloatUtil.GetVector3String(e.Position); - ScenarioEntityTypeTextBox.Text = e.TypeName.ToString(); - ScenarioEntityTypeHashLabel.Text = "Hash: " + e.TypeName.Hash.ToString(); - ScenarioEntityUnk1UpDown.Value = e.Unk1; - ScenarioEntityUnk2UpDown.Value = e.Unk2; - var pc = e.ScenarioPoints?.Length ?? 0; - ScenarioEntityInfoLabel.Text = pc.ToString() + " override point" + ((pc != 1) ? "s" : ""); - ScenarioEntityPointsListBox.Items.Clear(); - ScenarioEntityAddPointButton.Enabled = true; - - if (e.ScenarioPoints != null) - { - foreach (var point in e.ScenarioPoints) - { - ScenarioEntityPointsListBox.Items.Add(point); - } - if (CurrentScenarioNode.EntityPoint != null) - { - ScenarioEntityPointsListBox.SelectedItem = CurrentScenarioNode.EntityPoint; - } - } - } - } - - private void LoadScenarioEntityPointTabPage() - { - var p = CurrentScenarioNode?.EntityPoint; - if (p == null) - { - ScenarioEntityPointPanel.Enabled = false; - ScenarioEntityPointCheckBox.Checked = false; - ScenarioEntityPointAddToProjectButton.Enabled = false; - ScenarioEntityPointDeleteButton.Enabled = false; - ScenarioEntityPointNameTextBox.Text = ""; - ScenarioEntityPointNameHashLabel.Text = "Hash: 0"; - ScenarioEntityPointPositionTextBox.Text = ""; - ScenarioEntityPointRotationTextBox.Text = ""; - ScenarioEntityPointSpawnTypeTextBox.Text = ""; - ScenarioEntityPointSpawnTypeHashLabel.Text = "Hash: 0"; - ScenarioEntityPointPedTypeTextBox.Text = ""; - ScenarioEntityPointPedTypeHashLabel.Text = "Hash: 0"; - ScenarioEntityPointGroupTextBox.Text = ""; - ScenarioEntityPointGroupHashLabel.Text = "Hash: 0"; - ScenarioEntityPointInteriorTextBox.Text = ""; - ScenarioEntityPointInteriorHashLabel.Text = "Hash: 0"; - ScenarioEntityPointRequiredImapTextBox.Text = ""; - ScenarioEntityPointRequiredImapHashLabel.Text = "Hash: 0"; - ScenarioEntityPointAvailableInMpSpComboBox.SelectedItem = null; - ScenarioEntityPointProbabilityTextBox.Text = ""; - ScenarioEntityPointTimeTillPedLeavesTextBox.Text = ""; - ScenarioEntityPointRadiusTextBox.Text = ""; - ScenarioEntityPointStartUpDown.Value = 0; - ScenarioEntityPointEndUpDown.Value = 0; - ScenarioEntityPointExtendedRangeCheckBox.Checked = false; - ScenarioEntityPointShortRangeCheckBox.Checked = false; - ScenarioEntityPointHighPriCheckBox.Checked = false; - ScenarioEntityPointFlagsUpDown.Value = 0; - foreach (int i in ScenarioEntityPointFlagsCheckedListBox.CheckedIndices) - { - ScenarioEntityPointFlagsCheckedListBox.SetItemCheckState(i, CheckState.Unchecked); - } - } - else - { - ScenarioEntityPointPanel.Enabled = true; - ScenarioEntityPointCheckBox.Checked = true; - ScenarioEntityPointDeleteButton.Enabled = ScenarioExistsInProject(CurrentScenario); - ScenarioEntityPointAddToProjectButton.Enabled = !ScenarioEntityPointDeleteButton.Enabled; - ScenarioEntityPointNameTextBox.Text = p.NameHash.ToString(); - ScenarioEntityPointNameHashLabel.Text = "Hash: " + p.NameHash.Hash.ToString(); - ScenarioEntityPointPositionTextBox.Text = FloatUtil.GetVector3String(p.OffsetPosition); - ScenarioEntityPointRotationTextBox.Text = FloatUtil.GetVector4String(p.OffsetRotation); - ScenarioEntityPointSpawnTypeTextBox.Text = p.SpawnType.ToString(); - ScenarioEntityPointSpawnTypeHashLabel.Text = "Hash: " + p.SpawnType.Hash.ToString(); - ScenarioEntityPointPedTypeTextBox.Text = p.PedType.ToString(); - ScenarioEntityPointPedTypeHashLabel.Text = "Hash: " + p.PedType.Hash.ToString(); - ScenarioEntityPointGroupTextBox.Text = p.Group.ToString(); - ScenarioEntityPointGroupHashLabel.Text = "Hash: " + p.Group.Hash.ToString(); - ScenarioEntityPointInteriorTextBox.Text = p.Interior.ToString(); - ScenarioEntityPointInteriorHashLabel.Text = "Hash: " + p.Interior.Hash.ToString(); - ScenarioEntityPointRequiredImapTextBox.Text = p.RequiredImap.ToString(); - ScenarioEntityPointRequiredImapHashLabel.Text = "Hash: " + p.RequiredImap.Hash.ToString(); - ScenarioEntityPointAvailableInMpSpComboBox.SelectedItem = p.AvailableInMpSp; - ScenarioEntityPointProbabilityTextBox.Text = FloatUtil.ToString(p.Probability); - ScenarioEntityPointTimeTillPedLeavesTextBox.Text = FloatUtil.ToString(p.TimeTillPedLeaves); - ScenarioEntityPointRadiusTextBox.Text = FloatUtil.ToString(p.Radius); - ScenarioEntityPointStartUpDown.Value = p.StartTime; - ScenarioEntityPointEndUpDown.Value = p.EndTime; - ScenarioEntityPointExtendedRangeCheckBox.Checked = p.ExtendedRange; - ScenarioEntityPointShortRangeCheckBox.Checked = p.ShortRange; - ScenarioEntityPointHighPriCheckBox.Checked = p.HighPri; - var iflags = (int)p.Flags; - ScenarioEntityPointFlagsUpDown.Value = 0; - for (int i = 0; i < ScenarioEntityPointFlagsCheckedListBox.Items.Count; i++) - { - var c = ((iflags & (1 << i)) > 0); - ScenarioEntityPointFlagsCheckedListBox.SetItemCheckState(i, c ? CheckState.Checked : CheckState.Unchecked); - } - - } - } - - private void LoadScenarioChainTabPage() - { - CurrentScenarioChainEdge = null; - - var n = CurrentScenarioNode?.ChainingNode; - if (n == null) - { - ScenarioChainAddToProjectButton.Enabled = false; - ScenarioChainDeleteButton.Enabled = false; - ScenarioChainEdgesListBox.Items.Clear(); - ScenarioChainEdgeCountLabel.Text = "Edge Count: 0"; - ScenarioChainUnk1UpDown.Value = 0; - } - else - { - ScenarioChainDeleteButton.Enabled = ScenarioChainNodeDeleteButton.Enabled;// ScenarioExistsInProject(CurrentScenario); - ScenarioChainAddToProjectButton.Enabled = !ScenarioChainDeleteButton.Enabled; - ScenarioChainEdgesListBox.Items.Clear(); - ScenarioChainEdgeCountLabel.Text = "Edge Count: " + (n.Chain?.EdgeIds?.Length ?? 0).ToString(); - ScenarioChainUnk1UpDown.Value = n.Chain?.Unk1 ?? 0; - - if ((n.Chain != null) && (n.Chain.Edges != null)) - { - foreach (var edge in n.Chain.Edges) - { - ScenarioChainEdgesListBox.Items.Add(edge); - } - } - else - { } - } - } - - private void LoadScenarioChainEdgeTabPage() - { - var e = CurrentScenarioChainEdge; - if (e == null) - { - ScenarioChainEdgePanel.Enabled = false; - ScenarioChainEdgeNodeIndexFromUpDown.Value = 0; - ScenarioChainEdgeNodeIndexToUpDown.Value = 0; - ScenarioChainEdgeActionComboBox.SelectedItem = null; - ScenarioChainEdgeNavModeComboBox.SelectedItem = null; - ScenarioChainEdgeNavSpeedComboBox.SelectedItem = null; - ScenarioChainMoveEdgeDownButton.Enabled = false; - ScenarioChainMoveEdgeUpButton.Enabled = false; - } - else - { - ScenarioChainEdgePanel.Enabled = true; - ScenarioChainEdgeNodeIndexFromUpDown.Value = e.NodeIndexFrom; - ScenarioChainEdgeNodeIndexToUpDown.Value = e.NodeIndexTo; - ScenarioChainEdgeActionComboBox.SelectedItem = e.Action; - ScenarioChainEdgeNavModeComboBox.SelectedItem = e.NavMode; - ScenarioChainEdgeNavSpeedComboBox.SelectedItem = e.NavSpeed; - ScenarioChainMoveEdgeDownButton.Enabled = true; - ScenarioChainMoveEdgeUpButton.Enabled = true; - - if (WorldForm != null) - { - WorldForm.SelectScenarioEdge(CurrentScenarioNode, e); - } - } - } - - private void LoadScenarioChainNodeTabPage() - { - var n = CurrentScenarioNode?.ChainingNode; - if (n == null) - { - ScenarioChainNodePanel.Enabled = false; - ScenarioChainNodeCheckBox.Checked = false; - ScenarioChainNodeAddToProjectButton.Enabled = false; - ScenarioChainNodeDeleteButton.Enabled = false; - ScenarioChainNodePositionTextBox.Text = ""; - ScenarioChainNodeUnk1TextBox.Text = ""; - ScenarioChainNodeUnk1HashLabel.Text = "Hash: 0"; - ScenarioChainNodeTypeComboBox.SelectedItem = null; - ScenarioChainNodeFirstCheckBox.Checked = false; - ScenarioChainNodeLastCheckBox.Checked = false; - ScenarioChainNodeIndexTextBox.Text = ""; - } - else - { - ScenarioChainNodePanel.Enabled = true; - ScenarioChainNodeCheckBox.Checked = true; - ScenarioChainNodeDeleteButton.Enabled = ScenarioExistsInProject(CurrentScenario); - ScenarioChainNodeAddToProjectButton.Enabled = !ScenarioChainNodeDeleteButton.Enabled; - ScenarioChainNodePositionTextBox.Text = FloatUtil.GetVector3String(n.Position); - ScenarioChainNodeUnk1TextBox.Text = n.Unk1.ToString(); - ScenarioChainNodeUnk1HashLabel.Text = "Hash: " + n.Unk1.Hash.ToString(); - ScenarioChainNodeTypeComboBox.SelectedItem = ((object)n.Type) ?? ""; - ScenarioChainNodeFirstCheckBox.Checked = !n.NotFirst; - ScenarioChainNodeLastCheckBox.Checked = !n.NotLast; - ScenarioChainNodeIndexTextBox.Text = n.NodeIndex.ToString(); - } - } - - private void LoadScenarioClusterTabPage() - { - var c = CurrentScenarioNode?.Cluster; - if (c == null) - { - ScenarioClusterPanel.Enabled = false; - ScenarioClusterCheckBox.Checked = false; - ScenarioClusterAddToProjectButton.Enabled = false; - ScenarioClusterDeleteButton.Enabled = false; - ScenarioClusterCenterTextBox.Text = ""; - ScenarioClusterRadiusTextBox.Text = ""; - ScenarioClusterUnk1TextBox.Text = ""; - ScenarioClusterUnk2CheckBox.Checked = false; - ScenarioClusterPointsListBox.Items.Clear(); - ScenarioClusterAddPointButton.Enabled = false; - } - else - { - ScenarioClusterPanel.Enabled = true; - ScenarioClusterCheckBox.Checked = true; - ScenarioClusterDeleteButton.Enabled = ScenarioExistsInProject(CurrentScenario); - ScenarioClusterAddToProjectButton.Enabled = !ScenarioClusterDeleteButton.Enabled; - ScenarioClusterCenterTextBox.Text = FloatUtil.GetVector3String(c.Position); - ScenarioClusterRadiusTextBox.Text = FloatUtil.ToString(c.Radius); - ScenarioClusterUnk1TextBox.Text = FloatUtil.ToString(c.Unk1); - ScenarioClusterUnk2CheckBox.Checked = c.Unk2; - ScenarioClusterPointsListBox.Items.Clear(); - ScenarioClusterAddPointButton.Enabled = true; - - if (c.Points != null) - { - if (c.Points.MyPoints != null) - { - foreach (var point in c.Points.MyPoints) - { - ScenarioClusterPointsListBox.Items.Add(point); - } - if (CurrentScenarioNode.ClusterMyPoint != null) - { - ScenarioClusterPointsListBox.SelectedItem = CurrentScenarioNode.ClusterMyPoint; - } - } - if (c.Points.LoadSavePoints != null) - { - foreach (var point in c.Points.LoadSavePoints) - { - ScenarioClusterPointsListBox.Items.Add(point); - } - if (CurrentScenarioNode.ClusterLoadSavePoint != null) - { - ScenarioClusterPointsListBox.SelectedItem = CurrentScenarioNode.ClusterLoadSavePoint; - } - } - } - - } - } - - private void LoadScenarioClusterPointTabPage() - { - var p = CurrentScenarioNode?.ClusterMyPoint; - if (p == null) - { - ScenarioClusterPointPanel.Enabled = false; - ScenarioClusterPointCheckBox.Checked = false; - ScenarioClusterPointAddToProjectButton.Enabled = false; - ScenarioClusterPointDeleteButton.Enabled = false; - ScenarioClusterPointPositionTextBox.Text = ""; - ScenarioClusterPointDirectionTextBox.Text = ""; - ScenarioClusterPointTypeComboBox.SelectedItem = null; - ScenarioClusterPointModelSetComboBox.SelectedItem = null; - ScenarioClusterPointInteriorTextBox.Text = ""; - ScenarioClusterPointInteriorHashLabel.Text = "Hash: 0"; - ScenarioClusterPointGroupTextBox.Text = ""; - ScenarioClusterPointGroupHashLabel.Text = "Hash: 0"; - ScenarioClusterPointImapTextBox.Text = ""; - ScenarioClusterPointImapHashLabel.Text = "Hash: 0"; - ScenarioClusterPointTimeStartUpDown.Value = 0; - ScenarioClusterPointTimeEndUpDown.Value = 0; - ScenarioClusterPointProbabilityUpDown.Value = 0; - ScenarioClusterPointAnimalFlagUpDown.Value = 0; - ScenarioClusterPointRadiusUpDown.Value = 0; - ScenarioClusterPointWaitTimeUpDown.Value = 0; - ScenarioClusterPointFlagsUpDown.Value = 0; - foreach (int i in ScenarioClusterPointFlagsCheckedListBox.CheckedIndices) - { - ScenarioClusterPointFlagsCheckedListBox.SetItemCheckState(i, CheckState.Unchecked); - } - } - else - { - ScenarioClusterPointPanel.Enabled = true; - ScenarioClusterPointCheckBox.Checked = true; - ScenarioClusterPointDeleteButton.Enabled = ScenarioExistsInProject(CurrentScenario); - ScenarioClusterPointAddToProjectButton.Enabled = !ScenarioClusterPointDeleteButton.Enabled; - ScenarioClusterPointPositionTextBox.Text = FloatUtil.GetVector3String(p.Position); - ScenarioClusterPointDirectionTextBox.Text = FloatUtil.ToString(p.Direction); - ScenarioClusterPointTypeComboBox.SelectedItem = ((object)p.Type) ?? ""; - ScenarioClusterPointModelSetComboBox.SelectedItem = ((object)p.ModelSet) ?? ""; - ScenarioClusterPointInteriorTextBox.Text = p.InteriorName.ToString(); - ScenarioClusterPointInteriorHashLabel.Text = "Hash: " + p.InteriorName.Hash.ToString(); - ScenarioClusterPointGroupTextBox.Text = p.GroupName.ToString(); - ScenarioClusterPointGroupHashLabel.Text = "Hash: " + p.GroupName.Hash.ToString(); - ScenarioClusterPointImapTextBox.Text = p.IMapName.ToString(); - ScenarioClusterPointImapHashLabel.Text = "Hash: " + p.IMapName.Hash.ToString(); - ScenarioClusterPointTimeStartUpDown.Value = p.TimeStart; - ScenarioClusterPointTimeEndUpDown.Value = p.TimeEnd; - ScenarioClusterPointProbabilityUpDown.Value = p.Probability; - ScenarioClusterPointAnimalFlagUpDown.Value = p.AvailableMpSp; - ScenarioClusterPointRadiusUpDown.Value = p.Radius; - ScenarioClusterPointWaitTimeUpDown.Value = p.WaitTime; - var iflags = (int)p.Flags; - ScenarioClusterPointFlagsUpDown.Value = iflags; - for (int i = 0; i < ScenarioClusterPointFlagsCheckedListBox.Items.Count; i++) - { - var c = ((iflags & (1 << i)) > 0); - ScenarioClusterPointFlagsCheckedListBox.SetItemCheckState(i, c ? CheckState.Checked : CheckState.Unchecked); - } - } - } - - private void SelectScenarioNodeTabPages(ScenarioNode node) - { - //select the appropriate tab page(s) for the given node. - - if (node == null) return; - - bool reseltree = ProjectTreeView.Focused; - bool change = false; - - if (node.MyPoint != null) - { - bool sw = true; - if ((node.Entity != null) && (ScenarioTabControl.SelectedTab == ScenarioEntityTabPage)) - { - sw = false; - } - if ((node.EntityPoint != null) && (ScenarioTabControl.SelectedTab == ScenarioEntityPointTabPage)) - { - sw = false; - } - if ((node.Cluster != null) && (ScenarioTabControl.SelectedTab == ScenarioClusterTabPage)) - { - sw = false; - } - if ((node.ClusterMyPoint != null) && (ScenarioTabControl.SelectedTab == ScenarioClusterPointTabPage)) - { - sw = false; - } - if ((node.ChainingNode != null) && (ScenarioTabControl.SelectedTab == ScenarioChainTabPage)) - { - sw = false; - } - if ((node.ChainingNode != null) && (ScenarioTabControl.SelectedTab == ScenarioChainNodeTabPage)) - { - sw = false; - } - - if (sw) - { - change = ScenarioTabControl.SelectedTab != ScenarioPointTabPage; - ScenarioTabControl.SelectedTab = ScenarioPointTabPage; - } - } - else if (node.EntityPoint != null) - { - if (ScenarioTabControl.SelectedTab != ScenarioEntityTabPage) - { - change = ScenarioTabControl.SelectedTab != ScenarioEntityPointTabPage; - ScenarioTabControl.SelectedTab = ScenarioEntityPointTabPage; - } - } - else if (node.Entity != null) - { - change = ScenarioTabControl.SelectedTab != ScenarioEntityTabPage; - ScenarioTabControl.SelectedTab = ScenarioEntityTabPage; - } - else if (node.ClusterMyPoint != null) - { - if (ScenarioTabControl.SelectedTab != ScenarioClusterTabPage) - { - change = ScenarioTabControl.SelectedTab != ScenarioClusterPointTabPage; - ScenarioTabControl.SelectedTab = ScenarioClusterPointTabPage; - } - } - else if (node.Cluster != null) - { - change = ScenarioTabControl.SelectedTab != ScenarioClusterTabPage; - ScenarioTabControl.SelectedTab = ScenarioClusterTabPage; - } - else if (node.ChainingNode != null) - { - if (ScenarioTabControl.SelectedTab != ScenarioChainTabPage) - { - change = ScenarioTabControl.SelectedTab != ScenarioChainNodeTabPage; - ScenarioTabControl.SelectedTab = ScenarioChainNodeTabPage; - } - } - else //if (node.MyPoint != null) - { - change = ScenarioTabControl.SelectedTab != ScenarioPointTabPage; - ScenarioTabControl.SelectedTab = ScenarioPointTabPage; - } - - if (reseltree && change) - { - ProjectTreeView.Focus(); - } - } - - public bool IsCurrentScenarioNode(ScenarioNode node) - { - return node == CurrentScenarioNode; - } - - - - - private void AddScenarioChain() - { - if (CurrentScenario.ScenarioRegion == null) return; - var paths = CurrentScenario?.CScenarioPointRegion?.Paths; - if (paths == null) return; - - var copy = CurrentScenarioNode?.ChainingNode?.Chain; - var copyn = CurrentScenarioNode?.ChainingNode; - var copyp = CurrentScenarioNode?.MyPoint; - var copye = CurrentScenarioChainEdge; - var copycl = CurrentScenarioNode?.Cluster; - - MCScenarioChain chain = new MCScenarioChain(); - chain.Unk1 = 1; //default value - if (copy != null) - { - chain.Data = copy.Data; - chain._Data.EdgeIds = new Array_ushort(); //start empty.. not really necessary - } - - paths.AddChain(chain); - - - //add 2 new nodes to the new chain. - var pos1 = GetSpawnPos(10.0f); - var pos2 = pos1 + Vector3.UnitX; - - ScenarioNode n1 = null;// CurrentScenario.ScenarioRegion.AddNode(); - - if (copycl != null) - { - ScenarioNode copyclnode = new ScenarioNode(CurrentScenario); - copyclnode.Cluster = copycl; - copyclnode.ClusterMyPoint = new MCScenarioPoint(CurrentScenario.CScenarioPointRegion); - copyclnode.ClusterMyPoint.InteriorName = 493038497; //JenkHash.GenHash("none"); - copyclnode.ClusterMyPoint.GroupName = 493038497; - copyclnode.ClusterMyPoint.IMapName = 493038497; - copyclnode.ClusterMyPoint.TimeStart = 0; - copyclnode.ClusterMyPoint.TimeEnd = 24; - n1 = CurrentScenario.ScenarioRegion.AddNode(copyclnode); - } - else - { - n1 = CurrentScenario.ScenarioRegion.AddNode(); - } - - ScenarioNode n2 = CurrentScenario.ScenarioRegion.AddNode(); - - if (copyp != null) - { - n1.MyPoint.CopyFrom(copyp); - n2.MyPoint.CopyFrom(copyp); - } - - n1.ChainingNode = new MCScenarioChainingNode(); - n2.ChainingNode = new MCScenarioChainingNode(); - - if (copyn != null) - { - n1.ChainingNode.CopyFrom(copyn); - n2.ChainingNode.CopyFrom(copyn); - } - - n1.ChainingNode.NotLast = true; - n2.ChainingNode.NotFirst = true; - - n1.ChainingNode.ScenarioNode = n1; - n2.ChainingNode.ScenarioNode = n2; - - paths.AddNode(n1.ChainingNode); - paths.AddNode(n2.ChainingNode); - - n1.ChainingNode.Chain = chain; - n2.ChainingNode.Chain = chain; - - var ed = new MCScenarioChainingEdge(); - - if (copye != null) - { - ed.Data = copye.Data; - } - - ed.NodeFrom = n1.ChainingNode; - ed.NodeTo = n2.ChainingNode; - ed.NodeIndexFrom = (ushort)n1.ChainingNode.NodeIndex; - ed.NodeIndexTo = (ushort)n2.ChainingNode.NodeIndex; - - paths.AddEdge(ed); - chain.AddEdge(ed); - - - - n1.SetPosition(pos1); - n2.SetPosition(pos2); - - - - - - - LoadProjectTree(); - - TrySelectScenarioNodeTreeNode(n1); - CurrentScenarioNode = n1; - CurrentScenarioChainEdge = ed; - LoadScenarioChainTabPage(); - //LoadScenarioTabPage(); - //LoadScenarioNodeTabPages(); - - - if (WorldForm != null) - { - WorldForm.UpdateScenarioGraphics(CurrentScenario, false); - } - else - { - CurrentScenario.ScenarioRegion.BuildBVH(); - CurrentScenario.ScenarioRegion.BuildVertices(); //for the graphics... - } - } - - private void AddScenarioEdge() - { - var chain = CurrentScenarioNode?.ChainingNode?.Chain; - if (chain == null) return; - var paths = CurrentScenario?.CScenarioPointRegion?.Paths; - if (paths == null) return; - - MCScenarioChainingEdge edge = new MCScenarioChainingEdge(); - if (CurrentScenarioChainEdge != null) - { - edge.Data = CurrentScenarioChainEdge.Data; - } - - paths.AddEdge(edge); - chain.AddEdge(edge); - - CurrentScenarioChainEdge = edge; - - UpdateScenarioEdgeLinkage(); - - LoadScenarioChainTabPage(); - - ScenarioChainEdgesListBox.SelectedItem = edge; - } - - private void RemoveScenarioEdge() - { - if (CurrentScenarioChainEdge == null) return; - if (CurrentScenario == null) return; - - var chain = CurrentScenarioNode?.ChainingNode?.Chain; - if (chain == null) return; - var paths = CurrentScenario?.CScenarioPointRegion?.Paths; - if (paths == null) return; - - if (MessageBox.Show("Are you sure you want to delete this scenario chain edge?\n" + CurrentScenarioChainEdge.ToString() + "\n\nThis operation cannot be undone. Continue?", "Confirm delete", MessageBoxButtons.YesNo) != DialogResult.Yes) - { - return; - } - - chain.RemoveEdge(CurrentScenarioChainEdge); - paths.RemoveEdge(CurrentScenarioChainEdge); - - LoadScenarioChainTabPage(); - - if (WorldForm != null) - { - WorldForm.UpdateScenarioGraphics(CurrentScenario, false); - WorldForm.SelectScenarioEdge(CurrentScenarioNode, null); - } - } - - private void MoveScenarioEdge(bool moveDown) - { - - var chain = CurrentScenarioNode?.ChainingNode?.Chain; - if (chain == null) return; - if (chain.Edges == null) return; - if (chain.EdgeIds == null) return; - - if (CurrentScenarioChainEdge == null) return; - - var edges = CurrentScenario?.CScenarioPointRegion?.Paths?.Edges; - if (edges == null) return; - - - int lasti = (chain.Edges?.Length ?? 0) - 1; - - var edgeid = 0; - for (int i = 0; i < chain.Edges.Length; i++) - { - if (chain.Edges[i] == CurrentScenarioChainEdge) - { - edgeid = i; - break; - } - } - - if (!moveDown && (edgeid <= 0)) return; - if (moveDown && (edgeid >= lasti)) return; - - var swapid = edgeid + (moveDown ? 1 : -1); - var swaped = chain.Edges[swapid]; - - chain.Edges[swapid] = CurrentScenarioChainEdge; - chain.EdgeIds[swapid] = (ushort)CurrentScenarioChainEdge.EdgeIndex; - chain.Edges[edgeid] = swaped; - chain.EdgeIds[edgeid] = (ushort)swapid; - - var ce = CurrentScenarioChainEdge; - - LoadScenarioChainTabPage(); - - CurrentScenarioChainEdge = ce; - - ScenarioChainEdgesListBox.SelectedItem = ce; - - //LoadScenarioChainEdgeTabPage(); - - } - - private void UpdateScenarioEdgeLinkage() - { - if (CurrentScenarioChainEdge == null) return; - if (CurrentScenario == null) return; - - - var chains = CurrentScenario?.CScenarioPointRegion?.Paths; - if (chains == null) return; - - var nodes = chains.Nodes; - if (nodes == null) return; - - ushort nifrom = CurrentScenarioChainEdge.NodeIndexFrom; - ushort nito = CurrentScenarioChainEdge.NodeIndexTo; - - if (nifrom < nodes.Length) CurrentScenarioChainEdge.NodeFrom = nodes[nifrom]; - if (nito < nodes.Length) CurrentScenarioChainEdge.NodeTo = nodes[nito]; - - ////need to rebuild the link verts.. updating the graphics should do it... - if (WorldForm != null) - { - WorldForm.UpdateScenarioGraphics(CurrentScenario, false); - } - } - - private void DeleteScenarioChain() - { - if (CurrentScenario == null) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.ChainingNode == null) return; - if (CurrentScenarioNode.ChainingNode.Chain == null) return; - - var chain = CurrentScenarioNode.ChainingNode.Chain; - - var paths = CurrentScenario.CScenarioPointRegion?.Paths; - if (paths == null) return; - - var rgn = CurrentScenario.ScenarioRegion; - if (rgn == null) return; - - - if (MessageBox.Show("Are you sure you want to delete this scenario chain?\n" + chain.ToString() + "\n\nThis operation cannot be undone. Continue?", "Confirm delete", MessageBoxButtons.YesNo) != DialogResult.Yes) - { - return; - } - - bool delpoints = false; - if (MessageBox.Show("Delete all Scenario Points for this chain as well?", "Confirm delete points", MessageBoxButtons.YesNo) == DialogResult.Yes) - { - delpoints = true; - } - - - - Dictionary ndict = new Dictionary(); - - var edges = chain.Edges; - if (edges != null) - { - foreach (var edge in edges) - { - //paths.RemoveEdge(edge); //removing nodes also removes edges! - paths.RemoveNode(edge.NodeFrom); - paths.RemoveNode(edge.NodeTo); - - ndict[edge.NodeFrom] = 1; - ndict[edge.NodeTo] = 1; - } - } - - paths.RemoveChain(chain); - - - - - List delnodes = new List(); - foreach (var node in rgn.Nodes) - { - if ((node.ChainingNode != null) && (ndict.ContainsKey(node.ChainingNode))) - { - delnodes.Add(node); - } - } - foreach (var delnode in delnodes) - { - delnode.ChainingNode = null;//this chaining node has been removed from the region. remove this association. - if (delpoints) - { - rgn.RemoveNode(delnode); - } - } - - - - var cn = CurrentScenarioNode; - var cs = CurrentScenario; - - LoadProjectTree(); - - if (!delpoints && (cn != null)) - { - TrySelectScenarioNodeTreeNode(cn); - } - else - { - TrySelectScenarioTreeNode(cs); - } - - - if (WorldForm != null) - { - WorldForm.UpdateScenarioGraphics(cs, false); - if (delpoints) - { - WorldForm.SelectItem(null); - } - } - else if (cs?.ScenarioRegion != null) - { - cs.ScenarioRegion.BuildBVH(); - cs.ScenarioRegion.BuildVertices(); //for the graphics... - } - } - - - - - private void AddScenarioCluster()//TODO: add defualt cluster points to new cluster - { - if (CurrentScenario == null) return; - - var sr = CurrentScenario.ScenarioRegion; - if (sr == null) return; - - var rgn = CurrentScenario.CScenarioPointRegion; - if (rgn == null) return; - - var copy = CurrentScenarioNode?.Cluster; - - - MCScenarioPointCluster cluster = new MCScenarioPointCluster(rgn, copy); - List clusterpoints = new List(); - - if (copy != null) - { - if (copy.Points?.MyPoints != null) - { - clusterpoints.AddRange(copy.Points.MyPoints); - } - } - - - - rgn.AddCluster(cluster); //add the base cluster to the region. - - - var pos1 = GetSpawnPos(10.0f); - - var ncopy = new ScenarioNode(CurrentScenario);//copy an empty node to start with, to avoid creating default MyPoint - var nc = sr.AddNode(ncopy); //add the base cluster's display node. - nc.Cluster = cluster; - - nc.SetPosition(pos1); - - if (cluster.Points != null) - { - foreach (var cpt in clusterpoints) - { - //TODO: copy cluster points.... - //or create some default points! - } - } - - - - - - - - - LoadProjectTree(); - - TrySelectScenarioNodeTreeNode(nc); - CurrentScenarioNode = nc; - LoadScenarioClusterTabPage(); - - - if (WorldForm != null) - { - WorldForm.UpdateScenarioGraphics(CurrentScenario, false); - } - else - { - CurrentScenario.ScenarioRegion.BuildBVH(); - CurrentScenario.ScenarioRegion.BuildVertices(); //for the graphics... - } - - } - - private void DeleteScenarioCluster() - { - if (CurrentScenario == null) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.Cluster == null) return; - - var cluster = CurrentScenarioNode.Cluster; - - var rgn = CurrentScenario.ScenarioRegion; - if (rgn == null) return; - - var crgn = CurrentScenario.CScenarioPointRegion; - if (crgn == null) return; - - - if (MessageBox.Show("Are you sure you want to delete this scenario cluster?\n" + cluster.ToString() + "\n\nThis operation cannot be undone. Continue?", "Confirm delete", MessageBoxButtons.YesNo) != DialogResult.Yes) - { - return; - } - - bool delpoints = false; - if (MessageBox.Show("Delete all Scenario Points for this cluster as well?", "Confirm delete points", MessageBoxButtons.YesNo) == DialogResult.Yes) - { - delpoints = true; - } - - - crgn.RemoveCluster(cluster); - - - - - - Dictionary ndict = new Dictionary(); - if (cluster?.Points?.MyPoints != null) - { - foreach (var point in cluster.Points.MyPoints) - { - ndict[point] = 1; - } - } - List delnodes = new List(); - foreach (var node in rgn.Nodes) - { - if ((node.ClusterMyPoint != null) && (ndict.ContainsKey(node.ClusterMyPoint))) - { - delnodes.Add(node); - } - else if (node.Cluster == cluster) - { - delnodes.Add(node); - } - } - foreach (var delnode in delnodes) - { - if (!delpoints && (crgn.Points != null) && (delnode.ClusterMyPoint != null)) - { - var copypt = new MCScenarioPoint(crgn, delnode.ClusterMyPoint); - crgn.Points.AddMyPoint(copypt); - delnode.MyPoint = copypt; - } - bool iscl = false; - if ((delnode.Cluster != null) && (delnode.ClusterMyPoint == null) && (delnode.ClusterLoadSavePoint == null)) - { - iscl = true; - } - delnode.Cluster = null; - delnode.ClusterMyPoint = null;//this cluster point has been removed from the region. remove this association. - delnode.ClusterLoadSavePoint = null; - if (delpoints) - { - //if ((delnode.ChainingNode == null) && (delnode.EntityPoint == null)) - { - rgn.RemoveNode(delnode); - } - } - else if (iscl) - { - rgn.RemoveNode(delnode); //remove the cluster node itself. - } - } - - - - var cn = CurrentScenarioNode; - var cs = CurrentScenario; - - LoadProjectTree(); - - if (!delpoints && (cn != null)) - { - TrySelectScenarioNodeTreeNode(cn); - } - else - { - TrySelectScenarioTreeNode(cs); - } - - - if (WorldForm != null) - { - WorldForm.UpdateScenarioGraphics(cs, false); - if (delpoints || ((cn != null) && (cn.MyPoint == null))) - { - WorldForm.SelectItem(null); - } - } - else if (cs?.ScenarioRegion != null) - { - cs.ScenarioRegion.BuildBVH(); - cs.ScenarioRegion.BuildVertices(); //for the graphics... - } - - } - - private void AddScenarioClusterPoint() - { - if (CurrentScenario == null) return; - - var sr = CurrentScenario.ScenarioRegion; - if (sr == null) return; - - var rgn = CurrentScenario.CScenarioPointRegion; - if (rgn == null) return; - - var cluster = CurrentScenarioNode?.Cluster; - if (cluster == null) return; - - if (cluster.Points == null) - { - cluster.Points = new MCScenarioPointContainer(rgn); - cluster.Points.Parent = cluster; - } - - var copy = CurrentScenarioNode?.ClusterMyPoint; - - var pos1 = GetSpawnPos(10.0f); - var ori1 = copy?.Orientation ?? Quaternion.Identity; - - var cn = new ScenarioNode(CurrentScenario);//copy a blank node - var n = sr.AddNode(cn); - - var np = new MCScenarioPoint(rgn, copy); - cluster.Points.AddMyPoint(np); - - n.ClusterMyPoint = np; - n.Cluster = cluster; - - n.SetPosition(pos1); - n.SetOrientation(ori1); - - - LoadProjectTree(); - - TrySelectScenarioNodeTreeNode(n); - CurrentScenarioNode = n; - LoadScenarioClusterTabPage(); - LoadScenarioClusterPointTabPage(); - //LoadScenarioTabPage(); - //LoadScenarioNodeTabPages(); - - - if (WorldForm != null) - { - WorldForm.UpdateScenarioGraphics(CurrentScenario, false); - } - else - { - CurrentScenario.ScenarioRegion.BuildBVH(); - CurrentScenario.ScenarioRegion.BuildVertices(); //for the graphics... - } - } - - - private void AddScenarioEntity()//TODO: add default entity point(s) to entity - { - if (CurrentScenario == null) return; - - var sr = CurrentScenario.ScenarioRegion; - if (sr == null) return; - - var rgn = CurrentScenario.CScenarioPointRegion; - if (rgn == null) return; - - var copy = CurrentScenarioNode?.Entity; - - - MCScenarioEntityOverride entity = new MCScenarioEntityOverride(rgn, copy); - List entpoints = new List(); - - if (copy != null) - { - if (copy.ScenarioPoints != null) - { - entpoints.AddRange(copy.ScenarioPoints); - } - } - - - - - - - rgn.AddEntity(entity); //add the base entity to the region. - - - var pos1 = GetSpawnPos(10.0f); - - var ncopy = new ScenarioNode(CurrentScenario);//copy an empty node to start with, to avoid creating default MyPoint - var ne = sr.AddNode(ncopy); //add the base entity's display node. - ne.Entity = entity; - - ne.SetPosition(pos1); - - if (entity.ScenarioPoints != null) - { - foreach (var cpt in entpoints) - { - //TODO: copy entity points.... - //or create some default points! - } - } - - - - - - - - - LoadProjectTree(); - - TrySelectScenarioNodeTreeNode(ne); - CurrentScenarioNode = ne; - LoadScenarioEntityTabPage(); - - - if (WorldForm != null) - { - WorldForm.UpdateScenarioGraphics(CurrentScenario, false); - } - else - { - CurrentScenario.ScenarioRegion.BuildBVH(); - CurrentScenario.ScenarioRegion.BuildVertices(); //for the graphics... - } - - } - - private void DeleteScenarioEntity() - { - if (CurrentScenario == null) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.Entity == null) return; - - var entity = CurrentScenarioNode.Entity; - - var rgn = CurrentScenario.ScenarioRegion; - if (rgn == null) return; - - var crgn = CurrentScenario.CScenarioPointRegion; - if (crgn == null) return; - - - if (MessageBox.Show("Are you sure you want to delete this scenario entity override, and all its override points?\n" + entity.ToString() + "\n\nThis operation cannot be undone. Continue?", "Confirm delete", MessageBoxButtons.YesNo) != DialogResult.Yes) - { - return; - } - - //bool delpoints = false; - //if (MessageBox.Show("Delete all Scenario Points for this entity override as well?", "Confirm delete points", MessageBoxButtons.YesNo) == DialogResult.Yes) - //{ - // delpoints = true; - //} - - - crgn.RemoveEntity(entity); - - - - - - Dictionary ndict = new Dictionary(); - if (entity.ScenarioPoints != null) - { - foreach (var point in entity.ScenarioPoints) - { - ndict[point] = 1; - } - } - List delnodes = new List(); - foreach (var node in rgn.Nodes) - { - if ((node.EntityPoint != null) && (ndict.ContainsKey(node.EntityPoint))) - { - delnodes.Add(node); - } - else if (node.Entity == entity) - { - delnodes.Add(node); - } - } - foreach (var delnode in delnodes) - { - delnode.Entity = null; - delnode.EntityPoint = null;//this entity point has been removed from the region. remove this association. - rgn.RemoveNode(delnode); - } - - - - var cn = CurrentScenarioNode; - var cs = CurrentScenario; - - LoadProjectTree(); - - - TrySelectScenarioTreeNode(cs); - - - if (WorldForm != null) - { - WorldForm.UpdateScenarioGraphics(cs, false); - WorldForm.SelectItem(null); - } - else if (cs?.ScenarioRegion != null) - { - cs.ScenarioRegion.BuildBVH(); - cs.ScenarioRegion.BuildVertices(); //for the graphics... - } - } - - private void AddScenarioEntityPoint() - { - if (CurrentScenario == null) return; - - var sr = CurrentScenario.ScenarioRegion; - if (sr == null) return; - - var rgn = CurrentScenario.CScenarioPointRegion; - if (rgn == null) return; - - var entity = CurrentScenarioNode?.Entity; - if (entity == null) return; - - var copy = CurrentScenarioNode?.EntityPoint; - - var pos1 = GetSpawnPos(10.0f); - var ori1 = copy?.Orientation ?? Quaternion.Identity; - - var cn = new ScenarioNode(CurrentScenario);//copy a blank node - var n = sr.AddNode(cn); - - var np = new MCExtensionDefSpawnPoint(rgn, copy); - entity.AddScenarioPoint(np); - - n.EntityPoint = np; - n.Entity = entity; - - n.SetPosition(pos1); - n.SetOrientation(ori1); - - - LoadProjectTree(); - - TrySelectScenarioNodeTreeNode(n); - CurrentScenarioNode = n; - LoadScenarioEntityTabPage(); - LoadScenarioEntityPointTabPage(); - //LoadScenarioTabPage(); - //LoadScenarioNodeTabPages(); - - - if (WorldForm != null) - { - WorldForm.UpdateScenarioGraphics(CurrentScenario, false); - } - else - { - CurrentScenario.ScenarioRegion.BuildBVH(); - CurrentScenario.ScenarioRegion.BuildVertices(); //for the graphics... - } - } - - - - - - - - - private void ImportScenarioChain() - { - var paths = CurrentScenario?.CScenarioPointRegion?.Paths; - if (paths == null) return; - var rgn = CurrentScenario.ScenarioRegion; - if (rgn == null) return; - - TextInputForm f = new TextInputForm(); - f.TitleText = "Import scenario chain points"; - f.PromptText = "Input chain points in CSV (or TSV) format. Direction is in radians. NavSpeed is from 0 to 15. NavMode can be either Direct, NavMesh, or Roads. ScenarioType is the name of the scenario type to use."; - f.MainText = "X, Y, Z, Direction, NavSpeed, NavMode, ScenarioType, ModelSet, Flags"; - if (f.ShowDialog() == DialogResult.Cancel) return; - - var stypes = Scenarios.ScenarioTypes; //these are loaded by Scenarios.Init - ScenarioType defaulttype = null; - if (stypes != null) - { - defaulttype = stypes.GetScenarioType(1194480618); //"drive"; - } - - AmbientModelSet defaultmodelset = null; - uint defaultflags = 0; - - ScenarioNode thisnode = null; - ScenarioNode lastnode = null; - MCScenarioChainingEdge lastedge = null; - - var str = f.MainText; - var lines = str.Split('\n'); - - - if (lines.Length < 2) - { - return;//need at least 2 lines (1 point) to work with... - } - - - - MCScenarioChain chain = new MCScenarioChain(); - - paths.AddChain(chain); - - - for (int i = 0; i < lines.Length; i++) - { - var line = lines[i]; - var delim = line.Contains(",") ? "," : " "; - var vals = line.Split(new[] { delim }, StringSplitOptions.RemoveEmptyEntries); - if (vals.Length < 3) continue; - if (vals[0].StartsWith("X")) continue; - Vector3 pos = Vector3.Zero; - float dir = 0; - var action = Unk_3609807418.Move; - var navMode = Unk_3971773454.Direct; - var navSpeed = Unk_941086046.Unk_00_3279574318; - var stype = defaulttype; - var modelset = defaultmodelset; - var flags = defaultflags; - var ok = true; - ok = ok && FloatUtil.TryParse(vals[0].Trim(), out pos.X); - ok = ok && FloatUtil.TryParse(vals[1].Trim(), out pos.Y); - ok = ok && FloatUtil.TryParse(vals[2].Trim(), out pos.Z); - if (vals.Length > 3) - { - ok = ok && FloatUtil.TryParse(vals[3].Trim(), out dir); - while (dir > Math.PI) dir -= 2.0f * (float)Math.PI; - while (dir < -Math.PI) dir += 2.0f * (float)Math.PI; - } - if (vals.Length > 4) - { - byte nsb = 0; - byte.TryParse(vals[4].Trim(), out nsb); - if (nsb > 15) nsb = 15; - navSpeed = (Unk_941086046)nsb; - } - if (vals.Length > 5) - { - switch (vals[5].Trim()) - { - case "Direct": navMode = Unk_3971773454.Direct; break; - case "NavMesh": navMode = Unk_3971773454.NavMesh; break; - case "Roads": navMode = Unk_3971773454.Roads; break; - } - } - if (vals.Length > 6) - { - var sthash = JenkHash.GenHash(vals[6].Trim().ToLowerInvariant()); - stype = stypes?.GetScenarioType(sthash) ?? defaulttype; - } - if (vals.Length > 7) - { - var mshash = JenkHash.GenHash(vals[7].Trim().ToLowerInvariant()); - modelset = stypes?.GetPedModelSet(mshash) ?? null; - if (modelset == null) modelset = stypes?.GetVehicleModelSet(mshash) ?? null; - } - if (vals.Length > 8) - { - if (!uint.TryParse(vals[8].Trim(), out flags)) flags = defaultflags; - } - - if (!ok) continue; - - - - thisnode = rgn.AddNode(); - - thisnode.MyPoint.Direction = dir; - thisnode.MyPoint.Type = stype; - thisnode.MyPoint.ModelSet = modelset; - thisnode.MyPoint.Flags = (Unk_700327466)flags; - - thisnode.ChainingNode = new MCScenarioChainingNode(); - thisnode.ChainingNode.ScenarioNode = thisnode; - thisnode.ChainingNode.Chain = chain; - thisnode.ChainingNode.Type = stype; - thisnode.ChainingNode.TypeHash = stype?.NameHash ?? 0; - thisnode.ChainingNode.NotLast = (i < (lines.Length - 1)); - thisnode.ChainingNode.NotFirst = (lastnode != null); - - thisnode.SetPosition(pos); - thisnode.Orientation = thisnode.MyPoint.Orientation; - - paths.AddNode(thisnode.ChainingNode); - - - if (lastnode != null) - { - var edge = new MCScenarioChainingEdge(); - - edge.NodeFrom = lastnode.ChainingNode; - edge.NodeTo = thisnode.ChainingNode; - edge.NodeIndexFrom = (ushort)lastnode.ChainingNode.NodeIndex; - edge.NodeIndexTo = (ushort)thisnode.ChainingNode.NodeIndex; - - edge.Action = action; - edge.NavMode = navMode; - edge.NavSpeed = navSpeed; - - paths.AddEdge(edge); - chain.AddEdge(edge); - - lastedge = edge; - } - - - lastnode = thisnode; - } - - - - - - - LoadProjectTree(); - - if (lastnode != null) - { - TrySelectScenarioNodeTreeNode(lastnode); - CurrentScenarioNode = lastnode; - } - - CurrentScenarioChainEdge = lastedge; - LoadScenarioChainTabPage(); - //LoadScenarioTabPage(); - //LoadScenarioNodeTabPages(); - - - if (WorldForm != null) - { - WorldForm.UpdateScenarioGraphics(CurrentScenario, false); - } - else - { - CurrentScenario.ScenarioRegion.BuildBVH(); - CurrentScenario.ScenarioRegion.BuildVertices(); //for the graphics... - } - - - } - - - - - - - - - - - - - - - private void ImportMenyooXml() - { - if (CurrentProjectFile == null) - { - NewProject(); - } - - var xmlpath = ShowOpenDialog("XML Files|*.xml", string.Empty); - - if (string.IsNullOrEmpty(xmlpath)) return; - - - var xmlstr = string.Empty; - try - { - xmlstr = File.ReadAllText(xmlpath); - } - catch (Exception ex) - { - MessageBox.Show("Error loading file!\n" + ex.ToString()); - } - - if (string.IsNullOrEmpty(xmlstr)) return; - - var finf = new FileInfo(xmlpath); - - MenyooXml menyooXml = new MenyooXml(); - menyooXml.FilePath = xmlpath; - menyooXml.FileName = finf.Name; - menyooXml.Name = Path.GetFileNameWithoutExtension(finf.Name); - menyooXml.Init(xmlstr); - - - - string fname = menyooXml.Name + ".ymap"; - lock (ymapsyncroot) - { - YmapFile ymap = CurrentProjectFile.AddYmapFile(fname); - if (ymap != null) - { - ymap.Loaded = true; - ymap.HasChanged = true; //new ymap, flag as not saved - ymap._CMapData.contentFlags = 65; //stream flags value - } - CurrentYmapFile = ymap; - } - - CurrentProjectFile.HasChanged = true; - - - int pedcount = 0; - int carcount = 0; - int entcount = 0; - int unkcount = 0; - - foreach (var placement in menyooXml.Placements) - { - if (placement.Type == 1) - { - pedcount++; - } - else if (placement.Type == 2) - { - CCarGen ccg = new CCarGen(); - var rotq = Quaternion.Invert(new Quaternion(placement.Rotation)); - Vector3 cdir = rotq.Multiply(new Vector3(0, 5, 0)); - ccg.flags = 3680; - ccg.orientX = cdir.X; - ccg.orientY = cdir.Y; - ccg.perpendicularLength = 2.6f; - ccg.position = placement.Position; - ccg.carModel = placement.ModelHash; - - YmapCarGen cg = new YmapCarGen(CurrentYmapFile, ccg); - - if (WorldForm != null) - { - lock (WorldForm.RenderSyncRoot) //don't try to do this while rendering... - { - CurrentYmapFile.AddCarGen(cg); - } - } - else - { - CurrentYmapFile.AddCarGen(cg); - } - - carcount++; - } - else if (placement.Type == 3) //standard entity - { - CEntityDef cent = new CEntityDef(); - cent.archetypeName = placement.ModelHash; - cent.position = placement.Position; - cent.rotation = placement.Rotation; - cent.scaleXY = 1.0f; - cent.scaleZ = 1.0f; - cent.flags = placement.Dynamic ? 32u : 0;// 1572872; //? - cent.parentIndex = -1; - cent.lodDist = placement.LodDistance; - cent.lodLevel = Unk_1264241711.LODTYPES_DEPTH_ORPHANHD; - cent.priorityLevel = Unk_648413703.PRI_REQUIRED; - cent.ambientOcclusionMultiplier = 255; - cent.artificialAmbientOcclusion = 255; - - YmapEntityDef ent = new YmapEntityDef(CurrentYmapFile, 0, ref cent); - - ent.SetArchetype(GameFileCache.GetArchetype(cent.archetypeName)); - - if (WorldForm != null) - { - lock (WorldForm.RenderSyncRoot) //don't try to do this while rendering... - { - CurrentYmapFile.AddEntity(ent); - } - } - else - { - CurrentYmapFile.AddEntity(ent); - } - - entcount++; - } - else - { - unkcount++; - } - } - - - LoadProjectTree(); - - - - CalcYmapFlags(); - - CalcYmapExtents(); - - - MessageBox.Show(entcount.ToString() + " entities imported. \n" + carcount.ToString() + " car generators imported. \n" + pedcount.ToString() + " peds ignored. \n" + unkcount.ToString() + " others ignored."); - - } - - - - - - - - - - - - - - - - - public void GetVisibleYmaps(Camera camera, Dictionary ymaps) - { - if (hidegtavmap) - { - ymaps.Clear(); //remove all the gtav ymaps. - } - - if (renderentities && (CurrentProjectFile != null)) - { - lock (ymapsyncroot) - { - for (int i = 0; i < CurrentProjectFile.YmapFiles.Count; i++) - { - var ymap = CurrentProjectFile.YmapFiles[i]; - if (ymap.Loaded) - { - ymaps[ymap._CMapData.name] = ymap; - } - } - } - } - - } - - public void GetVisibleCollisionMeshes(Camera camera, List items) - { - //eventually will need to change this to use a list of Ybn's... - if (hidegtavmap) - { - items.Clear(); - } - } - - public void GetVisibleWaterQuads(Camera camera, List quads) - { - if (hidegtavmap) - { - quads.Clear(); - } - - } - - public void GetVisibleYnds(Camera camera, List ynds) - { - if (hidegtavmap) - { - ynds.Clear(); - } - - if (CurrentProjectFile == null) return; - - lock (yndsyncroot) - { - visibleynds.Clear(); - for (int i = 0; i < ynds.Count; i++) - { - var ynd = ynds[i]; - visibleynds[ynd.AreaID] = ynd; - } - - for (int i = 0; i < CurrentProjectFile.YndFiles.Count; i++) - { - var ynd = CurrentProjectFile.YndFiles[i]; - if (ynd.Loaded) - { - visibleynds[ynd.AreaID] = ynd; - } - } - - ynds.Clear(); - foreach (var ynd in visibleynds.Values) - { - ynds.Add(ynd); - } - } - - } - - public void GetVisibleYnvs(Camera camera, List ynvs) - { - if (hidegtavmap) - { - ynvs.Clear(); - } - - if (CurrentProjectFile == null) return; - - lock (ynvsyncroot) - { - visibleynvs.Clear(); - for (int i = 0; i < ynvs.Count; i++) - { - var ynv = ynvs[i]; - visibleynvs[ynv.AreaID] = ynv; - } - - for (int i = 0; i < CurrentProjectFile.YnvFiles.Count; i++) - { - var ynv = CurrentProjectFile.YnvFiles[i]; - if (ynv.Loaded) - { - visibleynvs[ynv.AreaID] = ynv; - } - } - - ynvs.Clear(); - foreach (var ynv in visibleynvs.Values) - { - ynvs.Add(ynv); - } - } - - } - - public void GetVisibleTrainTracks(Camera camera, List tracks) - { - if (hidegtavmap) - { - tracks.Clear(); - } - - - if (CurrentProjectFile == null) return; - - lock (trainsyncroot) - { - visibletrains.Clear(); - for (int i = 0; i < tracks.Count; i++) - { - var track = tracks[i]; - visibletrains[track.Name] = track; - } - - for (int i = 0; i < CurrentProjectFile.TrainsFiles.Count; i++) - { - var track = CurrentProjectFile.TrainsFiles[i]; - if (track.Loaded) - { - visibletrains[track.Name] = track; - } - } - - tracks.Clear(); - foreach (var track in visibletrains.Values) - { - tracks.Add(track); - } - } - - } - - public void GetVisibleScenarios(Camera camera, List ymts) - { - if (hidegtavmap) - { - ymts.Clear(); - } - - - if (CurrentProjectFile == null) return; - - lock (scenariosyncroot) - { - visiblescenarios.Clear(); - for (int i = 0; i < ymts.Count; i++) - { - var ymt = ymts[i]; - visiblescenarios[ymt.Name] = ymt; - } - - for (int i = 0; i < CurrentProjectFile.ScenarioFiles.Count; i++) - { - var scenario = CurrentProjectFile.ScenarioFiles[i]; - if (scenario.Loaded) - { - visiblescenarios[scenario.Name] = scenario; - } - } - - ymts.Clear(); - foreach (var ymt in visiblescenarios.Values) - { - ymts.Add(ymt); - } - } - - } - - - - public void OnWorldSelectionChanged(MapSelection sel) - { - try - { - if (InvokeRequired) - { - BeginInvoke(new Action(() => { OnWorldSelectionChanged(sel); })); - } - else - { - var ent = sel.EntityDef; - var cargen = sel.CarGenerator; - var pathnode = sel.PathNode; - var pathlink = sel.PathLink; - var navpoly = sel.NavPoly; - var trainnode = sel.TrainTrackNode; - var scenariond = sel.ScenarioNode; - YmapFile ymap = ent?.Ymap; - YndFile ynd = pathnode?.Ynd; - YnvFile ynv = navpoly?.Ynv; - TrainTrack traintrack = trainnode?.Track; - YmtFile scenario = scenariond?.Ymt; - - if (cargen != null) - { - ymap = cargen.Ymap; - } - - if (YmapExistsInProject(ymap)) - { - if (ent != CurrentEntity) - { - TrySelectEntityTreeNode(ent); - } - if (cargen != CurrentCarGen) - { - TrySelectCarGenTreeNode(cargen); - } - } - else if (YndExistsInProject(ynd)) - { - if (pathnode != CurrentPathNode) - { - TrySelectPathNodeTreeNode(pathnode); - } - } - else if (YnvExistsInProject(ynv)) - { - if (navpoly != CurrentNavPoly) - { - TrySelectNavPolyTreeNode(navpoly); - } - } - else if (TrainTrackExistsInProject(traintrack)) - { - if (trainnode != CurrentTrainNode) - { - TrySelectTrainNodeTreeNode(trainnode); - } - } - else if (ScenarioExistsInProject(scenario)) - { - if ((scenariond != null) && (scenariond != CurrentScenarioNode)) - { - TrySelectScenarioNodeTreeNode(scenariond); - } - } - else - { - ProjectTreeView.SelectedNode = null; - if (ymap != null) - { - MainTabControl.SelectedTab = YmapTabPage; - } - else if (ynd != null) - { - MainTabControl.SelectedTab = YndTabPage; - } - else if (ynv != null) - { - MainTabControl.SelectedTab = YnvTabPage; - } - else if (traintrack != null) - { - MainTabControl.SelectedTab = TrainsTabPage; - } - else if (scenario != null) - { - MainTabControl.SelectedTab = ScenarioTabPage; - } - if (ent != null) - { - YmapTabControl.SelectedTab = YmapEntityTabPage; - } - else if (cargen != null) - { - YmapTabControl.SelectedTab = YmapCarGenTabPage; - } - if (pathnode != null) - { - YndTabControl.SelectedTab = YndNodeTabPage; - } - if (trainnode != null) - { - TrainsTabControl.SelectedTab = TrainNodeTabPage; - } - if (scenariond != null) - { - SelectScenarioNodeTabPages(scenariond); - } - } - - CurrentYmapFile = ymap; - CurrentEntity = ent; - CurrentCarGen = cargen; - CurrentYndFile = ynd; - CurrentPathNode = pathnode; - CurrentPathLink = pathlink; - CurrentYnvFile = ynv; - CurrentNavPoly = navpoly; - CurrentTrainTrack = traintrack; - CurrentTrainNode = trainnode; - CurrentScenario = scenario; - CurrentScenarioNode = scenariond; - RefreshUI(); - } - } - catch { } - } - - public void OnWorldSelectionModified(MapSelection sel, List items) - { - if (sel.MultipleSelection) - { - } - else if (sel.EntityDef != null) - { - OnWorldEntityModified(sel.EntityDef); - } - else if (sel.CarGenerator != null) - { - OnWorldCarGenModified(sel.CarGenerator); - } - else if (sel.PathNode != null) - { - OnWorldPathNodeModified(sel.PathNode, sel.PathLink); - } - else if (sel.NavPoly != null) - { - OnWorldNavPolyModified(sel.NavPoly); - } - else if (sel.TrainTrackNode != null) - { - OnWorldTrainNodeModified(sel.TrainTrackNode); - } - else if (sel.ScenarioNode != null) - { - OnWorldScenarioNodeModified(sel.ScenarioNode); - } - - } - - private void OnWorldEntityModified(YmapEntityDef ent) - { - try - { - if (InvokeRequired) - { - BeginInvoke(new Action(() => { OnWorldEntityModified(ent); })); - } - else - { - if ((ent.Ymap == null) || (ent.MloParent != null)) - { - return;//TODO: properly handle interior entities! - } - - if (CurrentProjectFile == null) - { - NewProject(); - } - - if (!YmapExistsInProject(ent.Ymap)) - { - ent.Ymap.HasChanged = true; - AddYmapToProject(ent.Ymap); - TrySelectEntityTreeNode(ent); - } - - if (ent != CurrentEntity) - { - CurrentEntity = ent; - TrySelectEntityTreeNode(ent); - } - - if (ent == CurrentEntity) - { - LoadEntityTabPage(); - - if (ent.Ymap != null) - { - SetYmapHasChanged(true); - } - } - } - } - catch { } - } - - private void OnWorldCarGenModified(YmapCarGen cargen) - { - try - { - if (InvokeRequired) - { - BeginInvoke(new Action(() => { OnWorldCarGenModified(cargen); })); - } - else - { - if (cargen?.Ymap == null) return; - - if (CurrentProjectFile == null) - { - NewProject(); - } - - if (!YmapExistsInProject(cargen.Ymap)) - { - cargen.Ymap.HasChanged = true; - AddYmapToProject(cargen.Ymap); - TrySelectCarGenTreeNode(cargen); - } - - if (cargen != CurrentCarGen) - { - CurrentCarGen = cargen; - TrySelectCarGenTreeNode(cargen); - } - - if (cargen == CurrentCarGen) - { - LoadCarGenTabPage(); - - UpdateCarGenTreeNode(cargen); - - if (cargen.Ymap != null) - { - SetYmapHasChanged(true); - } - } - - } - } - catch { } - } - - private void OnWorldPathNodeModified(YndNode node, YndLink link) - { - try - { - if (InvokeRequired) - { - BeginInvoke(new Action(() => { OnWorldPathNodeModified(node, link); })); - } - else - { - if (node?.Ynd == null) return; - - if (CurrentProjectFile == null) - { - NewProject(); - } - - if (!YndExistsInProject(node.Ynd)) - { - node.Ynd.HasChanged = true; - AddYndToProject(node.Ynd); - TrySelectPathNodeTreeNode(node); - } - - if (node != CurrentPathNode) - { - CurrentPathNode = node; - TrySelectPathNodeTreeNode(node); - } - - //if (link != CurrentPathLink) - //{ - // CurrentPathLink = link; - // LoadPathNodeLinkPage(); - //} - - if (node == CurrentPathNode) - { - //LoadYndTabPage(); - LoadPathNodeTabPage(); - - //UpdatePathNodeTreeNode(node); - - if (node.Ynd != null) - { - SetYndHasChanged(true); - } - } - - } - } - catch { } - } - - private void OnWorldNavPolyModified(YnvPoly poly) - { - try - { - if (InvokeRequired) - { - BeginInvoke(new Action(() => { OnWorldNavPolyModified(poly); })); - } - else - { - if (poly?.Ynv == null) return; - - if (CurrentProjectFile == null) - { - NewProject(); - } - - if (!YnvExistsInProject(poly.Ynv)) - { - poly.Ynv.HasChanged = true; - AddYnvToProject(poly.Ynv); - TrySelectNavPolyTreeNode(poly); - } - - if (poly != CurrentNavPoly) - { - CurrentNavPoly = poly; - TrySelectNavPolyTreeNode(poly); - } - - if (poly == CurrentNavPoly) - { - LoadYnvTabPage(); - - //UpdateNavPolyTreeNode(poly); - - if (poly.Ynv != null) - { - SetYnvHasChanged(true); - } - } - - } - } - catch { } - } - - private void OnWorldTrainNodeModified(TrainTrackNode node) - { - try - { - if (InvokeRequired) - { - BeginInvoke(new Action(() => { OnWorldTrainNodeModified(node); })); - } - else - { - if (node?.Track == null) return; - - if (CurrentProjectFile == null) - { - NewProject(); - } - - if (!TrainTrackExistsInProject(node.Track)) - { - node.Track.HasChanged = true; - AddTrainTrackToProject(node.Track); - TrySelectTrainNodeTreeNode(node); - } - - if (node != CurrentTrainNode) - { - CurrentTrainNode = node; - TrySelectTrainNodeTreeNode(node); - } - - if (node == CurrentTrainNode) - { - LoadTrainNodeTabPage(); - - if (node.Track != null) - { - SetTrainTrackHasChanged(true); - } - } - } - } - catch { } - } - - private void OnWorldScenarioNodeModified(ScenarioNode node) - { - try - { - if (InvokeRequired) - { - BeginInvoke(new Action(() => { OnWorldScenarioNodeModified(node); })); - } - else - { - if (node?.Ymt == null) return; - - if (CurrentProjectFile == null) - { - NewProject(); - } - - if (!ScenarioExistsInProject(node.Ymt)) - { - node.Ymt.HasChanged = true; - AddScenarioToProject(node.Ymt); - TrySelectScenarioNodeTreeNode(node); - } - - if (node != CurrentScenarioNode) - { - CurrentScenarioNode = node; - TrySelectScenarioNodeTreeNode(node); - } - - if (node == CurrentScenarioNode) - { - LoadScenarioTabPage(); - LoadScenarioNodeTabPages(); - - if (node?.Ymt != null) - { - SetScenarioHasChanged(true); - } - } - } - } - catch { } - } - - - - - - - - - - - private bool IsBitSet(uint value, int bit) - { - return (((value >> bit) & 1) > 0); - } - private uint SetBit(uint value, int bit) - { - return (value | (1u << bit)); - } - private uint ClearBit(uint value, int bit) - { - return (value & (~(1u << bit))); - } - private uint UpdateBit(uint value, int bit, bool flag) - { - if (flag) return SetBit(value, bit); - else return ClearBit(value, bit); - } - - - private string ShowOpenDialog(string filter, string filename) - { - OpenFileDialog.FileName = filename; - OpenFileDialog.Filter = filter; - OpenFileDialog.Multiselect = false; - if (OpenFileDialog.ShowDialog(this) != DialogResult.OK) - { - return string.Empty; - } - return OpenFileDialog.FileName; - } - private string[] ShowOpenDialogMulti(string filter, string filename) - { - OpenFileDialog.FileName = filename; - OpenFileDialog.Filter = filter; - OpenFileDialog.Multiselect = true; - if (OpenFileDialog.ShowDialog(this) != DialogResult.OK) - { - return null; - } - return OpenFileDialog.FileNames; - } - - private string ShowSaveDialog(string filter, string filename) - { - SaveFileDialog.FileName = filename; - SaveFileDialog.Filter = filter; - if (SaveFileDialog.ShowDialog(this) != DialogResult.OK) - { - return string.Empty; - } - return SaveFileDialog.FileName; - } - - - - - - - - private RpfFileEntry FindParentYmapEntry(uint hash) - { - if (CurrentProjectFile != null) - { - foreach (var ymap in CurrentProjectFile.YmapFiles) - { - if ((ymap._CMapData.name.Hash == hash) || (JenkHash.GenHash(Path.GetFileNameWithoutExtension(ymap.Name)) == hash)) - { - return ymap.RpfFileEntry; - } - } - } - - if ((GameFileCache != null) && (GameFileCache.IsInited)) - { - return GameFileCache.GetYmapEntry(hash); - } - - return null; - } - - private bool YmapExistsInProject(YmapFile ymap) - { - if (ymap == null) return false; - if (CurrentProjectFile == null) return false; - return CurrentProjectFile.ContainsYmap(ymap); - } - private bool YndExistsInProject(YndFile ynd) - { - if (ynd == null) return false; - if (CurrentProjectFile == null) return false; - return CurrentProjectFile.ContainsYnd(ynd); - } - private bool YnvExistsInProject(YnvFile ynv) - { - if (ynv == null) return false; - if (CurrentProjectFile == null) return false; - return CurrentProjectFile.ContainsYnv(ynv); - } - private bool TrainTrackExistsInProject(TrainTrack track) - { - if (track == null) return false; - if (CurrentProjectFile == null) return false; - return CurrentProjectFile.ContainsTrainTrack(track); - } - private bool ScenarioExistsInProject(YmtFile ymt) - { - if (ymt == null) return false; - if (CurrentProjectFile == null) return false; - return CurrentProjectFile.ContainsScenario(ymt); - } - - private TreeNode GetChildTreeNode(TreeNode node, string name) - { - if (node == null) return null; - var nodes = node.Nodes.Find(name, false); - if ((nodes == null) || (nodes.Length != 1)) return null; - return nodes[0]; - } - private TreeNode FindYmapTreeNode(YmapFile ymap) - { - if (ProjectTreeView.Nodes.Count <= 0) return null; - var projnode = ProjectTreeView.Nodes[0]; - var ymapsnode = GetChildTreeNode(projnode, "Ymap"); - if (ymapsnode == null) return null; - for (int i = 0; i < ymapsnode.Nodes.Count; i++) - { - var ymapnode = ymapsnode.Nodes[i]; - if (ymapnode.Tag == ymap) return ymapnode; - } - return null; - } - private TreeNode FindEntityTreeNode(YmapEntityDef ent) - { - if (ent == null) return null; - TreeNode ymapnode = FindYmapTreeNode(ent.Ymap); - if (ymapnode == null) return null; - var entsnode = GetChildTreeNode(ymapnode, "Entities"); - if (entsnode == null) return null; - for (int i = 0; i < entsnode.Nodes.Count; i++) - { - TreeNode entnode = entsnode.Nodes[i]; - if (entnode.Tag == ent) return entnode; - } - return null; - } - private TreeNode FindCarGenTreeNode(YmapCarGen cargen) - { - if (cargen == null) return null; - TreeNode ymapnode = FindYmapTreeNode(cargen.Ymap); - if (ymapnode == null) return null; - var cargensnode = GetChildTreeNode(ymapnode, "CarGens"); - if (cargensnode == null) return null; - for (int i = 0; i < cargensnode.Nodes.Count; i++) - { - TreeNode cargennode = cargensnode.Nodes[i]; - if (cargennode.Tag == cargen) return cargennode; - } - return null; - } - private TreeNode FindYndTreeNode(YndFile ynd) - { - if (ProjectTreeView.Nodes.Count <= 0) return null; - var projnode = ProjectTreeView.Nodes[0]; - var yndsnode = GetChildTreeNode(projnode, "Ynd"); - if (yndsnode == null) return null; - for (int i = 0; i < yndsnode.Nodes.Count; i++) - { - var yndnode = yndsnode.Nodes[i]; - if (yndnode.Tag == ynd) return yndnode; - } - return null; - } - private TreeNode FindPathNodeTreeNode(YndNode n) - { - if (n == null) return null; - TreeNode yndnode = FindYndTreeNode(n.Ynd); - var nodesnode = GetChildTreeNode(yndnode, "Nodes"); - if (nodesnode == null) return null; - for (int i = 0; i < nodesnode.Nodes.Count; i++) - { - TreeNode nnode = nodesnode.Nodes[i]; - if (nnode.Tag == n) return nnode; - } - return null; - } - private TreeNode FindYnvTreeNode(YnvFile ynv) - { - if (ProjectTreeView.Nodes.Count <= 0) return null; - var projnode = ProjectTreeView.Nodes[0]; - var ynvsnode = GetChildTreeNode(projnode, "Ynv"); - if (ynvsnode == null) return null; - for (int i = 0; i < ynvsnode.Nodes.Count; i++) - { - var yndnode = ynvsnode.Nodes[i]; - if (yndnode.Tag == ynv) return yndnode; - } - return null; - } - private TreeNode FindNavPolyTreeNode(YnvPoly p) - { - if (p == null) return null; - TreeNode ynvnode = FindYnvTreeNode(p.Ynv); - var polysnode = GetChildTreeNode(ynvnode, "Polygons"); - if (polysnode == null) return null; - for (int i = 0; i < polysnode.Nodes.Count; i++) - { - TreeNode pnode = polysnode.Nodes[i]; - if (pnode.Tag == p) return pnode; - } - return null; - } - private TreeNode FindTrainTrackTreeNode(TrainTrack track) - { - if (ProjectTreeView.Nodes.Count <= 0) return null; - var projnode = ProjectTreeView.Nodes[0]; - var trainsnode = GetChildTreeNode(projnode, "Trains"); - if (trainsnode == null) return null; - for (int i = 0; i < trainsnode.Nodes.Count; i++) - { - var trainnode = trainsnode.Nodes[i]; - if (trainnode.Tag == track) return trainnode; - } - return null; - } - private TreeNode FindTrainNodeTreeNode(TrainTrackNode n) - { - if (n == null) return null; - TreeNode tracknode = FindTrainTrackTreeNode(n.Track); - var nodesnode = GetChildTreeNode(tracknode, "Nodes"); - if (nodesnode == null) return null; - for (int i = 0; i < nodesnode.Nodes.Count; i++) - { - TreeNode nnode = nodesnode.Nodes[i]; - if (nnode.Tag == n) return nnode; - } - return null; - } - private TreeNode FindScenarioTreeNode(YmtFile ymt) - { - if (ProjectTreeView.Nodes.Count <= 0) return null; - var projnode = ProjectTreeView.Nodes[0]; - var scenariosnode = GetChildTreeNode(projnode, "Scenarios"); - if (scenariosnode == null) return null; - for (int i = 0; i < scenariosnode.Nodes.Count; i++) - { - var ymtnode = scenariosnode.Nodes[i]; - if (ymtnode.Tag == ymt) return ymtnode; - } - return null; - } - private TreeNode FindScenarioNodeTreeNode(ScenarioNode p) - { - if (p == null) return null; - TreeNode ymtnode = FindScenarioTreeNode(p.Ymt); - var pointsnode = GetChildTreeNode(ymtnode, "Points"); - if (pointsnode == null) return null; - for (int i = 0; i < pointsnode.Nodes.Count; i++) - { - TreeNode pnode = pointsnode.Nodes[i]; - if (pnode.Tag == p) return pnode; - } - return null; - } - - - private void TrySelectEntityTreeNode(YmapEntityDef ent) - { - TreeNode entnode = FindEntityTreeNode(ent); - if (entnode != null) - { - ProjectTreeView.SelectedNode = entnode; - } - } - - private void TrySelectCarGenTreeNode(YmapCarGen cargen) - { - TreeNode cargennode = FindCarGenTreeNode(cargen); - if (cargennode != null) - { - ProjectTreeView.SelectedNode = cargennode; - } - } - private void UpdateCarGenTreeNode(YmapCarGen cargen) - { - var tn = FindCarGenTreeNode(cargen); - if (tn != null) - { - tn.Text = cargen.ToString(); - } - } - - private void TrySelectPathNodeTreeNode(YndNode node) - { - TreeNode tnode = FindPathNodeTreeNode(node); - if (tnode == null) - { - tnode = FindYndTreeNode(node?.Ynd); - } - if (tnode != null) - { - ProjectTreeView.SelectedNode = tnode; - } - } - private void UpdatePathNodeTreeNode(YndNode node) - { - var tn = FindPathNodeTreeNode(node); - if (tn != null) - { - tn.Text = node._RawData.ToString(); - } - } - - private void TrySelectNavPolyTreeNode(YnvPoly poly) - { - TreeNode tnode = FindNavPolyTreeNode(poly); - if (tnode == null) - { - tnode = FindYnvTreeNode(poly?.Ynv); - } - if (tnode != null) - { - ProjectTreeView.SelectedNode = tnode; - } - } - private void UpdateNavPolyTreeNode(YnvPoly poly) - { - var tn = FindNavPolyTreeNode(poly); - if (tn != null) - { - tn.Text = poly._RawData.ToString(); - } - } - - private void TrySelectTrainNodeTreeNode(TrainTrackNode node) - { - TreeNode tnode = FindTrainNodeTreeNode(node); - if (tnode == null) - { - tnode = FindTrainTrackTreeNode(node?.Track); - } - if (tnode != null) - { - ProjectTreeView.SelectedNode = tnode; - } - } - private void UpdateTrainNodeTreeNode(TrainTrackNode node) - { - var tn = FindTrainNodeTreeNode(node); - if (tn != null) - { - tn.Text = node.ToString(); - } - } - - private void TrySelectScenarioTreeNode(YmtFile scenario) - { - TreeNode tnode = FindScenarioTreeNode(scenario); - if (tnode != null) - { - ProjectTreeView.SelectedNode = tnode; - } - } - private void TrySelectScenarioNodeTreeNode(ScenarioNode node) - { - TreeNode tnode = FindScenarioNodeTreeNode(node); - if (tnode == null) - { - tnode = FindScenarioTreeNode(node?.Ymt); - } - if (tnode != null) - { - ProjectTreeView.SelectedNode = tnode; - } - } - private void UpdateScenarioNodeTreeNode(ScenarioNode node) - { - var tn = FindScenarioNodeTreeNode(node); - if (tn != null) - { - tn.Text = node.MedTypeName + ": " + node.StringText; - } - } - - - - - private void ProjectForm_FormClosing(object sender, FormClosingEventArgs e) - { - CloseProject(); - } - - private void ProjectForm_FormClosed(object sender, FormClosedEventArgs e) - { - if (WorldForm != null) - { - WorldForm.OnProjectFormClosed(); - } - } - - - private void FileNewProjectMenu_Click(object sender, EventArgs e) - { - NewProject(); - } - - private void FileNewYmapMenu_Click(object sender, EventArgs e) - { - NewYmap(); - } - - private void FileNewYndMenu_Click(object sender, EventArgs e) - { - NewYnd(); - } - - private void FileNewYnvMenu_Click(object sender, EventArgs e) - { - NewYnv(); - } - - private void FileNewTrainsMenu_Click(object sender, EventArgs e) - { - NewTrainTrack(); - } - - private void FileNewScenarioMenu_Click(object sender, EventArgs e) - { - NewScenario(); - } - - private void FileOpenProjectMenu_Click(object sender, EventArgs e) - { - if (CurrentProjectFile != null) - { - ////unload current project first? - //if (MessageBox.Show("Close the current project and open an existing one?", "Confirm close project", MessageBoxButtons.YesNo) != DialogResult.Yes) - //{ - // return; - //} - CloseProject(); - } - - OpenProject(); - } - - private void FileOpenYmapMenu_Click(object sender, EventArgs e) - { - OpenYmap(); - } - - private void FileOpenYndMenu_Click(object sender, EventArgs e) - { - OpenYnd(); - } - - private void FileOpenYnvMenu_Click(object sender, EventArgs e) - { - OpenYnv(); - } - - private void FileOpenTrainsMenu_Click(object sender, EventArgs e) - { - OpenTrainTrack(); - } - - private void FileOpenScenarioMenu_Click(object sender, EventArgs e) - { - OpenScenario(); - } - - private void FileCloseProjectMenu_Click(object sender, EventArgs e) - { - CloseProject(); - } - - private void FileSaveProjectMenu_Click(object sender, EventArgs e) - { - SaveProject(false); - } - - private void FileSaveProjectAsMenu_Click(object sender, EventArgs e) - { - SaveProject(true); - } - - private void FileSaveItemMenu_Click(object sender, EventArgs e) - { - SaveCurrentItem(false); - } - - private void FileSaveItemAsMenu_Click(object sender, EventArgs e) - { - SaveCurrentItem(true); - } - - private void YmapNewEntityMenu_Click(object sender, EventArgs e) - { - NewEntity(); - } - - private void YmapNewCarGenMenu_Click(object sender, EventArgs e) - { - NewCarGen(); - } - - private void YmapAddToProjectMenu_Click(object sender, EventArgs e) - { - AddYmapToProject(CurrentYmapFile); - } - - private void YmapRemoveFromProjectMenu_Click(object sender, EventArgs e) - { - RemoveYmapFromProject(); - } - - private void YndNewNodeMenu_Click(object sender, EventArgs e) - { - NewPathNode(); - } - - private void YndAddToProjectMenu_Click(object sender, EventArgs e) - { - AddYndToProject(CurrentYndFile); - } - - private void YndRemoveFromProjectMenu_Click(object sender, EventArgs e) - { - RemoveYndFromProject(); - } - - private void YnvNewPolygonMenu_Click(object sender, EventArgs e) - { - NewNavPoly(); - } - - private void YnvAddToProjectMenu_Click(object sender, EventArgs e) - { - //AddYnvToProject(CurrentYnvFile); - } - - private void YnvRemoveFromProjectMenu_Click(object sender, EventArgs e) - { - RemoveYnvFromProject(); - } - - private void TrainsNewNodeMenu_Click(object sender, EventArgs e) - { - NewTrainNode(); - } - - private void TrainsAddToProjectMenu_Click(object sender, EventArgs e) - { - AddTrainTrackToProject(CurrentTrainTrack); - } - - private void TrainsRemoveFromProjectMenu_Click(object sender, EventArgs e) - { - RemoveTrainTrackFromProject(); - } - - private void ScenarioNewPointMenu_Click(object sender, EventArgs e) - { - CurrentScenarioNode = null; - NewScenarioNode(); - } - - private void ScenarioNewPointFromSelectedMenu_Click(object sender, EventArgs e) - { - NewScenarioNode(); - } - - private void ScenarioNewEntityOverrideMenu_Click(object sender, EventArgs e) - { - AddScenarioEntity(); - } - - private void ScenarioNewChainMenu_Click(object sender, EventArgs e) - { - AddScenarioChain(); - } - - private void ScenarioNewClusterMenu_Click(object sender, EventArgs e) - { - AddScenarioCluster(); - } - - private void ScenarioImportChainMenu_Click(object sender, EventArgs e) - { - ImportScenarioChain(); - } - - private void ScenarioAddToProjectMenu_Click(object sender, EventArgs e) - { - AddScenarioToProject(CurrentScenario); - } - - private void ScenarioRemoveFromProjectMenu_Click(object sender, EventArgs e) - { - RemoveScenarioFromProject(); - } - - private void ToolsImportMenyooXmlMenu_Click(object sender, EventArgs e) - { - ImportMenyooXml(); - } - - private void OptionsHideGTAVMapMenu_Click(object sender, EventArgs e) - { - ProjectHideMapCheckBox.Checked = !hidegtavmap; - } - - - - - - - - private void ProjectNameTextBox_TextChanged(object sender, EventArgs e) - { - if (CurrentProjectFile != null) - { - if (CurrentProjectFile.Name != ProjectNameTextBox.Text) - { - CurrentProjectFile.Name = ProjectNameTextBox.Text; - SetProjectHasChanged(true); - } - } - } - - private void ProjectTreeView_AfterSelect(object sender, TreeViewEventArgs e) - { - YmapFile ymap = null; - YmapEntityDef yent = null; - YmapCarGen ycgen = null; - YndFile ynd = null; - YndNode ynode = null; - YnvFile ynv = null; - YnvPoly ypoly = null; - TrainTrack tt = null; - TrainTrackNode ttnode = null; - YmtFile scenario = null; - ScenarioNode scenarionode = null; - object tag = null; - var node = ProjectTreeView.SelectedNode; - if (node != null) - { - tag = node.Tag; - ymap = tag as YmapFile; - yent = tag as YmapEntityDef; - ycgen = tag as YmapCarGen; - ynd = tag as YndFile; - ynode = tag as YndNode; - ynv = tag as YnvFile; - ypoly = tag as YnvPoly; - tt = tag as TrainTrack; - ttnode = tag as TrainTrackNode; - scenario = tag as YmtFile; if ((scenario != null) && (scenario.ScenarioRegion == null)) scenario = null;//incase other types of ymt files make it into the project... - scenarionode = tag as ScenarioNode; - } - - CurrentYmapFile = ymap; - CurrentEntity = yent; - CurrentCarGen = ycgen; - CurrentYndFile = ynd; - CurrentPathNode = ynode; - CurrentYnvFile = ynv; - CurrentNavPoly = ypoly; - CurrentTrainTrack = tt; - CurrentTrainNode = ttnode; - CurrentScenario = scenario; - CurrentScenarioNode = scenarionode; - - if (tag == CurrentProjectFile) - { - MainTabControl.SelectedTab = ProjectTabPage; - } - if (yent != null) - { - CurrentYmapFile = yent.Ymap; - MainTabControl.SelectedTab = YmapTabPage; - YmapTabControl.SelectedTab = YmapEntityTabPage; - } - else if (ycgen != null) - { - CurrentYmapFile = ycgen.Ymap; - MainTabControl.SelectedTab = YmapTabPage; - YmapTabControl.SelectedTab = YmapCarGenTabPage; - } - else if (ymap != null) - { - CurrentYmapFile = ymap; - MainTabControl.SelectedTab = YmapTabPage; - YmapTabControl.SelectedTab = YmapYmapTabPage; - } - if (ynode != null) - { - CurrentYndFile = ynode.Ynd; - MainTabControl.SelectedTab = YndTabPage; - YndTabControl.SelectedTab = YndNodeTabPage; - } - else if (ynd != null) - { - MainTabControl.SelectedTab = YndTabPage; - YndTabControl.SelectedTab = YndYndTabPage; - } - if (ypoly != null) - { - CurrentYnvFile = ypoly.Ynv; - MainTabControl.SelectedTab = YnvTabPage; - YnvTabControl.SelectedTab = YnvPolyTabPage; - } - else if (ynv != null) - { - MainTabControl.SelectedTab = YnvTabPage; - YnvTabControl.SelectedTab = YnvYnvTabPage; - } - if (ttnode != null) - { - CurrentTrainTrack = ttnode.Track; - MainTabControl.SelectedTab = TrainsTabPage; - TrainsTabControl.SelectedTab = TrainNodeTabPage; - } - else if (tt != null) - { - MainTabControl.SelectedTab = TrainsTabPage; - TrainsTabControl.SelectedTab = TrainTrackTabPage; - } - if (scenarionode != null) - { - CurrentScenario = scenarionode.Ymt; - MainTabControl.SelectedTab = ScenarioTabPage; - SelectScenarioNodeTabPages(scenarionode); - } - else if (scenario != null) - { - MainTabControl.SelectedTab = ScenarioTabPage; - ScenarioTabControl.SelectedTab = ScenarioYmtTabPage; - } - - RefreshUI(); - } - - private void ProjectShowEntitiesCheckBox_CheckedChanged(object sender, EventArgs e) - { - renderentities = ProjectShowEntitiesCheckBox.Checked; - } - - private void ProjectHideMapCheckBox_CheckedChanged(object sender, EventArgs e) - { - hidegtavmap = ProjectHideMapCheckBox.Checked; - OptionsHideGTAVMapMenu.Checked = hidegtavmap; - } - - private void ProjectManifestGenerateButton_Click(object sender, EventArgs e) - { - GenerateProjectManifest(); - } - - - - - - - private void YmapNameTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - uint hash = 0; - string name = YmapNameTextBox.Text; - if (!uint.TryParse(name, out hash))//don't re-hash hashes - { - hash = JenkHash.GenHash(name); - JenkIndex.Ensure(name); - } - YmapNameHashLabel.Text = "Hash: " + hash.ToString(); - - if (CurrentYmapFile != null) - { - lock (ymapsyncroot) - { - string ymname = name + ".ymap"; - if (CurrentYmapFile.Name != ymname) - { - CurrentYmapFile.Name = ymname; - CurrentYmapFile._CMapData.name = new MetaHash(hash); - SetYmapHasChanged(true); - } - } - } - } - - private void YmapParentTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - uint hash = 0; - string name = YmapParentTextBox.Text; - if (!uint.TryParse(name, out hash))//don't re-hash hashes - { - hash = JenkHash.GenHash(name); - JenkIndex.Ensure(name); - } - YmapParentHashLabel.Text = "Hash: " + hash.ToString(); - - if (hash != 0) - { - var entry = FindParentYmapEntry(hash); - if (entry == null) - { - YmapParentHashLabel.Text += " (not found!)"; - } - } - - if (CurrentYmapFile != null) - { - lock (ymapsyncroot) - { - if (CurrentYmapFile._CMapData.parent.Hash != hash) - { - CurrentYmapFile._CMapData.parent = new MetaHash(hash); - SetYmapHasChanged(true); - - //TODO: confirm entity parent linkage? - } - } - } - - } - - private void YmapFlagsTextBox_TextChanged(object sender, EventArgs e) - { - SetYmapFlagsFromTextBoxes(); - } - - private void YmapContentFlagsTextBox_TextChanged(object sender, EventArgs e) - { - SetYmapFlagsFromTextBoxes(); - } - - private void YmapCFlagsHDCheckBox_CheckedChanged(object sender, EventArgs e) - { - SetYmapFlagsFromCheckBoxes(); - } - - private void YmapCFlagsLODCheckBox_CheckedChanged(object sender, EventArgs e) - { - SetYmapFlagsFromCheckBoxes(); - } - - private void YmapCFlagsSLOD2CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetYmapFlagsFromCheckBoxes(); - } - - private void YmapCFlagsInteriorCheckBox_CheckedChanged(object sender, EventArgs e) - { - SetYmapFlagsFromCheckBoxes(); - } - - private void YmapCFlagsSLODCheckBox_CheckedChanged(object sender, EventArgs e) - { - SetYmapFlagsFromCheckBoxes(); - } - - private void YmapCFlagsOcclusionCheckBox_CheckedChanged(object sender, EventArgs e) - { - SetYmapFlagsFromCheckBoxes(); - } - - private void YmapCFlagsPhysicsCheckBox_CheckedChanged(object sender, EventArgs e) - { - SetYmapFlagsFromCheckBoxes(); - } - - private void YmapCFlagsLODLightsCheckBox_CheckedChanged(object sender, EventArgs e) - { - SetYmapFlagsFromCheckBoxes(); - } - - private void YmapCFlagsDistLightsCheckBox_CheckedChanged(object sender, EventArgs e) - { - SetYmapFlagsFromCheckBoxes(); - } - - private void YmapCFlagsCriticalCheckBox_CheckedChanged(object sender, EventArgs e) - { - SetYmapFlagsFromCheckBoxes(); - } - - private void YmapCFlagsGrassCheckBox_CheckedChanged(object sender, EventArgs e) - { - SetYmapFlagsFromCheckBoxes(); - } - - private void YmapFlagsScriptedCheckBox_CheckedChanged(object sender, EventArgs e) - { - SetYmapFlagsFromCheckBoxes(); - } - - private void YmapFlagsLODCheckBox_CheckedChanged(object sender, EventArgs e) - { - SetYmapFlagsFromCheckBoxes(); - } - - private void YmapCalculateFlagsButton_Click(object sender, EventArgs e) - { - CalcYmapFlags(); - } - - private void YmapEntitiesExtentsMinTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentYmapFile == null) return; - Vector3 v = FloatUtil.ParseVector3String(YmapEntitiesExtentsMinTextBox.Text); - lock (ymapsyncroot) - { - if (CurrentYmapFile._CMapData.entitiesExtentsMin != v) - { - CurrentYmapFile._CMapData.entitiesExtentsMin = v; - SetYmapHasChanged(true); - } - } - } - - private void YmapEntitiesExtentsMaxTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentYmapFile == null) return; - Vector3 v = FloatUtil.ParseVector3String(YmapEntitiesExtentsMaxTextBox.Text); - lock (ymapsyncroot) - { - if (CurrentYmapFile._CMapData.entitiesExtentsMax != v) - { - CurrentYmapFile._CMapData.entitiesExtentsMax = v; - SetYmapHasChanged(true); - } - } - } - - private void YmapStreamingExtentsMinTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentYmapFile == null) return; - Vector3 v = FloatUtil.ParseVector3String(YmapStreamingExtentsMinTextBox.Text); - lock (ymapsyncroot) - { - if (CurrentYmapFile._CMapData.streamingExtentsMin != v) - { - CurrentYmapFile._CMapData.streamingExtentsMin = v; - SetYmapHasChanged(true); - } - } - } - - private void YmapStreamingExtentsMaxTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentYmapFile == null) return; - Vector3 v = FloatUtil.ParseVector3String(YmapStreamingExtentsMaxTextBox.Text); - lock (ymapsyncroot) - { - if (CurrentYmapFile._CMapData.streamingExtentsMax != v) - { - CurrentYmapFile._CMapData.streamingExtentsMax = v; - SetYmapHasChanged(true); - } - } - } - - private void YmapCalculateExtentsButton_Click(object sender, EventArgs e) - { - CalcYmapExtents(); - } - - private void YmapPhysicsDictionariesTextBox_TextChanged(object sender, EventArgs e) - { - SetYmapPhysicsDictionariesFromTextbox(); - } - - - private void EntityArchetypeTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentEntity == null) return; - uint hash = 0; - string name = EntityArchetypeTextBox.Text; - if (!uint.TryParse(name, out hash))//don't re-hash hashes - { - hash = JenkHash.GenHash(name); - JenkIndex.Ensure(name); - } - EntityArchetypeHashLabel.Text = "Hash: " + hash.ToString(); - - var arch = GameFileCache.GetArchetype(hash); - if (arch == null) - { - EntityArchetypeHashLabel.Text += " (not found)"; - } - - TreeNode tn = FindEntityTreeNode(CurrentEntity); - if (tn != null) - { - tn.Text = name; - } - - if (CurrentEntity != null) - { - lock (ymapsyncroot) - { - CurrentEntity._CEntityDef.archetypeName = new MetaHash(hash); - if (CurrentEntity.Archetype != arch) - { - CurrentEntity.SetArchetype(arch); - SetYmapHasChanged(true); - } - } - } - } - - private void EntityFlagsTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentEntity == null) return; - uint flags = 0; - uint.TryParse(EntityFlagsTextBox.Text, out flags); - populatingui = true; - for (int i = 0; i < EntityFlagsCheckedListBox.Items.Count; i++) - { - var c = ((flags & (1u << i)) > 0); - EntityFlagsCheckedListBox.SetItemCheckState(i, c ? CheckState.Checked : CheckState.Unchecked); - } - populatingui = false; - lock (ymapsyncroot) - { - if (CurrentEntity._CEntityDef.flags != flags) - { - CurrentEntity._CEntityDef.flags = flags; - SetYmapHasChanged(true); - } - } - } - - private void EntityFlagsCheckedListBox_ItemCheck(object sender, ItemCheckEventArgs e) - { - if (populatingui) return; - if (CurrentEntity == null) return; - uint flags = 0; - for (int i = 0; i < EntityFlagsCheckedListBox.Items.Count; i++) - { - if (e.Index == i) - { - if (e.NewValue == CheckState.Checked) - { - flags += (uint)(1 << i); - } - } - else - { - if (EntityFlagsCheckedListBox.GetItemChecked(i)) - { - flags += (uint)(1 << i); - } - } - } - populatingui = true; - EntityFlagsTextBox.Text = flags.ToString(); - populatingui = false; - lock (ymapsyncroot) - { - if (CurrentEntity._CEntityDef.flags != flags) - { - CurrentEntity._CEntityDef.flags = flags; - SetYmapHasChanged(true); - } - } - } - - private void EntityGuidTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentEntity == null) return; - uint guid = 0; - uint.TryParse(EntityGuidTextBox.Text, out guid); - lock (ymapsyncroot) - { - if (CurrentEntity._CEntityDef.guid != guid) - { - CurrentEntity._CEntityDef.guid = guid; - SetYmapHasChanged(true); - } - } - } - - private void EntityPositionTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentEntity == null) return; - Vector3 v = FloatUtil.ParseVector3String(EntityPositionTextBox.Text); - lock (ymapsyncroot) - { - if (CurrentEntity.MloParent != null) - { - //TODO: positioning for interior entities! - } - else - { - if (CurrentEntity.Position != v) - { - CurrentEntity.SetPosition(v); - SetYmapHasChanged(true); - if (WorldForm != null) - { - WorldForm.BeginInvoke(new Action(() => - { - WorldForm.SetWidgetPosition(CurrentEntity.WidgetPosition, true); - })); - } - } - } - } - } - - private void EntityRotationTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentEntity == null) return; - Vector4 v = FloatUtil.ParseVector4String(EntityRotationTextBox.Text); - lock (ymapsyncroot) - { - if (CurrentEntity._CEntityDef.rotation != v) - { - Quaternion q = new Quaternion(v); - CurrentEntity.SetOrientation(q, true); - SetYmapHasChanged(true); - if (WorldForm != null) - { - WorldForm.BeginInvoke(new Action(() => - { - WorldForm.SetWidgetRotation(CurrentEntity.WidgetOrientation, true); - })); - } - } - } - } - - private void EntityScaleXYTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentEntity == null) return; - float sxy = 0; - FloatUtil.TryParse(EntityScaleXYTextBox.Text, out sxy); - lock (ymapsyncroot) - { - if (CurrentEntity.Scale.X != sxy) - { - Vector3 newscale = new Vector3(sxy, sxy, CurrentEntity.Scale.Z); - CurrentEntity.SetScale(newscale); - SetYmapHasChanged(true); - if (WorldForm != null) - { - WorldForm.BeginInvoke(new Action(() => - { - WorldForm.SetWidgetScale(newscale, true); - })); - } - } - } - } - - private void EntityScaleZTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentEntity == null) return; - float sz = 0; - FloatUtil.TryParse(EntityScaleZTextBox.Text, out sz); - lock (ymapsyncroot) - { - if (CurrentEntity.Scale.Z != sz) - { - Vector3 newscale = new Vector3(CurrentEntity.Scale.X, CurrentEntity.Scale.Y, sz); - CurrentEntity.SetScale(newscale); - SetYmapHasChanged(true); - if (WorldForm != null) - { - WorldForm.BeginInvoke(new Action(() => - { - WorldForm.SetWidgetScale(newscale, true); - })); - } - } - } - } - - private void EntityParentIndexTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentEntity == null) return; - int pind = 0; - int.TryParse(EntityParentIndexTextBox.Text, out pind); - lock (ymapsyncroot) - { - if (CurrentEntity._CEntityDef.parentIndex != pind) - { - CurrentEntity._CEntityDef.parentIndex = pind; //Needs more work for LOD linking! - SetYmapHasChanged(true); - } - } - } - - private void EntityLodDistTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentEntity == null) return; - float lodDist = 0; - FloatUtil.TryParse(EntityLodDistTextBox.Text, out lodDist); - lock (ymapsyncroot) - { - if (CurrentEntity._CEntityDef.lodDist != lodDist) - { - CurrentEntity._CEntityDef.lodDist = lodDist; - SetYmapHasChanged(true); - } - } - } - - private void EntityChildLodDistTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentEntity == null) return; - float childLodDist = 0; - FloatUtil.TryParse(EntityChildLodDistTextBox.Text, out childLodDist); - lock (ymapsyncroot) - { - if (CurrentEntity._CEntityDef.childLodDist != childLodDist) - { - CurrentEntity._CEntityDef.childLodDist = childLodDist; - SetYmapHasChanged(true); - } - } - } - - private void EntityLodLevelComboBox_SelectedIndexChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentEntity == null) return; - Unk_1264241711 lodLevel = (Unk_1264241711)EntityLodLevelComboBox.SelectedItem; - lock (ymapsyncroot) - { - if (CurrentEntity._CEntityDef.lodLevel != lodLevel) - { - CurrentEntity._CEntityDef.lodLevel = lodLevel; - SetYmapHasChanged(true); - } - } - } - - private void EntityNumChildrenTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentEntity == null) return; - uint numChildren = 0; - uint.TryParse(EntityNumChildrenTextBox.Text, out numChildren); - lock (ymapsyncroot) - { - if (CurrentEntity._CEntityDef.numChildren != numChildren) - { - CurrentEntity._CEntityDef.numChildren = numChildren; - SetYmapHasChanged(true); - } - } - } - - private void EntityPriorityLevelComboBox_SelectedIndexChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentEntity == null) return; - Unk_648413703 priorityLevel = (Unk_648413703)EntityPriorityLevelComboBox.SelectedItem; - lock (ymapsyncroot) - { - if (CurrentEntity._CEntityDef.priorityLevel != priorityLevel) - { - CurrentEntity._CEntityDef.priorityLevel = priorityLevel; - SetYmapHasChanged(true); - } - } - } - - private void EntityAOMultiplierTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentEntity == null) return; - int aomult = 0; - int.TryParse(EntityAOMultiplierTextBox.Text, out aomult); - lock (ymapsyncroot) - { - if (CurrentEntity._CEntityDef.ambientOcclusionMultiplier != aomult) - { - CurrentEntity._CEntityDef.ambientOcclusionMultiplier = aomult; - SetYmapHasChanged(true); - } - } - } - - private void EntityArtificialAOTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentEntity == null) return; - int artao = 0; - int.TryParse(EntityArtificialAOTextBox.Text, out artao); - lock (ymapsyncroot) - { - if (CurrentEntity._CEntityDef.artificialAmbientOcclusion != artao) - { - CurrentEntity._CEntityDef.artificialAmbientOcclusion = artao; - SetYmapHasChanged(true); - } - } - } - - private void EntityTintValueTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentEntity == null) return; - uint tintValue = 0; - uint.TryParse(EntityTintValueTextBox.Text, out tintValue); - lock (ymapsyncroot) - { - if (CurrentEntity._CEntityDef.tintValue != tintValue) - { - CurrentEntity._CEntityDef.tintValue = tintValue; - SetYmapHasChanged(true); - } - } - } - - private void EntityGoToButton_Click(object sender, EventArgs e) - { - if (CurrentEntity == null) return; - if (WorldForm == null) return; - WorldForm.GoToPosition(CurrentEntity.Position); - } - - private void EntityNormalizeRotationButton_Click(object sender, EventArgs e) - { - Vector4 v = FloatUtil.ParseVector4String(EntityRotationTextBox.Text); - Quaternion q = Quaternion.Normalize(new Quaternion(v)); - EntityRotationTextBox.Text = FloatUtil.GetVector4String(new Vector4(q.X, q.Y, q.Z, q.W)); - } - - private void EntityAddToProjectButton_Click(object sender, EventArgs e) - { - AddEntityToProject(); - } - - private void EntityDeleteButton_Click(object sender, EventArgs e) - { - DeleteEntity(); - } - - private void EntityPivotEditCheckBox_CheckedChanged(object sender, EventArgs e) - { - if (WorldForm != null) - { - WorldForm.EditEntityPivot = EntityPivotEditCheckBox.Checked; - } - } - - private void EntityPivotPositionTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentEntity == null) return; - Vector3 v = FloatUtil.ParseVector3String(EntityPivotPositionTextBox.Text); - lock (ymapsyncroot) - { - if (CurrentEntity.PivotPosition != v) - { - CurrentEntity.SetPivotPosition(v); - //SetYmapHasChanged(true); - if (WorldForm != null) - { - WorldForm.BeginInvoke(new Action(() => - { - bool editpivot = WorldForm.EditEntityPivot; - WorldForm.EditEntityPivot = true; - WorldForm.SetWidgetPosition(CurrentEntity.WidgetPosition, true); - WorldForm.EditEntityPivot = editpivot; - })); - } - } - } - } - - private void EntityPivotRotationTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentEntity == null) return; - Vector4 v = FloatUtil.ParseVector4String(EntityPivotRotationTextBox.Text); - Quaternion q = new Quaternion(v); - lock (ymapsyncroot) - { - if (CurrentEntity.PivotOrientation != q) - { - CurrentEntity.SetPivotOrientation(q); - //SetYmapHasChanged(true); - if (WorldForm != null) - { - WorldForm.BeginInvoke(new Action(() => - { - bool editpivot = WorldForm.EditEntityPivot; - WorldForm.EditEntityPivot = true; - WorldForm.SetWidgetRotation(CurrentEntity.WidgetOrientation, true); - WorldForm.EditEntityPivot = editpivot; - })); - } - } - } - } - - private void EntityPivotRotationNormalizeButton_Click(object sender, EventArgs e) - { - Vector4 v = FloatUtil.ParseVector4String(EntityPivotRotationTextBox.Text); - Quaternion q = Quaternion.Normalize(new Quaternion(v)); - EntityPivotRotationTextBox.Text = FloatUtil.GetVector4String(new Vector4(q.X, q.Y, q.Z, q.W)); - } - - - private void CarModelTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentCarGen == null) return; - uint hash = 0; - string name = CarModelTextBox.Text; - if (!uint.TryParse(name, out hash))//don't re-hash hashes - { - hash = JenkHash.GenHash(name); - JenkIndex.Ensure(name); - } - CarModelHashLabel.Text = "Hash: " + hash.ToString(); - - //var model = GameFileCache.GetCarInfo(hash); //todo: something like this for car info? - //if (model == null) - //{ - // CarModelHashLabel.Text += " (not found)"; - //} - - if (CurrentCarGen != null) - { - lock (ymapsyncroot) - { - var modelhash = new MetaHash(hash); - if (CurrentCarGen._CCarGen.carModel != modelhash) - { - CurrentCarGen._CCarGen.carModel = modelhash; - SetYmapHasChanged(true); - } - } - } - - UpdateCarGenTreeNode(CurrentCarGen); - - } - - private void CarPopGroupTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentCarGen == null) return; - uint hash = 0; - string name = CarPopGroupTextBox.Text; - if (!uint.TryParse(name, out hash))//don't re-hash hashes - { - hash = JenkHash.GenHash(name); - JenkIndex.Ensure(name); - } - CarPopGroupHashLabel.Text = "Hash: " + hash.ToString(); - - //var grp = GameFileCache.GetCarPopGroup(hash); //todo: something like this for popgroup info? - //if (grp == null) - //{ - // CarPopGroupHashLabel.Text += " (not found)"; - //} - - if (CurrentCarGen != null) - { - lock (ymapsyncroot) - { - var pghash = new MetaHash(hash); - if (CurrentCarGen._CCarGen.popGroup != pghash) - { - CurrentCarGen._CCarGen.popGroup = pghash; - SetYmapHasChanged(true); - } - } - } - - UpdateCarGenTreeNode(CurrentCarGen); - } - - private void CarFlagsTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentCarGen == null) return; - uint flags = 0; - uint.TryParse(CarFlagsTextBox.Text, out flags); - populatingui = true; - for (int i = 0; i < CarFlagsCheckedListBox.Items.Count; i++) - { - var c = ((flags & (1u << i)) > 0); - CarFlagsCheckedListBox.SetItemCheckState(i, c ? CheckState.Checked : CheckState.Unchecked); - } - populatingui = false; - lock (ymapsyncroot) - { - if (CurrentCarGen._CCarGen.flags != flags) - { - CurrentCarGen._CCarGen.flags = flags; - SetYmapHasChanged(true); - } - } - } - - private void CarFlagsCheckedListBox_ItemCheck(object sender, ItemCheckEventArgs e) - { - if (populatingui) return; - if (CurrentCarGen == null) return; - uint flags = 0; - for (int i = 0; i < CarFlagsCheckedListBox.Items.Count; i++) - { - if (e.Index == i) - { - if (e.NewValue == CheckState.Checked) - { - flags += (uint)(1 << i); - } - } - else - { - if (CarFlagsCheckedListBox.GetItemChecked(i)) - { - flags += (uint)(1 << i); - } - } - } - populatingui = true; - CarFlagsTextBox.Text = flags.ToString(); - populatingui = false; - lock (ymapsyncroot) - { - if (CurrentCarGen._CCarGen.flags != flags) - { - CurrentCarGen._CCarGen.flags = flags; - SetYmapHasChanged(true); - } - } - } - - private void CarPositionTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentCarGen == null) return; - Vector3 v = FloatUtil.ParseVector3String(CarPositionTextBox.Text); - lock (ymapsyncroot) - { - if (CurrentCarGen.Position != v) - { - CurrentCarGen.SetPosition(v); - SetYmapHasChanged(true); - if (WorldForm != null) - { - WorldForm.SetWidgetPosition(v); - } - } - } - - UpdateCarGenTreeNode(CurrentCarGen); - } - - private void CarOrientXTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentCarGen == null) return; - float ox = FloatUtil.Parse(CarOrientXTextBox.Text); - lock (ymapsyncroot) - { - if (CurrentCarGen._CCarGen.orientX != ox) - { - CurrentCarGen._CCarGen.orientX = ox; - CurrentCarGen.CalcOrientation(); - SetYmapHasChanged(true); - if (WorldForm != null) - { - WorldForm.SetWidgetRotation(CurrentCarGen.Orientation); - } - } - } - } - - private void CarOrientYTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentCarGen == null) return; - float oy = FloatUtil.Parse(CarOrientYTextBox.Text); - lock (ymapsyncroot) - { - if (CurrentCarGen._CCarGen.orientY != oy) - { - CurrentCarGen._CCarGen.orientY = oy; - CurrentCarGen.CalcOrientation(); - SetYmapHasChanged(true); - if (WorldForm != null) - { - WorldForm.SetWidgetRotation(CurrentCarGen.Orientation); - } - } - } - } - - private void CarPerpendicularLengthTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentCarGen == null) return; - float len = FloatUtil.Parse(CarPerpendicularLengthTextBox.Text); - lock (ymapsyncroot) - { - if (CurrentCarGen._CCarGen.perpendicularLength != len) - { - CurrentCarGen.SetLength(len); - SetYmapHasChanged(true); - if (WorldForm != null) - { - WorldForm.SetWidgetScale(new Vector3(len)); - } - } - } - } - - private void CarBodyColorRemap1TextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentCarGen == null) return; - int cr = 0; - int.TryParse(CarBodyColorRemap1TextBox.Text, out cr); - lock (ymapsyncroot) - { - if (CurrentCarGen._CCarGen.bodyColorRemap1 != cr) - { - CurrentCarGen._CCarGen.bodyColorRemap1 = cr; - SetYmapHasChanged(true); - } - } - } - - private void CarBodyColorRemap2TextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentCarGen == null) return; - int cr = 0; - int.TryParse(CarBodyColorRemap2TextBox.Text, out cr); - lock (ymapsyncroot) - { - if (CurrentCarGen._CCarGen.bodyColorRemap2 != cr) - { - CurrentCarGen._CCarGen.bodyColorRemap2 = cr; - SetYmapHasChanged(true); - } - } - } - - private void CarBodyColorRemap3TextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentCarGen == null) return; - int cr = 0; - int.TryParse(CarBodyColorRemap3TextBox.Text, out cr); - lock (ymapsyncroot) - { - if (CurrentCarGen._CCarGen.bodyColorRemap3 != cr) - { - CurrentCarGen._CCarGen.bodyColorRemap3 = cr; - SetYmapHasChanged(true); - } - } - } - - private void CarBodyColorRemap4TextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentCarGen == null) return; - int cr = 0; - int.TryParse(CarBodyColorRemap4TextBox.Text, out cr); - lock (ymapsyncroot) - { - if (CurrentCarGen._CCarGen.bodyColorRemap4 != cr) - { - CurrentCarGen._CCarGen.bodyColorRemap4 = cr; - SetYmapHasChanged(true); - } - } - } - - private void CarLiveryTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentCarGen == null) return; - sbyte cr = 0; - sbyte.TryParse(CarLiveryTextBox.Text, out cr); - lock (ymapsyncroot) - { - if (CurrentCarGen._CCarGen.livery != cr) - { - CurrentCarGen._CCarGen.livery = cr; - SetYmapHasChanged(true); - } - } - UpdateCarGenTreeNode(CurrentCarGen); - } - - private void CarGoToButton_Click(object sender, EventArgs e) - { - if (CurrentCarGen == null) return; - if (WorldForm == null) return; - WorldForm.GoToPosition(CurrentCarGen.Position); - } - - private void CarAddToProjectButton_Click(object sender, EventArgs e) - { - AddCarGenToProject(); - } - - private void CarDeleteButton_Click(object sender, EventArgs e) - { - DeleteCarGen(); - } - - - - - - - - - - private void YndAreaIDUpDownChange() - { - if (populatingui) return; - if (CurrentYndFile == null) return; - int x = (int)YndAreaIDXUpDown.Value; - int y = (int)YndAreaIDYUpDown.Value; - lock (yndsyncroot) - { - var areaid = y * 32 + x; - if (CurrentYndFile.AreaID != areaid) - { - CurrentYndFile.AreaID = areaid; - CurrentYndFile.Name = "nodes" + areaid.ToString() + ".ynd"; - YndAreaIDInfoLabel.Text = "ID: " + areaid.ToString(); - SetYndHasChanged(true); - } - } - } - - private void YndAreaIDXUpDown_ValueChanged(object sender, EventArgs e) - { - YndAreaIDUpDownChange(); - } - - private void YndAreaIDYUpDown_ValueChanged(object sender, EventArgs e) - { - YndAreaIDUpDownChange(); - } - - private void YndVehicleNodesUpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentYndFile == null) return; - if (CurrentYndFile.NodeDictionary == null) return; - lock (yndsyncroot) - { - var vehnodes = (int)YndVehicleNodesUpDown.Value; - if (CurrentYndFile.NodeDictionary.NodesCountVehicle != vehnodes) - { - CurrentYndFile.NodeDictionary.NodesCountVehicle = (uint)vehnodes; - SetYndHasChanged(true); - } - } - } - - private void YndPedNodesUpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentYndFile == null) return; - if (CurrentYndFile.NodeDictionary == null) return; - lock (yndsyncroot) - { - var pednodes = (int)YndPedNodesUpDown.Value; - if (CurrentYndFile.NodeDictionary.NodesCountPed != pednodes) - { - CurrentYndFile.NodeDictionary.NodesCountPed = (uint)pednodes; - SetYndHasChanged(true); - } - } - } - - - private void PathNodeAreaIDUpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentPathNode == null) return; - ushort areaid = (ushort)PathNodeAreaIDUpDown.Value; - lock (yndsyncroot) - { - if (CurrentPathNode.AreaID != areaid) - { - CurrentPathNode.AreaID = areaid; - SetYndHasChanged(true); - } - } - - UpdatePathNodeTreeNode(CurrentPathNode); - } - - private void PathNodeNodeIDUpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentPathNode == null) return; - ushort nodeid = (ushort)PathNodeNodeIDUpDown.Value; - lock (yndsyncroot) - { - if (CurrentPathNode.NodeID != nodeid) - { - CurrentPathNode.NodeID = nodeid; - SetYndHasChanged(true); - } - } - - UpdatePathNodeTreeNode(CurrentPathNode); - } - - private void PathNodePositionTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentPathNode == null) return; - Vector3 v = FloatUtil.ParseVector3String(PathNodePositionTextBox.Text); - bool change = false; - lock (yndsyncroot) - { - if (CurrentPathNode.Position != v) - { - CurrentPathNode.SetPosition(v); - SetYndHasChanged(true); - change = true; - } - } - if (change) - { - if (WorldForm != null) - { - WorldForm.SetWidgetPosition(CurrentPathNode.Position); - WorldForm.UpdatePathNodeGraphics(CurrentPathNode, false); - } - //PathNodePositionTextBox.Text = FloatUtil.GetVector3String(CurrentPathNode.Position); - } - } - - private void PathNodeGoToButton_Click(object sender, EventArgs e) - { - if (CurrentPathNode == null) return; - if (WorldForm == null) return; - WorldForm.GoToPosition(CurrentPathNode.Position); - } - - private void PathNodeAddToProjectButton_Click(object sender, EventArgs e) - { - AddPathNodeToProject(); - } - - private void PathNodeDeleteButton_Click(object sender, EventArgs e) - { - DeletePathNode(); - } - - private void PathNodeStreetHashTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentPathNode == null) return; - uint hash; - uint.TryParse(PathNodeStreetHashTextBox.Text, out hash); - var streetname = GlobalText.TryGetString(hash); - PathNodeStreetNameLabel.Text = "Name: " + ((hash == 0) ? "[None]" : (string.IsNullOrEmpty(streetname) ? "[Not found]" : streetname)); - - lock (yndsyncroot) - { - if (CurrentPathNode.StreetName.Hash != hash) - { - CurrentPathNode.StreetName = hash; - SetYndHasChanged(true); - } - } - - UpdatePathNodeTreeNode(CurrentPathNode); - } - - private void PathNodeFlags0UpDown_ValueChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromUpDowns(); - } - - private void PathNodeFlags1UpDown_ValueChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromUpDowns(); - } - - private void PathNodeFlags2UpDown_ValueChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromUpDowns(); - } - - private void PathNodeFlags3UpDown_ValueChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromUpDowns(); - } - - private void PathNodeFlags4UpDown_ValueChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromUpDowns(); - } - - private void PathNodeFlags5UpDown_ValueChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromUpDowns(); - } - - private void PathNodeFlags01CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - private void PathNodeFlags02CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - private void PathNodeFlags03CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - private void PathNodeFlags04CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - private void PathNodeFlags05CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - private void PathNodeFlags06CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - private void PathNodeFlags07CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - private void PathNodeFlags08CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - private void PathNodeFlags11CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - private void PathNodeFlags12CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - private void PathNodeFlags13CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - private void PathNodeFlags14CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - private void PathNodeFlags15CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - private void PathNodeFlags16CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - private void PathNodeFlags17CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - private void PathNodeFlags18CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - private void PathNodeFlags21CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - private void PathNodeFlags22CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - private void PathNodeFlags23CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - private void PathNodeFlags24CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - private void PathNodeFlags25CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - private void PathNodeFlags26CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - private void PathNodeFlags27CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - private void PathNodeFlags28CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - private void PathNodeFlags31CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - private void PathNodeFlags32UpDown_ValueChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); //treat this one like checkboxes - } - - private void PathNodeFlags51CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - private void PathNodeFlags41CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - private void PathNodeFlags45CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - private void PathNodeFlags46CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - private void PathNodeFlags47CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - private void PathNodeFlags48CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - private void PathNodeFlags42UpDown_ValueChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); //treat this one like checkboxes - } - - private void PathNodeFlags52CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - private void PathNodeFlags53CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeFlagsFromCheckBoxes(); - } - - - private void PathNodeLinksListBox_SelectedIndexChanged(object sender, EventArgs e) - { - CurrentPathLink = PathNodeLinksListBox.SelectedItem as YndLink; - LoadPathNodeLinkPage(); - } - - private void PathNodeAddLinkButton_Click(object sender, EventArgs e) - { - AddPathLink(); - } - - private void PathNodeRemoveLinkButton_Click(object sender, EventArgs e) - { - RemovePathLink(); - } - - private void PathNodeLinkAreaIDUpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentPathLink == null) return; - ushort areaid = (ushort)PathNodeLinkAreaIDUpDown.Value; - bool change = false; - lock (yndsyncroot) - { - if (CurrentPathLink._RawData.AreaID != areaid) - { - CurrentPathLink._RawData.AreaID = areaid; - SetYndHasChanged(true); - change = true; - } - } - if (change) - { - UpdatePathNodeLinkage(); - - //refresh the selected item in the list box, to update the text, and the other controls. - PathNodeLinksListBox.Items[PathNodeLinksListBox.SelectedIndex] = PathNodeLinksListBox.SelectedItem; - } - } - - private void PathNodeLinkNodeIDUpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentPathLink == null) return; - ushort nodeid = (ushort)PathNodeLinkNodeIDUpDown.Value; - bool change = false; - lock (yndsyncroot) - { - if (CurrentPathLink._RawData.NodeID != nodeid) - { - CurrentPathLink._RawData.NodeID = nodeid; - SetYndHasChanged(true); - change = true; - } - } - if (change) - { - UpdatePathNodeLinkage(); - - //refresh the selected item in the list box, to update the text, and the other controls. - PathNodeLinksListBox.Items[PathNodeLinksListBox.SelectedIndex] = PathNodeLinksListBox.SelectedItem; - } - } - - private void PathNodeLinkFlags0UpDown_ValueChanged(object sender, EventArgs e) - { - SetPathNodeLinkFlagsFromUpDowns(); - } - - private void PathNodeLinkFlags1UpDown_ValueChanged(object sender, EventArgs e) - { - SetPathNodeLinkFlagsFromUpDowns(); - } - - private void PathNodeLinkFlags2UpDown_ValueChanged(object sender, EventArgs e) - { - SetPathNodeLinkFlagsFromUpDowns(); - } - - private void PathNodeLinkFlags01CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeLinkFlagsFromCheckBoxes(); - } - - private void PathNodeLinkFlags02CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeLinkFlagsFromCheckBoxes(); - } - - private void PathNodeLinkFlags03UpDown_ValueChanged(object sender, EventArgs e) - { - SetPathNodeLinkFlagsFromCheckBoxes(); - } - - private void PathNodeLinkFlags04UpDown_ValueChanged(object sender, EventArgs e) - { - SetPathNodeLinkFlagsFromCheckBoxes(); - } - - private void PathNodeLinkFlags11CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeLinkFlagsFromCheckBoxes(); - } - - private void PathNodeLinkFlags12CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeLinkFlagsFromCheckBoxes(); - } - - private void PathNodeLinkFlags13CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeLinkFlagsFromCheckBoxes(); - } - - private void PathNodeLinkFlags14CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeLinkFlagsFromCheckBoxes(); - } - - private void PathNodeLinkFlags18CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeLinkFlagsFromCheckBoxes(); - } - - private void PathNodeLinkOffsetSizeUpDown_ValueChanged(object sender, EventArgs e) - { - SetPathNodeLinkFlagsFromCheckBoxes(); - } - - private void PathNodeLinkFlags21CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeLinkFlagsFromCheckBoxes(); - } - - private void PathNodeLinkFlags22CheckBox_CheckedChanged(object sender, EventArgs e) - { - SetPathNodeLinkFlagsFromCheckBoxes(); - } - - private void PathNodeLinkFwdLanesUpDown_ValueChanged(object sender, EventArgs e) - { - SetPathNodeLinkFlagsFromCheckBoxes(); - } - - private void PathNodeLinkBackLanesUpDown_ValueChanged(object sender, EventArgs e) - { - SetPathNodeLinkFlagsFromCheckBoxes(); - } - - private void PathNodeLinkLengthUpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentPathLink == null) return; - byte length = (byte)PathNodeLinkLengthUpDown.Value; - lock (yndsyncroot) - { - if (CurrentPathLink.LinkLength.Value != length) - { - CurrentPathLink.LinkLength = length; - CurrentPathLink._RawData.LinkLength = length; - SetYndHasChanged(true); - } - } - } - - private void PathNodeJunctionEnableCheckBox_CheckedChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentPathNode == null) return; - lock (yndsyncroot) - { - if (CurrentPathNode.HasJunction != PathNodeJunctionEnableCheckBox.Checked) - { - CurrentPathNode.HasJunction = PathNodeJunctionEnableCheckBox.Checked; - if (CurrentPathNode.HasJunction && (CurrentPathNode.Junction == null)) - { - var j = new YndJunction(); - //init new junction - j._RawData.HeightmapDimX = 1; - j._RawData.HeightmapDimY = 1; - j.Heightmap = new YndJunctionHeightmap(new byte[] { 255 }, j); - j.RefData = new NodeJunctionRef() { AreaID = (ushort)CurrentPathNode.AreaID, NodeID = (ushort)CurrentPathNode.NodeID }; - - CurrentPathNode.Junction = j; - } - SetYndHasChanged(true); - } - } - LoadPathNodeJunctionPage(); - } - - private void PathNodeJunctionMaxZUpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentPathNode == null) return; - if (CurrentPathNode.Junction == null) return; - short val = (short)PathNodeJunctionMaxZUpDown.Value; - lock (yndsyncroot) - { - if (CurrentPathNode.Junction.MaxZ != val) - { - CurrentPathNode.Junction.MaxZ = val; - CurrentPathNode.Junction._RawData.MaxZ = val; - SetYndHasChanged(true); - } - } - } - - private void PathNodeJunctionMinZUpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentPathNode == null) return; - if (CurrentPathNode.Junction == null) return; - short val = (short)PathNodeJunctionMinZUpDown.Value; - lock (yndsyncroot) - { - if (CurrentPathNode.Junction.MinZ != val) - { - CurrentPathNode.Junction.MinZ = val; - CurrentPathNode.Junction._RawData.MinZ = val; - SetYndHasChanged(true); - } - } - } - - private void PathNodeJunctionPosXUpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentPathNode == null) return; - if (CurrentPathNode.Junction == null) return; - short val = (short)PathNodeJunctionPosXUpDown.Value; - lock (yndsyncroot) - { - if (CurrentPathNode.Junction.PositionX != val) - { - CurrentPathNode.Junction.PositionX = val; - CurrentPathNode.Junction._RawData.PositionX = val; - SetYndHasChanged(true); - } - } - } - - private void PathNodeJunctionPosYUpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentPathNode == null) return; - if (CurrentPathNode.Junction == null) return; - short val = (short)PathNodeJunctionPosYUpDown.Value; - lock (yndsyncroot) - { - if (CurrentPathNode.Junction.PositionY != val) - { - CurrentPathNode.Junction.PositionY = val; - CurrentPathNode.Junction._RawData.PositionY = val; - SetYndHasChanged(true); - } - } - } - - private void PathNodeJunctionHeightmapDimXUpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentPathNode == null) return; - if (CurrentPathNode.Junction == null) return; - byte val = (byte)PathNodeJunctionHeightmapDimXUpDown.Value; - lock (yndsyncroot) - { - if (CurrentPathNode.Junction._RawData.HeightmapDimX != val) - { - CurrentPathNode.Junction._RawData.HeightmapDimX = val; - CurrentPathNode.Junction.ResizeHeightmap(); - SetYndHasChanged(true); - } - } - LoadPathNodeJunctionPage(); - } - - private void PathNodeJunctionHeightmapDimYUpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentPathNode == null) return; - if (CurrentPathNode.Junction == null) return; - byte val = (byte)PathNodeJunctionHeightmapDimYUpDown.Value; - lock (yndsyncroot) - { - if (CurrentPathNode.Junction._RawData.HeightmapDimY != val) - { - CurrentPathNode.Junction._RawData.HeightmapDimY = val; - CurrentPathNode.Junction.ResizeHeightmap(); - SetYndHasChanged(true); - } - } - LoadPathNodeJunctionPage(); - } - - private void PathNodeJunctionHeightmapBytesTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentPathNode == null) return; - if (CurrentPathNode.Junction == null) return; - lock (yndsyncroot) - { - CurrentPathNode.Junction.SetHeightmap(PathNodeJunctionHeightmapBytesTextBox.Text); - SetYndHasChanged(true); - } - //LoadPathNodeJunctionPage(); - } - - - - - - - - - private void TrainNodePositionTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentTrainNode == null) return; - Vector3 v = FloatUtil.ParseVector3String(TrainNodePositionTextBox.Text); - bool change = false; - lock (trainsyncroot) - { - if (CurrentTrainNode.Position != v) - { - CurrentTrainNode.SetPosition(v); - SetTrainTrackHasChanged(true); - change = true; - } - } - if (change) - { - if (WorldForm != null) - { - WorldForm.SetWidgetPosition(CurrentTrainNode.Position); - WorldForm.UpdateTrainTrackNodeGraphics(CurrentTrainNode, false); - } - //TrainNodePositionTextBox.Text = FloatUtil.GetVector3String(CurrentTrainNode.Position); - } - } - - private void TrainNodeGoToButton_Click(object sender, EventArgs e) - { - if (CurrentTrainNode == null) return; - if (WorldForm == null) return; - WorldForm.GoToPosition(CurrentTrainNode.Position); - } - - private void TrainNodeTypeComboBox_SelectedIndexChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentTrainNode == null) return; - int type = TrainNodeTypeComboBox.SelectedIndex; - bool change = false; - lock (trainsyncroot) - { - if (CurrentTrainNode.NodeType != type) - { - CurrentTrainNode.NodeType = type; - SetTrainTrackHasChanged(true); - change = true; - } - } - if (change) - { - if (WorldForm != null) - { - WorldForm.UpdateTrainTrackNodeGraphics(CurrentTrainNode, false); //change the colour... - } - } - UpdateTrainNodeTreeNode(CurrentTrainNode); - } - - private void TrainNodeAddToProjectButton_Click(object sender, EventArgs e) - { - AddTrainNodeToProject(); - } - - private void TrainNodeDeleteButton_Click(object sender, EventArgs e) - { - DeleteTrainNode(); - } - - - - - - - - - - private void ScenarioYmtVersionTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenario == null) return; - if (CurrentScenario.CScenarioPointRegion == null) return; - lock (scenariosyncroot) - { - int v = 0; - int.TryParse(ScenarioYmtVersionTextBox.Text, out v); - if (CurrentScenario.CScenarioPointRegion.VersionNumber != v) - { - CurrentScenario.CScenarioPointRegion.VersionNumber = v; - SetScenarioHasChanged(true); - } - } - } - - - private void ScenarioPointCheckBox_CheckedChanged(object sender, EventArgs e) - { - - } - - private void ScenarioPointAddToProjectButton_Click(object sender, EventArgs e) - { - AddScenarioNodeToProject(); - } - - private void ScenarioPointDeleteButton_Click(object sender, EventArgs e) - { - DeleteScenarioNode(); - } - - private void ScenarioPointGoToButton_Click(object sender, EventArgs e) - { - if (CurrentScenarioNode == null) return; - if (WorldForm == null) return; - WorldForm.GoToPosition(CurrentScenarioNode.Position); - } - - private void ScenarioPointPositionTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - Vector3 v = FloatUtil.ParseVector3String(ScenarioPointPositionTextBox.Text); - bool change = false; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.Position != v) - { - CurrentScenarioNode.SetPosition(v); - SetScenarioHasChanged(true); - change = true; - } - } - if (change) - { - if (WorldForm != null) - { - WorldForm.SetWidgetPosition(CurrentScenarioNode.Position); - WorldForm.UpdateScenarioGraphics(CurrentScenario, false); - } - } - } - - private void ScenarioPointDirectionTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.MyPoint == null) return; - float dir = FloatUtil.Parse(ScenarioPointDirectionTextBox.Text); - lock (scenariosyncroot) - { - if (CurrentScenarioNode.MyPoint.Direction != dir) - { - CurrentScenarioNode.MyPoint.Direction = dir; - CurrentScenarioNode.Orientation = CurrentScenarioNode.MyPoint.Orientation; - SetScenarioHasChanged(true); - if (WorldForm != null) - { - WorldForm.SetWidgetRotation(CurrentScenarioNode.Orientation); - } - } - } - } - - private void ScenarioPointTypeComboBox_SelectedIndexChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.MyPoint == null) return; - ScenarioType stype = ScenarioPointTypeComboBox.SelectedItem as ScenarioType; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.MyPoint.Type != stype) - { - CurrentScenarioNode.MyPoint.Type = stype; - SetScenarioHasChanged(true); - } - } - UpdateScenarioNodeTreeNode(CurrentScenarioNode); - - if (CurrentScenarioNode.ChainingNode != null) - { - ScenarioChainNodeTypeComboBox.SelectedItem = stype; - } - } - - private void ScenarioPointModelSetComboBox_SelectedIndexChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.MyPoint == null) return; - AmbientModelSet mset = ScenarioPointModelSetComboBox.SelectedItem as AmbientModelSet; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.MyPoint.ModelSet != mset) - { - CurrentScenarioNode.MyPoint.ModelSet = mset; - SetScenarioHasChanged(true); - } - } - UpdateScenarioNodeTreeNode(CurrentScenarioNode); - } - - private void ScenarioPointInteriorTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.MyPoint == null) return; - uint hash = 0; - string name = ScenarioPointInteriorTextBox.Text; - if (!uint.TryParse(name, out hash))//don't re-hash hashes - { - hash = JenkHash.GenHash(name); - JenkIndex.Ensure(name); - } - ScenarioPointInteriorHashLabel.Text = "Hash: " + hash.ToString(); - lock (scenariosyncroot) - { - if (CurrentScenarioNode.MyPoint.InteriorName != hash) - { - CurrentScenarioNode.MyPoint.InteriorName = hash; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioPointGroupTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.MyPoint == null) return; - uint hash = 0; - string name = ScenarioPointGroupTextBox.Text; - if (!uint.TryParse(name, out hash))//don't re-hash hashes - { - hash = JenkHash.GenHash(name); - JenkIndex.Ensure(name); - } - ScenarioPointGroupHashLabel.Text = "Hash: " + hash.ToString(); - lock (scenariosyncroot) - { - if (CurrentScenarioNode.MyPoint.GroupName != hash) - { - CurrentScenarioNode.MyPoint.GroupName = hash; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioPointImapTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.MyPoint == null) return; - uint hash = 0; - string name = ScenarioPointImapTextBox.Text; - if (!uint.TryParse(name, out hash))//don't re-hash hashes - { - hash = JenkHash.GenHash(name); - JenkIndex.Ensure(name); - } - ScenarioPointImapHashLabel.Text = "Hash: " + hash.ToString(); - lock (scenariosyncroot) - { - if (CurrentScenarioNode.MyPoint.IMapName != hash) - { - CurrentScenarioNode.MyPoint.IMapName = hash; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioPointTimeStartUpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.MyPoint == null) return; - byte t = (byte)ScenarioPointTimeStartUpDown.Value; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.MyPoint.TimeStart != t) - { - CurrentScenarioNode.MyPoint.TimeStart = t; - SetScenarioHasChanged(true); - } - } - UpdateScenarioNodeTreeNode(CurrentScenarioNode); - } - - private void ScenarioPointTimeEndUpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.MyPoint == null) return; - byte t = (byte)ScenarioPointTimeEndUpDown.Value; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.MyPoint.TimeEnd != t) - { - CurrentScenarioNode.MyPoint.TimeEnd = t; - SetScenarioHasChanged(true); - } - } - UpdateScenarioNodeTreeNode(CurrentScenarioNode); - } - - private void ScenarioPointProbabilityUpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.MyPoint == null) return; - byte v = (byte)ScenarioPointProbabilityUpDown.Value; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.MyPoint.Probability != v) - { - CurrentScenarioNode.MyPoint.Probability = v; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioPointSpOnlyFlagUpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.MyPoint == null) return; - byte v = (byte)ScenarioPointSpOnlyFlagUpDown.Value; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.MyPoint.AvailableMpSp != v) - { - CurrentScenarioNode.MyPoint.AvailableMpSp = v; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioPointRadiusUpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.MyPoint == null) return; - byte v = (byte)ScenarioPointRadiusUpDown.Value; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.MyPoint.Radius != v) - { - CurrentScenarioNode.MyPoint.Radius = v; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioPointWaitTimeUpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.MyPoint == null) return; - byte v = (byte)ScenarioPointWaitTimeUpDown.Value; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.MyPoint.WaitTime != v) - { - CurrentScenarioNode.MyPoint.WaitTime = v; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioPointFlagsValueUpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.MyPoint == null) return; - var iflags = (uint)ScenarioPointFlagsValueUpDown.Value; - populatingui = true; - for (int i = 0; i < ScenarioPointFlagsCheckedListBox.Items.Count; i++) - { - var c = ((iflags & (1 << i)) > 0); - ScenarioPointFlagsCheckedListBox.SetItemCheckState(i, c ? CheckState.Checked : CheckState.Unchecked); - } - populatingui = false; - Unk_700327466 f = (Unk_700327466)iflags; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.MyPoint.Flags != f) - { - CurrentScenarioNode.MyPoint.Flags = f; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioPointFlagsCheckedListBox_ItemCheck(object sender, ItemCheckEventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.MyPoint == null) return; - uint iflags = 0; - for (int i = 0; i < ScenarioPointFlagsCheckedListBox.Items.Count; i++) - { - if (e.Index == i) - { - if (e.NewValue == CheckState.Checked) - { - iflags += (uint)(1 << i); - } - } - else - { - if (ScenarioPointFlagsCheckedListBox.GetItemChecked(i)) - { - iflags += (uint)(1 << i); - } - } - } - populatingui = true; - ScenarioPointFlagsValueUpDown.Value = iflags; - populatingui = false; - Unk_700327466 f = (Unk_700327466)iflags; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.MyPoint.Flags != f) - { - CurrentScenarioNode.MyPoint.Flags = f; - SetScenarioHasChanged(true); - } - } - } - - - private void ScenarioEntityCheckBox_CheckedChanged(object sender, EventArgs e) - { - - } - - private void ScenarioEntityAddToProjectButton_Click(object sender, EventArgs e) - { - AddScenarioNodeToProject(); - } - - private void ScenarioEntityDeleteButton_Click(object sender, EventArgs e) - { - DeleteScenarioEntity(); - } - - private void ScenarioEntityGoToButton_Click(object sender, EventArgs e) - { - if (CurrentScenarioNode == null) return; - if (WorldForm == null) return; - WorldForm.GoToPosition(CurrentScenarioNode.Position); - } - - private void ScenarioEntityPositionTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.Entity == null) return; - Vector3 v = FloatUtil.ParseVector3String(ScenarioEntityPositionTextBox.Text); - bool change = false; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.Position != v) - { - CurrentScenarioNode.SetPosition(v); - SetScenarioHasChanged(true); - change = true; - } - } - if (change) - { - if (WorldForm != null) - { - WorldForm.SetWidgetPosition(CurrentScenarioNode.Position); - WorldForm.UpdateScenarioGraphics(CurrentScenario, false); - } - } - } - - private void ScenarioEntityTypeTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.Entity == null) return; - uint hash = 0; - string name = ScenarioEntityTypeTextBox.Text; - if (!uint.TryParse(name, out hash))//don't re-hash hashes - { - hash = JenkHash.GenHash(name); - JenkIndex.Ensure(name); - } - ScenarioEntityTypeHashLabel.Text = "Hash: " + hash.ToString(); - lock (scenariosyncroot) - { - if (CurrentScenarioNode.Entity.TypeName != hash) - { - CurrentScenarioNode.Entity.TypeName = hash; - SetScenarioHasChanged(true); - } - } - UpdateScenarioNodeTreeNode(CurrentScenarioNode); - } - - private void ScenarioEntityUnk1UpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.Entity == null) return; - byte v = (byte)ScenarioEntityUnk1UpDown.Value; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.Entity.Unk1 != v) - { - CurrentScenarioNode.Entity.Unk1 = v; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioEntityUnk2UpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.Entity == null) return; - byte v = (byte)ScenarioEntityUnk2UpDown.Value; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.Entity.Unk2 != v) - { - CurrentScenarioNode.Entity.Unk2 = v; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioEntityPointsListBox_DoubleClick(object sender, EventArgs e) - { - var item = ScenarioEntityPointsListBox.SelectedItem as MCExtensionDefSpawnPoint; - if (item == null) return; - - var nodes = CurrentScenario?.ScenarioRegion?.Nodes; - if (nodes == null) return; - - ScenarioNode node = null; - foreach (var snode in nodes) - { - if (snode.EntityPoint == item) - { - node = snode; - break; - } - } - - if (node == null) return; - - TrySelectScenarioNodeTreeNode(node); - - } - - private void ScenarioEntityAddPointButton_Click(object sender, EventArgs e) - { - AddScenarioEntityPoint(); - } - - - private void ScenarioEntityPointCheckBox_CheckedChanged(object sender, EventArgs e) - { - - } - - private void ScenarioEntityPointAddToProjectButton_Click(object sender, EventArgs e) - { - AddScenarioNodeToProject(); - } - - private void ScenarioEntityPointDeleteButton_Click(object sender, EventArgs e) - { - DeleteScenarioNode(); - } - - private void ScenarioEntityPointGoToButton_Click(object sender, EventArgs e) - { - if (CurrentScenarioNode == null) return; - if (WorldForm == null) return; - WorldForm.GoToPosition(CurrentScenarioNode.Position); - } - - private void ScenarioEntityPointPositionTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.EntityPoint == null) return; - Vector3 v = FloatUtil.ParseVector3String(ScenarioEntityPointPositionTextBox.Text); - v += CurrentScenarioNode.EntityPoint.ParentPosition; - bool change = false; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.Position != v) - { - CurrentScenarioNode.SetPosition(v); - SetScenarioHasChanged(true); - change = true; - } - } - if (change) - { - if (WorldForm != null) - { - WorldForm.SetWidgetPosition(CurrentScenarioNode.Position); - WorldForm.UpdateScenarioGraphics(CurrentScenario, false); - } - } - } - - private void ScenarioEntityPointRotationTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.EntityPoint == null) return; - Vector4 v = FloatUtil.ParseVector4String(ScenarioEntityPointRotationTextBox.Text); - bool change = false; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.EntityPoint.OffsetRotation != v) - { - CurrentScenarioNode.EntityPoint.OffsetRotation = v; - CurrentScenarioNode.Orientation = new Quaternion(v); - SetScenarioHasChanged(true); - change = true; - } - } - if (change) - { - if (WorldForm != null) - { - WorldForm.SetWidgetRotation(CurrentScenarioNode.Orientation); - } - } - } - - private void ScenarioEntityPointNameTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.EntityPoint == null) return; - uint hash = 0; - string name = ScenarioEntityPointNameTextBox.Text; - if (!uint.TryParse(name, out hash))//don't re-hash hashes - { - hash = JenkHash.GenHash(name); - JenkIndex.Ensure(name); - } - ScenarioEntityPointNameHashLabel.Text = "Hash: " + hash.ToString(); - lock (scenariosyncroot) - { - if (CurrentScenarioNode.EntityPoint.NameHash != hash) - { - CurrentScenarioNode.EntityPoint.NameHash = hash; - SetScenarioHasChanged(true); - } - } - UpdateScenarioNodeTreeNode(CurrentScenarioNode); - } - - private void ScenarioEntityPointSpawnTypeTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.EntityPoint == null) return; - uint hash = 0; - string name = ScenarioEntityPointSpawnTypeTextBox.Text; - if (!uint.TryParse(name, out hash))//don't re-hash hashes - { - hash = JenkHash.GenHash(name); - JenkIndex.Ensure(name); - } - ScenarioEntityPointSpawnTypeHashLabel.Text = "Hash: " + hash.ToString(); - lock (scenariosyncroot) - { - if (CurrentScenarioNode.EntityPoint.SpawnType != hash) - { - CurrentScenarioNode.EntityPoint.SpawnType = hash; - SetScenarioHasChanged(true); - } - } - UpdateScenarioNodeTreeNode(CurrentScenarioNode); - } - - private void ScenarioEntityPointPedTypeTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.EntityPoint == null) return; - uint hash = 0; - string name = ScenarioEntityPointPedTypeTextBox.Text; - if (!uint.TryParse(name, out hash))//don't re-hash hashes - { - hash = JenkHash.GenHash(name); - JenkIndex.Ensure(name); - } - ScenarioEntityPointPedTypeHashLabel.Text = "Hash: " + hash.ToString(); - lock (scenariosyncroot) - { - if (CurrentScenarioNode.EntityPoint.PedType != hash) - { - CurrentScenarioNode.EntityPoint.PedType = hash; - SetScenarioHasChanged(true); - } - } - UpdateScenarioNodeTreeNode(CurrentScenarioNode); - } - - private void ScenarioEntityPointGroupTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.EntityPoint == null) return; - uint hash = 0; - string name = ScenarioEntityPointGroupTextBox.Text; - if (!uint.TryParse(name, out hash))//don't re-hash hashes - { - hash = JenkHash.GenHash(name); - JenkIndex.Ensure(name); - } - ScenarioEntityPointGroupHashLabel.Text = "Hash: " + hash.ToString(); - lock (scenariosyncroot) - { - if (CurrentScenarioNode.EntityPoint.Group != hash) - { - CurrentScenarioNode.EntityPoint.Group = hash; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioEntityPointInteriorTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.EntityPoint == null) return; - uint hash = 0; - string name = ScenarioEntityPointInteriorTextBox.Text; - if (!uint.TryParse(name, out hash))//don't re-hash hashes - { - hash = JenkHash.GenHash(name); - JenkIndex.Ensure(name); - } - ScenarioEntityPointInteriorHashLabel.Text = "Hash: " + hash.ToString(); - lock (scenariosyncroot) - { - if (CurrentScenarioNode.EntityPoint.Interior != hash) - { - CurrentScenarioNode.EntityPoint.Interior = hash; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioEntityPointRequiredImapTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.EntityPoint == null) return; - uint hash = 0; - string name = ScenarioEntityPointRequiredImapTextBox.Text; - if (!uint.TryParse(name, out hash))//don't re-hash hashes - { - hash = JenkHash.GenHash(name); - JenkIndex.Ensure(name); - } - ScenarioEntityPointRequiredImapHashLabel.Text = "Hash: " + hash.ToString(); - lock (scenariosyncroot) - { - if (CurrentScenarioNode.EntityPoint.RequiredImap != hash) - { - CurrentScenarioNode.EntityPoint.RequiredImap = hash; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioEntityPointAvailableInMpSpComboBox_SelectedIndexChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.EntityPoint == null) return; - Unk_3573596290 v = (Unk_3573596290)ScenarioEntityPointAvailableInMpSpComboBox.SelectedItem; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.EntityPoint.AvailableInMpSp != v) - { - CurrentScenarioNode.EntityPoint.AvailableInMpSp = v; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioEntityPointProbabilityTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.EntityPoint == null) return; - float v = FloatUtil.Parse(ScenarioEntityPointProbabilityTextBox.Text); - lock (scenariosyncroot) - { - if (CurrentScenarioNode.EntityPoint.Probability != v) - { - CurrentScenarioNode.EntityPoint.Probability = v; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioEntityPointTimeTillPedLeavesTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.EntityPoint == null) return; - float v = FloatUtil.Parse(ScenarioEntityPointTimeTillPedLeavesTextBox.Text); - lock (scenariosyncroot) - { - if (CurrentScenarioNode.EntityPoint.TimeTillPedLeaves != v) - { - CurrentScenarioNode.EntityPoint.TimeTillPedLeaves = v; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioEntityPointRadiusTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.EntityPoint == null) return; - float v = FloatUtil.Parse(ScenarioEntityPointRadiusTextBox.Text); - lock (scenariosyncroot) - { - if (CurrentScenarioNode.EntityPoint.Radius != v) - { - CurrentScenarioNode.EntityPoint.Radius = v; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioEntityPointStartUpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.EntityPoint == null) return; - byte v = (byte)ScenarioEntityPointStartUpDown.Value; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.EntityPoint.StartTime != v) - { - CurrentScenarioNode.EntityPoint.StartTime = v; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioEntityPointEndUpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.EntityPoint == null) return; - byte v = (byte)ScenarioEntityPointEndUpDown.Value; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.EntityPoint.EndTime != v) - { - CurrentScenarioNode.EntityPoint.EndTime = v; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioEntityPointExtendedRangeCheckBox_CheckedChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.EntityPoint == null) return; - bool v = ScenarioEntityPointExtendedRangeCheckBox.Checked; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.EntityPoint.ExtendedRange != v) - { - CurrentScenarioNode.EntityPoint.ExtendedRange = v; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioEntityPointShortRangeCheckBox_CheckedChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.EntityPoint == null) return; - bool v = ScenarioEntityPointShortRangeCheckBox.Checked; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.EntityPoint.ShortRange != v) - { - CurrentScenarioNode.EntityPoint.ShortRange = v; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioEntityPointHighPriCheckBox_CheckedChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.EntityPoint == null) return; - bool v = ScenarioEntityPointHighPriCheckBox.Checked; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.EntityPoint.HighPri != v) - { - CurrentScenarioNode.EntityPoint.HighPri = v; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioEntityPointFlagsUpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.EntityPoint == null) return; - var iflags = (uint)ScenarioEntityPointFlagsUpDown.Value; - populatingui = true; - for (int i = 0; i < ScenarioEntityPointFlagsCheckedListBox.Items.Count; i++) - { - var c = ((iflags & (1 << i)) > 0); - ScenarioEntityPointFlagsCheckedListBox.SetItemCheckState(i, c ? CheckState.Checked : CheckState.Unchecked); - } - populatingui = false; - Unk_700327466 f = (Unk_700327466)iflags; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.EntityPoint.Flags != f) - { - CurrentScenarioNode.EntityPoint.Flags = f; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioEntityPointFlagsCheckedListBox_ItemCheck(object sender, ItemCheckEventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.EntityPoint == null) return; - uint iflags = 0; - for (int i = 0; i < ScenarioEntityPointFlagsCheckedListBox.Items.Count; i++) - { - if (e.Index == i) - { - if (e.NewValue == CheckState.Checked) - { - iflags += (uint)(1 << i); - } - } - else - { - if (ScenarioEntityPointFlagsCheckedListBox.GetItemChecked(i)) - { - iflags += (uint)(1 << i); - } - } - } - populatingui = true; - ScenarioEntityPointFlagsUpDown.Value = iflags; - populatingui = false; - Unk_700327466 f = (Unk_700327466)iflags; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.EntityPoint.Flags != f) - { - CurrentScenarioNode.EntityPoint.Flags = f; - SetScenarioHasChanged(true); - } - } - } - - - private void ScenarioChainNodeCheckBox_CheckedChanged(object sender, EventArgs e) - { - - } - - private void ScenarioChainNodeAddToProjectButton_Click(object sender, EventArgs e) - { - AddScenarioNodeToProject(); - } - - private void ScenarioChainNodeDeleteButton_Click(object sender, EventArgs e) - { - DeleteScenarioNode(); - } - - private void ScenarioChainNodeGoToButton_Click(object sender, EventArgs e) - { - if (CurrentScenarioNode == null) return; - if (WorldForm == null) return; - WorldForm.GoToPosition(CurrentScenarioNode.Position); - } - - private void ScenarioChainNodePositionTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - Vector3 v = FloatUtil.ParseVector3String(ScenarioChainNodePositionTextBox.Text); - bool change = false; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.Position != v) - { - CurrentScenarioNode.SetPosition(v); - SetScenarioHasChanged(true); - change = true; - } - } - if (change) - { - if (WorldForm != null) - { - WorldForm.SetWidgetPosition(CurrentScenarioNode.Position); - WorldForm.UpdateScenarioGraphics(CurrentScenario, false); - } - } - } - - private void ScenarioChainNodeUnk1TextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.ChainingNode == null) return; - uint hash = 0; - string name = ScenarioChainNodeUnk1TextBox.Text; - if (!uint.TryParse(name, out hash))//don't re-hash hashes - { - hash = JenkHash.GenHash(name); - JenkIndex.Ensure(name); - } - ScenarioChainNodeUnk1HashLabel.Text = "Hash: " + hash.ToString(); - lock (scenariosyncroot) - { - if (CurrentScenarioNode.ChainingNode.Unk1 != hash) - { - CurrentScenarioNode.ChainingNode.Unk1 = hash; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioChainNodeTypeComboBox_SelectedIndexChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.ChainingNode == null) return; - ScenarioType stype = ScenarioChainNodeTypeComboBox.SelectedItem as ScenarioType; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.ChainingNode.Type != stype) - { - CurrentScenarioNode.ChainingNode.Type = stype; - CurrentScenarioNode.ChainingNode.TypeHash = stype?.NameHash ?? 0; - SetScenarioHasChanged(true); - } - } - UpdateScenarioNodeTreeNode(CurrentScenarioNode); - } - - private void ScenarioChainNodeFirstCheckBox_CheckedChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.ChainingNode == null) return; - bool v = !ScenarioChainNodeFirstCheckBox.Checked; - bool change = false; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.ChainingNode.NotFirst != v) - { - CurrentScenarioNode.ChainingNode.NotFirst = v; - SetScenarioHasChanged(true); - change = true; - } - } - if (change) - { - if (WorldForm != null) - { - WorldForm.UpdateScenarioGraphics(CurrentScenario, false); - } - } - } - - private void ScenarioChainNodeLastCheckBox_CheckedChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.ChainingNode == null) return; - bool v = !ScenarioChainNodeLastCheckBox.Checked; - bool change = false; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.ChainingNode.NotLast != v) - { - CurrentScenarioNode.ChainingNode.NotLast = v; - SetScenarioHasChanged(true); - change = true; - } - } - if (change) - { - if (WorldForm != null) - { - WorldForm.UpdateScenarioGraphics(CurrentScenario, false); - } - } - } - - - private void ScenarioChainAddToProjectButton_Click(object sender, EventArgs e) - { - AddScenarioNodeToProject(); - } - - private void ScenarioChainDeleteButton_Click(object sender, EventArgs e) - { - DeleteScenarioChain(); - } - - private void ScenarioChainEdgesListBox_SelectedIndexChanged(object sender, EventArgs e) - { - if (populatingui) return; - CurrentScenarioChainEdge = ScenarioChainEdgesListBox.SelectedItem as MCScenarioChainingEdge; - populatingui = true; - LoadScenarioChainEdgeTabPage(); - populatingui = false; - } - - private void ScenarioChainAddEdgeButton_Click(object sender, EventArgs e) - { - AddScenarioEdge(); - } - - private void ScenarioChainRemoveEdgeButton_Click(object sender, EventArgs e) - { - RemoveScenarioEdge(); - } - - private void ScenarioChainMoveEdgeUpButton_Click(object sender, EventArgs e) - { - MoveScenarioEdge(false); - } - - private void ScenarioChainMoveEdgeDownButton_Click(object sender, EventArgs e) - { - MoveScenarioEdge(true); - } - - private void ScenarioChainUnk1UpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.ChainingNode == null) return; - if (CurrentScenarioNode.ChainingNode.Chain == null) return; - byte v = (byte)ScenarioChainUnk1UpDown.Value; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.ChainingNode.Chain.Unk1 != v) - { - CurrentScenarioNode.ChainingNode.Chain.Unk1 = v; - SetScenarioHasChanged(true); - } - } - } - - - private void ScenarioChainEdgeNodeIndexFromUpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioChainEdge == null) return; - ushort nodeid = (ushort)ScenarioChainEdgeNodeIndexFromUpDown.Value; - bool change = false; - lock (scenariosyncroot) - { - if (CurrentScenarioChainEdge.NodeIndexFrom != nodeid) - { - CurrentScenarioChainEdge.NodeIndexFrom = nodeid; - SetScenarioHasChanged(true); - change = true; - } - } - if (change) - { - UpdateScenarioEdgeLinkage(); - - //refresh the selected item in the list box, to update the text, and the other controls. - ScenarioChainEdgesListBox.Items[ScenarioChainEdgesListBox.SelectedIndex] = ScenarioChainEdgesListBox.SelectedItem; - } - } - - private void ScenarioChainEdgeNodeIndexToUpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioChainEdge == null) return; - ushort nodeid = (ushort)ScenarioChainEdgeNodeIndexToUpDown.Value; - bool change = false; - lock (scenariosyncroot) - { - if (CurrentScenarioChainEdge.NodeIndexTo != nodeid) - { - CurrentScenarioChainEdge.NodeIndexTo = nodeid; - SetScenarioHasChanged(true); - change = true; - } - } - if (change) - { - UpdateScenarioEdgeLinkage(); - - //refresh the selected item in the list box, to update the text, and the other controls. - ScenarioChainEdgesListBox.Items[ScenarioChainEdgesListBox.SelectedIndex] = ScenarioChainEdgesListBox.SelectedItem; - } - } - - private void ScenarioChainEdgeActionComboBox_SelectedIndexChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioChainEdge == null) return; - Unk_3609807418 v = (Unk_3609807418)ScenarioChainEdgeActionComboBox.SelectedItem; - lock (scenariosyncroot) - { - if (CurrentScenarioChainEdge.Action != v) - { - CurrentScenarioChainEdge.Action = v; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioChainEdgeNavModeComboBox_SelectedIndexChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioChainEdge == null) return; - Unk_3971773454 v = (Unk_3971773454)ScenarioChainEdgeNavModeComboBox.SelectedItem; - lock (scenariosyncroot) - { - if (CurrentScenarioChainEdge.NavMode != v) - { - CurrentScenarioChainEdge.NavMode = v; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioChainEdgeNavSpeedComboBox_SelectedIndexChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioChainEdge == null) return; - Unk_941086046 v = (Unk_941086046)ScenarioChainEdgeNavSpeedComboBox.SelectedItem; - lock (scenariosyncroot) - { - if (CurrentScenarioChainEdge.NavSpeed != v) - { - CurrentScenarioChainEdge.NavSpeed = v; - SetScenarioHasChanged(true); - } - } - } - - - private void ScenarioClusterCheckBox_CheckedChanged(object sender, EventArgs e) - { - - } - - private void ScenarioClusterAddToProjectButton_Click(object sender, EventArgs e) - { - AddScenarioNodeToProject(); - } - - private void ScenarioClusterDeleteButton_Click(object sender, EventArgs e) - { - DeleteScenarioCluster(); - } - - private void ScenarioClusterGoToButton_Click(object sender, EventArgs e) - { - if (CurrentScenarioNode == null) return; - if (WorldForm == null) return; - WorldForm.GoToPosition(CurrentScenarioNode.Position); - } - - private void ScenarioClusterCenterTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - Vector3 v = FloatUtil.ParseVector3String(ScenarioClusterCenterTextBox.Text); - bool change = false; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.Position != v) - { - CurrentScenarioNode.SetPosition(v); - SetScenarioHasChanged(true); - change = true; - } - if ((CurrentScenarioNode.Cluster != null) && (CurrentScenarioNode.Cluster.Position != v)) - { - CurrentScenarioNode.Cluster.Position = v; - SetScenarioHasChanged(true); - change = true; - } - } - if (change) - { - if (WorldForm != null) - { - WorldForm.SetWidgetPosition(CurrentScenarioNode.Position); - WorldForm.UpdateScenarioGraphics(CurrentScenario, false); - } - } - } - - private void ScenarioClusterRadiusTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - float r = FloatUtil.Parse(ScenarioClusterRadiusTextBox.Text); - bool change = false; - lock (scenariosyncroot) - { - if ((CurrentScenarioNode.Cluster != null) && (CurrentScenarioNode.Cluster.Radius != r)) - { - CurrentScenarioNode.Cluster.Radius = r; - SetScenarioHasChanged(true); - change = true; - } - } - if (change) - { - if (WorldForm != null) - { - WorldForm.SetWidgetPosition(CurrentScenarioNode.Position); - WorldForm.UpdateScenarioGraphics(CurrentScenario, false); - } - } - } - - private void ScenarioClusterUnk1TextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.Cluster == null) return; - float v = FloatUtil.Parse(ScenarioClusterUnk1TextBox.Text); - lock (scenariosyncroot) - { - if (CurrentScenarioNode.Cluster.Unk1 != v) - { - CurrentScenarioNode.Cluster.Unk1 = v; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioClusterUnk2CheckBox_CheckedChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.Cluster == null) return; - bool v = ScenarioClusterUnk2CheckBox.Checked; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.Cluster.Unk2 != v) - { - CurrentScenarioNode.Cluster.Unk2 = v; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioClusterPointsListBox_DoubleClick(object sender, EventArgs e) - { - var item = ScenarioClusterPointsListBox.SelectedItem as MCScenarioPoint; - if (item == null) return; - - var nodes = CurrentScenario?.ScenarioRegion?.Nodes; - if (nodes == null) return; - - ScenarioNode node = null; - foreach (var snode in nodes) - { - if (snode.ClusterMyPoint == item) - { - node = snode; - break; - } - } - - if (node == null) return; - - TrySelectScenarioNodeTreeNode(node); - - } - - private void ScenarioClusterAddPointButton_Click(object sender, EventArgs e) - { - AddScenarioClusterPoint(); - } - - - private void ScenarioClusterPointCheckBox_CheckedChanged(object sender, EventArgs e) - { - - } - - private void ScenarioClusterPointAddToProjectButton_Click(object sender, EventArgs e) - { - AddScenarioNodeToProject(); - } - - private void ScenarioClusterPointDeleteButton_Click(object sender, EventArgs e) - { - DeleteScenarioNode(); - } - - private void ScenarioClusterPointGoToButton_Click(object sender, EventArgs e) - { - if (CurrentScenarioNode == null) return; - if (WorldForm == null) return; - WorldForm.GoToPosition(CurrentScenarioNode.Position); - } - - private void ScenarioClusterPointPositionTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - Vector3 v = FloatUtil.ParseVector3String(ScenarioClusterPointPositionTextBox.Text); - bool change = false; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.Position != v) - { - CurrentScenarioNode.SetPosition(v); - SetScenarioHasChanged(true); - change = true; - } - } - if (change) - { - if (WorldForm != null) - { - WorldForm.SetWidgetPosition(CurrentScenarioNode.Position); - WorldForm.UpdateScenarioGraphics(CurrentScenario, false); - } - } - } - - private void ScenarioClusterPointDirectionTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.ClusterMyPoint == null) return; - float dir = FloatUtil.Parse(ScenarioClusterPointDirectionTextBox.Text); - lock (scenariosyncroot) - { - if (CurrentScenarioNode.ClusterMyPoint.Direction != dir) - { - CurrentScenarioNode.ClusterMyPoint.Direction = dir; - CurrentScenarioNode.Orientation = CurrentScenarioNode.ClusterMyPoint.Orientation; - SetScenarioHasChanged(true); - if (WorldForm != null) - { - WorldForm.SetWidgetRotation(CurrentScenarioNode.Orientation); - } - } - } - } - - private void ScenarioClusterPointTypeComboBox_SelectedIndexChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.ClusterMyPoint == null) return; - ScenarioType stype = ScenarioClusterPointTypeComboBox.SelectedItem as ScenarioType; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.ClusterMyPoint.Type != stype) - { - CurrentScenarioNode.ClusterMyPoint.Type = stype; - SetScenarioHasChanged(true); - } - } - UpdateScenarioNodeTreeNode(CurrentScenarioNode); - - if (CurrentScenarioNode.ChainingNode != null) - { - ScenarioChainNodeTypeComboBox.SelectedItem = stype; - } - } - - private void ScenarioClusterPointModelSetComboBox_SelectedIndexChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.ClusterMyPoint == null) return; - AmbientModelSet mset = ScenarioClusterPointModelSetComboBox.SelectedItem as AmbientModelSet; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.ClusterMyPoint.ModelSet != mset) - { - CurrentScenarioNode.ClusterMyPoint.ModelSet = mset; - SetScenarioHasChanged(true); - } - } - UpdateScenarioNodeTreeNode(CurrentScenarioNode); - } - - private void ScenarioClusterPointInteriorTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.ClusterMyPoint == null) return; - uint hash = 0; - string name = ScenarioClusterPointInteriorTextBox.Text; - if (!uint.TryParse(name, out hash))//don't re-hash hashes - { - hash = JenkHash.GenHash(name); - JenkIndex.Ensure(name); - } - ScenarioClusterPointInteriorHashLabel.Text = "Hash: " + hash.ToString(); - lock (scenariosyncroot) - { - if (CurrentScenarioNode.ClusterMyPoint.InteriorName != hash) - { - CurrentScenarioNode.ClusterMyPoint.InteriorName = hash; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioClusterPointGroupTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.ClusterMyPoint == null) return; - uint hash = 0; - string name = ScenarioClusterPointGroupTextBox.Text; - if (!uint.TryParse(name, out hash))//don't re-hash hashes - { - hash = JenkHash.GenHash(name); - JenkIndex.Ensure(name); - } - ScenarioClusterPointGroupHashLabel.Text = "Hash: " + hash.ToString(); - lock (scenariosyncroot) - { - if (CurrentScenarioNode.ClusterMyPoint.GroupName != hash) - { - CurrentScenarioNode.ClusterMyPoint.GroupName = hash; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioClusterPointImapTextBox_TextChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.ClusterMyPoint == null) return; - uint hash = 0; - string name = ScenarioClusterPointImapTextBox.Text; - if (!uint.TryParse(name, out hash))//don't re-hash hashes - { - hash = JenkHash.GenHash(name); - JenkIndex.Ensure(name); - } - ScenarioClusterPointImapHashLabel.Text = "Hash: " + hash.ToString(); - lock (scenariosyncroot) - { - if (CurrentScenarioNode.ClusterMyPoint.IMapName != hash) - { - CurrentScenarioNode.ClusterMyPoint.IMapName = hash; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioClusterPointTimeStartUpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.ClusterMyPoint == null) return; - byte t = (byte)ScenarioClusterPointTimeStartUpDown.Value; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.ClusterMyPoint.TimeStart != t) - { - CurrentScenarioNode.ClusterMyPoint.TimeStart = t; - SetScenarioHasChanged(true); - } - } - UpdateScenarioNodeTreeNode(CurrentScenarioNode); - } - - private void ScenarioClusterPointTimeEndUpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.ClusterMyPoint == null) return; - byte t = (byte)ScenarioClusterPointTimeEndUpDown.Value; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.ClusterMyPoint.TimeEnd != t) - { - CurrentScenarioNode.ClusterMyPoint.TimeEnd = t; - SetScenarioHasChanged(true); - } - } - UpdateScenarioNodeTreeNode(CurrentScenarioNode); - } - - private void ScenarioClusterPointProbabilityUpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.ClusterMyPoint == null) return; - byte v = (byte)ScenarioClusterPointProbabilityUpDown.Value; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.ClusterMyPoint.Probability != v) - { - CurrentScenarioNode.ClusterMyPoint.Probability = v; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioClusterPointAnimalFlagUpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.ClusterMyPoint == null) return; - byte v = (byte)ScenarioClusterPointAnimalFlagUpDown.Value; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.ClusterMyPoint.AvailableMpSp != v) - { - CurrentScenarioNode.ClusterMyPoint.AvailableMpSp = v; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioClusterPointRadiusUpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.ClusterMyPoint == null) return; - byte v = (byte)ScenarioClusterPointRadiusUpDown.Value; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.ClusterMyPoint.Radius != v) - { - CurrentScenarioNode.ClusterMyPoint.Radius = v; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioClusterPointWaitTimeUpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.ClusterMyPoint == null) return; - byte v = (byte)ScenarioClusterPointWaitTimeUpDown.Value; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.ClusterMyPoint.WaitTime != v) - { - CurrentScenarioNode.ClusterMyPoint.WaitTime = v; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioClusterPointFlagsUpDown_ValueChanged(object sender, EventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.ClusterMyPoint == null) return; - var iflags = (uint)ScenarioClusterPointFlagsUpDown.Value; - populatingui = true; - for (int i = 0; i < ScenarioClusterPointFlagsCheckedListBox.Items.Count; i++) - { - var c = ((iflags & (1 << i)) > 0); - ScenarioClusterPointFlagsCheckedListBox.SetItemCheckState(i, c ? CheckState.Checked : CheckState.Unchecked); - } - populatingui = false; - Unk_700327466 f = (Unk_700327466)iflags; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.ClusterMyPoint.Flags != f) - { - CurrentScenarioNode.ClusterMyPoint.Flags = f; - SetScenarioHasChanged(true); - } - } - } - - private void ScenarioClusterPointFlagsCheckedListBox_ItemCheck(object sender, ItemCheckEventArgs e) - { - if (populatingui) return; - if (CurrentScenarioNode == null) return; - if (CurrentScenarioNode.ClusterMyPoint == null) return; - uint iflags = 0; - for (int i = 0; i < ScenarioClusterPointFlagsCheckedListBox.Items.Count; i++) - { - if (e.Index == i) - { - if (e.NewValue == CheckState.Checked) - { - iflags += (uint)(1 << i); - } - } - else - { - if (ScenarioClusterPointFlagsCheckedListBox.GetItemChecked(i)) - { - iflags += (uint)(1 << i); - } - } - } - populatingui = true; - ScenarioClusterPointFlagsUpDown.Value = iflags; - populatingui = false; - Unk_700327466 f = (Unk_700327466)iflags; - lock (scenariosyncroot) - { - if (CurrentScenarioNode.ClusterMyPoint.Flags != f) - { - CurrentScenarioNode.ClusterMyPoint.Flags = f; - SetScenarioHasChanged(true); - } - } - } - } -} diff --git a/Project/ProjectFormOLD.resx b/Project/ProjectFormOLD.resx deleted file mode 100644 index 5170a5b..0000000 --- a/Project/ProjectFormOLD.resx +++ /dev/null @@ -1,436 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdGYXN0Q29sb3JlZFRleHRCb3gsIFZlcnNpb249Mi4xNi4yMS4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWZiOGFhMTJiOTk0ZWY2MWIMAwAAAFFTeXN0 - ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2Vu - PWIwM2Y1ZjdmMTFkNTBhM2EFAQAAACJGYXN0Q29sb3JlZFRleHRCb3hOUy5TZXJ2aWNlQ29sb3JzBgAA - ACg8Q29sbGFwc2VNYXJrZXJGb3JlQ29sb3I+a19fQmFja2luZ0ZpZWxkKDxDb2xsYXBzZU1hcmtlckJh - Y2tDb2xvcj5rX19CYWNraW5nRmllbGQqPENvbGxhcHNlTWFya2VyQm9yZGVyQ29sb3I+a19fQmFja2lu - Z0ZpZWxkJjxFeHBhbmRNYXJrZXJGb3JlQ29sb3I+a19fQmFja2luZ0ZpZWxkJjxFeHBhbmRNYXJrZXJC - YWNrQ29sb3I+a19fQmFja2luZ0ZpZWxkKDxFeHBhbmRNYXJrZXJCb3JkZXJDb2xvcj5rX19CYWNraW5n - RmllbGQEBAQEBAQUU3lzdGVtLkRyYXdpbmcuQ29sb3IDAAAAFFN5c3RlbS5EcmF3aW5nLkNvbG9yAwAA - ABRTeXN0ZW0uRHJhd2luZy5Db2xvcgMAAAAUU3lzdGVtLkRyYXdpbmcuQ29sb3IDAAAAFFN5c3RlbS5E - cmF3aW5nLkNvbG9yAwAAABRTeXN0ZW0uRHJhd2luZy5Db2xvcgMAAAACAAAABfz///8UU3lzdGVtLkRy - YXdpbmcuQ29sb3IEAAAABG5hbWUFdmFsdWUKa25vd25Db2xvcgVzdGF0ZQEAAAAJBwcDAAAACgAAAAAA - AAAAlgABAAH7/////P///woAAAAAAAAAAKQAAQAB+v////z///8KAAAAAAAAAACWAAEAAfn////8//// - CgAAAAAAAAAAjQABAAH4/////P///woAAAAAAAAAAKQAAQAB9/////z///8KAAAAAAAAAACWAAEACw== - - - - 17, 17 - - - 146, 17 - - - 277, 17 - - - - - AAABAAMAICAAAAAAGACoDAAANgAAABAQAAAAABgAaAMAAN4MAABAQAAAAAAYACgyAABGEAAAKAAAACAA - AABAAAAAAQAYAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/u3v+Pn6//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AP7+/vX3/rzA3OHl9fz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7//+zv+3Z6qcLI5Pr7/wAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAP7+/+br+15in6+33vf5/wAAAAAAAAAAAAAAAP7+//7+/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//v8//v8//3+/wAAAAAAAAAAAAAAAAAAAP7+/+Ho+1dana20 - 4/b4/wAAAAAAAPz9//P2/+Tp/ezw/vz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///X4 - /9Pa+tPa+/H1//z9/wAAAAAAAAAAAAAAAP7+/93k+SsscaSr3PX3/wAAAP7+//L1/7W98AcWgrvC8Pj6 - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/+bs/xohiAEJdrvF9+7y//z9/wAAAAAAAAAA - AP7+/9rh+CEkapmh0/T3/wAAAPj6/9HZ/AEHcgEEb9LZ+/r7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAP7//+/z/3F+zAAAXwQLcZai3fb4/wAAAAAAAAAAAP3+/97l/E9Tmaau4fT3/wAAAO/0/1dd - sAAAV7a/8/H1//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPr8/+jv/46Y3QUUf6Ot - 5PX4/wAAAAAAAAAAAP3+/9zj+3Z6wLe/7fX4/wAAAPD0/212xnaAzerw//z9/wAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/+/z/+Dm+/D0//z9/wAAAAAAAP7+//j6/9Pd+UhLjb/H - 9/D0//3+//n7/+nt/+jt//n7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AP7///7+//7+//7+/wAAAAAAAPr8/+7z/83W+ImU2A0UdFNarr/K9env//X4//z9//3+//7//wAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///j6/+Pq/255 - xhckjE5XsVVftUlTqwAKeTA9nr3H8+7z//v8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+//b4/9Tc+Sc0mRonj8rV/crX/ZSb48rX/brG8wwWgQAEdJei - 4efu//n7//7+//z9//z9//z9//z9//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//f5/+3y/+nv/+ft - /8vV+io2mImU2M7c/7vG9yIvlQAOfCg4mM3Y/s/c/4aR1AQRfGtzwtni/ebt/9vi/tri/tXd+9Tc+O3x - /vz9/wAAAAAAAAAAAAAAAAAAAAAAAPn6/87V+FVftkRPrFlnvSEqjQoUfmJvwWFvvg0TfQQIcxEchwAD - cy89n19rvVVitQwZgwAAaiMrkT9NqTVBoiw3mhQihig1mNLX+fv8/wAAAAAAAAAAAAAAAAAAAAAAAPb5 - /52l4EFLqoCK03yF0VBctGhyw52o5GVrvQAAaneBzsHM+jA3mhYgiTtIpJOf3ouW2AAAbmh0wbbA8bS+ - 7qiz5pCb16+56e/z//3+/wAAAAAAAAAAAAAAAAAAAAAAAPv8//H1/+vw/+zx/+nv/7/J9YqP3MbP/8LM - +hwqkFZftaCp5EhRrcTQ+9jj/8rW/UJMqn6J0ebt//X3//f5//b4//X3//f5//z9/wAAAAAAAAAAAAAA - AAAAAAAAAP7+//z9//3+/wAAAAAAAP3+/+7z/6at64iP3aWs7XN8zRIfhyUykp2o5MHM+oKM0xonjY6X - 2+jv//v8/wAAAP7+//n7//b5//r7//7//wAAAAAAAAAAAAAAAP7+//f5/+rw/9Pa9fL0/v7//wAAAAAA - APv8//H1/+Tr/7i/91liu0NPq0VQrS06m0NNqDdCoYqU1+nv//v8/wAAAAAAAPn7/9zi/qSt59ri/fL1 - //v8//7//wAAAPz9//D0/8rT+h0sjkVQrPD0/wAAAAAAAAAAAAAAAAAAAPz9/+7z/8LL9Jqk4aGq6LW/ - 8c3W9+Xs/vH1//v8/wAAAAAAAAAAAPf5/6at5gAAbxIfh6u16+Po/fr7/wAAAPb5/6ev5gAIeAAPernC - 8fX4/wAAAAAAAP3+//v8//z9/wAAAP3+//j6//P3//P2//b4//r8//7+//7+//v8//r8//3+/wAAAPv8 - /+Xr/nuIzwAAbBseg5Sb2fb5/wAAAPf5/8DF8pWe3d/n/vT3//39/wAAAPv8/+zx/87V9+3x/v3+/wAA - AP3+//j6//X4//v8/wAAAAAAAPn7/+Dm/snR9fD0//39//z8/fv8/+3y/8LK9aGq4dfd9/n7/wAAAPz9 - //b5//X4//v8/wAAAAAAAP7+/+7z/4aP1gEPet7k/f39/wAAAPf5/83U+ZCZ2u3x/v7+/wAAAPP3/215 - wgAJd7fB8/L1//7+/wAAAP3+//j6//f5//r8//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAPj6/87W/AAA - X2duue3y//7+/wAAAPD0/05asBQfidzj/P39/wAAAPX4/6Su6AAAXBccgtff/vv8/wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP3/3F8xhYli9Xe/fn6/wAAAAAAAO3y/1pltQAJd9be - /fv8/wAAAPz9/+rw/36I0Bknjs/W+vv8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAPf5/8HI7tnf+/X4//7+/wAAAAAAAO/0/3R7xgAAb9ng/Pz9/wAAAAAAAPn7/+Ln/dLY+fP2//3+ - /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//r7//v8//7+/wAAAAAAAAAA - APb4/7/F84eP0e/0//7+/wAAAAAAAP7+//z9//v8//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz9//b5//X4//v8/wAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////w////4 - P///+D////g8//D4MH/geCB/4Dggf+A4IH/wOCD/+DAB//hgAf//gAP//wAAB/AAAAPwAAAD8AAAA/AA - AAfjAAEHgYADAQPgBwEDEAEBAghgAQwIIEH8CCB//Bggf/wYMH/8ODD///h/////////////KAAAABAA - AAAgAAAAAQAYAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+vv/fL1/v///wAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///4+Vx7/F5v///wAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAP///4CHtrS62////////////////////wAAAAAAAAAAAP////H0/vf6/v// - /////////4yTwrrB4f///+zw+7rA6P39/////wAAAAAAAAAAAP///56l2BkcguXr/P///////42Uw8jO - 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// - /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA - AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc - skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU - 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq - +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz - /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR - p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm - +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB - AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ - /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ - +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd - 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ - 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2OL+NjZ7AAArX2Ok - 4uz/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ - 2eP/LjJ1DAxKfYTE4Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//f7//f7//v7//v// - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA+vv/8PX/3OX/gILIR0eVeoHC3eb/8fX/+/z/AAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+Pr/ - +Pr/+Pr/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+vv/+vv/+/z//f3//v7/AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/2eP9ZWeqHx1obnOz4Or/8fX/+/z/AAAAAAAAAAAAAAAA/v7/ - +/z/9fj/8vb/8PX/7vT/8fb/9fj/+fr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/9fj/9fj/9Pj/9Pf/9vn/+/z//v7/ - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP9ODp9AAA5jZDQ5O7/8PX/+/z/AAAA - AAAAAAAA/v7/+/z/9Pf/7fP/5u//wsz6j5XfuMDx7fL/9vn//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+Pr/8/b/5+3/2eH/2uP/ - 5u3/7fP/8/b/+vv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3ef/U1ebBgVKio/O - 4uz/8fX/+/z/AAAAAAAA/v///P3/9fj/7fP/4uv/hIzZHSWPAABmU1i14ub/9/r/+/z/AAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9Pf/ - 7/X/09z/TlSzNzWYj5bh5O7/6/L/8vb/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fX/ - 2eP/QUWIEhBZbnSz3uj/8fb/+/z/AAAAAAAA/f7/+Pr/7/T/6PH/iI7cAABvAABqAABncXjK6O//9fj/ - +/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA+/z/8/f/2uD/Z27EAABnAABiBgl4jJTd5vD/6O//8vX/+fv//f7/AAAAAAAAAAAAAAAAAAAA - AAAAAAAA+vv/8fb/2OP/Mjd6AQE6ZGup4er/8fX/+/z/AAAAAAAA+vz/8fX/6/T/xM/8ExyJAABwAABu - GySRxc387fT/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA+vz/8/f/1Nr/MzqhAABhAxOBAARyBgp5jpLg5Oz/7PP/9Pf/+vz//v7/ - AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP/KCtvBwZOjJHS4Or/8fX/+/z/AAAA/f7/9/n/7fP/3+j/ - UFq3AABtAAZ3BAh6mZ/n5vD/7vP/+Pr//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/6e//sbb1KzWcAABwBhaBAAFyAgp6fITR - 1d777/T/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3+j/WF2hBglTnaTj5O3/8PX/+/z/AAAA - /P3/9Pf/6vL/k5riAAByAAR0AABrY2vE4ur/6vH/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/7fL/5O3/ytX/RU6w - AABpAA5+AABuAABnhord6e7/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/7/T/3+j/k5jbT1KdgYjJ - 3uf+8fX/+/z/AAAA+/z/9fn/4ef/NDqhAABnAABrJjCU0Nn/5/D/8fX/+vv//v7/AAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ - 9vn/7vP/6vP/ztb/O0CmAABpAABrQkuoxMn57PH/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/ - 2+X/en/CUFGak5nY3+j/8fX//P3/AAAA/P3/9fj/4en/i5DbNT2hIyuTpqzv4uz/7vP/9/n//f7/AAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAA/v7//P3/9vn/7/P/6vL/ytH/X2i9XWi7wsf/6e//8/f/+Pr//v7/AAAAAAAAAAAAAAAA - AAAAAAAA+vv/8PX/3OX/WF2hW1ylvMD+3uf/8PX/+/z/AAAA/f7/9vn/7fP/4uj/j5Pgf4LV3+X/6fD/ - 9Pf//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/8vX/7fP/5+//5u7/6vD/8PT/9vn//P3//v7/ - AAAAAAAAAAAAAAAAAAAA/f7/9/n/7fP/0tz9LDJzNjh/nqTk2uT/7fL/9/n//f7//f7/+fv/8/b/7PL/ - 3eX/zM//5ev/9fj/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f3/+vv/9/n/9vn/9fj/9vn/ - +fr//P3//v7/AAAAAAAAAAAA/v///f7/+vv/9vn/7/T/5vD/2Ob/VFubERNdoajk4u//5O7/7vP/9vj/ - +fr/+vv/+Pr/9fj/9Pj/9fj/9fj/+Pr//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///v7/ - /f7//P3//P3//f3//v7//v//AAAAAAAAAAAA/f7/+vz/9vn/8fX/7vT/5O3/3eb/z9n/cHjICxN5d37L - z9n/2eP/5O3/6/L/8PT/9Pf/9/n/+vv/+vv/+/z//P3//f3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+Pr/8/b/7vT/6vL/z9r+jZjeQUeq - IiuQCBN3AAFrBRB8Nj2iUViym6XlydH/4+z/6/L/8PT/9/n/+/z//f7//v//AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/8fX/6/L/3uf/ - mKTkLzibAABoAAB0Fx+HDBh7FSGDAg16AABYAABlCBB/Ji2UhYza1+D/6PL/7fL/9Pf/+vv//f7/AAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/9/n/ - 8PT/7PT/z9j/XmO+AABtAABcMDSXoajsu8X7VV+5hYzblZ/fTVSxFSKMAABkAABnAAN2Qkmpsbrz5e3/ - 6vH/8fX/+Pr//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAA/P3/9/n/8PX/7PT/vcn3LTOZAABaAgR1ZWzD0Nf/5vL/1OP/l53lzs3/6fP/4+7/sLzwZ23CBxSD - AABnAABlHiaSmqHo3+j/5+//7/T/9vn//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v//AAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/ - /v7//v7//v7//f7/+/z/9vj/7vP/7PX/tcLzEBeGAABkPEWlqLPt2eX/4e7/3On/uMX1gofVe3vPhYzY - z93+5/X/4e3/lJ3gHiOPAABtAABqChiEbHLIytD/5/D/7PL/8/f/+Pr/+fr/+Pr/+Pr/+Pr/+Pr/+Pr/ - +Pr/+fv/+vv/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - /v7//f7/+/z/+fv/9/n/9vj/9fj/9Pf/8fX/7PL/4uv/l6HgDhF7AAN4iZDe0d7/3uz/4vD/w83/VVm3 - ICiSAAFyAABlAABwaHTD1N//2un/3er/w838ZW3BEyOJJzKVAQ16NDmfwsn75fD/5u7/7PL/7vP/7fP/ - 7fP/7fL/7fP/7vP/7/T/8fb/9Pj/9vn/+fr//f3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAA/v7//P3/+Pr/9Pf/8fX/7vT/7PL/6/L/6fH/5u7/6vX/tsD0CQx4AAFwkZvi7ff/4vD/ - 4fD/z9j/OkGlAABiAABwBxWAAAt7BBN+P0uofYLUztb/4O7/6fb/6fP/qa7xQkyoBg56AABqMjugx8/+ - 5fH/4Ov/4On/3uj/3eb/3+j/3uj/1+L/0d3/1d7/3+f/7fL/9vj/+vz//v7/AAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+fr/8/f/6/L/2d//v8j6vcf5ucP1wMv8wM3+vMj6PkqoAABo - UF25usP7tsPyvsr6sLrwQ0utAABqAAV1OUameIDRKDWZAAd2GyeOLDecmaHntsL0pbLom6riq7LzUlu0 - AANzBhR/AAZ0NT+ja3bBY2i/XGG6UViyWl65XGG7XGC6TVWvQU6pPkalODygqK7p8vb/+vz//v7/AAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/7/T/wcj2R0ysExeFERmGDxuIFB6K - FBqICxSEAABsAAByDBiDCRSBBRCADhaFCRODAAh4AxF/AAl4CxeDHSaPAAp6AAN0AA19AAd3CBOBEBqH - BhGBAAh5AABwAAByAAh5BhSCAxWCAABsAABvAABlAABnAABxAABjAABmAABhAABdAABYAABhCAt/q7Lr - 8/f/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+fv/3uT/SE2vAABn - CBB/GiCMLzmfLTWcGByJFRyKGCOOMj2gHymRDxiGGyOPLDCXBRF/AAh3BhaCEyKMICqTKC2WNDqfIzCV - Awx6Eh+JHiaPAAR3AAZ5CxSDICWQX2q7Q1CqAA1+AAFxDxuHiZTbVGC4dHnQnabrTVqzY23EUV62Slau - LjaZXWm9sLjz5ez/9vn/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ - +Pv/4+n+e4LPfoPVpqv2vsf/zNX/zdb/xtH/v8v8pK7spKfysLb3vcr4ws784ej/hI/YAAZ1AAJzVF25 - yM//3Of/5+//i5LcAABpMzyfp6vxoKznlqHhqbbtx9H/8fz/kpvfAABiAABph4zc5PD/2OP/193/3un/ - 1+D/2OH/1+D/0Nr/zNL/3+j/6/L/7/T/9vn//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAA/f7/+Pr/9Pf/6vD/5u3/3+b/4uv/6PD/5+//5O3/5/P/sL3sXmS7mZzoz9f/3+z/4e// - mKLiEiKKCBF/KTWZr7T06/f/3ev/VF2zChSBipPcz9v+4u7/3ur/3ev/5/X/qrPrISmSDRJ2Xmq/3ur/ - 4uv/6vH/7fP/7fL/7/T/7vP/7fP/7fP/8PX/8fX/9Pf/+Pr/+/z//v7/AAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+Pr/9vn/9Pf/8vb/8vb/8/b/9Pf/7/T/6/L/tL/ubXLH - en/Ti43gqavy0t3/nafjMj6fJzaaAAV1GyeOYmW7Nz6fAABgNj6i1N//3uz/2uX/3Oj/5PH/wcj7FR2J - AAN0gong0tr/6fH/7/P/9vj/+Pr/+fv/+fv/+Pr/+Pr/+Pr/+fv/+vv//P3//f7//v//AAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+/z/+/z/+/z//f3//f7/ - +fv/8fX/5Oz/jpbfc3jObnXLcXfOk5rks7b4iY3dR1KvDhuEAABoAABlEBV9U12ytcD13Or/3en/3ej/ - 1eL/q7fvGR+MKDKZbnnNxc/76PD/8fX/+fr//f7//v//AAAA/v7//f7//f3//P3//f3//f7//v//AAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//f7//v7/AAAA - AAAAAAAAAAAAAAAA/f7/9vn/7/T/yNH5lJrleoDVmZ3pmpzpc3nPfoTWf4bYVFy3HSaLZ3PGsrb8v8r8 - y9n9q7jre4LRf4fUgIvXAwZ1AABrhYjb0NX/6PH/8PX/+Pr//f7/AAAAAAAA/v///f3/+vv/+Pr/9/r/ - 9/n/+Pr/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f7/+/z/+fr/9vj/9/n/ - +vz/+vv/+/z//v7/AAAAAAAAAAAAAAAA/v7/+vz/8/f/7PL/2uT/t8H1srP6vcH+nKTnSlOxV2C7TVaz - WGS8QUqmSlSuSFOtR1GtbXTKVl23ARB5AAh2AABnd33P3eP/4ur/7/T/9/n//P3/AAAAAAAAAAAA/P3/ - 9/n/8vb/7PH/6fD/7PL/7vP/8vb/9vn/+/z//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/+Pr/ - 8/b/7/T/8Pb/6vH/3eP97vL++fr//P3/AAAAAAAAAAAAAAAAAAAA/f7/+vv/9fj/7/T/5+//z9f+t7v4 - uLn9Z2zFLzucFCGIMz6gGCCMAAd4AAl2Dx2EER+GXWK8c3XLKzKXd4LP4er/6/L/8PX/9/n//P3//v// - AAAAAAAA/v7/+fv/8/b/7PP/y9H/i4/erLbt4er/5e3/7fP/8/b/+fv//f3//v7/AAAAAAAAAAAAAAAA - /v7/+/z/9vj/8PT/6/L/3+n/x9H9aHTAZGvG3+b9+Pr/+/z/AAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ - +Pr/8vb/6/H/3OX+wMn4maDmdHrPWGG6T1a1eoHWcHfOTlayUlq1SlKubHjAxMj/0dn/4+v/7PL/8vb/ - +Pr//P3//v7/AAAAAAAAAAAA/f7/+fr/7vP/xsv5YGXAHymRKjKYYWS9rbLz4u3/6/P/8vb/+fr//f7/ - AAAAAAAAAAAA/v//+/z/9vj/7fL/5e3/xs7/Y23BIiiSAABeLTab3+b/9/r/+/z/AAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAA/f7/+vz/9vj/8PX/6vH/3eb/ydL8xM/6uMPyt733w8j/zNb/1Nz/3OT/4uz/5u7/ - 7fP/8vb/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAA/f7/+fv/7vP/jpHiAAJ1CxaBER6GAABoFRmGbXbH - 0Nf/7PL/9fj//P3/AAAAAAAAAAAA/v7/+fv/8/f/4Of/hYvbKDGZAABuAABdAAZyi5La5+7/9vn/+/z/ - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/9ff/8vb/7/X/7fP/6/L/5u3/5ez/6fD/ - 7PP/7/T/8fX/9Pf/9/n/+vv//P3//v7//v//AAAAAAAAAAAAAAAAAAAA/v7/+fv/8fb/2eH9fIbQExqH - AABrAAp6AAFyAABwS0+uztX39vn/+vz/AAAAAAAAAAAA/f7/+Pr/8ff/qbLpAABrAABhAABwDBWAfobX - 5e3/8PX/9vn//f3/AAAAAAAA/v///f7/+/z/+vv/+vv/+vz//P3//v7//v///v7//P3/+vz/+Pr/9/n/ - 9vj/9vj/9vj/9vj/9/n/+fr/+/z//P3//f7//v7//f7//P3/+/z/+vz/+/z//P3//v7/AAAA/v7/+/z/ - 9fj/7/T/5/H/uML1U1e1AAh5AABuAABvMjmdv8bz9vr/+vv/AAAAAAAAAAAA/f7/+fv/7/T/iY7aDxSA - GiONa3XHsr7w4Oj/6/H/9Pf/+vz//v7/AAAA/v///P3/+Pr/9Pf/8/f/9fj/9fj/9vn/+/z//v7/AAAA - AAAAAAAA/v7//f7//P3/+/z/+/z//P3//f7//v//AAAAAAAAAAAA/v7/+/z/9/n/9vn/9vn/9Pj/9vn/ - +/z//v7/AAAA/f7/+vz/9fj/7/T/6vL/3ef/i5PbGRqJBQl5jJbZ6vH/9Pj/+/z/AAAAAAAAAAAA/f7/ - +fv/8fT/1Nn9t7/0wcr54er/7fT/8fX/9fj/+vv//f7/AAAAAAAA/f3/+Pr/8PT/6/L/3uX/ztb/5Or/ - 8/f/+Pr//f7/AAAAAAAAAAAA/f7/+vz/+Pr/+fv/+fv/+vv//f3//v//AAAAAAAAAAAA/P3/9/n/7vL/ - 193/ztf/5u3/7vP/9Pf/+/z//v7/AAAA/v7//P3/+Pr/8fX/7PP/5/D/sLfxoKnk4+r/8vf/9/n//f3/ - AAAAAAAAAAAA/v7/+/z/9vn/9Pf/8vb/8fb/8fX/9Pf/+Pr//P3//v7/AAAAAAAA/v7/+vv/8vb/5+7/ - y9H/WWO9KSmSkZXj6vD/+Pv//P3/AAAAAAAA/f7/+Pr/9fj/8vb/6O7/7vP/9fj/+Pr//f7/AAAAAAAA - /v//+vv/8vb/7PP/hYraKiqKlp7i6PD/7fP/9ff/+/z//v7/AAAAAAAA/f7/+vv/9ff/8fX/8PX/8vb/ - 8/f/9vn/+/z//v7/AAAAAAAAAAAAAAAA/f7/+/z/+vv/+fr/+fr/+vv//P3//v7/AAAAAAAAAAAAAAAA - /P3/9fj/7PL/1d7/RUysAABhAABlg4ja6/D/+Pr//P3/AAAAAAAA+/z/9fj/6e7/2eD/h4/bnaXg7PH/ - 9fj/+/z/AAAAAAAA/v7/+Pr/8PX/y9X1JDGVAABaERWDoKnp6PH/7vP/9/n//P3/AAAAAAAAAAAA/v7/ - /P3/+vv/+fv/+fv/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//v7//v7//v//AAAAAAAA - AAAAAAAAAAAA/v7/+fv/8PX/7PX/ipPdAABsAABlQ1Cp3Ob/7vP/9/n//f7/AAAAAAAA+fv/9Pj/yNH5 - Ule2DBJ8Ljie0df+8fb/+fv//v7/AAAA/v7/+Pr/7/X/hY3YAABxAAl7AABuEBaEs7nz6fH/8fX/+vv/ - /v7/AAAAAAAAAAAAAAAA/v///v7//v7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9vn/7PL/0tn/LzidAQFsAAB0iZHb6vP/8PT/+fv//v//AAAA - /v7/+Pr/8vf/r7rqAAV4AABdPUen1N//7PL/9vn//f7/AAAA/v7/+fr/7/T/yc75S1G0AABrARKAAABp - Qker0df/7fP/9/n//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/5+7/cXXNAAd2AABuMDebzdT97PL/ - 9vj//P3/AAAAAAAA/v7/9/n/7/X/tL/uFCCLAABqHSqRvcf46fD/9Pf//f3/AAAAAAAA+vv/8vX/6vH/ - yM3+JC2XAABtAAV2Agx9q7Ly7vT/9vn//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/4uj/WWO1AAVx - KTaYu8T07fT/8vb/+vv//v7/AAAAAAAA/v7/9/n/7vX/vsn1Iy2SAABrAQ99mp/o6PD/9Pf//P3/AAAA - AAAA/P3/9/n/7vP/6fL/s7z2DBB/AABeQ0uttrr56e7/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ - +fv/4ef6g4zNbXfFw8v27fT/8vb/+Pr//f3/AAAAAAAAAAAA/v7/9/n/7vT/yNL7MjucAABtBxF/nKLo - 6fH/9Pf//P3/AAAAAAAA/v7/+/z/9fj/7fL/6/T/jZXbLzScrrP14en/7fL/+fv//v7/AAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAA/f7/+vz/8PP91dr34+f/8vb/8/f/9/r//P3//v//AAAAAAAAAAAA/v7/+Pr/8PX/1N3/ - QUqmAQRxBQ98m6Dm7PL/9fj//P3/AAAAAAAAAAAA/v7/+/z/9ff/8PX/5ez/ytH94ej/8vb/9vj/+/z/ - /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA - /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ - 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA - AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA - /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ - /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ - /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// - ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// - //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA - H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A - A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA - /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A - AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf - AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 - AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// - ///////gD/////////Af//////////////8= - - - \ No newline at end of file From 010350db7ab45aa7ad68fe63b76a3437b101620b Mon Sep 17 00:00:00 2001 From: dexyfex Date: Tue, 4 Dec 2018 17:09:28 +1100 Subject: [PATCH 024/158] Fixed build warnings --- Project/Panels/GenerateNavMeshPanel.cs | 4 ++-- WorldForm.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Project/Panels/GenerateNavMeshPanel.cs b/Project/Panels/GenerateNavMeshPanel.cs index 2745394..be39eec 100644 --- a/Project/Panels/GenerateNavMeshPanel.cs +++ b/Project/Panels/GenerateNavMeshPanel.cs @@ -944,8 +944,8 @@ namespace CodeWalker.Project.Panels //find the next bottom and top indexes, step by the max offset int nqib = qib; int nqit = qit; - int ndyb = 0; - int ndyt = 0; + //int ndyb = 0; + //int ndyt = 0; diff --git a/WorldForm.cs b/WorldForm.cs index 36b9b99..0c002c7 100644 --- a/WorldForm.cs +++ b/WorldForm.cs @@ -78,7 +78,7 @@ namespace CodeWalker int ControlBrushTimer = 0; bool ControlBrushEnabled; - float ControlBrushRadius; + //float ControlBrushRadius; Entity camEntity = new Entity(); PedEntity pedEntity = new PedEntity(); From 61afd7c24f0416947d7ae9706f1b8d6f59d358a7 Mon Sep 17 00:00:00 2001 From: dexy Date: Wed, 5 Dec 2018 11:47:15 +1100 Subject: [PATCH 025/158] TestAudioYmts function in GameFileCache --- CodeWalker.Core/GameFiles/GameFileCache.cs | 72 ++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index 7e052ec..e25db1b 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -139,6 +139,7 @@ namespace CodeWalker.GameFiles InitDlc(); + //TestAudioYmts(); //TestMetas(); //TestYcds(); //TestYmaps(); @@ -2165,6 +2166,77 @@ namespace CodeWalker.GameFiles + public void TestAudioYmts() + { + + StringBuilder sb = new StringBuilder(); + + Dictionary allids = new Dictionary(); + + foreach (RpfFile file in AllRpfs) + { + foreach (RpfEntry entry in file.AllEntries) + { + try + { + var n = entry.NameLower; + if (n.EndsWith(".ymt")) + { + UpdateStatus(string.Format(entry.Path)); + //YmtFile ymtfile = RpfMan.GetFile(entry); + //if ((ymtfile != null)) + //{ + //} + + var sn = entry.GetShortName(); + uint un; + if (uint.TryParse(sn, out un)) + { + if (allids.ContainsKey(un)) + { + allids[un] = allids[un] + 1; + } + else + { + allids[un] = 1; + //ushort s1 = (ushort)(un & 0x1FFFu); + //ushort s2 = (ushort)((un >> 13) & 0x1FFFu); + uint s1 = un % 80000; + uint s2 = (un / 80000); + float f1 = s1 / 5000.0f; + float f2 = s2 / 5000.0f; + sb.AppendFormat("{0}, {1}, 0, {2}\r\n", f1, f2, sn); + } + } + + + } + } + catch (Exception ex) + { + UpdateStatus("Error! " + ex.ToString()); + } + } + } + + var skeys = allids.Keys.ToList(); + skeys.Sort(); + + var hkeys = new List(); + foreach (var skey in skeys) + { + FlagsUint fu = new FlagsUint(skey); + //hkeys.Add(skey.ToString("X")); + hkeys.Add(fu.Bin); + } + + string nstr = string.Join("\r\n", hkeys.ToArray()); + string pstr = sb.ToString(); + if (pstr.Length > 0) + { } + + + } public void TestMetas() { //find all RSC meta files and generate the MetaTypes init code From 0c4001fa4bdb1f16917e18942bb0e377539d43f8 Mon Sep 17 00:00:00 2001 From: dexy Date: Wed, 5 Dec 2018 16:23:34 +1100 Subject: [PATCH 026/158] Improved RenderableCache item invalidation, Added Performance Statistics window --- CodeWalker.Core/GameFiles/GameFileCache.cs | 27 +- CodeWalker.Core/Utils/Cache.cs | 8 + CodeWalker.csproj | 9 + Rendering/RenderableCache.cs | 117 ++++-- Rendering/Renderer.cs | 1 + StatisticsForm.Designer.cs | 246 ++++++++++++ StatisticsForm.cs | 45 +++ StatisticsForm.resx | 412 +++++++++++++++++++++ WorldForm.Designer.cs | 8 +- WorldForm.cs | 8 +- 10 files changed, 851 insertions(+), 30 deletions(-) create mode 100644 StatisticsForm.Designer.cs create mode 100644 StatisticsForm.cs create mode 100644 StatisticsForm.resx diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index f3a543f..15def85 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -15,7 +15,6 @@ namespace CodeWalker.GameFiles public RpfManager RpfMan; private Action UpdateStatus; private Action ErrorLog; - public long CurrentMemoryUsage = 0; public int MaxItemsPerLoop = 1; //to keep things flowing... private ConcurrentStack requestQueue = new ConcurrentStack(); @@ -88,6 +87,32 @@ namespace CodeWalker.GameFiles private string GTAFolder; private string ExcludeFolders; + + + public int QueueLength + { + get + { + return requestQueue.Count; + } + } + public int ItemCount + { + get + { + return mainCache.Count; + } + } + public long MemoryUsage + { + get + { + return mainCache.CurrentMemoryUsage; + } + } + + + public GameFileCache(long size, double cacheTime, string folder, string dlc, bool mods, string excludeFolders) { mainCache = new Cache(size, cacheTime);//2GB is good as default diff --git a/CodeWalker.Core/Utils/Cache.cs b/CodeWalker.Core/Utils/Cache.cs index 3b8cd45..2917069 100644 --- a/CodeWalker.Core/Utils/Cache.cs +++ b/CodeWalker.Core/Utils/Cache.cs @@ -16,6 +16,14 @@ namespace CodeWalker private LinkedList loadedList = new LinkedList(); private Dictionary> loadedListDict = new Dictionary>(); + public int Count + { + get + { + return loadedList.Count; + } + } + public Cache() { } diff --git a/CodeWalker.csproj b/CodeWalker.csproj index 1b5eec7..5d9c7bd 100644 --- a/CodeWalker.csproj +++ b/CodeWalker.csproj @@ -475,6 +475,12 @@ SettingsForm.cs + + Form + + + StatisticsForm.cs + Form @@ -678,6 +684,9 @@ SettingsForm.cs + + StatisticsForm.cs + TextInputForm.cs diff --git a/Rendering/RenderableCache.cs b/Rendering/RenderableCache.cs index 301e971..c6b4df3 100644 --- a/Rendering/RenderableCache.cs +++ b/Rendering/RenderableCache.cs @@ -26,8 +26,39 @@ namespace CodeWalker.Rendering { get { - //return (GeometryCacheUse + TextureCacheUse + BoundCompCacheUse + InstanceCacheUse); - return (renderables.CacheUse + textures.CacheUse + boundcomps.CacheUse + instbatches.CacheUse); + return renderables.CacheUse + + textures.CacheUse + + boundcomps.CacheUse + + instbatches.CacheUse + + distlodlights.CacheUse + + pathbatches.CacheUse + + waterquads.CacheUse; + } + } + public int TotalItemCount + { + get + { + return renderables.CurrentLoadedCount + + textures.CurrentLoadedCount + + boundcomps.CurrentLoadedCount + + instbatches.CurrentLoadedCount + + distlodlights.CurrentLoadedCount + + pathbatches.CurrentLoadedCount + + waterquads.CurrentLoadedCount; + } + } + public int TotalQueueLength + { + get + { + return renderables.QueueLength + + textures.QueueLength + + boundcomps.QueueLength + + instbatches.QueueLength + + distlodlights.QueueLength + + pathbatches.QueueLength + + waterquads.QueueLength; } } public int LoadedRenderableCount @@ -189,15 +220,14 @@ namespace CodeWalker.Rendering public void Invalidate(BasePathData path) { - lock (updateSyncRoot) + //lock (updateSyncRoot) { pathbatches.Invalidate(path); } } - public void Invalidate(YmapGrassInstanceBatch batch) { - lock (updateSyncRoot) + //lock (updateSyncRoot) { instbatches.Invalidate(batch); } @@ -225,8 +255,10 @@ namespace CodeWalker.Rendering { private ConcurrentStack itemsToLoad = new ConcurrentStack(); private ConcurrentStack itemsToUnload = new ConcurrentStack(); - private LinkedList loadeditems = new LinkedList(); - private Dictionary cacheitems = new Dictionary(); + private ConcurrentStack itemsToInvalidate = new ConcurrentStack(); + private ConcurrentStack keysToInvalidate = new ConcurrentStack(); + private LinkedList loadeditems = new LinkedList();//only use from content thread! + private Dictionary cacheitems = new Dictionary();//only use from render thread! public long CacheLimit; public long CacheUse = 0; public double CacheTime; @@ -240,6 +272,13 @@ namespace CodeWalker.Rendering LastFrameTime = DateTime.UtcNow.ToBinary(); } + public int QueueLength + { + get + { + return itemsToLoad.Count; + } + } public int CurrentLoadedCount { get @@ -257,17 +296,16 @@ namespace CodeWalker.Rendering public void Clear() { - TVal item; - while (itemsToLoad.TryPop(out item)) - { } + itemsToLoad.Clear(); foreach (TVal rnd in loadeditems) { rnd.Unload(); } loadeditems.Clear(); cacheitems.Clear(); - while (itemsToUnload.TryPop(out item)) - { } + itemsToUnload.Clear(); + itemsToInvalidate.Clear(); + keysToInvalidate.Clear(); } @@ -279,7 +317,7 @@ namespace CodeWalker.Rendering { if (item.IsLoaded) continue; //don't load it again... LoadedCount++; - long gcachefree = CacheLimit - CacheUse; + long gcachefree = CacheLimit - Interlocked.Read(ref CacheUse);// CacheUse; if (gcachefree > item.DataSize) { try @@ -299,6 +337,21 @@ namespace CodeWalker.Rendering } if (LoadedCount >= maxitemsperloop) break; } + while (itemsToInvalidate.TryPop(out item)) + { + //if (!item.IsLoaded) continue;//can't invalidate item that's not currently loaded + try + { + Interlocked.Add(ref CacheUse, -item.DataSize); + //item.Unload(); + item.Load(device); + Interlocked.Add(ref CacheUse, item.DataSize); + } + catch //(Exception ex) + { + //todo: error handling... + } + } return LoadedCount; } @@ -329,6 +382,16 @@ namespace CodeWalker.Rendering { LastFrameTime = DateTime.UtcNow.ToBinary(); TVal item; + TKey key; + while (keysToInvalidate.TryPop(out key)) + { + if (cacheitems.TryGetValue(key, out item)) + { + itemsToInvalidate.Push(item); + item.Unload(); + item.Init(key); + } + } while (itemsToUnload.TryPop(out item)) { if ((item.Key != null) && (cacheitems.ContainsKey(item.Key))) @@ -365,22 +428,26 @@ namespace CodeWalker.Rendering public void Invalidate(TKey key) { if (key == null) return; - TVal item = null; - if (!cacheitems.TryGetValue(key, out item)) return; - if (item == null) return; - if ((item.Key != null) && (cacheitems.ContainsKey(item.Key))) - { + keysToInvalidate.Push(key); - cacheitems.Remove(item.Key); + //TVal item = null; + //if (!cacheitems.TryGetValue(key, out item)) return; + //if (item == null) return; - item.Unload(); - item.LoadQueued = false; - Interlocked.Add(ref CacheUse, -item.DataSize); - Interlocked.Exchange(ref item.LastUseTime, DateTime.UtcNow.AddHours(-1).ToBinary()); + //if ((item.Key != null) && (cacheitems.ContainsKey(item.Key))) + //{ - loadeditems.Remove(item);//slow... - } + // cacheitems.Remove(item.Key); + + // item.Unload(); + // item.LoadQueued = false; + // CacheUse -= item.DataSize; + // //Interlocked.Add(ref CacheUse, -item.DataSize); + // Interlocked.Exchange(ref item.LastUseTime, DateTime.UtcNow.AddHours(-1).ToBinary()); + + // loadeditems.Remove(item);//slow... + //} } diff --git a/Rendering/Renderer.cs b/Rendering/Renderer.cs index c677095..982472b 100644 --- a/Rendering/Renderer.cs +++ b/Rendering/Renderer.cs @@ -17,6 +17,7 @@ namespace CodeWalker.Rendering private DXForm Form; private GameFileCache gameFileCache; private RenderableCache renderableCache; + public RenderableCache RenderableCache { get { return renderableCache; } } private DXManager dxman = new DXManager(); public DXManager DXMan { get { return dxman; } } diff --git a/StatisticsForm.Designer.cs b/StatisticsForm.Designer.cs new file mode 100644 index 0000000..a92e8a6 --- /dev/null +++ b/StatisticsForm.Designer.cs @@ -0,0 +1,246 @@ +namespace CodeWalker +{ + partial class StatisticsForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(StatisticsForm)); + this.MainTimer = new System.Windows.Forms.Timer(this.components); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.GFCMemoryUsageLabel = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.GFCItemCountLabel = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.GFCQueueLengthLabel = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.RCVramUsageLabel = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.RCItemCountLabel = new System.Windows.Forms.Label(); + this.label12 = new System.Windows.Forms.Label(); + this.RCQueueLengthLabel = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.DoneButton = new System.Windows.Forms.Button(); + this.groupBox1.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.SuspendLayout(); + // + // MainTimer + // + this.MainTimer.Enabled = true; + this.MainTimer.Interval = 200; + this.MainTimer.Tick += new System.EventHandler(this.MainTimer_Tick); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.GFCMemoryUsageLabel); + this.groupBox1.Controls.Add(this.label6); + this.groupBox1.Controls.Add(this.GFCItemCountLabel); + this.groupBox1.Controls.Add(this.label4); + this.groupBox1.Controls.Add(this.GFCQueueLengthLabel); + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Location = new System.Drawing.Point(12, 12); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(200, 100); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "GameFileCache"; + // + // GFCMemoryUsageLabel + // + this.GFCMemoryUsageLabel.AutoSize = true; + this.GFCMemoryUsageLabel.Location = new System.Drawing.Point(90, 53); + this.GFCMemoryUsageLabel.Name = "GFCMemoryUsageLabel"; + this.GFCMemoryUsageLabel.Size = new System.Drawing.Size(13, 13); + this.GFCMemoryUsageLabel.TabIndex = 5; + this.GFCMemoryUsageLabel.Text = "0"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(6, 53); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(79, 13); + this.label6.TabIndex = 4; + this.label6.Text = "Memory usage:"; + // + // GFCItemCountLabel + // + this.GFCItemCountLabel.AutoSize = true; + this.GFCItemCountLabel.Location = new System.Drawing.Point(90, 36); + this.GFCItemCountLabel.Name = "GFCItemCountLabel"; + this.GFCItemCountLabel.Size = new System.Drawing.Size(13, 13); + this.GFCItemCountLabel.TabIndex = 3; + this.GFCItemCountLabel.Text = "0"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(6, 36); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(60, 13); + this.label4.TabIndex = 2; + this.label4.Text = "Item count:"; + // + // GFCQueueLengthLabel + // + this.GFCQueueLengthLabel.AutoSize = true; + this.GFCQueueLengthLabel.Location = new System.Drawing.Point(90, 19); + this.GFCQueueLengthLabel.Name = "GFCQueueLengthLabel"; + this.GFCQueueLengthLabel.Size = new System.Drawing.Size(13, 13); + this.GFCQueueLengthLabel.TabIndex = 1; + this.GFCQueueLengthLabel.Text = "0"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(6, 19); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(74, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Queue length:"; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.RCVramUsageLabel); + this.groupBox2.Controls.Add(this.label10); + this.groupBox2.Controls.Add(this.RCItemCountLabel); + this.groupBox2.Controls.Add(this.label12); + this.groupBox2.Controls.Add(this.RCQueueLengthLabel); + this.groupBox2.Controls.Add(this.label8); + this.groupBox2.Location = new System.Drawing.Point(218, 12); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(200, 100); + this.groupBox2.TabIndex = 1; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "RenderableCache"; + // + // RCVramUsageLabel + // + this.RCVramUsageLabel.AutoSize = true; + this.RCVramUsageLabel.Location = new System.Drawing.Point(90, 53); + this.RCVramUsageLabel.Name = "RCVramUsageLabel"; + this.RCVramUsageLabel.Size = new System.Drawing.Size(13, 13); + this.RCVramUsageLabel.TabIndex = 9; + this.RCVramUsageLabel.Text = "0"; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(6, 53); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(73, 13); + this.label10.TabIndex = 8; + this.label10.Text = "VRAM usage:"; + // + // RCItemCountLabel + // + this.RCItemCountLabel.AutoSize = true; + this.RCItemCountLabel.Location = new System.Drawing.Point(90, 36); + this.RCItemCountLabel.Name = "RCItemCountLabel"; + this.RCItemCountLabel.Size = new System.Drawing.Size(13, 13); + this.RCItemCountLabel.TabIndex = 7; + this.RCItemCountLabel.Text = "0"; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(6, 36); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(60, 13); + this.label12.TabIndex = 6; + this.label12.Text = "Item count:"; + // + // RCQueueLengthLabel + // + this.RCQueueLengthLabel.AutoSize = true; + this.RCQueueLengthLabel.Location = new System.Drawing.Point(90, 19); + this.RCQueueLengthLabel.Name = "RCQueueLengthLabel"; + this.RCQueueLengthLabel.Size = new System.Drawing.Size(13, 13); + this.RCQueueLengthLabel.TabIndex = 3; + this.RCQueueLengthLabel.Text = "0"; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(6, 19); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(74, 13); + this.label8.TabIndex = 2; + this.label8.Text = "Queue length:"; + // + // DoneButton + // + this.DoneButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.DoneButton.Location = new System.Drawing.Point(340, 130); + this.DoneButton.Name = "DoneButton"; + this.DoneButton.Size = new System.Drawing.Size(75, 23); + this.DoneButton.TabIndex = 2; + this.DoneButton.Text = "Done"; + this.DoneButton.UseVisualStyleBackColor = true; + this.DoneButton.Click += new System.EventHandler(this.DoneButton_Click); + // + // StatisticsForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(427, 165); + this.Controls.Add(this.DoneButton); + this.Controls.Add(this.groupBox2); + this.Controls.Add(this.groupBox1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "StatisticsForm"; + this.Text = "Performance Statistics - CodeWalker by dexyfex"; + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Timer MainTimer; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Label GFCQueueLengthLabel; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.Button DoneButton; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label GFCItemCountLabel; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label RCQueueLengthLabel; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label RCVramUsageLabel; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.Label RCItemCountLabel; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.Label GFCMemoryUsageLabel; + } +} \ No newline at end of file diff --git a/StatisticsForm.cs b/StatisticsForm.cs new file mode 100644 index 0000000..7fd9be1 --- /dev/null +++ b/StatisticsForm.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CodeWalker +{ + public partial class StatisticsForm : Form + { + private WorldForm worldForm; + + public StatisticsForm(WorldForm wf) + { + worldForm = wf; + InitializeComponent(); + } + + private void DoneButton_Click(object sender, EventArgs e) + { + Close(); + } + + private void MainTimer_Tick(object sender, EventArgs e) + { + if (worldForm == null) return; + + var gfc = worldForm.GameFileCache; + var rc = worldForm.Renderer.RenderableCache; + + GFCQueueLengthLabel.Text = gfc.QueueLength.ToString(); + GFCItemCountLabel.Text = gfc.ItemCount.ToString(); + GFCMemoryUsageLabel.Text = TextUtil.GetBytesReadable(gfc.MemoryUsage); + + RCQueueLengthLabel.Text = rc.TotalQueueLength.ToString(); + RCItemCountLabel.Text = rc.TotalItemCount.ToString(); + RCVramUsageLabel.Text = TextUtil.GetBytesReadable(rc.TotalGraphicsMemoryUse); + + } + } +} diff --git a/StatisticsForm.resx b/StatisticsForm.resx new file mode 100644 index 0000000..0f93672 --- /dev/null +++ b/StatisticsForm.resx @@ -0,0 +1,412 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + AAABAAMAICAAAAAAGACoDAAANgAAABAQAAAAABgAaAMAAN4MAABAQAAAAAAYACgyAABGEAAAKAAAACAA + AABAAAAAAQAYAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/u3v+Pn6//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7+/vX3/rzA3OHl9fz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7//+zv+3Z6qcLI5Pr7/wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP7+/+br+15in6+33vf5/wAAAAAAAAAAAAAAAP7+//7+/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//v8//v8//3+/wAAAAAAAAAAAAAAAAAAAP7+/+Ho+1dana20 + 4/b4/wAAAAAAAPz9//P2/+Tp/ezw/vz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///X4 + /9Pa+tPa+/H1//z9/wAAAAAAAAAAAAAAAP7+/93k+SsscaSr3PX3/wAAAP7+//L1/7W98AcWgrvC8Pj6 + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/+bs/xohiAEJdrvF9+7y//z9/wAAAAAAAAAA + AP7+/9rh+CEkapmh0/T3/wAAAPj6/9HZ/AEHcgEEb9LZ+/r7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP7//+/z/3F+zAAAXwQLcZai3fb4/wAAAAAAAAAAAP3+/97l/E9Tmaau4fT3/wAAAO/0/1dd + sAAAV7a/8/H1//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPr8/+jv/46Y3QUUf6Ot + 5PX4/wAAAAAAAAAAAP3+/9zj+3Z6wLe/7fX4/wAAAPD0/212xnaAzerw//z9/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/+/z/+Dm+/D0//z9/wAAAAAAAP7+//j6/9Pd+UhLjb/H + 9/D0//3+//n7/+nt/+jt//n7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7///7+//7+//7+/wAAAAAAAPr8/+7z/83W+ImU2A0UdFNarr/K9env//X4//z9//3+//7//wAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///j6/+Pq/255 + xhckjE5XsVVftUlTqwAKeTA9nr3H8+7z//v8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+//b4/9Tc+Sc0mRonj8rV/crX/ZSb48rX/brG8wwWgQAEdJei + 4efu//n7//7+//z9//z9//z9//z9//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//f5/+3y/+nv/+ft + /8vV+io2mImU2M7c/7vG9yIvlQAOfCg4mM3Y/s/c/4aR1AQRfGtzwtni/ebt/9vi/tri/tXd+9Tc+O3x + /vz9/wAAAAAAAAAAAAAAAAAAAAAAAPn6/87V+FVftkRPrFlnvSEqjQoUfmJvwWFvvg0TfQQIcxEchwAD + cy89n19rvVVitQwZgwAAaiMrkT9NqTVBoiw3mhQihig1mNLX+fv8/wAAAAAAAAAAAAAAAAAAAAAAAPb5 + /52l4EFLqoCK03yF0VBctGhyw52o5GVrvQAAaneBzsHM+jA3mhYgiTtIpJOf3ouW2AAAbmh0wbbA8bS+ + 7qiz5pCb16+56e/z//3+/wAAAAAAAAAAAAAAAAAAAAAAAPv8//H1/+vw/+zx/+nv/7/J9YqP3MbP/8LM + +hwqkFZftaCp5EhRrcTQ+9jj/8rW/UJMqn6J0ebt//X3//f5//b4//X3//f5//z9/wAAAAAAAAAAAAAA + AAAAAAAAAP7+//z9//3+/wAAAAAAAP3+/+7z/6at64iP3aWs7XN8zRIfhyUykp2o5MHM+oKM0xonjY6X + 2+jv//v8/wAAAP7+//n7//b5//r7//7//wAAAAAAAAAAAAAAAP7+//f5/+rw/9Pa9fL0/v7//wAAAAAA + APv8//H1/+Tr/7i/91liu0NPq0VQrS06m0NNqDdCoYqU1+nv//v8/wAAAAAAAPn7/9zi/qSt59ri/fL1 + //v8//7//wAAAPz9//D0/8rT+h0sjkVQrPD0/wAAAAAAAAAAAAAAAAAAAPz9/+7z/8LL9Jqk4aGq6LW/ + 8c3W9+Xs/vH1//v8/wAAAAAAAAAAAPf5/6at5gAAbxIfh6u16+Po/fr7/wAAAPb5/6ev5gAIeAAPernC + 8fX4/wAAAAAAAP3+//v8//z9/wAAAP3+//j6//P3//P2//b4//r8//7+//7+//v8//r8//3+/wAAAPv8 + /+Xr/nuIzwAAbBseg5Sb2fb5/wAAAPf5/8DF8pWe3d/n/vT3//39/wAAAPv8/+zx/87V9+3x/v3+/wAA + AP3+//j6//X4//v8/wAAAAAAAPn7/+Dm/snR9fD0//39//z8/fv8/+3y/8LK9aGq4dfd9/n7/wAAAPz9 + //b5//X4//v8/wAAAAAAAP7+/+7z/4aP1gEPet7k/f39/wAAAPf5/83U+ZCZ2u3x/v7+/wAAAPP3/215 + wgAJd7fB8/L1//7+/wAAAP3+//j6//f5//r8//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAPj6/87W/AAA + X2duue3y//7+/wAAAPD0/05asBQfidzj/P39/wAAAPX4/6Su6AAAXBccgtff/vv8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP3/3F8xhYli9Xe/fn6/wAAAAAAAO3y/1pltQAJd9be + /fv8/wAAAPz9/+rw/36I0Bknjs/W+vv8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAPf5/8HI7tnf+/X4//7+/wAAAAAAAO/0/3R7xgAAb9ng/Pz9/wAAAAAAAPn7/+Ln/dLY+fP2//3+ + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//r7//v8//7+/wAAAAAAAAAA + APb4/7/F84eP0e/0//7+/wAAAAAAAP7+//z9//v8//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz9//b5//X4//v8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////w////4 + P///+D////g8//D4MH/geCB/4Dggf+A4IH/wOCD/+DAB//hgAf//gAP//wAAB/AAAAPwAAAD8AAAA/AA + AAfjAAEHgYADAQPgBwEDEAEBAghgAQwIIEH8CCB//Bggf/wYMH/8ODD///h/////////////KAAAABAA + AAAgAAAAAQAYAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+vv/fL1/v///wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///4+Vx7/F5v///wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAP///4CHtrS62////////////////////wAAAAAAAAAAAP////H0/vf6/v// + /////////4yTwrrB4f///+zw+7rA6P39/////wAAAAAAAAAAAP///56l2BkcguXr/P///////42Uw8jO + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2OL+NjZ7AAArX2Ok + 4uz/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 2eP/LjJ1DAxKfYTE4Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//f7//f7//v7//v// + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/gILIR0eVeoHC3eb/8fX/+/z/AAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+Pr/ + +Pr/+Pr/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+vv/+vv/+/z//f3//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/2eP9ZWeqHx1obnOz4Or/8fX/+/z/AAAAAAAAAAAAAAAA/v7/ + +/z/9fj/8vb/8PX/7vT/8fb/9fj/+fr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/9fj/9fj/9Pj/9Pf/9vn/+/z//v7/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP9ODp9AAA5jZDQ5O7/8PX/+/z/AAAA + AAAAAAAA/v7/+/z/9Pf/7fP/5u//wsz6j5XfuMDx7fL/9vn//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+Pr/8/b/5+3/2eH/2uP/ + 5u3/7fP/8/b/+vv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3ef/U1ebBgVKio/O + 4uz/8fX/+/z/AAAAAAAA/v///P3/9fj/7fP/4uv/hIzZHSWPAABmU1i14ub/9/r/+/z/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9Pf/ + 7/X/09z/TlSzNzWYj5bh5O7/6/L/8vb/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fX/ + 2eP/QUWIEhBZbnSz3uj/8fb/+/z/AAAAAAAA/f7/+Pr/7/T/6PH/iI7cAABvAABqAABncXjK6O//9fj/ + +/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+/z/8/f/2uD/Z27EAABnAABiBgl4jJTd5vD/6O//8vX/+fv//f7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8fb/2OP/Mjd6AQE6ZGup4er/8fX/+/z/AAAAAAAA+vz/8fX/6/T/xM/8ExyJAABwAABu + GySRxc387fT/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vz/8/f/1Nr/MzqhAABhAxOBAARyBgp5jpLg5Oz/7PP/9Pf/+vz//v7/ + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP/KCtvBwZOjJHS4Or/8fX/+/z/AAAA/f7/9/n/7fP/3+j/ + UFq3AABtAAZ3BAh6mZ/n5vD/7vP/+Pr//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/6e//sbb1KzWcAABwBhaBAAFyAgp6fITR + 1d777/T/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3+j/WF2hBglTnaTj5O3/8PX/+/z/AAAA + /P3/9Pf/6vL/k5riAAByAAR0AABrY2vE4ur/6vH/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/7fL/5O3/ytX/RU6w + AABpAA5+AABuAABnhord6e7/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/7/T/3+j/k5jbT1KdgYjJ + 3uf+8fX/+/z/AAAA+/z/9fn/4ef/NDqhAABnAABrJjCU0Nn/5/D/8fX/+vv//v7/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + 9vn/7vP/6vP/ztb/O0CmAABpAABrQkuoxMn57PH/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/ + 2+X/en/CUFGak5nY3+j/8fX//P3/AAAA/P3/9fj/4en/i5DbNT2hIyuTpqzv4uz/7vP/9/n//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/9vn/7/P/6vL/ytH/X2i9XWi7wsf/6e//8/f/+Pr//v7/AAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/WF2hW1ylvMD+3uf/8PX/+/z/AAAA/f7/9vn/7fP/4uj/j5Pgf4LV3+X/6fD/ + 9Pf//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/8vX/7fP/5+//5u7/6vD/8PT/9vn//P3//v7/ + AAAAAAAAAAAAAAAAAAAA/f7/9/n/7fP/0tz9LDJzNjh/nqTk2uT/7fL/9/n//f7//f7/+fv/8/b/7PL/ + 3eX/zM//5ev/9fj/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f3/+vv/9/n/9vn/9fj/9vn/ + +fr//P3//v7/AAAAAAAAAAAA/v///f7/+vv/9vn/7/T/5vD/2Ob/VFubERNdoajk4u//5O7/7vP/9vj/ + +fr/+vv/+Pr/9fj/9Pj/9fj/9fj/+Pr//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///v7/ + /f7//P3//P3//f3//v7//v//AAAAAAAAAAAA/f7/+vz/9vn/8fX/7vT/5O3/3eb/z9n/cHjICxN5d37L + z9n/2eP/5O3/6/L/8PT/9Pf/9/n/+vv/+vv/+/z//P3//f3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+Pr/8/b/7vT/6vL/z9r+jZjeQUeq + IiuQCBN3AAFrBRB8Nj2iUViym6XlydH/4+z/6/L/8PT/9/n/+/z//f7//v//AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/8fX/6/L/3uf/ + mKTkLzibAABoAAB0Fx+HDBh7FSGDAg16AABYAABlCBB/Ji2UhYza1+D/6PL/7fL/9Pf/+vv//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/9/n/ + 8PT/7PT/z9j/XmO+AABtAABcMDSXoajsu8X7VV+5hYzblZ/fTVSxFSKMAABkAABnAAN2Qkmpsbrz5e3/ + 6vH/8fX/+Pr//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/P3/9/n/8PX/7PT/vcn3LTOZAABaAgR1ZWzD0Nf/5vL/1OP/l53lzs3/6fP/4+7/sLzwZ23CBxSD + AABnAABlHiaSmqHo3+j/5+//7/T/9vn//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/ + /v7//v7//v7//f7/+/z/9vj/7vP/7PX/tcLzEBeGAABkPEWlqLPt2eX/4e7/3On/uMX1gofVe3vPhYzY + z93+5/X/4e3/lJ3gHiOPAABtAABqChiEbHLIytD/5/D/7PL/8/f/+Pr/+fr/+Pr/+Pr/+Pr/+Pr/+Pr/ + +Pr/+fv/+vv/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+fv/9/n/9vj/9fj/9Pf/8fX/7PL/4uv/l6HgDhF7AAN4iZDe0d7/3uz/4vD/w83/VVm3 + ICiSAAFyAABlAABwaHTD1N//2un/3er/w838ZW3BEyOJJzKVAQ16NDmfwsn75fD/5u7/7PL/7vP/7fP/ + 7fP/7fL/7fP/7vP/7/T/8fb/9Pj/9vn/+fr//f3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/+Pr/9Pf/8fX/7vT/7PL/6/L/6fH/5u7/6vX/tsD0CQx4AAFwkZvi7ff/4vD/ + 4fD/z9j/OkGlAABiAABwBxWAAAt7BBN+P0uofYLUztb/4O7/6fb/6fP/qa7xQkyoBg56AABqMjugx8/+ + 5fH/4Ov/4On/3uj/3eb/3+j/3uj/1+L/0d3/1d7/3+f/7fL/9vj/+vz//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+fr/8/f/6/L/2d//v8j6vcf5ucP1wMv8wM3+vMj6PkqoAABo + UF25usP7tsPyvsr6sLrwQ0utAABqAAV1OUameIDRKDWZAAd2GyeOLDecmaHntsL0pbLom6riq7LzUlu0 + AANzBhR/AAZ0NT+ja3bBY2i/XGG6UViyWl65XGG7XGC6TVWvQU6pPkalODygqK7p8vb/+vz//v7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/7/T/wcj2R0ysExeFERmGDxuIFB6K + FBqICxSEAABsAAByDBiDCRSBBRCADhaFCRODAAh4AxF/AAl4CxeDHSaPAAp6AAN0AA19AAd3CBOBEBqH + BhGBAAh5AABwAAByAAh5BhSCAxWCAABsAABvAABlAABnAABxAABjAABmAABhAABdAABYAABhCAt/q7Lr + 8/f/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+fv/3uT/SE2vAABn + CBB/GiCMLzmfLTWcGByJFRyKGCOOMj2gHymRDxiGGyOPLDCXBRF/AAh3BhaCEyKMICqTKC2WNDqfIzCV + Awx6Eh+JHiaPAAR3AAZ5CxSDICWQX2q7Q1CqAA1+AAFxDxuHiZTbVGC4dHnQnabrTVqzY23EUV62Slau + LjaZXWm9sLjz5ez/9vn/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +Pv/4+n+e4LPfoPVpqv2vsf/zNX/zdb/xtH/v8v8pK7spKfysLb3vcr4ws784ej/hI/YAAZ1AAJzVF25 + yM//3Of/5+//i5LcAABpMzyfp6vxoKznlqHhqbbtx9H/8fz/kpvfAABiAABph4zc5PD/2OP/193/3un/ + 1+D/2OH/1+D/0Nr/zNL/3+j/6/L/7/T/9vn//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+Pr/9Pf/6vD/5u3/3+b/4uv/6PD/5+//5O3/5/P/sL3sXmS7mZzoz9f/3+z/4e// + mKLiEiKKCBF/KTWZr7T06/f/3ev/VF2zChSBipPcz9v+4u7/3ur/3ev/5/X/qrPrISmSDRJ2Xmq/3ur/ + 4uv/6vH/7fP/7fL/7/T/7vP/7fP/7fP/8PX/8fX/9Pf/+Pr/+/z//v7/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+Pr/9vn/9Pf/8vb/8vb/8/b/9Pf/7/T/6/L/tL/ubXLH + en/Ti43gqavy0t3/nafjMj6fJzaaAAV1GyeOYmW7Nz6fAABgNj6i1N//3uz/2uX/3Oj/5PH/wcj7FR2J + AAN0gong0tr/6fH/7/P/9vj/+Pr/+fv/+fv/+Pr/+Pr/+Pr/+fv/+vv//P3//f7//v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+/z/+/z/+/z//f3//f7/ + +fv/8fX/5Oz/jpbfc3jObnXLcXfOk5rks7b4iY3dR1KvDhuEAABoAABlEBV9U12ytcD13Or/3en/3ej/ + 1eL/q7fvGR+MKDKZbnnNxc/76PD/8fX/+fr//f7//v//AAAA/v7//f7//f3//P3//f3//f7//v//AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//f7//v7/AAAA + AAAAAAAAAAAAAAAA/f7/9vn/7/T/yNH5lJrleoDVmZ3pmpzpc3nPfoTWf4bYVFy3HSaLZ3PGsrb8v8r8 + y9n9q7jre4LRf4fUgIvXAwZ1AABrhYjb0NX/6PH/8PX/+Pr//f7/AAAAAAAA/v///f3/+vv/+Pr/9/r/ + 9/n/+Pr/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f7/+/z/+fr/9vj/9/n/ + +vz/+vv/+/z//v7/AAAAAAAAAAAAAAAA/v7/+vz/8/f/7PL/2uT/t8H1srP6vcH+nKTnSlOxV2C7TVaz + WGS8QUqmSlSuSFOtR1GtbXTKVl23ARB5AAh2AABnd33P3eP/4ur/7/T/9/n//P3/AAAAAAAAAAAA/P3/ + 9/n/8vb/7PH/6fD/7PL/7vP/8vb/9vn/+/z//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/+Pr/ + 8/b/7/T/8Pb/6vH/3eP97vL++fr//P3/AAAAAAAAAAAAAAAAAAAA/f7/+vv/9fj/7/T/5+//z9f+t7v4 + uLn9Z2zFLzucFCGIMz6gGCCMAAd4AAl2Dx2EER+GXWK8c3XLKzKXd4LP4er/6/L/8PX/9/n//P3//v// + AAAAAAAA/v7/+fv/8/b/7PP/y9H/i4/erLbt4er/5e3/7fP/8/b/+fv//f3//v7/AAAAAAAAAAAAAAAA + /v7/+/z/9vj/8PT/6/L/3+n/x9H9aHTAZGvG3+b9+Pr/+/z/AAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + +Pr/8vb/6/H/3OX+wMn4maDmdHrPWGG6T1a1eoHWcHfOTlayUlq1SlKubHjAxMj/0dn/4+v/7PL/8vb/ + +Pr//P3//v7/AAAAAAAAAAAA/f7/+fr/7vP/xsv5YGXAHymRKjKYYWS9rbLz4u3/6/P/8vb/+fr//f7/ + AAAAAAAAAAAA/v//+/z/9vj/7fL/5e3/xs7/Y23BIiiSAABeLTab3+b/9/r/+/z/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAA/f7/+vz/9vj/8PX/6vH/3eb/ydL8xM/6uMPyt733w8j/zNb/1Nz/3OT/4uz/5u7/ + 7fP/8vb/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAA/f7/+fv/7vP/jpHiAAJ1CxaBER6GAABoFRmGbXbH + 0Nf/7PL/9fj//P3/AAAAAAAAAAAA/v7/+fv/8/f/4Of/hYvbKDGZAABuAABdAAZyi5La5+7/9vn/+/z/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/9ff/8vb/7/X/7fP/6/L/5u3/5ez/6fD/ + 7PP/7/T/8fX/9Pf/9/n/+vv//P3//v7//v//AAAAAAAAAAAAAAAAAAAA/v7/+fv/8fb/2eH9fIbQExqH + AABrAAp6AAFyAABwS0+uztX39vn/+vz/AAAAAAAAAAAA/f7/+Pr/8ff/qbLpAABrAABhAABwDBWAfobX + 5e3/8PX/9vn//f3/AAAAAAAA/v///f7/+/z/+vv/+vv/+vz//P3//v7//v///v7//P3/+vz/+Pr/9/n/ + 9vj/9vj/9vj/9vj/9/n/+fr/+/z//P3//f7//v7//f7//P3/+/z/+vz/+/z//P3//v7/AAAA/v7/+/z/ + 9fj/7/T/5/H/uML1U1e1AAh5AABuAABvMjmdv8bz9vr/+vv/AAAAAAAAAAAA/f7/+fv/7/T/iY7aDxSA + GiONa3XHsr7w4Oj/6/H/9Pf/+vz//v7/AAAA/v///P3/+Pr/9Pf/8/f/9fj/9fj/9vn/+/z//v7/AAAA + AAAAAAAA/v7//f7//P3/+/z/+/z//P3//f7//v//AAAAAAAAAAAA/v7/+/z/9/n/9vn/9vn/9Pj/9vn/ + +/z//v7/AAAA/f7/+vz/9fj/7/T/6vL/3ef/i5PbGRqJBQl5jJbZ6vH/9Pj/+/z/AAAAAAAAAAAA/f7/ + +fv/8fT/1Nn9t7/0wcr54er/7fT/8fX/9fj/+vv//f7/AAAAAAAA/f3/+Pr/8PT/6/L/3uX/ztb/5Or/ + 8/f/+Pr//f7/AAAAAAAAAAAA/f7/+vz/+Pr/+fv/+fv/+vv//f3//v//AAAAAAAAAAAA/P3/9/n/7vL/ + 193/ztf/5u3/7vP/9Pf/+/z//v7/AAAA/v7//P3/+Pr/8fX/7PP/5/D/sLfxoKnk4+r/8vf/9/n//f3/ + AAAAAAAAAAAA/v7/+/z/9vn/9Pf/8vb/8fb/8fX/9Pf/+Pr//P3//v7/AAAAAAAA/v7/+vv/8vb/5+7/ + y9H/WWO9KSmSkZXj6vD/+Pv//P3/AAAAAAAA/f7/+Pr/9fj/8vb/6O7/7vP/9fj/+Pr//f7/AAAAAAAA + /v//+vv/8vb/7PP/hYraKiqKlp7i6PD/7fP/9ff/+/z//v7/AAAAAAAA/f7/+vv/9ff/8fX/8PX/8vb/ + 8/f/9vn/+/z//v7/AAAAAAAAAAAAAAAA/f7/+/z/+vv/+fr/+fr/+vv//P3//v7/AAAAAAAAAAAAAAAA + /P3/9fj/7PL/1d7/RUysAABhAABlg4ja6/D/+Pr//P3/AAAAAAAA+/z/9fj/6e7/2eD/h4/bnaXg7PH/ + 9fj/+/z/AAAAAAAA/v7/+Pr/8PX/y9X1JDGVAABaERWDoKnp6PH/7vP/9/n//P3/AAAAAAAAAAAA/v7/ + /P3/+vv/+fv/+fv/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//v7//v7//v//AAAAAAAA + AAAAAAAAAAAA/v7/+fv/8PX/7PX/ipPdAABsAABlQ1Cp3Ob/7vP/9/n//f7/AAAAAAAA+fv/9Pj/yNH5 + Ule2DBJ8Ljie0df+8fb/+fv//v7/AAAA/v7/+Pr/7/X/hY3YAABxAAl7AABuEBaEs7nz6fH/8fX/+vv/ + /v7/AAAAAAAAAAAAAAAA/v///v7//v7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9vn/7PL/0tn/LzidAQFsAAB0iZHb6vP/8PT/+fv//v//AAAA + /v7/+Pr/8vf/r7rqAAV4AABdPUen1N//7PL/9vn//f7/AAAA/v7/+fr/7/T/yc75S1G0AABrARKAAABp + Qker0df/7fP/9/n//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/5+7/cXXNAAd2AABuMDebzdT97PL/ + 9vj//P3/AAAAAAAA/v7/9/n/7/X/tL/uFCCLAABqHSqRvcf46fD/9Pf//f3/AAAAAAAA+vv/8vX/6vH/ + yM3+JC2XAABtAAV2Agx9q7Ly7vT/9vn//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/4uj/WWO1AAVx + KTaYu8T07fT/8vb/+vv//v7/AAAAAAAA/v7/9/n/7vX/vsn1Iy2SAABrAQ99mp/o6PD/9Pf//P3/AAAA + AAAA/P3/9/n/7vP/6fL/s7z2DBB/AABeQ0uttrr56e7/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +fv/4ef6g4zNbXfFw8v27fT/8vb/+Pr//f3/AAAAAAAAAAAA/v7/9/n/7vT/yNL7MjucAABtBxF/nKLo + 6fH/9Pf//P3/AAAAAAAA/v7/+/z/9fj/7fL/6/T/jZXbLzScrrP14en/7fL/+fv//v7/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+vz/8PP91dr34+f/8vb/8/f/9/r//P3//v//AAAAAAAAAAAA/v7/+Pr/8PX/1N3/ + QUqmAQRxBQ98m6Dm7PL/9fj//P3/AAAAAAAAAAAA/v7/+/z/9ff/8PX/5ez/ytH94ej/8vb/9vj/+/z/ + /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA + /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ + 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA + AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file diff --git a/WorldForm.Designer.cs b/WorldForm.Designer.cs index 11532c9..e8a306f 100644 --- a/WorldForm.Designer.cs +++ b/WorldForm.Designer.cs @@ -345,7 +345,7 @@ namespace CodeWalker this.StatusLabel.BackColor = System.Drawing.SystemColors.Control; this.StatusLabel.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; this.StatusLabel.Name = "StatusLabel"; - this.StatusLabel.Size = new System.Drawing.Size(878, 17); + this.StatusLabel.Size = new System.Drawing.Size(847, 17); this.StatusLabel.Spring = true; this.StatusLabel.Text = "Initialising"; this.StatusLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; @@ -360,9 +360,11 @@ namespace CodeWalker // StatsLabel // this.StatsLabel.BackColor = System.Drawing.SystemColors.Control; + this.StatsLabel.DoubleClickEnabled = true; this.StatsLabel.Name = "StatsLabel"; this.StatsLabel.Size = new System.Drawing.Size(75, 17); this.StatsLabel.Text = "0 geometries"; + this.StatsLabel.DoubleClick += new System.EventHandler(this.StatsLabel_DoubleClick); // // ModelComboBox // @@ -1329,13 +1331,13 @@ namespace CodeWalker this.tabPage8.Text = "General"; this.tabPage8.UseVisualStyleBackColor = true; // - // EntitiesCheckBox + // RenderEntitiesCheckBox // this.RenderEntitiesCheckBox.AutoSize = true; this.RenderEntitiesCheckBox.Checked = true; this.RenderEntitiesCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; this.RenderEntitiesCheckBox.Location = new System.Drawing.Point(10, 32); - this.RenderEntitiesCheckBox.Name = "EntitiesCheckBox"; + this.RenderEntitiesCheckBox.Name = "RenderEntitiesCheckBox"; this.RenderEntitiesCheckBox.Size = new System.Drawing.Size(89, 17); this.RenderEntitiesCheckBox.TabIndex = 67; this.RenderEntitiesCheckBox.Text = "Show entities"; diff --git a/WorldForm.cs b/WorldForm.cs index 0c002c7..291d11d 100644 --- a/WorldForm.cs +++ b/WorldForm.cs @@ -21,7 +21,7 @@ namespace CodeWalker { public Form Form { get { return this; } } //for DXForm/DXManager use - private Renderer Renderer = null; + public Renderer Renderer = null; public object RenderSyncRoot { get { return Renderer.RenderSyncRoot; } } volatile bool formopen = false; @@ -7684,6 +7684,12 @@ namespace CodeWalker { Renderer.renderentities = RenderEntitiesCheckBox.Checked; } + + private void StatsLabel_DoubleClick(object sender, EventArgs e) + { + var statsForm = new StatisticsForm(this); + statsForm.Show(this); + } } public enum WorldControlMode From a7e2c7a0b6a0345f1479bf9c91667bdab34414bc Mon Sep 17 00:00:00 2001 From: dexy Date: Wed, 5 Dec 2018 17:36:23 +1100 Subject: [PATCH 027/158] Fixed RenderableCache item invalidation and cleaned up code --- Rendering/RenderableCache.cs | 27 ++++----------------------- 1 file changed, 4 insertions(+), 23 deletions(-) diff --git a/Rendering/RenderableCache.cs b/Rendering/RenderableCache.cs index c6b4df3..e109b33 100644 --- a/Rendering/RenderableCache.cs +++ b/Rendering/RenderableCache.cs @@ -339,12 +339,9 @@ namespace CodeWalker.Rendering } while (itemsToInvalidate.TryPop(out item)) { - //if (!item.IsLoaded) continue;//can't invalidate item that's not currently loaded try { - Interlocked.Add(ref CacheUse, -item.DataSize); - //item.Unload(); - item.Load(device); + item.Load(device); //invalidated items just need to get reloaded. (they are already unloaded and re-inited) Interlocked.Add(ref CacheUse, item.DataSize); } catch //(Exception ex) @@ -387,9 +384,11 @@ namespace CodeWalker.Rendering { if (cacheitems.TryGetValue(key, out item)) { - itemsToInvalidate.Push(item); item.Unload(); item.Init(key); + item.LoadQueued = true; + itemsToInvalidate.Push(item); + Interlocked.Add(ref CacheUse, -item.DataSize); } } while (itemsToUnload.TryPop(out item)) @@ -431,24 +430,6 @@ namespace CodeWalker.Rendering keysToInvalidate.Push(key); - //TVal item = null; - //if (!cacheitems.TryGetValue(key, out item)) return; - //if (item == null) return; - - //if ((item.Key != null) && (cacheitems.ContainsKey(item.Key))) - //{ - - // cacheitems.Remove(item.Key); - - // item.Unload(); - // item.LoadQueued = false; - // CacheUse -= item.DataSize; - // //Interlocked.Add(ref CacheUse, -item.DataSize); - // Interlocked.Exchange(ref item.LastUseTime, DateTime.UtcNow.AddHours(-1).ToBinary()); - - // loadeditems.Remove(item);//slow... - //} - } } From 05d3e3739465dbf324d7b6898390d0b6cc5ebbec Mon Sep 17 00:00:00 2001 From: dexy Date: Wed, 5 Dec 2018 18:26:28 +1100 Subject: [PATCH 028/158] Removed unnecessary locks when updating grass/path graphics - Improved apparent performance of grass painting when FPS is high --- Project/Panels/EditYmapGrassPanel.cs | 4 ++-- WorldForm.cs | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Project/Panels/EditYmapGrassPanel.cs b/Project/Panels/EditYmapGrassPanel.cs index 5e7f558..ac5ee51 100644 --- a/Project/Panels/EditYmapGrassPanel.cs +++ b/Project/Panels/EditYmapGrassPanel.cs @@ -245,7 +245,7 @@ namespace CodeWalker.Project.Panels var wf = ProjectForm.WorldForm; if (wf == null) return; - lock (wf.RenderSyncRoot) + //lock (wf.RenderSyncRoot) { CurrentBatch.CreateInstancesAtMouse( CurrentBatch, @@ -270,7 +270,7 @@ namespace CodeWalker.Project.Panels var wf = ProjectForm.WorldForm; if (wf == null) return; var changed = false; - lock (wf.RenderSyncRoot) + //lock (wf.RenderSyncRoot) { if (CurrentBatch.EraseInstancesAtMouse( CurrentBatch, diff --git a/WorldForm.cs b/WorldForm.cs index 291d11d..fbb7e48 100644 --- a/WorldForm.cs +++ b/WorldForm.cs @@ -1744,7 +1744,7 @@ namespace CodeWalker { space.BuildYndVerts(ynd); } - lock (Renderer.RenderSyncRoot) + //lock (Renderer.RenderSyncRoot) { Renderer.Invalidate(ynd); } @@ -1766,7 +1766,7 @@ namespace CodeWalker ynv.UpdateTriangleVertices(); ynv.BuildBVH(); - lock (Renderer.RenderSyncRoot) + //lock (Renderer.RenderSyncRoot) { Renderer.Invalidate(ynv); } @@ -1802,7 +1802,7 @@ namespace CodeWalker //{ // //space.BuildYndVerts(ynd); //} - lock (Renderer.RenderSyncRoot) + //lock (Renderer.RenderSyncRoot) { Renderer.Invalidate(tt); } @@ -1823,7 +1823,7 @@ namespace CodeWalker scenario.BuildVertices(); - lock (Renderer.RenderSyncRoot) + //lock (Renderer.RenderSyncRoot) { Renderer.Invalidate(scenario); } @@ -1831,7 +1831,7 @@ namespace CodeWalker public void UpdateGrassBatchGraphics(YmapGrassInstanceBatch grassBatch) { - lock (Renderer.RenderSyncRoot) + //lock (Renderer.RenderSyncRoot) { Renderer.Invalidate(grassBatch); } @@ -6148,7 +6148,7 @@ namespace CodeWalker ControlBrushTimer++; if (ControlBrushTimer > (Input.ShiftPressed ? 5 : 10)) { - lock (Renderer.RenderSyncRoot) + //lock (Renderer.RenderSyncRoot) { if (ProjectForm != null && MouseLButtonDown) { From 1e2e927cf6d6fc2d5b17ce42e8b881a25b684ce9 Mon Sep 17 00:00:00 2001 From: dexy Date: Fri, 7 Dec 2018 13:41:18 +1100 Subject: [PATCH 029/158] Fixed grass painting and selection bugs/glitchiness --- Rendering/Renderable.cs | 10 ++++++++++ Rendering/Renderer.cs | 2 ++ Rendering/Shaders/BasicShader.cs | 10 +++++----- WorldForm.cs | 9 +++++++-- 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/Rendering/Renderable.cs b/Rendering/Renderable.cs index b8c3c6d..4112796 100644 --- a/Rendering/Renderable.cs +++ b/Rendering/Renderable.cs @@ -936,6 +936,10 @@ namespace CodeWalker.Rendering public rage__fwGrassInstanceListDef__InstanceData[] GrassInstanceData { get; set; } public GpuSBuffer GrassInstanceBuffer { get; set; } public int InstanceCount { get; set; } + public Vector3 AABBMin { get; set; } + public Vector3 AABBMax { get; set; } + public Vector3 Position { get; set; } + public Vector3 CamRel { get; set; } public override void Init(YmapGrassInstanceBatch batch) { @@ -955,6 +959,12 @@ namespace CodeWalker.Rendering public override void Load(Device device) { + if (Key != null) + { + AABBMin = Key.AABBMin; + AABBMax = Key.AABBMax; + Position = Key.Position; + } if ((GrassInstanceData != null) && (GrassInstanceData.Length > 0)) { GrassInstanceBuffer = new GpuSBuffer(device, GrassInstanceData); diff --git a/Rendering/Renderer.cs b/Rendering/Renderer.cs index 982472b..3d67492 100644 --- a/Rendering/Renderer.cs +++ b/Rendering/Renderer.cs @@ -2081,6 +2081,8 @@ namespace CodeWalker.Rendering if (!(rndbl.IsLoaded && (rndbl.AllTexturesLoaded || !waitforchildrentoload))) continue; //not loaded yet if ((instb == null) || !instb.IsLoaded) continue; + instb.CamRel = instb.Position - camera.Position;//to gracefully handle batch size changes + RenderableInstanceBatchInst binst = new RenderableInstanceBatchInst(); binst.Batch = instb; binst.Renderable = rndbl; diff --git a/Rendering/Shaders/BasicShader.cs b/Rendering/Shaders/BasicShader.cs index e7b85e8..ad1f93b 100644 --- a/Rendering/Shaders/BasicShader.cs +++ b/Rendering/Shaders/BasicShader.cs @@ -699,7 +699,7 @@ namespace CodeWalker.Rendering if (batch.GrassInstanceBuffer == null) return; - VSEntityVars.Vars.CamRel = new Vector4(gb.CamRel, 0.0f); + VSEntityVars.Vars.CamRel = new Vector4(batch.CamRel, 0.0f); VSEntityVars.Vars.Orientation = Quaternion.Identity; VSEntityVars.Vars.Scale = Vector3.One; VSEntityVars.Vars.HasSkeleton = 0; @@ -711,13 +711,13 @@ namespace CodeWalker.Rendering InstGlobalVars.SetVSCBuffer(context, 5); - InstLocalVars.Vars.vecBatchAabbMin = gb.AABBMin; - InstLocalVars.Vars.vecBatchAabbDelta = gb.AABBMax - gb.AABBMin; - InstLocalVars.Vars.vecPlayerPos = new Vector4(gb.Position - gb.CamRel, 1.0f); + InstLocalVars.Vars.vecBatchAabbMin = batch.AABBMin; + InstLocalVars.Vars.vecBatchAabbDelta = batch.AABBMax - batch.AABBMin; + InstLocalVars.Vars.vecPlayerPos = new Vector4(batch.Position - batch.CamRel, 1.0f); InstLocalVars.Vars._vecCollParams = new Vector2(2.0f, -3.0f);//range, offset InstLocalVars.Vars.fadeAlphaDistUmTimer = new Vector4(0.0f); InstLocalVars.Vars.uMovementParams = new Vector4(0.0f); - InstLocalVars.Vars._fakedGrassNormal = new Vector4(Vector3.Normalize(-gb.CamRel), 0.0f); + InstLocalVars.Vars._fakedGrassNormal = new Vector4(Vector3.Normalize(-batch.CamRel), 0.0f); InstLocalVars.Vars.gScaleRange = gb.Batch.ScaleRange; InstLocalVars.Vars.gWindBendingGlobals = new Vector4(WindVector.X, WindVector.Y, 1.0f, 1.0f); InstLocalVars.Vars.gWindBendScaleVar = new Vector2(WindVector.Z, WindVector.W); diff --git a/WorldForm.cs b/WorldForm.cs index fbb7e48..0e88468 100644 --- a/WorldForm.cs +++ b/WorldForm.cs @@ -1431,12 +1431,18 @@ namespace CodeWalker } } } - if ((selectionItem.GrassBatch != null) || (selectionItem.ArchetypeExtension != null) || (selectionItem.EntityExtension != null) || (selectionItem.CollisionBounds != null)) + if ((selectionItem.ArchetypeExtension != null) || (selectionItem.EntityExtension != null) || (selectionItem.CollisionBounds != null)) { bbmin = selectionItem.AABB.Minimum; bbmax = selectionItem.AABB.Maximum; scale = Vector3.One; } + if (selectionItem.GrassBatch != null) + { + bbmin = selectionItem.GrassBatch.AABBMin; + bbmax = selectionItem.GrassBatch.AABBMax; + scale = Vector3.One; + } if (selectionItem.NavPoly != null) { Renderer.RenderSelectionNavPoly(selectionItem.NavPoly); @@ -3368,7 +3374,6 @@ namespace CodeWalker SelectItem(ms); } } - public void SelectGrassBatch(YmapGrassInstanceBatch batch) { if (batch == null) From 775bbe79a8684f8ab1f10aed2014127fd7567276 Mon Sep 17 00:00:00 2001 From: dexy Date: Tue, 11 Dec 2018 15:33:39 +1100 Subject: [PATCH 030/158] Fixed new train track bug/crash --- CodeWalker.Core/World/Trains.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/CodeWalker.Core/World/Trains.cs b/CodeWalker.Core/World/Trains.cs index dd7e629..1267951 100644 --- a/CodeWalker.Core/World/Trains.cs +++ b/CodeWalker.Core/World/Trains.cs @@ -69,11 +69,14 @@ namespace CodeWalker.World get { int sc = 0; - foreach (var node in Nodes) + if (Nodes != null) { - if ((node.NodeType == 1) || (node.NodeType == 2) || (node.NodeType == 5)) + foreach (var node in Nodes) { - sc++; + if ((node.NodeType == 1) || (node.NodeType == 2) || (node.NodeType == 5)) + { + sc++; + } } } return sc; From e7f5238c33357c20121b7f99fbdecce62da8737c Mon Sep 17 00:00:00 2001 From: dexy Date: Fri, 14 Dec 2018 02:14:14 +1100 Subject: [PATCH 031/158] Added PsoTypes generated struct and enum infos, and new MetaNames --- .../GameFiles/FileTypes/YmapFile.cs | 20 +- CodeWalker.Core/GameFiles/GameFileCache.cs | 52 + .../GameFiles/MetaTypes/MetaNames.cs | 30 +- .../GameFiles/MetaTypes/MetaTypes.cs | 16 +- CodeWalker.Core/GameFiles/MetaTypes/Pso.cs | 54 + .../GameFiles/MetaTypes/PsoTypes.cs | 15594 ++++++++++++++++ .../Panels/EditYtypArchetypePanel.Designer.cs | 5 +- 7 files changed, 15749 insertions(+), 22 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs index 81b440b..fc528c0 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs @@ -29,8 +29,8 @@ namespace CodeWalker.GameFiles public CTimeCycleModifier[] CTimeCycleModifiers { get; set; } public MetaHash[] physicsDictionaries { get; set; } - public Unk_975711773[] CBoxOccluders { get; set; } - public Unk_2741784237[] COccludeModels { get; set; } + public BoxOccluder[] CBoxOccluders { get; set; } + public OccludeModel[] COccludeModels { get; set; } public string[] Strings { get; set; } @@ -435,7 +435,7 @@ namespace CodeWalker.GameFiles private void EnsureBoxOccluders(Meta meta) { - CBoxOccluders = MetaTypes.ConvertDataArray(Meta, (MetaName)975711773, CMapData.boxOccluders); + CBoxOccluders = MetaTypes.ConvertDataArray(Meta, MetaName.BoxOccluder, CMapData.boxOccluders); if (CBoxOccluders != null) { BoxOccluders = new YmapBoxOccluder[CBoxOccluders.Length]; @@ -448,7 +448,7 @@ namespace CodeWalker.GameFiles private void EnsureOccludeModels(Meta meta) { - COccludeModels = MetaTypes.ConvertDataArray(Meta, (MetaName)2741784237, CMapData.occludeModels); + COccludeModels = MetaTypes.ConvertDataArray(Meta, MetaName.OccludeModel, CMapData.occludeModels); if (COccludeModels != null) { OccludeModels = new YmapOccludeModel[COccludeModels.Length]; @@ -2214,13 +2214,13 @@ namespace CodeWalker.GameFiles [TypeConverter(typeof(ExpandableObjectConverter))] public class YmapOccludeModel { - public Unk_2741784237 _OccludeModel; - public Unk_2741784237 OccludeModel { get { return _OccludeModel; } set { _OccludeModel = value; } } + public OccludeModel _OccludeModel; + public OccludeModel OccludeModel { get { return _OccludeModel; } set { _OccludeModel = value; } } public YmapFile Ymap { get; set; } - public YmapOccludeModel(YmapFile ymap, Unk_2741784237 model) + public YmapOccludeModel(YmapFile ymap, OccludeModel model) { Ymap = ymap; _OccludeModel = model; @@ -2230,12 +2230,12 @@ namespace CodeWalker.GameFiles [TypeConverter(typeof(ExpandableObjectConverter))] public class YmapBoxOccluder { - public Unk_975711773 _Box; - public Unk_975711773 Box { get { return _Box; } set { _Box = value; } } + public BoxOccluder _Box; + public BoxOccluder Box { get { return _Box; } set { _Box = value; } } public YmapFile Ymap { get; set; } - public YmapBoxOccluder(YmapFile ymap, Unk_975711773 box) + public YmapBoxOccluder(YmapFile ymap, BoxOccluder box) { Ymap = ymap; _Box = box; diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index 15def85..271f128 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Concurrent; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text; using System.Threading; @@ -166,6 +167,7 @@ namespace CodeWalker.GameFiles //TestAudioYmts(); //TestMetas(); + //TestPsos(); //TestYcds(); //TestYmaps(); //TestPlacements(); @@ -2203,6 +2205,56 @@ namespace CodeWalker.GameFiles string str = MetaTypes.GetTypesInitString(); } + public void TestPsos() + { + //find all PSO meta files and generate the PsoTypes init code + PsoTypes.Clear(); + + var exceptions = new List(); + var allpsos = new List(); + + foreach (RpfFile file in AllRpfs) + { + foreach (RpfEntry entry in file.AllEntries) + { + try + { + var n = entry.NameLower; + var fentry = entry as RpfFileEntry; + var data = entry.File.ExtractFile(fentry); //kind of slow, but sure to catch all PSO files + if (data != null) + { + using (MemoryStream ms = new MemoryStream(data)) + { + if (PsoFile.IsPSO(ms)) + { + UpdateStatus(string.Format(entry.Path)); + + var pso = new PsoFile(); + pso.Load(ms); + + allpsos.Add(fentry.Path); + + PsoTypes.EnsurePsoTypes(pso); + } + } + } + } + catch (Exception ex) + { + UpdateStatus("Error! " + ex.ToString()); + exceptions.Add(ex); + } + } + } + + string allpsopaths = string.Join("\r\n", allpsos); + + string str = PsoTypes.GetTypesInitString(); + if (!string.IsNullOrEmpty(str)) + { + } + } public void TestYcds() { foreach (RpfFile file in AllRpfs) diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs index f97d892..af51960 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs @@ -3293,9 +3293,9 @@ namespace CodeWalker.GameFiles ////SectionUNKNOWN2 = 1185771007, //CCompositeEntityType //SectionUNKNOWN3 = 1980345114, ////SectionUNKNOWN4 = 2085051229, - //SectionUNKNOWN5 = 2741784237, //occludeModels + //SectionUNKNOWN5 = 2741784237, //OccludeModel ////SectionUNKNOWN6 = 3985044770, - //SectionUNKNOWN7 = 975711773, //boxOccluders + //SectionUNKNOWN7 = 975711773, //BoxOccluder //SectionUNKNOWN8 = 3430328684,//0xCC76A96C, VECTOR3 = 3805007828,//0xe2cbcfd4, //this hash isn't correct, but is used in CDistantLODLight @@ -3407,6 +3407,25 @@ namespace CodeWalker.GameFiles + CWanted__Tunables__WantedLevel = 4209402831, + AFF_AVERAGE = 2722191879, + AFF_RICH = 1119317219, + TS_HIGH = 956599249, + StdDoorOpenPosDir = 2885011506, + CDataFileMgr__DataFile = 4025199407, + CDataFileMgr__ContentChangeSet = 2958929574, + DataFileType = 3864419067, + DataFileContents = 655728054, + CONTENTS_DEFAULT = 507224223, + InstallPartition = 2685892631, + PARTITION_NONE = 3712881064, + ExecutionConditions = 1196731409, + ExecutionCondition = 2539760734, + CTxdRelationship = 3649202799, + child = 54445749, + LODLights = 1326371921, + BoxOccluder = 975711773, + OccludeModel = 2741784237, @@ -3535,6 +3554,13 @@ namespace CodeWalker.GameFiles CClassNameOfItemType = 440716365, //array type for (PSO) MAP fields zones = 2319609287, spName = 4254542050, + CInteriorBoundsFiles = 741495440, + PortalIdx = 1061685079, + RoomIdx = 3136588885, + LinkType = 1812903871, + MaxOcclusion = 3034993422, + IsDoor = 474556907, + IsGlass = 1060358829, //from rubidium / dav90 PSO XML / zonebind diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaTypes.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaTypes.cs index 0d407b1..13b5a0a 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaTypes.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaTypes.cs @@ -629,9 +629,9 @@ namespace CodeWalker.GameFiles new MetaStructureEntryInfo_s(MetaName.entities, 96, MetaStructureEntryDataType.Array, 0, 8, 0), new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, (MetaName)372253349), new MetaStructureEntryInfo_s(MetaName.containerLods, 112, MetaStructureEntryDataType.Array, 0, 10, 0), - new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, (MetaName)975711773), + new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, MetaName.BoxOccluder), new MetaStructureEntryInfo_s(MetaName.boxOccluders, 128, MetaStructureEntryDataType.Array, 4, 12, 0), - new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, (MetaName)2741784237), + new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, MetaName.OccludeModel), new MetaStructureEntryInfo_s(MetaName.occludeModels, 144, MetaStructureEntryDataType.Array, 4, 14, 0), new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Hash, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.physicsDictionaries, 160, MetaStructureEntryDataType.Array, 0, 16, 0), @@ -776,8 +776,8 @@ namespace CodeWalker.GameFiles new MetaStructureEntryInfo_s(MetaName.numExitPortals, 152, MetaStructureEntryDataType.UnsignedInt, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.MLOInstflags, 156, MetaStructureEntryDataType.UnsignedInt, 0, 0, 0) ); - case (MetaName)975711773: - return new MetaStructureInfo((MetaName)975711773, 1831736438, 256, 16, + case MetaName.BoxOccluder: + return new MetaStructureInfo(MetaName.BoxOccluder, 1831736438, 256, 16, new MetaStructureEntryInfo_s(MetaName.iCenterX, 0, MetaStructureEntryDataType.SignedShort, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.iCenterY, 2, MetaStructureEntryDataType.SignedShort, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.iCenterZ, 4, MetaStructureEntryDataType.SignedShort, 0, 0, 0), @@ -787,8 +787,8 @@ namespace CodeWalker.GameFiles new MetaStructureEntryInfo_s(MetaName.iHeight, 12, MetaStructureEntryDataType.SignedShort, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.iSinZ, 14, MetaStructureEntryDataType.SignedShort, 0, 0, 0) ); - case (MetaName)2741784237: - return new MetaStructureInfo((MetaName)2741784237, 1172796107, 1024, 64, + case MetaName.OccludeModel: + return new MetaStructureInfo(MetaName.OccludeModel, 1172796107, 1024, 64, new MetaStructureEntryInfo_s(MetaName.bmin, 0, MetaStructureEntryDataType.Float_XYZ, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.bmax, 16, MetaStructureEntryDataType.Float_XYZ, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.dataSize, 32, MetaStructureEntryDataType.UnsignedInt, 0, 0, 0), @@ -2808,7 +2808,7 @@ namespace CodeWalker.GameFiles } } - [TC(typeof(EXP))] public struct Unk_975711773 //16 bytes, Key:1831736438 //boxOccluders + [TC(typeof(EXP))] public struct BoxOccluder //16 bytes, Key:1831736438 //boxOccluders { public short iCenterX { get; set; } //0 0: SignedShort: 0: 48026296 public short iCenterY { get; set; } //2 2: SignedShort: 0: 896907229 @@ -2820,7 +2820,7 @@ namespace CodeWalker.GameFiles public short iSinZ { get; set; } //14 14: SignedShort: 0: iSinZ } - [TC(typeof(EXP))] public struct Unk_2741784237 //64 bytes, Key:1172796107 //occludeModels + [TC(typeof(EXP))] public struct OccludeModel //64 bytes, Key:1172796107 //occludeModels { public Vector3 bmin { get; set; } //0 0: Float_XYZ: 0: bmin public float Unused0 { get; set; }//12 diff --git a/CodeWalker.Core/GameFiles/MetaTypes/Pso.cs b/CodeWalker.Core/GameFiles/MetaTypes/Pso.cs index d35c189..a92ff3e 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/Pso.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/Pso.cs @@ -570,6 +570,23 @@ namespace CodeWalker.GameFiles public uint Unk_Ch { get; set; } = 0x00000000; public PsoStructureEntryInfo[] Entries { get; set; } + + public PsoStructureInfo() + { } + public PsoStructureInfo(MetaName nameHash, byte type, byte unk, int length, params PsoStructureEntryInfo[] entries) + { + IndexInfo = new PsoElementIndexInfo(); + IndexInfo.NameHash = nameHash; + IndexInfo.Offset = 0; //todo: fix? + + Type = type; + EntriesCount = (short)(entries?.Length ?? 0); + Unk = unk; + StructureLength = length; + Unk_Ch = 0; + Entries = entries; + } + public override void Read(DataReader reader) { uint x = reader.ReadUInt32(); @@ -579,6 +596,9 @@ namespace CodeWalker.GameFiles this.StructureLength = reader.ReadInt32(); this.Unk_Ch = reader.ReadUInt32(); + if (Unk_Ch != 0) + { } + Entries = new PsoStructureEntryInfo[EntriesCount]; for (int i = 0; i < EntriesCount; i++) { @@ -639,6 +659,18 @@ namespace CodeWalker.GameFiles public ushort DataOffset { get; set; } public uint ReferenceKey { get; set; } // when array -> entry index with type + + public PsoStructureEntryInfo() + { } + public PsoStructureEntryInfo(MetaName nameHash, PsoDataType type, ushort offset, byte unk, MetaName refKey) + { + EntryNameHash = nameHash; + Type = type; + Unk_5h = unk; + DataOffset = offset; + ReferenceKey = (uint)refKey; + } + public void Read(DataReader reader) { this.EntryNameHash = (MetaName)reader.ReadUInt32(); @@ -673,6 +705,19 @@ namespace CodeWalker.GameFiles public int EntriesCount { get; private set; } public PsoEnumEntryInfo[] Entries { get; set; } + + public PsoEnumInfo() + { } + public PsoEnumInfo(MetaName nameHash, byte type, params PsoEnumEntryInfo[] entries) + { + IndexInfo = new PsoElementIndexInfo(); + IndexInfo.NameHash = nameHash; + IndexInfo.Offset = 0; //todo: fix? + + EntriesCount = entries?.Length ?? 0; + Entries = entries; + } + public override void Read(DataReader reader) { uint x = reader.ReadUInt32(); @@ -729,6 +774,15 @@ namespace CodeWalker.GameFiles public MetaName EntryNameHash { get; set; } public int EntryKey { get; set; } + + public PsoEnumEntryInfo() + { } + public PsoEnumEntryInfo(MetaName nameHash, int key) + { + EntryNameHash = nameHash; + EntryKey = key; + } + public void Read(DataReader reader) { this.EntryNameHash = (MetaName)reader.ReadUInt32(); diff --git a/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs b/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs index f26606d..a534dba 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs @@ -24,6 +24,7 @@ namespace CodeWalker.GameFiles public static void Clear() { + EnumDict.Clear(); StructDict.Clear(); } @@ -53,6 +54,10 @@ namespace CodeWalker.GameFiles PsoEnumInfo oldei = EnumDict[enuminfo.IndexInfo.NameHash]; if (!ComparePsoEnumInfos(oldei, enuminfo)) { + if (enuminfo.EntriesCount > oldei.EntriesCount)//assume this is newer... + { + EnumDict[enuminfo.IndexInfo.NameHash] = enuminfo; + } } } } @@ -67,6 +72,10 @@ namespace CodeWalker.GameFiles PsoStructureInfo oldsi = StructDict[structinfo.IndexInfo.NameHash]; if (!ComparePsoStructureInfos(oldsi, structinfo)) { + if (structinfo.EntriesCount > oldsi.EntriesCount) //assume more entries is newer.. maybe not correct + { + StructDict[structinfo.IndexInfo.NameHash] = structinfo; + } } } } @@ -208,6 +217,15591 @@ namespace CodeWalker.GameFiles } + public static string GetTypesInitString() + { + StringBuilder sb = new StringBuilder(); + + foreach (var si in StructDict.Values) + { + AddStructureInfoString(si, sb); + } + + sb.AppendLine(); + + foreach (var ei in EnumDict.Values) + { + AddEnumInfoString(ei, sb); + } + + string str = sb.ToString(); + return str; + } + private static void AddStructureInfoString(PsoStructureInfo si, StringBuilder sb) + { + var ns = GetMetaNameString(si.IndexInfo.NameHash); + sb.AppendFormat("case " + ns + ":"); + sb.AppendLine(); + sb.AppendFormat("return new PsoStructureInfo({0}, {1}, {2}, {3},", ns, si.Type, si.Unk, si.StructureLength); + sb.AppendLine(); + for (int i = 0; i < si.Entries.Length; i++) + { + var e = si.Entries[i]; + string refkey = "0"; + if (e.ReferenceKey != 0) + { + refkey = GetMetaNameString((MetaName)e.ReferenceKey); + } + sb.AppendFormat(" new PsoStructureEntryInfo({0}, PsoDataType.{1}, {2}, {3}, {4})", GetMetaNameString(e.EntryNameHash), e.Type, e.DataOffset, e.Unk_5h, refkey); + if (i < si.Entries.Length - 1) sb.Append(","); + sb.AppendLine(); + } + sb.AppendFormat(");"); + sb.AppendLine(); + } + private static void AddEnumInfoString(PsoEnumInfo ei, StringBuilder sb) + { + var ns = GetMetaNameString(ei.IndexInfo.NameHash); + sb.AppendFormat("case " + ns + ":"); + sb.AppendLine(); + sb.AppendFormat("return new PsoEnumInfo({0}, {1},", ns, ei.Type); + sb.AppendLine(); + for (int i = 0; i < ei.Entries.Length; i++) + { + var e = ei.Entries[i]; + sb.AppendFormat(" new PsoEnumEntryInfo({0}, {1})", GetMetaNameString(e.EntryNameHash), e.EntryKey); + if (i < ei.Entries.Length - 1) sb.Append(","); + sb.AppendLine(); + } + sb.AppendFormat(");"); + sb.AppendLine(); + } + private static string GetMetaNameString(MetaName n) + { + if (Enum.IsDefined(typeof(MetaName), n)) + { + return "MetaName." + n.ToString(); + } + else + { + return "(MetaName)" + n.ToString(); + } + } + + + + public static PsoStructureInfo GetStructureInfo(MetaName name) + { + //to generate structinfos + switch (name) + { + case MetaName.CJunctionTemplateArray: + return new PsoStructureInfo(MetaName.CJunctionTemplateArray, 0, 0, 170688, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CJunctionTemplate), + new PsoStructureEntryInfo(MetaName.Entries, PsoDataType.Array, 0, 1, (MetaName)9830400), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2111264667), + new PsoStructureEntryInfo(MetaName.AutoJunctionAdjustments, PsoDataType.Array, 39344, 129, (MetaName)524290) + ); + case MetaName.CJunctionTemplate: + return new PsoStructureInfo(MetaName.CJunctionTemplate, 0, 0, 1136, + new PsoStructureEntryInfo(MetaName.iFlags, PsoDataType.UInt, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.iNumJunctionNodes, PsoDataType.SInt, 4, 0, 0), + new PsoStructureEntryInfo(MetaName.iNumEntrances, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.iNumPhases, PsoDataType.SInt, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.iNumTrafficLightLocations, PsoDataType.SInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.fSearchDistance, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.fPhaseOffset, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.vJunctionMin, PsoDataType.Float3, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.vJunctionMax, PsoDataType.Float3, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Float3, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.vJunctionNodePositions, PsoDataType.Array, 64, 2, (MetaName)524297), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1057820426), + new PsoStructureEntryInfo(MetaName.Entrances, PsoDataType.Array, 192, 2, (MetaName)1048587), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)38018516), + new PsoStructureEntryInfo(MetaName.PhaseTimings, PsoDataType.Array, 960, 2, (MetaName)1048589), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2279781599), + new PsoStructureEntryInfo(MetaName.TrafficLightLocations, PsoDataType.Array, 1088, 2, (MetaName)524303) + ); + case (MetaName)1057820426: + return new PsoStructureInfo((MetaName)1057820426, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.vNodePosition, PsoDataType.Float3, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.iPhase, PsoDataType.SInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.fStoppingDistance, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.fOrientation, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.fAngleFromCenter, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.bCanTurnRightOnRedLight, PsoDataType.Bool, 33, 0, 0), + new PsoStructureEntryInfo(MetaName.bLeftLaneIsAheadOnly, PsoDataType.Bool, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.bRightLaneIsRightOnly, PsoDataType.Bool, 34, 0, 0), + new PsoStructureEntryInfo(MetaName.iLeftFilterLanePhase, PsoDataType.SInt, 36, 0, 0) + ); + case (MetaName)38018516: + return new PsoStructureInfo((MetaName)38018516, 0, 0, 8, + new PsoStructureEntryInfo(MetaName.fStartTime, PsoDataType.Float, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.fDuration, PsoDataType.Float, 4, 0, 0) + ); + case (MetaName)2279781599: + return new PsoStructureInfo((MetaName)2279781599, 0, 0, 6, + new PsoStructureEntryInfo(MetaName.iPosX, PsoDataType.SShort, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.iPosY, PsoDataType.SShort, 2, 0, 0), + new PsoStructureEntryInfo(MetaName.iPosZ, PsoDataType.SShort, 4, 0, 0) + ); + case (MetaName)2111264667: + return new PsoStructureInfo((MetaName)2111264667, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.vLocation, PsoDataType.Float3a, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.fCycleOffset, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.fCycleDuration, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.CVehicleModelInfoVarGlobal: + return new PsoStructureInfo(MetaName.CVehicleModelInfoVarGlobal, 0, 0, 392, + new PsoStructureEntryInfo(MetaName.VehiclePlates, PsoDataType.Structure, 8, 0, (MetaName)465922034), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)4213335822), + new PsoStructureEntryInfo(MetaName.Colors, PsoDataType.Array, 48, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2073371064), + new PsoStructureEntryInfo(MetaName.MetallicSettings, PsoDataType.Array, 64, 0, (MetaName)3), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2561269966), + new PsoStructureEntryInfo(MetaName.WindowColors, PsoDataType.Array, 80, 0, (MetaName)5), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2581049192), + new PsoStructureEntryInfo(MetaName.Lights, PsoDataType.Array, 96, 0, MetaName.POINTER), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.sirenSettings), + new PsoStructureEntryInfo(MetaName.Sirens, PsoDataType.Array, 112, 0, (MetaName)9), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)679130282), + new PsoStructureEntryInfo(MetaName.Kits, PsoDataType.Array, 128, 0, (MetaName)11), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CVehicleWheel), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Array, 0, 0, (MetaName)13), + new PsoStructureEntryInfo(MetaName.Wheels, PsoDataType.Array, 144, 4, (MetaName)851982), + new PsoStructureEntryInfo(MetaName.GlobalVariationData, PsoDataType.Structure, 352, 0, (MetaName)3062246906), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2807227399), + new PsoStructureEntryInfo((MetaName)2580788834, PsoDataType.Array, 376, 0, MetaName.BYTE) + ); + case (MetaName)465922034: + return new PsoStructureInfo((MetaName)465922034, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3027500557), + new PsoStructureEntryInfo(MetaName.Textures, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultTexureIndex, PsoDataType.SInt, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.NumericOffset, PsoDataType.UByte, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.AlphabeticOffset, PsoDataType.UByte, 29, 0, 0), + new PsoStructureEntryInfo(MetaName.SpaceOffset, PsoDataType.UByte, 30, 0, 0), + new PsoStructureEntryInfo(MetaName.RandomCharOffset, PsoDataType.UByte, 31, 0, 0), + new PsoStructureEntryInfo(MetaName.NumRandomChar, PsoDataType.UByte, 32, 0, 0) + ); + case (MetaName)3062246906: + return new PsoStructureInfo((MetaName)3062246906, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.xenonLightColor, PsoDataType.UInt, 8, 1, 0), + new PsoStructureEntryInfo(MetaName.xenonCoronaColor, PsoDataType.UInt, 12, 1, 0), + new PsoStructureEntryInfo(MetaName.xenonLightIntensityModifier, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.xenonCoronaIntensityModifier, PsoDataType.Float, 20, 0, 0) + ); + case (MetaName)3027500557: + return new PsoStructureInfo((MetaName)3027500557, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.TextureSetName, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.DiffuseMapName, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo(MetaName.NormalMapName, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.FontExtents, PsoDataType.Float4, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxLettersOnPlate, PsoDataType.Float2, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.FontColor, PsoDataType.UInt, 56, 1, 0), + new PsoStructureEntryInfo(MetaName.FontOutlineColor, PsoDataType.UInt, 60, 1, 0), + new PsoStructureEntryInfo(MetaName.IsFontOutlineEnabled, PsoDataType.Bool, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.FontOutlineMinMaxDepth, PsoDataType.Float2, 68, 0, 0) + ); + case (MetaName)4213335822: + return new PsoStructureInfo((MetaName)4213335822, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.color, PsoDataType.UInt, 8, 1, 0), + new PsoStructureEntryInfo(MetaName.metallicID, PsoDataType.Enum, 12, 2, (MetaName)360458334), + new PsoStructureEntryInfo(MetaName.audioColor, PsoDataType.Enum, 13, 2, (MetaName)544262540), + new PsoStructureEntryInfo(MetaName.audioPrefix, PsoDataType.Enum, 14, 2, (MetaName)2065815796), + new PsoStructureEntryInfo(MetaName.audioColorHash, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.audioPrefixHash, PsoDataType.UInt, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.colorName, PsoDataType.String, 24, 1, 0) + ); + case (MetaName)2073371064: + return new PsoStructureInfo((MetaName)2073371064, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.specInt, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.specFalloff, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.specFresnel, PsoDataType.Float, 16, 0, 0) + ); + case (MetaName)2561269966: + return new PsoStructureInfo((MetaName)2561269966, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.color, PsoDataType.UInt, 8, 1, 0), + new PsoStructureEntryInfo(MetaName.name, PsoDataType.String, 12, 7, 0) + ); + case (MetaName)2581049192: + return new PsoStructureInfo((MetaName)2581049192, 0, 0, 552, + new PsoStructureEntryInfo(MetaName.id, PsoDataType.UByte, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.indicator, PsoDataType.Structure, 16, 0, (MetaName)1339481019), + new PsoStructureEntryInfo(MetaName.rearIndicatorCorona, PsoDataType.Structure, 64, 0, (MetaName)1860240263), + new PsoStructureEntryInfo(MetaName.frontIndicatorCorona, PsoDataType.Structure, 120, 0, (MetaName)1860240263), + new PsoStructureEntryInfo(MetaName.tailLight, PsoDataType.Structure, 176, 0, (MetaName)1339481019), + new PsoStructureEntryInfo(MetaName.tailLightCorona, PsoDataType.Structure, 224, 0, (MetaName)1860240263), + new PsoStructureEntryInfo(MetaName.tailLightMiddleCorona, PsoDataType.Structure, 280, 0, (MetaName)1860240263), + new PsoStructureEntryInfo(MetaName.headLight, PsoDataType.Structure, 336, 0, (MetaName)1339481019), + new PsoStructureEntryInfo(MetaName.headLightCorona, PsoDataType.Structure, 384, 0, (MetaName)1860240263), + new PsoStructureEntryInfo(MetaName.reversingLight, PsoDataType.Structure, 440, 0, (MetaName)1339481019), + new PsoStructureEntryInfo(MetaName.reversingLightCorona, PsoDataType.Structure, 488, 0, (MetaName)1860240263), + new PsoStructureEntryInfo(MetaName.name, PsoDataType.String, 544, 1, 0) + ); + case (MetaName)1339481019: + return new PsoStructureInfo((MetaName)1339481019, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.intensity, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.falloffMax, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.falloffExponent, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.innerConeAngle, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.outerConeAngle, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.emmissiveBoost, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.color, PsoDataType.UInt, 32, 1, 0), + new PsoStructureEntryInfo(MetaName.textureName, PsoDataType.String, 36, 7, 0), + new PsoStructureEntryInfo(MetaName.mirrorTexture, PsoDataType.Bool, 40, 0, 0) + ); + case (MetaName)1860240263: + return new PsoStructureInfo((MetaName)1860240263, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.size, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.size_far, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.intensity, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.intensity_far, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.color, PsoDataType.UInt, 24, 1, 0), + new PsoStructureEntryInfo(MetaName.numCoronas, PsoDataType.UByte, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.distBetweenCoronas, PsoDataType.UByte, 29, 0, 0), + new PsoStructureEntryInfo(MetaName.distBetweenCoronas_far, PsoDataType.UByte, 30, 0, 0), + new PsoStructureEntryInfo(MetaName.xRotation, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.yRotation, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.zRotation, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.zBias, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.pullCoronaIn, PsoDataType.Bool, 48, 0, 0) + ); + case MetaName.sirenSettings: + return new PsoStructureInfo(MetaName.sirenSettings, 0, 0, 2376, + new PsoStructureEntryInfo(MetaName.id, PsoDataType.UByte, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.name, PsoDataType.String, 16, 1, 0), + new PsoStructureEntryInfo(MetaName.timeMultiplier, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.lightFalloffMax, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.lightFalloffExponent, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.lightInnerConeAngle, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.lightOuterConeAngle, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.lightOffset, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.textureName, PsoDataType.String, 48, 7, 0), + new PsoStructureEntryInfo(MetaName.sequencerBpm, PsoDataType.UInt, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.leftHeadLight, PsoDataType.Structure, 56, 0, (MetaName)188820339), + new PsoStructureEntryInfo(MetaName.rightHeadLight, PsoDataType.Structure, 72, 0, (MetaName)188820339), + new PsoStructureEntryInfo(MetaName.leftTailLight, PsoDataType.Structure, 88, 0, (MetaName)188820339), + new PsoStructureEntryInfo(MetaName.rightTailLight, PsoDataType.Structure, 104, 0, (MetaName)188820339), + new PsoStructureEntryInfo(MetaName.leftHeadLightMultiples, PsoDataType.UByte, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.rightHeadLightMultiples, PsoDataType.UByte, 121, 0, 0), + new PsoStructureEntryInfo(MetaName.leftTailLightMultiples, PsoDataType.UByte, 122, 0, 0), + new PsoStructureEntryInfo(MetaName.rightTailLightMultiples, PsoDataType.UByte, 123, 0, 0), + new PsoStructureEntryInfo(MetaName.useRealLights, PsoDataType.Bool, 124, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)4091688452), + new PsoStructureEntryInfo((MetaName)2047330294, PsoDataType.Array, 128, 1, (MetaName)1310739) + ); + case (MetaName)188820339: + return new PsoStructureInfo((MetaName)188820339, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.sequencer, PsoDataType.UInt, 8, 0, 0) + ); + case (MetaName)4091688452: + return new PsoStructureInfo((MetaName)4091688452, 0, 0, 112, + new PsoStructureEntryInfo(MetaName.rotation, PsoDataType.Structure, 8, 0, (MetaName)1356743507), + new PsoStructureEntryInfo(MetaName.flashiness, PsoDataType.Structure, 40, 0, (MetaName)1356743507), + new PsoStructureEntryInfo(MetaName.corona, PsoDataType.Structure, 72, 0, (MetaName)472016577), + new PsoStructureEntryInfo(MetaName.color, PsoDataType.UInt, 96, 1, 0), + new PsoStructureEntryInfo(MetaName.intensity, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.lightGroup, PsoDataType.UByte, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.rotate, PsoDataType.Bool, 105, 0, 0), + new PsoStructureEntryInfo(MetaName.scale, PsoDataType.Bool, 106, 0, 0), + new PsoStructureEntryInfo(MetaName.scaleFactor, PsoDataType.UByte, 107, 0, 0), + new PsoStructureEntryInfo(MetaName.flash, PsoDataType.Bool, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.light, PsoDataType.Bool, 109, 0, 0), + new PsoStructureEntryInfo(MetaName.spotLight, PsoDataType.Bool, 110, 0, 0), + new PsoStructureEntryInfo(MetaName.castShadows, PsoDataType.Bool, 111, 0, 0) + ); + case (MetaName)1356743507: + return new PsoStructureInfo((MetaName)1356743507, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.delta, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.start, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.speed, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.sequencer, PsoDataType.UInt, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.multiples, PsoDataType.UByte, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.direction, PsoDataType.Bool, 25, 0, 0), + new PsoStructureEntryInfo(MetaName.syncToBpm, PsoDataType.Bool, 26, 0, 0) + ); + case (MetaName)472016577: + return new PsoStructureInfo((MetaName)472016577, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.intensity, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.size, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.pull, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.faceCamera, PsoDataType.Bool, 20, 0, 0) + ); + case (MetaName)679130282: + return new PsoStructureInfo((MetaName)679130282, 0, 0, 120, + new PsoStructureEntryInfo(MetaName.kitName, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.id, PsoDataType.UShort, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.kitType, PsoDataType.Enum, 16, 0, (MetaName)3865430600), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)4238291236), + new PsoStructureEntryInfo(MetaName.visibleMods, PsoDataType.Array, 24, 0, (MetaName)3), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2730707380), + new PsoStructureEntryInfo(MetaName.linkMods, PsoDataType.Array, 40, 0, (MetaName)5), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)243590259), + new PsoStructureEntryInfo(MetaName.statMods, PsoDataType.Array, 56, 0, MetaName.POINTER), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)427606548), + new PsoStructureEntryInfo(MetaName.slotNames, PsoDataType.Array, 72, 0, (MetaName)9), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 2, 0), + new PsoStructureEntryInfo(MetaName.liveryNames, PsoDataType.Array, 88, 0, (MetaName)11), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 2, 0), + new PsoStructureEntryInfo(MetaName.livery2Names, PsoDataType.Array, 104, 0, (MetaName)13) + ); + case (MetaName)243590259: + return new PsoStructureInfo((MetaName)243590259, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.identifier, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.modifier, PsoDataType.UInt, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.audioApply, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.weight, PsoDataType.UByte, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.type, PsoDataType.Enum, 24, 0, (MetaName)2363989491) + ); + case (MetaName)4238291236: + return new PsoStructureInfo((MetaName)4238291236, 0, 0, 96, + new PsoStructureEntryInfo(MetaName.modelName, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.modShopLabel, PsoDataType.String, 16, 2, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.linkedModels, PsoDataType.Array, 24, 0, (MetaName)2), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3635907608), + new PsoStructureEntryInfo(MetaName.turnOffBones, PsoDataType.Array, 40, 0, (MetaName)4), + new PsoStructureEntryInfo(MetaName.type, PsoDataType.Enum, 56, 0, (MetaName)2363989491), + new PsoStructureEntryInfo(MetaName.bone, PsoDataType.Enum, 60, 0, (MetaName)3635907608), + new PsoStructureEntryInfo(MetaName.collisionBone, PsoDataType.Enum, 64, 0, (MetaName)3635907608), + new PsoStructureEntryInfo(MetaName.cameraPos, PsoDataType.Enum, 68, 0, (MetaName)3413962745), + new PsoStructureEntryInfo(MetaName.audioApply, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.weight, PsoDataType.UByte, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.turnOffExtra, PsoDataType.Bool, 77, 0, 0), + new PsoStructureEntryInfo(MetaName.disableBonnetCamera, PsoDataType.Bool, 78, 0, 0), + new PsoStructureEntryInfo(MetaName.allowBonnetSlide, PsoDataType.Bool, 79, 0, 0), + new PsoStructureEntryInfo(MetaName.weaponSlot, PsoDataType.SByte, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)2656206330, PsoDataType.SByte, 81, 0, 0), + new PsoStructureEntryInfo(MetaName.disableProjectileDriveby, PsoDataType.Bool, 82, 0, 0), + new PsoStructureEntryInfo(MetaName.disableDriveby, PsoDataType.Bool, 83, 0, 0), + new PsoStructureEntryInfo((MetaName)161724223, PsoDataType.SInt, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)484538291, PsoDataType.SInt, 88, 0, 0) + ); + case (MetaName)427606548: + return new PsoStructureInfo((MetaName)427606548, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.slot, PsoDataType.Enum, 8, 0, (MetaName)2363989491), + new PsoStructureEntryInfo(MetaName.name, PsoDataType.String, 16, 2, 0) + ); + case (MetaName)2730707380: + return new PsoStructureInfo((MetaName)2730707380, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.modelName, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.bone, PsoDataType.Enum, 12, 0, (MetaName)3635907608), + new PsoStructureEntryInfo(MetaName.turnOffExtra, PsoDataType.Bool, 16, 0, 0) + ); + case MetaName.CVehicleWheel: + return new PsoStructureInfo(MetaName.CVehicleWheel, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.wheelName, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.wheelVariation, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo(MetaName.modShopLabel, PsoDataType.String, 16, 2, 0), + new PsoStructureEntryInfo(MetaName.rimRadius, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.rear, PsoDataType.Bool, 28, 0, 0) + ); + case (MetaName)2858318490: + return new PsoStructureInfo((MetaName)2858318490, 0, 0, 128, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1443412025), + new PsoStructureEntryInfo((MetaName)2204727143, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1443412025), + new PsoStructureEntryInfo((MetaName)2458459502, PsoDataType.Array, 24, 0, (MetaName)2), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1443412025), + new PsoStructureEntryInfo((MetaName)1951049216, PsoDataType.Array, 40, 0, (MetaName)4), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1443412025), + new PsoStructureEntryInfo((MetaName)2740125593, PsoDataType.Array, 56, 0, (MetaName)6), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1443412025), + new PsoStructureEntryInfo((MetaName)1114790148, PsoDataType.Array, 72, 0, (MetaName)8), + new PsoStructureEntryInfo((MetaName)3095366650, PsoDataType.Structure, 88, 0, (MetaName)1380492417) + ); + case (MetaName)1380492417: + return new PsoStructureInfo((MetaName)1380492417, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1443412025), + new PsoStructureEntryInfo((MetaName)2645876692, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1443412025), + new PsoStructureEntryInfo((MetaName)666439252, PsoDataType.Array, 24, 0, (MetaName)2) + ); + case (MetaName)1443412025: + return new PsoStructureInfo((MetaName)1443412025, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.name, PsoDataType.String, 8, 2, 0), + new PsoStructureEntryInfo(MetaName.col, PsoDataType.UByte, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1912906641, PsoDataType.UByte, 17, 0, 0) + ); + case MetaName.CVehicleModelInfoVariation: + return new PsoStructureInfo(MetaName.CVehicleModelInfoVariation, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)418053801), + new PsoStructureEntryInfo(MetaName.variationData, PsoDataType.Array, 8, 0, 0) + ); + case (MetaName)418053801: + return new PsoStructureInfo((MetaName)418053801, 0, 0, 96, + new PsoStructureEntryInfo(MetaName.modelName, PsoDataType.String, 8, 1, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2575850962), + new PsoStructureEntryInfo(MetaName.colors, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.kits, PsoDataType.Array, 32, 0, (MetaName)3), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.windowsWithExposedEdges, PsoDataType.Array, 48, 0, (MetaName)5), + new PsoStructureEntryInfo(MetaName.plateProbabilities, PsoDataType.Structure, 64, 0, (MetaName)2135495316), + new PsoStructureEntryInfo(MetaName.lightSettings, PsoDataType.UByte, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.sirenSettings, PsoDataType.UByte, 89, 0, 0) + ); + case (MetaName)2135495316: + return new PsoStructureInfo((MetaName)2135495316, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)938618322), + new PsoStructureEntryInfo(MetaName.Probabilities, PsoDataType.Array, 8, 0, 0) + ); + case (MetaName)2575850962: + return new PsoStructureInfo((MetaName)2575850962, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UByte, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.indices, PsoDataType.Array, 8, 4, (MetaName)262144), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Bool, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.liveries, PsoDataType.Array, 12, 4, (MetaName)1638402) + ); + case (MetaName)938618322: + return new PsoStructureInfo((MetaName)938618322, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.Value, PsoDataType.UInt, 12, 0, 0) + ); + case (MetaName)1998252412: + return new PsoStructureInfo((MetaName)1998252412, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)113388969), + new PsoStructureEntryInfo(MetaName.CreditItems, PsoDataType.Array, 8, 0, 0) + ); + case (MetaName)113388969: + return new PsoStructureInfo((MetaName)113388969, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.LineType, PsoDataType.Enum, 8, 0, (MetaName)1795685103), + new PsoStructureEntryInfo(MetaName.cTextId1, PsoDataType.String, 16, 3, 0), + new PsoStructureEntryInfo(MetaName.cTextId2, PsoDataType.String, 32, 3, 0) + ); + case MetaName.CDataFileMgr__ContentsOfDataFileXml: + return new PsoStructureInfo(MetaName.CDataFileMgr__ContentsOfDataFileXml, 0, 0, 120, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 3, 0), + new PsoStructureEntryInfo(MetaName.disabledFiles, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3044571784), + new PsoStructureEntryInfo(MetaName.includedXmlFiles, PsoDataType.Array, 24, 0, (MetaName)2), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 3, 0), + new PsoStructureEntryInfo(MetaName.includedDataFiles, PsoDataType.Array, 40, 0, (MetaName)4), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CDataFileMgr__DataFile), + new PsoStructureEntryInfo(MetaName.dataFiles, PsoDataType.Array, 56, 0, (MetaName)6), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CDataFileMgr__ContentChangeSet), + new PsoStructureEntryInfo(MetaName.contentChangeSets, PsoDataType.Array, 72, 0, (MetaName)8), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 3, 0), + new PsoStructureEntryInfo(MetaName.patchFiles, PsoDataType.Array, 88, 0, (MetaName)10), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 3, 0), + new PsoStructureEntryInfo((MetaName)3665250723, PsoDataType.Array, 104, 0, MetaName.PsoPOINTER) + ); + case MetaName.CDataFileMgr__DataFile: + return new PsoStructureInfo(MetaName.CDataFileMgr__DataFile, 0, 0, 176, + new PsoStructureEntryInfo(MetaName.filename, PsoDataType.String, 8, 0, (MetaName)8388608), + new PsoStructureEntryInfo(MetaName.fileType, PsoDataType.Enum, 136, 0, MetaName.DataFileType), + new PsoStructureEntryInfo(MetaName.registerAs, PsoDataType.String, 144, 3, 0), + new PsoStructureEntryInfo(MetaName.locked, PsoDataType.Bool, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.loadCompletely, PsoDataType.Bool, 161, 0, 0), + new PsoStructureEntryInfo(MetaName.overlay, PsoDataType.Bool, 162, 0, 0), + new PsoStructureEntryInfo((MetaName)246845325, PsoDataType.Bool, 163, 0, 0), + new PsoStructureEntryInfo(MetaName.disabled, PsoDataType.Bool, 164, 0, 0), + new PsoStructureEntryInfo(MetaName.persistent, PsoDataType.Bool, 165, 0, 0), + new PsoStructureEntryInfo(MetaName.enforceLsnSorting, PsoDataType.Bool, 166, 0, 0), + new PsoStructureEntryInfo(MetaName.contents, PsoDataType.Enum, 168, 0, MetaName.DataFileContents), + new PsoStructureEntryInfo(MetaName.installPartition, PsoDataType.Enum, 172, 0, MetaName.InstallPartition) + ); + case MetaName.CLevelData: + return new PsoStructureInfo(MetaName.CLevelData, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.sLevelData), + new PsoStructureEntryInfo((MetaName)1643066032, PsoDataType.Array, 8, 0, 0) + ); + case MetaName.sLevelData: + return new PsoStructureInfo(MetaName.sLevelData, 0, 0, 72, + new PsoStructureEntryInfo((MetaName)2077026003, PsoDataType.String, 8, 3, 0), + new PsoStructureEntryInfo((MetaName)834048882, PsoDataType.String, 24, 3, 0), + new PsoStructureEntryInfo((MetaName)3760135447, PsoDataType.String, 40, 3, 0), + new PsoStructureEntryInfo((MetaName)3970741067, PsoDataType.String, 56, 3, 0) + ); + case (MetaName)1056751197: + return new PsoStructureInfo((MetaName)1056751197, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)322201475), + new PsoStructureEntryInfo((MetaName)934859523, PsoDataType.Array, 8, 0, 0) + ); + case (MetaName)322201475: + return new PsoStructureInfo((MetaName)322201475, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.aabb, PsoDataType.Structure, 16, 0, MetaName.rage__spdAABB), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UInt, 0, 0, 0), + new PsoStructureEntryInfo((MetaName)4022397219, PsoDataType.Array, 48, 0, (MetaName)2), + new PsoStructureEntryInfo((MetaName)1409504843, PsoDataType.Bool, 64, 0, 0) + ); + case MetaName.rage__spdAABB: + return new PsoStructureInfo(MetaName.rage__spdAABB, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.min, PsoDataType.Float4a, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.max, PsoDataType.Float4a, 16, 0, 0) + ); + case MetaName.CPedModelInfo__InitDataList: + return new PsoStructureInfo(MetaName.CPedModelInfo__InitDataList, 0, 0, 88, + new PsoStructureEntryInfo(MetaName.residentTxd, PsoDataType.String, 8, 3, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 3, 0), + new PsoStructureEntryInfo(MetaName.residentAnims, PsoDataType.Array, 24, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CPedModelInfo__InitData), + new PsoStructureEntryInfo(MetaName.InitDatas, PsoDataType.Array, 40, 0, (MetaName)3), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CTxdRelationship), + new PsoStructureEntryInfo(MetaName.txdRelationships, PsoDataType.Array, 56, 0, (MetaName)5), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CMultiTxdRelationship), + new PsoStructureEntryInfo(MetaName.multiTxdRelationships, PsoDataType.Array, 72, 0, MetaName.POINTER) + ); + case MetaName.CPedModelInfo__InitData: + return new PsoStructureInfo(MetaName.CPedModelInfo__InitData, 0, 0, 296, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 2, 0), + new PsoStructureEntryInfo(MetaName.PropsName, PsoDataType.String, 16, 2, 0), + new PsoStructureEntryInfo(MetaName.ClipDictionaryName, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.BlendShapeFileName, PsoDataType.String, 28, 7, 0), + new PsoStructureEntryInfo(MetaName.ExpressionSetName, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo(MetaName.ExpressionDictionaryName, PsoDataType.String, 36, 7, 0), + new PsoStructureEntryInfo(MetaName.ExpressionName, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo(MetaName.Pedtype, PsoDataType.String, 44, 7, 0), + new PsoStructureEntryInfo(MetaName.MovementClipSet, PsoDataType.String, 48, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo((MetaName)3053450155, PsoDataType.Array, 56, 0, (MetaName)9), + new PsoStructureEntryInfo(MetaName.StrafeClipSet, PsoDataType.String, 72, 7, 0), + new PsoStructureEntryInfo(MetaName.MovementToStrafeClipSet, PsoDataType.String, 76, 7, 0), + new PsoStructureEntryInfo(MetaName.InjuredStrafeClipSet, PsoDataType.String, 80, 7, 0), + new PsoStructureEntryInfo(MetaName.FullBodyDamageClipSet, PsoDataType.String, 84, 7, 0), + new PsoStructureEntryInfo(MetaName.AdditiveDamageClipSet, PsoDataType.String, 88, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultGestureClipSet, PsoDataType.String, 92, 7, 0), + new PsoStructureEntryInfo(MetaName.FacialClipsetGroupName, PsoDataType.String, 96, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultVisemeClipSet, PsoDataType.String, 100, 7, 0), + new PsoStructureEntryInfo(MetaName.SidestepClipSet, PsoDataType.String, 104, 7, 0), + new PsoStructureEntryInfo(MetaName.PoseMatcherName, PsoDataType.String, 108, 7, 0), + new PsoStructureEntryInfo(MetaName.PoseMatcherProneName, PsoDataType.String, 112, 7, 0), + new PsoStructureEntryInfo(MetaName.GetupSetHash, PsoDataType.String, 116, 7, 0), + new PsoStructureEntryInfo(MetaName.CreatureMetadataName, PsoDataType.String, 120, 7, 0), + new PsoStructureEntryInfo(MetaName.DecisionMakerName, PsoDataType.String, 124, 7, 0), + new PsoStructureEntryInfo(MetaName.MotionTaskDataSetName, PsoDataType.String, 128, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultTaskDataSetName, PsoDataType.String, 132, 7, 0), + new PsoStructureEntryInfo(MetaName.PedCapsuleName, PsoDataType.String, 136, 7, 0), + new PsoStructureEntryInfo(MetaName.PedLayoutName, PsoDataType.String, 140, 7, 0), + new PsoStructureEntryInfo(MetaName.PedComponentSetName, PsoDataType.String, 144, 7, 0), + new PsoStructureEntryInfo(MetaName.PedComponentClothName, PsoDataType.String, 148, 7, 0), + new PsoStructureEntryInfo(MetaName.PedIKSettingsName, PsoDataType.String, 152, 7, 0), + new PsoStructureEntryInfo(MetaName.TaskDataName, PsoDataType.String, 156, 7, 0), + new PsoStructureEntryInfo(MetaName.IsStreamedGfx, PsoDataType.Bool, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.AmbulanceShouldRespondTo, PsoDataType.Bool, 161, 0, 0), + new PsoStructureEntryInfo(MetaName.CanRideBikeWithNoHelmet, PsoDataType.Bool, 162, 0, 0), + new PsoStructureEntryInfo(MetaName.CanSpawnInCar, PsoDataType.Bool, 163, 0, 0), + new PsoStructureEntryInfo(MetaName.IsHeadBlendPed, PsoDataType.Bool, 164, 0, 0), + new PsoStructureEntryInfo(MetaName.bOnlyBulkyItemVariations, PsoDataType.Bool, 165, 0, 0), + new PsoStructureEntryInfo(MetaName.RelationshipGroup, PsoDataType.String, 168, 7, 0), + new PsoStructureEntryInfo(MetaName.NavCapabilitiesName, PsoDataType.String, 172, 7, 0), + new PsoStructureEntryInfo(MetaName.PerceptionInfo, PsoDataType.String, 176, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultBrawlingStyle, PsoDataType.String, 180, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultUnarmedWeapon, PsoDataType.String, 184, 7, 0), + new PsoStructureEntryInfo(MetaName.Personality, PsoDataType.String, 188, 7, 0), + new PsoStructureEntryInfo(MetaName.CombatInfo, PsoDataType.String, 192, 7, 0), + new PsoStructureEntryInfo(MetaName.VfxInfoName, PsoDataType.String, 196, 7, 0), + new PsoStructureEntryInfo(MetaName.AmbientClipsForFlee, PsoDataType.String, 200, 7, 0), + new PsoStructureEntryInfo(MetaName.Radio1, PsoDataType.Enum, 204, 0, (MetaName)2942646938), + new PsoStructureEntryInfo(MetaName.Radio2, PsoDataType.Enum, 208, 0, (MetaName)2942646938), + new PsoStructureEntryInfo(MetaName.FUpOffset, PsoDataType.Float, 212, 0, 0), + new PsoStructureEntryInfo(MetaName.RUpOffset, PsoDataType.Float, 216, 0, 0), + new PsoStructureEntryInfo(MetaName.FFrontOffset, PsoDataType.Float, 220, 0, 0), + new PsoStructureEntryInfo(MetaName.RFrontOffset, PsoDataType.Float, 224, 0, 0), + new PsoStructureEntryInfo(MetaName.MinActivationImpulse, PsoDataType.Float, 228, 0, 0), + new PsoStructureEntryInfo(MetaName.Stubble, PsoDataType.Float, 232, 0, 0), + new PsoStructureEntryInfo(MetaName.HDDist, PsoDataType.Float, 236, 0, 0), + new PsoStructureEntryInfo(MetaName.TargetingThreatModifier, PsoDataType.Float, 240, 0, 0), + new PsoStructureEntryInfo(MetaName.KilledPerceptionRangeModifer, PsoDataType.Float, 244, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)374769227), + new PsoStructureEntryInfo(MetaName.Sexiness, PsoDataType.Flags, 248, 0, (MetaName)2097211), + new PsoStructureEntryInfo(MetaName.Age, PsoDataType.UByte, 252, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPassengersInCar, PsoDataType.UByte, 253, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)637184392), + new PsoStructureEntryInfo(MetaName.ExternallyDrivenDOFs, PsoDataType.Flags, 254, 2, (MetaName)327743), + new PsoStructureEntryInfo(MetaName.PedVoiceGroup, PsoDataType.String, 256, 7, 0), + new PsoStructureEntryInfo(MetaName.AnimalAudioObject, PsoDataType.String, 260, 7, 0), + new PsoStructureEntryInfo(MetaName.AbilityType, PsoDataType.Enum, 264, 0, (MetaName)2011786168), + new PsoStructureEntryInfo(MetaName.ThermalBehaviour, PsoDataType.Enum, 268, 0, MetaName.ThermalBehaviour), + new PsoStructureEntryInfo(MetaName.SuperlodType, PsoDataType.Enum, 272, 0, (MetaName)4015041481), + new PsoStructureEntryInfo(MetaName.ScenarioPopStreamingSlot, PsoDataType.Enum, 276, 0, (MetaName)3029795674), + new PsoStructureEntryInfo(MetaName.DefaultSpawningPreference, PsoDataType.Enum, 280, 0, (MetaName)888587604), + new PsoStructureEntryInfo(MetaName.DefaultRemoveRangeMultiplier, PsoDataType.Float, 284, 0, 0), + new PsoStructureEntryInfo(MetaName.AllowCloseSpawning, PsoDataType.Bool, 288, 0, 0) + ); + case MetaName.CMultiTxdRelationship: + return new PsoStructureInfo(MetaName.CMultiTxdRelationship, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.parent, PsoDataType.String, 8, 3, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 3, 0), + new PsoStructureEntryInfo(MetaName.children, PsoDataType.Array, 24, 0, (MetaName)1) + ); + case (MetaName)2688740668: + return new PsoStructureInfo((MetaName)2688740668, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)4125685004), + new PsoStructureEntryInfo((MetaName)1644716366, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2475436365, PsoDataType.SInt, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3545223222, PsoDataType.SInt, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1846583548, PsoDataType.SInt, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)463466415, PsoDataType.SInt, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)2259012140, PsoDataType.Enum, 40, 0, (MetaName)3057039286), + new PsoStructureEntryInfo((MetaName)3368438810, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)3286738338, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)3161810789, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)2157942304, PsoDataType.Float, 56, 0, 0) + ); + case (MetaName)4125685004: + return new PsoStructureInfo((MetaName)4125685004, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.duration, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1709960891, PsoDataType.SInt, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)448101701, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)18336056, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2057680844, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3653186651, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)510925374, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.fxName, PsoDataType.String, 36, 7, 0), + new PsoStructureEntryInfo((MetaName)3344142251, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo((MetaName)4032486415, PsoDataType.String, 44, 7, 0) + ); + case MetaName.CDataFileMgr__ContentChangeSet: + return new PsoStructureInfo(MetaName.CDataFileMgr__ContentChangeSet, 0, 0, 184, + new PsoStructureEntryInfo(MetaName.changeSetName, PsoDataType.String, 8, 3, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)666520515), + new PsoStructureEntryInfo(MetaName.mapChangeSetData, PsoDataType.Array, 24, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 3, 0), + new PsoStructureEntryInfo(MetaName.filesToInvalidate, PsoDataType.Array, 40, 0, (MetaName)3), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 3, 0), + new PsoStructureEntryInfo(MetaName.filesToDisable, PsoDataType.Array, 56, 0, (MetaName)5), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 3, 0), + new PsoStructureEntryInfo(MetaName.filesToEnable, PsoDataType.Array, 72, 0, MetaName.POINTER), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.txdToLoad, PsoDataType.Array, 88, 0, (MetaName)9), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.txdToUnload, PsoDataType.Array, 104, 0, (MetaName)11), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)4089109759), + new PsoStructureEntryInfo(MetaName.residentResources, PsoDataType.Array, 120, 0, (MetaName)13), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)4089109759), + new PsoStructureEntryInfo(MetaName.unregisterResources, PsoDataType.Array, 136, 0, (MetaName)15), + new PsoStructureEntryInfo(MetaName.requiresLoadingScreen, PsoDataType.Bool, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.executionConditions, PsoDataType.Structure, 160, 0, MetaName.ExecutionConditions) + ); + case MetaName.ExecutionConditions: + return new PsoStructureInfo(MetaName.ExecutionConditions, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.ExecutionCondition), + new PsoStructureEntryInfo(MetaName.activeChangesetConditions, PsoDataType.Array, 8, 0, 0) + ); + case MetaName.fwClipSetManager: + return new PsoStructureInfo(MetaName.fwClipSetManager, 0, 0, 128, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo(MetaName.clipSets, PsoDataType.Map, 8, 1, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)331140115), + new PsoStructureEntryInfo(MetaName.clipDictionaryMetadatas, PsoDataType.Map, 32, 1, (MetaName)196612), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2046450505), + new PsoStructureEntryInfo((MetaName)3211922640, PsoDataType.Map, 56, 1, (MetaName)393223), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3219912345), + new PsoStructureEntryInfo((MetaName)3532340754, PsoDataType.Map, 80, 1, (MetaName)589834), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo((MetaName)1333660780, PsoDataType.Map, 104, 1, (MetaName)786445) + ); + case MetaName.ARRAYINFO: + return new PsoStructureInfo(MetaName.ARRAYINFO, 0, 2, 16, + new PsoStructureEntryInfo(MetaName.Key, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.Item, PsoDataType.Structure, 8, 3, 0) + ); + case MetaName.fwClipSet: + return new PsoStructureInfo(MetaName.fwClipSet, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.fallbackId, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.clipDictionaryName, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo(MetaName.clipItems, PsoDataType.Map, 16, 1, (MetaName)131075), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.moveNetworkFlags, PsoDataType.Array, 40, 0, (MetaName)5) + ); + case (MetaName)3883314999: + return new PsoStructureInfo((MetaName)3883314999, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)224899699), + new PsoStructureEntryInfo(MetaName.flags, PsoDataType.Flags, 8, 0, (MetaName)2097152), + new PsoStructureEntryInfo(MetaName.priority, PsoDataType.Enum, 12, 0, (MetaName)1498349301), + new PsoStructureEntryInfo(MetaName.boneMask, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.direction, PsoDataType.Float, 24, 0, 0) + ); + case MetaName.fwClipItemWithProps: + return new PsoStructureInfo(MetaName.fwClipItemWithProps, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)224899699), + new PsoStructureEntryInfo(MetaName.flags, PsoDataType.Flags, 8, 0, (MetaName)2097152), + new PsoStructureEntryInfo(MetaName.priority, PsoDataType.Enum, 12, 0, (MetaName)1498349301), + new PsoStructureEntryInfo(MetaName.boneMask, PsoDataType.String, 16, 7, 0) + ); + case MetaName.fwClipItem: + return new PsoStructureInfo(MetaName.fwClipItem, 0, 0, 8 //empty struct... possibly abstract/base class + ); + case (MetaName)4285341798: + return new PsoStructureInfo((MetaName)4285341798, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.fallbackId, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.clipDictionaryName, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo(MetaName.clipItems, PsoDataType.Map, 16, 1, (MetaName)131075), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.moveNetworkFlags, PsoDataType.Array, 40, 0, (MetaName)5), + new PsoStructureEntryInfo((MetaName)1940051574, PsoDataType.String, 56, 7, 0), + new PsoStructureEntryInfo((MetaName)4254591792, PsoDataType.String, 60, 7, 0), + new PsoStructureEntryInfo((MetaName)2283074537, PsoDataType.Bool, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)1451470102, PsoDataType.String, 68, 7, 0) + ); + case (MetaName)331140115: + return new PsoStructureInfo((MetaName)331140115, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)1631789397), + new PsoStructureEntryInfo(MetaName.streamingPolicy, PsoDataType.Flags, 8, 0, (MetaName)2097152), + new PsoStructureEntryInfo(MetaName.memoryGroup, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo(MetaName.streamingPriority, PsoDataType.Enum, 16, 0, (MetaName)733577798) + ); + case (MetaName)257: + return new PsoStructureInfo((MetaName)257, 0, 2, 32, + new PsoStructureEntryInfo(MetaName.Key, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.Item, PsoDataType.Structure, 8, 0, (MetaName)331140115) + ); + case (MetaName)2046450505: + return new PsoStructureInfo((MetaName)2046450505, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)676191063, PsoDataType.UInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1661025772, PsoDataType.UInt, 12, 0, 0) + ); + case (MetaName)258: + return new PsoStructureInfo((MetaName)258, 0, 2, 24, + new PsoStructureEntryInfo(MetaName.Key, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.Item, PsoDataType.Structure, 8, 0, (MetaName)2046450505) + ); + case (MetaName)3219912345: + return new PsoStructureInfo((MetaName)3219912345, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2356519750), + new PsoStructureEntryInfo((MetaName)4147768898, PsoDataType.Array, 8, 0, 0) + ); + case (MetaName)259: + return new PsoStructureInfo((MetaName)259, 0, 2, 32, + new PsoStructureEntryInfo(MetaName.Key, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.Item, PsoDataType.Structure, 8, 0, (MetaName)3219912345) + ); + case (MetaName)2356519750: + return new PsoStructureInfo((MetaName)2356519750, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)4286534285, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.Amount, PsoDataType.SInt, 12, 0, 0) + ); + case (MetaName)1005381910: + return new PsoStructureInfo((MetaName)1005381910, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.clips, PsoDataType.Array, 8, 0, 0) + ); + case (MetaName)4209092714: + return new PsoStructureInfo((MetaName)4209092714, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2319197961), + new PsoStructureEntryInfo((MetaName)3283104082, PsoDataType.Array, 8, 0, 0) + ); + case (MetaName)2319197961: + return new PsoStructureInfo((MetaName)2319197961, 0, 0, 384, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1829495763, PsoDataType.Structure, 16, 0, (MetaName)2675557154), + new PsoStructureEntryInfo(MetaName.Priority, PsoDataType.UByte, 376, 0, 0) + ); + case (MetaName)2675557154: + return new PsoStructureInfo((MetaName)2675557154, 0, 0, 360, + new PsoStructureEntryInfo((MetaName)3968024215, PsoDataType.Structure, 8, 0, (MetaName)2367955297), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3205113395), + new PsoStructureEntryInfo((MetaName)4018703742, PsoDataType.Array, 48, 1, (MetaName)393217), + new PsoStructureEntryInfo((MetaName)1405734818, PsoDataType.SInt, 344, 0, 0), + new PsoStructureEntryInfo((MetaName)1991133938, PsoDataType.UInt, 348, 0, 0), + new PsoStructureEntryInfo((MetaName)4185090704, PsoDataType.UInt, 352, 0, 0), + new PsoStructureEntryInfo(MetaName.EventType, PsoDataType.Enum, 356, 0, (MetaName)2168155209) + ); + case (MetaName)2367955297: + return new PsoStructureInfo((MetaName)2367955297, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)3994552921, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3761008258, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo(MetaName.Disabled, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1511368071, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)312484959, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2554379728, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.Bias, PsoDataType.Float, 32, 0, 0) + ); + case (MetaName)3205113395: + return new PsoStructureInfo((MetaName)3205113395, 0, 0, 48, + new PsoStructureEntryInfo((MetaName)2966939369, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1881596949, PsoDataType.Enum, 12, 0, (MetaName)2476021071), + new PsoStructureEntryInfo((MetaName)966603625, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2456685333, PsoDataType.UInt, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.HoldDuration, PsoDataType.UInt, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3592760554, PsoDataType.UInt, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.Disabled, PsoDataType.Bool, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3135858693, PsoDataType.Enum, 36, 0, (MetaName)3696221852), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 40, 0, 0) + ); + case (MetaName)1300198536: + return new PsoStructureInfo((MetaName)1300198536, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)661891977), + new PsoStructureEntryInfo((MetaName)197915343, PsoDataType.Array, 8, 0, 0) + ); + case (MetaName)661891977: + return new PsoStructureInfo((MetaName)661891977, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2749488155, PsoDataType.Enum, 12, 0, (MetaName)3261591327), + new PsoStructureEntryInfo(MetaName.scale, PsoDataType.Float2, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.offset, PsoDataType.Float2, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)4254456164, PsoDataType.UInt, 32, 1, 0), + new PsoStructureEntryInfo(MetaName.opacity, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)2600565536, PsoDataType.Enum, 40, 0, (MetaName)516897642), + new PsoStructureEntryInfo((MetaName)1250212400, PsoDataType.Float2, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2002769312, PsoDataType.Enum, 52, 0, (MetaName)2665868448), + new PsoStructureEntryInfo(MetaName.enabled, PsoDataType.Bool, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)2685533834, PsoDataType.SInt, 60, 0, 0) + ); + case MetaName.CPtFxAssetInfoMgr: + return new PsoStructureInfo(MetaName.CPtFxAssetInfoMgr, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo(MetaName.ptfxAssetDependencyInfos, PsoDataType.Array, 8, 0, 0) + ); + case MetaName.CPtFxAssetDependencyInfo: + return new PsoStructureInfo(MetaName.CPtFxAssetDependencyInfo, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.parentName, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.childName, PsoDataType.String, 12, 7, 0) + ); + case MetaName.CVfxFogVolumeInfoMgr: + return new PsoStructureInfo(MetaName.CVfxFogVolumeInfoMgr, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo(MetaName.vfxFogVolumeInfos, PsoDataType.Array, 8, 0, 0) + ); + case MetaName.CVfxFogVolumeInfo: + return new PsoStructureInfo(MetaName.CVfxFogVolumeInfo, 0, 0, 112, + new PsoStructureEntryInfo((MetaName)4135301713, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1768347469, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.position, PsoDataType.Float3, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.rotation, PsoDataType.Float3, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.scale, PsoDataType.Float3, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)960927728, PsoDataType.UByte, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)2816570672, PsoDataType.UByte, 65, 0, 0), + new PsoStructureEntryInfo((MetaName)193412222, PsoDataType.UByte, 66, 0, 0), + new PsoStructureEntryInfo((MetaName)4130410962, PsoDataType.UByte, 67, 0, 0), + new PsoStructureEntryInfo((MetaName)271126249, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.range, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)3843932311, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.falloff, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)595627342, PsoDataType.Long, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)2320897552, PsoDataType.Bool, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)2671568709, PsoDataType.Enum, 100, 0, (MetaName)2628996780) + ); + case MetaName.CVfxInteriorInfoMgr: + return new PsoStructureInfo(MetaName.CVfxInteriorInfoMgr, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo((MetaName)3147314065, PsoDataType.Map, 8, 1, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo(MetaName.vfxInteriorInfos, PsoDataType.Map, 32, 1, (MetaName)196612) + ); + case (MetaName)128879576: + return new PsoStructureInfo((MetaName)128879576, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)3197750225, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo((MetaName)70742260, PsoDataType.Map, 16, 1, (MetaName)65538) + ); + case (MetaName)769638437: + return new PsoStructureInfo((MetaName)769638437, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)3197750225, PsoDataType.String, 8, 7, 0) + ); + case MetaName.CVfxInteriorInfo: + return new PsoStructureInfo(MetaName.CVfxInteriorInfo, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)174438245, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2216385556, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo((MetaName)1794720348, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1270885502, PsoDataType.Bool, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)4061889016, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)3916956310, PsoDataType.Float, 28, 0, 0) + ); + case MetaName.CVfxPedInfoMgr: + return new PsoStructureInfo(MetaName.CVfxPedInfoMgr, 0, 0, 224, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo((MetaName)1639857157, PsoDataType.Map, 8, 1, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo((MetaName)190681942, PsoDataType.Map, 32, 1, (MetaName)196612), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo((MetaName)866013965, PsoDataType.Map, 56, 1, (MetaName)393223), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo((MetaName)619497315, PsoDataType.Map, 80, 1, (MetaName)589834), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo((MetaName)1719780883, PsoDataType.Map, 104, 1, (MetaName)786445), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo((MetaName)2436902422, PsoDataType.Map, 128, 1, (MetaName)983056), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo((MetaName)670699231, PsoDataType.Map, 152, 1, (MetaName)1179667), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo((MetaName)161646760, PsoDataType.Map, 176, 1, (MetaName)1376278), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo(MetaName.vfxPedInfos, PsoDataType.Map, 200, 1, (MetaName)1572889) + ); + case (MetaName)3745427162: + return new PsoStructureInfo((MetaName)3745427162, 0, 0, 104, + new PsoStructureEntryInfo((MetaName)2328909272, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)3928010395, PsoDataType.SInt, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)1667415425, PsoDataType.SInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3934831401, PsoDataType.SInt, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2811575072, PsoDataType.SInt, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3485910056, PsoDataType.SInt, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)924601972, PsoDataType.SInt, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2748666322, PsoDataType.SInt, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)2717336085, PsoDataType.SInt, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)383606187, PsoDataType.SInt, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)1201928922, PsoDataType.SInt, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2683338794, PsoDataType.SInt, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)244388834, PsoDataType.SInt, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3603110778, PsoDataType.SInt, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)1531021558, PsoDataType.SInt, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)1193506380, PsoDataType.SInt, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)1561972343, PsoDataType.SInt, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)2527519128, PsoDataType.SInt, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)2398011309, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)1229088392, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)1369041264, PsoDataType.UByte, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)1201263928, PsoDataType.UByte, 89, 0, 0), + new PsoStructureEntryInfo((MetaName)1596752989, PsoDataType.UByte, 90, 0, 0), + new PsoStructureEntryInfo((MetaName)2768457985, PsoDataType.UByte, 91, 0, 0), + new PsoStructureEntryInfo((MetaName)1822646338, PsoDataType.UByte, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)2318441304, PsoDataType.UByte, 93, 0, 0), + new PsoStructureEntryInfo((MetaName)96058849, PsoDataType.Float, 96, 0, 0) + ); + case (MetaName)1299390333: + return new PsoStructureInfo((MetaName)1299390333, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)634726437, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1754146930, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo((MetaName)4279228573, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ptFxScale, PsoDataType.Float, 20, 0, 0) + ); + case (MetaName)2425920550: + return new PsoStructureInfo((MetaName)2425920550, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)3741812782, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2206302043, PsoDataType.String, 12, 7, 0) + ); + case (MetaName)1811001251: + return new PsoStructureInfo((MetaName)1811001251, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)2371851021, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)3806811108, PsoDataType.SInt, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3913505542, PsoDataType.SInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3041920342, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2666183704, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1369041264, PsoDataType.UByte, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1201263928, PsoDataType.UByte, 29, 0, 0), + new PsoStructureEntryInfo((MetaName)1596752989, PsoDataType.UByte, 30, 0, 0) + ); + case (MetaName)1559486096: + return new PsoStructureInfo((MetaName)1559486096, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.ptFxName, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1171785422, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3186421174, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ptFxSpeedEvoMin, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.ptFxSpeedEvoMax, PsoDataType.Float, 24, 0, 0) + ); + case (MetaName)4188307664: + return new PsoStructureInfo((MetaName)4188307664, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)3741812782, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2206302043, PsoDataType.String, 12, 7, 0) + ); + case (MetaName)1073939452: + return new PsoStructureInfo((MetaName)1073939452, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)1814735825, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1469744358, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)1478381657, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2261099445, PsoDataType.Float, 20, 0, 0) + ); + case (MetaName)2217981082: + return new PsoStructureInfo((MetaName)2217981082, 0, 0, 48, + new PsoStructureEntryInfo((MetaName)1245538595, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)60123590, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2990477260, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.splashInPtFxEnabled, PsoDataType.Bool, 17, 0, 0), + new PsoStructureEntryInfo(MetaName.splashOutPtFxEnabled, PsoDataType.Bool, 18, 0, 0), + new PsoStructureEntryInfo(MetaName.splashWadePtFxEnabled, PsoDataType.Bool, 19, 0, 0), + new PsoStructureEntryInfo(MetaName.splashTrailPtFxEnabled, PsoDataType.Bool, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2545172352, PsoDataType.Bool, 21, 0, 0), + new PsoStructureEntryInfo(MetaName.splashInPtFxRange, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.splashOutPtFxRange, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.splashWadePtFxRange, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.splashTrailPtFxRange, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1146082049, PsoDataType.Float, 40, 0, 0) + ); + case MetaName.CVfxPedInfo: + return new PsoStructureInfo(MetaName.CVfxPedInfo, 0, 0, 512, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)231867887), + new PsoStructureEntryInfo((MetaName)293516458, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1904273735), + new PsoStructureEntryInfo((MetaName)4005470263, PsoDataType.Array, 24, 0, (MetaName)2), + new PsoStructureEntryInfo((MetaName)1938733863, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2108095349, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)898188953, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)815580680, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)728045365, PsoDataType.Bool, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)1340027467, PsoDataType.Bool, 57, 0, 0), + new PsoStructureEntryInfo((MetaName)1185708987, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)3067401171, PsoDataType.Bool, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)267862759, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)481653295, PsoDataType.Bool, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)3695423274, PsoDataType.Bool, 73, 0, 0), + new PsoStructureEntryInfo((MetaName)1954970508, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)1273209835, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)1481826432, PsoDataType.Bool, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)1210003497, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)3343556845, PsoDataType.Bool, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)300193613, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)2234775971, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)2648212357, PsoDataType.Bool, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)2189031336, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)1537566823, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)2106749959, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)621919678, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)1944160314, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)537443923, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)1293634249, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)1694886060, PsoDataType.Bool, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)3575961872, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)423449081, PsoDataType.String, 144, 7, 0), + new PsoStructureEntryInfo((MetaName)4063560113, PsoDataType.Bool, 148, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1810355587), + new PsoStructureEntryInfo((MetaName)1379225165, PsoDataType.Array, 152, 0, (MetaName)34), + new PsoStructureEntryInfo((MetaName)2002559884, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo((MetaName)717291862, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo((MetaName)606684208, PsoDataType.Bool, 176, 0, 0), + new PsoStructureEntryInfo((MetaName)2292742472, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo((MetaName)1437576219, PsoDataType.String, 184, 7, 0), + new PsoStructureEntryInfo((MetaName)3754033729, PsoDataType.Enum, 188, 0, (MetaName)2363471356), + new PsoStructureEntryInfo((MetaName)1020967481, PsoDataType.Enum, 192, 0, (MetaName)2363471356), + new PsoStructureEntryInfo((MetaName)2592389483, PsoDataType.Bool, 196, 0, 0), + new PsoStructureEntryInfo((MetaName)4054422403, PsoDataType.Float, 200, 0, 0), + new PsoStructureEntryInfo((MetaName)740137113, PsoDataType.String, 204, 7, 0), + new PsoStructureEntryInfo((MetaName)1841095686, PsoDataType.Float, 208, 0, 0), + new PsoStructureEntryInfo((MetaName)886073686, PsoDataType.Float, 212, 0, 0), + new PsoStructureEntryInfo((MetaName)1055815172, PsoDataType.Float, 216, 0, 0), + new PsoStructureEntryInfo((MetaName)2913384203, PsoDataType.Float, 220, 0, 0), + new PsoStructureEntryInfo((MetaName)3977079346, PsoDataType.Float, 224, 0, 0), + new PsoStructureEntryInfo((MetaName)3136327436, PsoDataType.Float, 228, 0, 0), + new PsoStructureEntryInfo((MetaName)2168759960, PsoDataType.Bool, 232, 0, 0), + new PsoStructureEntryInfo((MetaName)2723487263, PsoDataType.Float, 236, 0, 0), + new PsoStructureEntryInfo((MetaName)1349459576, PsoDataType.String, 240, 7, 0), + new PsoStructureEntryInfo((MetaName)2366514623, PsoDataType.Float, 244, 0, 0), + new PsoStructureEntryInfo((MetaName)194784077, PsoDataType.Float, 248, 0, 0), + new PsoStructureEntryInfo((MetaName)1052325933, PsoDataType.Float, 252, 0, 0), + new PsoStructureEntryInfo((MetaName)2774545125, PsoDataType.Float, 256, 0, 0), + new PsoStructureEntryInfo((MetaName)431439807, PsoDataType.Bool, 260, 0, 0), + new PsoStructureEntryInfo((MetaName)2591692617, PsoDataType.Float, 264, 0, 0), + new PsoStructureEntryInfo((MetaName)2631634259, PsoDataType.String, 268, 7, 0), + new PsoStructureEntryInfo((MetaName)3959299203, PsoDataType.Float, 272, 0, 0), + new PsoStructureEntryInfo((MetaName)2821295083, PsoDataType.Float, 276, 0, 0), + new PsoStructureEntryInfo((MetaName)3995586056, PsoDataType.Float, 280, 0, 0), + new PsoStructureEntryInfo((MetaName)3353201139, PsoDataType.Float, 284, 0, 0), + new PsoStructureEntryInfo((MetaName)412619038, PsoDataType.Bool, 288, 0, 0), + new PsoStructureEntryInfo((MetaName)1889989706, PsoDataType.Float, 292, 0, 0), + new PsoStructureEntryInfo((MetaName)3972116805, PsoDataType.Bool, 296, 0, 0), + new PsoStructureEntryInfo((MetaName)4143286255, PsoDataType.String, 300, 7, 0), + new PsoStructureEntryInfo((MetaName)30217815, PsoDataType.Float, 304, 0, 0), + new PsoStructureEntryInfo((MetaName)1079949132, PsoDataType.Float, 308, 0, 0), + new PsoStructureEntryInfo((MetaName)4224134658, PsoDataType.Float, 312, 0, 0), + new PsoStructureEntryInfo((MetaName)901763385, PsoDataType.Bool, 316, 0, 0), + new PsoStructureEntryInfo((MetaName)3950900138, PsoDataType.String, 320, 7, 0), + new PsoStructureEntryInfo((MetaName)10501246, PsoDataType.Float, 324, 0, 0), + new PsoStructureEntryInfo((MetaName)4131076032, PsoDataType.Float, 328, 0, 0), + new PsoStructureEntryInfo((MetaName)1327278534, PsoDataType.Float, 332, 0, 0), + new PsoStructureEntryInfo(MetaName.splashInPtFxName, PsoDataType.String, 336, 7, 0), + new PsoStructureEntryInfo((MetaName)374673880, PsoDataType.Float, 340, 0, 0), + new PsoStructureEntryInfo((MetaName)1335117116, PsoDataType.Float, 344, 0, 0), + new PsoStructureEntryInfo((MetaName)4258146773, PsoDataType.Float, 348, 0, 0), + new PsoStructureEntryInfo(MetaName.splashOutPtFxName, PsoDataType.String, 352, 7, 0), + new PsoStructureEntryInfo((MetaName)4020845257, PsoDataType.Float, 356, 0, 0), + new PsoStructureEntryInfo((MetaName)1518647754, PsoDataType.Float, 360, 0, 0), + new PsoStructureEntryInfo(MetaName.splashWadePtFxName, PsoDataType.String, 364, 7, 0), + new PsoStructureEntryInfo((MetaName)4021444798, PsoDataType.Float, 368, 0, 0), + new PsoStructureEntryInfo((MetaName)2149475580, PsoDataType.Float, 372, 0, 0), + new PsoStructureEntryInfo(MetaName.splashTrailPtFxName, PsoDataType.String, 376, 7, 0), + new PsoStructureEntryInfo(MetaName.splashTrailPtFxSpeedEvoMin, PsoDataType.Float, 380, 0, 0), + new PsoStructureEntryInfo(MetaName.splashTrailPtFxSpeedEvoMax, PsoDataType.Float, 384, 0, 0), + new PsoStructureEntryInfo((MetaName)4096431642, PsoDataType.Float, 388, 0, 0), + new PsoStructureEntryInfo((MetaName)415880732, PsoDataType.Float, 392, 0, 0), + new PsoStructureEntryInfo((MetaName)3919360765, PsoDataType.String, 396, 7, 0), + new PsoStructureEntryInfo((MetaName)3723675330, PsoDataType.Float, 400, 0, 0), + new PsoStructureEntryInfo((MetaName)3295859425, PsoDataType.Bool, 404, 0, 0), + new PsoStructureEntryInfo((MetaName)1659367240, PsoDataType.String, 408, 7, 0), + new PsoStructureEntryInfo((MetaName)2238873027, PsoDataType.String, 412, 7, 0), + new PsoStructureEntryInfo((MetaName)3354804163, PsoDataType.String, 416, 7, 0), + new PsoStructureEntryInfo((MetaName)1800302370, PsoDataType.String, 420, 7, 0), + new PsoStructureEntryInfo((MetaName)2345868328, PsoDataType.String, 424, 7, 0), + new PsoStructureEntryInfo((MetaName)2719523535, PsoDataType.Float, 428, 0, 0), + new PsoStructureEntryInfo((MetaName)460277230, PsoDataType.Float, 432, 0, 0), + new PsoStructureEntryInfo((MetaName)4222549442, PsoDataType.Float, 436, 0, 0), + new PsoStructureEntryInfo((MetaName)2205812843, PsoDataType.Bool, 440, 0, 0), + new PsoStructureEntryInfo((MetaName)2543787987, PsoDataType.Float, 444, 0, 0), + new PsoStructureEntryInfo((MetaName)789559375, PsoDataType.String, 448, 7, 0), + new PsoStructureEntryInfo((MetaName)610648776, PsoDataType.Enum, 452, 0, (MetaName)2363471356), + new PsoStructureEntryInfo((MetaName)2321865573, PsoDataType.Bool, 456, 0, 0), + new PsoStructureEntryInfo((MetaName)3482316648, PsoDataType.Float, 460, 0, 0), + new PsoStructureEntryInfo((MetaName)3414327374, PsoDataType.String, 464, 7, 0), + new PsoStructureEntryInfo((MetaName)3991249477, PsoDataType.Enum, 468, 0, (MetaName)2363471356), + new PsoStructureEntryInfo((MetaName)3633780286, PsoDataType.Bool, 472, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3663974917), + new PsoStructureEntryInfo((MetaName)1614411627, PsoDataType.Array, 480, 0, (MetaName)113), + new PsoStructureEntryInfo((MetaName)2158250314, PsoDataType.Bool, 496, 0, 0), + new PsoStructureEntryInfo((MetaName)2801240542, PsoDataType.Float, 500, 0, 0), + new PsoStructureEntryInfo((MetaName)1702406422, PsoDataType.String, 504, 7, 0) + ); + case (MetaName)231867887: + return new PsoStructureInfo((MetaName)231867887, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)222345803, PsoDataType.Enum, 8, 0, (MetaName)679492), + new PsoStructureEntryInfo((MetaName)3557178741, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo((MetaName)3535009775, PsoDataType.String, 16, 7, 0) + ); + case (MetaName)1904273735: + return new PsoStructureInfo((MetaName)1904273735, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)2366957880, PsoDataType.Enum, 8, 0, (MetaName)2363471356), + new PsoStructureEntryInfo((MetaName)1407284946, PsoDataType.Enum, 12, 0, (MetaName)2363471356), + new PsoStructureEntryInfo((MetaName)970730558, PsoDataType.Enum, 16, 0, (MetaName)726948528), + new PsoStructureEntryInfo((MetaName)1061041502, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)2989606868, PsoDataType.String, 24, 7, 0) + ); + case (MetaName)1810355587: + return new PsoStructureInfo((MetaName)1810355587, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.ptFxName, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2366957880, PsoDataType.Enum, 12, 0, (MetaName)2363471356), + new PsoStructureEntryInfo((MetaName)1407284946, PsoDataType.Enum, 16, 0, (MetaName)2363471356), + new PsoStructureEntryInfo((MetaName)970730558, PsoDataType.SInt, 20, 0, 0) + ); + case (MetaName)3663974917: + return new PsoStructureInfo((MetaName)3663974917, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.ptFxName, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2366957880, PsoDataType.Enum, 12, 0, (MetaName)2363471356), + new PsoStructureEntryInfo((MetaName)1407284946, PsoDataType.Enum, 16, 0, (MetaName)2363471356) + ); + case MetaName.CVfxRegionInfoMgr: + return new PsoStructureInfo(MetaName.CVfxRegionInfoMgr, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo(MetaName.vfxRegionInfos, PsoDataType.Map, 8, 1, (MetaName)1) + ); + case MetaName.CVfxRegionInfo: + return new PsoStructureInfo(MetaName.CVfxRegionInfo, 0, 0, 64, + new PsoStructureEntryInfo((MetaName)3909318761, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1353578052, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)215011533), + new PsoStructureEntryInfo((MetaName)157134441, PsoDataType.Array, 16, 0, (MetaName)2), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)215011533), + new PsoStructureEntryInfo((MetaName)2975635968, PsoDataType.Array, 32, 0, (MetaName)4), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)215011533), + new PsoStructureEntryInfo((MetaName)3751751493, PsoDataType.Array, 48, 0, (MetaName)6) + ); + case (MetaName)215011533: + return new PsoStructureInfo((MetaName)215011533, 0, 0, 48, + new PsoStructureEntryInfo((MetaName)4158673537, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)28713766, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo((MetaName)3099312282, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3614737265, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2437695423, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1775217766, PsoDataType.SInt, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1202806570, PsoDataType.SInt, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)4204794351, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)634319578, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)552536380, PsoDataType.Float, 44, 0, 0) + ); + case MetaName.CVfxVehicleInfoMgr: + return new PsoStructureInfo(MetaName.CVfxVehicleInfoMgr, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo(MetaName.vfxVehicleInfos, PsoDataType.Map, 8, 1, (MetaName)1) + ); + case MetaName.CVfxVehicleInfo: + return new PsoStructureInfo(MetaName.CVfxVehicleInfo, 0, 0, 880, + new PsoStructureEntryInfo(MetaName.mtlBangPtFxVehicleEvo, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.mtlBangPtFxVehicleScale, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.mtlScrapePtFxVehicleEvo, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.mtlScrapePtFxVehicleScale, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.exhaustPtFxEnabled, PsoDataType.Bool, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.exhaustPtFxName, PsoDataType.String, 28, 7, 0), + new PsoStructureEntryInfo(MetaName.exhaustPtFxCutOffSpeed, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.exhaustPtFxRange, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.exhaustPtFxScale, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.exhaustPtFxSpeedEvoMin, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.exhaustPtFxSpeedEvoMax, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.exhaustPtFxTempEvoMin, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.exhaustPtFxTempEvoMax, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.exhaustPtFxThrottleEvoOnGearChange, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.engineStartupPtFxEnabled, PsoDataType.Bool, 61, 0, 0), + new PsoStructureEntryInfo(MetaName.engineStartupPtFxName, PsoDataType.String, 64, 7, 0), + new PsoStructureEntryInfo(MetaName.engineStartupPtFxRange, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.misfirePtFxEnabled, PsoDataType.Bool, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.misfirePtFxName, PsoDataType.String, 76, 7, 0), + new PsoStructureEntryInfo(MetaName.misfirePtFxRange, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.backfirePtFxEnabled, PsoDataType.Bool, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.backfirePtFxName, PsoDataType.String, 88, 7, 0), + new PsoStructureEntryInfo(MetaName.backfirePtFxRange, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.engineDamagePtFxEnabled, PsoDataType.Bool, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.engineDamagePtFxHasPanel, PsoDataType.Bool, 97, 0, 0), + new PsoStructureEntryInfo(MetaName.engineDamagePtFxHasRotorEvo, PsoDataType.Bool, 98, 0, 0), + new PsoStructureEntryInfo(MetaName.engineDamagePtFxNoPanelName, PsoDataType.String, 100, 7, 0), + new PsoStructureEntryInfo(MetaName.engineDamagePtFxPanelOpenName, PsoDataType.String, 104, 7, 0), + new PsoStructureEntryInfo(MetaName.engineDamagePtFxPanelShutName, PsoDataType.String, 108, 7, 0), + new PsoStructureEntryInfo(MetaName.engineDamagePtFxRange, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.engineDamagePtFxSpeedEvoMin, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.engineDamagePtFxSpeedEvoMax, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.overturnedSmokePtFxEnabled, PsoDataType.Bool, 124, 0, 0), + new PsoStructureEntryInfo(MetaName.overturnedSmokePtFxName, PsoDataType.String, 128, 7, 0), + new PsoStructureEntryInfo(MetaName.overturnedSmokePtFxRange, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo(MetaName.overturnedSmokePtFxAngleThresh, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo(MetaName.overturnedSmokePtFxSpeedThresh, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo(MetaName.overturnedSmokePtFxEngineHealthThresh, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo(MetaName.leakPtFxEnabled, PsoDataType.Bool, 148, 0, 0), + new PsoStructureEntryInfo(MetaName.leakPtFxOilName, PsoDataType.String, 152, 7, 0), + new PsoStructureEntryInfo(MetaName.leakPtFxPetrolName, PsoDataType.String, 156, 7, 0), + new PsoStructureEntryInfo(MetaName.leakPtFxRange, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.leakPtFxSpeedEvoMin, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo(MetaName.leakPtFxSpeedEvoMax, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo(MetaName.wheelGenericPtFxSet, PsoDataType.SInt, 172, 0, 0), + new PsoStructureEntryInfo(MetaName.wheelGenericDecalSet, PsoDataType.SInt, 176, 0, 0), + new PsoStructureEntryInfo(MetaName.wheelGenericRangeMult, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo(MetaName.wheelSkidmarkRearOnly, PsoDataType.Bool, 184, 0, 0), + new PsoStructureEntryInfo(MetaName.wheelSkidmarkSlipMult, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo(MetaName.wheelSkidmarkPressureMult, PsoDataType.Float, 192, 0, 0), + new PsoStructureEntryInfo(MetaName.wheelFrictionPtFxFricMult, PsoDataType.Float, 196, 0, 0), + new PsoStructureEntryInfo(MetaName.wheelDisplacementPtFxDispMult, PsoDataType.Float, 200, 0, 0), + new PsoStructureEntryInfo(MetaName.wheelBurnoutPtFxFricMult, PsoDataType.Float, 204, 0, 0), + new PsoStructureEntryInfo(MetaName.wheelBurnoutPtFxTempMult, PsoDataType.Float, 208, 0, 0), + new PsoStructureEntryInfo(MetaName.wheelLowLodPtFxScale, PsoDataType.Float, 212, 0, 0), + new PsoStructureEntryInfo(MetaName.wheelPuncturePtFxName, PsoDataType.String, 216, 7, 0), + new PsoStructureEntryInfo(MetaName.wheelPuncturePtFxRange, PsoDataType.Float, 220, 0, 0), + new PsoStructureEntryInfo(MetaName.wheelBurstPtFxName, PsoDataType.String, 224, 7, 0), + new PsoStructureEntryInfo(MetaName.wheelBurstPtFxRange, PsoDataType.Float, 228, 0, 0), + new PsoStructureEntryInfo(MetaName.wheelFirePtFxName, PsoDataType.String, 232, 7, 0), + new PsoStructureEntryInfo(MetaName.wheelFirePtFxRange, PsoDataType.Float, 236, 0, 0), + new PsoStructureEntryInfo(MetaName.wheelFirePtFxSpeedEvoMin, PsoDataType.Float, 240, 0, 0), + new PsoStructureEntryInfo(MetaName.wheelFirePtFxSpeedEvoMax, PsoDataType.Float, 244, 0, 0), + new PsoStructureEntryInfo(MetaName.wreckedFirePtFxEnabled, PsoDataType.Bool, 248, 0, 0), + new PsoStructureEntryInfo(MetaName.wreckedFirePtFxName, PsoDataType.String, 252, 7, 0), + new PsoStructureEntryInfo(MetaName.wreckedFirePtFxDurationMin, PsoDataType.Float, 256, 0, 0), + new PsoStructureEntryInfo(MetaName.wreckedFirePtFxDurationMax, PsoDataType.Float, 260, 0, 0), + new PsoStructureEntryInfo(MetaName.wreckedFirePtFxRadius, PsoDataType.Float, 264, 0, 0), + new PsoStructureEntryInfo(MetaName.wreckedFire2PtFxEnabled, PsoDataType.Bool, 268, 0, 0), + new PsoStructureEntryInfo(MetaName.wreckedFire2PtFxName, PsoDataType.String, 272, 7, 0), + new PsoStructureEntryInfo(MetaName.wreckedFire2PtFxDurationMin, PsoDataType.Float, 276, 0, 0), + new PsoStructureEntryInfo(MetaName.wreckedFire2PtFxDurationMax, PsoDataType.Float, 280, 0, 0), + new PsoStructureEntryInfo(MetaName.wreckedFire2PtFxRadius, PsoDataType.Float, 284, 0, 0), + new PsoStructureEntryInfo(MetaName.wreckedFire2UseOverheatBone, PsoDataType.Bool, 288, 0, 0), + new PsoStructureEntryInfo(MetaName.wreckedFire2OffsetPos, PsoDataType.Float3, 304, 0, 0), + new PsoStructureEntryInfo(MetaName.wreckedFire3PtFxEnabled, PsoDataType.Bool, 320, 0, 0), + new PsoStructureEntryInfo(MetaName.wreckedFire3PtFxName, PsoDataType.String, 324, 7, 0), + new PsoStructureEntryInfo(MetaName.wreckedFire3PtFxDurationMin, PsoDataType.Float, 328, 0, 0), + new PsoStructureEntryInfo(MetaName.wreckedFire3PtFxDurationMax, PsoDataType.Float, 332, 0, 0), + new PsoStructureEntryInfo(MetaName.wreckedFire3PtFxRadius, PsoDataType.Float, 336, 0, 0), + new PsoStructureEntryInfo(MetaName.wreckedFire3UseOverheatBone, PsoDataType.Bool, 340, 0, 0), + new PsoStructureEntryInfo(MetaName.wreckedFire3OffsetPos, PsoDataType.Float3, 352, 0, 0), + new PsoStructureEntryInfo(MetaName.petrolTankFirePtFxName, PsoDataType.String, 368, 7, 0), + new PsoStructureEntryInfo(MetaName.petrolTankFirePtFxRange, PsoDataType.Float, 372, 0, 0), + new PsoStructureEntryInfo(MetaName.petrolTankFirePtFxSpeedEvoMin, PsoDataType.Float, 376, 0, 0), + new PsoStructureEntryInfo(MetaName.petrolTankFirePtFxSpeedEvoMax, PsoDataType.Float, 380, 0, 0), + new PsoStructureEntryInfo(MetaName.petrolTankFirePtFxRadius, PsoDataType.Float, 384, 0, 0), + new PsoStructureEntryInfo(MetaName.boatEntryPtFxEnabled, PsoDataType.Bool, 388, 0, 0), + new PsoStructureEntryInfo(MetaName.boatEntryPtFxRange, PsoDataType.Float, 392, 0, 0), + new PsoStructureEntryInfo(MetaName.boatEntryPtFxName, PsoDataType.String, 396, 7, 0), + new PsoStructureEntryInfo(MetaName.boatEntryPtFxSpeedEvoMin, PsoDataType.Float, 400, 0, 0), + new PsoStructureEntryInfo(MetaName.boatEntryPtFxSpeedEvoMax, PsoDataType.Float, 404, 0, 0), + new PsoStructureEntryInfo(MetaName.boatEntryPtFxScale, PsoDataType.Float, 408, 0, 0), + new PsoStructureEntryInfo((MetaName)913361740, PsoDataType.Bool, 412, 0, 0), + new PsoStructureEntryInfo((MetaName)3427519025, PsoDataType.Float, 416, 0, 0), + new PsoStructureEntryInfo((MetaName)276219657, PsoDataType.String, 420, 7, 0), + new PsoStructureEntryInfo((MetaName)501212370, PsoDataType.Float, 424, 0, 0), + new PsoStructureEntryInfo((MetaName)669705932, PsoDataType.Float, 428, 0, 0), + new PsoStructureEntryInfo((MetaName)2913951911, PsoDataType.Float, 432, 0, 0), + new PsoStructureEntryInfo(MetaName.boatBowPtFxEnabled, PsoDataType.Bool, 436, 0, 0), + new PsoStructureEntryInfo(MetaName.boatBowPtFxRange, PsoDataType.Float, 440, 0, 0), + new PsoStructureEntryInfo(MetaName.boatBowPtFxForwardName, PsoDataType.String, 444, 7, 0), + new PsoStructureEntryInfo(MetaName.boatBowPtFxReverseName, PsoDataType.String, 448, 7, 0), + new PsoStructureEntryInfo((MetaName)2402780585, PsoDataType.String, 452, 7, 0), + new PsoStructureEntryInfo((MetaName)1426207057, PsoDataType.Float3, 464, 0, 0), + new PsoStructureEntryInfo(MetaName.boatBowPtFxSpeedEvoMin, PsoDataType.Float, 480, 0, 0), + new PsoStructureEntryInfo(MetaName.boatBowPtFxSpeedEvoMax, PsoDataType.Float, 484, 0, 0), + new PsoStructureEntryInfo(MetaName.boatBowPtFxKeelEvoMin, PsoDataType.Float, 488, 0, 0), + new PsoStructureEntryInfo(MetaName.boatBowPtFxKeelEvoMax, PsoDataType.Float, 492, 0, 0), + new PsoStructureEntryInfo(MetaName.boatBowPtFxScale, PsoDataType.Float, 496, 0, 0), + new PsoStructureEntryInfo(MetaName.boatBowPtFxReverseOffset, PsoDataType.Float, 500, 0, 0), + new PsoStructureEntryInfo(MetaName.boatWashPtFxEnabled, PsoDataType.Bool, 504, 0, 0), + new PsoStructureEntryInfo(MetaName.boatWashPtFxRange, PsoDataType.Float, 508, 0, 0), + new PsoStructureEntryInfo(MetaName.boatWashPtFxName, PsoDataType.String, 512, 7, 0), + new PsoStructureEntryInfo(MetaName.boatWashPtFxSpeedEvoMin, PsoDataType.Float, 516, 0, 0), + new PsoStructureEntryInfo(MetaName.boatWashPtFxSpeedEvoMax, PsoDataType.Float, 520, 0, 0), + new PsoStructureEntryInfo(MetaName.boatWashPtFxScale, PsoDataType.Float, 524, 0, 0), + new PsoStructureEntryInfo(MetaName.boatPropellerPtFxEnabled, PsoDataType.Bool, 528, 0, 0), + new PsoStructureEntryInfo(MetaName.boatPropellerPtFxRange, PsoDataType.Float, 532, 0, 0), + new PsoStructureEntryInfo(MetaName.boatPropellerPtFxName, PsoDataType.String, 536, 7, 0), + new PsoStructureEntryInfo(MetaName.boatPropellerPtFxForwardSpeedEvoMin, PsoDataType.Float, 540, 0, 0), + new PsoStructureEntryInfo(MetaName.boatPropellerPtFxForwardSpeedEvoMax, PsoDataType.Float, 544, 0, 0), + new PsoStructureEntryInfo(MetaName.boatPropellerPtFxBackwardSpeedEvoMin, PsoDataType.Float, 548, 0, 0), + new PsoStructureEntryInfo(MetaName.boatPropellerPtFxBackwardSpeedEvoMax, PsoDataType.Float, 552, 0, 0), + new PsoStructureEntryInfo(MetaName.boatPropellerPtFxDepthEvoMin, PsoDataType.Float, 556, 0, 0), + new PsoStructureEntryInfo(MetaName.boatPropellerPtFxDepthEvoMax, PsoDataType.Float, 560, 0, 0), + new PsoStructureEntryInfo(MetaName.boatPropellerPtFxScale, PsoDataType.Float, 564, 0, 0), + new PsoStructureEntryInfo(MetaName.boatLowLodWakePtFxEnabled, PsoDataType.Bool, 568, 0, 0), + new PsoStructureEntryInfo(MetaName.boatLowLodWakePtFxRangeMin, PsoDataType.Float, 572, 0, 0), + new PsoStructureEntryInfo(MetaName.boatLowLodWakePtFxRangeMax, PsoDataType.Float, 576, 0, 0), + new PsoStructureEntryInfo(MetaName.boatLowLodWakePtFxName, PsoDataType.String, 580, 7, 0), + new PsoStructureEntryInfo(MetaName.boatLowLodWakePtFxSpeedEvoMin, PsoDataType.Float, 584, 0, 0), + new PsoStructureEntryInfo(MetaName.boatLowLodWakePtFxSpeedEvoMax, PsoDataType.Float, 588, 0, 0), + new PsoStructureEntryInfo(MetaName.boatLowLodWakePtFxScale, PsoDataType.Float, 592, 0, 0), + new PsoStructureEntryInfo(MetaName.planeAfterburnerPtFxEnabled, PsoDataType.Bool, 596, 0, 0), + new PsoStructureEntryInfo(MetaName.planeAfterburnerPtFxName, PsoDataType.String, 600, 7, 0), + new PsoStructureEntryInfo(MetaName.planeAfterburnerPtFxRange, PsoDataType.Float, 604, 0, 0), + new PsoStructureEntryInfo(MetaName.planeAfterburnerPtFxScale, PsoDataType.Float, 608, 0, 0), + new PsoStructureEntryInfo(MetaName.planeWingTipPtFxEnabled, PsoDataType.Bool, 612, 0, 0), + new PsoStructureEntryInfo(MetaName.planeWingTipPtFxName, PsoDataType.String, 616, 7, 0), + new PsoStructureEntryInfo(MetaName.planeWingTipPtFxRange, PsoDataType.Float, 620, 0, 0), + new PsoStructureEntryInfo(MetaName.planeWingTipPtFxSpeedEvoMin, PsoDataType.Float, 624, 0, 0), + new PsoStructureEntryInfo(MetaName.planeWingTipPtFxSpeedEvoMax, PsoDataType.Float, 628, 0, 0), + new PsoStructureEntryInfo(MetaName.planeDamageFirePtFxEnabled, PsoDataType.Bool, 632, 0, 0), + new PsoStructureEntryInfo(MetaName.planeDamageFirePtFxName, PsoDataType.String, 636, 7, 0), + new PsoStructureEntryInfo(MetaName.planeDamageFirePtFxRange, PsoDataType.Float, 640, 0, 0), + new PsoStructureEntryInfo(MetaName.planeDamageFirePtFxSpeedEvoMin, PsoDataType.Float, 644, 0, 0), + new PsoStructureEntryInfo(MetaName.planeDamageFirePtFxSpeedEvoMax, PsoDataType.Float, 648, 0, 0), + new PsoStructureEntryInfo(MetaName.planeGroundDisturbPtFxEnabled, PsoDataType.Bool, 652, 0, 0), + new PsoStructureEntryInfo(MetaName.planeGroundDisturbPtFxNameDefault, PsoDataType.String, 656, 7, 0), + new PsoStructureEntryInfo(MetaName.planeGroundDisturbPtFxNameSand, PsoDataType.String, 660, 7, 0), + new PsoStructureEntryInfo(MetaName.planeGroundDisturbPtFxNameDirt, PsoDataType.String, 664, 7, 0), + new PsoStructureEntryInfo(MetaName.planeGroundDisturbPtFxNameWater, PsoDataType.String, 668, 7, 0), + new PsoStructureEntryInfo(MetaName.planeGroundDisturbPtFxNameFoliage, PsoDataType.String, 672, 7, 0), + new PsoStructureEntryInfo(MetaName.planeGroundDisturbPtFxRange, PsoDataType.Float, 676, 0, 0), + new PsoStructureEntryInfo(MetaName.planeGroundDisturbPtFxDist, PsoDataType.Float, 680, 0, 0), + new PsoStructureEntryInfo(MetaName.planeGroundDisturbPtFxSpeedEvoMin, PsoDataType.Float, 684, 0, 0), + new PsoStructureEntryInfo(MetaName.planeGroundDisturbPtFxSpeedEvoMax, PsoDataType.Float, 688, 0, 0), + new PsoStructureEntryInfo(MetaName.aircraftSectionDamageSmokePtFxEnabled, PsoDataType.Bool, 692, 0, 0), + new PsoStructureEntryInfo(MetaName.aircraftSectionDamageSmokePtFxName, PsoDataType.String, 696, 7, 0), + new PsoStructureEntryInfo(MetaName.aircraftSectionDamageSmokePtFxRange, PsoDataType.Float, 700, 0, 0), + new PsoStructureEntryInfo(MetaName.aircraftSectionDamageSmokePtFxSpeedEvoMin, PsoDataType.Float, 704, 0, 0), + new PsoStructureEntryInfo(MetaName.aircraftSectionDamageSmokePtFxSpeedEvoMax, PsoDataType.Float, 708, 0, 0), + new PsoStructureEntryInfo(MetaName.aircraftDownwashPtFxEnabled, PsoDataType.Bool, 712, 0, 0), + new PsoStructureEntryInfo(MetaName.aircraftDownwashPtFxNameDefault, PsoDataType.String, 716, 7, 0), + new PsoStructureEntryInfo(MetaName.aircraftDownwashPtFxNameSand, PsoDataType.String, 720, 7, 0), + new PsoStructureEntryInfo(MetaName.aircraftDownwashPtFxNameDirt, PsoDataType.String, 724, 7, 0), + new PsoStructureEntryInfo(MetaName.aircraftDownwashPtFxNameWater, PsoDataType.String, 728, 7, 0), + new PsoStructureEntryInfo(MetaName.aircraftDownwashPtFxNameFoliage, PsoDataType.String, 732, 7, 0), + new PsoStructureEntryInfo(MetaName.aircraftDownwashPtFxRange, PsoDataType.Float, 736, 0, 0), + new PsoStructureEntryInfo(MetaName.aircraftDownwashPtFxDist, PsoDataType.Float, 740, 0, 0), + new PsoStructureEntryInfo(MetaName.aircraftDownwashPtFxSpeedEvoMin, PsoDataType.Float, 744, 0, 0), + new PsoStructureEntryInfo(MetaName.aircraftDownwashPtFxSpeedEvoMax, PsoDataType.Float, 748, 0, 0), + new PsoStructureEntryInfo(MetaName.splashInPtFxEnabled, PsoDataType.Bool, 752, 0, 0), + new PsoStructureEntryInfo(MetaName.splashInPtFxRange, PsoDataType.Float, 756, 0, 0), + new PsoStructureEntryInfo(MetaName.splashInPtFxName, PsoDataType.String, 760, 7, 0), + new PsoStructureEntryInfo(MetaName.splashInPtFxSizeEvoMax, PsoDataType.Float, 764, 0, 0), + new PsoStructureEntryInfo(MetaName.splashInPtFxSpeedDownwardThresh, PsoDataType.Float, 768, 0, 0), + new PsoStructureEntryInfo(MetaName.splashInPtFxSpeedLateralEvoMin, PsoDataType.Float, 772, 0, 0), + new PsoStructureEntryInfo(MetaName.splashInPtFxSpeedLateralEvoMax, PsoDataType.Float, 776, 0, 0), + new PsoStructureEntryInfo(MetaName.splashInPtFxSpeedDownwardEvoMin, PsoDataType.Float, 780, 0, 0), + new PsoStructureEntryInfo(MetaName.splashInPtFxSpeedDownwardEvoMax, PsoDataType.Float, 784, 0, 0), + new PsoStructureEntryInfo(MetaName.splashOutPtFxEnabled, PsoDataType.Bool, 788, 0, 0), + new PsoStructureEntryInfo(MetaName.splashOutPtFxRange, PsoDataType.Float, 792, 0, 0), + new PsoStructureEntryInfo(MetaName.splashOutPtFxName, PsoDataType.String, 796, 7, 0), + new PsoStructureEntryInfo(MetaName.splashOutPtFxSizeEvoMax, PsoDataType.Float, 800, 0, 0), + new PsoStructureEntryInfo(MetaName.splashOutPtFxSpeedLateralEvoMin, PsoDataType.Float, 804, 0, 0), + new PsoStructureEntryInfo(MetaName.splashOutPtFxSpeedLateralEvoMax, PsoDataType.Float, 808, 0, 0), + new PsoStructureEntryInfo(MetaName.splashOutPtFxSpeedUpwardEvoMin, PsoDataType.Float, 812, 0, 0), + new PsoStructureEntryInfo(MetaName.splashOutPtFxSpeedUpwardEvoMax, PsoDataType.Float, 816, 0, 0), + new PsoStructureEntryInfo(MetaName.splashWadePtFxEnabled, PsoDataType.Bool, 820, 0, 0), + new PsoStructureEntryInfo(MetaName.splashWadePtFxRange, PsoDataType.Float, 824, 0, 0), + new PsoStructureEntryInfo(MetaName.splashWadePtFxName, PsoDataType.String, 828, 7, 0), + new PsoStructureEntryInfo(MetaName.splashWadePtFxSizeEvoMax, PsoDataType.Float, 832, 0, 0), + new PsoStructureEntryInfo(MetaName.splashWadePtFxSpeedVehicleEvoMin, PsoDataType.Float, 836, 0, 0), + new PsoStructureEntryInfo(MetaName.splashWadePtFxSpeedVehicleEvoMax, PsoDataType.Float, 840, 0, 0), + new PsoStructureEntryInfo(MetaName.splashWadePtFxSpeedRiverEvoMin, PsoDataType.Float, 844, 0, 0), + new PsoStructureEntryInfo(MetaName.splashWadePtFxSpeedRiverEvoMax, PsoDataType.Float, 848, 0, 0), + new PsoStructureEntryInfo(MetaName.splashTrailPtFxEnabled, PsoDataType.Bool, 852, 0, 0), + new PsoStructureEntryInfo(MetaName.splashTrailPtFxRange, PsoDataType.Float, 856, 0, 0), + new PsoStructureEntryInfo(MetaName.splashTrailPtFxName, PsoDataType.String, 860, 7, 0), + new PsoStructureEntryInfo(MetaName.splashTrailPtFxSizeEvoMax, PsoDataType.Float, 864, 0, 0), + new PsoStructureEntryInfo(MetaName.splashTrailPtFxSpeedEvoMin, PsoDataType.Float, 868, 0, 0), + new PsoStructureEntryInfo(MetaName.splashTrailPtFxSpeedEvoMax, PsoDataType.Float, 872, 0, 0) + ); + case MetaName.CVfxWeaponInfoMgr: + return new PsoStructureInfo(MetaName.CVfxWeaponInfoMgr, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo((MetaName)3938144758, PsoDataType.Map, 8, 1, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo((MetaName)735539988, PsoDataType.Map, 32, 1, (MetaName)196612) + ); + case (MetaName)2452529929: + return new PsoStructureInfo((MetaName)2452529929, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)294307720, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.probability, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.scale, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)690075466, PsoDataType.UInt, 20, 1, 0) + ); + case (MetaName)1794703310: + return new PsoStructureInfo((MetaName)1794703310, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)1914084434, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.probability, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3089927233, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2658317066, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.CProceduralInfo: + return new PsoStructureInfo(MetaName.CProceduralInfo, 0, 0, 4120, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2143317860), + new PsoStructureEntryInfo(MetaName.procObjInfos, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1982133670), + new PsoStructureEntryInfo(MetaName.plantInfos, PsoDataType.Array, 24, 0, (MetaName)2), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3343541253), + new PsoStructureEntryInfo(MetaName.procTagTable, PsoDataType.Array, 40, 4, (MetaName)16711684) + ); + case (MetaName)3343541253: + return new PsoStructureInfo((MetaName)3343541253, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)1599521754), + new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.Flags, 8, 2, (MetaName)524288) + ); + case (MetaName)2143317860: + return new PsoStructureInfo((MetaName)2143317860, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.Tag, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.PlantTag, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo(MetaName.ModelName, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.Spacing, PsoDataType.HFloat, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MinXRotation, PsoDataType.HFloat, 22, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxXRotation, PsoDataType.HFloat, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MinYRotation, PsoDataType.HFloat, 26, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxYRotation, PsoDataType.HFloat, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MinZRotation, PsoDataType.HFloat, 30, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxZRotation, PsoDataType.HFloat, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MinScale, PsoDataType.HFloat, 34, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxScale, PsoDataType.HFloat, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MinScaleZ, PsoDataType.HFloat, 38, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxScaleZ, PsoDataType.HFloat, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.MinZOffset, PsoDataType.HFloat, 42, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxZOffset, PsoDataType.HFloat, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistance, PsoDataType.HFloat, 46, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistance, PsoDataType.HFloat, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTintPalette, PsoDataType.UByte, 50, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTintPalette, PsoDataType.UByte, 51, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)956281369), + new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.Flags, 52, 2, (MetaName)524308) + ); + case (MetaName)1982133670: + return new PsoStructureInfo((MetaName)1982133670, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.Tag, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.Color, PsoDataType.UInt, 12, 1, 0), + new PsoStructureEntryInfo(MetaName.GroundColor, PsoDataType.UInt, 16, 1, 0), + new PsoStructureEntryInfo(MetaName.ScaleXY, PsoDataType.HFloat, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.ScaleZ, PsoDataType.HFloat, 22, 0, 0), + new PsoStructureEntryInfo(MetaName.ScaleVariationXY, PsoDataType.HFloat, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.ScaleVariationZ, PsoDataType.HFloat, 26, 0, 0), + new PsoStructureEntryInfo(MetaName.ScaleRangeXYZ, PsoDataType.HFloat, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ScaleRangeZ, PsoDataType.HFloat, 30, 0, 0), + new PsoStructureEntryInfo(MetaName.MicroMovementsScaleH, PsoDataType.HFloat, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MicroMovementsScaleV, PsoDataType.HFloat, 34, 0, 0), + new PsoStructureEntryInfo(MetaName.MicroMovementsFreqH, PsoDataType.HFloat, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MicroMovementsFreqV, PsoDataType.HFloat, 38, 0, 0), + new PsoStructureEntryInfo(MetaName.WindBendScale, PsoDataType.HFloat, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.WindBendVariation, PsoDataType.HFloat, 42, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionRadius, PsoDataType.HFloat, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.Density, PsoDataType.HFloat, 46, 0, 0), + new PsoStructureEntryInfo(MetaName.DensityRange, PsoDataType.HFloat, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.ModelId, PsoDataType.UByte, 50, 0, 0), + new PsoStructureEntryInfo(MetaName.TextureId, PsoDataType.UByte, 51, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)1247137385), + new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.Flags, 52, 1, (MetaName)1048596), + new PsoStructureEntryInfo(MetaName.Intensity, PsoDataType.UByte, 54, 0, 0), + new PsoStructureEntryInfo(MetaName.IntensityVar, PsoDataType.UByte, 55, 0, 0) + ); + case MetaName.camMetadataStore: + return new PsoStructureInfo(MetaName.camMetadataStore, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo((MetaName)4098657407, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo((MetaName)1163993726, PsoDataType.Array, 24, 0, (MetaName)2) + ); + case MetaName.camDepthOfFieldSettingsMetadata: + return new PsoStructureInfo(MetaName.camDepthOfFieldSettingsMetadata, 0, 0, 96, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3872687437, PsoDataType.Float2, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)809440628, PsoDataType.Float2, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)490969727, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3622576788, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1424443550, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)3810611648, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)1068831663, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1181720025, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)2941105367, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)1760535059, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)244310625, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)2726944087, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)366578954, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)1584584282, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)4112080817, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)4019248724, PsoDataType.Bool, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)3170603601, PsoDataType.Bool, 85, 0, 0), + new PsoStructureEntryInfo((MetaName)367424479, PsoDataType.Bool, 86, 0, 0), + new PsoStructureEntryInfo((MetaName)3748087913, PsoDataType.Bool, 87, 0, 0), + new PsoStructureEntryInfo((MetaName)981218312, PsoDataType.Bool, 88, 0, 0) + ); + case MetaName.camCinematicAnimatedCameraMetadata: + return new PsoStructureInfo(MetaName.camCinematicAnimatedCameraMetadata, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0) + ); + case MetaName.camCinematicCameraManCameraMetadata: + return new PsoStructureInfo(MetaName.camCinematicCameraManCameraMetadata, 0, 0, 328, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2962759393, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3005507009, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)114561573, PsoDataType.Bool, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1535052963, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionRadius, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2642729834, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3023548272, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)846082931, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)3539146194, PsoDataType.UInt, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)3668836939, PsoDataType.UInt, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)1699827350, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)1265046558, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)1161122588, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)3190591149, PsoDataType.UInt, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)2884448793, PsoDataType.UInt, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)69722150, PsoDataType.Bool, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)2723670760, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)1702320721, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)199666231, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)556138114, PsoDataType.String, 108, 7, 0), + new PsoStructureEntryInfo((MetaName)2538678656, PsoDataType.String, 112, 7, 0), + new PsoStructureEntryInfo((MetaName)4200791860, PsoDataType.String, 116, 7, 0), + new PsoStructureEntryInfo((MetaName)3308026067, PsoDataType.String, 120, 7, 0), + new PsoStructureEntryInfo((MetaName)1279708504, PsoDataType.Structure, 128, 0, MetaName.camCinematicCameraOperatorShakeSettings), + new PsoStructureEntryInfo((MetaName)102161666, PsoDataType.Float, 256, 0, 0), + new PsoStructureEntryInfo((MetaName)753638141, PsoDataType.Float, 260, 0, 0), + new PsoStructureEntryInfo((MetaName)851393034, PsoDataType.Float, 264, 0, 0), + new PsoStructureEntryInfo((MetaName)1035890821, PsoDataType.Float, 268, 0, 0), + new PsoStructureEntryInfo((MetaName)3518053347, PsoDataType.Bool, 272, 0, 0), + new PsoStructureEntryInfo((MetaName)568093394, PsoDataType.Float, 276, 0, 0), + new PsoStructureEntryInfo((MetaName)781245272, PsoDataType.Float, 280, 0, 0), + new PsoStructureEntryInfo((MetaName)2596681112, PsoDataType.Bool, 284, 0, 0), + new PsoStructureEntryInfo((MetaName)1468609247, PsoDataType.Float, 288, 0, 0), + new PsoStructureEntryInfo((MetaName)727781899, PsoDataType.Float, 292, 0, 0), + new PsoStructureEntryInfo((MetaName)3140771983, PsoDataType.Float, 296, 0, 0), + new PsoStructureEntryInfo((MetaName)3196312636, PsoDataType.Bool, 300, 0, 0), + new PsoStructureEntryInfo((MetaName)3061937367, PsoDataType.Float, 304, 0, 0), + new PsoStructureEntryInfo((MetaName)1900366054, PsoDataType.Float, 308, 0, 0), + new PsoStructureEntryInfo((MetaName)4085704227, PsoDataType.Float, 312, 0, 0), + new PsoStructureEntryInfo((MetaName)3250401979, PsoDataType.Float, 316, 0, 0), + new PsoStructureEntryInfo((MetaName)618136263, PsoDataType.Float, 320, 0, 0), + new PsoStructureEntryInfo((MetaName)2469116692, PsoDataType.Float, 324, 0, 0) + ); + case MetaName.camCinematicCameraOperatorShakeSettings: + return new PsoStructureInfo(MetaName.camCinematicCameraOperatorShakeSettings, 0, 0, 128, + new PsoStructureEntryInfo((MetaName)71599683, PsoDataType.Structure, 8, 0, MetaName.camCinematicCameraOperatorShakeUncertaintySettings), + new PsoStructureEntryInfo((MetaName)668098498, PsoDataType.Structure, 88, 0, MetaName.camCinematicCameraOperatorShakeTurbulenceSettings) + ); + case MetaName.camCinematicCameraOperatorShakeUncertaintySettings: + return new PsoStructureInfo(MetaName.camCinematicCameraOperatorShakeUncertaintySettings, 0, 0, 80, + new PsoStructureEntryInfo((MetaName)784117005, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)4083769430, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo((MetaName)4138212913, PsoDataType.Float2, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2793659114, PsoDataType.Float2, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2611684493, PsoDataType.Float2, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3850080675, PsoDataType.Float2, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2902509544, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)3004590170, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)4050830448, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2280675285, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)933422390, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)3253772488, PsoDataType.Float, 72, 0, 0) + ); + case MetaName.camCinematicCameraOperatorShakeTurbulenceSettings: + return new PsoStructureInfo(MetaName.camCinematicCameraOperatorShakeTurbulenceSettings, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1741343660, PsoDataType.Float2, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.DistanceRange, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2902509544, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3004590170, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 36, 0, 0) + ); + case MetaName.camCinematicHeliChaseCameraMetadata: + return new PsoStructureInfo(MetaName.camCinematicHeliChaseCameraMetadata, 0, 0, 392, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3115459373, PsoDataType.UInt, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3800346187, PsoDataType.UInt, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)2004927681, PsoDataType.UInt, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)408757490, PsoDataType.UInt, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)1805018741, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1929531797, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)1117152888, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3610993313, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2885533396, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)1162205528, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)2128811877, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)3504182592, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)2040715445, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)1346377414, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)495502725, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)3725520797, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)832331471, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)953228499, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)199666231, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)1288561522, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)4220570274, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)613448395, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)106130617, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)3190591149, PsoDataType.UInt, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)2884448793, PsoDataType.UInt, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)1265046558, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)1699827350, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)1161122588, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)781245272, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)568093394, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo((MetaName)2289962831, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)3658577234, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)3483998043, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)1325746994, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo((MetaName)2217923367, PsoDataType.Bool, 168, 0, 0), + new PsoStructureEntryInfo((MetaName)114561573, PsoDataType.Bool, 169, 0, 0), + new PsoStructureEntryInfo((MetaName)2187445607, PsoDataType.Bool, 170, 0, 0), + new PsoStructureEntryInfo((MetaName)1144995443, PsoDataType.Bool, 171, 0, 0), + new PsoStructureEntryInfo((MetaName)4185802977, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo((MetaName)315713489, PsoDataType.Bool, 176, 0, 0), + new PsoStructureEntryInfo(MetaName.PitchLimits, PsoDataType.Float2, 180, 0, 0), + new PsoStructureEntryInfo((MetaName)556138114, PsoDataType.String, 188, 7, 0), + new PsoStructureEntryInfo((MetaName)2538678656, PsoDataType.String, 192, 7, 0), + new PsoStructureEntryInfo((MetaName)4200791860, PsoDataType.String, 196, 7, 0), + new PsoStructureEntryInfo((MetaName)3308026067, PsoDataType.String, 200, 7, 0), + new PsoStructureEntryInfo((MetaName)1279708504, PsoDataType.Structure, 208, 0, MetaName.camCinematicCameraOperatorShakeSettings), + new PsoStructureEntryInfo((MetaName)983508410, PsoDataType.Float, 336, 0, 0), + new PsoStructureEntryInfo((MetaName)3451936358, PsoDataType.Float, 340, 0, 0), + new PsoStructureEntryInfo((MetaName)2352608445, PsoDataType.Float, 344, 0, 0), + new PsoStructureEntryInfo((MetaName)618136263, PsoDataType.Float, 348, 0, 0), + new PsoStructureEntryInfo((MetaName)2469116692, PsoDataType.Float, 352, 0, 0), + new PsoStructureEntryInfo((MetaName)4085704227, PsoDataType.Float, 356, 0, 0), + new PsoStructureEntryInfo((MetaName)3250401979, PsoDataType.Float, 360, 0, 0), + new PsoStructureEntryInfo((MetaName)3574069037, PsoDataType.Float, 364, 0, 0), + new PsoStructureEntryInfo((MetaName)761184934, PsoDataType.Float, 368, 0, 0), + new PsoStructureEntryInfo((MetaName)1444706843, PsoDataType.Float, 372, 0, 0), + new PsoStructureEntryInfo((MetaName)218641622, PsoDataType.Float, 376, 0, 0), + new PsoStructureEntryInfo((MetaName)3061937367, PsoDataType.Float, 380, 0, 0), + new PsoStructureEntryInfo((MetaName)1900366054, PsoDataType.Float, 384, 0, 0), + new PsoStructureEntryInfo((MetaName)1035890821, PsoDataType.Float, 388, 0, 0) + ); + case MetaName.camCinematicVehicleOrbitCameraMetadata: + return new PsoStructureInfo(MetaName.camCinematicVehicleOrbitCameraMetadata, 0, 0, 136, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.PitchLimits, PsoDataType.Float2, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)4288186671, PsoDataType.Float2, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)315073442, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)737052146, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)559738595, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionRadius, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)3983210518, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)2763528752, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)2642729834, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)2153696126, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)765619120, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)3644129030, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)2101619543, PsoDataType.UInt, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)3991802629, PsoDataType.UInt, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicVehicleOrbitCameraInitalSettings), + new PsoStructureEntryInfo((MetaName)1539141183, PsoDataType.Array, 104, 0, (MetaName)20), + new PsoStructureEntryInfo((MetaName)102161666, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)753638141, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)851393034, PsoDataType.Float, 128, 0, 0) + ); + case MetaName.camCinematicVehicleOrbitCameraInitalSettings: + return new PsoStructureInfo(MetaName.camCinematicVehicleOrbitCameraInitalSettings, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.Heading, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2891994847, PsoDataType.Float, 12, 0, 0) + ); + case MetaName.camCinematicVehicleLowOrbitCameraMetadata: + return new PsoStructureInfo(MetaName.camCinematicVehicleLowOrbitCameraMetadata, 0, 0, 256, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.PitchLimits, PsoDataType.Float2, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)4288186671, PsoDataType.Float2, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)315073442, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)737052146, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2037218535, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)4219845621, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)1088437692, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionRadius, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)3983210518, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)2763528752, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)2642729834, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)565251953, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)2153696126, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)765619120, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)2101619543, PsoDataType.UInt, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicVehicleOrbitCameraInitalSettings), + new PsoStructureEntryInfo((MetaName)1539141183, PsoDataType.Array, 112, 0, MetaName.UINT), + new PsoStructureEntryInfo((MetaName)102161666, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)753638141, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)851393034, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)1958709726, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)4261179401, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)1361361101, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo((MetaName)2815616753, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)2843406703, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)4109249654, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)565527739, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo((MetaName)3889226535, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo((MetaName)3920334627, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo((MetaName)3189979615, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo((MetaName)1031927866, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo((MetaName)2223609026, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo((MetaName)752307799, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo((MetaName)1612512934, PsoDataType.Structure, 192, 0, MetaName.camSpeedRelativeShakeSettingsMetadata), + new PsoStructureEntryInfo((MetaName)3319637384, PsoDataType.Structure, 224, 0, MetaName.camSpeedRelativeShakeSettingsMetadata) + ); + case MetaName.camSpeedRelativeShakeSettingsMetadata: + return new PsoStructureInfo(MetaName.camSpeedRelativeShakeSettingsMetadata, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2742393958, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2306378250, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3092190689, PsoDataType.Float, 24, 0, 0) + ); + case MetaName.camCinematicIdleCameraMetadata: + return new PsoStructureInfo(MetaName.camCinematicIdleCameraMetadata, 0, 0, 168, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1305640980, PsoDataType.UInt, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)653716069, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)887335192, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)742934843, PsoDataType.Structure, 48, 0, MetaName.camCinematicIdleShots), + new PsoStructureEntryInfo((MetaName)2976595087, PsoDataType.Structure, 72, 0, MetaName.camCinematicIdleShots), + new PsoStructureEntryInfo((MetaName)2026925651, PsoDataType.Structure, 96, 0, MetaName.camCinematicIdleShots), + new PsoStructureEntryInfo((MetaName)2443187932, PsoDataType.Float2, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionRadius, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)3983210518, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)2763528752, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)762567518, PsoDataType.Float2, 148, 0, 0), + new PsoStructureEntryInfo((MetaName)348135302, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)2101619543, PsoDataType.Float, 160, 0, 0) + ); + case MetaName.camCinematicIdleShots: + return new PsoStructureInfo(MetaName.camCinematicIdleShots, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.PitchLimits, PsoDataType.Float2, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)335839296, PsoDataType.Float2, 16, 0, 0) + ); + case MetaName.camCinematicFirstPersonIdleCameraMetadata: + return new PsoStructureInfo(MetaName.camCinematicFirstPersonIdleCameraMetadata, 0, 0, 200, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2014698042, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2146055434, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)498489070, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)642179285, PsoDataType.UInt, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)3833690476, PsoDataType.UInt, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)91642876, PsoDataType.UInt, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3423831703, PsoDataType.UInt, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)1365351828, PsoDataType.UInt, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)1799833343, PsoDataType.UInt, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)2451425179, PsoDataType.UInt, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)2398830068, PsoDataType.UInt, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)4013543182, PsoDataType.UInt, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)4060544092, PsoDataType.UInt, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)1863497759, PsoDataType.UInt, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)2865768466, PsoDataType.UInt, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)2935498108, PsoDataType.UInt, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)3267214601, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)25343385, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)2453008156, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)333391552, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)3472598366, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)3523922750, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)27172088, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)2656885705, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)3821389091, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)3137663245, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)2149837453, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)1352549573, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)559353307, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)340096669, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo((MetaName)3997020725, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)1330235813, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)3625015755, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)815735892, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo((MetaName)2653018133, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo((MetaName)3754548217, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo((MetaName)216085311, PsoDataType.UInt, 176, 0, 0), + new PsoStructureEntryInfo((MetaName)811132412, PsoDataType.UInt, 180, 0, 0), + new PsoStructureEntryInfo((MetaName)1561520371, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo((MetaName)2384466151, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo((MetaName)1800176594, PsoDataType.Float, 192, 0, 0) + ); + case MetaName.camCinematicStuntCameraMetadata: + return new PsoStructureInfo(MetaName.camCinematicStuntCameraMetadata, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)4288186671, PsoDataType.Float2, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3686787728, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2332427685, PsoDataType.Float2, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)3195921543, PsoDataType.Float2, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)2033229500, PsoDataType.Float2, 60, 0, 0) + ); + case MetaName.camCinematicGroupCameraMetadata: + return new PsoStructureInfo(MetaName.camCinematicGroupCameraMetadata, 0, 0, 96, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)4288186671, PsoDataType.Float2, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3686787728, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)4150576777, PsoDataType.Float2, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2642729834, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionRadius, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)2101619543, PsoDataType.UInt, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)3434528744, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)2373655501, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)400251000, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)1035890821, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)1856660360, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)102161666, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)753638141, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)851393034, PsoDataType.Float, 92, 0, 0) + ); + case MetaName.camCinematicTrainTrackingCameraMetadata: + return new PsoStructureInfo(MetaName.camCinematicTrainTrackingCameraMetadata, 0, 0, 400, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2962759393, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3005507009, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)114561573, PsoDataType.Bool, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1535052963, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionRadius, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2642729834, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3023548272, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)846082931, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)3539146194, PsoDataType.UInt, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)3668836939, PsoDataType.UInt, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)1699827350, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)1265046558, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)1161122588, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)3190591149, PsoDataType.UInt, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)2884448793, PsoDataType.UInt, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)69722150, PsoDataType.Bool, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)2723670760, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)1702320721, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)199666231, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)556138114, PsoDataType.String, 108, 7, 0), + new PsoStructureEntryInfo((MetaName)2538678656, PsoDataType.String, 112, 7, 0), + new PsoStructureEntryInfo((MetaName)4200791860, PsoDataType.String, 116, 7, 0), + new PsoStructureEntryInfo((MetaName)3308026067, PsoDataType.String, 120, 7, 0), + new PsoStructureEntryInfo((MetaName)1279708504, PsoDataType.Structure, 128, 0, MetaName.camCinematicCameraOperatorShakeSettings), + new PsoStructureEntryInfo((MetaName)102161666, PsoDataType.Float, 256, 0, 0), + new PsoStructureEntryInfo((MetaName)753638141, PsoDataType.Float, 260, 0, 0), + new PsoStructureEntryInfo((MetaName)851393034, PsoDataType.Float, 264, 0, 0), + new PsoStructureEntryInfo((MetaName)1035890821, PsoDataType.Float, 268, 0, 0), + new PsoStructureEntryInfo((MetaName)3518053347, PsoDataType.Bool, 272, 0, 0), + new PsoStructureEntryInfo((MetaName)568093394, PsoDataType.Float, 276, 0, 0), + new PsoStructureEntryInfo((MetaName)781245272, PsoDataType.Float, 280, 0, 0), + new PsoStructureEntryInfo((MetaName)2596681112, PsoDataType.Bool, 284, 0, 0), + new PsoStructureEntryInfo((MetaName)1468609247, PsoDataType.Float, 288, 0, 0), + new PsoStructureEntryInfo((MetaName)727781899, PsoDataType.Float, 292, 0, 0), + new PsoStructureEntryInfo((MetaName)3140771983, PsoDataType.Float, 296, 0, 0), + new PsoStructureEntryInfo((MetaName)3196312636, PsoDataType.Bool, 300, 0, 0), + new PsoStructureEntryInfo((MetaName)3061937367, PsoDataType.Float, 304, 0, 0), + new PsoStructureEntryInfo((MetaName)1900366054, PsoDataType.Float, 308, 0, 0), + new PsoStructureEntryInfo((MetaName)4085704227, PsoDataType.Float, 312, 0, 0), + new PsoStructureEntryInfo((MetaName)3250401979, PsoDataType.Float, 316, 0, 0), + new PsoStructureEntryInfo((MetaName)618136263, PsoDataType.Float, 320, 0, 0), + new PsoStructureEntryInfo((MetaName)2469116692, PsoDataType.Float, 324, 0, 0), + new PsoStructureEntryInfo((MetaName)886237220, PsoDataType.Float3, 336, 0, 0), + new PsoStructureEntryInfo((MetaName)649866655, PsoDataType.Float2, 352, 0, 0), + new PsoStructureEntryInfo((MetaName)3049827950, PsoDataType.Float2, 360, 0, 0), + new PsoStructureEntryInfo((MetaName)1066491626, PsoDataType.Float2, 368, 0, 0), + new PsoStructureEntryInfo((MetaName)3832386323, PsoDataType.Float2, 376, 0, 0), + new PsoStructureEntryInfo((MetaName)412149987, PsoDataType.Float2, 384, 0, 0) + ); + case MetaName.camCinematicMountedCameraMetadata: + return new PsoStructureInfo(MetaName.camCinematicMountedCameraMetadata, 0, 0, 1344, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2884954151, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo((MetaName)376729145, PsoDataType.String, 36, 7, 0), + new PsoStructureEntryInfo((MetaName)3464513788, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo((MetaName)4086545075, PsoDataType.String, 44, 7, 0), + new PsoStructureEntryInfo((MetaName)2513422573, PsoDataType.String, 48, 7, 0), + new PsoStructureEntryInfo((MetaName)4071354708, PsoDataType.String, 52, 7, 0), + new PsoStructureEntryInfo((MetaName)972815273, PsoDataType.String, 56, 7, 0), + new PsoStructureEntryInfo((MetaName)844800904, PsoDataType.String, 60, 7, 0), + new PsoStructureEntryInfo((MetaName)648641770, PsoDataType.String, 64, 7, 0), + new PsoStructureEntryInfo((MetaName)722540604, PsoDataType.String, 68, 7, 0), + new PsoStructureEntryInfo((MetaName)3400674238, PsoDataType.String, 72, 7, 0), + new PsoStructureEntryInfo((MetaName)885223840, PsoDataType.String, 76, 7, 0), + new PsoStructureEntryInfo((MetaName)4021873979, PsoDataType.String, 80, 7, 0), + new PsoStructureEntryInfo((MetaName)1865815245, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)2755051531, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)1634093344, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)2323851759, PsoDataType.Float3, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)1792533284, PsoDataType.Float3, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)2842669433, PsoDataType.Float3, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)3162861957, PsoDataType.Float3, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)2981089011, PsoDataType.Float3, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)464677746, PsoDataType.Float3, 176, 0, 0), + new PsoStructureEntryInfo((MetaName)2301891370, PsoDataType.Float3, 192, 0, 0), + new PsoStructureEntryInfo((MetaName)1452169682, PsoDataType.Float3, 208, 0, 0), + new PsoStructureEntryInfo((MetaName)4196591490, PsoDataType.Float3, 224, 0, 0), + new PsoStructureEntryInfo((MetaName)1001532487, PsoDataType.Float3, 240, 0, 0), + new PsoStructureEntryInfo((MetaName)1862921276, PsoDataType.Float3, 256, 0, 0), + new PsoStructureEntryInfo((MetaName)1204776061, PsoDataType.Float2, 272, 0, 0), + new PsoStructureEntryInfo((MetaName)340115724, PsoDataType.Float2, 280, 0, 0), + new PsoStructureEntryInfo((MetaName)3248777081, PsoDataType.Float2, 288, 0, 0), + new PsoStructureEntryInfo((MetaName)74704022, PsoDataType.Float2, 296, 0, 0), + new PsoStructureEntryInfo((MetaName)4088070730, PsoDataType.Float, 304, 0, 0), + new PsoStructureEntryInfo((MetaName)2782354748, PsoDataType.Float, 308, 0, 0), + new PsoStructureEntryInfo((MetaName)1994565733, PsoDataType.Float, 312, 0, 0), + new PsoStructureEntryInfo((MetaName)383680708, PsoDataType.Float, 316, 0, 0), + new PsoStructureEntryInfo((MetaName)2931383793, PsoDataType.Bool, 320, 0, 0), + new PsoStructureEntryInfo((MetaName)1919709187, PsoDataType.Float, 324, 0, 0), + new PsoStructureEntryInfo((MetaName)945934562, PsoDataType.Float, 328, 0, 0), + new PsoStructureEntryInfo((MetaName)551950644, PsoDataType.Float, 332, 0, 0), + new PsoStructureEntryInfo((MetaName)1670344535, PsoDataType.Float, 336, 0, 0), + new PsoStructureEntryInfo((MetaName)742850166, PsoDataType.Float, 340, 0, 0), + new PsoStructureEntryInfo((MetaName)2686299665, PsoDataType.Float2, 344, 0, 0), + new PsoStructureEntryInfo((MetaName)1473955583, PsoDataType.Float, 352, 0, 0), + new PsoStructureEntryInfo((MetaName)704024974, PsoDataType.Bool, 356, 0, 0), + new PsoStructureEntryInfo((MetaName)2135497875, PsoDataType.Bool, 357, 0, 0), + new PsoStructureEntryInfo((MetaName)4187867131, PsoDataType.Bool, 358, 0, 0), + new PsoStructureEntryInfo((MetaName)2423170684, PsoDataType.Structure, 360, 0, MetaName.camCinematicMountedCameraMetadataRelativePitchScalingToThrottle), + new PsoStructureEntryInfo((MetaName)3319637384, PsoDataType.Structure, 376, 0, MetaName.camSpeedRelativeShakeSettingsMetadata), + new PsoStructureEntryInfo((MetaName)1672349165, PsoDataType.Structure, 408, 0, MetaName.camSpeedRelativeShakeSettingsMetadata), + new PsoStructureEntryInfo((MetaName)4146741065, PsoDataType.Structure, 440, 0, (MetaName)2211164655), + new PsoStructureEntryInfo((MetaName)1913942883, PsoDataType.Bool, 456, 0, 0), + new PsoStructureEntryInfo((MetaName)3459873736, PsoDataType.Bool, 457, 0, 0), + new PsoStructureEntryInfo((MetaName)880876795, PsoDataType.Bool, 458, 0, 0), + new PsoStructureEntryInfo((MetaName)153965986, PsoDataType.Structure, 464, 0, MetaName.camCinematicMountedCameraMetadataLookAroundSettings), + new PsoStructureEntryInfo((MetaName)1625111759, PsoDataType.Structure, 504, 0, MetaName.camCinematicMountedCameraMetadataLookAroundSettings), + new PsoStructureEntryInfo((MetaName)2701071860, PsoDataType.Structure, 544, 0, MetaName.camCinematicMountedCameraMetadataLookAroundSettings), + new PsoStructureEntryInfo((MetaName)1020746469, PsoDataType.Structure, 584, 0, MetaName.camCinematicMountedCameraMetadataFirstPersonRoll), + new PsoStructureEntryInfo((MetaName)3266557322, PsoDataType.Structure, 608, 0, MetaName.camCinematicMountedCameraMetadataFirstPersonPitchOffset), + new PsoStructureEntryInfo((MetaName)4210630063, PsoDataType.Bool, 656, 0, 0), + new PsoStructureEntryInfo((MetaName)2918672176, PsoDataType.Float, 660, 0, 0), + new PsoStructureEntryInfo((MetaName)1558815907, PsoDataType.Float, 664, 0, 0), + new PsoStructureEntryInfo((MetaName)17770171, PsoDataType.Float, 668, 0, 0), + new PsoStructureEntryInfo((MetaName)2454715147, PsoDataType.Float, 672, 0, 0), + new PsoStructureEntryInfo((MetaName)789371927, PsoDataType.Bool, 676, 0, 0), + new PsoStructureEntryInfo((MetaName)2659354456, PsoDataType.Bool, 677, 0, 0), + new PsoStructureEntryInfo((MetaName)2639714447, PsoDataType.Bool, 678, 0, 0), + new PsoStructureEntryInfo((MetaName)339929903, PsoDataType.Bool, 679, 0, 0), + new PsoStructureEntryInfo((MetaName)523999628, PsoDataType.Bool, 680, 0, 0), + new PsoStructureEntryInfo((MetaName)2429106995, PsoDataType.Bool, 681, 0, 0), + new PsoStructureEntryInfo((MetaName)3725196996, PsoDataType.Bool, 682, 0, 0), + new PsoStructureEntryInfo((MetaName)4227962431, PsoDataType.Bool, 683, 0, 0), + new PsoStructureEntryInfo((MetaName)3424726202, PsoDataType.Bool, 684, 0, 0), + new PsoStructureEntryInfo((MetaName)883646732, PsoDataType.Bool, 685, 0, 0), + new PsoStructureEntryInfo((MetaName)1344883999, PsoDataType.Bool, 686, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)2782414211), + new PsoStructureEntryInfo((MetaName)3524553148, PsoDataType.Flags, 688, 0, (MetaName)2097231), + new PsoStructureEntryInfo((MetaName)1760348159, PsoDataType.Enum, 692, 0, (MetaName)3404480226), + new PsoStructureEntryInfo((MetaName)589368866, PsoDataType.Enum, 696, 0, (MetaName)2136742399), + new PsoStructureEntryInfo((MetaName)54415504, PsoDataType.Float3, 704, 0, 0), + new PsoStructureEntryInfo((MetaName)2548218645, PsoDataType.Float3, 720, 0, 0), + new PsoStructureEntryInfo((MetaName)956615974, PsoDataType.Bool, 736, 0, 0), + new PsoStructureEntryInfo((MetaName)389542769, PsoDataType.SInt, 740, 0, 0), + new PsoStructureEntryInfo((MetaName)3781066831, PsoDataType.Structure, 744, 0, MetaName.camCinematicMountedCameraMetadataOrientationSpring), + new PsoStructureEntryInfo((MetaName)2204528705, PsoDataType.Structure, 808, 0, MetaName.camCinematicMountedCameraMetadataLeadingLookSettings), + new PsoStructureEntryInfo((MetaName)509392339, PsoDataType.Float, 856, 0, 0), + new PsoStructureEntryInfo((MetaName)4261179401, PsoDataType.Float, 860, 0, 0), + new PsoStructureEntryInfo((MetaName)3932844561, PsoDataType.Float, 864, 0, 0), + new PsoStructureEntryInfo((MetaName)1690462370, PsoDataType.Float, 868, 0, 0), + new PsoStructureEntryInfo((MetaName)503778969, PsoDataType.Float2, 872, 0, 0), + new PsoStructureEntryInfo((MetaName)3132205970, PsoDataType.Bool, 880, 0, 0), + new PsoStructureEntryInfo((MetaName)2385481086, PsoDataType.Bool, 881, 0, 0), + new PsoStructureEntryInfo((MetaName)1348911901, PsoDataType.Bool, 882, 0, 0), + new PsoStructureEntryInfo((MetaName)1762086384, PsoDataType.Bool, 883, 0, 0), + new PsoStructureEntryInfo((MetaName)1538342627, PsoDataType.Bool, 884, 0, 0), + new PsoStructureEntryInfo((MetaName)1232220671, PsoDataType.Bool, 885, 0, 0), + new PsoStructureEntryInfo((MetaName)2799648005, PsoDataType.Bool, 886, 0, 0), + new PsoStructureEntryInfo((MetaName)4172426852, PsoDataType.Bool, 887, 0, 0), + new PsoStructureEntryInfo((MetaName)3436942647, PsoDataType.Float2, 888, 0, 0), + new PsoStructureEntryInfo((MetaName)1537030464, PsoDataType.Float2, 896, 0, 0), + new PsoStructureEntryInfo((MetaName)3275096368, PsoDataType.Float2, 904, 0, 0), + new PsoStructureEntryInfo((MetaName)923714524, PsoDataType.Float2, 912, 0, 0), + new PsoStructureEntryInfo((MetaName)3680927973, PsoDataType.Float2, 920, 0, 0), + new PsoStructureEntryInfo((MetaName)10648206, PsoDataType.Float2, 928, 0, 0), + new PsoStructureEntryInfo((MetaName)2362796003, PsoDataType.Float2, 936, 0, 0), + new PsoStructureEntryInfo((MetaName)2931436971, PsoDataType.Float2, 944, 0, 0), + new PsoStructureEntryInfo((MetaName)4288033461, PsoDataType.Float2, 952, 0, 0), + new PsoStructureEntryInfo((MetaName)1148577305, PsoDataType.Float2, 960, 0, 0), + new PsoStructureEntryInfo((MetaName)818123698, PsoDataType.Float2, 968, 0, 0), + new PsoStructureEntryInfo((MetaName)3197853445, PsoDataType.Float2, 976, 0, 0), + new PsoStructureEntryInfo((MetaName)1847367979, PsoDataType.Float2, 984, 0, 0), + new PsoStructureEntryInfo((MetaName)1083919137, PsoDataType.Float2, 992, 0, 0), + new PsoStructureEntryInfo((MetaName)4130730234, PsoDataType.Float2, 1000, 0, 0), + new PsoStructureEntryInfo((MetaName)113692134, PsoDataType.Float2, 1008, 0, 0), + new PsoStructureEntryInfo((MetaName)1115426652, PsoDataType.Float2, 1016, 0, 0), + new PsoStructureEntryInfo((MetaName)4012821505, PsoDataType.Bool, 1024, 0, 0), + new PsoStructureEntryInfo((MetaName)1301968002, PsoDataType.Bool, 1025, 0, 0), + new PsoStructureEntryInfo((MetaName)1692207327, PsoDataType.Float2, 1028, 0, 0), + new PsoStructureEntryInfo((MetaName)759759236, PsoDataType.Float2, 1036, 0, 0), + new PsoStructureEntryInfo((MetaName)474380051, PsoDataType.Bool, 1044, 0, 0), + new PsoStructureEntryInfo((MetaName)2101619543, PsoDataType.UInt, 1048, 0, 0), + new PsoStructureEntryInfo((MetaName)1072193524, PsoDataType.Bool, 1052, 0, 0), + new PsoStructureEntryInfo((MetaName)1735950673, PsoDataType.UInt, 1056, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionRadius, PsoDataType.Float, 1060, 0, 0), + new PsoStructureEntryInfo((MetaName)2763528752, PsoDataType.Float, 1064, 0, 0), + new PsoStructureEntryInfo((MetaName)179124010, PsoDataType.Bool, 1068, 0, 0), + new PsoStructureEntryInfo((MetaName)1737497458, PsoDataType.Float, 1072, 0, 0), + new PsoStructureEntryInfo((MetaName)9156722, PsoDataType.Bool, 1076, 0, 0), + new PsoStructureEntryInfo((MetaName)2106075408, PsoDataType.Bool, 1077, 0, 0), + new PsoStructureEntryInfo((MetaName)851288932, PsoDataType.UInt, 1080, 0, 0), + new PsoStructureEntryInfo((MetaName)2642729834, PsoDataType.Float, 1084, 0, 0), + new PsoStructureEntryInfo((MetaName)816145056, PsoDataType.Bool, 1088, 0, 0), + new PsoStructureEntryInfo((MetaName)439797539, PsoDataType.Bool, 1089, 0, 0), + new PsoStructureEntryInfo((MetaName)102161666, PsoDataType.Float, 1092, 0, 0), + new PsoStructureEntryInfo((MetaName)753638141, PsoDataType.Float, 1096, 0, 0), + new PsoStructureEntryInfo((MetaName)976391107, PsoDataType.Bool, 1100, 0, 0), + new PsoStructureEntryInfo((MetaName)851393034, PsoDataType.Float, 1104, 0, 0), + new PsoStructureEntryInfo((MetaName)200247978, PsoDataType.Bool, 1108, 0, 0), + new PsoStructureEntryInfo((MetaName)1613380386, PsoDataType.Float, 1112, 0, 0), + new PsoStructureEntryInfo((MetaName)2154681758, PsoDataType.Bool, 1116, 0, 0), + new PsoStructureEntryInfo((MetaName)556138114, PsoDataType.String, 1120, 7, 0), + new PsoStructureEntryInfo((MetaName)2538678656, PsoDataType.String, 1124, 7, 0), + new PsoStructureEntryInfo((MetaName)4200791860, PsoDataType.String, 1128, 7, 0), + new PsoStructureEntryInfo((MetaName)4107190241, PsoDataType.Bool, 1132, 0, 0), + new PsoStructureEntryInfo((MetaName)1051168964, PsoDataType.Bool, 1133, 0, 0), + new PsoStructureEntryInfo((MetaName)2985933428, PsoDataType.Float, 1136, 0, 0), + new PsoStructureEntryInfo((MetaName)1214392329, PsoDataType.Bool, 1140, 0, 0), + new PsoStructureEntryInfo((MetaName)2327168839, PsoDataType.Float, 1144, 0, 0), + new PsoStructureEntryInfo((MetaName)1246262822, PsoDataType.Float, 1148, 0, 0), + new PsoStructureEntryInfo((MetaName)4216676429, PsoDataType.Float, 1152, 0, 0), + new PsoStructureEntryInfo((MetaName)2719028802, PsoDataType.Structure, 1160, 0, MetaName.camCinematicMountedCameraMetadataMovementOnAccelerationSettings), + new PsoStructureEntryInfo((MetaName)36987752, PsoDataType.Float, 1208, 0, 0), + new PsoStructureEntryInfo((MetaName)3434721036, PsoDataType.Float3, 1216, 0, 0), + new PsoStructureEntryInfo((MetaName)3664516177, PsoDataType.Float, 1232, 0, 0), + new PsoStructureEntryInfo((MetaName)2807019381, PsoDataType.Float, 1236, 0, 0), + new PsoStructureEntryInfo((MetaName)1688077651, PsoDataType.Float, 1240, 0, 0), + new PsoStructureEntryInfo((MetaName)1499512130, PsoDataType.Float, 1244, 0, 0), + new PsoStructureEntryInfo((MetaName)805860083, PsoDataType.Float, 1248, 0, 0), + new PsoStructureEntryInfo((MetaName)1793179555, PsoDataType.Float, 1252, 0, 0), + new PsoStructureEntryInfo((MetaName)1784170819, PsoDataType.Float, 1256, 0, 0), + new PsoStructureEntryInfo((MetaName)2549816384, PsoDataType.Float, 1260, 0, 0), + new PsoStructureEntryInfo((MetaName)2482994089, PsoDataType.Float, 1264, 0, 0), + new PsoStructureEntryInfo((MetaName)3440187587, PsoDataType.Float, 1268, 0, 0), + new PsoStructureEntryInfo((MetaName)2744603068, PsoDataType.Float, 1272, 0, 0), + new PsoStructureEntryInfo((MetaName)1387580481, PsoDataType.Float, 1276, 0, 0), + new PsoStructureEntryInfo((MetaName)1233327091, PsoDataType.Float, 1280, 0, 0), + new PsoStructureEntryInfo((MetaName)3672709376, PsoDataType.Float3, 1296, 0, 0), + new PsoStructureEntryInfo((MetaName)2119789086, PsoDataType.Float3, 1312, 0, 0), + new PsoStructureEntryInfo((MetaName)2958804846, PsoDataType.Float, 1328, 0, 0), + new PsoStructureEntryInfo((MetaName)2107938182, PsoDataType.Float, 1332, 0, 0) + ); + case MetaName.camCinematicMountedCameraMetadataRelativePitchScalingToThrottle: + return new PsoStructureInfo(MetaName.camCinematicMountedCameraMetadataRelativePitchScalingToThrottle, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)1802668561, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)200823333, PsoDataType.Float, 12, 0, 0) + ); + case MetaName.camCinematicMountedCameraMetadataLookAroundSettings: + return new PsoStructureInfo(MetaName.camCinematicMountedCameraMetadataLookAroundSettings, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)2484601688, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)214599438, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2702689596, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2951014073, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2830026870, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3102721723, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)509094775, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3198719034, PsoDataType.Float, 36, 0, 0) + ); + case MetaName.camCinematicMountedCameraMetadataFirstPersonRoll: + return new PsoStructureInfo(MetaName.camCinematicMountedCameraMetadataFirstPersonRoll, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)455355504, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)694448363, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2004679597, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2782811596, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.camCinematicMountedCameraMetadataFirstPersonPitchOffset: + return new PsoStructureInfo(MetaName.camCinematicMountedCameraMetadataFirstPersonPitchOffset, 0, 0, 48, + new PsoStructureEntryInfo((MetaName)551752221, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)826600434, PsoDataType.Float3, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1775298710, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2173221242, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)75090556, PsoDataType.Float, 40, 0, 0) + ); + case MetaName.camCinematicMountedCameraMetadataOrientationSpring: + return new PsoStructureInfo(MetaName.camCinematicMountedCameraMetadataOrientationSpring, 0, 0, 64, + new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)1464813290, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)12756205, PsoDataType.Bool, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)967704366, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3344080959, PsoDataType.Float2, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)243857972, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)2399868550, PsoDataType.Float2, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2060478858, PsoDataType.Float2, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)131585240, PsoDataType.Float2, 56, 0, 0) + ); + case MetaName.camCinematicMountedCameraMetadataLeadingLookSettings: + return new PsoStructureInfo(MetaName.camCinematicMountedCameraMetadataLeadingLookSettings, 0, 0, 48, + new PsoStructureEntryInfo((MetaName)966483701, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1778767763, PsoDataType.Bool, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3524239627, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1788878871, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3960905630, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2872708052, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1733937006, PsoDataType.Float, 40, 0, 0) + ); + case MetaName.camCinematicMountedCameraMetadataMovementOnAccelerationSettings: + return new PsoStructureInfo(MetaName.camCinematicMountedCameraMetadataMovementOnAccelerationSettings, 0, 0, 48, + new PsoStructureEntryInfo((MetaName)3974113312, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2111282409, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)165735146, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3305119805, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1186910375, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1778767763, PsoDataType.Bool, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3357849814, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3493441660, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1259376027, PsoDataType.Float, 44, 0, 0) + ); + case MetaName.camCinematicPositionCameraMetadata: + return new PsoStructureInfo(MetaName.camCinematicPositionCameraMetadata, 0, 0, 104, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.PitchLimits, PsoDataType.Float2, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionRadius, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)3983210518, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2642729834, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2101619543, PsoDataType.UInt, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3715714007, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3434528744, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)1699827350, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)2271271663, PsoDataType.UInt, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)3609378888, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)1843629037, PsoDataType.UInt, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)102161666, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)753638141, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)851393034, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)556138114, PsoDataType.String, 92, 7, 0), + new PsoStructureEntryInfo((MetaName)2538678656, PsoDataType.String, 96, 7, 0), + new PsoStructureEntryInfo((MetaName)4200791860, PsoDataType.String, 100, 7, 0) + ); + case MetaName.camCinematicWaterCrashCameraMetadata: + return new PsoStructureInfo(MetaName.camCinematicWaterCrashCameraMetadata, 0, 0, 88, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.PitchLimits, PsoDataType.Float2, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionRadius, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)3106190053, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.RadiusScale, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)529669607, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3822313305, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)2014698042, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2965889555, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)2101619543, PsoDataType.UInt, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)1445694321, PsoDataType.UInt, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)2920068067, PsoDataType.UInt, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)2387941002, PsoDataType.UInt, 80, 0, 0) + ); + case MetaName.camCinematicTwoShotCameraMetadata: + return new PsoStructureInfo(MetaName.camCinematicTwoShotCameraMetadata, 0, 0, 136, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1865815245, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2755051531, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3983645896, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)3072113430, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)654218252, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1114870307, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)1926313598, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)1167967077, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)656358172, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)940306022, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)4169793326, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)2733631256, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)3573176421, PsoDataType.SInt, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)9436207, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)1953981041, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)1252108818, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)3754548217, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)102161666, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)753638141, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)851393034, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)2383824547, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)1720877983, PsoDataType.Bool, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)1117249844, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)3115155794, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)1144205032, PsoDataType.Bool, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)1450705774, PsoDataType.Float, 132, 0, 0) + ); + case MetaName.camCinematicPedCloseUpCameraMetadata: + return new PsoStructureInfo(MetaName.camCinematicPedCloseUpCameraMetadata, 0, 0, 192, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1865815245, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2755051531, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)575433612, PsoDataType.SInt, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)3651374867, PsoDataType.Float3, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1099610506, PsoDataType.Bool, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)3573176421, PsoDataType.SInt, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)1190303903, PsoDataType.Float3, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)367186942, PsoDataType.Bool, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)3381486527, PsoDataType.UInt, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)3185512023, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)4280914022, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)430381212, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)2406519031, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)2116722083, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)4065237819, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)1391390084, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)3698583789, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)3754548217, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)2383824547, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)3406809215, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)4170206883, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo((MetaName)3418665750, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)2934396710, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)2715105524, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)2101619543, PsoDataType.UInt, 164, 0, 0), + new PsoStructureEntryInfo((MetaName)3609378888, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo((MetaName)102161666, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo((MetaName)753638141, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo((MetaName)851393034, PsoDataType.Float, 180, 0, 0) + ); + case MetaName.camControlHelperMetadata: + return new PsoStructureInfo(MetaName.camControlHelperMetadata, 0, 0, 288, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2142445901, PsoDataType.Structure, 16, 0, MetaName.camControlHelperMetadataViewModes), + new PsoStructureEntryInfo((MetaName)4270549134, PsoDataType.Structure, 128, 0, MetaName.camControlHelperMetadataLookAround), + new PsoStructureEntryInfo((MetaName)2983410641, PsoDataType.Structure, 224, 0, MetaName.camControlHelperMetadataZoom), + new PsoStructureEntryInfo((MetaName)537305387, PsoDataType.UInt, 264, 0, 0), + new PsoStructureEntryInfo((MetaName)4114297506, PsoDataType.Bool, 268, 0, 0), + new PsoStructureEntryInfo((MetaName)2283622261, PsoDataType.Bool, 269, 0, 0), + new PsoStructureEntryInfo((MetaName)288255802, PsoDataType.Bool, 270, 0, 0), + new PsoStructureEntryInfo((MetaName)2355159673, PsoDataType.Bool, 271, 0, 0), + new PsoStructureEntryInfo((MetaName)2185008081, PsoDataType.Bool, 272, 0, 0), + new PsoStructureEntryInfo((MetaName)1539206266, PsoDataType.Float2, 276, 0, 0), + new PsoStructureEntryInfo((MetaName)1552516033, PsoDataType.UInt, 284, 0, 0) + ); + case MetaName.camControlHelperMetadataViewModes: + return new PsoStructureInfo(MetaName.camControlHelperMetadataViewModes, 0, 0, 112, + new PsoStructureEntryInfo((MetaName)509270218, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)3604554750, PsoDataType.Bool, 9, 0, 0), + new PsoStructureEntryInfo(MetaName.Context, PsoDataType.Enum, 12, 0, (MetaName)513957198), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)2703064232), + new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.Flags, 16, 2, (MetaName)327683), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camControlHelperMetadataViewModeSettings), + new PsoStructureEntryInfo(MetaName.Settings, PsoDataType.Array, 24, 4, (MetaName)327685), + new PsoStructureEntryInfo((MetaName)1610750427, PsoDataType.String, 104, 7, 0) + ); + case MetaName.camControlHelperMetadataViewModeSettings: + return new PsoStructureInfo(MetaName.camControlHelperMetadataViewModeSettings, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)1688148358, PsoDataType.Float2, 8, 0, 0) + ); + case MetaName.camControlHelperMetadataLookAround: + return new PsoStructureInfo(MetaName.camControlHelperMetadataLookAround, 0, 0, 96, + new PsoStructureEntryInfo((MetaName)3265151949, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)455772583, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)1627413096, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1529419507, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1910928125, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)419948133, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2735899528, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2160264290, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1102394099, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2899233953, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2358484554, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)4267995471, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)820757070, PsoDataType.Bool, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)1933675573, PsoDataType.String, 60, 7, 0), + new PsoStructureEntryInfo((MetaName)2539872798, PsoDataType.Structure, 64, 0, MetaName.camControlHelperMetaDataPrecisionAimSettings) + ); + case MetaName.camControlHelperMetaDataPrecisionAimSettings: + return new PsoStructureInfo(MetaName.camControlHelperMetaDataPrecisionAimSettings, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)274966492, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)150232389, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3966738289, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1410651137, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3261011203, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)4159970100, PsoDataType.Float, 28, 0, 0) + ); + case MetaName.camControlHelperMetadataZoom: + return new PsoStructureInfo(MetaName.camControlHelperMetadataZoom, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)1706209718, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1466092206, PsoDataType.Bool, 9, 0, 0), + new PsoStructureEntryInfo((MetaName)820757070, PsoDataType.Bool, 10, 0, 0), + new PsoStructureEntryInfo((MetaName)2006858266, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)1881152859, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3615529910, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3265151949, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)455772583, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1627413096, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSpeed, PsoDataType.Float, 36, 0, 0) + ); + case MetaName.camCinematicVehicleTrackingCameraMetadata: + return new PsoStructureInfo(MetaName.camCinematicVehicleTrackingCameraMetadata, 0, 0, 128, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1190303903, PsoDataType.Float3, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.PositionOffset, PsoDataType.Float3, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.Fov, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)1292601136, PsoDataType.Float2, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)3554537001, PsoDataType.Float2, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)4013358927, PsoDataType.Float2, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)328948722, PsoDataType.Float2, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionRadius, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)2642729834, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)2198318784, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)1142735275, PsoDataType.UInt, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)102161666, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)753638141, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)851393034, PsoDataType.Float, 124, 0, 0) + ); + case MetaName.camEnvelopeMetadata: + return new PsoStructureInfo(MetaName.camEnvelopeMetadata, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)4004354650, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)75961662, PsoDataType.UInt, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1826449020, PsoDataType.UInt, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1735638891, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.HoldDuration, PsoDataType.SInt, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)4066793496, PsoDataType.UInt, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)2014772834, PsoDataType.Enum, 40, 0, (MetaName)3921015781), + new PsoStructureEntryInfo((MetaName)1004206996, PsoDataType.Enum, 44, 0, (MetaName)3921015781), + new PsoStructureEntryInfo((MetaName)1484523694, PsoDataType.Bool, 48, 0, 0) + ); + case MetaName.camSpringMountMetadata: + return new PsoStructureInfo(MetaName.camSpringMountMetadata, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2807887859, PsoDataType.Float3, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)4142316102, PsoDataType.Float3, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2286316924, PsoDataType.Float3, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1129875775, PsoDataType.Float3, 64, 0, 0) + ); + case MetaName.camAnimatedCameraMetadata: + return new PsoStructureInfo(MetaName.camAnimatedCameraMetadata, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0) + ); + case MetaName.camFreeCameraMetadata: + return new PsoStructureInfo(MetaName.camFreeCameraMetadata, 0, 0, 112, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)4070310820, PsoDataType.Float3, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)32744136, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1363831855, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)335505697, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)430698760, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)426969157, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)4133472264, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)802099030, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)991761956, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)1137737707, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)2276437979, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)4261179401, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)1380375800, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)3305680632, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)3631492583, PsoDataType.UInt, 100, 0, 0) + ); + case MetaName.camCinematicMountedPartCameraMetadata: + return new PsoStructureInfo(MetaName.camCinematicMountedPartCameraMetadata, 0, 0, 192, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)4086545075, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo((MetaName)4021873979, PsoDataType.String, 36, 7, 0), + new PsoStructureEntryInfo((MetaName)1865815245, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2755051531, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2289273332, PsoDataType.Enum, 48, 0, (MetaName)3404480226), + new PsoStructureEntryInfo((MetaName)2797646907, PsoDataType.Float3, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)54415504, PsoDataType.Float3, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)1204776061, PsoDataType.Float2, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)340115724, PsoDataType.Float2, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)2918672176, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)1558815907, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)3319637384, PsoDataType.Structure, 120, 0, MetaName.camSpeedRelativeShakeSettingsMetadata), + new PsoStructureEntryInfo((MetaName)3132205970, PsoDataType.Bool, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)2385481086, PsoDataType.Bool, 153, 0, 0), + new PsoStructureEntryInfo((MetaName)1348911901, PsoDataType.Bool, 154, 0, 0), + new PsoStructureEntryInfo((MetaName)1762086384, PsoDataType.Bool, 155, 0, 0), + new PsoStructureEntryInfo((MetaName)1232220671, PsoDataType.Bool, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)2101619543, PsoDataType.UInt, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionRadius, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo((MetaName)2763528752, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo((MetaName)2106075408, PsoDataType.Bool, 172, 0, 0), + new PsoStructureEntryInfo((MetaName)2642729834, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo((MetaName)102161666, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo((MetaName)753638141, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo((MetaName)851393034, PsoDataType.Float, 188, 0, 0) + ); + case MetaName.camFollowPedCameraMetadata: + return new PsoStructureInfo(MetaName.camFollowPedCameraMetadata, 0, 0, 2288, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2884954151, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo((MetaName)730193180, PsoDataType.String, 36, 7, 0), + new PsoStructureEntryInfo((MetaName)1443569911, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo((MetaName)60641442, PsoDataType.String, 44, 7, 0), + new PsoStructureEntryInfo((MetaName)1865815245, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2755051531, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3305154880, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)2846809829, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)3002500493, PsoDataType.Bool, 61, 0, 0), + new PsoStructureEntryInfo((MetaName)2521592812, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)4067016949, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)2406229624, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)727876548, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)3039556728, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)1708190798, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)1190961214, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)897419234, PsoDataType.UInt, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)150825038, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)4033450681, PsoDataType.Bool, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)2058076685, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)488216999, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)1406371922, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)2814402846, PsoDataType.String, 116, 7, 0), + new PsoStructureEntryInfo((MetaName)372575308, PsoDataType.Bool, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)799910142, PsoDataType.Bool, 121, 0, 0), + new PsoStructureEntryInfo((MetaName)1933402526, PsoDataType.Bool, 122, 0, 0), + new PsoStructureEntryInfo((MetaName)1022007033, PsoDataType.Structure, 128, 0, MetaName.camThirdPersonCameraMetadataCustomBoundingBoxSettings), + new PsoStructureEntryInfo((MetaName)2861227361, PsoDataType.Bool, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)1148495425, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)536202543, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)1065618425, PsoDataType.Structure, 176, 0, MetaName.camThirdPersonCameraMetadataBasePivotPosition), + new PsoStructureEntryInfo((MetaName)3256568637, PsoDataType.Structure, 272, 0, MetaName.camThirdPersonCameraMetadataPivotPosition), + new PsoStructureEntryInfo((MetaName)588927535, PsoDataType.Structure, 320, 0, MetaName.camThirdPersonCameraMetadataPivotOverBoungingBoxSettings), + new PsoStructureEntryInfo((MetaName)2014345705, PsoDataType.Float, 344, 0, 0), + new PsoStructureEntryInfo((MetaName)3982287448, PsoDataType.Float, 348, 0, 0), + new PsoStructureEntryInfo((MetaName)2449849624, PsoDataType.Float, 352, 0, 0), + new PsoStructureEntryInfo((MetaName)695725580, PsoDataType.Float, 356, 0, 0), + new PsoStructureEntryInfo((MetaName)1397182427, PsoDataType.Float, 360, 0, 0), + new PsoStructureEntryInfo((MetaName)881872463, PsoDataType.Bool, 364, 0, 0), + new PsoStructureEntryInfo((MetaName)177572622, PsoDataType.Float, 368, 0, 0), + new PsoStructureEntryInfo((MetaName)560700931, PsoDataType.Float, 372, 0, 0), + new PsoStructureEntryInfo((MetaName)1828892401, PsoDataType.Float2, 376, 0, 0), + new PsoStructureEntryInfo((MetaName)2829148759, PsoDataType.Float, 384, 0, 0), + new PsoStructureEntryInfo((MetaName)1084689577, PsoDataType.Float, 388, 0, 0), + new PsoStructureEntryInfo((MetaName)3978450060, PsoDataType.Float, 392, 0, 0), + new PsoStructureEntryInfo((MetaName)1991191506, PsoDataType.Structure, 400, 0, MetaName.camThirdPersonCameraMetadataBuoyancySettings), + new PsoStructureEntryInfo((MetaName)1949881438, PsoDataType.Bool, 448, 0, 0), + new PsoStructureEntryInfo((MetaName)3863307203, PsoDataType.Bool, 449, 0, 0), + new PsoStructureEntryInfo((MetaName)3696538081, PsoDataType.Bool, 450, 0, 0), + new PsoStructureEntryInfo((MetaName)2213127338, PsoDataType.Bool, 451, 0, 0), + new PsoStructureEntryInfo((MetaName)724966028, PsoDataType.Bool, 452, 0, 0), + new PsoStructureEntryInfo((MetaName)2696635175, PsoDataType.Float, 456, 0, 0), + new PsoStructureEntryInfo((MetaName)1976571596, PsoDataType.Float, 460, 0, 0), + new PsoStructureEntryInfo((MetaName)551575094, PsoDataType.Float, 464, 0, 0), + new PsoStructureEntryInfo((MetaName)1557769430, PsoDataType.Float, 468, 0, 0), + new PsoStructureEntryInfo((MetaName)4155454260, PsoDataType.Float3, 480, 0, 0), + new PsoStructureEntryInfo((MetaName)4194152221, PsoDataType.Float3, 496, 0, 0), + new PsoStructureEntryInfo((MetaName)2702878862, PsoDataType.Bool, 512, 0, 0), + new PsoStructureEntryInfo((MetaName)1998689777, PsoDataType.Bool, 513, 0, 0), + new PsoStructureEntryInfo((MetaName)2235540893, PsoDataType.Bool, 514, 0, 0), + new PsoStructureEntryInfo((MetaName)3479639237, PsoDataType.Float3, 528, 0, 0), + new PsoStructureEntryInfo((MetaName)1496115250, PsoDataType.Float, 544, 0, 0), + new PsoStructureEntryInfo((MetaName)340312382, PsoDataType.Structure, 552, 0, MetaName.camThirdPersonCameraMetadataCollisionFallBackPosition), + new PsoStructureEntryInfo((MetaName)4279727627, PsoDataType.Float, 592, 0, 0), + new PsoStructureEntryInfo((MetaName)823526659, PsoDataType.Bool, 596, 0, 0), + new PsoStructureEntryInfo((MetaName)3507950586, PsoDataType.Float, 600, 0, 0), + new PsoStructureEntryInfo((MetaName)3397058689, PsoDataType.Float, 604, 0, 0), + new PsoStructureEntryInfo((MetaName)227846107, PsoDataType.Structure, 608, 0, MetaName.camThirdPersonCameraMetadataVehicleOnTopOfVehicleCollisionSettings), + new PsoStructureEntryInfo((MetaName)3658085406, PsoDataType.Float, 632, 0, 0), + new PsoStructureEntryInfo((MetaName)1654683326, PsoDataType.Float2, 636, 0, 0), + new PsoStructureEntryInfo((MetaName)1974814289, PsoDataType.Float2, 644, 0, 0), + new PsoStructureEntryInfo((MetaName)1778852906, PsoDataType.Float, 652, 0, 0), + new PsoStructureEntryInfo((MetaName)158553507, PsoDataType.Float, 656, 0, 0), + new PsoStructureEntryInfo((MetaName)3300166924, PsoDataType.Structure, 664, 0, MetaName.camThirdPersonCameraMetadataLookOverSettings), + new PsoStructureEntryInfo((MetaName)2793581079, PsoDataType.Bool, 688, 0, 0), + new PsoStructureEntryInfo((MetaName)2111969249, PsoDataType.Float2, 692, 0, 0), + new PsoStructureEntryInfo((MetaName)3068587259, PsoDataType.Float, 700, 0, 0), + new PsoStructureEntryInfo((MetaName)293341517, PsoDataType.Float, 704, 0, 0), + new PsoStructureEntryInfo((MetaName)3607038158, PsoDataType.Float, 708, 0, 0), + new PsoStructureEntryInfo((MetaName)4039533147, PsoDataType.Float2, 712, 0, 0), + new PsoStructureEntryInfo((MetaName)1356521412, PsoDataType.Float2, 720, 0, 0), + new PsoStructureEntryInfo((MetaName)3610920953, PsoDataType.Structure, 728, 0, MetaName.camThirdPersonCameraMetadataStealthZoomSettings), + new PsoStructureEntryInfo((MetaName)1947299079, PsoDataType.Structure, 752, 0, MetaName.camThirdPersonCameraMetadataQuadrupedalHeightSpring), + new PsoStructureEntryInfo((MetaName)490368749, PsoDataType.String, 776, 7, 0), + new PsoStructureEntryInfo((MetaName)2122226771, PsoDataType.Bool, 780, 0, 0), + new PsoStructureEntryInfo((MetaName)1789219851, PsoDataType.String, 784, 7, 0), + new PsoStructureEntryInfo((MetaName)2224847663, PsoDataType.String, 788, 7, 0), + new PsoStructureEntryInfo((MetaName)2960196386, PsoDataType.String, 792, 7, 0), + new PsoStructureEntryInfo((MetaName)2238897248, PsoDataType.String, 796, 7, 0), + new PsoStructureEntryInfo((MetaName)572898954, PsoDataType.String, 800, 7, 0), + new PsoStructureEntryInfo((MetaName)1256703824, PsoDataType.Bool, 804, 0, 0), + new PsoStructureEntryInfo((MetaName)1394164846, PsoDataType.Structure, 808, 0, MetaName.camFollowCameraMetadataPullAroundSettings), + new PsoStructureEntryInfo((MetaName)914396031, PsoDataType.Structure, 872, 0, MetaName.camFollowCameraMetadataPullAroundSettings), + new PsoStructureEntryInfo((MetaName)4045243730, PsoDataType.Bool, 936, 0, 0), + new PsoStructureEntryInfo((MetaName)3857630189, PsoDataType.Bool, 937, 0, 0), + new PsoStructureEntryInfo((MetaName)2208576746, PsoDataType.Bool, 938, 0, 0), + new PsoStructureEntryInfo((MetaName)3468493382, PsoDataType.Bool, 939, 0, 0), + new PsoStructureEntryInfo((MetaName)3614496996, PsoDataType.Bool, 940, 0, 0), + new PsoStructureEntryInfo((MetaName)2671392542, PsoDataType.Bool, 941, 0, 0), + new PsoStructureEntryInfo((MetaName)2127124229, PsoDataType.Float, 944, 0, 0), + new PsoStructureEntryInfo((MetaName)2098973612, PsoDataType.Bool, 948, 0, 0), + new PsoStructureEntryInfo((MetaName)1014809841, PsoDataType.Float, 952, 0, 0), + new PsoStructureEntryInfo((MetaName)2563263345, PsoDataType.Float, 956, 0, 0), + new PsoStructureEntryInfo((MetaName)1914871967, PsoDataType.Float2, 960, 0, 0), + new PsoStructureEntryInfo((MetaName)3594576614, PsoDataType.Float, 968, 0, 0), + new PsoStructureEntryInfo((MetaName)1880225385, PsoDataType.Float, 972, 0, 0), + new PsoStructureEntryInfo((MetaName)1487131765, PsoDataType.Float, 976, 0, 0), + new PsoStructureEntryInfo((MetaName)2018965896, PsoDataType.Float, 980, 0, 0), + new PsoStructureEntryInfo((MetaName)1286077706, PsoDataType.Float, 984, 0, 0), + new PsoStructureEntryInfo((MetaName)70382085, PsoDataType.Structure, 992, 0, MetaName.camFollowCameraMetadataFollowOrientationConing), + new PsoStructureEntryInfo((MetaName)4214646062, PsoDataType.Structure, 1024, 0, MetaName.camFollowCameraMetadataRollSettings), + new PsoStructureEntryInfo((MetaName)2054392766, PsoDataType.Structure, 1064, 0, MetaName.camFollowCameraMetadataHighAltitudeZoomSettings), + new PsoStructureEntryInfo((MetaName)1885083576, PsoDataType.Bool, 1104, 0, 0), + new PsoStructureEntryInfo((MetaName)1213389792, PsoDataType.Bool, 1105, 0, 0), + new PsoStructureEntryInfo((MetaName)473739279, PsoDataType.Float, 1108, 0, 0), + new PsoStructureEntryInfo((MetaName)2513422573, PsoDataType.String, 1112, 7, 0), + new PsoStructureEntryInfo((MetaName)3575968142, PsoDataType.String, 1116, 7, 0), + new PsoStructureEntryInfo((MetaName)2291862537, PsoDataType.UInt, 1120, 0, 0), + new PsoStructureEntryInfo((MetaName)459469516, PsoDataType.Float, 1124, 0, 0), + new PsoStructureEntryInfo((MetaName)4093180426, PsoDataType.Float, 1128, 0, 0), + new PsoStructureEntryInfo((MetaName)1028171116, PsoDataType.Float, 1132, 0, 0), + new PsoStructureEntryInfo((MetaName)2578221071, PsoDataType.Float2, 1136, 0, 0), + new PsoStructureEntryInfo((MetaName)2418079526, PsoDataType.String, 1144, 7, 0), + new PsoStructureEntryInfo((MetaName)300074581, PsoDataType.Bool, 1148, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camFollowPedCameraMetadataCustomViewModeSettings), + new PsoStructureEntryInfo((MetaName)95464861, PsoDataType.Array, 1152, 4, (MetaName)327809), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camFollowPedCameraMetadataCustomViewModeSettings), + new PsoStructureEntryInfo((MetaName)741352357, PsoDataType.Array, 1272, 4, (MetaName)327811), + new PsoStructureEntryInfo((MetaName)1557873238, PsoDataType.Bool, 1392, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camFollowPedCameraMetadataCustomViewModeSettings), + new PsoStructureEntryInfo((MetaName)1607272001, PsoDataType.Array, 1400, 4, (MetaName)327814), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camFollowPedCameraMetadataCustomViewModeSettings), + new PsoStructureEntryInfo((MetaName)467721499, PsoDataType.Array, 1520, 4, (MetaName)327816), + new PsoStructureEntryInfo((MetaName)4261252982, PsoDataType.String, 1640, 7, 0), + new PsoStructureEntryInfo((MetaName)2397521015, PsoDataType.Float, 1644, 0, 0), + new PsoStructureEntryInfo((MetaName)886249434, PsoDataType.Float, 1648, 0, 0), + new PsoStructureEntryInfo((MetaName)3909973356, PsoDataType.Float, 1652, 0, 0), + new PsoStructureEntryInfo((MetaName)4282038076, PsoDataType.Float, 1656, 0, 0), + new PsoStructureEntryInfo((MetaName)1414513338, PsoDataType.Float, 1660, 0, 0), + new PsoStructureEntryInfo((MetaName)233447402, PsoDataType.Float, 1664, 0, 0), + new PsoStructureEntryInfo((MetaName)813655062, PsoDataType.Float, 1668, 0, 0), + new PsoStructureEntryInfo((MetaName)859959795, PsoDataType.Float, 1672, 0, 0), + new PsoStructureEntryInfo((MetaName)2322941924, PsoDataType.Structure, 1680, 0, MetaName.camFollowPedCameraMetadataAssistedMovementAlignment), + new PsoStructureEntryInfo((MetaName)2014258089, PsoDataType.Structure, 1768, 0, MetaName.camFollowPedCameraMetadataLadderAlignment), + new PsoStructureEntryInfo((MetaName)4264482777, PsoDataType.Structure, 1952, 0, MetaName.camFollowPedCameraMetadataRappellingAlignment), + new PsoStructureEntryInfo((MetaName)215880757, PsoDataType.Bool, 1968, 0, 0), + new PsoStructureEntryInfo((MetaName)4161177976, PsoDataType.Structure, 1976, 0, MetaName.camFollowCameraMetadataPullAroundSettings), + new PsoStructureEntryInfo((MetaName)2738607365, PsoDataType.Float2, 2040, 0, 0), + new PsoStructureEntryInfo((MetaName)3410646358, PsoDataType.Float2, 2048, 0, 0), + new PsoStructureEntryInfo((MetaName)528803049, PsoDataType.Bool, 2056, 0, 0), + new PsoStructureEntryInfo((MetaName)3857904181, PsoDataType.Float, 2060, 0, 0), + new PsoStructureEntryInfo((MetaName)2773176002, PsoDataType.Float, 2064, 0, 0), + new PsoStructureEntryInfo((MetaName)3592715839, PsoDataType.Bool, 2068, 0, 0), + new PsoStructureEntryInfo((MetaName)3895855693, PsoDataType.Float2, 2072, 0, 0), + new PsoStructureEntryInfo((MetaName)2344836057, PsoDataType.Structure, 2080, 0, MetaName.camFollowPedCameraMetadataOrbitPitchLimitsForOverheadCollision), + new PsoStructureEntryInfo((MetaName)3095276846, PsoDataType.Float, 2112, 0, 0), + new PsoStructureEntryInfo((MetaName)135621085, PsoDataType.Float, 2116, 0, 0), + new PsoStructureEntryInfo((MetaName)2068541596, PsoDataType.Float, 2120, 0, 0), + new PsoStructureEntryInfo((MetaName)1699579049, PsoDataType.Structure, 2128, 0, MetaName.camFollowPedCameraMetadataRunningShakeSettings), + new PsoStructureEntryInfo((MetaName)498572221, PsoDataType.Structure, 2160, 0, MetaName.camFollowPedCameraMetadataSwimmingShakeSettings), + new PsoStructureEntryInfo((MetaName)2385645301, PsoDataType.Structure, 2192, 0, MetaName.camFollowPedCameraMetadataDivingShakeSettings), + new PsoStructureEntryInfo((MetaName)136635268, PsoDataType.Structure, 2224, 0, MetaName.camFollowPedCameraMetadataHighFallShakeSettings), + new PsoStructureEntryInfo((MetaName)41370383, PsoDataType.Structure, 2248, 0, MetaName.camFollowPedCameraMetadataPushBeyondNearbyVehiclesInRagdollSettings) + ); + case MetaName.camThirdPersonCameraMetadataCustomBoundingBoxSettings: + return new PsoStructureInfo(MetaName.camThirdPersonCameraMetadataCustomBoundingBoxSettings, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)1920226182, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2086333922, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3584381811, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3420511035, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.camThirdPersonCameraMetadataBasePivotPosition: + return new PsoStructureInfo(MetaName.camThirdPersonCameraMetadataBasePivotPosition, 0, 0, 96, + new PsoStructureEntryInfo((MetaName)2274949645, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2070771362, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2923457671, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3748493944, PsoDataType.Bool, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)4214646062, PsoDataType.Structure, 24, 0, MetaName.camThirdPersonCameraMetadataBasePivotPositionRollSettings), + new PsoStructureEntryInfo((MetaName)4287557601, PsoDataType.Float3, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)1581058504, PsoDataType.Bool, 80, 0, 0) + ); + case MetaName.camThirdPersonCameraMetadataBasePivotPositionRollSettings: + return new PsoStructureInfo(MetaName.camThirdPersonCameraMetadataBasePivotPositionRollSettings, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)4012821505, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2742393958, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2306378250, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1160632805, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3503009483, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 32, 0, 0) + ); + case MetaName.camThirdPersonCameraMetadataPivotPosition: + return new PsoStructureInfo(MetaName.camThirdPersonCameraMetadataPivotPosition, 0, 0, 48, + new PsoStructureEntryInfo((MetaName)1032707911, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1114870307, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)142271562, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2685248219, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1097326038, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)4000301303, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2968415887, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2278684726, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3654232577, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2888330455, PsoDataType.Float, 44, 0, 0) + ); + case MetaName.camThirdPersonCameraMetadataPivotOverBoungingBoxSettings: + return new PsoStructureInfo(MetaName.camThirdPersonCameraMetadataPivotOverBoungingBoxSettings, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)42409501, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2401664616, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3987821886, PsoDataType.Float, 16, 0, 0) + ); + case MetaName.camThirdPersonCameraMetadataBuoyancySettings: + return new PsoStructureInfo(MetaName.camThirdPersonCameraMetadataBuoyancySettings, 0, 0, 48, + new PsoStructureEntryInfo((MetaName)959048093, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1503749012, PsoDataType.UInt, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3666052486, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2560927169, PsoDataType.UInt, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2968196113, PsoDataType.UInt, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2069938157, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1698601922, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2382802886, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)448788827, PsoDataType.Bool, 40, 0, 0) + ); + case MetaName.camThirdPersonCameraMetadataCollisionFallBackPosition: + return new PsoStructureInfo(MetaName.camThirdPersonCameraMetadataCollisionFallBackPosition, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)2070771362, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)296951838, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)4004666528, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)527029053, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)31648245, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2702477980, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)20195593, PsoDataType.Bool, 29, 0, 0), + new PsoStructureEntryInfo((MetaName)3748493944, PsoDataType.Bool, 30, 0, 0), + new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 36, 0, 0) + ); + case MetaName.camThirdPersonCameraMetadataVehicleOnTopOfVehicleCollisionSettings: + return new PsoStructureInfo(MetaName.camThirdPersonCameraMetadataVehicleOnTopOfVehicleCollisionSettings, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)651835053, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2514003172, PsoDataType.UInt, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3416628233, PsoDataType.Float, 16, 0, 0) + ); + case MetaName.camThirdPersonCameraMetadataLookOverSettings: + return new PsoStructureInfo(MetaName.camThirdPersonCameraMetadataLookOverSettings, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)1206332797, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)4276410337, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3346546090, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2605085544, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.camThirdPersonCameraMetadataStealthZoomSettings: + return new PsoStructureInfo(MetaName.camThirdPersonCameraMetadataStealthZoomSettings, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)651835053, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)3357849814, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.camFollowCameraMetadataPullAroundSettings: + return new PsoStructureInfo(MetaName.camFollowCameraMetadataPullAroundSettings, 0, 0, 64, + new PsoStructureEntryInfo((MetaName)3478105571, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1212391588, PsoDataType.Bool, 9, 0, 0), + new PsoStructureEntryInfo((MetaName)3993671513, PsoDataType.Bool, 10, 0, 0), + new PsoStructureEntryInfo((MetaName)3078528158, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3319639913, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1466199679, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1199102981, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1332565251, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)4054409124, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2976192130, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)430354724, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)634917686, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)3418263557, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)835784625, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)1088580250, PsoDataType.Float, 56, 0, 0) + ); + case MetaName.camFollowCameraMetadataFollowOrientationConing: + return new PsoStructureInfo(MetaName.camFollowCameraMetadataFollowOrientationConing, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)3503009483, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)69123357, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2344149746, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.PitchOffset, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1863632928, PsoDataType.Float, 24, 0, 0) + ); + case MetaName.camFollowCameraMetadataRollSettings: + return new PsoStructureInfo(MetaName.camFollowCameraMetadataRollSettings, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)436250856, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)261121990, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)1003830880, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2742393958, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2306378250, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2238978991, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1361361101, PsoDataType.Float, 32, 0, 0) + ); + case MetaName.camFollowCameraMetadataHighAltitudeZoomSettings: + return new PsoStructureInfo(MetaName.camFollowCameraMetadataHighAltitudeZoomSettings, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)4256613730, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2362779209, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)785828068, PsoDataType.Float, 24, 0, 0) + ); + case MetaName.camFollowPedCameraMetadataCustomViewModeSettings: + return new PsoStructureInfo(MetaName.camFollowPedCameraMetadataCustomViewModeSettings, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)4026985674, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2014345705, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3982287448, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1778852906, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.camFollowPedCameraMetadataAssistedMovementAlignment: + return new PsoStructureInfo(MetaName.camFollowPedCameraMetadataAssistedMovementAlignment, 0, 0, 88, + new PsoStructureEntryInfo((MetaName)2033261313, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2541847736, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo((MetaName)3143901835, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2602308947, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1394164846, PsoDataType.Structure, 24, 0, MetaName.camFollowCameraMetadataPullAroundSettings) + ); + case MetaName.camFollowPedCameraMetadataLadderAlignment: + return new PsoStructureInfo(MetaName.camFollowPedCameraMetadataLadderAlignment, 0, 0, 184, + new PsoStructureEntryInfo((MetaName)2033261313, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2541847736, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo((MetaName)1654683326, PsoDataType.Float2, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1974814289, PsoDataType.Float2, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)261180327, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3594576614, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)666447554, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)4131471736, PsoDataType.UInt, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)3980517625, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1394164846, PsoDataType.Structure, 56, 0, MetaName.camFollowCameraMetadataPullAroundSettings), + new PsoStructureEntryInfo((MetaName)738690141, PsoDataType.Structure, 120, 0, MetaName.camFollowCameraMetadataPullAroundSettings) + ); + case MetaName.camFollowPedCameraMetadataRappellingAlignment: + return new PsoStructureInfo(MetaName.camFollowPedCameraMetadataRappellingAlignment, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)2033261313, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)261180327, PsoDataType.Float, 12, 0, 0) + ); + case MetaName.camFollowPedCameraMetadataOrbitPitchLimitsForOverheadCollision: + return new PsoStructureInfo(MetaName.camFollowPedCameraMetadataOrbitPitchLimitsForOverheadCollision, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)1746008730, PsoDataType.Float2, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)256117257, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 24, 0, 0) + ); + case MetaName.camFollowPedCameraMetadataRunningShakeSettings: + return new PsoStructureInfo(MetaName.camFollowPedCameraMetadataRunningShakeSettings, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3172666582, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)272708601, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)491218034, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2700987639, PsoDataType.Float, 24, 0, 0) + ); + case MetaName.camFollowPedCameraMetadataSwimmingShakeSettings: + return new PsoStructureInfo(MetaName.camFollowPedCameraMetadataSwimmingShakeSettings, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3172666582, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)272708601, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)491218034, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1443947683, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2015392943, PsoDataType.Float, 28, 0, 0) + ); + case MetaName.camFollowPedCameraMetadataDivingShakeSettings: + return new PsoStructureInfo(MetaName.camFollowPedCameraMetadataDivingShakeSettings, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1206332797, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)4276410337, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3172666582, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)272708601, PsoDataType.Float, 24, 0, 0) + ); + case MetaName.camFollowPedCameraMetadataHighFallShakeSettings: + return new PsoStructureInfo(MetaName.camFollowPedCameraMetadataHighFallShakeSettings, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1724998945, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSpeed, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)272708601, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.camFollowPedCameraMetadataPushBeyondNearbyVehiclesInRagdollSettings: + return new PsoStructureInfo(MetaName.camFollowPedCameraMetadataPushBeyondNearbyVehiclesInRagdollSettings, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)2514003172, PsoDataType.UInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1159487467, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2913317904, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)752814960, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1115262693, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)4278404079, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3416628233, PsoDataType.Float, 32, 0, 0) + ); + case MetaName.camCollisionMetadata: + return new PsoStructureInfo(MetaName.camCollisionMetadata, 0, 0, 240, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1921983042, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3325779817, PsoDataType.Bool, 17, 0, 0), + new PsoStructureEntryInfo((MetaName)1510673380, PsoDataType.Bool, 18, 0, 0), + new PsoStructureEntryInfo((MetaName)1756495672, PsoDataType.Bool, 19, 0, 0), + new PsoStructureEntryInfo((MetaName)2762175909, PsoDataType.Bool, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1356103878, PsoDataType.Bool, 21, 0, 0), + new PsoStructureEntryInfo((MetaName)2656848273, PsoDataType.Bool, 22, 0, 0), + new PsoStructureEntryInfo((MetaName)1973279102, PsoDataType.Bool, 23, 0, 0), + new PsoStructureEntryInfo((MetaName)1876340735, PsoDataType.Bool, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1207465912, PsoDataType.Structure, 32, 0, MetaName.camCollisionMetadataOcclusionSweep), + new PsoStructureEntryInfo((MetaName)394936210, PsoDataType.Structure, 72, 0, MetaName.camCollisionMetadataPathFinding), + new PsoStructureEntryInfo((MetaName)1899363737, PsoDataType.Structure, 88, 0, MetaName.camCollisionMetadataRotationTowardsLos), + new PsoStructureEntryInfo((MetaName)337202266, PsoDataType.Structure, 104, 0, MetaName.camCollisionMetadataOrbitDistanceDamping), + new PsoStructureEntryInfo((MetaName)185739126, PsoDataType.Structure, 136, 0, MetaName.camCollisionMetadataClippingAvoidance), + new PsoStructureEntryInfo((MetaName)1991191506, PsoDataType.Structure, 152, 0, MetaName.camCollisionMetadataBuoyancySettings), + new PsoStructureEntryInfo((MetaName)2276761303, PsoDataType.Structure, 184, 0, MetaName.camCollisionMetadataPushBeyondEntitiesIfClipping), + new PsoStructureEntryInfo((MetaName)333745998, PsoDataType.Structure, 216, 0, MetaName.camCollisionMetadataPullBackTowardsCollision) + ); + case MetaName.camCollisionMetadataOcclusionSweep: + return new PsoStructureInfo(MetaName.camCollisionMetadataOcclusionSweep, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)2133560880, PsoDataType.UInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)35427940, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)4130418064, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2848194588, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1583100448, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)785961650, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1302934580, PsoDataType.Float, 32, 0, 0) + ); + case MetaName.camCollisionMetadataPathFinding: + return new PsoStructureInfo(MetaName.camCollisionMetadataPathFinding, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)961760330, PsoDataType.UInt, 8, 0, 0) + ); + case MetaName.camCollisionMetadataRotationTowardsLos: + return new PsoStructureInfo(MetaName.camCollisionMetadataRotationTowardsLos, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 12, 0, 0) + ); + case MetaName.camCollisionMetadataOrbitDistanceDamping: + return new PsoStructureInfo(MetaName.camCollisionMetadataOrbitDistanceDamping, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)4012884170, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2824365723, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1819399769, PsoDataType.Float, 24, 0, 0) + ); + case MetaName.camCollisionMetadataClippingAvoidance: + return new PsoStructureInfo(MetaName.camCollisionMetadataClippingAvoidance, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)3378768739, PsoDataType.UInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)322237759, PsoDataType.Float, 12, 0, 0) + ); + case MetaName.camCollisionMetadataBuoyancySettings: + return new PsoStructureInfo(MetaName.camCollisionMetadataBuoyancySettings, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)959048093, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)134488060, PsoDataType.Bool, 9, 0, 0), + new PsoStructureEntryInfo((MetaName)2252203055, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3243646861, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2469744276, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3111702866, PsoDataType.Float, 24, 0, 0) + ); + case MetaName.camCollisionMetadataPushBeyondEntitiesIfClipping: + return new PsoStructureInfo(MetaName.camCollisionMetadataPushBeyondEntitiesIfClipping, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)3893627623, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2688276525, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)1125215459, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2562227249, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)615517883, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)925224069, PsoDataType.Bool, 29, 0, 0), + new PsoStructureEntryInfo((MetaName)631999118, PsoDataType.Bool, 30, 0, 0) + ); + case MetaName.camCollisionMetadataPullBackTowardsCollision: + return new PsoStructureInfo(MetaName.camCollisionMetadataPullBackTowardsCollision, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)2111282409, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)165735146, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 16, 0, 0) + ); + case MetaName.camHintHelperMetadata: + return new PsoStructureInfo(MetaName.camHintHelperMetadata, 0, 0, 88, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)680981764, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1674069994, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1778852906, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1974814289, PsoDataType.Float2, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)67329582, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)2753181554, PsoDataType.Structure, 40, 0, MetaName.camHintHelperMetadataPivotPositionAdditive), + new PsoStructureEntryInfo((MetaName)3051761482, PsoDataType.String, 64, 7, 0), + new PsoStructureEntryInfo((MetaName)399304638, PsoDataType.String, 68, 7, 0), + new PsoStructureEntryInfo((MetaName)315713489, PsoDataType.Bool, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)3421755121, PsoDataType.Bool, 73, 0, 0), + new PsoStructureEntryInfo((MetaName)9436207, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)1167921072, PsoDataType.Bool, 80, 0, 0) + ); + case MetaName.camHintHelperMetadataPivotPositionAdditive: + return new PsoStructureInfo(MetaName.camHintHelperMetadataPivotPositionAdditive, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)3517580346, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2171374488, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3803694830, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)187223663, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.camInconsistentBehaviourZoomHelperMetadata: + return new PsoStructureInfo(MetaName.camInconsistentBehaviourZoomHelperMetadata, 0, 0, 184, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2835430912, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3615529910, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)192388977, PsoDataType.Structure, 24, 0, MetaName.camInconsistentBehaviourZoomHelperDetectSuddenMovementSettings), + new PsoStructureEntryInfo((MetaName)3137016932, PsoDataType.Structure, 64, 0, MetaName.camInconsistentBehaviourZoomHelperDetectFastCameraTurnSettings), + new PsoStructureEntryInfo((MetaName)3922359176, PsoDataType.Structure, 104, 0, MetaName.camInconsistentBehaviourZoomHelperAirborneSettings), + new PsoStructureEntryInfo((MetaName)3604184077, PsoDataType.Structure, 144, 0, MetaName.camInconsistentBehaviourZoomHelperLosSettings) + ); + case MetaName.camInconsistentBehaviourZoomHelperDetectSuddenMovementSettings: + return new PsoStructureInfo(MetaName.camInconsistentBehaviourZoomHelperDetectSuddenMovementSettings, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)1134622566, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1025142686, PsoDataType.UInt, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)989577416, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2226168954, PsoDataType.UInt, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2667621860, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2802018341, PsoDataType.Float, 32, 0, 0) + ); + case MetaName.camInconsistentBehaviourZoomHelperDetectFastCameraTurnSettings: + return new PsoStructureInfo(MetaName.camInconsistentBehaviourZoomHelperDetectFastCameraTurnSettings, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)1134622566, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1025142686, PsoDataType.UInt, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)989577416, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2226168954, PsoDataType.UInt, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2667621860, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1513989445, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)423008264, PsoDataType.Float, 36, 0, 0) + ); + case MetaName.camInconsistentBehaviourZoomHelperAirborneSettings: + return new PsoStructureInfo(MetaName.camInconsistentBehaviourZoomHelperAirborneSettings, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)1134622566, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1025142686, PsoDataType.UInt, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)989577416, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2226168954, PsoDataType.UInt, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2667621860, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)424844475, PsoDataType.UInt, 32, 0, 0) + ); + case MetaName.camInconsistentBehaviourZoomHelperLosSettings: + return new PsoStructureInfo(MetaName.camInconsistentBehaviourZoomHelperLosSettings, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)1134622566, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1025142686, PsoDataType.UInt, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)989577416, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2226168954, PsoDataType.UInt, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2667621860, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1918423771, PsoDataType.UInt, 32, 0, 0) + ); + case MetaName.camCatchUpHelperMetadata: + return new PsoStructureInfo(MetaName.camCatchUpHelperMetadata, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)482340760, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1046944473, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2387941002, PsoDataType.SInt, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3764337155, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2836572250, PsoDataType.Enum, 32, 0, (MetaName)3921015781) + ); + case MetaName.camLookAtDampingHelperMetadata: + return new PsoStructureInfo(MetaName.camLookAtDampingHelperMetadata, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3543584583, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2722511334, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3076282416, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3481945794, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1705112434, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)627718911, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3152826625, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)3880553368, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)1561096582, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1150311187, PsoDataType.Float, 52, 0, 0) + ); + case MetaName.camLookAheadHelperMetadata: + return new PsoStructureInfo(MetaName.camLookAheadHelperMetadata, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)765307181, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)988110708, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1724998945, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3931376905, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1623903878, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2306378250, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3766959106, PsoDataType.Bool, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)88070689, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)1846985178, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2004585270, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 60, 0, 0) + ); + case MetaName.camFollowVehicleCameraMetadata: + return new PsoStructureInfo(MetaName.camFollowVehicleCameraMetadata, 0, 0, 1376, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2884954151, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo((MetaName)730193180, PsoDataType.String, 36, 7, 0), + new PsoStructureEntryInfo((MetaName)1443569911, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo((MetaName)60641442, PsoDataType.String, 44, 7, 0), + new PsoStructureEntryInfo((MetaName)1865815245, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2755051531, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3305154880, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)2846809829, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)3002500493, PsoDataType.Bool, 61, 0, 0), + new PsoStructureEntryInfo((MetaName)2521592812, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)4067016949, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)2406229624, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)727876548, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)3039556728, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)1708190798, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)1190961214, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)897419234, PsoDataType.UInt, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)150825038, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)4033450681, PsoDataType.Bool, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)2058076685, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)488216999, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)1406371922, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)2814402846, PsoDataType.String, 116, 7, 0), + new PsoStructureEntryInfo((MetaName)372575308, PsoDataType.Bool, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)799910142, PsoDataType.Bool, 121, 0, 0), + new PsoStructureEntryInfo((MetaName)1933402526, PsoDataType.Bool, 122, 0, 0), + new PsoStructureEntryInfo((MetaName)1022007033, PsoDataType.Structure, 128, 0, MetaName.camThirdPersonCameraMetadataCustomBoundingBoxSettings), + new PsoStructureEntryInfo((MetaName)2861227361, PsoDataType.Bool, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)1148495425, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)536202543, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)1065618425, PsoDataType.Structure, 176, 0, MetaName.camThirdPersonCameraMetadataBasePivotPosition), + new PsoStructureEntryInfo((MetaName)3256568637, PsoDataType.Structure, 272, 0, MetaName.camThirdPersonCameraMetadataPivotPosition), + new PsoStructureEntryInfo((MetaName)588927535, PsoDataType.Structure, 320, 0, MetaName.camThirdPersonCameraMetadataPivotOverBoungingBoxSettings), + new PsoStructureEntryInfo((MetaName)2014345705, PsoDataType.Float, 344, 0, 0), + new PsoStructureEntryInfo((MetaName)3982287448, PsoDataType.Float, 348, 0, 0), + new PsoStructureEntryInfo((MetaName)2449849624, PsoDataType.Float, 352, 0, 0), + new PsoStructureEntryInfo((MetaName)695725580, PsoDataType.Float, 356, 0, 0), + new PsoStructureEntryInfo((MetaName)1397182427, PsoDataType.Float, 360, 0, 0), + new PsoStructureEntryInfo((MetaName)881872463, PsoDataType.Bool, 364, 0, 0), + new PsoStructureEntryInfo((MetaName)177572622, PsoDataType.Float, 368, 0, 0), + new PsoStructureEntryInfo((MetaName)560700931, PsoDataType.Float, 372, 0, 0), + new PsoStructureEntryInfo((MetaName)1828892401, PsoDataType.Float2, 376, 0, 0), + new PsoStructureEntryInfo((MetaName)2829148759, PsoDataType.Float, 384, 0, 0), + new PsoStructureEntryInfo((MetaName)1084689577, PsoDataType.Float, 388, 0, 0), + new PsoStructureEntryInfo((MetaName)3978450060, PsoDataType.Float, 392, 0, 0), + new PsoStructureEntryInfo((MetaName)1991191506, PsoDataType.Structure, 400, 0, MetaName.camThirdPersonCameraMetadataBuoyancySettings), + new PsoStructureEntryInfo((MetaName)1949881438, PsoDataType.Bool, 448, 0, 0), + new PsoStructureEntryInfo((MetaName)3863307203, PsoDataType.Bool, 449, 0, 0), + new PsoStructureEntryInfo((MetaName)3696538081, PsoDataType.Bool, 450, 0, 0), + new PsoStructureEntryInfo((MetaName)2213127338, PsoDataType.Bool, 451, 0, 0), + new PsoStructureEntryInfo((MetaName)724966028, PsoDataType.Bool, 452, 0, 0), + new PsoStructureEntryInfo((MetaName)2696635175, PsoDataType.Float, 456, 0, 0), + new PsoStructureEntryInfo((MetaName)1976571596, PsoDataType.Float, 460, 0, 0), + new PsoStructureEntryInfo((MetaName)551575094, PsoDataType.Float, 464, 0, 0), + new PsoStructureEntryInfo((MetaName)1557769430, PsoDataType.Float, 468, 0, 0), + new PsoStructureEntryInfo((MetaName)4155454260, PsoDataType.Float3, 480, 0, 0), + new PsoStructureEntryInfo((MetaName)4194152221, PsoDataType.Float3, 496, 0, 0), + new PsoStructureEntryInfo((MetaName)2702878862, PsoDataType.Bool, 512, 0, 0), + new PsoStructureEntryInfo((MetaName)1998689777, PsoDataType.Bool, 513, 0, 0), + new PsoStructureEntryInfo((MetaName)2235540893, PsoDataType.Bool, 514, 0, 0), + new PsoStructureEntryInfo((MetaName)3479639237, PsoDataType.Float3, 528, 0, 0), + new PsoStructureEntryInfo((MetaName)1496115250, PsoDataType.Float, 544, 0, 0), + new PsoStructureEntryInfo((MetaName)340312382, PsoDataType.Structure, 552, 0, MetaName.camThirdPersonCameraMetadataCollisionFallBackPosition), + new PsoStructureEntryInfo((MetaName)4279727627, PsoDataType.Float, 592, 0, 0), + new PsoStructureEntryInfo((MetaName)823526659, PsoDataType.Bool, 596, 0, 0), + new PsoStructureEntryInfo((MetaName)3507950586, PsoDataType.Float, 600, 0, 0), + new PsoStructureEntryInfo((MetaName)3397058689, PsoDataType.Float, 604, 0, 0), + new PsoStructureEntryInfo((MetaName)227846107, PsoDataType.Structure, 608, 0, MetaName.camThirdPersonCameraMetadataVehicleOnTopOfVehicleCollisionSettings), + new PsoStructureEntryInfo((MetaName)3658085406, PsoDataType.Float, 632, 0, 0), + new PsoStructureEntryInfo((MetaName)1654683326, PsoDataType.Float2, 636, 0, 0), + new PsoStructureEntryInfo((MetaName)1974814289, PsoDataType.Float2, 644, 0, 0), + new PsoStructureEntryInfo((MetaName)1778852906, PsoDataType.Float, 652, 0, 0), + new PsoStructureEntryInfo((MetaName)158553507, PsoDataType.Float, 656, 0, 0), + new PsoStructureEntryInfo((MetaName)3300166924, PsoDataType.Structure, 664, 0, MetaName.camThirdPersonCameraMetadataLookOverSettings), + new PsoStructureEntryInfo((MetaName)2793581079, PsoDataType.Bool, 688, 0, 0), + new PsoStructureEntryInfo((MetaName)2111969249, PsoDataType.Float2, 692, 0, 0), + new PsoStructureEntryInfo((MetaName)3068587259, PsoDataType.Float, 700, 0, 0), + new PsoStructureEntryInfo((MetaName)293341517, PsoDataType.Float, 704, 0, 0), + new PsoStructureEntryInfo((MetaName)3607038158, PsoDataType.Float, 708, 0, 0), + new PsoStructureEntryInfo((MetaName)4039533147, PsoDataType.Float2, 712, 0, 0), + new PsoStructureEntryInfo((MetaName)1356521412, PsoDataType.Float2, 720, 0, 0), + new PsoStructureEntryInfo((MetaName)3610920953, PsoDataType.Structure, 728, 0, MetaName.camThirdPersonCameraMetadataStealthZoomSettings), + new PsoStructureEntryInfo((MetaName)1947299079, PsoDataType.Structure, 752, 0, MetaName.camThirdPersonCameraMetadataQuadrupedalHeightSpring), + new PsoStructureEntryInfo((MetaName)490368749, PsoDataType.String, 776, 7, 0), + new PsoStructureEntryInfo((MetaName)2122226771, PsoDataType.Bool, 780, 0, 0), + new PsoStructureEntryInfo((MetaName)1789219851, PsoDataType.String, 784, 7, 0), + new PsoStructureEntryInfo((MetaName)2224847663, PsoDataType.String, 788, 7, 0), + new PsoStructureEntryInfo((MetaName)2960196386, PsoDataType.String, 792, 7, 0), + new PsoStructureEntryInfo((MetaName)2238897248, PsoDataType.String, 796, 7, 0), + new PsoStructureEntryInfo((MetaName)572898954, PsoDataType.String, 800, 7, 0), + new PsoStructureEntryInfo((MetaName)1256703824, PsoDataType.Bool, 804, 0, 0), + new PsoStructureEntryInfo((MetaName)1394164846, PsoDataType.Structure, 808, 0, MetaName.camFollowCameraMetadataPullAroundSettings), + new PsoStructureEntryInfo((MetaName)914396031, PsoDataType.Structure, 872, 0, MetaName.camFollowCameraMetadataPullAroundSettings), + new PsoStructureEntryInfo((MetaName)4045243730, PsoDataType.Bool, 936, 0, 0), + new PsoStructureEntryInfo((MetaName)3857630189, PsoDataType.Bool, 937, 0, 0), + new PsoStructureEntryInfo((MetaName)2208576746, PsoDataType.Bool, 938, 0, 0), + new PsoStructureEntryInfo((MetaName)3468493382, PsoDataType.Bool, 939, 0, 0), + new PsoStructureEntryInfo((MetaName)3614496996, PsoDataType.Bool, 940, 0, 0), + new PsoStructureEntryInfo((MetaName)2671392542, PsoDataType.Bool, 941, 0, 0), + new PsoStructureEntryInfo((MetaName)2127124229, PsoDataType.Float, 944, 0, 0), + new PsoStructureEntryInfo((MetaName)2098973612, PsoDataType.Bool, 948, 0, 0), + new PsoStructureEntryInfo((MetaName)1014809841, PsoDataType.Float, 952, 0, 0), + new PsoStructureEntryInfo((MetaName)2563263345, PsoDataType.Float, 956, 0, 0), + new PsoStructureEntryInfo((MetaName)1914871967, PsoDataType.Float2, 960, 0, 0), + new PsoStructureEntryInfo((MetaName)3594576614, PsoDataType.Float, 968, 0, 0), + new PsoStructureEntryInfo((MetaName)1880225385, PsoDataType.Float, 972, 0, 0), + new PsoStructureEntryInfo((MetaName)1487131765, PsoDataType.Float, 976, 0, 0), + new PsoStructureEntryInfo((MetaName)2018965896, PsoDataType.Float, 980, 0, 0), + new PsoStructureEntryInfo((MetaName)1286077706, PsoDataType.Float, 984, 0, 0), + new PsoStructureEntryInfo((MetaName)70382085, PsoDataType.Structure, 992, 0, MetaName.camFollowCameraMetadataFollowOrientationConing), + new PsoStructureEntryInfo((MetaName)4214646062, PsoDataType.Structure, 1024, 0, MetaName.camFollowCameraMetadataRollSettings), + new PsoStructureEntryInfo((MetaName)2054392766, PsoDataType.Structure, 1064, 0, MetaName.camFollowCameraMetadataHighAltitudeZoomSettings), + new PsoStructureEntryInfo((MetaName)3703185618, PsoDataType.Structure, 1104, 0, MetaName.camFollowVehicleCameraMetadataHandBrakeSwingSettings), + new PsoStructureEntryInfo((MetaName)2946100032, PsoDataType.Structure, 1136, 0, MetaName.camFollowVehicleCameraMetadataDuckUnderOverheadCollisionSettings), + new PsoStructureEntryInfo((MetaName)2646605713, PsoDataType.Structure, 1192, 0, MetaName.camFollowVehicleCameraMetadataHighSpeedZoomSettings), + new PsoStructureEntryInfo((MetaName)3319637384, PsoDataType.Structure, 1224, 0, MetaName.camFollowVehicleCameraMetadataHighSpeedShakeSettings), + new PsoStructureEntryInfo((MetaName)3250603115, PsoDataType.Structure, 1248, 0, MetaName.camFollowVehicleCameraMetadataWaterEntryShakeSettings), + new PsoStructureEntryInfo((MetaName)2663165374, PsoDataType.Structure, 1280, 0, MetaName.camFollowVehicleCameraMetadataVerticalFlightModeSettings), + new PsoStructureEntryInfo((MetaName)3950418303, PsoDataType.Structure, 1296, 0, MetaName.camVehicleCustomSettingsMetadataDoorAlignmentSettings), + new PsoStructureEntryInfo((MetaName)135621085, PsoDataType.Float, 1336, 0, 0), + new PsoStructureEntryInfo((MetaName)4048007163, PsoDataType.Float, 1340, 0, 0), + new PsoStructureEntryInfo((MetaName)2477951883, PsoDataType.Float, 1344, 0, 0), + new PsoStructureEntryInfo((MetaName)1953360151, PsoDataType.Bool, 1348, 0, 0), + new PsoStructureEntryInfo((MetaName)961264130, PsoDataType.String, 1352, 7, 0), + new PsoStructureEntryInfo((MetaName)4075164277, PsoDataType.Bool, 1356, 0, 0), + new PsoStructureEntryInfo((MetaName)2625336677, PsoDataType.String, 1360, 7, 0), + new PsoStructureEntryInfo((MetaName)3347720841, PsoDataType.Float2, 1364, 0, 0) + ); + case MetaName.camFollowVehicleCameraMetadataHandBrakeSwingSettings: + return new PsoStructureInfo(MetaName.camFollowVehicleCameraMetadataHandBrakeSwingSettings, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)73888528, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)4191348047, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3579471989, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2084746057, PsoDataType.Float, 24, 0, 0) + ); + case MetaName.camFollowVehicleCameraMetadataDuckUnderOverheadCollisionSettings: + return new PsoStructureInfo(MetaName.camFollowVehicleCameraMetadataDuckUnderOverheadCollisionSettings, 0, 0, 56, + new PsoStructureEntryInfo((MetaName)1811750171, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1848522270, PsoDataType.Bool, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3105010187, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3073979382, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2803013276, PsoDataType.Structure, 32, 0, MetaName.camFollowVehicleCameraMetadataDuckUnderOverheadCollisionSettingsCapsuleSettings) + ); + case MetaName.camFollowVehicleCameraMetadataDuckUnderOverheadCollisionSettingsCapsuleSettings: + return new PsoStructureInfo(MetaName.camFollowVehicleCameraMetadataDuckUnderOverheadCollisionSettingsCapsuleSettings, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)465899626, PsoDataType.UInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)4135147407, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3479495276, PsoDataType.Float2, 16, 0, 0) + ); + case MetaName.camFollowVehicleCameraMetadataHighSpeedZoomSettings: + return new PsoStructureInfo(MetaName.camFollowVehicleCameraMetadataHighSpeedZoomSettings, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)2742393958, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2306378250, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)785828068, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)777008740, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2366444870, PsoDataType.Float, 28, 0, 0) + ); + case MetaName.camFollowVehicleCameraMetadataHighSpeedShakeSettings: + return new PsoStructureInfo(MetaName.camFollowVehicleCameraMetadataHighSpeedShakeSettings, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2742393958, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2306378250, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.camFollowVehicleCameraMetadataWaterEntryShakeSettings: + return new PsoStructureInfo(MetaName.camFollowVehicleCameraMetadataWaterEntryShakeSettings, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2390340428, PsoDataType.UInt, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)1575008605, PsoDataType.Float2, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2371650129, PsoDataType.Float2, 24, 0, 0) + ); + case MetaName.camFollowVehicleCameraMetadataVerticalFlightModeSettings: + return new PsoStructureInfo(MetaName.camFollowVehicleCameraMetadataVerticalFlightModeSettings, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)1974814289, PsoDataType.Float2, 8, 0, 0) + ); + case MetaName.camVehicleCustomSettingsMetadataDoorAlignmentSettings: + return new PsoStructureInfo(MetaName.camVehicleCustomSettingsMetadataDoorAlignmentSettings, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)3663951405, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)3431976824, PsoDataType.Bool, 9, 0, 0), + new PsoStructureEntryInfo((MetaName)669372144, PsoDataType.Bool, 10, 0, 0), + new PsoStructureEntryInfo((MetaName)1160959405, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3992317122, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3365340087, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1055028939, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2434688331, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1873731470, PsoDataType.Float, 32, 0, 0) + ); + case MetaName.camFollowParachuteCameraMetadata: + return new PsoStructureInfo(MetaName.camFollowParachuteCameraMetadata, 0, 0, 1136, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2884954151, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo((MetaName)730193180, PsoDataType.String, 36, 7, 0), + new PsoStructureEntryInfo((MetaName)1443569911, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo((MetaName)60641442, PsoDataType.String, 44, 7, 0), + new PsoStructureEntryInfo((MetaName)1865815245, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2755051531, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3305154880, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)2846809829, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)3002500493, PsoDataType.Bool, 61, 0, 0), + new PsoStructureEntryInfo((MetaName)2521592812, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)4067016949, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)2406229624, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)727876548, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)3039556728, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)1708190798, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)1190961214, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)897419234, PsoDataType.UInt, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)150825038, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)4033450681, PsoDataType.Bool, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)2058076685, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)488216999, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)1406371922, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)2814402846, PsoDataType.String, 116, 7, 0), + new PsoStructureEntryInfo((MetaName)372575308, PsoDataType.Bool, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)799910142, PsoDataType.Bool, 121, 0, 0), + new PsoStructureEntryInfo((MetaName)1933402526, PsoDataType.Bool, 122, 0, 0), + new PsoStructureEntryInfo((MetaName)1022007033, PsoDataType.Structure, 128, 0, MetaName.camThirdPersonCameraMetadataCustomBoundingBoxSettings), + new PsoStructureEntryInfo((MetaName)2861227361, PsoDataType.Bool, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)1148495425, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)536202543, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)1065618425, PsoDataType.Structure, 176, 0, MetaName.camThirdPersonCameraMetadataBasePivotPosition), + new PsoStructureEntryInfo((MetaName)3256568637, PsoDataType.Structure, 272, 0, MetaName.camThirdPersonCameraMetadataPivotPosition), + new PsoStructureEntryInfo((MetaName)588927535, PsoDataType.Structure, 320, 0, MetaName.camThirdPersonCameraMetadataPivotOverBoungingBoxSettings), + new PsoStructureEntryInfo((MetaName)2014345705, PsoDataType.Float, 344, 0, 0), + new PsoStructureEntryInfo((MetaName)3982287448, PsoDataType.Float, 348, 0, 0), + new PsoStructureEntryInfo((MetaName)2449849624, PsoDataType.Float, 352, 0, 0), + new PsoStructureEntryInfo((MetaName)695725580, PsoDataType.Float, 356, 0, 0), + new PsoStructureEntryInfo((MetaName)1397182427, PsoDataType.Float, 360, 0, 0), + new PsoStructureEntryInfo((MetaName)881872463, PsoDataType.Bool, 364, 0, 0), + new PsoStructureEntryInfo((MetaName)177572622, PsoDataType.Float, 368, 0, 0), + new PsoStructureEntryInfo((MetaName)560700931, PsoDataType.Float, 372, 0, 0), + new PsoStructureEntryInfo((MetaName)1828892401, PsoDataType.Float2, 376, 0, 0), + new PsoStructureEntryInfo((MetaName)2829148759, PsoDataType.Float, 384, 0, 0), + new PsoStructureEntryInfo((MetaName)1084689577, PsoDataType.Float, 388, 0, 0), + new PsoStructureEntryInfo((MetaName)3978450060, PsoDataType.Float, 392, 0, 0), + new PsoStructureEntryInfo((MetaName)1991191506, PsoDataType.Structure, 400, 0, MetaName.camThirdPersonCameraMetadataBuoyancySettings), + new PsoStructureEntryInfo((MetaName)1949881438, PsoDataType.Bool, 448, 0, 0), + new PsoStructureEntryInfo((MetaName)3863307203, PsoDataType.Bool, 449, 0, 0), + new PsoStructureEntryInfo((MetaName)3696538081, PsoDataType.Bool, 450, 0, 0), + new PsoStructureEntryInfo((MetaName)2213127338, PsoDataType.Bool, 451, 0, 0), + new PsoStructureEntryInfo((MetaName)724966028, PsoDataType.Bool, 452, 0, 0), + new PsoStructureEntryInfo((MetaName)2696635175, PsoDataType.Float, 456, 0, 0), + new PsoStructureEntryInfo((MetaName)1976571596, PsoDataType.Float, 460, 0, 0), + new PsoStructureEntryInfo((MetaName)551575094, PsoDataType.Float, 464, 0, 0), + new PsoStructureEntryInfo((MetaName)1557769430, PsoDataType.Float, 468, 0, 0), + new PsoStructureEntryInfo((MetaName)4155454260, PsoDataType.Float3, 480, 0, 0), + new PsoStructureEntryInfo((MetaName)4194152221, PsoDataType.Float3, 496, 0, 0), + new PsoStructureEntryInfo((MetaName)2702878862, PsoDataType.Bool, 512, 0, 0), + new PsoStructureEntryInfo((MetaName)1998689777, PsoDataType.Bool, 513, 0, 0), + new PsoStructureEntryInfo((MetaName)2235540893, PsoDataType.Bool, 514, 0, 0), + new PsoStructureEntryInfo((MetaName)3479639237, PsoDataType.Float3, 528, 0, 0), + new PsoStructureEntryInfo((MetaName)1496115250, PsoDataType.Float, 544, 0, 0), + new PsoStructureEntryInfo((MetaName)340312382, PsoDataType.Structure, 552, 0, MetaName.camThirdPersonCameraMetadataCollisionFallBackPosition), + new PsoStructureEntryInfo((MetaName)4279727627, PsoDataType.Float, 592, 0, 0), + new PsoStructureEntryInfo((MetaName)823526659, PsoDataType.Bool, 596, 0, 0), + new PsoStructureEntryInfo((MetaName)3507950586, PsoDataType.Float, 600, 0, 0), + new PsoStructureEntryInfo((MetaName)3397058689, PsoDataType.Float, 604, 0, 0), + new PsoStructureEntryInfo((MetaName)227846107, PsoDataType.Structure, 608, 0, MetaName.camThirdPersonCameraMetadataVehicleOnTopOfVehicleCollisionSettings), + new PsoStructureEntryInfo((MetaName)3658085406, PsoDataType.Float, 632, 0, 0), + new PsoStructureEntryInfo((MetaName)1654683326, PsoDataType.Float2, 636, 0, 0), + new PsoStructureEntryInfo((MetaName)1974814289, PsoDataType.Float2, 644, 0, 0), + new PsoStructureEntryInfo((MetaName)1778852906, PsoDataType.Float, 652, 0, 0), + new PsoStructureEntryInfo((MetaName)158553507, PsoDataType.Float, 656, 0, 0), + new PsoStructureEntryInfo((MetaName)3300166924, PsoDataType.Structure, 664, 0, MetaName.camThirdPersonCameraMetadataLookOverSettings), + new PsoStructureEntryInfo((MetaName)2793581079, PsoDataType.Bool, 688, 0, 0), + new PsoStructureEntryInfo((MetaName)2111969249, PsoDataType.Float2, 692, 0, 0), + new PsoStructureEntryInfo((MetaName)3068587259, PsoDataType.Float, 700, 0, 0), + new PsoStructureEntryInfo((MetaName)293341517, PsoDataType.Float, 704, 0, 0), + new PsoStructureEntryInfo((MetaName)3607038158, PsoDataType.Float, 708, 0, 0), + new PsoStructureEntryInfo((MetaName)4039533147, PsoDataType.Float2, 712, 0, 0), + new PsoStructureEntryInfo((MetaName)1356521412, PsoDataType.Float2, 720, 0, 0), + new PsoStructureEntryInfo((MetaName)3610920953, PsoDataType.Structure, 728, 0, MetaName.camThirdPersonCameraMetadataStealthZoomSettings), + new PsoStructureEntryInfo((MetaName)1947299079, PsoDataType.Structure, 752, 0, MetaName.camThirdPersonCameraMetadataQuadrupedalHeightSpring), + new PsoStructureEntryInfo((MetaName)490368749, PsoDataType.String, 776, 7, 0), + new PsoStructureEntryInfo((MetaName)2122226771, PsoDataType.Bool, 780, 0, 0), + new PsoStructureEntryInfo((MetaName)1789219851, PsoDataType.String, 784, 7, 0), + new PsoStructureEntryInfo((MetaName)2224847663, PsoDataType.String, 788, 7, 0), + new PsoStructureEntryInfo((MetaName)2960196386, PsoDataType.String, 792, 7, 0), + new PsoStructureEntryInfo((MetaName)2238897248, PsoDataType.String, 796, 7, 0), + new PsoStructureEntryInfo((MetaName)572898954, PsoDataType.String, 800, 7, 0), + new PsoStructureEntryInfo((MetaName)1256703824, PsoDataType.Bool, 804, 0, 0), + new PsoStructureEntryInfo((MetaName)1394164846, PsoDataType.Structure, 808, 0, MetaName.camFollowCameraMetadataPullAroundSettings), + new PsoStructureEntryInfo((MetaName)914396031, PsoDataType.Structure, 872, 0, MetaName.camFollowCameraMetadataPullAroundSettings), + new PsoStructureEntryInfo((MetaName)4045243730, PsoDataType.Bool, 936, 0, 0), + new PsoStructureEntryInfo((MetaName)3857630189, PsoDataType.Bool, 937, 0, 0), + new PsoStructureEntryInfo((MetaName)2208576746, PsoDataType.Bool, 938, 0, 0), + new PsoStructureEntryInfo((MetaName)3468493382, PsoDataType.Bool, 939, 0, 0), + new PsoStructureEntryInfo((MetaName)3614496996, PsoDataType.Bool, 940, 0, 0), + new PsoStructureEntryInfo((MetaName)2671392542, PsoDataType.Bool, 941, 0, 0), + new PsoStructureEntryInfo((MetaName)2127124229, PsoDataType.Float, 944, 0, 0), + new PsoStructureEntryInfo((MetaName)2098973612, PsoDataType.Bool, 948, 0, 0), + new PsoStructureEntryInfo((MetaName)1014809841, PsoDataType.Float, 952, 0, 0), + new PsoStructureEntryInfo((MetaName)2563263345, PsoDataType.Float, 956, 0, 0), + new PsoStructureEntryInfo((MetaName)1914871967, PsoDataType.Float2, 960, 0, 0), + new PsoStructureEntryInfo((MetaName)3594576614, PsoDataType.Float, 968, 0, 0), + new PsoStructureEntryInfo((MetaName)1880225385, PsoDataType.Float, 972, 0, 0), + new PsoStructureEntryInfo((MetaName)1487131765, PsoDataType.Float, 976, 0, 0), + new PsoStructureEntryInfo((MetaName)2018965896, PsoDataType.Float, 980, 0, 0), + new PsoStructureEntryInfo((MetaName)1286077706, PsoDataType.Float, 984, 0, 0), + new PsoStructureEntryInfo((MetaName)70382085, PsoDataType.Structure, 992, 0, MetaName.camFollowCameraMetadataFollowOrientationConing), + new PsoStructureEntryInfo((MetaName)4214646062, PsoDataType.Structure, 1024, 0, MetaName.camFollowCameraMetadataRollSettings), + new PsoStructureEntryInfo((MetaName)2054392766, PsoDataType.Structure, 1064, 0, MetaName.camFollowCameraMetadataHighAltitudeZoomSettings), + new PsoStructureEntryInfo((MetaName)2827051945, PsoDataType.Structure, 1104, 0, MetaName.camFollowParachuteCameraMetadataCustomSettings) + ); + case MetaName.camFollowParachuteCameraMetadataCustomSettings: + return new PsoStructureInfo(MetaName.camFollowParachuteCameraMetadataCustomSettings, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)3501562487, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1514912105, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2028447415, PsoDataType.String, 16, 7, 0) + ); + case MetaName.camFirstPersonPedAimCameraMetadata: + return new PsoStructureInfo(MetaName.camFirstPersonPedAimCameraMetadata, 0, 0, 208, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2884954151, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo((MetaName)1865815245, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)2755051531, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1025607184, PsoDataType.UInt, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)652273141, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1054008152, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3100931510, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)1238524664, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)3718710002, PsoDataType.Float3, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)3807713258, PsoDataType.Bool, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)509392339, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)4261179401, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)3137513888, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)3645576770, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)1478931781, PsoDataType.Bool, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)1959607978, PsoDataType.Bool, 113, 0, 0), + new PsoStructureEntryInfo((MetaName)1348911901, PsoDataType.Bool, 114, 0, 0), + new PsoStructureEntryInfo((MetaName)1120407412, PsoDataType.Bool, 115, 0, 0), + new PsoStructureEntryInfo((MetaName)937843974, PsoDataType.Float2, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)1149560055, PsoDataType.Float2, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)2758176724, PsoDataType.Structure, 136, 0, MetaName.camFirstPersonAimCameraMetadataHeadingCorrection), + new PsoStructureEntryInfo((MetaName)330110937, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)575433612, PsoDataType.SInt, 176, 0, 0), + new PsoStructureEntryInfo((MetaName)1634093344, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo((MetaName)2878053132, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo((MetaName)3271563285, PsoDataType.Bool, 188, 0, 0), + new PsoStructureEntryInfo((MetaName)1847867369, PsoDataType.Bool, 189, 0, 0), + new PsoStructureEntryInfo((MetaName)1173900687, PsoDataType.Float, 192, 0, 0), + new PsoStructureEntryInfo((MetaName)1322555765, PsoDataType.Float, 196, 0, 0), + new PsoStructureEntryInfo((MetaName)1723254225, PsoDataType.Bool, 200, 0, 0) + ); + case MetaName.camFirstPersonAimCameraMetadataHeadingCorrection: + return new PsoStructureInfo(MetaName.camFirstPersonAimCameraMetadataHeadingCorrection, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1496770623, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2032147920, PsoDataType.Float, 16, 0, 0) + ); + case MetaName.camFirstPersonShooterCameraMetadata: + return new PsoStructureInfo(MetaName.camFirstPersonShooterCameraMetadata, 0, 0, 1664, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2884954151, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo((MetaName)1865815245, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)2755051531, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1025607184, PsoDataType.UInt, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)652273141, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1054008152, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3100931510, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)1238524664, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)3718710002, PsoDataType.Float3, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)3807713258, PsoDataType.Bool, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)509392339, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)4261179401, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)3137513888, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)3645576770, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)1478931781, PsoDataType.Bool, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)1959607978, PsoDataType.Bool, 113, 0, 0), + new PsoStructureEntryInfo((MetaName)1348911901, PsoDataType.Bool, 114, 0, 0), + new PsoStructureEntryInfo((MetaName)1120407412, PsoDataType.Bool, 115, 0, 0), + new PsoStructureEntryInfo((MetaName)937843974, PsoDataType.Float2, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)1149560055, PsoDataType.Float2, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)2758176724, PsoDataType.Structure, 136, 0, MetaName.camFirstPersonAimCameraMetadataHeadingCorrection), + new PsoStructureEntryInfo((MetaName)330110937, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)730193180, PsoDataType.String, 176, 7, 0), + new PsoStructureEntryInfo((MetaName)3500215588, PsoDataType.Float3, 192, 0, 0), + new PsoStructureEntryInfo((MetaName)1583458555, PsoDataType.Float3, 208, 0, 0), + new PsoStructureEntryInfo((MetaName)3253139357, PsoDataType.Float3, 224, 0, 0), + new PsoStructureEntryInfo((MetaName)4262893203, PsoDataType.Float3, 240, 0, 0), + new PsoStructureEntryInfo((MetaName)2347724525, PsoDataType.Float3, 256, 0, 0), + new PsoStructureEntryInfo((MetaName)3438104893, PsoDataType.Float3, 272, 0, 0), + new PsoStructureEntryInfo((MetaName)424961570, PsoDataType.Float3, 288, 0, 0), + new PsoStructureEntryInfo((MetaName)104465235, PsoDataType.Float3, 304, 0, 0), + new PsoStructureEntryInfo((MetaName)4034848485, PsoDataType.Float3, 320, 0, 0), + new PsoStructureEntryInfo((MetaName)10648206, PsoDataType.Float2, 336, 0, 0), + new PsoStructureEntryInfo((MetaName)2372600507, PsoDataType.Float2, 344, 0, 0), + new PsoStructureEntryInfo((MetaName)971666241, PsoDataType.Float2, 352, 0, 0), + new PsoStructureEntryInfo((MetaName)162051482, PsoDataType.Float2, 360, 0, 0), + new PsoStructureEntryInfo((MetaName)3789298543, PsoDataType.Float2, 368, 0, 0), + new PsoStructureEntryInfo((MetaName)3507003526, PsoDataType.Float2, 376, 0, 0), + new PsoStructureEntryInfo((MetaName)1765689234, PsoDataType.String, 384, 7, 0), + new PsoStructureEntryInfo((MetaName)722540604, PsoDataType.String, 388, 7, 0), + new PsoStructureEntryInfo((MetaName)2833081775, PsoDataType.String, 392, 7, 0), + new PsoStructureEntryInfo((MetaName)3102337801, PsoDataType.String, 396, 7, 0), + new PsoStructureEntryInfo((MetaName)1038878908, PsoDataType.String, 400, 7, 0), + new PsoStructureEntryInfo((MetaName)3684814544, PsoDataType.String, 404, 7, 0), + new PsoStructureEntryInfo((MetaName)2377645189, PsoDataType.String, 408, 7, 0), + new PsoStructureEntryInfo((MetaName)3664775821, PsoDataType.String, 412, 7, 0), + new PsoStructureEntryInfo((MetaName)3075522471, PsoDataType.String, 416, 7, 0), + new PsoStructureEntryInfo((MetaName)575433612, PsoDataType.SInt, 420, 0, 0), + new PsoStructureEntryInfo((MetaName)2878053132, PsoDataType.Float, 424, 0, 0), + new PsoStructureEntryInfo((MetaName)3559802057, PsoDataType.Structure, 432, 0, MetaName.camFirstPersonShooterCameraMetadataRelativeAttachOrientationSettings), + new PsoStructureEntryInfo((MetaName)3284913244, PsoDataType.Float, 544, 0, 0), + new PsoStructureEntryInfo((MetaName)742850166, PsoDataType.Float, 548, 0, 0), + new PsoStructureEntryInfo((MetaName)1801708329, PsoDataType.Float, 552, 0, 0), + new PsoStructureEntryInfo((MetaName)522025471, PsoDataType.Float, 556, 0, 0), + new PsoStructureEntryInfo((MetaName)3154554341, PsoDataType.Float, 560, 0, 0), + new PsoStructureEntryInfo((MetaName)2685045238, PsoDataType.Float, 564, 0, 0), + new PsoStructureEntryInfo((MetaName)1545486036, PsoDataType.Float, 568, 0, 0), + new PsoStructureEntryInfo((MetaName)732629634, PsoDataType.Float, 572, 0, 0), + new PsoStructureEntryInfo((MetaName)2263644173, PsoDataType.Float, 576, 0, 0), + new PsoStructureEntryInfo((MetaName)189771911, PsoDataType.Float, 580, 0, 0), + new PsoStructureEntryInfo((MetaName)3266229162, PsoDataType.Float, 584, 0, 0), + new PsoStructureEntryInfo((MetaName)3113298498, PsoDataType.Float, 588, 0, 0), + new PsoStructureEntryInfo((MetaName)317025866, PsoDataType.Float, 592, 0, 0), + new PsoStructureEntryInfo((MetaName)788370107, PsoDataType.Float, 596, 0, 0), + new PsoStructureEntryInfo((MetaName)1892114730, PsoDataType.Float, 600, 0, 0), + new PsoStructureEntryInfo((MetaName)2312570903, PsoDataType.Float, 604, 0, 0), + new PsoStructureEntryInfo((MetaName)1650788232, PsoDataType.Float, 608, 0, 0), + new PsoStructureEntryInfo((MetaName)3142109941, PsoDataType.Float, 612, 0, 0), + new PsoStructureEntryInfo((MetaName)1692829019, PsoDataType.Float, 616, 0, 0), + new PsoStructureEntryInfo((MetaName)1583361695, PsoDataType.Float, 620, 0, 0), + new PsoStructureEntryInfo((MetaName)3530519735, PsoDataType.Float, 624, 0, 0), + new PsoStructureEntryInfo((MetaName)1560089378, PsoDataType.Float, 628, 0, 0), + new PsoStructureEntryInfo((MetaName)1683046794, PsoDataType.Float, 632, 0, 0), + new PsoStructureEntryInfo((MetaName)1176445410, PsoDataType.Float, 636, 0, 0), + new PsoStructureEntryInfo((MetaName)3761456258, PsoDataType.Float, 640, 0, 0), + new PsoStructureEntryInfo((MetaName)413985988, PsoDataType.Float, 644, 0, 0), + new PsoStructureEntryInfo((MetaName)731578407, PsoDataType.Float, 648, 0, 0), + new PsoStructureEntryInfo((MetaName)3517278862, PsoDataType.Float, 652, 0, 0), + new PsoStructureEntryInfo((MetaName)2326671617, PsoDataType.Float, 656, 0, 0), + new PsoStructureEntryInfo((MetaName)83336335, PsoDataType.Float, 660, 0, 0), + new PsoStructureEntryInfo((MetaName)3203179444, PsoDataType.Float, 664, 0, 0), + new PsoStructureEntryInfo((MetaName)803486985, PsoDataType.Float, 668, 0, 0), + new PsoStructureEntryInfo((MetaName)2294924343, PsoDataType.Float, 672, 0, 0), + new PsoStructureEntryInfo((MetaName)2122499987, PsoDataType.Float, 676, 0, 0), + new PsoStructureEntryInfo((MetaName)1515082975, PsoDataType.Float, 680, 0, 0), + new PsoStructureEntryInfo((MetaName)1515564685, PsoDataType.Float, 684, 0, 0), + new PsoStructureEntryInfo((MetaName)3592059377, PsoDataType.Float, 688, 0, 0), + new PsoStructureEntryInfo((MetaName)448454700, PsoDataType.Bool, 692, 0, 0), + new PsoStructureEntryInfo((MetaName)545313111, PsoDataType.Float, 696, 0, 0), + new PsoStructureEntryInfo((MetaName)1976571596, PsoDataType.Float, 700, 0, 0), + new PsoStructureEntryInfo((MetaName)1534221961, PsoDataType.Float, 704, 0, 0), + new PsoStructureEntryInfo((MetaName)270168093, PsoDataType.Float, 708, 0, 0), + new PsoStructureEntryInfo((MetaName)2100042799, PsoDataType.Float, 712, 0, 0), + new PsoStructureEntryInfo((MetaName)3626441228, PsoDataType.UInt, 716, 0, 0), + new PsoStructureEntryInfo((MetaName)700340890, PsoDataType.UInt, 720, 0, 0), + new PsoStructureEntryInfo((MetaName)1968480925, PsoDataType.UInt, 724, 0, 0), + new PsoStructureEntryInfo((MetaName)2850438294, PsoDataType.UInt, 728, 0, 0), + new PsoStructureEntryInfo((MetaName)1608452380, PsoDataType.UInt, 732, 0, 0), + new PsoStructureEntryInfo((MetaName)2387142724, PsoDataType.UInt, 736, 0, 0), + new PsoStructureEntryInfo((MetaName)2743970065, PsoDataType.UInt, 740, 0, 0), + new PsoStructureEntryInfo((MetaName)2452155390, PsoDataType.UInt, 744, 0, 0), + new PsoStructureEntryInfo((MetaName)3781066831, PsoDataType.Structure, 752, 0, MetaName.camFirstPersonShooterCameraMetadataOrientationSpring), + new PsoStructureEntryInfo((MetaName)415673303, PsoDataType.Structure, 792, 0, MetaName.camFirstPersonShooterCameraMetadataOrientationSpring), + new PsoStructureEntryInfo((MetaName)3397810078, PsoDataType.Structure, 832, 0, MetaName.camFirstPersonShooterCameraMetadataOrientationSpring), + new PsoStructureEntryInfo((MetaName)3440729757, PsoDataType.Structure, 872, 0, MetaName.camFirstPersonShooterCameraMetadataOrientationSpringLite), + new PsoStructureEntryInfo((MetaName)2454767338, PsoDataType.Structure, 888, 0, MetaName.camFirstPersonShooterCameraMetadataOrientationSpringLite), + new PsoStructureEntryInfo((MetaName)1962460716, PsoDataType.Structure, 904, 0, MetaName.camFirstPersonShooterCameraMetadataOrientationSpringLite), + new PsoStructureEntryInfo((MetaName)1766077384, PsoDataType.Structure, 920, 0, MetaName.camFirstPersonShooterCameraMetadataOrientationSpringLite), + new PsoStructureEntryInfo((MetaName)2053281479, PsoDataType.Structure, 936, 0, MetaName.camFirstPersonShooterCameraMetadataOrientationSpringLite), + new PsoStructureEntryInfo((MetaName)3083287001, PsoDataType.Structure, 952, 0, MetaName.camFirstPersonShooterCameraMetadataOrientationSpringLite), + new PsoStructureEntryInfo((MetaName)4060968766, PsoDataType.Structure, 968, 0, MetaName.camFirstPersonShooterCameraMetadataOrientationSpringLite), + new PsoStructureEntryInfo((MetaName)2437540040, PsoDataType.Structure, 984, 0, MetaName.camFirstPersonShooterCameraMetadataOrientationSpringLite), + new PsoStructureEntryInfo((MetaName)3391036765, PsoDataType.Structure, 1000, 0, MetaName.camFirstPersonShooterCameraMetadataOrientationSpringLite), + new PsoStructureEntryInfo((MetaName)2728534787, PsoDataType.Structure, 1016, 0, MetaName.camFirstPersonShooterCameraMetadataOrientationSpringLite), + new PsoStructureEntryInfo((MetaName)3139215619, PsoDataType.Structure, 1032, 0, MetaName.camFirstPersonShooterCameraMetadataOrientationSpringLite), + new PsoStructureEntryInfo((MetaName)4087791749, PsoDataType.Structure, 1048, 0, MetaName.camFirstPersonShooterCameraMetadataOrientationSpringLite), + new PsoStructureEntryInfo((MetaName)2550891007, PsoDataType.Structure, 1064, 0, MetaName.camFirstPersonShooterCameraMetadataOrientationSpringLite), + new PsoStructureEntryInfo((MetaName)475503552, PsoDataType.Float, 1080, 0, 0), + new PsoStructureEntryInfo((MetaName)1215439957, PsoDataType.Float2, 1084, 0, 0), + new PsoStructureEntryInfo((MetaName)3271563285, PsoDataType.Bool, 1092, 0, 0), + new PsoStructureEntryInfo((MetaName)1723254225, PsoDataType.Bool, 1093, 0, 0), + new PsoStructureEntryInfo((MetaName)366723406, PsoDataType.String, 1096, 7, 0), + new PsoStructureEntryInfo((MetaName)264754789, PsoDataType.String, 1100, 7, 0), + new PsoStructureEntryInfo((MetaName)1539647797, PsoDataType.String, 1104, 7, 0), + new PsoStructureEntryInfo((MetaName)1519473347, PsoDataType.Float, 1108, 0, 0), + new PsoStructureEntryInfo((MetaName)3224324247, PsoDataType.Float, 1112, 0, 0), + new PsoStructureEntryInfo((MetaName)2478271115, PsoDataType.Float, 1116, 0, 0), + new PsoStructureEntryInfo((MetaName)2317113905, PsoDataType.Float, 1120, 0, 0), + new PsoStructureEntryInfo((MetaName)3903912151, PsoDataType.Float, 1124, 0, 0), + new PsoStructureEntryInfo((MetaName)2266019553, PsoDataType.Float, 1128, 0, 0), + new PsoStructureEntryInfo((MetaName)3706052819, PsoDataType.Float, 1132, 0, 0), + new PsoStructureEntryInfo((MetaName)2722258227, PsoDataType.Float, 1136, 0, 0), + new PsoStructureEntryInfo((MetaName)1525907069, PsoDataType.Float, 1140, 0, 0), + new PsoStructureEntryInfo((MetaName)2570774561, PsoDataType.Float, 1144, 0, 0), + new PsoStructureEntryInfo((MetaName)1547572758, PsoDataType.Bool, 1148, 0, 0), + new PsoStructureEntryInfo((MetaName)3957958745, PsoDataType.UInt, 1152, 0, 0), + new PsoStructureEntryInfo((MetaName)1630855608, PsoDataType.Float, 1156, 0, 0), + new PsoStructureEntryInfo((MetaName)3965978499, PsoDataType.Structure, 1160, 0, MetaName.camFirstPersonShooterCameraMetadataStickyAim), + new PsoStructureEntryInfo((MetaName)585212636, PsoDataType.Structure, 1272, 0, MetaName.camFirstPersonShooterCameraMetadataStickyAim), + new PsoStructureEntryInfo((MetaName)1301399000, PsoDataType.Bool, 1384, 0, 0), + new PsoStructureEntryInfo((MetaName)114759485, PsoDataType.Bool, 1385, 0, 0), + new PsoStructureEntryInfo((MetaName)9436207, PsoDataType.Float, 1388, 0, 0), + new PsoStructureEntryInfo((MetaName)1350912934, PsoDataType.Float, 1392, 0, 0), + new PsoStructureEntryInfo((MetaName)70391041, PsoDataType.Float, 1396, 0, 0), + new PsoStructureEntryInfo((MetaName)2783842060, PsoDataType.Float, 1400, 0, 0), + new PsoStructureEntryInfo((MetaName)4207333442, PsoDataType.Float, 1404, 0, 0), + new PsoStructureEntryInfo((MetaName)1717370547, PsoDataType.Float, 1408, 0, 0), + new PsoStructureEntryInfo((MetaName)3048647846, PsoDataType.UInt, 1412, 0, 0), + new PsoStructureEntryInfo((MetaName)3132164856, PsoDataType.UInt, 1416, 0, 0), + new PsoStructureEntryInfo((MetaName)3397272914, PsoDataType.UInt, 1420, 0, 0), + new PsoStructureEntryInfo((MetaName)1807116888, PsoDataType.UInt, 1424, 0, 0), + new PsoStructureEntryInfo((MetaName)1148495425, PsoDataType.Float, 1428, 0, 0), + new PsoStructureEntryInfo((MetaName)536202543, PsoDataType.Float, 1432, 0, 0), + new PsoStructureEntryInfo((MetaName)2447870594, PsoDataType.Float, 1436, 0, 0), + new PsoStructureEntryInfo((MetaName)2225908075, PsoDataType.Float, 1440, 0, 0), + new PsoStructureEntryInfo((MetaName)1894138, PsoDataType.Float, 1444, 0, 0), + new PsoStructureEntryInfo((MetaName)724885771, PsoDataType.Float, 1448, 0, 0), + new PsoStructureEntryInfo((MetaName)2413827894, PsoDataType.Float2, 1452, 0, 0), + new PsoStructureEntryInfo((MetaName)3780197314, PsoDataType.Structure, 1464, 0, MetaName.camFirstPersonShooterCameraMetadataCoverSettings), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camFirstPersonShooterCameraMetadataSprintBreakOutSettings), + new PsoStructureEntryInfo((MetaName)2011532787, PsoDataType.Array, 1584, 1, (MetaName)131236), + new PsoStructureEntryInfo((MetaName)490368749, PsoDataType.String, 1656, 7, 0) + ); + case MetaName.camFirstPersonShooterCameraMetadataRelativeAttachOrientationSettings: + return new PsoStructureInfo(MetaName.camFirstPersonShooterCameraMetadataRelativeAttachOrientationSettings, 0, 0, 112, + new PsoStructureEntryInfo((MetaName)3727099699, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)3120224920, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2408234737, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)869960116, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3340971535, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2197092363, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2198368821, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3606762226, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1647925848, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)490937808, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)379620733, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1441798592, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3840322276, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3383026591, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)1824793815, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)1259376027, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)2964527414, PsoDataType.Float3, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)2439730995, PsoDataType.Float3, 96, 0, 0) + ); + case MetaName.camFirstPersonShooterCameraMetadataOrientationSpring: + return new PsoStructureInfo(MetaName.camFirstPersonShooterCameraMetadataOrientationSpring, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.HeadingLimits, PsoDataType.Float2, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.PitchLimits, PsoDataType.Float2, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1524988618, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1290012653, PsoDataType.Float, 36, 0, 0) + ); + case MetaName.camFirstPersonShooterCameraMetadataOrientationSpringLite: + return new PsoStructureInfo(MetaName.camFirstPersonShooterCameraMetadataOrientationSpringLite, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 12, 0, 0) + ); + case MetaName.camFirstPersonShooterCameraMetadataStickyAim: + return new PsoStructureInfo(MetaName.camFirstPersonShooterCameraMetadataStickyAim, 0, 0, 112, + new PsoStructureEntryInfo((MetaName)934287534, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1890095417, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2911838887, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1168068740, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)943460322, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2440008981, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3546382126, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3702929248, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1390609527, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1952283316, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)1859396322, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)3508865952, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)4071651879, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3012719683, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)1163787532, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)3148686816, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)2294593316, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)3264503435, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)432760898, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)3118501359, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)2024506330, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)1824271937, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)721888806, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)903289241, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)2991714924, PsoDataType.Float, 104, 0, 0) + ); + case MetaName.camFirstPersonShooterCameraMetadataCoverSettings: + return new PsoStructureInfo(MetaName.camFirstPersonShooterCameraMetadataCoverSettings, 0, 0, 120, + new PsoStructureEntryInfo((MetaName)2970917480, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)256711860, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2716737212, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1153272400, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)11232964, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1680843526, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1294539981, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3548711893, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3299300152, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1497386222, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)783496886, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2616989255, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)472852554, PsoDataType.Structure, 56, 0, MetaName.camFirstPersonAimCameraMetadataHeadingCorrection), + new PsoStructureEntryInfo((MetaName)907428778, PsoDataType.SInt, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)4143200730, PsoDataType.SInt, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)105496678, PsoDataType.SInt, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)2098811685, PsoDataType.SInt, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)1946159554, PsoDataType.SInt, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)3595423851, PsoDataType.SInt, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)153370955, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)1271201291, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)558015512, PsoDataType.UInt, 112, 0, 0) + ); + case MetaName.camFirstPersonShooterCameraMetadataSprintBreakOutSettings: + return new PsoStructureInfo(MetaName.camFirstPersonShooterCameraMetadataSprintBreakOutSettings, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)741085985, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)87271889, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)4190510062, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1438187592, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1823031239, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2144963791, PsoDataType.Float, 28, 0, 0) + ); + case MetaName.camFirstPersonHeadTrackingAimCameraMetadata: + return new PsoStructureInfo(MetaName.camFirstPersonHeadTrackingAimCameraMetadata, 0, 0, 128, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2884954151, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo((MetaName)1865815245, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)2755051531, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1025607184, PsoDataType.UInt, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)652273141, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1054008152, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3100931510, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)1238524664, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)3718710002, PsoDataType.Float3, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)3807713258, PsoDataType.Bool, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)509392339, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)4261179401, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)3137513888, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)3645576770, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)1348911901, PsoDataType.Bool, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)575433612, PsoDataType.SInt, 116, 0, 0) + ); + case MetaName.camThirdPersonPedAimCameraMetadata: + return new PsoStructureInfo(MetaName.camThirdPersonPedAimCameraMetadata, 0, 0, 1040, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2884954151, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo((MetaName)730193180, PsoDataType.String, 36, 7, 0), + new PsoStructureEntryInfo((MetaName)1443569911, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo((MetaName)60641442, PsoDataType.String, 44, 7, 0), + new PsoStructureEntryInfo((MetaName)1865815245, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2755051531, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3305154880, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)2846809829, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)3002500493, PsoDataType.Bool, 61, 0, 0), + new PsoStructureEntryInfo((MetaName)2521592812, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)4067016949, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)2406229624, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)727876548, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)3039556728, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)1708190798, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)1190961214, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)897419234, PsoDataType.UInt, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)150825038, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)4033450681, PsoDataType.Bool, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)2058076685, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)488216999, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)1406371922, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)2814402846, PsoDataType.String, 116, 7, 0), + new PsoStructureEntryInfo((MetaName)372575308, PsoDataType.Bool, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)799910142, PsoDataType.Bool, 121, 0, 0), + new PsoStructureEntryInfo((MetaName)1933402526, PsoDataType.Bool, 122, 0, 0), + new PsoStructureEntryInfo((MetaName)1022007033, PsoDataType.Structure, 128, 0, MetaName.camThirdPersonCameraMetadataCustomBoundingBoxSettings), + new PsoStructureEntryInfo((MetaName)2861227361, PsoDataType.Bool, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)1148495425, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)536202543, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)1065618425, PsoDataType.Structure, 176, 0, MetaName.camThirdPersonCameraMetadataBasePivotPosition), + new PsoStructureEntryInfo((MetaName)3256568637, PsoDataType.Structure, 272, 0, MetaName.camThirdPersonCameraMetadataPivotPosition), + new PsoStructureEntryInfo((MetaName)588927535, PsoDataType.Structure, 320, 0, MetaName.camThirdPersonCameraMetadataPivotOverBoungingBoxSettings), + new PsoStructureEntryInfo((MetaName)2014345705, PsoDataType.Float, 344, 0, 0), + new PsoStructureEntryInfo((MetaName)3982287448, PsoDataType.Float, 348, 0, 0), + new PsoStructureEntryInfo((MetaName)2449849624, PsoDataType.Float, 352, 0, 0), + new PsoStructureEntryInfo((MetaName)695725580, PsoDataType.Float, 356, 0, 0), + new PsoStructureEntryInfo((MetaName)1397182427, PsoDataType.Float, 360, 0, 0), + new PsoStructureEntryInfo((MetaName)881872463, PsoDataType.Bool, 364, 0, 0), + new PsoStructureEntryInfo((MetaName)177572622, PsoDataType.Float, 368, 0, 0), + new PsoStructureEntryInfo((MetaName)560700931, PsoDataType.Float, 372, 0, 0), + new PsoStructureEntryInfo((MetaName)1828892401, PsoDataType.Float2, 376, 0, 0), + new PsoStructureEntryInfo((MetaName)2829148759, PsoDataType.Float, 384, 0, 0), + new PsoStructureEntryInfo((MetaName)1084689577, PsoDataType.Float, 388, 0, 0), + new PsoStructureEntryInfo((MetaName)3978450060, PsoDataType.Float, 392, 0, 0), + new PsoStructureEntryInfo((MetaName)1991191506, PsoDataType.Structure, 400, 0, MetaName.camThirdPersonCameraMetadataBuoyancySettings), + new PsoStructureEntryInfo((MetaName)1949881438, PsoDataType.Bool, 448, 0, 0), + new PsoStructureEntryInfo((MetaName)3863307203, PsoDataType.Bool, 449, 0, 0), + new PsoStructureEntryInfo((MetaName)3696538081, PsoDataType.Bool, 450, 0, 0), + new PsoStructureEntryInfo((MetaName)2213127338, PsoDataType.Bool, 451, 0, 0), + new PsoStructureEntryInfo((MetaName)724966028, PsoDataType.Bool, 452, 0, 0), + new PsoStructureEntryInfo((MetaName)2696635175, PsoDataType.Float, 456, 0, 0), + new PsoStructureEntryInfo((MetaName)1976571596, PsoDataType.Float, 460, 0, 0), + new PsoStructureEntryInfo((MetaName)551575094, PsoDataType.Float, 464, 0, 0), + new PsoStructureEntryInfo((MetaName)1557769430, PsoDataType.Float, 468, 0, 0), + new PsoStructureEntryInfo((MetaName)4155454260, PsoDataType.Float3, 480, 0, 0), + new PsoStructureEntryInfo((MetaName)4194152221, PsoDataType.Float3, 496, 0, 0), + new PsoStructureEntryInfo((MetaName)2702878862, PsoDataType.Bool, 512, 0, 0), + new PsoStructureEntryInfo((MetaName)1998689777, PsoDataType.Bool, 513, 0, 0), + new PsoStructureEntryInfo((MetaName)2235540893, PsoDataType.Bool, 514, 0, 0), + new PsoStructureEntryInfo((MetaName)3479639237, PsoDataType.Float3, 528, 0, 0), + new PsoStructureEntryInfo((MetaName)1496115250, PsoDataType.Float, 544, 0, 0), + new PsoStructureEntryInfo((MetaName)340312382, PsoDataType.Structure, 552, 0, MetaName.camThirdPersonCameraMetadataCollisionFallBackPosition), + new PsoStructureEntryInfo((MetaName)4279727627, PsoDataType.Float, 592, 0, 0), + new PsoStructureEntryInfo((MetaName)823526659, PsoDataType.Bool, 596, 0, 0), + new PsoStructureEntryInfo((MetaName)3507950586, PsoDataType.Float, 600, 0, 0), + new PsoStructureEntryInfo((MetaName)3397058689, PsoDataType.Float, 604, 0, 0), + new PsoStructureEntryInfo((MetaName)227846107, PsoDataType.Structure, 608, 0, MetaName.camThirdPersonCameraMetadataVehicleOnTopOfVehicleCollisionSettings), + new PsoStructureEntryInfo((MetaName)3658085406, PsoDataType.Float, 632, 0, 0), + new PsoStructureEntryInfo((MetaName)1654683326, PsoDataType.Float2, 636, 0, 0), + new PsoStructureEntryInfo((MetaName)1974814289, PsoDataType.Float2, 644, 0, 0), + new PsoStructureEntryInfo((MetaName)1778852906, PsoDataType.Float, 652, 0, 0), + new PsoStructureEntryInfo((MetaName)158553507, PsoDataType.Float, 656, 0, 0), + new PsoStructureEntryInfo((MetaName)3300166924, PsoDataType.Structure, 664, 0, MetaName.camThirdPersonCameraMetadataLookOverSettings), + new PsoStructureEntryInfo((MetaName)2793581079, PsoDataType.Bool, 688, 0, 0), + new PsoStructureEntryInfo((MetaName)2111969249, PsoDataType.Float2, 692, 0, 0), + new PsoStructureEntryInfo((MetaName)3068587259, PsoDataType.Float, 700, 0, 0), + new PsoStructureEntryInfo((MetaName)293341517, PsoDataType.Float, 704, 0, 0), + new PsoStructureEntryInfo((MetaName)3607038158, PsoDataType.Float, 708, 0, 0), + new PsoStructureEntryInfo((MetaName)4039533147, PsoDataType.Float2, 712, 0, 0), + new PsoStructureEntryInfo((MetaName)1356521412, PsoDataType.Float2, 720, 0, 0), + new PsoStructureEntryInfo((MetaName)3610920953, PsoDataType.Structure, 728, 0, MetaName.camThirdPersonCameraMetadataStealthZoomSettings), + new PsoStructureEntryInfo((MetaName)1947299079, PsoDataType.Structure, 752, 0, MetaName.camThirdPersonCameraMetadataQuadrupedalHeightSpring), + new PsoStructureEntryInfo((MetaName)490368749, PsoDataType.String, 776, 7, 0), + new PsoStructureEntryInfo((MetaName)2122226771, PsoDataType.Bool, 780, 0, 0), + new PsoStructureEntryInfo((MetaName)2833081775, PsoDataType.String, 784, 7, 0), + new PsoStructureEntryInfo((MetaName)1348911901, PsoDataType.Bool, 788, 0, 0), + new PsoStructureEntryInfo((MetaName)870186590, PsoDataType.Bool, 789, 0, 0), + new PsoStructureEntryInfo((MetaName)4238055063, PsoDataType.Bool, 790, 0, 0), + new PsoStructureEntryInfo((MetaName)2917952843, PsoDataType.Bool, 791, 0, 0), + new PsoStructureEntryInfo((MetaName)1301399000, PsoDataType.Bool, 792, 0, 0), + new PsoStructureEntryInfo((MetaName)1419212045, PsoDataType.Bool, 793, 0, 0), + new PsoStructureEntryInfo((MetaName)114759485, PsoDataType.Bool, 794, 0, 0), + new PsoStructureEntryInfo((MetaName)1634093344, PsoDataType.Float, 796, 0, 0), + new PsoStructureEntryInfo((MetaName)2294924343, PsoDataType.Float, 800, 0, 0), + new PsoStructureEntryInfo((MetaName)9436207, PsoDataType.Float, 804, 0, 0), + new PsoStructureEntryInfo((MetaName)1350912934, PsoDataType.Float, 808, 0, 0), + new PsoStructureEntryInfo((MetaName)70391041, PsoDataType.Float, 812, 0, 0), + new PsoStructureEntryInfo((MetaName)2783842060, PsoDataType.Float, 816, 0, 0), + new PsoStructureEntryInfo((MetaName)3397272914, PsoDataType.UInt, 820, 0, 0), + new PsoStructureEntryInfo((MetaName)1807116888, PsoDataType.UInt, 824, 0, 0), + new PsoStructureEntryInfo((MetaName)3048647846, PsoDataType.UInt, 828, 0, 0), + new PsoStructureEntryInfo((MetaName)3132164856, PsoDataType.UInt, 832, 0, 0), + new PsoStructureEntryInfo((MetaName)4207333442, PsoDataType.Float, 836, 0, 0), + new PsoStructureEntryInfo((MetaName)1717370547, PsoDataType.Float, 840, 0, 0), + new PsoStructureEntryInfo((MetaName)447200092, PsoDataType.Float, 844, 0, 0), + new PsoStructureEntryInfo((MetaName)3347315427, PsoDataType.Float, 848, 0, 0), + new PsoStructureEntryInfo((MetaName)4137686847, PsoDataType.Bool, 852, 0, 0), + new PsoStructureEntryInfo((MetaName)3921296525, PsoDataType.Float, 856, 0, 0), + new PsoStructureEntryInfo((MetaName)2840529796, PsoDataType.Float, 860, 0, 0), + new PsoStructureEntryInfo((MetaName)2535634527, PsoDataType.Float, 864, 0, 0), + new PsoStructureEntryInfo((MetaName)1225855688, PsoDataType.Float, 868, 0, 0), + new PsoStructureEntryInfo((MetaName)2209545096, PsoDataType.String, 880, 7, 0), + new PsoStructureEntryInfo((MetaName)1635236307, PsoDataType.Structure, 888, 0, MetaName.camThirdPersonPedAimCameraMetadataLockOnTargetDampingSettings), + new PsoStructureEntryInfo((MetaName)4165908011, PsoDataType.Structure, 928, 0, MetaName.camThirdPersonPedAimCameraMetadataLockOnOrbitDistanceSettings), + new PsoStructureEntryInfo((MetaName)1399337810, PsoDataType.Float3, 976, 0, 0), + new PsoStructureEntryInfo((MetaName)442114217, PsoDataType.Float3, 992, 0, 0), + new PsoStructureEntryInfo((MetaName)575433612, PsoDataType.SInt, 1008, 0, 0), + new PsoStructureEntryInfo((MetaName)3180847895, PsoDataType.Bool, 1012, 0, 0), + new PsoStructureEntryInfo((MetaName)184490319, PsoDataType.Bool, 1013, 0, 0), + new PsoStructureEntryInfo((MetaName)1057367158, PsoDataType.String, 1016, 7, 0), + new PsoStructureEntryInfo((MetaName)309842601, PsoDataType.Float, 1020, 0, 0), + new PsoStructureEntryInfo((MetaName)3770307856, PsoDataType.Bool, 1024, 0, 0) + ); + case MetaName.camThirdPersonPedAimCameraMetadataLockOnTargetDampingSettings: + return new PsoStructureInfo(MetaName.camThirdPersonPedAimCameraMetadataLockOnTargetDampingSettings, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)2339455115, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1625429307, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2414166560, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1044796272, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)122790262, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)399773061, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)340673450, PsoDataType.Float, 32, 0, 0) + ); + case MetaName.camThirdPersonPedAimCameraMetadataLockOnOrbitDistanceSettings: + return new PsoStructureInfo(MetaName.camThirdPersonPedAimCameraMetadataLockOnOrbitDistanceSettings, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)1357431466, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)4280147981, PsoDataType.Float2, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)1871429041, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2983717675, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1300443955, PsoDataType.Float, 32, 0, 0) + ); + case MetaName.camThirdPersonPedAssistedAimCameraMetadata: + return new PsoStructureInfo(MetaName.camThirdPersonPedAssistedAimCameraMetadata, 0, 0, 1584, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2884954151, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo((MetaName)730193180, PsoDataType.String, 36, 7, 0), + new PsoStructureEntryInfo((MetaName)1443569911, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo((MetaName)60641442, PsoDataType.String, 44, 7, 0), + new PsoStructureEntryInfo((MetaName)1865815245, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2755051531, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3305154880, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)2846809829, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)3002500493, PsoDataType.Bool, 61, 0, 0), + new PsoStructureEntryInfo((MetaName)2521592812, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)4067016949, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)2406229624, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)727876548, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)3039556728, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)1708190798, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)1190961214, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)897419234, PsoDataType.UInt, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)150825038, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)4033450681, PsoDataType.Bool, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)2058076685, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)488216999, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)1406371922, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)2814402846, PsoDataType.String, 116, 7, 0), + new PsoStructureEntryInfo((MetaName)372575308, PsoDataType.Bool, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)799910142, PsoDataType.Bool, 121, 0, 0), + new PsoStructureEntryInfo((MetaName)1933402526, PsoDataType.Bool, 122, 0, 0), + new PsoStructureEntryInfo((MetaName)1022007033, PsoDataType.Structure, 128, 0, MetaName.camThirdPersonCameraMetadataCustomBoundingBoxSettings), + new PsoStructureEntryInfo((MetaName)2861227361, PsoDataType.Bool, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)1148495425, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)536202543, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)1065618425, PsoDataType.Structure, 176, 0, MetaName.camThirdPersonCameraMetadataBasePivotPosition), + new PsoStructureEntryInfo((MetaName)3256568637, PsoDataType.Structure, 272, 0, MetaName.camThirdPersonCameraMetadataPivotPosition), + new PsoStructureEntryInfo((MetaName)588927535, PsoDataType.Structure, 320, 0, MetaName.camThirdPersonCameraMetadataPivotOverBoungingBoxSettings), + new PsoStructureEntryInfo((MetaName)2014345705, PsoDataType.Float, 344, 0, 0), + new PsoStructureEntryInfo((MetaName)3982287448, PsoDataType.Float, 348, 0, 0), + new PsoStructureEntryInfo((MetaName)2449849624, PsoDataType.Float, 352, 0, 0), + new PsoStructureEntryInfo((MetaName)695725580, PsoDataType.Float, 356, 0, 0), + new PsoStructureEntryInfo((MetaName)1397182427, PsoDataType.Float, 360, 0, 0), + new PsoStructureEntryInfo((MetaName)881872463, PsoDataType.Bool, 364, 0, 0), + new PsoStructureEntryInfo((MetaName)177572622, PsoDataType.Float, 368, 0, 0), + new PsoStructureEntryInfo((MetaName)560700931, PsoDataType.Float, 372, 0, 0), + new PsoStructureEntryInfo((MetaName)1828892401, PsoDataType.Float2, 376, 0, 0), + new PsoStructureEntryInfo((MetaName)2829148759, PsoDataType.Float, 384, 0, 0), + new PsoStructureEntryInfo((MetaName)1084689577, PsoDataType.Float, 388, 0, 0), + new PsoStructureEntryInfo((MetaName)3978450060, PsoDataType.Float, 392, 0, 0), + new PsoStructureEntryInfo((MetaName)1991191506, PsoDataType.Structure, 400, 0, MetaName.camThirdPersonCameraMetadataBuoyancySettings), + new PsoStructureEntryInfo((MetaName)1949881438, PsoDataType.Bool, 448, 0, 0), + new PsoStructureEntryInfo((MetaName)3863307203, PsoDataType.Bool, 449, 0, 0), + new PsoStructureEntryInfo((MetaName)3696538081, PsoDataType.Bool, 450, 0, 0), + new PsoStructureEntryInfo((MetaName)2213127338, PsoDataType.Bool, 451, 0, 0), + new PsoStructureEntryInfo((MetaName)724966028, PsoDataType.Bool, 452, 0, 0), + new PsoStructureEntryInfo((MetaName)2696635175, PsoDataType.Float, 456, 0, 0), + new PsoStructureEntryInfo((MetaName)1976571596, PsoDataType.Float, 460, 0, 0), + new PsoStructureEntryInfo((MetaName)551575094, PsoDataType.Float, 464, 0, 0), + new PsoStructureEntryInfo((MetaName)1557769430, PsoDataType.Float, 468, 0, 0), + new PsoStructureEntryInfo((MetaName)4155454260, PsoDataType.Float3, 480, 0, 0), + new PsoStructureEntryInfo((MetaName)4194152221, PsoDataType.Float3, 496, 0, 0), + new PsoStructureEntryInfo((MetaName)2702878862, PsoDataType.Bool, 512, 0, 0), + new PsoStructureEntryInfo((MetaName)1998689777, PsoDataType.Bool, 513, 0, 0), + new PsoStructureEntryInfo((MetaName)2235540893, PsoDataType.Bool, 514, 0, 0), + new PsoStructureEntryInfo((MetaName)3479639237, PsoDataType.Float3, 528, 0, 0), + new PsoStructureEntryInfo((MetaName)1496115250, PsoDataType.Float, 544, 0, 0), + new PsoStructureEntryInfo((MetaName)340312382, PsoDataType.Structure, 552, 0, MetaName.camThirdPersonCameraMetadataCollisionFallBackPosition), + new PsoStructureEntryInfo((MetaName)4279727627, PsoDataType.Float, 592, 0, 0), + new PsoStructureEntryInfo((MetaName)823526659, PsoDataType.Bool, 596, 0, 0), + new PsoStructureEntryInfo((MetaName)3507950586, PsoDataType.Float, 600, 0, 0), + new PsoStructureEntryInfo((MetaName)3397058689, PsoDataType.Float, 604, 0, 0), + new PsoStructureEntryInfo((MetaName)227846107, PsoDataType.Structure, 608, 0, MetaName.camThirdPersonCameraMetadataVehicleOnTopOfVehicleCollisionSettings), + new PsoStructureEntryInfo((MetaName)3658085406, PsoDataType.Float, 632, 0, 0), + new PsoStructureEntryInfo((MetaName)1654683326, PsoDataType.Float2, 636, 0, 0), + new PsoStructureEntryInfo((MetaName)1974814289, PsoDataType.Float2, 644, 0, 0), + new PsoStructureEntryInfo((MetaName)1778852906, PsoDataType.Float, 652, 0, 0), + new PsoStructureEntryInfo((MetaName)158553507, PsoDataType.Float, 656, 0, 0), + new PsoStructureEntryInfo((MetaName)3300166924, PsoDataType.Structure, 664, 0, MetaName.camThirdPersonCameraMetadataLookOverSettings), + new PsoStructureEntryInfo((MetaName)2793581079, PsoDataType.Bool, 688, 0, 0), + new PsoStructureEntryInfo((MetaName)2111969249, PsoDataType.Float2, 692, 0, 0), + new PsoStructureEntryInfo((MetaName)3068587259, PsoDataType.Float, 700, 0, 0), + new PsoStructureEntryInfo((MetaName)293341517, PsoDataType.Float, 704, 0, 0), + new PsoStructureEntryInfo((MetaName)3607038158, PsoDataType.Float, 708, 0, 0), + new PsoStructureEntryInfo((MetaName)4039533147, PsoDataType.Float2, 712, 0, 0), + new PsoStructureEntryInfo((MetaName)1356521412, PsoDataType.Float2, 720, 0, 0), + new PsoStructureEntryInfo((MetaName)3610920953, PsoDataType.Structure, 728, 0, MetaName.camThirdPersonCameraMetadataStealthZoomSettings), + new PsoStructureEntryInfo((MetaName)1947299079, PsoDataType.Structure, 752, 0, MetaName.camThirdPersonCameraMetadataQuadrupedalHeightSpring), + new PsoStructureEntryInfo((MetaName)490368749, PsoDataType.String, 776, 7, 0), + new PsoStructureEntryInfo((MetaName)2122226771, PsoDataType.Bool, 780, 0, 0), + new PsoStructureEntryInfo((MetaName)2833081775, PsoDataType.String, 784, 7, 0), + new PsoStructureEntryInfo((MetaName)1348911901, PsoDataType.Bool, 788, 0, 0), + new PsoStructureEntryInfo((MetaName)870186590, PsoDataType.Bool, 789, 0, 0), + new PsoStructureEntryInfo((MetaName)4238055063, PsoDataType.Bool, 790, 0, 0), + new PsoStructureEntryInfo((MetaName)2917952843, PsoDataType.Bool, 791, 0, 0), + new PsoStructureEntryInfo((MetaName)1301399000, PsoDataType.Bool, 792, 0, 0), + new PsoStructureEntryInfo((MetaName)1419212045, PsoDataType.Bool, 793, 0, 0), + new PsoStructureEntryInfo((MetaName)114759485, PsoDataType.Bool, 794, 0, 0), + new PsoStructureEntryInfo((MetaName)1634093344, PsoDataType.Float, 796, 0, 0), + new PsoStructureEntryInfo((MetaName)2294924343, PsoDataType.Float, 800, 0, 0), + new PsoStructureEntryInfo((MetaName)9436207, PsoDataType.Float, 804, 0, 0), + new PsoStructureEntryInfo((MetaName)1350912934, PsoDataType.Float, 808, 0, 0), + new PsoStructureEntryInfo((MetaName)70391041, PsoDataType.Float, 812, 0, 0), + new PsoStructureEntryInfo((MetaName)2783842060, PsoDataType.Float, 816, 0, 0), + new PsoStructureEntryInfo((MetaName)3397272914, PsoDataType.UInt, 820, 0, 0), + new PsoStructureEntryInfo((MetaName)1807116888, PsoDataType.UInt, 824, 0, 0), + new PsoStructureEntryInfo((MetaName)3048647846, PsoDataType.UInt, 828, 0, 0), + new PsoStructureEntryInfo((MetaName)3132164856, PsoDataType.UInt, 832, 0, 0), + new PsoStructureEntryInfo((MetaName)4207333442, PsoDataType.Float, 836, 0, 0), + new PsoStructureEntryInfo((MetaName)1717370547, PsoDataType.Float, 840, 0, 0), + new PsoStructureEntryInfo((MetaName)447200092, PsoDataType.Float, 844, 0, 0), + new PsoStructureEntryInfo((MetaName)3347315427, PsoDataType.Float, 848, 0, 0), + new PsoStructureEntryInfo((MetaName)4137686847, PsoDataType.Bool, 852, 0, 0), + new PsoStructureEntryInfo((MetaName)3921296525, PsoDataType.Float, 856, 0, 0), + new PsoStructureEntryInfo((MetaName)2840529796, PsoDataType.Float, 860, 0, 0), + new PsoStructureEntryInfo((MetaName)2535634527, PsoDataType.Float, 864, 0, 0), + new PsoStructureEntryInfo((MetaName)1225855688, PsoDataType.Float, 868, 0, 0), + new PsoStructureEntryInfo((MetaName)2209545096, PsoDataType.String, 880, 7, 0), + new PsoStructureEntryInfo((MetaName)1635236307, PsoDataType.Structure, 888, 0, MetaName.camThirdPersonPedAimCameraMetadataLockOnTargetDampingSettings), + new PsoStructureEntryInfo((MetaName)4165908011, PsoDataType.Structure, 928, 0, MetaName.camThirdPersonPedAimCameraMetadataLockOnOrbitDistanceSettings), + new PsoStructureEntryInfo((MetaName)1399337810, PsoDataType.Float3, 976, 0, 0), + new PsoStructureEntryInfo((MetaName)442114217, PsoDataType.Float3, 992, 0, 0), + new PsoStructureEntryInfo((MetaName)575433612, PsoDataType.SInt, 1008, 0, 0), + new PsoStructureEntryInfo((MetaName)3180847895, PsoDataType.Bool, 1012, 0, 0), + new PsoStructureEntryInfo((MetaName)184490319, PsoDataType.Bool, 1013, 0, 0), + new PsoStructureEntryInfo((MetaName)1057367158, PsoDataType.String, 1016, 7, 0), + new PsoStructureEntryInfo((MetaName)309842601, PsoDataType.Float, 1020, 0, 0), + new PsoStructureEntryInfo((MetaName)3770307856, PsoDataType.Bool, 1024, 0, 0), + new PsoStructureEntryInfo((MetaName)2612404486, PsoDataType.Bool, 1040, 0, 0), + new PsoStructureEntryInfo((MetaName)3464513788, PsoDataType.String, 1044, 7, 0), + new PsoStructureEntryInfo((MetaName)3165832172, PsoDataType.Float, 1048, 0, 0), + new PsoStructureEntryInfo((MetaName)313901382, PsoDataType.Float, 1052, 0, 0), + new PsoStructureEntryInfo((MetaName)3456520914, PsoDataType.Float, 1056, 0, 0), + new PsoStructureEntryInfo((MetaName)3227758752, PsoDataType.Float, 1060, 0, 0), + new PsoStructureEntryInfo((MetaName)2595201884, PsoDataType.Structure, 1064, 0, MetaName.camThirdPersonPedAssistedAimCameraShakeActivityScalingSettings), + new PsoStructureEntryInfo((MetaName)1699579049, PsoDataType.Structure, 1088, 0, MetaName.camThirdPersonPedAssistedAimCameraRunningShakeSettings), + new PsoStructureEntryInfo((MetaName)2514985597, PsoDataType.Structure, 1112, 0, MetaName.camThirdPersonPedAssistedAimCameraRunningShakeSettings), + new PsoStructureEntryInfo((MetaName)3459655185, PsoDataType.Structure, 1136, 0, MetaName.camThirdPersonPedAssistedAimCameraPivotScalingSettings), + new PsoStructureEntryInfo((MetaName)1039438125, PsoDataType.Structure, 1192, 0, MetaName.camThirdPersonPedAssistedAimCameraShootingFocusSettings), + new PsoStructureEntryInfo((MetaName)2331386580, PsoDataType.Structure, 1248, 0, MetaName.camThirdPersonPedAssistedAimCameraCinematicMomentSettings), + new PsoStructureEntryInfo((MetaName)3975806377, PsoDataType.Structure, 1432, 0, MetaName.camThirdPersonPedAssistedAimCameraRecoilShakeScalingSettings), + new PsoStructureEntryInfo((MetaName)2579888707, PsoDataType.Structure, 1464, 0, MetaName.camThirdPersonPedAssistedAimCameraInCoverSettings) + ); + case MetaName.camThirdPersonPedAssistedAimCameraShakeActivityScalingSettings: + return new PsoStructureInfo(MetaName.camThirdPersonPedAssistedAimCameraShakeActivityScalingSettings, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)2919368248, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2111282409, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)165735146, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.camThirdPersonPedAssistedAimCameraRunningShakeSettings: + return new PsoStructureInfo(MetaName.camThirdPersonPedAssistedAimCameraRunningShakeSettings, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3172666582, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)272708601, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3083741385, PsoDataType.Bool, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2434404012, PsoDataType.Bool, 21, 0, 0), + new PsoStructureEntryInfo((MetaName)1424595128, PsoDataType.Bool, 22, 0, 0) + ); + case MetaName.camThirdPersonPedAssistedAimCameraPivotScalingSettings: + return new PsoStructureInfo(MetaName.camThirdPersonPedAssistedAimCameraPivotScalingSettings, 0, 0, 56, + new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)3290868314, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3357849814, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1239610477, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)4266810853, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2490035552, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1582111169, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)305674207, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2119254607, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)3185812029, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2740464011, PsoDataType.Float, 52, 0, 0) + ); + case MetaName.camThirdPersonPedAssistedAimCameraShootingFocusSettings: + return new PsoStructureInfo(MetaName.camThirdPersonPedAssistedAimCameraShootingFocusSettings, 0, 0, 56, + new PsoStructureEntryInfo((MetaName)1778381348, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)352609433, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2111282409, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)165735146, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2503271690, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2014345705, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3982287448, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)2449849624, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)695725580, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)3357849814, PsoDataType.Float, 48, 0, 0) + ); + case MetaName.camThirdPersonPedAssistedAimCameraCinematicMomentSettings: + return new PsoStructureInfo(MetaName.camThirdPersonPedAssistedAimCameraCinematicMomentSettings, 0, 0, 184, + new PsoStructureEntryInfo((MetaName)3112353702, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)3298892127, PsoDataType.UInt, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3924454742, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2215779446, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)917560913, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1705773296, PsoDataType.UInt, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3495762240, PsoDataType.UInt, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2011477591, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3944656129, PsoDataType.UInt, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)3273599536, PsoDataType.String, 44, 7, 0), + new PsoStructureEntryInfo((MetaName)447392537, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1293989475, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3934763180, PsoDataType.Structure, 56, 0, MetaName.camThirdPersonPedAssistedAimCameraLockOnAlignmentSettings), + new PsoStructureEntryInfo((MetaName)4209943355, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)3222932576, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)1411402256, PsoDataType.Structure, 120, 0, MetaName.camThirdPersonPedAssistedAimCameraPlayerFramingSettings), + new PsoStructureEntryInfo((MetaName)2014345705, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo((MetaName)3982287448, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo((MetaName)2449849624, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo((MetaName)695725580, PsoDataType.Float, 180, 0, 0) + ); + case MetaName.camThirdPersonPedAssistedAimCameraLockOnAlignmentSettings: + return new PsoStructureInfo(MetaName.camThirdPersonPedAssistedAimCameraLockOnAlignmentSettings, 0, 0, 56, + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2192037365, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)1207772736, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1953981041, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1252108818, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3067708566, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3928624067, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)4117544351, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3546588287, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2433975532, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2894326732, PsoDataType.Float, 48, 0, 0) + ); + case MetaName.camThirdPersonPedAssistedAimCameraPlayerFramingSettings: + return new PsoStructureInfo(MetaName.camThirdPersonPedAssistedAimCameraPlayerFramingSettings, 0, 0, 48, + new PsoStructureEntryInfo((MetaName)1512162309, PsoDataType.UInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)75961662, PsoDataType.UInt, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)4289809678, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1918481730, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2095341670, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3067708566, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3928624067, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)4117544351, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3648026356, PsoDataType.Float, 40, 0, 0) + ); + case MetaName.camThirdPersonPedAssistedAimCameraRecoilShakeScalingSettings: + return new PsoStructureInfo(MetaName.camThirdPersonPedAssistedAimCameraRecoilShakeScalingSettings, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)632884413, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)3501089975, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)1841607681, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)405521980, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2308368369, PsoDataType.Float, 24, 0, 0) + ); + case MetaName.camThirdPersonPedAssistedAimCameraInCoverSettings: + return new PsoStructureInfo(MetaName.camThirdPersonPedAssistedAimCameraInCoverSettings, 0, 0, 112, + new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2014345705, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3982287448, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3044106186, PsoDataType.Bool, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2342994624, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2363962395, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3996729234, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)2974603259, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1163820100, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)1153320978, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)887750583, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3579895798, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3038154213, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)795086429, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)2305231569, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)2043206239, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)1283135688, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)3878807616, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)3640542370, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)3758922505, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)1764223557, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)3214654546, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)1111260888, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)3050977735, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)1185331567, PsoDataType.Float, 108, 0, 0) + ); + case MetaName.camThirdPersonPedAimInCoverCameraMetadata: + return new PsoStructureInfo(MetaName.camThirdPersonPedAimInCoverCameraMetadata, 0, 0, 1248, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2884954151, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo((MetaName)730193180, PsoDataType.String, 36, 7, 0), + new PsoStructureEntryInfo((MetaName)1443569911, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo((MetaName)60641442, PsoDataType.String, 44, 7, 0), + new PsoStructureEntryInfo((MetaName)1865815245, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2755051531, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3305154880, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)2846809829, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)3002500493, PsoDataType.Bool, 61, 0, 0), + new PsoStructureEntryInfo((MetaName)2521592812, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)4067016949, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)2406229624, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)727876548, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)3039556728, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)1708190798, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)1190961214, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)897419234, PsoDataType.UInt, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)150825038, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)4033450681, PsoDataType.Bool, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)2058076685, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)488216999, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)1406371922, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)2814402846, PsoDataType.String, 116, 7, 0), + new PsoStructureEntryInfo((MetaName)372575308, PsoDataType.Bool, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)799910142, PsoDataType.Bool, 121, 0, 0), + new PsoStructureEntryInfo((MetaName)1933402526, PsoDataType.Bool, 122, 0, 0), + new PsoStructureEntryInfo((MetaName)1022007033, PsoDataType.Structure, 128, 0, MetaName.camThirdPersonCameraMetadataCustomBoundingBoxSettings), + new PsoStructureEntryInfo((MetaName)2861227361, PsoDataType.Bool, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)1148495425, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)536202543, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)1065618425, PsoDataType.Structure, 176, 0, MetaName.camThirdPersonCameraMetadataBasePivotPosition), + new PsoStructureEntryInfo((MetaName)3256568637, PsoDataType.Structure, 272, 0, MetaName.camThirdPersonCameraMetadataPivotPosition), + new PsoStructureEntryInfo((MetaName)588927535, PsoDataType.Structure, 320, 0, MetaName.camThirdPersonCameraMetadataPivotOverBoungingBoxSettings), + new PsoStructureEntryInfo((MetaName)2014345705, PsoDataType.Float, 344, 0, 0), + new PsoStructureEntryInfo((MetaName)3982287448, PsoDataType.Float, 348, 0, 0), + new PsoStructureEntryInfo((MetaName)2449849624, PsoDataType.Float, 352, 0, 0), + new PsoStructureEntryInfo((MetaName)695725580, PsoDataType.Float, 356, 0, 0), + new PsoStructureEntryInfo((MetaName)1397182427, PsoDataType.Float, 360, 0, 0), + new PsoStructureEntryInfo((MetaName)881872463, PsoDataType.Bool, 364, 0, 0), + new PsoStructureEntryInfo((MetaName)177572622, PsoDataType.Float, 368, 0, 0), + new PsoStructureEntryInfo((MetaName)560700931, PsoDataType.Float, 372, 0, 0), + new PsoStructureEntryInfo((MetaName)1828892401, PsoDataType.Float2, 376, 0, 0), + new PsoStructureEntryInfo((MetaName)2829148759, PsoDataType.Float, 384, 0, 0), + new PsoStructureEntryInfo((MetaName)1084689577, PsoDataType.Float, 388, 0, 0), + new PsoStructureEntryInfo((MetaName)3978450060, PsoDataType.Float, 392, 0, 0), + new PsoStructureEntryInfo((MetaName)1991191506, PsoDataType.Structure, 400, 0, MetaName.camThirdPersonCameraMetadataBuoyancySettings), + new PsoStructureEntryInfo((MetaName)1949881438, PsoDataType.Bool, 448, 0, 0), + new PsoStructureEntryInfo((MetaName)3863307203, PsoDataType.Bool, 449, 0, 0), + new PsoStructureEntryInfo((MetaName)3696538081, PsoDataType.Bool, 450, 0, 0), + new PsoStructureEntryInfo((MetaName)2213127338, PsoDataType.Bool, 451, 0, 0), + new PsoStructureEntryInfo((MetaName)724966028, PsoDataType.Bool, 452, 0, 0), + new PsoStructureEntryInfo((MetaName)2696635175, PsoDataType.Float, 456, 0, 0), + new PsoStructureEntryInfo((MetaName)1976571596, PsoDataType.Float, 460, 0, 0), + new PsoStructureEntryInfo((MetaName)551575094, PsoDataType.Float, 464, 0, 0), + new PsoStructureEntryInfo((MetaName)1557769430, PsoDataType.Float, 468, 0, 0), + new PsoStructureEntryInfo((MetaName)4155454260, PsoDataType.Float3, 480, 0, 0), + new PsoStructureEntryInfo((MetaName)4194152221, PsoDataType.Float3, 496, 0, 0), + new PsoStructureEntryInfo((MetaName)2702878862, PsoDataType.Bool, 512, 0, 0), + new PsoStructureEntryInfo((MetaName)1998689777, PsoDataType.Bool, 513, 0, 0), + new PsoStructureEntryInfo((MetaName)2235540893, PsoDataType.Bool, 514, 0, 0), + new PsoStructureEntryInfo((MetaName)3479639237, PsoDataType.Float3, 528, 0, 0), + new PsoStructureEntryInfo((MetaName)1496115250, PsoDataType.Float, 544, 0, 0), + new PsoStructureEntryInfo((MetaName)340312382, PsoDataType.Structure, 552, 0, MetaName.camThirdPersonCameraMetadataCollisionFallBackPosition), + new PsoStructureEntryInfo((MetaName)4279727627, PsoDataType.Float, 592, 0, 0), + new PsoStructureEntryInfo((MetaName)823526659, PsoDataType.Bool, 596, 0, 0), + new PsoStructureEntryInfo((MetaName)3507950586, PsoDataType.Float, 600, 0, 0), + new PsoStructureEntryInfo((MetaName)3397058689, PsoDataType.Float, 604, 0, 0), + new PsoStructureEntryInfo((MetaName)227846107, PsoDataType.Structure, 608, 0, MetaName.camThirdPersonCameraMetadataVehicleOnTopOfVehicleCollisionSettings), + new PsoStructureEntryInfo((MetaName)3658085406, PsoDataType.Float, 632, 0, 0), + new PsoStructureEntryInfo((MetaName)1654683326, PsoDataType.Float2, 636, 0, 0), + new PsoStructureEntryInfo((MetaName)1974814289, PsoDataType.Float2, 644, 0, 0), + new PsoStructureEntryInfo((MetaName)1778852906, PsoDataType.Float, 652, 0, 0), + new PsoStructureEntryInfo((MetaName)158553507, PsoDataType.Float, 656, 0, 0), + new PsoStructureEntryInfo((MetaName)3300166924, PsoDataType.Structure, 664, 0, MetaName.camThirdPersonCameraMetadataLookOverSettings), + new PsoStructureEntryInfo((MetaName)2793581079, PsoDataType.Bool, 688, 0, 0), + new PsoStructureEntryInfo((MetaName)2111969249, PsoDataType.Float2, 692, 0, 0), + new PsoStructureEntryInfo((MetaName)3068587259, PsoDataType.Float, 700, 0, 0), + new PsoStructureEntryInfo((MetaName)293341517, PsoDataType.Float, 704, 0, 0), + new PsoStructureEntryInfo((MetaName)3607038158, PsoDataType.Float, 708, 0, 0), + new PsoStructureEntryInfo((MetaName)4039533147, PsoDataType.Float2, 712, 0, 0), + new PsoStructureEntryInfo((MetaName)1356521412, PsoDataType.Float2, 720, 0, 0), + new PsoStructureEntryInfo((MetaName)3610920953, PsoDataType.Structure, 728, 0, MetaName.camThirdPersonCameraMetadataStealthZoomSettings), + new PsoStructureEntryInfo((MetaName)1947299079, PsoDataType.Structure, 752, 0, MetaName.camThirdPersonCameraMetadataQuadrupedalHeightSpring), + new PsoStructureEntryInfo((MetaName)490368749, PsoDataType.String, 776, 7, 0), + new PsoStructureEntryInfo((MetaName)2122226771, PsoDataType.Bool, 780, 0, 0), + new PsoStructureEntryInfo((MetaName)2833081775, PsoDataType.String, 784, 7, 0), + new PsoStructureEntryInfo((MetaName)1348911901, PsoDataType.Bool, 788, 0, 0), + new PsoStructureEntryInfo((MetaName)870186590, PsoDataType.Bool, 789, 0, 0), + new PsoStructureEntryInfo((MetaName)4238055063, PsoDataType.Bool, 790, 0, 0), + new PsoStructureEntryInfo((MetaName)2917952843, PsoDataType.Bool, 791, 0, 0), + new PsoStructureEntryInfo((MetaName)1301399000, PsoDataType.Bool, 792, 0, 0), + new PsoStructureEntryInfo((MetaName)1419212045, PsoDataType.Bool, 793, 0, 0), + new PsoStructureEntryInfo((MetaName)114759485, PsoDataType.Bool, 794, 0, 0), + new PsoStructureEntryInfo((MetaName)1634093344, PsoDataType.Float, 796, 0, 0), + new PsoStructureEntryInfo((MetaName)2294924343, PsoDataType.Float, 800, 0, 0), + new PsoStructureEntryInfo((MetaName)9436207, PsoDataType.Float, 804, 0, 0), + new PsoStructureEntryInfo((MetaName)1350912934, PsoDataType.Float, 808, 0, 0), + new PsoStructureEntryInfo((MetaName)70391041, PsoDataType.Float, 812, 0, 0), + new PsoStructureEntryInfo((MetaName)2783842060, PsoDataType.Float, 816, 0, 0), + new PsoStructureEntryInfo((MetaName)3397272914, PsoDataType.UInt, 820, 0, 0), + new PsoStructureEntryInfo((MetaName)1807116888, PsoDataType.UInt, 824, 0, 0), + new PsoStructureEntryInfo((MetaName)3048647846, PsoDataType.UInt, 828, 0, 0), + new PsoStructureEntryInfo((MetaName)3132164856, PsoDataType.UInt, 832, 0, 0), + new PsoStructureEntryInfo((MetaName)4207333442, PsoDataType.Float, 836, 0, 0), + new PsoStructureEntryInfo((MetaName)1717370547, PsoDataType.Float, 840, 0, 0), + new PsoStructureEntryInfo((MetaName)447200092, PsoDataType.Float, 844, 0, 0), + new PsoStructureEntryInfo((MetaName)3347315427, PsoDataType.Float, 848, 0, 0), + new PsoStructureEntryInfo((MetaName)4137686847, PsoDataType.Bool, 852, 0, 0), + new PsoStructureEntryInfo((MetaName)3921296525, PsoDataType.Float, 856, 0, 0), + new PsoStructureEntryInfo((MetaName)2840529796, PsoDataType.Float, 860, 0, 0), + new PsoStructureEntryInfo((MetaName)2535634527, PsoDataType.Float, 864, 0, 0), + new PsoStructureEntryInfo((MetaName)1225855688, PsoDataType.Float, 868, 0, 0), + new PsoStructureEntryInfo((MetaName)2209545096, PsoDataType.String, 880, 7, 0), + new PsoStructureEntryInfo((MetaName)1635236307, PsoDataType.Structure, 888, 0, MetaName.camThirdPersonPedAimCameraMetadataLockOnTargetDampingSettings), + new PsoStructureEntryInfo((MetaName)4165908011, PsoDataType.Structure, 928, 0, MetaName.camThirdPersonPedAimCameraMetadataLockOnOrbitDistanceSettings), + new PsoStructureEntryInfo((MetaName)1399337810, PsoDataType.Float3, 976, 0, 0), + new PsoStructureEntryInfo((MetaName)442114217, PsoDataType.Float3, 992, 0, 0), + new PsoStructureEntryInfo((MetaName)575433612, PsoDataType.SInt, 1008, 0, 0), + new PsoStructureEntryInfo((MetaName)3180847895, PsoDataType.Bool, 1012, 0, 0), + new PsoStructureEntryInfo((MetaName)184490319, PsoDataType.Bool, 1013, 0, 0), + new PsoStructureEntryInfo((MetaName)1057367158, PsoDataType.String, 1016, 7, 0), + new PsoStructureEntryInfo((MetaName)309842601, PsoDataType.Float, 1020, 0, 0), + new PsoStructureEntryInfo((MetaName)3770307856, PsoDataType.Bool, 1024, 0, 0), + new PsoStructureEntryInfo((MetaName)124410885, PsoDataType.Float, 1040, 0, 0), + new PsoStructureEntryInfo((MetaName)1852506764, PsoDataType.Float, 1044, 0, 0), + new PsoStructureEntryInfo((MetaName)1914946004, PsoDataType.Float, 1048, 0, 0), + new PsoStructureEntryInfo((MetaName)2125876256, PsoDataType.Float, 1052, 0, 0), + new PsoStructureEntryInfo((MetaName)3456376985, PsoDataType.Float, 1056, 0, 0), + new PsoStructureEntryInfo((MetaName)4241737797, PsoDataType.Float, 1060, 0, 0), + new PsoStructureEntryInfo((MetaName)2791057952, PsoDataType.Float, 1064, 0, 0), + new PsoStructureEntryInfo((MetaName)1336398630, PsoDataType.Bool, 1068, 0, 0), + new PsoStructureEntryInfo((MetaName)1847527244, PsoDataType.Float, 1072, 0, 0), + new PsoStructureEntryInfo((MetaName)364456330, PsoDataType.Float, 1076, 0, 0), + new PsoStructureEntryInfo((MetaName)3398320415, PsoDataType.Float, 1080, 0, 0), + new PsoStructureEntryInfo((MetaName)2699503170, PsoDataType.Float, 1084, 0, 0), + new PsoStructureEntryInfo((MetaName)2215910236, PsoDataType.Float, 1088, 0, 0), + new PsoStructureEntryInfo((MetaName)2140597790, PsoDataType.Float, 1092, 0, 0), + new PsoStructureEntryInfo((MetaName)2141354850, PsoDataType.Float, 1096, 0, 0), + new PsoStructureEntryInfo((MetaName)9125054, PsoDataType.Float, 1100, 0, 0), + new PsoStructureEntryInfo((MetaName)341585039, PsoDataType.Float, 1104, 0, 0), + new PsoStructureEntryInfo((MetaName)3090152422, PsoDataType.Float, 1108, 0, 0), + new PsoStructureEntryInfo((MetaName)3518102089, PsoDataType.Float, 1112, 0, 0), + new PsoStructureEntryInfo((MetaName)2714979879, PsoDataType.Float, 1116, 0, 0), + new PsoStructureEntryInfo((MetaName)4047322117, PsoDataType.Float, 1120, 0, 0), + new PsoStructureEntryInfo((MetaName)10419895, PsoDataType.Float, 1124, 0, 0), + new PsoStructureEntryInfo((MetaName)817394632, PsoDataType.Float2, 1128, 0, 0), + new PsoStructureEntryInfo((MetaName)3793303691, PsoDataType.Bool, 1136, 0, 0), + new PsoStructureEntryInfo((MetaName)891610436, PsoDataType.Float, 1140, 0, 0), + new PsoStructureEntryInfo((MetaName)1332592052, PsoDataType.Float, 1144, 0, 0), + new PsoStructureEntryInfo((MetaName)3712243434, PsoDataType.Float, 1148, 0, 0), + new PsoStructureEntryInfo((MetaName)2126717159, PsoDataType.Float, 1152, 0, 0), + new PsoStructureEntryInfo((MetaName)467663222, PsoDataType.Float, 1156, 0, 0), + new PsoStructureEntryInfo((MetaName)3920880465, PsoDataType.Float, 1160, 0, 0), + new PsoStructureEntryInfo((MetaName)1407257659, PsoDataType.UInt, 1164, 0, 0), + new PsoStructureEntryInfo((MetaName)1350298358, PsoDataType.Structure, 1168, 0, MetaName.camThirdPersonPedAimInCoverCameraMetadataLowCoverSettings), + new PsoStructureEntryInfo((MetaName)85936843, PsoDataType.Structure, 1208, 0, MetaName.camThirdPersonPedAimInCoverCameraMetadataAimingSettings) + ); + case MetaName.camThirdPersonPedAimInCoverCameraMetadataLowCoverSettings: + return new PsoStructureInfo(MetaName.camThirdPersonPedAimInCoverCameraMetadataLowCoverSettings, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)2111282409, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2811394796, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)165735146, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)388057725, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)4026985674, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2972801644, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2014345705, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3982287448, PsoDataType.Float, 36, 0, 0) + ); + case MetaName.camThirdPersonPedAimInCoverCameraMetadataAimingSettings: + return new PsoStructureInfo(MetaName.camThirdPersonPedAimInCoverCameraMetadataAimingSettings, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)651835053, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo((MetaName)3794685898, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3031220740, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)810186943, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2302950975, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2014345705, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3982287448, PsoDataType.Float, 36, 0, 0) + ); + case MetaName.camThirdPersonPedMeleeAimCameraMetadata: + return new PsoStructureInfo(MetaName.camThirdPersonPedMeleeAimCameraMetadata, 0, 0, 1088, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2884954151, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo((MetaName)730193180, PsoDataType.String, 36, 7, 0), + new PsoStructureEntryInfo((MetaName)1443569911, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo((MetaName)60641442, PsoDataType.String, 44, 7, 0), + new PsoStructureEntryInfo((MetaName)1865815245, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2755051531, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3305154880, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)2846809829, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)3002500493, PsoDataType.Bool, 61, 0, 0), + new PsoStructureEntryInfo((MetaName)2521592812, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)4067016949, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)2406229624, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)727876548, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)3039556728, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)1708190798, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)1190961214, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)897419234, PsoDataType.UInt, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)150825038, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)4033450681, PsoDataType.Bool, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)2058076685, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)488216999, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)1406371922, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)2814402846, PsoDataType.String, 116, 7, 0), + new PsoStructureEntryInfo((MetaName)372575308, PsoDataType.Bool, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)799910142, PsoDataType.Bool, 121, 0, 0), + new PsoStructureEntryInfo((MetaName)1933402526, PsoDataType.Bool, 122, 0, 0), + new PsoStructureEntryInfo((MetaName)1022007033, PsoDataType.Structure, 128, 0, MetaName.camThirdPersonCameraMetadataCustomBoundingBoxSettings), + new PsoStructureEntryInfo((MetaName)2861227361, PsoDataType.Bool, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)1148495425, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)536202543, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)1065618425, PsoDataType.Structure, 176, 0, MetaName.camThirdPersonCameraMetadataBasePivotPosition), + new PsoStructureEntryInfo((MetaName)3256568637, PsoDataType.Structure, 272, 0, MetaName.camThirdPersonCameraMetadataPivotPosition), + new PsoStructureEntryInfo((MetaName)588927535, PsoDataType.Structure, 320, 0, MetaName.camThirdPersonCameraMetadataPivotOverBoungingBoxSettings), + new PsoStructureEntryInfo((MetaName)2014345705, PsoDataType.Float, 344, 0, 0), + new PsoStructureEntryInfo((MetaName)3982287448, PsoDataType.Float, 348, 0, 0), + new PsoStructureEntryInfo((MetaName)2449849624, PsoDataType.Float, 352, 0, 0), + new PsoStructureEntryInfo((MetaName)695725580, PsoDataType.Float, 356, 0, 0), + new PsoStructureEntryInfo((MetaName)1397182427, PsoDataType.Float, 360, 0, 0), + new PsoStructureEntryInfo((MetaName)881872463, PsoDataType.Bool, 364, 0, 0), + new PsoStructureEntryInfo((MetaName)177572622, PsoDataType.Float, 368, 0, 0), + new PsoStructureEntryInfo((MetaName)560700931, PsoDataType.Float, 372, 0, 0), + new PsoStructureEntryInfo((MetaName)1828892401, PsoDataType.Float2, 376, 0, 0), + new PsoStructureEntryInfo((MetaName)2829148759, PsoDataType.Float, 384, 0, 0), + new PsoStructureEntryInfo((MetaName)1084689577, PsoDataType.Float, 388, 0, 0), + new PsoStructureEntryInfo((MetaName)3978450060, PsoDataType.Float, 392, 0, 0), + new PsoStructureEntryInfo((MetaName)1991191506, PsoDataType.Structure, 400, 0, MetaName.camThirdPersonCameraMetadataBuoyancySettings), + new PsoStructureEntryInfo((MetaName)1949881438, PsoDataType.Bool, 448, 0, 0), + new PsoStructureEntryInfo((MetaName)3863307203, PsoDataType.Bool, 449, 0, 0), + new PsoStructureEntryInfo((MetaName)3696538081, PsoDataType.Bool, 450, 0, 0), + new PsoStructureEntryInfo((MetaName)2213127338, PsoDataType.Bool, 451, 0, 0), + new PsoStructureEntryInfo((MetaName)724966028, PsoDataType.Bool, 452, 0, 0), + new PsoStructureEntryInfo((MetaName)2696635175, PsoDataType.Float, 456, 0, 0), + new PsoStructureEntryInfo((MetaName)1976571596, PsoDataType.Float, 460, 0, 0), + new PsoStructureEntryInfo((MetaName)551575094, PsoDataType.Float, 464, 0, 0), + new PsoStructureEntryInfo((MetaName)1557769430, PsoDataType.Float, 468, 0, 0), + new PsoStructureEntryInfo((MetaName)4155454260, PsoDataType.Float3, 480, 0, 0), + new PsoStructureEntryInfo((MetaName)4194152221, PsoDataType.Float3, 496, 0, 0), + new PsoStructureEntryInfo((MetaName)2702878862, PsoDataType.Bool, 512, 0, 0), + new PsoStructureEntryInfo((MetaName)1998689777, PsoDataType.Bool, 513, 0, 0), + new PsoStructureEntryInfo((MetaName)2235540893, PsoDataType.Bool, 514, 0, 0), + new PsoStructureEntryInfo((MetaName)3479639237, PsoDataType.Float3, 528, 0, 0), + new PsoStructureEntryInfo((MetaName)1496115250, PsoDataType.Float, 544, 0, 0), + new PsoStructureEntryInfo((MetaName)340312382, PsoDataType.Structure, 552, 0, MetaName.camThirdPersonCameraMetadataCollisionFallBackPosition), + new PsoStructureEntryInfo((MetaName)4279727627, PsoDataType.Float, 592, 0, 0), + new PsoStructureEntryInfo((MetaName)823526659, PsoDataType.Bool, 596, 0, 0), + new PsoStructureEntryInfo((MetaName)3507950586, PsoDataType.Float, 600, 0, 0), + new PsoStructureEntryInfo((MetaName)3397058689, PsoDataType.Float, 604, 0, 0), + new PsoStructureEntryInfo((MetaName)227846107, PsoDataType.Structure, 608, 0, MetaName.camThirdPersonCameraMetadataVehicleOnTopOfVehicleCollisionSettings), + new PsoStructureEntryInfo((MetaName)3658085406, PsoDataType.Float, 632, 0, 0), + new PsoStructureEntryInfo((MetaName)1654683326, PsoDataType.Float2, 636, 0, 0), + new PsoStructureEntryInfo((MetaName)1974814289, PsoDataType.Float2, 644, 0, 0), + new PsoStructureEntryInfo((MetaName)1778852906, PsoDataType.Float, 652, 0, 0), + new PsoStructureEntryInfo((MetaName)158553507, PsoDataType.Float, 656, 0, 0), + new PsoStructureEntryInfo((MetaName)3300166924, PsoDataType.Structure, 664, 0, MetaName.camThirdPersonCameraMetadataLookOverSettings), + new PsoStructureEntryInfo((MetaName)2793581079, PsoDataType.Bool, 688, 0, 0), + new PsoStructureEntryInfo((MetaName)2111969249, PsoDataType.Float2, 692, 0, 0), + new PsoStructureEntryInfo((MetaName)3068587259, PsoDataType.Float, 700, 0, 0), + new PsoStructureEntryInfo((MetaName)293341517, PsoDataType.Float, 704, 0, 0), + new PsoStructureEntryInfo((MetaName)3607038158, PsoDataType.Float, 708, 0, 0), + new PsoStructureEntryInfo((MetaName)4039533147, PsoDataType.Float2, 712, 0, 0), + new PsoStructureEntryInfo((MetaName)1356521412, PsoDataType.Float2, 720, 0, 0), + new PsoStructureEntryInfo((MetaName)3610920953, PsoDataType.Structure, 728, 0, MetaName.camThirdPersonCameraMetadataStealthZoomSettings), + new PsoStructureEntryInfo((MetaName)1947299079, PsoDataType.Structure, 752, 0, MetaName.camThirdPersonCameraMetadataQuadrupedalHeightSpring), + new PsoStructureEntryInfo((MetaName)490368749, PsoDataType.String, 776, 7, 0), + new PsoStructureEntryInfo((MetaName)2122226771, PsoDataType.Bool, 780, 0, 0), + new PsoStructureEntryInfo((MetaName)2833081775, PsoDataType.String, 784, 7, 0), + new PsoStructureEntryInfo((MetaName)1348911901, PsoDataType.Bool, 788, 0, 0), + new PsoStructureEntryInfo((MetaName)870186590, PsoDataType.Bool, 789, 0, 0), + new PsoStructureEntryInfo((MetaName)4238055063, PsoDataType.Bool, 790, 0, 0), + new PsoStructureEntryInfo((MetaName)2917952843, PsoDataType.Bool, 791, 0, 0), + new PsoStructureEntryInfo((MetaName)1301399000, PsoDataType.Bool, 792, 0, 0), + new PsoStructureEntryInfo((MetaName)1419212045, PsoDataType.Bool, 793, 0, 0), + new PsoStructureEntryInfo((MetaName)114759485, PsoDataType.Bool, 794, 0, 0), + new PsoStructureEntryInfo((MetaName)1634093344, PsoDataType.Float, 796, 0, 0), + new PsoStructureEntryInfo((MetaName)2294924343, PsoDataType.Float, 800, 0, 0), + new PsoStructureEntryInfo((MetaName)9436207, PsoDataType.Float, 804, 0, 0), + new PsoStructureEntryInfo((MetaName)1350912934, PsoDataType.Float, 808, 0, 0), + new PsoStructureEntryInfo((MetaName)70391041, PsoDataType.Float, 812, 0, 0), + new PsoStructureEntryInfo((MetaName)2783842060, PsoDataType.Float, 816, 0, 0), + new PsoStructureEntryInfo((MetaName)3397272914, PsoDataType.UInt, 820, 0, 0), + new PsoStructureEntryInfo((MetaName)1807116888, PsoDataType.UInt, 824, 0, 0), + new PsoStructureEntryInfo((MetaName)3048647846, PsoDataType.UInt, 828, 0, 0), + new PsoStructureEntryInfo((MetaName)3132164856, PsoDataType.UInt, 832, 0, 0), + new PsoStructureEntryInfo((MetaName)4207333442, PsoDataType.Float, 836, 0, 0), + new PsoStructureEntryInfo((MetaName)1717370547, PsoDataType.Float, 840, 0, 0), + new PsoStructureEntryInfo((MetaName)447200092, PsoDataType.Float, 844, 0, 0), + new PsoStructureEntryInfo((MetaName)3347315427, PsoDataType.Float, 848, 0, 0), + new PsoStructureEntryInfo((MetaName)4137686847, PsoDataType.Bool, 852, 0, 0), + new PsoStructureEntryInfo((MetaName)3921296525, PsoDataType.Float, 856, 0, 0), + new PsoStructureEntryInfo((MetaName)2840529796, PsoDataType.Float, 860, 0, 0), + new PsoStructureEntryInfo((MetaName)2535634527, PsoDataType.Float, 864, 0, 0), + new PsoStructureEntryInfo((MetaName)1225855688, PsoDataType.Float, 868, 0, 0), + new PsoStructureEntryInfo((MetaName)2209545096, PsoDataType.String, 880, 7, 0), + new PsoStructureEntryInfo((MetaName)1635236307, PsoDataType.Structure, 888, 0, MetaName.camThirdPersonPedAimCameraMetadataLockOnTargetDampingSettings), + new PsoStructureEntryInfo((MetaName)4165908011, PsoDataType.Structure, 928, 0, MetaName.camThirdPersonPedAimCameraMetadataLockOnOrbitDistanceSettings), + new PsoStructureEntryInfo((MetaName)1399337810, PsoDataType.Float3, 976, 0, 0), + new PsoStructureEntryInfo((MetaName)442114217, PsoDataType.Float3, 992, 0, 0), + new PsoStructureEntryInfo((MetaName)575433612, PsoDataType.SInt, 1008, 0, 0), + new PsoStructureEntryInfo((MetaName)3180847895, PsoDataType.Bool, 1012, 0, 0), + new PsoStructureEntryInfo((MetaName)184490319, PsoDataType.Bool, 1013, 0, 0), + new PsoStructureEntryInfo((MetaName)1057367158, PsoDataType.String, 1016, 7, 0), + new PsoStructureEntryInfo((MetaName)309842601, PsoDataType.Float, 1020, 0, 0), + new PsoStructureEntryInfo((MetaName)3770307856, PsoDataType.Bool, 1024, 0, 0), + new PsoStructureEntryInfo((MetaName)3195731427, PsoDataType.Float, 1040, 0, 0), + new PsoStructureEntryInfo((MetaName)2888452072, PsoDataType.Float2, 1044, 0, 0), + new PsoStructureEntryInfo((MetaName)2501102835, PsoDataType.Float, 1052, 0, 0), + new PsoStructureEntryInfo((MetaName)2903662656, PsoDataType.Float, 1056, 0, 0), + new PsoStructureEntryInfo((MetaName)2037218535, PsoDataType.Float, 1060, 0, 0), + new PsoStructureEntryInfo((MetaName)4219845621, PsoDataType.Float, 1064, 0, 0), + new PsoStructureEntryInfo((MetaName)3549368383, PsoDataType.Float, 1068, 0, 0), + new PsoStructureEntryInfo((MetaName)1000603972, PsoDataType.Float, 1072, 0, 0), + new PsoStructureEntryInfo((MetaName)1991971403, PsoDataType.Float, 1076, 0, 0) + ); + case MetaName.camThirdPersonVehicleAimCameraMetadata: + return new PsoStructureInfo(MetaName.camThirdPersonVehicleAimCameraMetadata, 0, 0, 896, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2884954151, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo((MetaName)730193180, PsoDataType.String, 36, 7, 0), + new PsoStructureEntryInfo((MetaName)1443569911, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo((MetaName)60641442, PsoDataType.String, 44, 7, 0), + new PsoStructureEntryInfo((MetaName)1865815245, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2755051531, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3305154880, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)2846809829, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)3002500493, PsoDataType.Bool, 61, 0, 0), + new PsoStructureEntryInfo((MetaName)2521592812, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)4067016949, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)2406229624, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)727876548, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)3039556728, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)1708190798, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)1190961214, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)897419234, PsoDataType.UInt, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)150825038, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)4033450681, PsoDataType.Bool, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)2058076685, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)488216999, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)1406371922, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)2814402846, PsoDataType.String, 116, 7, 0), + new PsoStructureEntryInfo((MetaName)372575308, PsoDataType.Bool, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)799910142, PsoDataType.Bool, 121, 0, 0), + new PsoStructureEntryInfo((MetaName)1933402526, PsoDataType.Bool, 122, 0, 0), + new PsoStructureEntryInfo((MetaName)1022007033, PsoDataType.Structure, 128, 0, MetaName.camThirdPersonCameraMetadataCustomBoundingBoxSettings), + new PsoStructureEntryInfo((MetaName)2861227361, PsoDataType.Bool, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)1148495425, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)536202543, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)1065618425, PsoDataType.Structure, 176, 0, MetaName.camThirdPersonCameraMetadataBasePivotPosition), + new PsoStructureEntryInfo((MetaName)3256568637, PsoDataType.Structure, 272, 0, MetaName.camThirdPersonCameraMetadataPivotPosition), + new PsoStructureEntryInfo((MetaName)588927535, PsoDataType.Structure, 320, 0, MetaName.camThirdPersonCameraMetadataPivotOverBoungingBoxSettings), + new PsoStructureEntryInfo((MetaName)2014345705, PsoDataType.Float, 344, 0, 0), + new PsoStructureEntryInfo((MetaName)3982287448, PsoDataType.Float, 348, 0, 0), + new PsoStructureEntryInfo((MetaName)2449849624, PsoDataType.Float, 352, 0, 0), + new PsoStructureEntryInfo((MetaName)695725580, PsoDataType.Float, 356, 0, 0), + new PsoStructureEntryInfo((MetaName)1397182427, PsoDataType.Float, 360, 0, 0), + new PsoStructureEntryInfo((MetaName)881872463, PsoDataType.Bool, 364, 0, 0), + new PsoStructureEntryInfo((MetaName)177572622, PsoDataType.Float, 368, 0, 0), + new PsoStructureEntryInfo((MetaName)560700931, PsoDataType.Float, 372, 0, 0), + new PsoStructureEntryInfo((MetaName)1828892401, PsoDataType.Float2, 376, 0, 0), + new PsoStructureEntryInfo((MetaName)2829148759, PsoDataType.Float, 384, 0, 0), + new PsoStructureEntryInfo((MetaName)1084689577, PsoDataType.Float, 388, 0, 0), + new PsoStructureEntryInfo((MetaName)3978450060, PsoDataType.Float, 392, 0, 0), + new PsoStructureEntryInfo((MetaName)1991191506, PsoDataType.Structure, 400, 0, MetaName.camThirdPersonCameraMetadataBuoyancySettings), + new PsoStructureEntryInfo((MetaName)1949881438, PsoDataType.Bool, 448, 0, 0), + new PsoStructureEntryInfo((MetaName)3863307203, PsoDataType.Bool, 449, 0, 0), + new PsoStructureEntryInfo((MetaName)3696538081, PsoDataType.Bool, 450, 0, 0), + new PsoStructureEntryInfo((MetaName)2213127338, PsoDataType.Bool, 451, 0, 0), + new PsoStructureEntryInfo((MetaName)724966028, PsoDataType.Bool, 452, 0, 0), + new PsoStructureEntryInfo((MetaName)2696635175, PsoDataType.Float, 456, 0, 0), + new PsoStructureEntryInfo((MetaName)1976571596, PsoDataType.Float, 460, 0, 0), + new PsoStructureEntryInfo((MetaName)551575094, PsoDataType.Float, 464, 0, 0), + new PsoStructureEntryInfo((MetaName)1557769430, PsoDataType.Float, 468, 0, 0), + new PsoStructureEntryInfo((MetaName)4155454260, PsoDataType.Float3, 480, 0, 0), + new PsoStructureEntryInfo((MetaName)4194152221, PsoDataType.Float3, 496, 0, 0), + new PsoStructureEntryInfo((MetaName)2702878862, PsoDataType.Bool, 512, 0, 0), + new PsoStructureEntryInfo((MetaName)1998689777, PsoDataType.Bool, 513, 0, 0), + new PsoStructureEntryInfo((MetaName)2235540893, PsoDataType.Bool, 514, 0, 0), + new PsoStructureEntryInfo((MetaName)3479639237, PsoDataType.Float3, 528, 0, 0), + new PsoStructureEntryInfo((MetaName)1496115250, PsoDataType.Float, 544, 0, 0), + new PsoStructureEntryInfo((MetaName)340312382, PsoDataType.Structure, 552, 0, MetaName.camThirdPersonCameraMetadataCollisionFallBackPosition), + new PsoStructureEntryInfo((MetaName)4279727627, PsoDataType.Float, 592, 0, 0), + new PsoStructureEntryInfo((MetaName)823526659, PsoDataType.Bool, 596, 0, 0), + new PsoStructureEntryInfo((MetaName)3507950586, PsoDataType.Float, 600, 0, 0), + new PsoStructureEntryInfo((MetaName)3397058689, PsoDataType.Float, 604, 0, 0), + new PsoStructureEntryInfo((MetaName)227846107, PsoDataType.Structure, 608, 0, MetaName.camThirdPersonCameraMetadataVehicleOnTopOfVehicleCollisionSettings), + new PsoStructureEntryInfo((MetaName)3658085406, PsoDataType.Float, 632, 0, 0), + new PsoStructureEntryInfo((MetaName)1654683326, PsoDataType.Float2, 636, 0, 0), + new PsoStructureEntryInfo((MetaName)1974814289, PsoDataType.Float2, 644, 0, 0), + new PsoStructureEntryInfo((MetaName)1778852906, PsoDataType.Float, 652, 0, 0), + new PsoStructureEntryInfo((MetaName)158553507, PsoDataType.Float, 656, 0, 0), + new PsoStructureEntryInfo((MetaName)3300166924, PsoDataType.Structure, 664, 0, MetaName.camThirdPersonCameraMetadataLookOverSettings), + new PsoStructureEntryInfo((MetaName)2793581079, PsoDataType.Bool, 688, 0, 0), + new PsoStructureEntryInfo((MetaName)2111969249, PsoDataType.Float2, 692, 0, 0), + new PsoStructureEntryInfo((MetaName)3068587259, PsoDataType.Float, 700, 0, 0), + new PsoStructureEntryInfo((MetaName)293341517, PsoDataType.Float, 704, 0, 0), + new PsoStructureEntryInfo((MetaName)3607038158, PsoDataType.Float, 708, 0, 0), + new PsoStructureEntryInfo((MetaName)4039533147, PsoDataType.Float2, 712, 0, 0), + new PsoStructureEntryInfo((MetaName)1356521412, PsoDataType.Float2, 720, 0, 0), + new PsoStructureEntryInfo((MetaName)3610920953, PsoDataType.Structure, 728, 0, MetaName.camThirdPersonCameraMetadataStealthZoomSettings), + new PsoStructureEntryInfo((MetaName)1947299079, PsoDataType.Structure, 752, 0, MetaName.camThirdPersonCameraMetadataQuadrupedalHeightSpring), + new PsoStructureEntryInfo((MetaName)490368749, PsoDataType.String, 776, 7, 0), + new PsoStructureEntryInfo((MetaName)2122226771, PsoDataType.Bool, 780, 0, 0), + new PsoStructureEntryInfo((MetaName)2833081775, PsoDataType.String, 784, 7, 0), + new PsoStructureEntryInfo((MetaName)1348911901, PsoDataType.Bool, 788, 0, 0), + new PsoStructureEntryInfo((MetaName)870186590, PsoDataType.Bool, 789, 0, 0), + new PsoStructureEntryInfo((MetaName)4238055063, PsoDataType.Bool, 790, 0, 0), + new PsoStructureEntryInfo((MetaName)2917952843, PsoDataType.Bool, 791, 0, 0), + new PsoStructureEntryInfo((MetaName)1301399000, PsoDataType.Bool, 792, 0, 0), + new PsoStructureEntryInfo((MetaName)1419212045, PsoDataType.Bool, 793, 0, 0), + new PsoStructureEntryInfo((MetaName)114759485, PsoDataType.Bool, 794, 0, 0), + new PsoStructureEntryInfo((MetaName)1634093344, PsoDataType.Float, 796, 0, 0), + new PsoStructureEntryInfo((MetaName)2294924343, PsoDataType.Float, 800, 0, 0), + new PsoStructureEntryInfo((MetaName)9436207, PsoDataType.Float, 804, 0, 0), + new PsoStructureEntryInfo((MetaName)1350912934, PsoDataType.Float, 808, 0, 0), + new PsoStructureEntryInfo((MetaName)70391041, PsoDataType.Float, 812, 0, 0), + new PsoStructureEntryInfo((MetaName)2783842060, PsoDataType.Float, 816, 0, 0), + new PsoStructureEntryInfo((MetaName)3397272914, PsoDataType.UInt, 820, 0, 0), + new PsoStructureEntryInfo((MetaName)1807116888, PsoDataType.UInt, 824, 0, 0), + new PsoStructureEntryInfo((MetaName)3048647846, PsoDataType.UInt, 828, 0, 0), + new PsoStructureEntryInfo((MetaName)3132164856, PsoDataType.UInt, 832, 0, 0), + new PsoStructureEntryInfo((MetaName)4207333442, PsoDataType.Float, 836, 0, 0), + new PsoStructureEntryInfo((MetaName)1717370547, PsoDataType.Float, 840, 0, 0), + new PsoStructureEntryInfo((MetaName)447200092, PsoDataType.Float, 844, 0, 0), + new PsoStructureEntryInfo((MetaName)3347315427, PsoDataType.Float, 848, 0, 0), + new PsoStructureEntryInfo((MetaName)4137686847, PsoDataType.Bool, 852, 0, 0), + new PsoStructureEntryInfo((MetaName)3921296525, PsoDataType.Float, 856, 0, 0), + new PsoStructureEntryInfo((MetaName)2840529796, PsoDataType.Float, 860, 0, 0), + new PsoStructureEntryInfo((MetaName)2535634527, PsoDataType.Float, 864, 0, 0), + new PsoStructureEntryInfo((MetaName)1225855688, PsoDataType.Float, 868, 0, 0), + new PsoStructureEntryInfo((MetaName)721433849, PsoDataType.Bool, 880, 0, 0), + new PsoStructureEntryInfo((MetaName)1821508366, PsoDataType.Bool, 881, 0, 0), + new PsoStructureEntryInfo((MetaName)2610056728, PsoDataType.Float, 884, 0, 0), + new PsoStructureEntryInfo((MetaName)843687785, PsoDataType.Float, 888, 0, 0) + ); + case MetaName.camMarketingFreeCameraMetadata: + return new PsoStructureInfo(MetaName.camMarketingFreeCameraMetadata, 0, 0, 200, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3808044930, PsoDataType.Structure, 32, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)2925373184, PsoDataType.Structure, 64, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)31061142, PsoDataType.Structure, 96, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)3295350072, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)1591024915, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)829837985, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)3177251856, PsoDataType.Structure, 144, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)3141690306, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo((MetaName)4157311158, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo((MetaName)1989308054, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo((MetaName)4261179401, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo((MetaName)1361361101, PsoDataType.Float, 192, 0, 0) + ); + case MetaName.camMarketingFreeCameraMetadataInputResponse: + return new PsoStructureInfo(MetaName.camMarketingFreeCameraMetadataInputResponse, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)3855676319, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)3265151949, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)455772583, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1627413096, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSpeed, PsoDataType.Float, 24, 0, 0) + ); + case MetaName.camMarketingAToBCameraMetadata: + return new PsoStructureInfo(MetaName.camMarketingAToBCameraMetadata, 0, 0, 216, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3808044930, PsoDataType.Structure, 32, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)2925373184, PsoDataType.Structure, 64, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)31061142, PsoDataType.Structure, 96, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)3295350072, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)1591024915, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)829837985, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)3177251856, PsoDataType.Structure, 144, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)3141690306, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo((MetaName)4157311158, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo((MetaName)1989308054, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo((MetaName)4261179401, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo((MetaName)1361361101, PsoDataType.Float, 192, 0, 0), + new PsoStructureEntryInfo((MetaName)1044888659, PsoDataType.String, 200, 7, 0), + new PsoStructureEntryInfo((MetaName)1147067733, PsoDataType.UInt, 204, 0, 0), + new PsoStructureEntryInfo((MetaName)1825469896, PsoDataType.UInt, 208, 0, 0) + ); + case MetaName.camTimedSplineCameraMetadata: + return new PsoStructureInfo(MetaName.camTimedSplineCameraMetadata, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1391977192, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3867080895, PsoDataType.SInt, 40, 0, 0) + ); + case MetaName.camMarketingOrbitCameraMetadata: + return new PsoStructureInfo(MetaName.camMarketingOrbitCameraMetadata, 0, 0, 208, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3808044930, PsoDataType.Structure, 32, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)2925373184, PsoDataType.Structure, 64, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)31061142, PsoDataType.Structure, 96, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)3295350072, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)1591024915, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)829837985, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)3177251856, PsoDataType.Structure, 144, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)3141690306, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo((MetaName)4157311158, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo((MetaName)1989308054, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo((MetaName)4261179401, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo((MetaName)1361361101, PsoDataType.Float, 192, 0, 0), + new PsoStructureEntryInfo((MetaName)2308368369, PsoDataType.Float, 200, 0, 0), + new PsoStructureEntryInfo((MetaName)4021873979, PsoDataType.String, 204, 7, 0) + ); + case MetaName.camMarketingMountedCameraMetadata: + return new PsoStructureInfo(MetaName.camMarketingMountedCameraMetadata, 0, 0, 208, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3808044930, PsoDataType.Structure, 32, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)2925373184, PsoDataType.Structure, 64, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)31061142, PsoDataType.Structure, 96, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)3295350072, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)1591024915, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)829837985, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)3177251856, PsoDataType.Structure, 144, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)3141690306, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo((MetaName)4157311158, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo((MetaName)1989308054, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo((MetaName)4261179401, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo((MetaName)1361361101, PsoDataType.Float, 192, 0, 0), + new PsoStructureEntryInfo((MetaName)2308368369, PsoDataType.Float, 200, 0, 0), + new PsoStructureEntryInfo((MetaName)4021873979, PsoDataType.String, 204, 7, 0) + ); + case MetaName.camMarketingStickyCameraMetadata: + return new PsoStructureInfo(MetaName.camMarketingStickyCameraMetadata, 0, 0, 200, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3808044930, PsoDataType.Structure, 32, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)2925373184, PsoDataType.Structure, 64, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)31061142, PsoDataType.Structure, 96, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)3295350072, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)1591024915, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)829837985, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)3177251856, PsoDataType.Structure, 144, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)3141690306, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo((MetaName)4157311158, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo((MetaName)1989308054, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo((MetaName)4261179401, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo((MetaName)1361361101, PsoDataType.Float, 192, 0, 0) + ); + case MetaName.camScriptedCameraMetadata: + return new PsoStructureInfo(MetaName.camScriptedCameraMetadata, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1391977192, PsoDataType.Float, 32, 0, 0) + ); + case MetaName.camScriptedFlyCameraMetadata: + return new PsoStructureInfo(MetaName.camScriptedFlyCameraMetadata, 0, 0, 120, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1391977192, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1160500952, PsoDataType.Structure, 40, 0, MetaName.camScriptedFlyCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)2802203540, PsoDataType.Structure, 64, 0, MetaName.camScriptedFlyCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)2266995505, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)1176855075, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)2736468652, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)4276410337, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.CapsuleRadius, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)851393034, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)2779060394, PsoDataType.UInt, 112, 0, 0) + ); + case MetaName.camScriptedFlyCameraMetadataInputResponse: + return new PsoStructureInfo(MetaName.camScriptedFlyCameraMetadataInputResponse, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)3265151949, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2732255867, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)1689883019, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSpeed, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.camCustomTimedSplineCameraMetadata: + return new PsoStructureInfo(MetaName.camCustomTimedSplineCameraMetadata, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1391977192, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3867080895, PsoDataType.SInt, 40, 0, 0) + ); + case MetaName.camRoundedSplineCameraMetadata: + return new PsoStructureInfo(MetaName.camRoundedSplineCameraMetadata, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1391977192, PsoDataType.Float, 32, 0, 0) + ); + case MetaName.camSmoothedSplineCameraMetadata: + return new PsoStructureInfo(MetaName.camSmoothedSplineCameraMetadata, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1391977192, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3867080895, PsoDataType.SInt, 40, 0, 0) + ); + case MetaName.camSwitchCameraMetadata: + return new PsoStructureInfo(MetaName.camSwitchCameraMetadata, 0, 0, 144, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1245276384, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo((MetaName)2105074563, PsoDataType.Float3, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.Fov, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)1325746994, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)1859659636, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)1056782751, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)341706306, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)1176855075, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)2303904065, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)978298090, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)2266995505, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)1771807090, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)1215756626, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)1181521957, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)2559186523, PsoDataType.UInt, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)1045169360, PsoDataType.UInt, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)1298516568, PsoDataType.UInt, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)3976211620, PsoDataType.UInt, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)3193297650, PsoDataType.UInt, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)3466836211, PsoDataType.UInt, 132, 0, 0) + ); + case MetaName.camReplayRecordedCameraMetadata: + return new PsoStructureInfo(MetaName.camReplayRecordedCameraMetadata, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2696635175, PsoDataType.Float, 32, 0, 0) + ); + case MetaName.camReplayPresetCameraMetadata: + return new PsoStructureInfo(MetaName.camReplayPresetCameraMetadata, 0, 0, 256, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2696635175, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3243156997, PsoDataType.Float3, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)54415504, PsoDataType.Float3, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)3869518259, PsoDataType.Structure, 80, 0, MetaName.camReplayBaseCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)31061142, PsoDataType.Structure, 104, 0, MetaName.camReplayBaseCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)3177251856, PsoDataType.Structure, 128, 0, MetaName.camReplayBaseCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)2006858266, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)3615529910, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)1391977192, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)777402839, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo((MetaName)1557834870, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo((MetaName)1089474876, PsoDataType.Bool, 172, 0, 0), + new PsoStructureEntryInfo((MetaName)2480397790, PsoDataType.Bool, 173, 0, 0), + new PsoStructureEntryInfo((MetaName)3762874292, PsoDataType.Structure, 176, 0, MetaName.camReplayBaseCameraMetadataCollisionSettings), + new PsoStructureEntryInfo((MetaName)549109147, PsoDataType.Float, 224, 0, 0), + new PsoStructureEntryInfo((MetaName)3394194196, PsoDataType.UInt, 228, 0, 0), + new PsoStructureEntryInfo((MetaName)2704093958, PsoDataType.UInt, 232, 0, 0), + new PsoStructureEntryInfo((MetaName)1677933530, PsoDataType.UInt, 236, 0, 0), + new PsoStructureEntryInfo((MetaName)343964264, PsoDataType.UInt, 240, 0, 0), + new PsoStructureEntryInfo((MetaName)681964647, PsoDataType.UInt, 244, 0, 0), + new PsoStructureEntryInfo((MetaName)2782721869, PsoDataType.UInt, 248, 0, 0) + ); + case MetaName.camReplayBaseCameraMetadataInputResponse: + return new PsoStructureInfo(MetaName.camReplayBaseCameraMetadataInputResponse, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)3265151949, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2732255867, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)1689883019, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSpeed, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.camReplayBaseCameraMetadataCollisionSettings: + return new PsoStructureInfo(MetaName.camReplayBaseCameraMetadataCollisionSettings, 0, 0, 48, + new PsoStructureEntryInfo((MetaName)2162401385, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)3243646861, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)1976571596, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)653804618, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3232040475, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)819688366, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)122123361, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)557881422, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)724966028, PsoDataType.Bool, 40, 0, 0) + ); + case MetaName.camReplayFreeCameraMetadata: + return new PsoStructureInfo(MetaName.camReplayFreeCameraMetadata, 0, 0, 544, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2696635175, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1325746994, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1160500952, PsoDataType.Structure, 48, 0, MetaName.camReplayBaseCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)2802203540, PsoDataType.Structure, 72, 0, MetaName.camReplayBaseCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)2292446130, PsoDataType.Structure, 96, 0, MetaName.camReplayBaseCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)31061142, PsoDataType.Structure, 120, 0, MetaName.camReplayBaseCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)3177251856, PsoDataType.Structure, 144, 0, MetaName.camReplayBaseCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)1176189471, PsoDataType.Structure, 168, 0, MetaName.camReplayBaseCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)4043692651, PsoDataType.Structure, 192, 0, MetaName.camReplayBaseCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)2391928883, PsoDataType.Structure, 216, 0, MetaName.camReplayBaseCameraMetadataInputResponse), + new PsoStructureEntryInfo((MetaName)1466164024, PsoDataType.Structure, 240, 0, (MetaName)2380636687), + new PsoStructureEntryInfo((MetaName)3699879509, PsoDataType.Structure, 280, 0, (MetaName)2380636687), + new PsoStructureEntryInfo((MetaName)2461431150, PsoDataType.Structure, 320, 0, (MetaName)2380636687), + new PsoStructureEntryInfo((MetaName)4261179401, PsoDataType.Float, 360, 0, 0), + new PsoStructureEntryInfo((MetaName)2006858266, PsoDataType.Float, 364, 0, 0), + new PsoStructureEntryInfo((MetaName)3615529910, PsoDataType.Float, 368, 0, 0), + new PsoStructureEntryInfo((MetaName)1391977192, PsoDataType.Float, 372, 0, 0), + new PsoStructureEntryInfo(MetaName.CapsuleRadius, PsoDataType.Float, 376, 0, 0), + new PsoStructureEntryInfo((MetaName)537337364, PsoDataType.Float, 380, 0, 0), + new PsoStructureEntryInfo((MetaName)870756038, PsoDataType.Float, 384, 0, 0), + new PsoStructureEntryInfo((MetaName)1068739939, PsoDataType.Float, 388, 0, 0), + new PsoStructureEntryInfo((MetaName)3629360459, PsoDataType.Float, 392, 0, 0), + new PsoStructureEntryInfo((MetaName)479683481, PsoDataType.Float, 396, 0, 0), + new PsoStructureEntryInfo((MetaName)2077539523, PsoDataType.Float3, 400, 0, 0), + new PsoStructureEntryInfo((MetaName)3762874292, PsoDataType.Structure, 416, 0, MetaName.camReplayBaseCameraMetadataCollisionSettings), + new PsoStructureEntryInfo((MetaName)4113213041, PsoDataType.Float, 464, 0, 0), + new PsoStructureEntryInfo((MetaName)2101093733, PsoDataType.Float, 468, 0, 0), + new PsoStructureEntryInfo((MetaName)2090863388, PsoDataType.Float, 472, 0, 0), + new PsoStructureEntryInfo((MetaName)109690208, PsoDataType.Float, 476, 0, 0), + new PsoStructureEntryInfo((MetaName)425553139, PsoDataType.Float, 480, 0, 0), + new PsoStructureEntryInfo((MetaName)2285453310, PsoDataType.UInt, 484, 0, 0), + new PsoStructureEntryInfo((MetaName)3186336829, PsoDataType.Float, 488, 0, 0), + new PsoStructureEntryInfo((MetaName)858986389, PsoDataType.Float, 492, 0, 0), + new PsoStructureEntryInfo((MetaName)168114371, PsoDataType.Float, 496, 0, 0), + new PsoStructureEntryInfo((MetaName)2257617130, PsoDataType.Float, 500, 0, 0), + new PsoStructureEntryInfo((MetaName)4119877675, PsoDataType.Float, 504, 0, 0), + new PsoStructureEntryInfo((MetaName)2969211614, PsoDataType.UInt, 508, 0, 0), + new PsoStructureEntryInfo((MetaName)3394194196, PsoDataType.UInt, 512, 0, 0), + new PsoStructureEntryInfo((MetaName)2704093958, PsoDataType.UInt, 516, 0, 0), + new PsoStructureEntryInfo((MetaName)1677933530, PsoDataType.UInt, 520, 0, 0), + new PsoStructureEntryInfo((MetaName)343964264, PsoDataType.UInt, 524, 0, 0), + new PsoStructureEntryInfo((MetaName)681964647, PsoDataType.UInt, 528, 0, 0), + new PsoStructureEntryInfo((MetaName)2782721869, PsoDataType.UInt, 532, 0, 0), + new PsoStructureEntryInfo((MetaName)3026527735, PsoDataType.Float, 536, 0, 0), + new PsoStructureEntryInfo((MetaName)1272604977, PsoDataType.Float, 540, 0, 0) + ); + case MetaName.camShakeMetadata: + return new PsoStructureInfo(MetaName.camShakeMetadata, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1260823161, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)1428204256, PsoDataType.Bool, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3480173900, PsoDataType.Bool, 21, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camShakeMetadataFrameComponent), + new PsoStructureEntryInfo((MetaName)2102911583, PsoDataType.Array, 24, 0, (MetaName)4), + new PsoStructureEntryInfo((MetaName)3143512563, PsoDataType.Float, 40, 0, 0) + ); + case MetaName.camShakeMetadataFrameComponent: + return new PsoStructureInfo(MetaName.camShakeMetadataFrameComponent, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Component, PsoDataType.Enum, 8, 0, (MetaName)4206293824), + new PsoStructureEntryInfo((MetaName)3866719227, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo((MetaName)1811750171, PsoDataType.String, 16, 7, 0) + ); + case MetaName.camOscillatorMetadata: + return new PsoStructureInfo(MetaName.camOscillatorMetadata, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)579825085, PsoDataType.Enum, 16, 0, (MetaName)902027429), + new PsoStructureEntryInfo(MetaName.Amplitude, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2554379728, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)369413731, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2974245218, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)398571259, PsoDataType.Float, 36, 0, 0) + ); + case MetaName.camAnimatedShakeMetadata: + return new PsoStructureInfo(MetaName.camAnimatedShakeMetadata, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1260823161, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)1428204256, PsoDataType.Bool, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3480173900, PsoDataType.Bool, 21, 0, 0) + ); + case MetaName.camCinematicCameraManShotMetadata: + return new PsoStructureInfo(MetaName.camCinematicCameraManShotMetadata, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), + new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), + new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1480107235, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2460595867, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3700663941, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)4197822931, PsoDataType.Bool, 64, 0, 0) + ); + case MetaName.camCinematicCraningCameraManShotMetadata: + return new PsoStructureInfo(MetaName.camCinematicCraningCameraManShotMetadata, 0, 0, 104, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), + new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), + new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1480107235, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2460595867, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3700663941, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)4197822931, PsoDataType.Bool, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)934463872, PsoDataType.Bool, 65, 0, 0), + new PsoStructureEntryInfo((MetaName)2227467637, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)943740099, PsoDataType.Bool, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)1606540295, PsoDataType.UInt, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)3516181833, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)3249173046, PsoDataType.Float2, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)2987455099, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)2723670760, PsoDataType.Float, 96, 0, 0) + ); + case MetaName.camCinematicInVehicleCrashShotMetadata: + return new PsoStructureInfo(MetaName.camCinematicInVehicleCrashShotMetadata, 0, 0, 96, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), + new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), + new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1480107235, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2460595867, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3700663941, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)4197822931, PsoDataType.Bool, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)1178479344, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)3669617802, PsoDataType.UInt, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)3100384106, PsoDataType.UInt, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)2073951791, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)3730987855, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)4150416286, PsoDataType.UInt, 88, 0, 0) + ); + case MetaName.camCinematicVehiclePartShotMetadata: + return new PsoStructureInfo(MetaName.camCinematicVehiclePartShotMetadata, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), + new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), + new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1480107235, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2460595867, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3700663941, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)233780411, PsoDataType.UInt, 64, 0, 0) + ); + case MetaName.camCinematicHeliTrackingShotMetadata: + return new PsoStructureInfo(MetaName.camCinematicHeliTrackingShotMetadata, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), + new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), + new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1480107235, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2460595867, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3700663941, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)4197822931, PsoDataType.Bool, 64, 0, 0) + ); + case MetaName.camCinematicVehicleOrbitShotMetadata: + return new PsoStructureInfo(MetaName.camCinematicVehicleOrbitShotMetadata, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), + new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), + new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1480107235, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2460595867, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3700663941, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0) + ); + case MetaName.camCinematicVehicleLowOrbitShotMetadata: + return new PsoStructureInfo(MetaName.camCinematicVehicleLowOrbitShotMetadata, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), + new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), + new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1480107235, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2460595867, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3700663941, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0) + ); + case MetaName.camCinematicTrainRoofMountedShotMetadata: + return new PsoStructureInfo(MetaName.camCinematicTrainRoofMountedShotMetadata, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), + new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), + new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1480107235, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2460595867, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3700663941, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0) + ); + case MetaName.camCinematicTrainStationShotMetadata: + return new PsoStructureInfo(MetaName.camCinematicTrainStationShotMetadata, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), + new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), + new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1480107235, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2460595867, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3700663941, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0) + ); + case MetaName.camCinematicTrainPassengerShotMetadata: + return new PsoStructureInfo(MetaName.camCinematicTrainPassengerShotMetadata, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), + new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), + new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1480107235, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2460595867, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3700663941, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0) + ); + case MetaName.camCinematicTrainTrackShotMetadata: + return new PsoStructureInfo(MetaName.camCinematicTrainTrackShotMetadata, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), + new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), + new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1480107235, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2460595867, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3700663941, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0) + ); + case (MetaName)1537399056: + return new PsoStructureInfo((MetaName)1537399056, 0, 0, 112, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), + new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), + new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1480107235, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2460595867, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3700663941, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)2799648005, PsoDataType.Bool, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)4172426852, PsoDataType.Bool, 65, 0, 0), + new PsoStructureEntryInfo((MetaName)3436942647, PsoDataType.Float2, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)10648206, PsoDataType.Float2, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)113692134, PsoDataType.Float2, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)1115426652, PsoDataType.Float2, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)556138114, PsoDataType.String, 100, 7, 0), + new PsoStructureEntryInfo((MetaName)2538678656, PsoDataType.String, 104, 7, 0), + new PsoStructureEntryInfo((MetaName)4197822931, PsoDataType.Bool, 108, 0, 0) + ); + case MetaName.camCinematicPoliceHeliMountedShotMetadata: + return new PsoStructureInfo(MetaName.camCinematicPoliceHeliMountedShotMetadata, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), + new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), + new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1480107235, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2460595867, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3700663941, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)4197822931, PsoDataType.Bool, 64, 0, 0) + ); + case MetaName.camCinematicPoliceInCoverShotMetadata: + return new PsoStructureInfo(MetaName.camCinematicPoliceInCoverShotMetadata, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), + new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), + new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1480107235, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2460595867, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3700663941, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)4197822931, PsoDataType.Bool, 64, 0, 0) + ); + case MetaName.camCinematicPoliceRoadBlockShotMetadata: + return new PsoStructureInfo(MetaName.camCinematicPoliceRoadBlockShotMetadata, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), + new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), + new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1480107235, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2460595867, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3700663941, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)876494977, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)662073465, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)4197822931, PsoDataType.Bool, 72, 0, 0) + ); + case MetaName.camCinematicPoliceExitVehicleShotMetadata: + return new PsoStructureInfo(MetaName.camCinematicPoliceExitVehicleShotMetadata, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), + new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), + new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1480107235, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2460595867, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3700663941, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)4197822931, PsoDataType.Bool, 64, 0, 0) + ); + case MetaName.camCinematicOnFootIdleShotMetadata: + return new PsoStructureInfo(MetaName.camCinematicOnFootIdleShotMetadata, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), + new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), + new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1480107235, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2460595867, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3700663941, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0) + ); + case MetaName.camCinematicOnFootFirstPersonIdleShotMetadata: + return new PsoStructureInfo(MetaName.camCinematicOnFootFirstPersonIdleShotMetadata, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), + new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), + new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1480107235, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2460595867, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3700663941, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo((MetaName)1331283328, PsoDataType.Array, 64, 0, (MetaName)14) + ); + case MetaName.camCinematicStuntJumpShotMetadata: + return new PsoStructureInfo(MetaName.camCinematicStuntJumpShotMetadata, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), + new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), + new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1480107235, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2460595867, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3700663941, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0) + ); + case MetaName.camCinematicParachuteHeliShotMetadata: + return new PsoStructureInfo(MetaName.camCinematicParachuteHeliShotMetadata, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), + new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), + new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1480107235, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2460595867, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3700663941, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0) + ); + case MetaName.camCinematicParachuteCameraManShotMetadata: + return new PsoStructureInfo(MetaName.camCinematicParachuteCameraManShotMetadata, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), + new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), + new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1480107235, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2460595867, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3700663941, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0) + ); + case MetaName.camCinematicOnFootAssistedAimingKillShotMetadata: + return new PsoStructureInfo(MetaName.camCinematicOnFootAssistedAimingKillShotMetadata, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), + new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), + new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1480107235, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2460595867, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3700663941, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)1965493319, PsoDataType.UInt, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)513375599, PsoDataType.Float, 68, 0, 0) + ); + case MetaName.camCinematicOnFootMeleeShotMetadata: + return new PsoStructureInfo(MetaName.camCinematicOnFootMeleeShotMetadata, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), + new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), + new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1480107235, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2460595867, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3700663941, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0) + ); + case MetaName.camCinematicVehicleBonnetShotMetadata: + return new PsoStructureInfo(MetaName.camCinematicVehicleBonnetShotMetadata, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), + new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), + new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1480107235, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2460595867, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3700663941, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)1109718587, PsoDataType.UInt, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)4170146926, PsoDataType.UInt, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)2661334408, PsoDataType.String, 72, 7, 0) + ); + case MetaName.camCinematicBustedShotMetadata: + return new PsoStructureInfo(MetaName.camCinematicBustedShotMetadata, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), + new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), + new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1480107235, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2460595867, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3700663941, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3180920449, PsoDataType.Float, 64, 0, 0) + ); + case MetaName.camCinematicVehicleGroupShotMetadata: + return new PsoStructureInfo(MetaName.camCinematicVehicleGroupShotMetadata, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), + new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), + new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1480107235, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2460595867, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3700663941, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)189014933, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)3490628210, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)456924361, PsoDataType.UInt, 72, 0, 0) + ); + case MetaName.camCinematicMissileKillShotMetadata: + return new PsoStructureInfo(MetaName.camCinematicMissileKillShotMetadata, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), + new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), + new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1480107235, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2460595867, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3700663941, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0) + ); + case MetaName.camCinematicWaterCrashShotMetadata: + return new PsoStructureInfo(MetaName.camCinematicWaterCrashShotMetadata, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), + new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), + new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1480107235, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2460595867, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3700663941, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0) + ); + case MetaName.camCinematicFallFromHeliShotMetadata: + return new PsoStructureInfo(MetaName.camCinematicFallFromHeliShotMetadata, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), + new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), + new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1480107235, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2460595867, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3700663941, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0) + ); + case MetaName.camCinematicVehicleConvertibleRoofShotMetadata: + return new PsoStructureInfo(MetaName.camCinematicVehicleConvertibleRoofShotMetadata, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), + new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), + new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1480107235, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2460595867, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3700663941, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0) + ); + case MetaName.camCinematicScriptRaceCheckPointShotMetadata: + return new PsoStructureInfo(MetaName.camCinematicScriptRaceCheckPointShotMetadata, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), + new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), + new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1480107235, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2460595867, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3700663941, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0) + ); + case MetaName.camLongSwoopSwitchHelperMetadata: + return new PsoStructureInfo(MetaName.camLongSwoopSwitchHelperMetadata, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.Duration, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2578467489, PsoDataType.SInt, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1608990953, PsoDataType.Enum, 24, 0, (MetaName)3921015781), + new PsoStructureEntryInfo((MetaName)2608832721, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2368120393, PsoDataType.Bool, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3903914248, PsoDataType.Bool, 33, 0, 0), + new PsoStructureEntryInfo((MetaName)1595139928, PsoDataType.Bool, 34, 0, 0), + new PsoStructureEntryInfo((MetaName)1489449044, PsoDataType.Bool, 35, 0, 0), + new PsoStructureEntryInfo((MetaName)796068415, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)417423151, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)3958574934, PsoDataType.UInt, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2939152164, PsoDataType.Enum, 52, 0, (MetaName)3921015781), + new PsoStructureEntryInfo((MetaName)2707662935, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)26423852, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)322264486, PsoDataType.UInt, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)2868975511, PsoDataType.Enum, 68, 0, (MetaName)3921015781), + new PsoStructureEntryInfo((MetaName)3659327390, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)833330146, PsoDataType.Float, 76, 0, 0) + ); + case MetaName.camShortZoomToHeadSwitchHelperMetadata: + return new PsoStructureInfo(MetaName.camShortZoomToHeadSwitchHelperMetadata, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.Duration, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2578467489, PsoDataType.SInt, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1608990953, PsoDataType.Enum, 24, 0, (MetaName)3921015781), + new PsoStructureEntryInfo((MetaName)2608832721, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2368120393, PsoDataType.Bool, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3903914248, PsoDataType.Bool, 33, 0, 0), + new PsoStructureEntryInfo((MetaName)1595139928, PsoDataType.Bool, 34, 0, 0), + new PsoStructureEntryInfo((MetaName)1489449044, PsoDataType.Bool, 35, 0, 0), + new PsoStructureEntryInfo((MetaName)864831122, PsoDataType.Bool, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)3573176421, PsoDataType.SInt, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)1837935839, PsoDataType.Float3, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2395979106, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)4037747409, PsoDataType.Float, 68, 0, 0) + ); + case MetaName.camShortRotationSwitchHelperMetadata: + return new PsoStructureInfo(MetaName.camShortRotationSwitchHelperMetadata, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.Duration, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2578467489, PsoDataType.SInt, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1608990953, PsoDataType.Enum, 24, 0, (MetaName)3921015781), + new PsoStructureEntryInfo((MetaName)2608832721, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2368120393, PsoDataType.Bool, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3903914248, PsoDataType.Bool, 33, 0, 0), + new PsoStructureEntryInfo((MetaName)1595139928, PsoDataType.Bool, 34, 0, 0), + new PsoStructureEntryInfo((MetaName)1489449044, PsoDataType.Bool, 35, 0, 0), + new PsoStructureEntryInfo((MetaName)2291716575, PsoDataType.Float, 40, 0, 0) + ); + case MetaName.camShortTranslationSwitchHelperMetadata: + return new PsoStructureInfo(MetaName.camShortTranslationSwitchHelperMetadata, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.Duration, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2578467489, PsoDataType.SInt, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1608990953, PsoDataType.Enum, 24, 0, (MetaName)3921015781), + new PsoStructureEntryInfo((MetaName)2608832721, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2368120393, PsoDataType.Bool, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3903914248, PsoDataType.Bool, 33, 0, 0), + new PsoStructureEntryInfo((MetaName)1595139928, PsoDataType.Bool, 34, 0, 0), + new PsoStructureEntryInfo((MetaName)1489449044, PsoDataType.Bool, 35, 0, 0), + new PsoStructureEntryInfo((MetaName)3634726737, PsoDataType.Float, 40, 0, 0) + ); + case MetaName.camShortZoomInOutSwitchHelperMetadata: + return new PsoStructureInfo(MetaName.camShortZoomInOutSwitchHelperMetadata, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.Duration, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2578467489, PsoDataType.SInt, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1608990953, PsoDataType.Enum, 24, 0, (MetaName)3921015781), + new PsoStructureEntryInfo((MetaName)2608832721, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2368120393, PsoDataType.Bool, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3903914248, PsoDataType.Bool, 33, 0, 0), + new PsoStructureEntryInfo((MetaName)1595139928, PsoDataType.Bool, 34, 0, 0), + new PsoStructureEntryInfo((MetaName)1489449044, PsoDataType.Bool, 35, 0, 0), + new PsoStructureEntryInfo((MetaName)1190587282, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)547488153, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2504913741, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)26423852, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)4037747409, PsoDataType.Float, 56, 0, 0) + ); + case MetaName.camNearClipScannerMetadata: + return new PsoStructureInfo(MetaName.camNearClipScannerMetadata, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)494178060, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1713774083, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3006651453, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1502537267, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3831489261, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1103532228, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)639510975, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1947972687, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)1176855075, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)529344496, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)1434632498, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3130208423, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)1525295652, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)304640727, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)2477079271, PsoDataType.Float, 72, 0, 0) + ); + case MetaName.camVehicleCustomSettingsMetadata: + return new PsoStructureInfo(MetaName.camVehicleCustomSettingsMetadata, 0, 0, 192, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3950418303, PsoDataType.Structure, 16, 0, MetaName.camVehicleCustomSettingsMetadataDoorAlignmentSettings), + new PsoStructureEntryInfo((MetaName)2728784918, PsoDataType.Structure, 56, 0, MetaName.camVehicleCustomSettingsMetadataExitSeatPhaseForCameraExitSettings), + new PsoStructureEntryInfo((MetaName)556143364, PsoDataType.Structure, 72, 0, MetaName.camVehicleCustomSettingsMetadataMultiplayerPassengerCameraHashSettings), + new PsoStructureEntryInfo((MetaName)981761687, PsoDataType.Structure, 104, 0, MetaName.camVehicleCustomSettingsMetadataInvalidCinematcShotsRefsForVehicleSettings), + new PsoStructureEntryInfo((MetaName)955775077, PsoDataType.Structure, 136, 0, MetaName.camVehicleCustomSettingsMetadataAdditionalBoundScalingVehicleSettings), + new PsoStructureEntryInfo((MetaName)3842334374, PsoDataType.Structure, 152, 0, MetaName.camVehicleCustomSettingsMetadataSeatSpecficCameras), + new PsoStructureEntryInfo((MetaName)3299186532, PsoDataType.Bool, 184, 0, 0) + ); + case MetaName.camVehicleCustomSettingsMetadataExitSeatPhaseForCameraExitSettings: + return new PsoStructureInfo(MetaName.camVehicleCustomSettingsMetadataExitSeatPhaseForCameraExitSettings, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)3663951405, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2549072274, PsoDataType.Float, 12, 0, 0) + ); + case MetaName.camVehicleCustomSettingsMetadataMultiplayerPassengerCameraHashSettings: + return new PsoStructureInfo(MetaName.camVehicleCustomSettingsMetadataMultiplayerPassengerCameraHashSettings, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)3663951405, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)109781807, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UInt, 0, 0, 0), + new PsoStructureEntryInfo((MetaName)2400069518, PsoDataType.Array, 16, 0, (MetaName)2) + ); + case MetaName.camVehicleCustomSettingsMetadataInvalidCinematcShotsRefsForVehicleSettings: + return new PsoStructureInfo(MetaName.camVehicleCustomSettingsMetadataInvalidCinematcShotsRefsForVehicleSettings, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)3663951405, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo((MetaName)3579087558, PsoDataType.Array, 16, 0, (MetaName)1) + ); + case MetaName.camVehicleCustomSettingsMetadataAdditionalBoundScalingVehicleSettings: + return new PsoStructureInfo(MetaName.camVehicleCustomSettingsMetadataAdditionalBoundScalingVehicleSettings, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)3663951405, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1920226182, PsoDataType.Float, 12, 0, 0) + ); + case MetaName.camVehicleCustomSettingsMetadataSeatSpecficCameras: + return new PsoStructureInfo(MetaName.camVehicleCustomSettingsMetadataSeatSpecficCameras, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)3663951405, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camSeatSpecificCameras), + new PsoStructureEntryInfo((MetaName)1517635298, PsoDataType.Array, 16, 0, (MetaName)1) + ); + case MetaName.camSeatSpecificCameras: + return new PsoStructureInfo(MetaName.camSeatSpecificCameras, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.SeatIndex, PsoDataType.UInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1261448360, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo(MetaName.PovCameraOffset, PsoDataType.Float3, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2254474492, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)273799675, PsoDataType.Bool, 36, 0, 0) + ); + case MetaName.camGameplayDirectorMetadata: + return new PsoStructureInfo(MetaName.camGameplayDirectorMetadata, 0, 0, 608, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2089690180, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)519684035, PsoDataType.String, 28, 7, 0), + new PsoStructureEntryInfo((MetaName)4121580243, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo((MetaName)3253949128, PsoDataType.String, 36, 7, 0), + new PsoStructureEntryInfo((MetaName)3345137885, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo((MetaName)2365172496, PsoDataType.String, 44, 7, 0), + new PsoStructureEntryInfo((MetaName)961264130, PsoDataType.String, 48, 7, 0), + new PsoStructureEntryInfo((MetaName)3734793071, PsoDataType.String, 52, 7, 0), + new PsoStructureEntryInfo((MetaName)2936418982, PsoDataType.String, 56, 7, 0), + new PsoStructureEntryInfo((MetaName)595399339, PsoDataType.String, 60, 7, 0), + new PsoStructureEntryInfo((MetaName)4266955763, PsoDataType.String, 64, 7, 0), + new PsoStructureEntryInfo((MetaName)1070442381, PsoDataType.String, 68, 7, 0), + new PsoStructureEntryInfo((MetaName)838085564, PsoDataType.String, 72, 7, 0), + new PsoStructureEntryInfo((MetaName)1252415609, PsoDataType.String, 76, 7, 0), + new PsoStructureEntryInfo((MetaName)2466448846, PsoDataType.String, 80, 7, 0), + new PsoStructureEntryInfo((MetaName)3845919335, PsoDataType.String, 84, 7, 0), + new PsoStructureEntryInfo((MetaName)3326977311, PsoDataType.String, 88, 7, 0), + new PsoStructureEntryInfo((MetaName)374047020, PsoDataType.String, 92, 7, 0), + new PsoStructureEntryInfo((MetaName)859347369, PsoDataType.String, 96, 7, 0), + new PsoStructureEntryInfo((MetaName)1384877759, PsoDataType.String, 100, 7, 0), + new PsoStructureEntryInfo((MetaName)399013837, PsoDataType.String, 104, 7, 0), + new PsoStructureEntryInfo((MetaName)3929905827, PsoDataType.String, 108, 7, 0), + new PsoStructureEntryInfo((MetaName)2078537289, PsoDataType.String, 112, 7, 0), + new PsoStructureEntryInfo((MetaName)2211994659, PsoDataType.String, 116, 7, 0), + new PsoStructureEntryInfo((MetaName)1839344859, PsoDataType.String, 120, 7, 0), + new PsoStructureEntryInfo((MetaName)1168367025, PsoDataType.String, 124, 7, 0), + new PsoStructureEntryInfo((MetaName)3316487821, PsoDataType.String, 128, 7, 0), + new PsoStructureEntryInfo((MetaName)2772847581, PsoDataType.String, 132, 7, 0), + new PsoStructureEntryInfo((MetaName)766173022, PsoDataType.String, 136, 7, 0), + new PsoStructureEntryInfo((MetaName)2535543863, PsoDataType.String, 140, 7, 0), + new PsoStructureEntryInfo((MetaName)160927927, PsoDataType.String, 144, 7, 0), + new PsoStructureEntryInfo((MetaName)478304411, PsoDataType.String, 148, 7, 0), + new PsoStructureEntryInfo((MetaName)2995820414, PsoDataType.String, 152, 7, 0), + new PsoStructureEntryInfo((MetaName)2615323901, PsoDataType.String, 156, 7, 0), + new PsoStructureEntryInfo((MetaName)773221014, PsoDataType.UInt, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)1041806552, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo((MetaName)2032331076, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo((MetaName)1446696509, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo((MetaName)3986662918, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo((MetaName)508043832, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo((MetaName)2976021060, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo((MetaName)3396642792, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo((MetaName)3225930628, PsoDataType.Float, 192, 0, 0), + new PsoStructureEntryInfo((MetaName)1352017718, PsoDataType.Float, 196, 0, 0), + new PsoStructureEntryInfo((MetaName)73333937, PsoDataType.Float, 200, 0, 0), + new PsoStructureEntryInfo((MetaName)1414986019, PsoDataType.Float, 204, 0, 0), + new PsoStructureEntryInfo((MetaName)3574987574, PsoDataType.Float, 208, 0, 0), + new PsoStructureEntryInfo((MetaName)992242800, PsoDataType.Float, 212, 0, 0), + new PsoStructureEntryInfo((MetaName)2148272557, PsoDataType.Float, 216, 0, 0), + new PsoStructureEntryInfo((MetaName)1884609047, PsoDataType.UInt, 220, 0, 0), + new PsoStructureEntryInfo((MetaName)839256524, PsoDataType.Float2, 224, 0, 0), + new PsoStructureEntryInfo((MetaName)3914143003, PsoDataType.Float2, 232, 0, 0), + new PsoStructureEntryInfo((MetaName)1935117365, PsoDataType.Float2, 240, 0, 0), + new PsoStructureEntryInfo((MetaName)3465208228, PsoDataType.Float2, 248, 0, 0), + new PsoStructureEntryInfo((MetaName)2745575061, PsoDataType.UInt, 256, 0, 0), + new PsoStructureEntryInfo((MetaName)19236851, PsoDataType.UInt, 260, 0, 0), + new PsoStructureEntryInfo((MetaName)3381171437, PsoDataType.Float, 264, 0, 0), + new PsoStructureEntryInfo((MetaName)4274113098, PsoDataType.Float, 268, 0, 0), + new PsoStructureEntryInfo((MetaName)3364491568, PsoDataType.UInt, 272, 0, 0), + new PsoStructureEntryInfo((MetaName)565980479, PsoDataType.Float, 276, 0, 0), + new PsoStructureEntryInfo((MetaName)467608921, PsoDataType.Float, 280, 0, 0), + new PsoStructureEntryInfo((MetaName)3180328046, PsoDataType.UInt, 284, 0, 0), + new PsoStructureEntryInfo((MetaName)924888517, PsoDataType.UInt, 288, 0, 0), + new PsoStructureEntryInfo((MetaName)1870040536, PsoDataType.Float, 292, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camGameplayDirectorMetadataVehicleCustomSettings), + new PsoStructureEntryInfo((MetaName)3282527658, PsoDataType.Array, 296, 0, (MetaName)66), + new PsoStructureEntryInfo((MetaName)3559905910, PsoDataType.Float, 312, 0, 0), + new PsoStructureEntryInfo((MetaName)259392755, PsoDataType.Float, 316, 0, 0), + new PsoStructureEntryInfo((MetaName)1523938219, PsoDataType.Float, 320, 0, 0), + new PsoStructureEntryInfo((MetaName)3704241863, PsoDataType.UInt, 324, 0, 0), + new PsoStructureEntryInfo((MetaName)2185907197, PsoDataType.UInt, 328, 0, 0), + new PsoStructureEntryInfo((MetaName)2766631017, PsoDataType.UInt, 332, 0, 0), + new PsoStructureEntryInfo((MetaName)4088657953, PsoDataType.UInt, 336, 0, 0), + new PsoStructureEntryInfo((MetaName)2940797056, PsoDataType.UInt, 340, 0, 0), + new PsoStructureEntryInfo((MetaName)926072750, PsoDataType.UInt, 344, 0, 0), + new PsoStructureEntryInfo((MetaName)4071374960, PsoDataType.UInt, 348, 0, 0), + new PsoStructureEntryInfo((MetaName)4097214758, PsoDataType.UInt, 352, 0, 0), + new PsoStructureEntryInfo((MetaName)4182146981, PsoDataType.UInt, 356, 0, 0), + new PsoStructureEntryInfo((MetaName)3961367630, PsoDataType.Float, 360, 0, 0), + new PsoStructureEntryInfo((MetaName)1597015313, PsoDataType.Float, 364, 0, 0), + new PsoStructureEntryInfo((MetaName)2284520874, PsoDataType.Bool, 368, 0, 0), + new PsoStructureEntryInfo((MetaName)4217422073, PsoDataType.Float, 372, 0, 0), + new PsoStructureEntryInfo((MetaName)636518286, PsoDataType.String, 376, 7, 0), + new PsoStructureEntryInfo((MetaName)984379181, PsoDataType.UInt, 380, 0, 0), + new PsoStructureEntryInfo((MetaName)2430934664, PsoDataType.UInt, 384, 0, 0), + new PsoStructureEntryInfo((MetaName)1190562413, PsoDataType.Float2, 388, 0, 0), + new PsoStructureEntryInfo((MetaName)3193796044, PsoDataType.Float2, 396, 0, 0), + new PsoStructureEntryInfo((MetaName)3497158180, PsoDataType.Float2, 404, 0, 0), + new PsoStructureEntryInfo((MetaName)202581691, PsoDataType.Float2, 412, 0, 0), + new PsoStructureEntryInfo((MetaName)1600149759, PsoDataType.Float2, 420, 0, 0), + new PsoStructureEntryInfo((MetaName)310864401, PsoDataType.Float2, 428, 0, 0), + new PsoStructureEntryInfo((MetaName)910310359, PsoDataType.Float, 436, 0, 0), + new PsoStructureEntryInfo((MetaName)1518272577, PsoDataType.Float, 440, 0, 0), + new PsoStructureEntryInfo((MetaName)2881277133, PsoDataType.Float, 444, 0, 0), + new PsoStructureEntryInfo((MetaName)1283045856, PsoDataType.Float, 448, 0, 0), + new PsoStructureEntryInfo((MetaName)1013584657, PsoDataType.UInt, 452, 0, 0), + new PsoStructureEntryInfo((MetaName)1494877942, PsoDataType.UInt, 456, 0, 0), + new PsoStructureEntryInfo((MetaName)3664775821, PsoDataType.String, 460, 7, 0), + new PsoStructureEntryInfo((MetaName)1867117468, PsoDataType.Float, 464, 0, 0), + new PsoStructureEntryInfo((MetaName)425967458, PsoDataType.Float, 468, 0, 0), + new PsoStructureEntryInfo((MetaName)2079587041, PsoDataType.Float, 472, 0, 0), + new PsoStructureEntryInfo((MetaName)3495981266, PsoDataType.Float, 476, 0, 0), + new PsoStructureEntryInfo((MetaName)3273630905, PsoDataType.Float, 480, 0, 0), + new PsoStructureEntryInfo((MetaName)3860060233, PsoDataType.Float, 484, 0, 0), + new PsoStructureEntryInfo((MetaName)2204296545, PsoDataType.Float, 488, 0, 0), + new PsoStructureEntryInfo((MetaName)111546466, PsoDataType.Float, 492, 0, 0), + new PsoStructureEntryInfo((MetaName)2322128139, PsoDataType.Float, 496, 0, 0), + new PsoStructureEntryInfo((MetaName)642537232, PsoDataType.Float, 500, 0, 0), + new PsoStructureEntryInfo((MetaName)2040447490, PsoDataType.Float, 504, 0, 0), + new PsoStructureEntryInfo((MetaName)928667502, PsoDataType.Float, 508, 0, 0), + new PsoStructureEntryInfo((MetaName)3216527316, PsoDataType.UInt, 512, 0, 0), + new PsoStructureEntryInfo((MetaName)3465879577, PsoDataType.UInt, 516, 0, 0), + new PsoStructureEntryInfo((MetaName)3390712027, PsoDataType.UInt, 520, 0, 0), + new PsoStructureEntryInfo((MetaName)2683111365, PsoDataType.UInt, 524, 0, 0), + new PsoStructureEntryInfo((MetaName)3170020756, PsoDataType.UInt, 528, 0, 0), + new PsoStructureEntryInfo((MetaName)4287333189, PsoDataType.UInt, 532, 0, 0), + new PsoStructureEntryInfo((MetaName)115056986, PsoDataType.UInt, 536, 0, 0), + new PsoStructureEntryInfo((MetaName)1843179030, PsoDataType.UInt, 540, 0, 0), + new PsoStructureEntryInfo((MetaName)3134298162, PsoDataType.String, 544, 7, 0), + new PsoStructureEntryInfo((MetaName)1564626128, PsoDataType.String, 548, 7, 0), + new PsoStructureEntryInfo((MetaName)834090440, PsoDataType.Structure, 552, 0, MetaName.camGameplayDirectorMetadataExplosionShakeSettings) + ); + case MetaName.camGameplayDirectorMetadataExplosionShakeSettings: + return new PsoStructureInfo(MetaName.camGameplayDirectorMetadataExplosionShakeSettings, 0, 0, 56, + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)335839296, PsoDataType.Float2, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2118495770, PsoDataType.UInt, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.RumbleDuration, PsoDataType.UInt, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3070197011, PsoDataType.UInt, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2337695573, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)815713089, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1985122943, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)3938350897, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)951241725, PsoDataType.Float, 48, 0, 0) + ); + case MetaName.camGameplayDirectorMetadataVehicleCustomSettings: + return new PsoStructureInfo(MetaName.camGameplayDirectorMetadataVehicleCustomSettings, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.ModelName, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)926775845, PsoDataType.String, 12, 7, 0) + ); + case MetaName.camCinematicDirectorMetadata: + return new PsoStructureInfo(MetaName.camCinematicDirectorMetadata, 0, 0, 104, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)164388064, PsoDataType.UInt, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1567199172, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)4027640984, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)730699960, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)4198475225, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo((MetaName)3640482549, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2985235183, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)200602575, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)2683111365, PsoDataType.UInt, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)1677201089, PsoDataType.String, 60, 7, 0), + new PsoStructureEntryInfo((MetaName)2101508607, PsoDataType.String, 64, 7, 0), + new PsoStructureEntryInfo((MetaName)1867117468, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)425967458, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)2079587041, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo((MetaName)1387858, PsoDataType.Array, 80, 0, MetaName.STRING), + new PsoStructureEntryInfo((MetaName)28440621, PsoDataType.UInt, 96, 0, 0) + ); + case MetaName.camCinematicInVehicleMultiplayerPassengerContextMetadata: + return new PsoStructureInfo(MetaName.camCinematicInVehicleMultiplayerPassengerContextMetadata, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), + new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), + new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), + new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)4114376857, PsoDataType.Bool, 49, 0, 0), + new PsoStructureEntryInfo((MetaName)2434943359, PsoDataType.Bool, 50, 0, 0), + new PsoStructureEntryInfo((MetaName)2838462683, PsoDataType.Bool, 51, 0, 0), + new PsoStructureEntryInfo((MetaName)2639584784, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3699223405, PsoDataType.Bool, 53, 0, 0), + new PsoStructureEntryInfo((MetaName)3274921789, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3966397175, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2910409886, PsoDataType.UInt, 64, 0, 0) + ); + case MetaName.camCinematicShots: + return new PsoStructureInfo(MetaName.camCinematicShots, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)2213248546, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.Priority, PsoDataType.UInt, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)51557962, PsoDataType.Float, 16, 0, 0) + ); + case MetaName.camCinematicSpectatorNewsChannelContextMetadata: + return new PsoStructureInfo(MetaName.camCinematicSpectatorNewsChannelContextMetadata, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), + new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), + new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), + new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)4114376857, PsoDataType.Bool, 49, 0, 0), + new PsoStructureEntryInfo((MetaName)2434943359, PsoDataType.Bool, 50, 0, 0), + new PsoStructureEntryInfo((MetaName)2838462683, PsoDataType.Bool, 51, 0, 0), + new PsoStructureEntryInfo((MetaName)2639584784, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3699223405, PsoDataType.Bool, 53, 0, 0), + new PsoStructureEntryInfo((MetaName)3274921789, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3966397175, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2910409886, PsoDataType.UInt, 64, 0, 0) + ); + case MetaName.camCinematicScriptedMissionCreatorFailContextMetadata: + return new PsoStructureInfo(MetaName.camCinematicScriptedMissionCreatorFailContextMetadata, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), + new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), + new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), + new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)4114376857, PsoDataType.Bool, 49, 0, 0), + new PsoStructureEntryInfo((MetaName)2434943359, PsoDataType.Bool, 50, 0, 0), + new PsoStructureEntryInfo((MetaName)2838462683, PsoDataType.Bool, 51, 0, 0), + new PsoStructureEntryInfo((MetaName)2639584784, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3699223405, PsoDataType.Bool, 53, 0, 0), + new PsoStructureEntryInfo((MetaName)3274921789, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3966397175, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2910409886, PsoDataType.UInt, 64, 0, 0) + ); + case MetaName.camCinematicScriptContextMetadata: + return new PsoStructureInfo(MetaName.camCinematicScriptContextMetadata, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), + new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), + new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), + new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)4114376857, PsoDataType.Bool, 49, 0, 0), + new PsoStructureEntryInfo((MetaName)2434943359, PsoDataType.Bool, 50, 0, 0), + new PsoStructureEntryInfo((MetaName)2838462683, PsoDataType.Bool, 51, 0, 0), + new PsoStructureEntryInfo((MetaName)2639584784, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3699223405, PsoDataType.Bool, 53, 0, 0), + new PsoStructureEntryInfo((MetaName)3274921789, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3966397175, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2910409886, PsoDataType.UInt, 64, 0, 0) + ); + case MetaName.camCinematicScriptedRaceCheckPointContextMetadata: + return new PsoStructureInfo(MetaName.camCinematicScriptedRaceCheckPointContextMetadata, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), + new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), + new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), + new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)4114376857, PsoDataType.Bool, 49, 0, 0), + new PsoStructureEntryInfo((MetaName)2434943359, PsoDataType.Bool, 50, 0, 0), + new PsoStructureEntryInfo((MetaName)2838462683, PsoDataType.Bool, 51, 0, 0), + new PsoStructureEntryInfo((MetaName)2639584784, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3699223405, PsoDataType.Bool, 53, 0, 0), + new PsoStructureEntryInfo((MetaName)3274921789, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3966397175, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2910409886, PsoDataType.UInt, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)1650416254, PsoDataType.UInt, 72, 0, 0) + ); + case MetaName.camCinematicBustedContextMetadata: + return new PsoStructureInfo(MetaName.camCinematicBustedContextMetadata, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), + new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), + new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), + new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)4114376857, PsoDataType.Bool, 49, 0, 0), + new PsoStructureEntryInfo((MetaName)2434943359, PsoDataType.Bool, 50, 0, 0), + new PsoStructureEntryInfo((MetaName)2838462683, PsoDataType.Bool, 51, 0, 0), + new PsoStructureEntryInfo((MetaName)2639584784, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3699223405, PsoDataType.Bool, 53, 0, 0), + new PsoStructureEntryInfo((MetaName)3274921789, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3966397175, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2910409886, PsoDataType.UInt, 64, 0, 0) + ); + case MetaName.camCinematicFallFromHeliContextMetadata: + return new PsoStructureInfo(MetaName.camCinematicFallFromHeliContextMetadata, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), + new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), + new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), + new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)4114376857, PsoDataType.Bool, 49, 0, 0), + new PsoStructureEntryInfo((MetaName)2434943359, PsoDataType.Bool, 50, 0, 0), + new PsoStructureEntryInfo((MetaName)2838462683, PsoDataType.Bool, 51, 0, 0), + new PsoStructureEntryInfo((MetaName)2639584784, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3699223405, PsoDataType.Bool, 53, 0, 0), + new PsoStructureEntryInfo((MetaName)3274921789, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3966397175, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2910409886, PsoDataType.UInt, 64, 0, 0) + ); + case MetaName.camCinematicInVehicleOverriddenFirstPersonContextMetadata: + return new PsoStructureInfo(MetaName.camCinematicInVehicleOverriddenFirstPersonContextMetadata, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), + new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), + new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), + new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)4114376857, PsoDataType.Bool, 49, 0, 0), + new PsoStructureEntryInfo((MetaName)2434943359, PsoDataType.Bool, 50, 0, 0), + new PsoStructureEntryInfo((MetaName)2838462683, PsoDataType.Bool, 51, 0, 0), + new PsoStructureEntryInfo((MetaName)2639584784, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3699223405, PsoDataType.Bool, 53, 0, 0), + new PsoStructureEntryInfo((MetaName)3274921789, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3966397175, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2910409886, PsoDataType.UInt, 64, 0, 0) + ); + case MetaName.camCinematicInVehicleWantedContextMetadata: + return new PsoStructureInfo(MetaName.camCinematicInVehicleWantedContextMetadata, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), + new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), + new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), + new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)4114376857, PsoDataType.Bool, 49, 0, 0), + new PsoStructureEntryInfo((MetaName)2434943359, PsoDataType.Bool, 50, 0, 0), + new PsoStructureEntryInfo((MetaName)2838462683, PsoDataType.Bool, 51, 0, 0), + new PsoStructureEntryInfo((MetaName)2639584784, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3699223405, PsoDataType.Bool, 53, 0, 0), + new PsoStructureEntryInfo((MetaName)3274921789, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3966397175, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2910409886, PsoDataType.UInt, 64, 0, 0) + ); + case MetaName.camPreferredShotSelectionType: + return new PsoStructureInfo(MetaName.camPreferredShotSelectionType, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)2213248546, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1445865118, PsoDataType.Enum, 12, 0, (MetaName)3889593720) + ); + case MetaName.camCinematicInVehicleContextMetadata: + return new PsoStructureInfo(MetaName.camCinematicInVehicleContextMetadata, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), + new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), + new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), + new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)4114376857, PsoDataType.Bool, 49, 0, 0), + new PsoStructureEntryInfo((MetaName)2434943359, PsoDataType.Bool, 50, 0, 0), + new PsoStructureEntryInfo((MetaName)2838462683, PsoDataType.Bool, 51, 0, 0), + new PsoStructureEntryInfo((MetaName)2639584784, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3699223405, PsoDataType.Bool, 53, 0, 0), + new PsoStructureEntryInfo((MetaName)3274921789, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3966397175, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2910409886, PsoDataType.UInt, 64, 0, 0) + ); + case MetaName.camCinematicInTrainAtStationContextMetadata: + return new PsoStructureInfo(MetaName.camCinematicInTrainAtStationContextMetadata, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), + new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), + new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), + new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)4114376857, PsoDataType.Bool, 49, 0, 0), + new PsoStructureEntryInfo((MetaName)2434943359, PsoDataType.Bool, 50, 0, 0), + new PsoStructureEntryInfo((MetaName)2838462683, PsoDataType.Bool, 51, 0, 0), + new PsoStructureEntryInfo((MetaName)2639584784, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3699223405, PsoDataType.Bool, 53, 0, 0), + new PsoStructureEntryInfo((MetaName)3274921789, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3966397175, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2910409886, PsoDataType.UInt, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)2216049071, PsoDataType.UInt, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)3119408512, PsoDataType.UInt, 76, 0, 0) + ); + case MetaName.camCinematicInTrainContextMetadata: + return new PsoStructureInfo(MetaName.camCinematicInTrainContextMetadata, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), + new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), + new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), + new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)4114376857, PsoDataType.Bool, 49, 0, 0), + new PsoStructureEntryInfo((MetaName)2434943359, PsoDataType.Bool, 50, 0, 0), + new PsoStructureEntryInfo((MetaName)2838462683, PsoDataType.Bool, 51, 0, 0), + new PsoStructureEntryInfo((MetaName)2639584784, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3699223405, PsoDataType.Bool, 53, 0, 0), + new PsoStructureEntryInfo((MetaName)3274921789, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3966397175, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2910409886, PsoDataType.UInt, 64, 0, 0) + ); + case MetaName.camCinematicOnFootSpectatingContextMetadata: + return new PsoStructureInfo(MetaName.camCinematicOnFootSpectatingContextMetadata, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), + new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), + new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), + new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)4114376857, PsoDataType.Bool, 49, 0, 0), + new PsoStructureEntryInfo((MetaName)2434943359, PsoDataType.Bool, 50, 0, 0), + new PsoStructureEntryInfo((MetaName)2838462683, PsoDataType.Bool, 51, 0, 0), + new PsoStructureEntryInfo((MetaName)2639584784, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3699223405, PsoDataType.Bool, 53, 0, 0), + new PsoStructureEntryInfo((MetaName)3274921789, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3966397175, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2910409886, PsoDataType.UInt, 64, 0, 0) + ); + case MetaName.camCinematicParachuteContextMetadata: + return new PsoStructureInfo(MetaName.camCinematicParachuteContextMetadata, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), + new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), + new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), + new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)4114376857, PsoDataType.Bool, 49, 0, 0), + new PsoStructureEntryInfo((MetaName)2434943359, PsoDataType.Bool, 50, 0, 0), + new PsoStructureEntryInfo((MetaName)2838462683, PsoDataType.Bool, 51, 0, 0), + new PsoStructureEntryInfo((MetaName)2639584784, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3699223405, PsoDataType.Bool, 53, 0, 0), + new PsoStructureEntryInfo((MetaName)3274921789, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3966397175, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2910409886, PsoDataType.UInt, 64, 0, 0) + ); + case MetaName.camCinematicStuntJumpContextMetadata: + return new PsoStructureInfo(MetaName.camCinematicStuntJumpContextMetadata, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), + new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), + new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), + new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)4114376857, PsoDataType.Bool, 49, 0, 0), + new PsoStructureEntryInfo((MetaName)2434943359, PsoDataType.Bool, 50, 0, 0), + new PsoStructureEntryInfo((MetaName)2838462683, PsoDataType.Bool, 51, 0, 0), + new PsoStructureEntryInfo((MetaName)2639584784, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3699223405, PsoDataType.Bool, 53, 0, 0), + new PsoStructureEntryInfo((MetaName)3274921789, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3966397175, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2910409886, PsoDataType.UInt, 64, 0, 0) + ); + case MetaName.camCinematicOnFootAssistedAimingContextMetadata: + return new PsoStructureInfo(MetaName.camCinematicOnFootAssistedAimingContextMetadata, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), + new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), + new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), + new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)4114376857, PsoDataType.Bool, 49, 0, 0), + new PsoStructureEntryInfo((MetaName)2434943359, PsoDataType.Bool, 50, 0, 0), + new PsoStructureEntryInfo((MetaName)2838462683, PsoDataType.Bool, 51, 0, 0), + new PsoStructureEntryInfo((MetaName)2639584784, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3699223405, PsoDataType.Bool, 53, 0, 0), + new PsoStructureEntryInfo((MetaName)3274921789, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3966397175, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2910409886, PsoDataType.UInt, 64, 0, 0) + ); + case MetaName.camCinematicOnFootMeleeContextMetadata: + return new PsoStructureInfo(MetaName.camCinematicOnFootMeleeContextMetadata, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), + new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), + new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), + new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)4114376857, PsoDataType.Bool, 49, 0, 0), + new PsoStructureEntryInfo((MetaName)2434943359, PsoDataType.Bool, 50, 0, 0), + new PsoStructureEntryInfo((MetaName)2838462683, PsoDataType.Bool, 51, 0, 0), + new PsoStructureEntryInfo((MetaName)2639584784, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3699223405, PsoDataType.Bool, 53, 0, 0), + new PsoStructureEntryInfo((MetaName)3274921789, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3966397175, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2910409886, PsoDataType.UInt, 64, 0, 0) + ); + case MetaName.camCinematicInVehicleFirstPersonContextMetadata: + return new PsoStructureInfo(MetaName.camCinematicInVehicleFirstPersonContextMetadata, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), + new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), + new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), + new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)4114376857, PsoDataType.Bool, 49, 0, 0), + new PsoStructureEntryInfo((MetaName)2434943359, PsoDataType.Bool, 50, 0, 0), + new PsoStructureEntryInfo((MetaName)2838462683, PsoDataType.Bool, 51, 0, 0), + new PsoStructureEntryInfo((MetaName)2639584784, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3699223405, PsoDataType.Bool, 53, 0, 0), + new PsoStructureEntryInfo((MetaName)3274921789, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3966397175, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2910409886, PsoDataType.UInt, 64, 0, 0) + ); + case MetaName.camCinematicOnFootIdleContextMetadata: + return new PsoStructureInfo(MetaName.camCinematicOnFootIdleContextMetadata, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), + new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), + new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), + new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)4114376857, PsoDataType.Bool, 49, 0, 0), + new PsoStructureEntryInfo((MetaName)2434943359, PsoDataType.Bool, 50, 0, 0), + new PsoStructureEntryInfo((MetaName)2838462683, PsoDataType.Bool, 51, 0, 0), + new PsoStructureEntryInfo((MetaName)2639584784, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3699223405, PsoDataType.Bool, 53, 0, 0), + new PsoStructureEntryInfo((MetaName)3274921789, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3966397175, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2910409886, PsoDataType.UInt, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)1879525600, PsoDataType.UInt, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)1202637816, PsoDataType.Float, 76, 0, 0) + ); + case MetaName.camSyncedSceneDirectorMetadata: + return new PsoStructureInfo(MetaName.camSyncedSceneDirectorMetadata, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2406434970, PsoDataType.String, 24, 7, 0) + ); + case MetaName.camScriptDirectorMetadata: + return new PsoStructureInfo(MetaName.camScriptDirectorMetadata, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3308601968, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1044888659, PsoDataType.String, 28, 7, 0), + new PsoStructureEntryInfo((MetaName)609660376, PsoDataType.UInt, 32, 0, 0) + ); + case MetaName.camSwitchDirectorMetadata: + return new PsoStructureInfo(MetaName.camSwitchDirectorMetadata, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)4284026199, PsoDataType.String, 24, 7, 0) + ); + case MetaName.camCutsceneDirectorMetadata: + return new PsoStructureInfo(MetaName.camCutsceneDirectorMetadata, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1814055656, PsoDataType.String, 24, 7, 0) + ); + case MetaName.camReplayDirectorMetadata: + return new PsoStructureInfo(MetaName.camReplayDirectorMetadata, 0, 0, 160, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2721634605, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)2132680058, PsoDataType.String, 28, 7, 0), + new PsoStructureEntryInfo((MetaName)491767013, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo((MetaName)2648380967, PsoDataType.String, 36, 7, 0), + new PsoStructureEntryInfo((MetaName)4072288030, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo((MetaName)664486210, PsoDataType.String, 44, 7, 0), + new PsoStructureEntryInfo((MetaName)3903471436, PsoDataType.String, 48, 7, 0), + new PsoStructureEntryInfo((MetaName)3789126205, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)2319741638, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)1596110048, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)1238798750, PsoDataType.Float3, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)1362065867, PsoDataType.String, 80, 7, 0), + new PsoStructureEntryInfo((MetaName)2640324566, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)3068943162, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)81027141, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)4246618820, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)1674718375, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)227690771, PsoDataType.String, 104, 7, 0), + new PsoStructureEntryInfo((MetaName)1982856886, PsoDataType.String, 108, 7, 0), + new PsoStructureEntryInfo((MetaName)881665360, PsoDataType.String, 112, 7, 0), + new PsoStructureEntryInfo((MetaName)2599823537, PsoDataType.String, 116, 7, 0), + new PsoStructureEntryInfo((MetaName)3206570060, PsoDataType.String, 120, 7, 0), + new PsoStructureEntryInfo((MetaName)1690145332, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)4171384554, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)3385138470, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)950635108, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)925408249, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)3918000719, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)1379084243, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo((MetaName)2245689292, PsoDataType.Float, 152, 0, 0) + ); + case MetaName.camDebugDirectorMetadata: + return new PsoStructureInfo(MetaName.camDebugDirectorMetadata, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2750009688, PsoDataType.String, 24, 7, 0) + ); + case MetaName.camMarketingDirectorMetadata: + return new PsoStructureInfo(MetaName.camMarketingDirectorMetadata, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camMarketingDirectorMetadataMode), + new PsoStructureEntryInfo((MetaName)945555571, PsoDataType.Array, 24, 0, (MetaName)2) + ); + case MetaName.camMarketingDirectorMetadataMode: + return new PsoStructureInfo(MetaName.camMarketingDirectorMetadataMode, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2047169098, PsoDataType.String, 12, 0, (MetaName)1048576) + ); + case MetaName.CExplosionInfoManager: + return new PsoStructureInfo(MetaName.CExplosionInfoManager, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2541591167), + new PsoStructureEntryInfo(MetaName.aExplosionTagData, PsoDataType.Array, 8, 0, 0) + ); + case (MetaName)2541591167: + return new PsoStructureInfo((MetaName)2541591167, 0, 0, 136, + new PsoStructureEntryInfo(MetaName.name, PsoDataType.String, 8, 3, 0), + new PsoStructureEntryInfo(MetaName.damageAtCentre, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.damageAtEdge, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.networkPlayerModifier, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.networkPedModifier, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.endRadius, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.initSpeed, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.decayFactor, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.forceFactor, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.fRagdollForceModifier, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.fSelfForceModifier, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.directedWidth, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.directedLifeTime, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.camShakeName, PsoDataType.String, 72, 7, 0), + new PsoStructureEntryInfo(MetaName.camShake, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.camShakeRollOffScaling, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.shockingEventVisualRangeOverride, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.shockingEventAudioRangeOverride, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.minorExplosion, PsoDataType.Bool, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.vfxTagHashName, PsoDataType.String, 96, 7, 0), + new PsoStructureEntryInfo(MetaName.fragDamage, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.bAppliesContinuousDamage, PsoDataType.Bool, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.bPostProcessCollisionsWithNoForce, PsoDataType.Bool, 105, 0, 0), + new PsoStructureEntryInfo(MetaName.bDamageVehicles, PsoDataType.Bool, 106, 0, 0), + new PsoStructureEntryInfo(MetaName.bDamageObjects, PsoDataType.Bool, 107, 0, 0), + new PsoStructureEntryInfo(MetaName.bOnlyAffectsLivePeds, PsoDataType.Bool, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.bIgnoreExplodingEntity, PsoDataType.Bool, 109, 0, 0), + new PsoStructureEntryInfo(MetaName.bNoOcclusion, PsoDataType.Bool, 110, 0, 0), + new PsoStructureEntryInfo(MetaName.explodeAttachEntityWhenFinished, PsoDataType.Bool, 111, 0, 0), + new PsoStructureEntryInfo(MetaName.bCanSetPedOnFire, PsoDataType.Bool, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)3710755331, PsoDataType.Bool, 113, 0, 0), + new PsoStructureEntryInfo(MetaName.bSuppressCrime, PsoDataType.Bool, 114, 0, 0), + new PsoStructureEntryInfo(MetaName.bUseDistanceDamageCalc, PsoDataType.Bool, 115, 0, 0), + new PsoStructureEntryInfo(MetaName.bPreventWaterExplosionVFX, PsoDataType.Bool, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)2400251666, PsoDataType.Bool, 117, 0, 0), + new PsoStructureEntryInfo((MetaName)2310120635, PsoDataType.Bool, 118, 0, 0), + new PsoStructureEntryInfo((MetaName)3312297335, PsoDataType.Bool, 119, 0, 0), + new PsoStructureEntryInfo((MetaName)3099411482, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)3010331635, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)178952880, PsoDataType.Bool, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)1236241772, PsoDataType.Bool, 129, 0, 0), + new PsoStructureEntryInfo((MetaName)1509365439, PsoDataType.Bool, 130, 0, 0), + new PsoStructureEntryInfo((MetaName)1334397542, PsoDataType.Bool, 131, 0, 0), + new PsoStructureEntryInfo((MetaName)3983992955, PsoDataType.Bool, 132, 0, 0) + ); + case MetaName.CPedModelInfo__PersonalityDataList: + return new PsoStructureInfo(MetaName.CPedModelInfo__PersonalityDataList, 0, 0, 88, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1111461724), + new PsoStructureEntryInfo(MetaName.MovementModeUnholsterData, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)29118966), + new PsoStructureEntryInfo(MetaName.MovementModes, PsoDataType.Array, 24, 0, (MetaName)2), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)4185391031), + new PsoStructureEntryInfo(MetaName.PedPersonalities, PsoDataType.Array, 40, 0, (MetaName)4), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)905918498), + new PsoStructureEntryInfo((MetaName)1481182292, PsoDataType.Array, 56, 0, (MetaName)6), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2072330808), + new PsoStructureEntryInfo((MetaName)1643851287, PsoDataType.Array, 72, 0, (MetaName)8) + ); + case (MetaName)1111461724: + return new PsoStructureInfo((MetaName)1111461724, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2934735155), + new PsoStructureEntryInfo(MetaName.UnholsterClips, PsoDataType.Array, 16, 0, (MetaName)1) + ); + case (MetaName)2934735155: + return new PsoStructureInfo((MetaName)2934735155, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.Weapons, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.Clip, PsoDataType.String, 24, 7, 0) + ); + case (MetaName)29118966: + return new PsoStructureInfo((MetaName)29118966, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1727236615), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Array, 0, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.MovementModes, PsoDataType.Array, 16, 4, (MetaName)131074), + new PsoStructureEntryInfo((MetaName)271833144, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2064072700, PsoDataType.Float, 52, 0, 0) + ); + case (MetaName)1727236615: + return new PsoStructureInfo((MetaName)1727236615, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.Weapons, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3455138791), + new PsoStructureEntryInfo(MetaName.ClipSets, PsoDataType.Array, 24, 0, (MetaName)2) + ); + case (MetaName)3455138791: + return new PsoStructureInfo((MetaName)3455138791, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.MovementClipSetId, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.WeaponClipSetId, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo(MetaName.WeaponClipFilterId, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.UpperBodyShadowExpressionEnabled, PsoDataType.Bool, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.UpperBodyFeatheredLeanEnabled, PsoDataType.Bool, 21, 0, 0), + new PsoStructureEntryInfo(MetaName.UseWeaponAnimsForGrip, PsoDataType.Bool, 22, 0, 0), + new PsoStructureEntryInfo(MetaName.UseLeftHandIk, PsoDataType.Bool, 23, 0, 0), + new PsoStructureEntryInfo(MetaName.IdleTransitionBlendOutTime, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.IdleTransitions, PsoDataType.Array, 32, 0, (MetaName)8), + new PsoStructureEntryInfo(MetaName.UnholsterClipSetId, PsoDataType.String, 48, 7, 0), + new PsoStructureEntryInfo(MetaName.UnholsterClipData, PsoDataType.String, 52, 7, 0) + ); + case (MetaName)4185391031: + return new PsoStructureInfo((MetaName)4185391031, 0, 0, 184, + new PsoStructureEntryInfo((MetaName)4206114216, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2744215759, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo((MetaName)2511674669, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3499834918, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3808740257, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1849624842, PsoDataType.String, 28, 7, 0), + new PsoStructureEntryInfo((MetaName)372913173, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.WeaponAnimations, PsoDataType.Array, 40, 0, MetaName.POINTER), + new PsoStructureEntryInfo((MetaName)3268464789, PsoDataType.String, 56, 7, 0), + new PsoStructureEntryInfo((MetaName)1504162135, PsoDataType.String, 60, 7, 0), + new PsoStructureEntryInfo((MetaName)3039521267, PsoDataType.Structure, 64, 0, (MetaName)265080325), + new PsoStructureEntryInfo((MetaName)819954510, PsoDataType.Bool, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)2212592004, PsoDataType.Bool, 81, 0, 0), + new PsoStructureEntryInfo((MetaName)89900819, PsoDataType.Bool, 82, 0, 0), + new PsoStructureEntryInfo((MetaName)1945623796, PsoDataType.Bool, 83, 0, 0), + new PsoStructureEntryInfo((MetaName)622092394, PsoDataType.Bool, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)1025165367, PsoDataType.Bool, 85, 0, 0), + new PsoStructureEntryInfo((MetaName)1867113976, PsoDataType.Bool, 86, 0, 0), + new PsoStructureEntryInfo((MetaName)2821566375, PsoDataType.Bool, 87, 0, 0), + new PsoStructureEntryInfo((MetaName)2380425018, PsoDataType.Bool, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)3260171409, PsoDataType.Bool, 89, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)2920442291), + new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 92, 0, (MetaName)524310), + new PsoStructureEntryInfo((MetaName)2502152653, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)3806042807, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)1862920964, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)3330066831, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)2721388482, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)2530332272, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)1873521687, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)3362977435, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)167232035, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)3370827836, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)1960961110, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)4238411479, PsoDataType.UInt, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)2674738037, PsoDataType.UInt, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)1569329370, PsoDataType.UByte, 148, 0, 0), + new PsoStructureEntryInfo((MetaName)866268907, PsoDataType.UByte, 149, 0, 0), + new PsoStructureEntryInfo((MetaName)1151027181, PsoDataType.UByte, 150, 0, 0), + new PsoStructureEntryInfo((MetaName)534710722, PsoDataType.UByte, 151, 0, 0), + new PsoStructureEntryInfo(MetaName.Affluence, PsoDataType.Enum, 152, 0, MetaName.Affluence), + new PsoStructureEntryInfo(MetaName.TechSavvy, PsoDataType.Enum, 156, 0, MetaName.TechSavvy), + new PsoStructureEntryInfo(MetaName.MovementModes, PsoDataType.String, 160, 7, 0), + new PsoStructureEntryInfo((MetaName)961290246, PsoDataType.String, 164, 7, 0), + new PsoStructureEntryInfo((MetaName)2940814298, PsoDataType.String, 168, 7, 0), + new PsoStructureEntryInfo((MetaName)3087874789, PsoDataType.String, 172, 7, 0), + new PsoStructureEntryInfo((MetaName)1227904788, PsoDataType.String, 176, 7, 0) + ); + case (MetaName)265080325: + return new PsoStructureInfo((MetaName)265080325, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)2675594832), + new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.Flags, 8, 0, (MetaName)2097152), + new PsoStructureEntryInfo((MetaName)1366066164, PsoDataType.Float, 12, 0, 0) + ); + case (MetaName)905918498: + return new PsoStructureInfo((MetaName)905918498, 0, 0, 256, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3079935216), + new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.Flags, 12, 0, (MetaName)2097153), + new PsoStructureEntryInfo((MetaName)3234488441, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1368196689, PsoDataType.Structure, 24, 0, (MetaName)3637970520), + new PsoStructureEntryInfo((MetaName)2782470584, PsoDataType.Structure, 96, 0, (MetaName)3637970520), + new PsoStructureEntryInfo((MetaName)1842245065, PsoDataType.Structure, 168, 0, (MetaName)3637970520), + new PsoStructureEntryInfo((MetaName)1811637113, PsoDataType.Structure, 240, 0, (MetaName)651017172) + ); + case (MetaName)3637970520: + return new PsoStructureInfo((MetaName)3637970520, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Action, PsoDataType.Structure, 8, 0, (MetaName)3450423538), + new PsoStructureEntryInfo(MetaName.Fight, PsoDataType.Structure, 32, 0, (MetaName)301719986) + ); + case (MetaName)3450423538: + return new PsoStructureInfo((MetaName)3450423538, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)3025359898, PsoDataType.Structure, 8, 0, (MetaName)3954379444) + ); + case (MetaName)3954379444: + return new PsoStructureInfo((MetaName)3954379444, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.Fight, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.Flee, PsoDataType.Float, 12, 0, 0) + ); + case (MetaName)301719986: + return new PsoStructureInfo((MetaName)301719986, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)3025359898, PsoDataType.Structure, 8, 0, (MetaName)272028034), + new PsoStructureEntryInfo((MetaName)1774223506, PsoDataType.Float, 32, 0, 0) + ); + case (MetaName)272028034: + return new PsoStructureInfo((MetaName)272028034, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)1218243798, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2028274881, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)962329419, PsoDataType.Float, 16, 0, 0) + ); + case (MetaName)651017172: + return new PsoStructureInfo((MetaName)651017172, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)52194177, PsoDataType.Float, 12, 0, 0) + ); + case (MetaName)2072330808: + return new PsoStructureInfo((MetaName)2072330808, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)1639628591), + new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.Flags, 12, 0, (MetaName)2097153) + ); + case MetaName.sStatsMetadataTuning: + return new PsoStructureInfo(MetaName.sStatsMetadataTuning, 0, 0, 72, + new PsoStructureEntryInfo((MetaName)1063717096, PsoDataType.UInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1801522365, PsoDataType.UInt, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)1740411412, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)803970846, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2099608654, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2222926220, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3662021366, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2301583602, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3004548533, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)3235406138, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)3958481819, PsoDataType.Structure, 48, 0, (MetaName)665455491) + ); + case MetaName.CFiringPatternInfoManager: + return new PsoStructureInfo(MetaName.CFiringPatternInfoManager, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo(MetaName.Infos, PsoDataType.Array, 8, 0, 0) + ); + case MetaName.CFiringPatternInfo: + return new PsoStructureInfo(MetaName.CFiringPatternInfo, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)236118490, PsoDataType.SShort, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3616069026, PsoDataType.SShort, 14, 0, 0), + new PsoStructureEntryInfo((MetaName)2577107356, PsoDataType.SShort, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)428905168, PsoDataType.SShort, 18, 0, 0), + new PsoStructureEntryInfo((MetaName)965484170, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2449042043, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)4134391333, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1007771611, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1662854346, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)913069912, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1761265942, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)6520997, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2922044807, PsoDataType.Bool, 52, 0, 0) + ); + case (MetaName)2828759280: + return new PsoStructureInfo((MetaName)2828759280, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo(MetaName.Tunables, PsoDataType.Array, 0, 0, 0) + ); + case MetaName.CCombatTaskManager__Tunables: + return new PsoStructureInfo(MetaName.CCombatTaskManager__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)4202105817, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)269064650, PsoDataType.SInt, 20, 0, 0) + ); + case MetaName.CTaskAnimatedHitByExplosion__Tunables: + return new PsoStructureInfo(MetaName.CTaskAnimatedHitByExplosion__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1901527010, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3861069366, PsoDataType.Bool, 20, 0, 0) + ); + case MetaName.CTaskStandGuard__Tunables: + return new PsoStructureInfo(MetaName.CTaskStandGuard__Tunables, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1521808097, PsoDataType.SInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3857242043, PsoDataType.SInt, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3250827903, PsoDataType.SInt, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3128562978, PsoDataType.SInt, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1521803727, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1708395848, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)4261831117, PsoDataType.Float, 40, 0, 0) + ); + case MetaName.CTaskCombatAdditionalTask__Tunables: + return new PsoStructureInfo(MetaName.CTaskCombatAdditionalTask__Tunables, 0, 0, 88, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2255380962, PsoDataType.SInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)7313110, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1721763990, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1959218646, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)599255143, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2829098503, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1719840119, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2930793396, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)547548618, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2899412417, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)1894206862, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)2587275512, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)3866357326, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)630125920, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)1041070680, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)679941746, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)2878670581, PsoDataType.Float, 80, 0, 0) + ); + case MetaName.CTaskCombatFlank__Tunables: + return new PsoStructureInfo(MetaName.CTaskCombatFlank__Tunables, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3016470091, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)983725397, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3585286231, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2889725249, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)304969557, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2500728149, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3835533225, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1893361518, PsoDataType.Float, 44, 0, 0) + ); + case MetaName.CTaskHelicopterStrafe__Tunables: + return new PsoStructureInfo(MetaName.CTaskHelicopterStrafe__Tunables, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2016619356, PsoDataType.SInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2018929951, PsoDataType.SInt, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3431388800, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.TargetOffset, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3344078648, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2121954925, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)4228837765, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2249292417, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2919714320, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)4211240273, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3025087075, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)1512295050, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2760165709, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)2688788428, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)4288775642, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)4157008494, PsoDataType.Float, 76, 0, 0) + ); + case MetaName.CTaskMeleeActionResult__Tunables: + return new PsoStructureInfo(MetaName.CTaskMeleeActionResult__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)258368020, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)111777931, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.CTaskMoveCombatMounted__Tunables: + return new PsoStructureInfo(MetaName.CTaskMoveCombatMounted__Tunables, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Float, 0, 0, 0), + new PsoStructureEntryInfo((MetaName)1409114490, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo((MetaName)3404462, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)4160428671, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1038805177, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)4282065899, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)3146864305, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)3555988495, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)1160010076, PsoDataType.UInt, 56, 0, 0) + ); + case MetaName.CTaskDyingDead__Tunables: + return new PsoStructureInfo(MetaName.CTaskDyingDead__Tunables, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)99981148, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)399270735, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2802719757, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)71889384, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1632351140, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2511398250, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1562486689, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)445822306, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)4154063324, PsoDataType.UInt, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2820766976, PsoDataType.UInt, 52, 0, 0) + ); + case MetaName.CTaskDamageElectric__Tunables: + return new PsoStructureInfo(MetaName.CTaskDamageElectric__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2846727445, PsoDataType.Float, 16, 0, 0) + ); + case MetaName.CTaskInvestigate__Tunables: + return new PsoStructureInfo(MetaName.CTaskInvestigate__Tunables, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1751162602, PsoDataType.SInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3455250403, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3352862788, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2009665019, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)445998819, PsoDataType.Float, 32, 0, 0) + ); + case MetaName.CTaskCombat__Tunables: + return new PsoStructureInfo(MetaName.CTaskCombat__Tunables, 0, 0, 704, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1747672916, PsoDataType.Structure, 16, 0, (MetaName)4144542252), + new PsoStructureEntryInfo((MetaName)2857118825, PsoDataType.Structure, 48, 0, (MetaName)455065356), + new PsoStructureEntryInfo((MetaName)3589303034, PsoDataType.Structure, 144, 0, (MetaName)1818844971), + new PsoStructureEntryInfo((MetaName)612012739, PsoDataType.Structure, 168, 0, (MetaName)3736726978), + new PsoStructureEntryInfo((MetaName)3088747583, PsoDataType.Structure, 240, 0, (MetaName)1530415684), + new PsoStructureEntryInfo((MetaName)2187323127, PsoDataType.Float, 288, 0, 0), + new PsoStructureEntryInfo((MetaName)2157843494, PsoDataType.Float, 292, 0, 0), + new PsoStructureEntryInfo((MetaName)2971689701, PsoDataType.Float, 296, 0, 0), + new PsoStructureEntryInfo((MetaName)2501949685, PsoDataType.Float, 300, 0, 0), + new PsoStructureEntryInfo((MetaName)2145163833, PsoDataType.Float, 304, 0, 0), + new PsoStructureEntryInfo((MetaName)3652101978, PsoDataType.Float, 308, 0, 0), + new PsoStructureEntryInfo((MetaName)884701582, PsoDataType.Float, 312, 0, 0), + new PsoStructureEntryInfo((MetaName)593698055, PsoDataType.Float, 316, 0, 0), + new PsoStructureEntryInfo((MetaName)3273513642, PsoDataType.Float, 320, 0, 0), + new PsoStructureEntryInfo((MetaName)1947279181, PsoDataType.Float, 324, 0, 0), + new PsoStructureEntryInfo((MetaName)449264633, PsoDataType.Float, 328, 0, 0), + new PsoStructureEntryInfo((MetaName)3581780763, PsoDataType.Float, 332, 0, 0), + new PsoStructureEntryInfo((MetaName)1975275563, PsoDataType.Float, 336, 0, 0), + new PsoStructureEntryInfo((MetaName)1192276059, PsoDataType.Float, 340, 0, 0), + new PsoStructureEntryInfo((MetaName)4116440083, PsoDataType.Float, 344, 0, 0), + new PsoStructureEntryInfo((MetaName)919558869, PsoDataType.Float, 348, 0, 0), + new PsoStructureEntryInfo((MetaName)2786807653, PsoDataType.Float, 352, 0, 0), + new PsoStructureEntryInfo((MetaName)2224359067, PsoDataType.Float, 356, 0, 0), + new PsoStructureEntryInfo((MetaName)970868308, PsoDataType.Float, 360, 0, 0), + new PsoStructureEntryInfo((MetaName)2673669317, PsoDataType.Float, 364, 0, 0), + new PsoStructureEntryInfo((MetaName)4141996221, PsoDataType.Float, 368, 0, 0), + new PsoStructureEntryInfo((MetaName)379663563, PsoDataType.Float, 372, 0, 0), + new PsoStructureEntryInfo((MetaName)1187764077, PsoDataType.Float, 376, 0, 0), + new PsoStructureEntryInfo((MetaName)2226395755, PsoDataType.Float, 380, 0, 0), + new PsoStructureEntryInfo((MetaName)1257619633, PsoDataType.Float, 384, 0, 0), + new PsoStructureEntryInfo((MetaName)697272720, PsoDataType.Float, 388, 0, 0), + new PsoStructureEntryInfo((MetaName)610577934, PsoDataType.Float, 392, 0, 0), + new PsoStructureEntryInfo((MetaName)3340527808, PsoDataType.Float, 396, 0, 0), + new PsoStructureEntryInfo((MetaName)3243108638, PsoDataType.Float, 400, 0, 0), + new PsoStructureEntryInfo((MetaName)3128077167, PsoDataType.Float, 404, 0, 0), + new PsoStructureEntryInfo((MetaName)687676716, PsoDataType.Float, 408, 0, 0), + new PsoStructureEntryInfo((MetaName)3683572550, PsoDataType.Float, 412, 0, 0), + new PsoStructureEntryInfo((MetaName)2278473263, PsoDataType.Float, 416, 0, 0), + new PsoStructureEntryInfo((MetaName)2756383457, PsoDataType.Float, 420, 0, 0), + new PsoStructureEntryInfo((MetaName)3389707560, PsoDataType.Float, 424, 0, 0), + new PsoStructureEntryInfo((MetaName)1148925964, PsoDataType.Float, 428, 0, 0), + new PsoStructureEntryInfo((MetaName)853543838, PsoDataType.Float, 432, 0, 0), + new PsoStructureEntryInfo((MetaName)562041905, PsoDataType.Float, 436, 0, 0), + new PsoStructureEntryInfo((MetaName)1249935741, PsoDataType.Float, 440, 0, 0), + new PsoStructureEntryInfo((MetaName)3136547752, PsoDataType.Float, 444, 0, 0), + new PsoStructureEntryInfo((MetaName)1473938462, PsoDataType.Float, 448, 0, 0), + new PsoStructureEntryInfo((MetaName)2237966956, PsoDataType.Float, 452, 0, 0), + new PsoStructureEntryInfo((MetaName)4258831091, PsoDataType.Float, 456, 0, 0), + new PsoStructureEntryInfo((MetaName)1679184192, PsoDataType.Float, 460, 0, 0), + new PsoStructureEntryInfo((MetaName)4246707502, PsoDataType.Float, 464, 0, 0), + new PsoStructureEntryInfo((MetaName)1578284711, PsoDataType.Float, 468, 0, 0), + new PsoStructureEntryInfo((MetaName)1032956977, PsoDataType.Float, 472, 0, 0), + new PsoStructureEntryInfo((MetaName)1074424476, PsoDataType.Float, 476, 0, 0), + new PsoStructureEntryInfo((MetaName)3914650526, PsoDataType.Float, 480, 0, 0), + new PsoStructureEntryInfo((MetaName)1201850831, PsoDataType.Float, 484, 0, 0), + new PsoStructureEntryInfo((MetaName)2423717597, PsoDataType.Float, 488, 0, 0), + new PsoStructureEntryInfo((MetaName)1848729150, PsoDataType.Float, 492, 0, 0), + new PsoStructureEntryInfo((MetaName)3390705532, PsoDataType.Float, 496, 0, 0), + new PsoStructureEntryInfo((MetaName)3200641731, PsoDataType.Float, 500, 0, 0), + new PsoStructureEntryInfo((MetaName)4164431042, PsoDataType.Float, 504, 0, 0), + new PsoStructureEntryInfo((MetaName)1927524225, PsoDataType.Float, 508, 0, 0), + new PsoStructureEntryInfo((MetaName)4182891936, PsoDataType.Float, 512, 0, 0), + new PsoStructureEntryInfo((MetaName)3826933504, PsoDataType.Float, 516, 0, 0), + new PsoStructureEntryInfo((MetaName)1336699435, PsoDataType.Float, 520, 0, 0), + new PsoStructureEntryInfo((MetaName)1022323136, PsoDataType.Float, 524, 0, 0), + new PsoStructureEntryInfo((MetaName)189140842, PsoDataType.Float, 528, 0, 0), + new PsoStructureEntryInfo((MetaName)2154434340, PsoDataType.Float, 532, 0, 0), + new PsoStructureEntryInfo((MetaName)3875303030, PsoDataType.Float, 536, 0, 0), + new PsoStructureEntryInfo((MetaName)2374284734, PsoDataType.Float, 540, 0, 0), + new PsoStructureEntryInfo((MetaName)3887134676, PsoDataType.Float, 544, 0, 0), + new PsoStructureEntryInfo((MetaName)889613745, PsoDataType.UByte, 548, 0, 0), + new PsoStructureEntryInfo((MetaName)4116865999, PsoDataType.UInt, 552, 0, 0), + new PsoStructureEntryInfo((MetaName)3405855740, PsoDataType.UInt, 556, 0, 0), + new PsoStructureEntryInfo((MetaName)1511702574, PsoDataType.Float, 560, 0, 0), + new PsoStructureEntryInfo((MetaName)2540858782, PsoDataType.UByte, 564, 0, 0), + new PsoStructureEntryInfo((MetaName)1579430656, PsoDataType.Float, 568, 0, 0), + new PsoStructureEntryInfo((MetaName)254417857, PsoDataType.Float, 572, 0, 0), + new PsoStructureEntryInfo((MetaName)3078439303, PsoDataType.Float, 576, 0, 0), + new PsoStructureEntryInfo((MetaName)475196801, PsoDataType.Float, 580, 0, 0), + new PsoStructureEntryInfo((MetaName)1135781765, PsoDataType.Float, 584, 0, 0), + new PsoStructureEntryInfo((MetaName)1909915037, PsoDataType.Float, 588, 0, 0), + new PsoStructureEntryInfo((MetaName)655626928, PsoDataType.Float, 592, 0, 0), + new PsoStructureEntryInfo((MetaName)259290858, PsoDataType.Float, 596, 0, 0), + new PsoStructureEntryInfo((MetaName)1325474651, PsoDataType.Float, 600, 0, 0), + new PsoStructureEntryInfo((MetaName)615112755, PsoDataType.UInt, 604, 0, 0), + new PsoStructureEntryInfo((MetaName)4012970274, PsoDataType.Bool, 608, 0, 0), + new PsoStructureEntryInfo((MetaName)1435641288, PsoDataType.Float, 612, 0, 0), + new PsoStructureEntryInfo((MetaName)1120297675, PsoDataType.Float, 616, 0, 0), + new PsoStructureEntryInfo((MetaName)1561898282, PsoDataType.Float, 620, 0, 0), + new PsoStructureEntryInfo((MetaName)1133862058, PsoDataType.Float, 624, 0, 0), + new PsoStructureEntryInfo((MetaName)1232297261, PsoDataType.Float, 628, 0, 0), + new PsoStructureEntryInfo((MetaName)1845309081, PsoDataType.Float, 632, 0, 0), + new PsoStructureEntryInfo((MetaName)2117446694, PsoDataType.Float, 636, 0, 0), + new PsoStructureEntryInfo((MetaName)813193409, PsoDataType.Float, 640, 0, 0), + new PsoStructureEntryInfo((MetaName)3129989164, PsoDataType.Float, 644, 0, 0), + new PsoStructureEntryInfo((MetaName)4269476531, PsoDataType.Float, 648, 0, 0), + new PsoStructureEntryInfo((MetaName)1095839119, PsoDataType.Float, 652, 0, 0), + new PsoStructureEntryInfo((MetaName)1777999076, PsoDataType.UInt, 656, 0, 0), + new PsoStructureEntryInfo((MetaName)3218253966, PsoDataType.UInt, 660, 0, 0), + new PsoStructureEntryInfo((MetaName)2144745273, PsoDataType.Bool, 664, 0, 0), + new PsoStructureEntryInfo((MetaName)2874514021, PsoDataType.Float, 668, 0, 0), + new PsoStructureEntryInfo((MetaName)4106127787, PsoDataType.UInt, 672, 0, 0), + new PsoStructureEntryInfo((MetaName)1911699676, PsoDataType.UInt, 676, 0, 0), + new PsoStructureEntryInfo((MetaName)2545130112, PsoDataType.Float, 680, 0, 0), + new PsoStructureEntryInfo((MetaName)2157137274, PsoDataType.UInt, 684, 0, 0), + new PsoStructureEntryInfo((MetaName)871647294, PsoDataType.Float, 688, 0, 0), + new PsoStructureEntryInfo((MetaName)115479140, PsoDataType.Float, 692, 0, 0), + new PsoStructureEntryInfo((MetaName)2186966715, PsoDataType.Float, 696, 0, 0) + ); + case (MetaName)4144542252: + return new PsoStructureInfo((MetaName)4144542252, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)3183040402, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3193578838, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3302572334, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistance, PsoDataType.Float, 24, 0, 0) + ); + case (MetaName)455065356: + return new PsoStructureInfo((MetaName)455065356, 0, 0, 96, + new PsoStructureEntryInfo(MetaName.WantedLevel1, PsoDataType.Structure, 8, 0, (MetaName)2841666617), + new PsoStructureEntryInfo(MetaName.WantedLevel2, PsoDataType.Structure, 24, 0, (MetaName)2841666617), + new PsoStructureEntryInfo(MetaName.WantedLevel3, PsoDataType.Structure, 40, 0, (MetaName)2841666617), + new PsoStructureEntryInfo(MetaName.WantedLevel4, PsoDataType.Structure, 56, 0, (MetaName)2841666617), + new PsoStructureEntryInfo(MetaName.WantedLevel5, PsoDataType.Structure, 72, 0, (MetaName)2841666617), + new PsoStructureEntryInfo((MetaName)2486108674, PsoDataType.Float, 88, 0, 0) + ); + case (MetaName)2841666617: + return new PsoStructureInfo((MetaName)2841666617, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1740762106, PsoDataType.Float, 12, 0, 0) + ); + case (MetaName)1818844971: + return new PsoStructureInfo((MetaName)1818844971, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)2189340328, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)887750836, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)552287921, PsoDataType.Float, 16, 0, 0) + ); + case (MetaName)3736726978: + return new PsoStructureInfo((MetaName)3736726978, 0, 0, 72, + new PsoStructureEntryInfo((MetaName)3037590705, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1678873512, PsoDataType.UByte, 9, 0, 0), + new PsoStructureEntryInfo((MetaName)698042866, PsoDataType.UInt, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2705750728, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)921957248, PsoDataType.UInt, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1748071312, PsoDataType.UInt, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)197521501, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2783817407, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)624502137, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3283971281, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)3248381180, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)1408109790, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1373272095, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3325627586, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)2120328830, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2002565392, PsoDataType.Float, 64, 0, 0) + ); + case (MetaName)1530415684: + return new PsoStructureInfo((MetaName)1530415684, 0, 0, 48, + new PsoStructureEntryInfo((MetaName)2007829514, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2870486361, PsoDataType.UByte, 9, 0, 0), + new PsoStructureEntryInfo((MetaName)865965443, PsoDataType.UInt, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)4240191943, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2208519322, PsoDataType.UInt, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1637328324, PsoDataType.UInt, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2783817407, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)624502137, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1053509475, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)2196178671, PsoDataType.Float, 40, 0, 0) + ); + case MetaName.CTaskReactAimWeapon__Tunables: + return new PsoStructureInfo(MetaName.CTaskReactAimWeapon__Tunables, 0, 0, 680, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2673189131, PsoDataType.Structure, 16, 0, (MetaName)3326118529), + new PsoStructureEntryInfo((MetaName)931067397, PsoDataType.Structure, 344, 0, (MetaName)3326118529), + new PsoStructureEntryInfo(MetaName.Rate, PsoDataType.Float, 672, 0, 0), + new PsoStructureEntryInfo((MetaName)2016189169, PsoDataType.Float, 676, 0, 0) + ); + case (MetaName)3326118529: + return new PsoStructureInfo((MetaName)3326118529, 0, 0, 328, + new PsoStructureEntryInfo((MetaName)764802101, PsoDataType.Structure, 8, 0, (MetaName)2563725968), + new PsoStructureEntryInfo((MetaName)730897041, PsoDataType.Structure, 88, 0, (MetaName)2563725968), + new PsoStructureEntryInfo(MetaName.Sniper, PsoDataType.Structure, 168, 0, (MetaName)2563725968), + new PsoStructureEntryInfo(MetaName.None, PsoDataType.Structure, 248, 0, (MetaName)2563725968) + ); + case (MetaName)2563725968: + return new PsoStructureInfo((MetaName)2563725968, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.Pistol, PsoDataType.Structure, 8, 0, (MetaName)3972028972), + new PsoStructureEntryInfo(MetaName.Rifle, PsoDataType.Structure, 32, 0, (MetaName)3972028972), + new PsoStructureEntryInfo((MetaName)1685333671, PsoDataType.Structure, 56, 0, (MetaName)3972028972) + ); + case (MetaName)3972028972: + return new PsoStructureInfo((MetaName)3972028972, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.ClipSetId, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.Rate, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3697908634, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3631567393, PsoDataType.Bool, 17, 0, 0), + new PsoStructureEntryInfo((MetaName)1944180374, PsoDataType.Bool, 18, 0, 0) + ); + case MetaName.CTaskSearch__Tunables: + return new PsoStructureInfo(MetaName.CTaskSearch__Tunables, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3623978511, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MoveBlendRatio, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2955443375, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2895901568, PsoDataType.Float, 28, 0, 0) + ); + case MetaName.CTaskSearchForUnknownThreat__Tunables: + return new PsoStructureInfo(MetaName.CTaskSearchForUnknownThreat__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3618288355, PsoDataType.SInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3217586928, PsoDataType.SInt, 20, 0, 0) + ); + case MetaName.CTaskSharkCircle__Tunables: + return new PsoStructureInfo(MetaName.CTaskSharkCircle__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)898987704, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3469377736, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.CTaskSharkAttack__Tunables: + return new PsoStructureInfo(MetaName.CTaskSharkAttack__Tunables, 0, 0, 112, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2147768117, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2629938407, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2503381867, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)4190486872, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)432972202, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3257642822, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3815425058, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)4203587509, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)3492375078, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)639055889, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3392297418, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)2768935848, PsoDataType.SInt, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)284429428, PsoDataType.SInt, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)614448068, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)2740115372, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)3783579394, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)1585455214, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)2981439007, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)2187967175, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)1895961621, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)647976226, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)2205933583, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)309425308, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)3147934542, PsoDataType.Float, 108, 0, 0) + ); + case MetaName.CTaskCover__Tunables: + return new PsoStructureInfo(MetaName.CTaskCover__Tunables, 0, 0, 192, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3698046827, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1862046997, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1686691958, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3171144783, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1788624470, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1235126752, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1335048013, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2787523036, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)1292700163, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1431242126, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3402563167, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)1241525786, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)647728646, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)2472038331, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)1511298321, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)235129999, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)2896892589, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)2175660835, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)4030958526, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)1534623417, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)2761743161, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)2676905487, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)2744819135, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)449945587, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)997332238, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)2215019044, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)1216157443, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)2892923069, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo(MetaName.CapsuleZOffset, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)4076542446, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)2168923712, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)4196658405, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)3920545059, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)324489357, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo((MetaName)2569732609, PsoDataType.Bool, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)3141671110, PsoDataType.String, 156, 7, 0), + new PsoStructureEntryInfo((MetaName)1804897490, PsoDataType.String, 160, 7, 0), + new PsoStructureEntryInfo((MetaName)3568457068, PsoDataType.String, 164, 7, 0), + new PsoStructureEntryInfo((MetaName)1351184833, PsoDataType.String, 168, 7, 0), + new PsoStructureEntryInfo((MetaName)1837001601, PsoDataType.String, 172, 7, 0), + new PsoStructureEntryInfo((MetaName)1024291853, PsoDataType.String, 176, 7, 0), + new PsoStructureEntryInfo((MetaName)3902347552, PsoDataType.String, 180, 7, 0), + new PsoStructureEntryInfo((MetaName)2620277506, PsoDataType.String, 184, 7, 0) + ); + case MetaName.CTaskEnterCover__Tunables: + return new PsoStructureInfo(MetaName.CTaskEnterCover__Tunables, 0, 0, 368, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)443908416, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2901436256, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)14209833, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1607017826, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1011440787, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1748900014, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1391743069, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1307601741, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)4070109213, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)3523536193, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)1608065887, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)1162149057, PsoDataType.SInt, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)3426925695, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)647951209, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)1436746072, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)2504179355, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)8008463, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)3441446008, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)3115377094, PsoDataType.Bool, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)2493304798, PsoDataType.Bool, 89, 0, 0), + new PsoStructureEntryInfo((MetaName)243919456, PsoDataType.Bool, 90, 0, 0), + new PsoStructureEntryInfo((MetaName)914424597, PsoDataType.Bool, 91, 0, 0), + new PsoStructureEntryInfo((MetaName)1466859809, PsoDataType.Bool, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)3088085048, PsoDataType.Bool, 93, 0, 0), + new PsoStructureEntryInfo((MetaName)570011198, PsoDataType.Bool, 94, 0, 0), + new PsoStructureEntryInfo((MetaName)634174859, PsoDataType.Bool, 95, 0, 0), + new PsoStructureEntryInfo((MetaName)311045516, PsoDataType.Bool, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)3946058806, PsoDataType.Bool, 97, 0, 0), + new PsoStructureEntryInfo((MetaName)525431756, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)3131955124, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSpeed, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)2343716985, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)1999362333, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)2917519651, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)614907799, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)3906575696, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)2032147920, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)1511471000, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)3073391680, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)2527222356, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)661599637, PsoDataType.Bool, 148, 0, 0), + new PsoStructureEntryInfo((MetaName)3380579615, PsoDataType.Bool, 149, 0, 0), + new PsoStructureEntryInfo((MetaName)2589136465, PsoDataType.Bool, 150, 0, 0), + new PsoStructureEntryInfo((MetaName)2504995190, PsoDataType.Bool, 151, 0, 0), + new PsoStructureEntryInfo((MetaName)3490225320, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)3968028188, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)762985941, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)2645460108, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo((MetaName)976189127, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo((MetaName)1168875174, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo((MetaName)2787336412, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo((MetaName)2445300354, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo((MetaName)3171601208, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo((MetaName)2408710412, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo((MetaName)3889498778, PsoDataType.Float, 192, 0, 0), + new PsoStructureEntryInfo((MetaName)1874728809, PsoDataType.Float, 196, 0, 0), + new PsoStructureEntryInfo((MetaName)3084434327, PsoDataType.Float, 200, 0, 0), + new PsoStructureEntryInfo((MetaName)3320233516, PsoDataType.Float, 204, 0, 0), + new PsoStructureEntryInfo((MetaName)2304671979, PsoDataType.Float, 208, 0, 0), + new PsoStructureEntryInfo((MetaName)3920645611, PsoDataType.Structure, 216, 0, (MetaName)1285383250), + new PsoStructureEntryInfo((MetaName)80713034, PsoDataType.Structure, 256, 0, (MetaName)1285383250), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)711010751), + new PsoStructureEntryInfo((MetaName)102329791, PsoDataType.Array, 296, 0, (MetaName)62), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3590219800), + new PsoStructureEntryInfo((MetaName)3619734025, PsoDataType.Array, 312, 0, (MetaName)64), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)711010751), + new PsoStructureEntryInfo((MetaName)2915894063, PsoDataType.Array, 328, 0, (MetaName)66), + new PsoStructureEntryInfo((MetaName)1405654072, PsoDataType.String, 344, 7, 0), + new PsoStructureEntryInfo((MetaName)2519142628, PsoDataType.String, 348, 7, 0), + new PsoStructureEntryInfo((MetaName)4262460027, PsoDataType.String, 352, 7, 0), + new PsoStructureEntryInfo((MetaName)2653796808, PsoDataType.String, 356, 7, 0), + new PsoStructureEntryInfo((MetaName)1017470219, PsoDataType.String, 360, 7, 0), + new PsoStructureEntryInfo((MetaName)1163390260, PsoDataType.String, 364, 7, 0) + ); + case (MetaName)1285383250: + return new PsoStructureInfo((MetaName)1285383250, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), + new PsoStructureEntryInfo((MetaName)611524654, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), + new PsoStructureEntryInfo((MetaName)1120845094, PsoDataType.Array, 24, 0, (MetaName)2) + ); + case (MetaName)3038580099: + return new PsoStructureInfo((MetaName)3038580099, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo((MetaName)3647518623, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)1559228487), + new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.Flags, 24, 0, (MetaName)2097154) + ); + case (MetaName)711010751: + return new PsoStructureInfo((MetaName)711010751, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)517541874, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)1559228487), + new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.Flags, 12, 0, (MetaName)2097153) + ); + case (MetaName)3590219800: + return new PsoStructureInfo((MetaName)3590219800, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)2845656216, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1744028122, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo((MetaName)1441580086, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)1559228487), + new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.Flags, 20, 0, (MetaName)2097155) + ); + case MetaName.CTaskExitCover__Tunables: + return new PsoStructureInfo(MetaName.CTaskExitCover__Tunables, 0, 0, 120, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)4010326834), + new PsoStructureEntryInfo((MetaName)353989914, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo((MetaName)150770804, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo((MetaName)2123164199, PsoDataType.String, 36, 7, 0), + new PsoStructureEntryInfo((MetaName)395871171, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo((MetaName)1757551615, PsoDataType.String, 44, 7, 0), + new PsoStructureEntryInfo((MetaName)3378374324, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2292594697, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3182801896, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)1366592047, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)498927550, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)3920645611, PsoDataType.Structure, 72, 0, (MetaName)246682624), + new PsoStructureEntryInfo((MetaName)80713034, PsoDataType.Structure, 96, 0, (MetaName)246682624) + ); + case (MetaName)246682624: + return new PsoStructureInfo((MetaName)246682624, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), + new PsoStructureEntryInfo((MetaName)1123873278, PsoDataType.Array, 8, 0, 0) + ); + case (MetaName)4010326834: + return new PsoStructureInfo((MetaName)4010326834, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)2518432971, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)1559228487), + new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.Flags, 12, 0, (MetaName)2097153) + ); + case MetaName.CTaskInCover__Tunables: + return new PsoStructureInfo(MetaName.CTaskInCover__Tunables, 0, 0, 536, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)4205396201, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)849148447, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2059966079, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2129665503, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3419184861, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3872178927, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)2886272257, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1147737070, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2904615002, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1261300416, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)2609438296, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)927329696, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)1147378819, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)2633188230, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)3005241839, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)1551121369, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)2359940104, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)2688479781, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)3881315855, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)2188704570, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)796885552, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)26449222, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)4049257140, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)3317722172, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)1513492849, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)4100289588, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)772858715, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)1469301844, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)3446268000, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)38963063, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)2653769818, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)1733226917, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)3453306812, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)2533938546, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo((MetaName)3014744113, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)3586592245, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)4019978349, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)1508442808, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo((MetaName)2625425324, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo((MetaName)754458458, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo((MetaName)314817266, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo((MetaName)1620272884, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo((MetaName)2821466544, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo((MetaName)1291062567, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo((MetaName)3787797455, PsoDataType.Float, 192, 0, 0), + new PsoStructureEntryInfo((MetaName)2296590808, PsoDataType.Float, 196, 0, 0), + new PsoStructureEntryInfo((MetaName)1366091002, PsoDataType.Bool, 200, 0, 0), + new PsoStructureEntryInfo((MetaName)4276335920, PsoDataType.Bool, 201, 0, 0), + new PsoStructureEntryInfo((MetaName)3417116793, PsoDataType.Float, 204, 0, 0), + new PsoStructureEntryInfo((MetaName)3106353871, PsoDataType.Float, 208, 0, 0), + new PsoStructureEntryInfo((MetaName)3356016298, PsoDataType.Float, 212, 0, 0), + new PsoStructureEntryInfo((MetaName)1400174762, PsoDataType.Float, 216, 0, 0), + new PsoStructureEntryInfo((MetaName)2250358383, PsoDataType.Float, 220, 0, 0), + new PsoStructureEntryInfo((MetaName)1982386380, PsoDataType.Float, 224, 0, 0), + new PsoStructureEntryInfo((MetaName)2408138725, PsoDataType.Float, 228, 0, 0), + new PsoStructureEntryInfo((MetaName)1055186370, PsoDataType.Float, 232, 0, 0), + new PsoStructureEntryInfo((MetaName)2121459739, PsoDataType.Float, 236, 0, 0), + new PsoStructureEntryInfo((MetaName)2929248824, PsoDataType.Float, 240, 0, 0), + new PsoStructureEntryInfo((MetaName)1784425794, PsoDataType.Float, 244, 0, 0), + new PsoStructureEntryInfo((MetaName)420444049, PsoDataType.Float, 248, 0, 0), + new PsoStructureEntryInfo((MetaName)1632533833, PsoDataType.Float, 252, 0, 0), + new PsoStructureEntryInfo((MetaName)1813675586, PsoDataType.Float, 256, 0, 0), + new PsoStructureEntryInfo((MetaName)1396197980, PsoDataType.Float, 260, 0, 0), + new PsoStructureEntryInfo((MetaName)2168664060, PsoDataType.Float, 264, 0, 0), + new PsoStructureEntryInfo((MetaName)1678354404, PsoDataType.Float, 268, 0, 0), + new PsoStructureEntryInfo((MetaName)189580395, PsoDataType.Float, 272, 0, 0), + new PsoStructureEntryInfo((MetaName)2470298407, PsoDataType.Float, 276, 0, 0), + new PsoStructureEntryInfo((MetaName)545166509, PsoDataType.Float, 280, 0, 0), + new PsoStructureEntryInfo((MetaName)1342115678, PsoDataType.Float, 284, 0, 0), + new PsoStructureEntryInfo((MetaName)2621555533, PsoDataType.Float, 288, 0, 0), + new PsoStructureEntryInfo((MetaName)1759052099, PsoDataType.Float, 292, 0, 0), + new PsoStructureEntryInfo((MetaName)1933569235, PsoDataType.Float, 296, 0, 0), + new PsoStructureEntryInfo((MetaName)919529730, PsoDataType.Float, 300, 0, 0), + new PsoStructureEntryInfo((MetaName)3480207128, PsoDataType.Float, 304, 0, 0), + new PsoStructureEntryInfo((MetaName)3457829957, PsoDataType.Float, 308, 0, 0), + new PsoStructureEntryInfo((MetaName)3256121602, PsoDataType.Float, 312, 0, 0), + new PsoStructureEntryInfo((MetaName)3488557674, PsoDataType.Float, 316, 0, 0), + new PsoStructureEntryInfo((MetaName)1504716899, PsoDataType.Float, 320, 0, 0), + new PsoStructureEntryInfo((MetaName)3608928929, PsoDataType.Float, 324, 0, 0), + new PsoStructureEntryInfo((MetaName)4050756282, PsoDataType.Bool, 328, 0, 0), + new PsoStructureEntryInfo((MetaName)1073641398, PsoDataType.Float, 332, 0, 0), + new PsoStructureEntryInfo((MetaName)1553721673, PsoDataType.Float, 336, 0, 0), + new PsoStructureEntryInfo((MetaName)588986036, PsoDataType.Float, 340, 0, 0), + new PsoStructureEntryInfo((MetaName)4047811579, PsoDataType.Float, 344, 0, 0), + new PsoStructureEntryInfo((MetaName)1685929346, PsoDataType.Float, 348, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1466791495), + new PsoStructureEntryInfo((MetaName)1011459206, PsoDataType.Array, 352, 0, (MetaName)86), + new PsoStructureEntryInfo((MetaName)3706230533, PsoDataType.SInt, 368, 0, 0), + new PsoStructureEntryInfo((MetaName)1565596444, PsoDataType.Float, 372, 0, 0), + new PsoStructureEntryInfo((MetaName)3950076744, PsoDataType.Float, 376, 0, 0), + new PsoStructureEntryInfo((MetaName)2828343094, PsoDataType.Bool, 380, 0, 0), + new PsoStructureEntryInfo((MetaName)3367723943, PsoDataType.Bool, 381, 0, 0), + new PsoStructureEntryInfo((MetaName)3231686180, PsoDataType.Float, 384, 0, 0), + new PsoStructureEntryInfo((MetaName)1089147792, PsoDataType.Float, 388, 0, 0), + new PsoStructureEntryInfo((MetaName)1887154148, PsoDataType.Float, 392, 0, 0), + new PsoStructureEntryInfo((MetaName)2938880609, PsoDataType.Float, 396, 0, 0), + new PsoStructureEntryInfo((MetaName)3144065170, PsoDataType.Float, 400, 0, 0), + new PsoStructureEntryInfo((MetaName)1630578621, PsoDataType.Float, 404, 0, 0), + new PsoStructureEntryInfo((MetaName)4055554934, PsoDataType.Float, 408, 0, 0), + new PsoStructureEntryInfo((MetaName)360559002, PsoDataType.Float, 412, 0, 0), + new PsoStructureEntryInfo((MetaName)263823852, PsoDataType.Float, 416, 0, 0), + new PsoStructureEntryInfo((MetaName)3909527233, PsoDataType.Float, 420, 0, 0), + new PsoStructureEntryInfo((MetaName)3668359056, PsoDataType.Float, 424, 0, 0), + new PsoStructureEntryInfo((MetaName)1090704787, PsoDataType.Float, 428, 0, 0), + new PsoStructureEntryInfo((MetaName)2805643991, PsoDataType.Float, 432, 0, 0), + new PsoStructureEntryInfo((MetaName)1375297558, PsoDataType.Float, 436, 0, 0), + new PsoStructureEntryInfo((MetaName)3824828934, PsoDataType.Float, 440, 0, 0), + new PsoStructureEntryInfo((MetaName)2238616520, PsoDataType.Float, 444, 0, 0), + new PsoStructureEntryInfo((MetaName)3593181124, PsoDataType.Float, 448, 0, 0), + new PsoStructureEntryInfo((MetaName)1214766569, PsoDataType.Float, 452, 0, 0), + new PsoStructureEntryInfo((MetaName)2018978213, PsoDataType.Float, 456, 0, 0), + new PsoStructureEntryInfo((MetaName)68994958, PsoDataType.Float, 460, 0, 0), + new PsoStructureEntryInfo((MetaName)2717483602, PsoDataType.Float, 464, 0, 0), + new PsoStructureEntryInfo((MetaName)2450446524, PsoDataType.String, 468, 7, 0), + new PsoStructureEntryInfo((MetaName)2529898856, PsoDataType.Float, 472, 0, 0), + new PsoStructureEntryInfo((MetaName)3456533073, PsoDataType.Float, 476, 0, 0), + new PsoStructureEntryInfo((MetaName)866380197, PsoDataType.Float, 480, 0, 0), + new PsoStructureEntryInfo((MetaName)1098445330, PsoDataType.Float, 484, 0, 0), + new PsoStructureEntryInfo((MetaName)3328891889, PsoDataType.Float, 488, 0, 0), + new PsoStructureEntryInfo((MetaName)2317940667, PsoDataType.Float, 492, 0, 0), + new PsoStructureEntryInfo((MetaName)473976041, PsoDataType.Float, 496, 0, 0), + new PsoStructureEntryInfo((MetaName)3650240986, PsoDataType.UInt, 500, 0, 0), + new PsoStructureEntryInfo((MetaName)3041121812, PsoDataType.Float, 504, 0, 0), + new PsoStructureEntryInfo((MetaName)2973722662, PsoDataType.UInt, 508, 0, 0), + new PsoStructureEntryInfo((MetaName)3531438516, PsoDataType.UInt, 512, 0, 0), + new PsoStructureEntryInfo((MetaName)796325569, PsoDataType.UInt, 516, 0, 0), + new PsoStructureEntryInfo((MetaName)2152868269, PsoDataType.Bool, 520, 0, 0), + new PsoStructureEntryInfo((MetaName)1536785516, PsoDataType.Bool, 521, 0, 0), + new PsoStructureEntryInfo((MetaName)76855168, PsoDataType.String, 524, 7, 0), + new PsoStructureEntryInfo((MetaName)3576155857, PsoDataType.String, 528, 7, 0) + ); + case (MetaName)1466791495: + return new PsoStructureInfo((MetaName)1466791495, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)3802470907, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)547753211, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo((MetaName)1993756531, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)2511572601, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)573759163, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)1925480184, PsoDataType.String, 28, 7, 0), + new PsoStructureEntryInfo((MetaName)3487669030, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)1559228487), + new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.Flags, 36, 0, (MetaName)2097159) + ); + case MetaName.CTaskMotionInCover__Tunables: + return new PsoStructureInfo(MetaName.CTaskMotionInCover__Tunables, 0, 0, 1112, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1687761193, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2876044804, PsoDataType.Bool, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1227928250, PsoDataType.Bool, 21, 0, 0), + new PsoStructureEntryInfo((MetaName)92660424, PsoDataType.Bool, 22, 0, 0), + new PsoStructureEntryInfo((MetaName)1136710348, PsoDataType.Bool, 23, 0, 0), + new PsoStructureEntryInfo((MetaName)2560019435, PsoDataType.Bool, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3781531198, PsoDataType.Bool, 25, 0, 0), + new PsoStructureEntryInfo((MetaName)2498623969, PsoDataType.Bool, 26, 0, 0), + new PsoStructureEntryInfo((MetaName)288573626, PsoDataType.Bool, 27, 0, 0), + new PsoStructureEntryInfo((MetaName)3117448440, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3544497884, PsoDataType.UByte, 29, 0, 0), + new PsoStructureEntryInfo((MetaName)4067447650, PsoDataType.UInt, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2855575670, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3719483743, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2308421233, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)818416092, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2906996848, PsoDataType.UInt, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)5986942, PsoDataType.Bool, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)1823873460, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2643024561, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)3648216318, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)1797303037, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)1573385593, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)2015526511, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)462269180, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)2919445883, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)4228398614, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)321218444, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)372008448, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)502763290, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)2507965951, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)2511576109, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)1887369799, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)629671162, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)863732031, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)691235540, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)2681841281, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)148125195, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)205550242, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)2267264803, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)483457094, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo((MetaName)3382987159, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)2651943117, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)2125677956, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)19390938, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo((MetaName)1570059814, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo((MetaName)446471957, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo((MetaName)3143775651, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo((MetaName)3395179822, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo((MetaName)1009232455, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo((MetaName)392526062, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo((MetaName)452418176, PsoDataType.Float, 192, 0, 0), + new PsoStructureEntryInfo((MetaName)2500851482, PsoDataType.Float, 196, 0, 0), + new PsoStructureEntryInfo((MetaName)3341714290, PsoDataType.Float, 200, 0, 0), + new PsoStructureEntryInfo((MetaName)488807312, PsoDataType.Float, 204, 0, 0), + new PsoStructureEntryInfo((MetaName)52868234, PsoDataType.Float, 208, 0, 0), + new PsoStructureEntryInfo((MetaName)2380669878, PsoDataType.Float, 212, 0, 0), + new PsoStructureEntryInfo((MetaName)1307353498, PsoDataType.Float, 216, 0, 0), + new PsoStructureEntryInfo((MetaName)3203547922, PsoDataType.Float, 220, 0, 0), + new PsoStructureEntryInfo((MetaName)1163008630, PsoDataType.Float, 224, 0, 0), + new PsoStructureEntryInfo((MetaName)2814625688, PsoDataType.Float, 228, 0, 0), + new PsoStructureEntryInfo((MetaName)1251038941, PsoDataType.Float, 232, 0, 0), + new PsoStructureEntryInfo((MetaName)4236998281, PsoDataType.Bool, 236, 0, 0), + new PsoStructureEntryInfo((MetaName)2597341356, PsoDataType.Bool, 237, 0, 0), + new PsoStructureEntryInfo((MetaName)2618193402, PsoDataType.Bool, 238, 0, 0), + new PsoStructureEntryInfo((MetaName)2878139548, PsoDataType.String, 240, 7, 0), + new PsoStructureEntryInfo((MetaName)1642317087, PsoDataType.String, 244, 7, 0), + new PsoStructureEntryInfo((MetaName)2782502123, PsoDataType.String, 248, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), + new PsoStructureEntryInfo((MetaName)2572412881, PsoDataType.Array, 256, 0, (MetaName)69), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo((MetaName)3656589599, PsoDataType.Array, 272, 0, (MetaName)71), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo((MetaName)4084903537, PsoDataType.Array, 288, 0, (MetaName)73), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo((MetaName)86703483, PsoDataType.Array, 304, 0, (MetaName)75), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo((MetaName)1692855661, PsoDataType.Array, 320, 0, (MetaName)77), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo((MetaName)1337721029, PsoDataType.Array, 336, 0, (MetaName)79), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo((MetaName)3647756430, PsoDataType.Array, 352, 0, (MetaName)81), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo((MetaName)186750731, PsoDataType.Array, 368, 0, (MetaName)83), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo((MetaName)1643071074, PsoDataType.Array, 384, 0, (MetaName)85), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo((MetaName)1976510010, PsoDataType.Array, 400, 0, (MetaName)87), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo((MetaName)1754157237, PsoDataType.Array, 416, 0, (MetaName)89), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo((MetaName)229574996, PsoDataType.Array, 432, 0, (MetaName)91), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo((MetaName)754984064, PsoDataType.Array, 448, 0, (MetaName)93), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo((MetaName)2565051320, PsoDataType.Array, 464, 0, (MetaName)95), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo((MetaName)616197965, PsoDataType.Array, 480, 0, (MetaName)97), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo((MetaName)1469086565, PsoDataType.Array, 496, 0, (MetaName)99), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo((MetaName)421291191, PsoDataType.Array, 512, 0, (MetaName)101), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo((MetaName)2423980252, PsoDataType.Array, 528, 0, (MetaName)103), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo((MetaName)3420717239, PsoDataType.Array, 544, 0, (MetaName)105), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo((MetaName)2643498096, PsoDataType.Array, 560, 0, (MetaName)107), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo((MetaName)1210186805, PsoDataType.Array, 576, 0, (MetaName)109), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), + new PsoStructureEntryInfo((MetaName)2080360880, PsoDataType.Array, 592, 0, (MetaName)111), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), + new PsoStructureEntryInfo((MetaName)430330313, PsoDataType.Array, 608, 0, (MetaName)113), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), + new PsoStructureEntryInfo((MetaName)3262741183, PsoDataType.Array, 624, 0, (MetaName)115), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), + new PsoStructureEntryInfo((MetaName)1977186530, PsoDataType.Array, 640, 0, (MetaName)117), + new PsoStructureEntryInfo((MetaName)3920645611, PsoDataType.Structure, 656, 0, (MetaName)2625948332), + new PsoStructureEntryInfo((MetaName)80713034, PsoDataType.Structure, 880, 0, (MetaName)2625948332), + new PsoStructureEntryInfo((MetaName)1230607954, PsoDataType.Bool, 1104, 0, 0), + new PsoStructureEntryInfo((MetaName)1949874056, PsoDataType.Bool, 1105, 0, 0), + new PsoStructureEntryInfo((MetaName)3098272438, PsoDataType.Bool, 1106, 0, 0), + new PsoStructureEntryInfo((MetaName)2038512667, PsoDataType.Bool, 1107, 0, 0) + ); + case (MetaName)2625948332: + return new PsoStructureInfo((MetaName)2625948332, 0, 0, 224, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), + new PsoStructureEntryInfo((MetaName)3037289130, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), + new PsoStructureEntryInfo((MetaName)1367701780, PsoDataType.Array, 24, 0, (MetaName)2), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), + new PsoStructureEntryInfo((MetaName)1958652331, PsoDataType.Array, 40, 0, (MetaName)4), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), + new PsoStructureEntryInfo((MetaName)2080209369, PsoDataType.Array, 56, 0, (MetaName)6), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), + new PsoStructureEntryInfo((MetaName)2676261337, PsoDataType.Array, 72, 0, (MetaName)8), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), + new PsoStructureEntryInfo((MetaName)896061089, PsoDataType.Array, 88, 0, (MetaName)10), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), + new PsoStructureEntryInfo((MetaName)3577768695, PsoDataType.Array, 104, 0, MetaName.PsoPOINTER), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), + new PsoStructureEntryInfo((MetaName)3007867016, PsoDataType.Array, 120, 0, (MetaName)14), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), + new PsoStructureEntryInfo((MetaName)3590260370, PsoDataType.Array, 136, 0, MetaName.STRING), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), + new PsoStructureEntryInfo((MetaName)260425135, PsoDataType.Array, 152, 0, (MetaName)18), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), + new PsoStructureEntryInfo((MetaName)313911161, PsoDataType.Array, 168, 0, (MetaName)20), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), + new PsoStructureEntryInfo((MetaName)2833513553, PsoDataType.Array, 184, 0, (MetaName)22), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), + new PsoStructureEntryInfo((MetaName)2132068389, PsoDataType.Array, 200, 0, (MetaName)24), + new PsoStructureEntryInfo((MetaName)3535710087, PsoDataType.String, 216, 7, 0) + ); + case MetaName.CTaskAimGunFromCoverIntro__Tunables: + return new PsoStructureInfo(MetaName.CTaskAimGunFromCoverIntro__Tunables, 0, 0, 312, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1388147608, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3673514744, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1465904835, PsoDataType.Bool, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)800236883, PsoDataType.Bool, 25, 0, 0), + new PsoStructureEntryInfo((MetaName)3598945794, PsoDataType.Bool, 26, 0, 0), + new PsoStructureEntryInfo((MetaName)1930123256, PsoDataType.Bool, 27, 0, 0), + new PsoStructureEntryInfo((MetaName)4249860971, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3262184677, PsoDataType.Bool, 29, 0, 0), + new PsoStructureEntryInfo((MetaName)3860983555, PsoDataType.Bool, 30, 0, 0), + new PsoStructureEntryInfo((MetaName)800840705, PsoDataType.Bool, 31, 0, 0), + new PsoStructureEntryInfo((MetaName)3134002215, PsoDataType.Bool, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1686516854, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3371499882, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)4206558217, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)1515476732, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1894035381, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)295831481, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3352731897, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)427371079, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)899299281, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)842076929, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)1649508716, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)2875886470, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)2260414033, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)2575356761, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)4027315230, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)2556798213, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)1705449547, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)4090917343, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)2167006115, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)502763290, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)452418176, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)2554062878, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)3060249921, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)1144003052, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)3683453861, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)4255892364, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)2818774649, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)3545526197, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)717814241, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo((MetaName)2260315698, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)568360986, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)4015224528, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)4111569262, PsoDataType.Float2, 164, 0, 0), + new PsoStructureEntryInfo((MetaName)4205427545, PsoDataType.Float2, 172, 0, 0), + new PsoStructureEntryInfo((MetaName)2527050941, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo((MetaName)842428202, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo((MetaName)3532419784, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo((MetaName)2531405930, PsoDataType.Float, 192, 0, 0), + new PsoStructureEntryInfo((MetaName)2343990340, PsoDataType.Float, 196, 0, 0), + new PsoStructureEntryInfo((MetaName)8574286, PsoDataType.Float, 200, 0, 0), + new PsoStructureEntryInfo((MetaName)298303912, PsoDataType.Float, 204, 0, 0), + new PsoStructureEntryInfo((MetaName)3516373800, PsoDataType.Float, 208, 0, 0), + new PsoStructureEntryInfo((MetaName)3372482096, PsoDataType.Float, 212, 0, 0), + new PsoStructureEntryInfo((MetaName)1655026590, PsoDataType.Float, 216, 0, 0), + new PsoStructureEntryInfo((MetaName)2297046941, PsoDataType.Float, 220, 0, 0), + new PsoStructureEntryInfo((MetaName)2185200792, PsoDataType.Float, 224, 0, 0), + new PsoStructureEntryInfo((MetaName)3617904707, PsoDataType.Float, 228, 0, 0), + new PsoStructureEntryInfo((MetaName)4125755684, PsoDataType.Float, 232, 0, 0), + new PsoStructureEntryInfo((MetaName)63113045, PsoDataType.Float, 236, 0, 0), + new PsoStructureEntryInfo((MetaName)1486772652, PsoDataType.Float, 240, 0, 0), + new PsoStructureEntryInfo((MetaName)80679158, PsoDataType.Structure, 248, 0, (MetaName)791301518), + new PsoStructureEntryInfo((MetaName)2338326271, PsoDataType.Structure, 272, 0, (MetaName)791301518), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)4162893736), + new PsoStructureEntryInfo((MetaName)1512682432, PsoDataType.Array, 296, 0, (MetaName)64) + ); + case (MetaName)791301518: + return new PsoStructureInfo((MetaName)791301518, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2996437115), + new PsoStructureEntryInfo((MetaName)1592390985, PsoDataType.Array, 8, 0, 0) + ); + case (MetaName)2996437115: + return new PsoStructureInfo((MetaName)2996437115, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)259942193, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)4255892364, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2533820819, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1584333756, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2390268263, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2392693984, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)681665994, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo((MetaName)3399412192, PsoDataType.String, 36, 7, 0) + ); + case (MetaName)4162893736: + return new PsoStructureInfo((MetaName)4162893736, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo((MetaName)3647518623, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)1559228487), + new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.Flags, 24, 0, (MetaName)2097154) + ); + case MetaName.CTaskAimGunFromCoverOutro__Tunables: + return new PsoStructureInfo(MetaName.CTaskAimGunFromCoverOutro__Tunables, 0, 0, 128, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1212343445, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)800236883, PsoDataType.Bool, 17, 0, 0), + new PsoStructureEntryInfo((MetaName)2745801756, PsoDataType.Bool, 18, 0, 0), + new PsoStructureEntryInfo((MetaName)28269420, PsoDataType.Bool, 19, 0, 0), + new PsoStructureEntryInfo((MetaName)2960195918, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)4246951180, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3467497537, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1459623344, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2206745704, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3164975884, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2243016084, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)1551121369, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)3787797455, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)2943938244, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)870279090, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)4125755684, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)63113045, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)2412106599, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)1486772652, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)3920645611, PsoDataType.Structure, 80, 0, (MetaName)1280972310), + new PsoStructureEntryInfo((MetaName)80713034, PsoDataType.Structure, 104, 0, (MetaName)1280972310) + ); + case (MetaName)1280972310: + return new PsoStructureInfo((MetaName)1280972310, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), + new PsoStructureEntryInfo((MetaName)2828309925, PsoDataType.Array, 8, 0, 0) + ); + case MetaName.CTaskAimGunBlindFire__Tunables: + return new PsoStructureInfo(MetaName.CTaskAimGunBlindFire__Tunables, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3024014754, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)4136330299, PsoDataType.Bool, 17, 0, 0), + new PsoStructureEntryInfo((MetaName)2323225479, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)298108981, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)994532516), + new PsoStructureEntryInfo((MetaName)2740917805, PsoDataType.Array, 32, 0, (MetaName)5) + ); + case (MetaName)994532516: + return new PsoStructureInfo((MetaName)994532516, 0, 0, 112, + new PsoStructureEntryInfo((MetaName)4104220306, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)430012531, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo((MetaName)3630917852, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3117869494, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)4068466847, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)3585249404, PsoDataType.String, 28, 7, 0), + new PsoStructureEntryInfo((MetaName)2291961208, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo((MetaName)3610728325, PsoDataType.String, 36, 7, 0), + new PsoStructureEntryInfo((MetaName)1018316975, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo((MetaName)2737802101, PsoDataType.String, 44, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)1559228487), + new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.Flags, 48, 0, (MetaName)2097162), + new PsoStructureEntryInfo((MetaName)2186047470, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3669858468, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3127121455, PsoDataType.Structure, 64, 0, (MetaName)4209697792), + new PsoStructureEntryInfo((MetaName)465339689, PsoDataType.Structure, 88, 0, (MetaName)4209697792) + ); + case (MetaName)4209697792: + return new PsoStructureInfo((MetaName)4209697792, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)3480847079, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1021608480, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2669496770, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2966888023, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.CAiCoverClipVariationHelper__Tunables: + return new PsoStructureInfo(MetaName.CAiCoverClipVariationHelper__Tunables, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1848963111, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2265825010, PsoDataType.UInt, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3203888722, PsoDataType.UInt, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1988933435, PsoDataType.UInt, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1069071024, PsoDataType.UInt, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2728975961, PsoDataType.UInt, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3007638827, PsoDataType.UInt, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)3247168097, PsoDataType.UInt, 44, 0, 0) + ); + case MetaName.CPlayerCoverClipVariationHelper__Tunables: + return new PsoStructureInfo(MetaName.CPlayerCoverClipVariationHelper__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3007638827, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3247168097, PsoDataType.UInt, 20, 0, 0) + ); + case MetaName.CDynamicCoverHelper__Tunables: + return new PsoStructureInfo(MetaName.CDynamicCoverHelper__Tunables, 0, 0, 176, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3464583782, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3891560208, PsoDataType.Bool, 17, 0, 0), + new PsoStructureEntryInfo((MetaName)4175251844, PsoDataType.UInt, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)488214823, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3262493116, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2656290976, PsoDataType.Bool, 29, 0, 0), + new PsoStructureEntryInfo((MetaName)4080484940, PsoDataType.Bool, 30, 0, 0), + new PsoStructureEntryInfo((MetaName)692748984, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2650603299, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)575575803, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1318415761, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)3832321302, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1249475394, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)4269848077, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)852914750, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2079300420, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)461310715, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)708594816, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)2512599606, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)3727526506, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)3036685456, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)4258697085, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)3651490612, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)1038229473, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)4155982221, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)1565700819, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)837246042, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)4089643980, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)3077258891, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)1328526529, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)2044226047, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)348835470, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)1461993132, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)370845448, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)2570702388, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)4136133905, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)225620543, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo((MetaName)60938529, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)1271601300, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)649298289, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)3234046643, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo((MetaName)3646563039, PsoDataType.Float, 168, 0, 0) + ); + case MetaName.CClipScalingHelper__Tunables: + return new PsoStructureInfo(MetaName.CClipScalingHelper__Tunables, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)800236883, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3253125136, PsoDataType.Bool, 17, 0, 0), + new PsoStructureEntryInfo((MetaName)3134002215, PsoDataType.Bool, 18, 0, 0), + new PsoStructureEntryInfo((MetaName)2434177980, PsoDataType.Bool, 19, 0, 0), + new PsoStructureEntryInfo((MetaName)3538596479, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)766404597, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2357080007, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3718056384, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)99937628, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)478065483, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)273784445, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)3714157750, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)4071659392, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)589616650, PsoDataType.Float, 56, 0, 0) + ); + case MetaName.CTaskAdvance__Tunables: + return new PsoStructureInfo(MetaName.CTaskAdvance__Tunables, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3070881148, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)933911179, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2565736146, PsoDataType.Float, 24, 0, 0) + ); + case MetaName.CTaskAimFromGround__Tunables: + return new PsoStructureInfo(MetaName.CTaskAimFromGround__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3996785209, PsoDataType.Float, 16, 0, 0) + ); + case MetaName.CTaskBoatChase__Tunables: + return new PsoStructureInfo(MetaName.CTaskBoatChase__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)514678423, PsoDataType.Float, 16, 0, 0) + ); + case MetaName.CTaskBoatCombat__Tunables: + return new PsoStructureInfo(MetaName.CTaskBoatCombat__Tunables, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)67050499, PsoDataType.Structure, 16, 0, (MetaName)384450892), + new PsoStructureEntryInfo((MetaName)1337026297, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1222335592, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1901477334, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1118835093, PsoDataType.Float, 44, 0, 0) + ); + case (MetaName)384450892: + return new PsoStructureInfo((MetaName)384450892, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)961255660, PsoDataType.Bool, 9, 0, 0), + new PsoStructureEntryInfo((MetaName)1166908668, PsoDataType.Bool, 10, 0, 0) + ); + case MetaName.CTaskBoatStrafe__Tunables: + return new PsoStructureInfo(MetaName.CTaskBoatStrafe__Tunables, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3311720447, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3249320190, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2482756980, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3143134944, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)4125886772, PsoDataType.Float, 32, 0, 0) + ); + case MetaName.CTaskDraggingToSafety__Tunables: + return new PsoStructureInfo(MetaName.CTaskDraggingToSafety__Tunables, 0, 0, 208, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1865732807, PsoDataType.Structure, 16, 0, (MetaName)1469164696), + new PsoStructureEntryInfo((MetaName)67050499, PsoDataType.Structure, 40, 0, (MetaName)512689970), + new PsoStructureEntryInfo((MetaName)122331865, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)417867439, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)4142738100, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)1858185525, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)3780096928, PsoDataType.SInt, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)3336702639, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)3908973904, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)2465106291, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)383086153, PsoDataType.Float3, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)3440934413, PsoDataType.Float3, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)4100111705, PsoDataType.Float3, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)2471124155, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)2346320415, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo((MetaName)1046969538, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)3926218692, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)3273119465, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)1481327584, PsoDataType.SInt, 164, 0, 0), + new PsoStructureEntryInfo((MetaName)2294664490, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo((MetaName)2521320953, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo((MetaName)3348150388, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo((MetaName)4029768824, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo((MetaName)1288859935, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo((MetaName)2074438621, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo((MetaName)3272441861, PsoDataType.Float, 192, 0, 0) + ); + case (MetaName)1469164696: + return new PsoStructureInfo((MetaName)1469164696, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Height, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.Radius, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)4011421405, PsoDataType.Float, 16, 0, 0) + ); + case (MetaName)512689970: + return new PsoStructureInfo((MetaName)512689970, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1865732807, PsoDataType.Bool, 9, 0, 0) + ); + case MetaName.CTaskHeliChase__Tunables: + return new PsoStructureInfo(MetaName.CTaskHeliChase__Tunables, 0, 0, 112, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1925470428, PsoDataType.Structure, 16, 0, (MetaName)1407012688), + new PsoStructureEntryInfo((MetaName)4083276309, PsoDataType.Structure, 40, 0, (MetaName)1407012688), + new PsoStructureEntryInfo((MetaName)422585777, PsoDataType.Structure, 64, 0, (MetaName)1407012688), + new PsoStructureEntryInfo((MetaName)2018929951, PsoDataType.SInt, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)947493336, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)1781466093, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)2895901568, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)3358534575, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)4175205823, PsoDataType.Float, 108, 0, 0) + ); + case (MetaName)1407012688: + return new PsoStructureInfo((MetaName)1407012688, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)2782043564, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)4282800535, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)1240074404, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1154906885, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.CTaskHeliCombat__Tunables: + return new PsoStructureInfo(MetaName.CTaskHeliCombat__Tunables, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2342544226, PsoDataType.Structure, 16, 0, (MetaName)960897278) + ); + case (MetaName)960897278: + return new PsoStructureInfo((MetaName)960897278, 0, 0, 48, + new PsoStructureEntryInfo((MetaName)1724998945, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)69361213, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)4229384679, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3996070487, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)4066129521, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3765475034, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3764687490, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3515816840, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3283771357, PsoDataType.Float, 40, 0, 0) + ); + case MetaName.CTaskPlaneChase__Tunables: + return new PsoStructureInfo(MetaName.CTaskPlaneChase__Tunables, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0) + ); + case MetaName.CTaskReactToBuddyShot__Tunables: + return new PsoStructureInfo(MetaName.CTaskReactToBuddyShot__Tunables, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0) + ); + case MetaName.CTaskVariedAimPose__Tunables: + return new PsoStructureInfo(MetaName.CTaskVariedAimPose__Tunables, 0, 0, 120, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2658395586, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3603257907, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1274013705, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3601324404, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)858243059, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2710536525, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)868109097, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2430060993, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.TargetRadius, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)3817763328, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)2661194585, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.Rate, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)803259673, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)2236196658, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)2561996113, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)1752177996, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)1942207582, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)1435927021, PsoDataType.SInt, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)2418474749, PsoDataType.Bool, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)836857486, PsoDataType.String, 92, 7, 0), + new PsoStructureEntryInfo((MetaName)607364341, PsoDataType.String, 96, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)896772506), + new PsoStructureEntryInfo((MetaName)877489286, PsoDataType.Array, 104, 0, (MetaName)22) + ); + case (MetaName)896772506: + return new PsoStructureInfo((MetaName)896772506, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1674350800, PsoDataType.Bool, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)4172129738, PsoDataType.Bool, 13, 0, 0), + new PsoStructureEntryInfo((MetaName)3859145463, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3333920819, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2263463390), + new PsoStructureEntryInfo((MetaName)2275723194, PsoDataType.Array, 24, 0, (MetaName)5) + ); + case (MetaName)2263463390: + return new PsoStructureInfo((MetaName)2263463390, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)1765007258, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ClipSetId, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo((MetaName)1300775131, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.Rate, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)966624441), + new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.Flags, 24, 2, (MetaName)524292) + ); + case MetaName.CTaskVehicleChase__Tunables: + return new PsoStructureInfo(MetaName.CTaskVehicleChase__Tunables, 0, 0, 264, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2443685244, PsoDataType.Structure, 16, 0, (MetaName)653343499), + new PsoStructureEntryInfo((MetaName)2210395489, PsoDataType.Structure, 32, 0, (MetaName)45194904), + new PsoStructureEntryInfo((MetaName)2777285984, PsoDataType.Structure, 56, 0, (MetaName)2956630463), + new PsoStructureEntryInfo((MetaName)3087082769, PsoDataType.Structure, 80, 0, (MetaName)533527745), + new PsoStructureEntryInfo((MetaName)1954107545, PsoDataType.Structure, 104, 0, (MetaName)2379651736), + new PsoStructureEntryInfo((MetaName)2022288628, PsoDataType.Structure, 128, 0, (MetaName)3309127383), + new PsoStructureEntryInfo((MetaName)625597120, PsoDataType.Structure, 152, 0, (MetaName)2082149421), + new PsoStructureEntryInfo((MetaName)766857224, PsoDataType.Structure, 216, 0, (MetaName)3284002922), + new PsoStructureEntryInfo((MetaName)1930122576, PsoDataType.Float, 248, 0, 0), + new PsoStructureEntryInfo((MetaName)2475600241, PsoDataType.Float, 252, 0, 0), + new PsoStructureEntryInfo((MetaName)1719190513, PsoDataType.Float, 256, 0, 0) + ); + case (MetaName)653343499: + return new PsoStructureInfo((MetaName)653343499, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)3423985846, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)3514547823, PsoDataType.Float, 12, 0, 0) + ); + case (MetaName)45194904: + return new PsoStructureInfo((MetaName)45194904, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)1082929500, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)126845285, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)4080325939, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1829902171, PsoDataType.Float, 20, 0, 0) + ); + case (MetaName)2956630463: + return new PsoStructureInfo((MetaName)2956630463, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)2497181955, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)158897950, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2913237777, PsoDataType.Float, 16, 0, 0) + ); + case (MetaName)533527745: + return new PsoStructureInfo((MetaName)533527745, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)474269749, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)4080325939, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)1829902171, PsoDataType.Float, 16, 0, 0) + ); + case (MetaName)2379651736: + return new PsoStructureInfo((MetaName)2379651736, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)474269749, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)4080325939, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)1829902171, PsoDataType.Float, 16, 0, 0) + ); + case (MetaName)3309127383: + return new PsoStructureInfo((MetaName)3309127383, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)474269749, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)4080325939, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)1829902171, PsoDataType.Float, 16, 0, 0) + ); + case (MetaName)2082149421: + return new PsoStructureInfo((MetaName)2082149421, 0, 0, 64, + new PsoStructureEntryInfo((MetaName)648063710, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1707529261, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2231898585, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2501833676, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3842476462, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2146950936, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1655056873, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3306631916, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3403479156, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)509314747, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)355255193, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)46040720, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)1145877267, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3622347383, PsoDataType.Float, 60, 0, 0) + ); + case (MetaName)3284002922: + return new PsoStructureInfo((MetaName)3284002922, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)3207905455, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1861379728, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)4239471096, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3574337729, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1745227706, PsoDataType.Float, 24, 0, 0) + ); + case MetaName.CTaskVehiclePersuit__Tunables: + return new PsoStructureInfo(MetaName.CTaskVehiclePersuit__Tunables, 0, 0, 184, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)432947414, PsoDataType.Structure, 16, 0, (MetaName)2385857407), + new PsoStructureEntryInfo((MetaName)3742382496, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)3275063787, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)4169133183, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)2051473778, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)1876514812, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)922557972, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)2541599029, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)150170926, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)13763777, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)2798838940, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)3823614053, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)979399865, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)1223491754, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)3023143341, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)3439953457, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)3100475498, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)4258519451, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)3352329382, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)3458993355, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)48543250, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo((MetaName)746970568, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)3151657361, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)3125460893, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)1174072295, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo((MetaName)1727051436, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo((MetaName)3385636076, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo((MetaName)3856148267, PsoDataType.SInt, 176, 0, 0) + ); + case (MetaName)2385857407: + return new PsoStructureInfo((MetaName)2385857407, 0, 0, 56, + new PsoStructureEntryInfo((MetaName)3935882297, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2895901568, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)1501439076, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)587550606, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1914453083, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1604976859, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1208093369, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)4019091857, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)2510151940, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1955661253, PsoDataType.SInt, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2422052515, PsoDataType.SInt, 48, 0, 0) + ); + case MetaName.CTaskVehicleCombat__Tunables: + return new PsoStructureInfo(MetaName.CTaskVehicleCombat__Tunables, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)470555105, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)283868640, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1335171882, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)730951251, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)4058868243, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3427043837, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)535072586, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1726607124, PsoDataType.UInt, 44, 0, 0) + ); + case MetaName.CTaskSearchBase__Tunables: + return new PsoStructureInfo(MetaName.CTaskSearchBase__Tunables, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2406795129, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2240856053, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3433998695, PsoDataType.Float, 24, 0, 0) + ); + case MetaName.CTaskSearchInAutomobile__Tunables: + return new PsoStructureInfo(MetaName.CTaskSearchInAutomobile__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)335985570, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2895901568, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.CTaskSearchInBoat__Tunables: + return new PsoStructureInfo(MetaName.CTaskSearchInBoat__Tunables, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0) + ); + case MetaName.CTaskSearchInHeli__Tunables: + return new PsoStructureInfo(MetaName.CTaskSearchInHeli__Tunables, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)335985570, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2895901568, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2018929951, PsoDataType.SInt, 24, 0, 0) + ); + case MetaName.CTaskSearchOnFoot__Tunables: + return new PsoStructureInfo(MetaName.CTaskSearchOnFoot__Tunables, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)335985570, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.TargetRadius, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1468879986, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)4110448569, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)846083482, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MoveBlendRatio, PsoDataType.Float, 36, 0, 0) + ); + case MetaName.CTaskShootOutTire__Tunables: + return new PsoStructureInfo(MetaName.CTaskShootOutTire__Tunables, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3438052999, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2480389571, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2789360544, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1841691026, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2658068209, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3748385313, PsoDataType.SInt, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)672649965, PsoDataType.Float, 40, 0, 0) + ); + case MetaName.CTaskTargetUnreachable__Tunables: + return new PsoStructureInfo(MetaName.CTaskTargetUnreachable__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1932437978, PsoDataType.Float, 16, 0, 0) + ); + case MetaName.CTaskTargetUnreachableInInterior__Tunables: + return new PsoStructureInfo(MetaName.CTaskTargetUnreachableInInterior__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2195773039, PsoDataType.Float, 16, 0, 0) + ); + case MetaName.CTaskTargetUnreachableInExterior__Tunables: + return new PsoStructureInfo(MetaName.CTaskTargetUnreachableInExterior__Tunables, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2083139838, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1798086221, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.TargetRadius, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MoveBlendRatio, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1468879986, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)460015891, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)2597134309, PsoDataType.Float, 40, 0, 0) + ); + case MetaName.CPedTargetting__Tunables: + return new PsoStructureInfo(MetaName.CPedTargetting__Tunables, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1679672363, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3550430565, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1239531869, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3653083064, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2927479807, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1742395925, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3270779927, PsoDataType.SInt, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1772648844, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)4134350078, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)3975640219, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)653564341, PsoDataType.SInt, 56, 0, 0) + ); + case MetaName.CTaskPursueCriminal__Tunables: + return new PsoStructureInfo(MetaName.CTaskPursueCriminal__Tunables, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)4037909654, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)702493934, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3332963351, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2732547664, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1100440084, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)459862259, PsoDataType.SInt, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)783802328, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)972295474, PsoDataType.SInt, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)3952273225, PsoDataType.SInt, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2958876793, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)1975950903, PsoDataType.Bool, 53, 0, 0), + new PsoStructureEntryInfo((MetaName)4063126636, PsoDataType.Float, 56, 0, 0) + ); + case MetaName.CTaskReactToPursuit__Tunables: + return new PsoStructureInfo(MetaName.CTaskReactToPursuit__Tunables, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3344957179, PsoDataType.SInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)454716601, PsoDataType.SInt, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1520777858, PsoDataType.Float, 24, 0, 0) + ); + case MetaName.CTaskStealVehicle__Tunables: + return new PsoStructureInfo(MetaName.CTaskStealVehicle__Tunables, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)702493934, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1506267647, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1289358659, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3564233674, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3908221492, PsoDataType.Bool, 29, 0, 0), + new PsoStructureEntryInfo((MetaName)3993007617, PsoDataType.Bool, 30, 0, 0), + new PsoStructureEntryInfo((MetaName)1365518895, PsoDataType.Bool, 31, 0, 0) + ); + case MetaName.CLookAtHistory__Tunables: + return new PsoStructureInfo(MetaName.CLookAtHistory__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3400740468, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1743809398, PsoDataType.UInt, 20, 0, 0) + ); + case MetaName.CAmbientLookAt__Tunables: + return new PsoStructureInfo(MetaName.CAmbientLookAt__Tunables, 0, 0, 416, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2539614217, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2251904831, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)769039659, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)491173128, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2905104124, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1036503478, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)825960985, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2542169368, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)408684949, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)831935567, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3266178324, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)95380765, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)1173793332, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)2718645532, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)2407947760, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)835021064, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)3463312294, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)1313622498, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)214316948, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)2396547402, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)4057155416, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)1209452937, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)2209113178, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)2538889403, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)2688373686, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)420424724, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)645696278, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)2883008619, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)2714692767, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)2278997613, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)3120269183, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)3099253594, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)1493940343, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)1573945112, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo((MetaName)3445942281, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)1578175347, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)813645662, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)975579249, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo((MetaName)2971794167, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo((MetaName)786235913, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo((MetaName)3388322333, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo((MetaName)592353395, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo((MetaName)1071210221, PsoDataType.Array, 184, 0, (MetaName)43), + new PsoStructureEntryInfo((MetaName)1168459099, PsoDataType.Float, 200, 0, 0), + new PsoStructureEntryInfo((MetaName)199234802, PsoDataType.Float, 204, 0, 0), + new PsoStructureEntryInfo((MetaName)3642651832, PsoDataType.Float, 208, 0, 0), + new PsoStructureEntryInfo((MetaName)4108478935, PsoDataType.Float, 212, 0, 0), + new PsoStructureEntryInfo((MetaName)390614501, PsoDataType.Float, 216, 0, 0), + new PsoStructureEntryInfo((MetaName)1078762608, PsoDataType.Float, 220, 0, 0), + new PsoStructureEntryInfo((MetaName)1479577695, PsoDataType.Float, 224, 0, 0), + new PsoStructureEntryInfo((MetaName)3008009434, PsoDataType.Float, 228, 0, 0), + new PsoStructureEntryInfo((MetaName)334092093, PsoDataType.Float, 232, 0, 0), + new PsoStructureEntryInfo((MetaName)2831412815, PsoDataType.Float, 236, 0, 0), + new PsoStructureEntryInfo((MetaName)101327813, PsoDataType.Float, 240, 0, 0), + new PsoStructureEntryInfo((MetaName)1194287595, PsoDataType.Float, 244, 0, 0), + new PsoStructureEntryInfo((MetaName)3233483053, PsoDataType.Float, 248, 0, 0), + new PsoStructureEntryInfo((MetaName)395317425, PsoDataType.Float, 252, 0, 0), + new PsoStructureEntryInfo((MetaName)1849354099, PsoDataType.Float, 256, 0, 0), + new PsoStructureEntryInfo((MetaName)2302698674, PsoDataType.Float, 260, 0, 0), + new PsoStructureEntryInfo((MetaName)1461747338, PsoDataType.Float, 264, 0, 0), + new PsoStructureEntryInfo((MetaName)372581586, PsoDataType.Float, 268, 0, 0), + new PsoStructureEntryInfo((MetaName)3324445918, PsoDataType.Float, 272, 0, 0), + new PsoStructureEntryInfo((MetaName)1018069509, PsoDataType.Float, 276, 0, 0), + new PsoStructureEntryInfo((MetaName)1245516390, PsoDataType.Float, 280, 0, 0), + new PsoStructureEntryInfo((MetaName)369519904, PsoDataType.UByte, 284, 0, 0), + new PsoStructureEntryInfo((MetaName)3873670579, PsoDataType.UByte, 285, 0, 0), + new PsoStructureEntryInfo((MetaName)248477757, PsoDataType.Bool, 286, 0, 0), + new PsoStructureEntryInfo((MetaName)674468988, PsoDataType.Bool, 287, 0, 0), + new PsoStructureEntryInfo((MetaName)1289065068, PsoDataType.Float, 288, 0, 0), + new PsoStructureEntryInfo((MetaName)894057762, PsoDataType.Float, 292, 0, 0), + new PsoStructureEntryInfo((MetaName)2806951563, PsoDataType.Float, 296, 0, 0), + new PsoStructureEntryInfo((MetaName)1078877377, PsoDataType.Float, 300, 0, 0), + new PsoStructureEntryInfo((MetaName)527596719, PsoDataType.Float, 304, 0, 0), + new PsoStructureEntryInfo((MetaName)389125880, PsoDataType.Float, 308, 0, 0), + new PsoStructureEntryInfo((MetaName)3709479259, PsoDataType.Float, 312, 0, 0), + new PsoStructureEntryInfo((MetaName)2179898613, PsoDataType.Bool, 316, 0, 0), + new PsoStructureEntryInfo((MetaName)3589690545, PsoDataType.Enum, 320, 0, (MetaName)454750378), + new PsoStructureEntryInfo((MetaName)1321758856, PsoDataType.Enum, 324, 0, (MetaName)454750378), + new PsoStructureEntryInfo((MetaName)1972120707, PsoDataType.Enum, 328, 0, (MetaName)454750378), + new PsoStructureEntryInfo((MetaName)3786041740, PsoDataType.Enum, 332, 0, (MetaName)454750378), + new PsoStructureEntryInfo((MetaName)3198525203, PsoDataType.Enum, 336, 0, (MetaName)1931302076), + new PsoStructureEntryInfo((MetaName)1217360623, PsoDataType.Enum, 340, 0, (MetaName)1931302076), + new PsoStructureEntryInfo((MetaName)1566172518, PsoDataType.Enum, 344, 0, (MetaName)1931302076), + new PsoStructureEntryInfo((MetaName)3988230675, PsoDataType.Enum, 348, 0, (MetaName)1931302076), + new PsoStructureEntryInfo((MetaName)3701159057, PsoDataType.Enum, 352, 0, (MetaName)4044698613), + new PsoStructureEntryInfo((MetaName)3819703101, PsoDataType.Enum, 356, 0, (MetaName)4044698613), + new PsoStructureEntryInfo((MetaName)3198801841, PsoDataType.Enum, 360, 0, (MetaName)4044698613), + new PsoStructureEntryInfo((MetaName)299126851, PsoDataType.Float, 364, 0, 0), + new PsoStructureEntryInfo((MetaName)242751779, PsoDataType.Float, 368, 0, 0), + new PsoStructureEntryInfo((MetaName)2740963979, PsoDataType.Float, 372, 0, 0), + new PsoStructureEntryInfo((MetaName)2521394702, PsoDataType.Float, 376, 0, 0), + new PsoStructureEntryInfo((MetaName)4188496022, PsoDataType.UInt, 380, 0, 0), + new PsoStructureEntryInfo((MetaName)383049694, PsoDataType.Float, 384, 0, 0), + new PsoStructureEntryInfo((MetaName)891569975, PsoDataType.UInt, 388, 0, 0), + new PsoStructureEntryInfo((MetaName)3027972140, PsoDataType.UInt, 392, 0, 0), + new PsoStructureEntryInfo((MetaName)1015010494, PsoDataType.UInt, 396, 0, 0), + new PsoStructureEntryInfo((MetaName)2204270248, PsoDataType.Float, 400, 0, 0), + new PsoStructureEntryInfo((MetaName)867760403, PsoDataType.Float, 404, 0, 0), + new PsoStructureEntryInfo((MetaName)3299346053, PsoDataType.Float, 408, 0, 0), + new PsoStructureEntryInfo((MetaName)3044687592, PsoDataType.UInt, 412, 0, 0) + ); + case MetaName.CTaskAmbientClips__Tunables: + return new PsoStructureInfo(MetaName.CTaskAmbientClips__Tunables, 0, 0, 88, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)664477457, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)3714303368, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1544265672, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1718176557, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3057149274, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)724033442, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)232011649, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2302651663, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)1876536698, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)3493766854, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3211610412, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3495687858, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)1299890657, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)2863765530, PsoDataType.UInt, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)110858295, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)990057437, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)2595564437, PsoDataType.Float, 80, 0, 0) + ); + case MetaName.CTaskChat__Tunables: + return new PsoStructureInfo(MetaName.CTaskChat__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3997955765, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)295850963, PsoDataType.Float, 20, 0, 0) + ); + case (MetaName)918124422: + return new PsoStructureInfo((MetaName)918124422, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1015537615, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)2803702095, PsoDataType.String, 20, 7, 0) + ); + case (MetaName)2117468048: + return new PsoStructureInfo((MetaName)2117468048, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3316020555, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)353087997, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3967034351, PsoDataType.Float3, 32, 0, 0) + ); + case MetaName.CTaskFlyingWander__Tunables: + return new PsoStructureInfo(MetaName.CTaskFlyingWander__Tunables, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3211719875, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3829108144, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.TargetRadius, PsoDataType.Float, 24, 0, 0) + ); + case MetaName.CTaskPlayerOnFoot__Tunables: + return new PsoStructureInfo(MetaName.CTaskPlayerOnFoot__Tunables, 0, 0, 368, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2636443310, PsoDataType.Structure, 16, 0, (MetaName)810561649), + new PsoStructureEntryInfo((MetaName)7473239, PsoDataType.Structure, 88, 0, (MetaName)4252665724), + new PsoStructureEntryInfo((MetaName)973020790, PsoDataType.Structure, 152, 0, (MetaName)2770060121), + new PsoStructureEntryInfo((MetaName)4040000084, PsoDataType.Bool, 208, 0, 0), + new PsoStructureEntryInfo((MetaName)1056793189, PsoDataType.Bool, 209, 0, 0), + new PsoStructureEntryInfo((MetaName)1978058747, PsoDataType.Bool, 210, 0, 0), + new PsoStructureEntryInfo((MetaName)3319528567, PsoDataType.Bool, 211, 0, 0), + new PsoStructureEntryInfo((MetaName)684815089, PsoDataType.Float, 212, 0, 0), + new PsoStructureEntryInfo((MetaName)1800609114, PsoDataType.Float, 216, 0, 0), + new PsoStructureEntryInfo((MetaName)4241887050, PsoDataType.Float, 220, 0, 0), + new PsoStructureEntryInfo((MetaName)1979246139, PsoDataType.Float, 224, 0, 0), + new PsoStructureEntryInfo((MetaName)116998034, PsoDataType.Float, 228, 0, 0), + new PsoStructureEntryInfo((MetaName)85726558, PsoDataType.Float, 232, 0, 0), + new PsoStructureEntryInfo((MetaName)1179075662, PsoDataType.Float, 236, 0, 0), + new PsoStructureEntryInfo((MetaName)2101568980, PsoDataType.Float, 240, 0, 0), + new PsoStructureEntryInfo((MetaName)3786622949, PsoDataType.Float, 244, 0, 0), + new PsoStructureEntryInfo((MetaName)2013288531, PsoDataType.Float, 248, 0, 0), + new PsoStructureEntryInfo((MetaName)1955233508, PsoDataType.Float, 252, 0, 0), + new PsoStructureEntryInfo((MetaName)184089910, PsoDataType.Float, 256, 0, 0), + new PsoStructureEntryInfo((MetaName)1348626108, PsoDataType.Float, 260, 0, 0), + new PsoStructureEntryInfo((MetaName)3734777024, PsoDataType.Float, 264, 0, 0), + new PsoStructureEntryInfo((MetaName)3910547157, PsoDataType.Float, 268, 0, 0), + new PsoStructureEntryInfo((MetaName)3255589803, PsoDataType.Float, 272, 0, 0), + new PsoStructureEntryInfo((MetaName)2279531977, PsoDataType.Float, 276, 0, 0), + new PsoStructureEntryInfo((MetaName)2996089454, PsoDataType.Float, 280, 0, 0), + new PsoStructureEntryInfo((MetaName)3671850988, PsoDataType.Float, 284, 0, 0), + new PsoStructureEntryInfo((MetaName)3278990871, PsoDataType.Float, 288, 0, 0), + new PsoStructureEntryInfo((MetaName)2932059417, PsoDataType.Float, 292, 0, 0), + new PsoStructureEntryInfo((MetaName)1242729948, PsoDataType.Float, 296, 0, 0), + new PsoStructureEntryInfo((MetaName)3141504902, PsoDataType.Float, 300, 0, 0), + new PsoStructureEntryInfo((MetaName)3121364054, PsoDataType.Float, 304, 0, 0), + new PsoStructureEntryInfo((MetaName)2777705971, PsoDataType.Float, 308, 0, 0), + new PsoStructureEntryInfo((MetaName)302988723, PsoDataType.Float, 312, 0, 0), + new PsoStructureEntryInfo((MetaName)428630826, PsoDataType.Float, 316, 0, 0), + new PsoStructureEntryInfo((MetaName)3645928265, PsoDataType.Float, 320, 0, 0), + new PsoStructureEntryInfo((MetaName)3768160914, PsoDataType.Float, 324, 0, 0), + new PsoStructureEntryInfo((MetaName)4218123581, PsoDataType.Float, 328, 0, 0), + new PsoStructureEntryInfo((MetaName)2749521042, PsoDataType.Float, 332, 0, 0), + new PsoStructureEntryInfo((MetaName)4086815177, PsoDataType.Float, 336, 0, 0), + new PsoStructureEntryInfo((MetaName)706571699, PsoDataType.Float, 340, 0, 0), + new PsoStructureEntryInfo((MetaName)3378257781, PsoDataType.Float, 344, 0, 0), + new PsoStructureEntryInfo((MetaName)1824902254, PsoDataType.Float, 348, 0, 0), + new PsoStructureEntryInfo((MetaName)3681430863, PsoDataType.Float, 352, 0, 0), + new PsoStructureEntryInfo((MetaName)1574888900, PsoDataType.Float, 356, 0, 0), + new PsoStructureEntryInfo((MetaName)3328482583, PsoDataType.String, 360, 7, 0), + new PsoStructureEntryInfo((MetaName)1221942053, PsoDataType.Bool, 364, 0, 0), + new PsoStructureEntryInfo((MetaName)1138836382, PsoDataType.Bool, 365, 0, 0) + ); + case (MetaName)810561649: + return new PsoStructureInfo((MetaName)810561649, 0, 0, 72, + new PsoStructureEntryInfo((MetaName)3529865731, PsoDataType.Structure, 8, 0, (MetaName)1276417684), + new PsoStructureEntryInfo((MetaName)1914687253, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1407750823, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1694184652, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2711684267, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2941689878, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1795856235, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)1293637123, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)639648672, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)4149318965, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.BlendOutDelta, PsoDataType.Float, 68, 0, 0) + ); + case (MetaName)1276417684: + return new PsoStructureInfo((MetaName)1276417684, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.X, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.Y, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.Z, PsoDataType.Float, 20, 0, 0) + ); + case (MetaName)4252665724: + return new PsoStructureInfo((MetaName)4252665724, 0, 0, 64, + new PsoStructureEntryInfo((MetaName)3529865731, PsoDataType.Structure, 8, 0, (MetaName)2201360486), + new PsoStructureEntryInfo((MetaName)1914687253, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1407750823, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1694184652, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2711684267, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2941689878, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1795856235, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)4149318965, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.BlendOutDelta, PsoDataType.Float, 60, 0, 0) + ); + case (MetaName)2201360486: + return new PsoStructureInfo((MetaName)2201360486, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.X, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.Y, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.Z, PsoDataType.Float, 20, 0, 0) + ); + case (MetaName)2770060121: + return new PsoStructureInfo((MetaName)2770060121, 0, 0, 56, + new PsoStructureEntryInfo((MetaName)3529865731, PsoDataType.Structure, 8, 0, (MetaName)549752042), + new PsoStructureEntryInfo((MetaName)4149318965, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.BlendOutDelta, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3586541171, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)4160387967, PsoDataType.String, 44, 7, 0), + new PsoStructureEntryInfo((MetaName)2801649672, PsoDataType.String, 48, 7, 0), + new PsoStructureEntryInfo((MetaName)2028074979, PsoDataType.String, 52, 7, 0) + ); + case (MetaName)549752042: + return new PsoStructureInfo((MetaName)549752042, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.X, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.Y, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.Z, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.CTaskSwimmingWander__Tunables: + return new PsoStructureInfo(MetaName.CTaskSwimmingWander__Tunables, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1405419534, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1606727990, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)715859273, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3266740728, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3847609025, PsoDataType.UInt, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3581037895, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)4060945649, PsoDataType.UInt, 40, 0, 0) + ); + case MetaName.CTaskUnalerted__Tunables: + return new PsoStructureInfo(MetaName.CTaskUnalerted__Tunables, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)4004750790, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)4009937054, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1166603434, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2129795449, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1467495810, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2887992243, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)2307005569, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1049520739, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2064516214, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2148143287, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3697919373, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3167164487, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)3609661010, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)637992620, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)1770714176, PsoDataType.Float, 72, 0, 0) + ); + case MetaName.CTaskWander__Tunables: + return new PsoStructureInfo(MetaName.CTaskWander__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3616711897, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3510850224, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.CTaskWanderInArea__Tunables: + return new PsoStructureInfo(MetaName.CTaskWanderInArea__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3965435915, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)295850963, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.CDispatchSpawnHelper__Tunables: + return new PsoStructureInfo(MetaName.CDispatchSpawnHelper__Tunables, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3321094558, PsoDataType.Structure, 16, 0, (MetaName)2369454477), + new PsoStructureEntryInfo((MetaName)67050499, PsoDataType.Structure, 32, 0, (MetaName)3541869149), + new PsoStructureEntryInfo((MetaName)652074796, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)890881625, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)713008535, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)2329813458, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)43531000, PsoDataType.Float, 64, 0, 0) + ); + case (MetaName)2369454477: + return new PsoStructureInfo((MetaName)2369454477, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)3017247137, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)3808847755, PsoDataType.Float, 12, 0, 0) + ); + case (MetaName)3541869149: + return new PsoStructureInfo((MetaName)3541869149, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)3360212191, PsoDataType.Bool, 9, 0, 0), + new PsoStructureEntryInfo((MetaName)3455230182, PsoDataType.Bool, 10, 0, 0), + new PsoStructureEntryInfo((MetaName)2790865931, PsoDataType.Bool, 11, 0, 0) + ); + case MetaName.CDispatchAdvancedSpawnHelper__Tunables: + return new PsoStructureInfo(MetaName.CDispatchAdvancedSpawnHelper__Tunables, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)67050499, PsoDataType.Structure, 16, 0, (MetaName)3744572044), + new PsoStructureEntryInfo((MetaName)606050838, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2966580682, PsoDataType.Float, 36, 0, 0) + ); + case (MetaName)3744572044: + return new PsoStructureInfo((MetaName)3744572044, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0) + ); + case MetaName.CDispatchHelperSearchOnFoot__Tunables: + return new PsoStructureInfo(MetaName.CDispatchHelperSearchOnFoot__Tunables, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2350715434), + new PsoStructureEntryInfo((MetaName)1591913012, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo((MetaName)1798086221, PsoDataType.Float, 32, 0, 0) + ); + case (MetaName)2350715434: + return new PsoStructureInfo((MetaName)2350715434, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)3151249820, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1171478055, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)679039028, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)208554060, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)4276410337, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3503009483, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2888264108, PsoDataType.Bool, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3330866903, PsoDataType.Bool, 33, 0, 0), + new PsoStructureEntryInfo((MetaName)759464384, PsoDataType.Bool, 34, 0, 0) + ); + case MetaName.CDispatchHelperSearchInAutomobile__Tunables: + return new PsoStructureInfo(MetaName.CDispatchHelperSearchInAutomobile__Tunables, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2350715434), + new PsoStructureEntryInfo((MetaName)1591913012, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo((MetaName)4277520254, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2895901568, PsoDataType.Float, 36, 0, 0) + ); + case MetaName.CDispatchHelperSearchInBoat__Tunables: + return new PsoStructureInfo(MetaName.CDispatchHelperSearchInBoat__Tunables, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2350715434), + new PsoStructureEntryInfo((MetaName)1591913012, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo((MetaName)2895901568, PsoDataType.Float, 32, 0, 0) + ); + case MetaName.CDispatchHelperSearchInHeli__Tunables: + return new PsoStructureInfo(MetaName.CDispatchHelperSearchInHeli__Tunables, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2350715434), + new PsoStructureEntryInfo((MetaName)1591913012, PsoDataType.Array, 16, 0, (MetaName)1) + ); + case MetaName.CDispatchHelperVolumes__Tunables: + return new PsoStructureInfo(MetaName.CDispatchHelperVolumes__Tunables, 0, 0, 152, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)67050499, PsoDataType.Structure, 16, 0, (MetaName)3452608618), + new PsoStructureEntryInfo((MetaName)3346068581, PsoDataType.Structure, 32, 0, (MetaName)3249772165), + new PsoStructureEntryInfo((MetaName)937610588, PsoDataType.Structure, 72, 0, (MetaName)898276026), + new PsoStructureEntryInfo((MetaName)20824415, PsoDataType.Structure, 112, 0, (MetaName)2312163633) + ); + case (MetaName)3452608618: + return new PsoStructureInfo((MetaName)3452608618, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)3346068581, PsoDataType.Bool, 9, 0, 0), + new PsoStructureEntryInfo((MetaName)937610588, PsoDataType.Bool, 10, 0, 0), + new PsoStructureEntryInfo((MetaName)20824415, PsoDataType.Bool, 11, 0, 0) + ); + case (MetaName)3249772165: + return new PsoStructureInfo((MetaName)3249772165, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1419890352), + new PsoStructureEntryInfo((MetaName)3530189928, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3809247475), + new PsoStructureEntryInfo(MetaName.Spheres, PsoDataType.Array, 24, 0, (MetaName)2) + ); + case (MetaName)898276026: + return new PsoStructureInfo((MetaName)898276026, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2129766809), + new PsoStructureEntryInfo((MetaName)3530189928, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)253441159), + new PsoStructureEntryInfo(MetaName.Spheres, PsoDataType.Array, 24, 0, (MetaName)2) + ); + case (MetaName)2312163633: + return new PsoStructureInfo((MetaName)2312163633, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3558216355), + new PsoStructureEntryInfo((MetaName)3530189928, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1335944774), + new PsoStructureEntryInfo(MetaName.Spheres, PsoDataType.Array, 24, 0, (MetaName)2) + ); + case (MetaName)1419890352: + return new PsoStructureInfo((MetaName)1419890352, 0, 0, 96, + new PsoStructureEntryInfo((MetaName)2592513975, PsoDataType.Structure, 8, 0, (MetaName)3558216355), + new PsoStructureEntryInfo(MetaName.Position, PsoDataType.Structure, 72, 0, (MetaName)2431379611) + ); + case (MetaName)3558216355: + return new PsoStructureInfo((MetaName)3558216355, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Start, PsoDataType.Structure, 8, 0, (MetaName)2431379611), + new PsoStructureEntryInfo(MetaName.End, PsoDataType.Structure, 32, 0, (MetaName)2431379611), + new PsoStructureEntryInfo(MetaName.Width, PsoDataType.Float, 56, 0, 0) + ); + case (MetaName)2431379611: + return new PsoStructureInfo((MetaName)2431379611, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.X, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.Y, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.Z, PsoDataType.Float, 16, 0, 0) + ); + case (MetaName)2129766809: + return new PsoStructureInfo((MetaName)2129766809, 0, 0, 80, + new PsoStructureEntryInfo((MetaName)2592513975, PsoDataType.Structure, 8, 0, (MetaName)3558216355), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)4002001992), + new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.Flags, 72, 0, (MetaName)2097153) + ); + case MetaName.CWantedHelicopterDispatch__Tunables: + return new PsoStructureInfo(MetaName.CWantedHelicopterDispatch__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3078950392, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)4153560394, PsoDataType.UInt, 20, 0, 0) + ); + case MetaName.CPoliceBoatDispatch__Tunables: + return new PsoStructureInfo(MetaName.CPoliceBoatDispatch__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3078950392, PsoDataType.Float, 16, 0, 0) + ); + case MetaName.CEventPedJackingMyVehicle__Tunables: + return new PsoStructureInfo(MetaName.CEventPedJackingMyVehicle__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)564420500, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2906908712, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.CEventEncroachingPed__Tunables: + return new PsoStructureInfo(MetaName.CEventEncroachingPed__Tunables, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0) + ); + case MetaName.CEventRequestHelp__Tunables: + return new PsoStructureInfo(MetaName.CEventRequestHelp__Tunables, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2602588680, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)564420500, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2906908712, PsoDataType.Float, 24, 0, 0) + ); + case MetaName.CEventCrimeCryForHelp__Tunables: + return new PsoStructureInfo(MetaName.CEventCrimeCryForHelp__Tunables, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.MaxDistance, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1405855513, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)4108300187, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1818772152, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2579479361, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)977600457, PsoDataType.Float, 36, 0, 0) + ); + case MetaName.CEventSuspiciousActivity__Tunables: + return new PsoStructureInfo(MetaName.CEventSuspiciousActivity__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)4233735310, PsoDataType.Float, 16, 0, 0) + ); + case MetaName.CEventAgitated__Tunables: + return new PsoStructureInfo(MetaName.CEventAgitated__Tunables, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)4175948694, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1941376054, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)449694767, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)946719330, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2167383018, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1295611070, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)2937486448, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1507389089, PsoDataType.Enum, 44, 0, (MetaName)1507389089) + ); + case MetaName.CEventRespondedToThreat__Tunables: + return new PsoStructureInfo(MetaName.CEventRespondedToThreat__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)564420500, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2906908712, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.CTaskCallPolice__Tunables: + return new PsoStructureInfo(MetaName.CTaskCallPolice__Tunables, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1927499316, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3385798684, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2919871050, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)4048361920, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)4230329614, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2980295761, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)2423924604, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)854541557, PsoDataType.Float, 44, 0, 0) + ); + case MetaName.CTaskConversationHelper__Tunables: + return new PsoStructureInfo(MetaName.CTaskConversationHelper__Tunables, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2156082331, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3637331931, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3930402274, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1048379145, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)4242148097, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1878691053, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)784723777, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2295557741, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)1037671842, PsoDataType.UInt, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)3917563062, PsoDataType.UInt, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)1968341934, PsoDataType.UByte, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)1226852111, PsoDataType.UByte, 57, 0, 0) + ); + case MetaName.CLegIkSolver__Tunables: + return new PsoStructureInfo(MetaName.CLegIkSolver__Tunables, 0, 0, 392, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2837302706, PsoDataType.Structure, 16, 0, (MetaName)1560218317), + new PsoStructureEntryInfo((MetaName)115587354, PsoDataType.Structure, 40, 0, (MetaName)1560218317), + new PsoStructureEntryInfo((MetaName)2709476201, PsoDataType.Structure, 64, 0, (MetaName)1560218317), + new PsoStructureEntryInfo((MetaName)1745248481, PsoDataType.Structure, 88, 0, (MetaName)1560218317), + new PsoStructureEntryInfo((MetaName)1545915544, PsoDataType.Structure, 112, 0, (MetaName)1560218317), + new PsoStructureEntryInfo((MetaName)1979344219, PsoDataType.Structure, 136, 0, (MetaName)1560218317), + new PsoStructureEntryInfo((MetaName)3264564387, PsoDataType.Structure, 160, 0, (MetaName)1560218317), + new PsoStructureEntryInfo((MetaName)67151581, PsoDataType.Structure, 184, 0, (MetaName)1560218317), + new PsoStructureEntryInfo((MetaName)2577533666, PsoDataType.Structure, 208, 0, (MetaName)1560218317), + new PsoStructureEntryInfo((MetaName)2302577809, PsoDataType.Structure, 232, 0, (MetaName)1560218317), + new PsoStructureEntryInfo((MetaName)1271955779, PsoDataType.Structure, 256, 0, (MetaName)1560218317), + new PsoStructureEntryInfo((MetaName)3289881556, PsoDataType.Structure, 280, 0, (MetaName)1560218317), + new PsoStructureEntryInfo((MetaName)3671506242, PsoDataType.Structure, 304, 0, (MetaName)1560218317), + new PsoStructureEntryInfo((MetaName)2144071841, PsoDataType.Structure, 328, 0, (MetaName)1560218317), + new PsoStructureEntryInfo((MetaName)2784569431, PsoDataType.Float, 352, 0, 0), + new PsoStructureEntryInfo((MetaName)1210483821, PsoDataType.Float, 356, 0, 0), + new PsoStructureEntryInfo((MetaName)2173480721, PsoDataType.Float, 360, 0, 0), + new PsoStructureEntryInfo((MetaName)1295091688, PsoDataType.Float, 364, 0, 0), + new PsoStructureEntryInfo((MetaName)3894253961, PsoDataType.Float, 368, 0, 0), + new PsoStructureEntryInfo((MetaName)1875736055, PsoDataType.Float, 372, 0, 0), + new PsoStructureEntryInfo((MetaName)1652778083, PsoDataType.Float, 376, 0, 0), + new PsoStructureEntryInfo((MetaName)369470094, PsoDataType.Float, 380, 0, 0), + new PsoStructureEntryInfo((MetaName)816343475, PsoDataType.Float, 384, 0, 0) + ); + case (MetaName)1560218317: + return new PsoStructureInfo((MetaName)1560218317, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Rate, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1199000829, PsoDataType.Bool, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)801104139, PsoDataType.Bool, 13, 0, 0), + new PsoStructureEntryInfo((MetaName)3627404834, PsoDataType.Bool, 14, 0, 0), + new PsoStructureEntryInfo((MetaName)1799363495, PsoDataType.Float, 16, 0, 0) + ); + case MetaName.CMiniMap__Tunables: + return new PsoStructureInfo(MetaName.CMiniMap__Tunables, 0, 0, 352, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)409760750, PsoDataType.Structure, 16, 0, (MetaName)53366421), + new PsoStructureEntryInfo((MetaName)133430210, PsoDataType.Structure, 132, 0, (MetaName)1902464991), + new PsoStructureEntryInfo((MetaName)3540307690, PsoDataType.Structure, 140, 0, (MetaName)2026887270), + new PsoStructureEntryInfo((MetaName)1791333322, PsoDataType.Structure, 172, 0, (MetaName)1690619373), + new PsoStructureEntryInfo(MetaName.Camera, PsoDataType.Structure, 200, 0, (MetaName)283649933), + new PsoStructureEntryInfo((MetaName)2501703395, PsoDataType.Structure, 300, 0, (MetaName)3031405081), + new PsoStructureEntryInfo((MetaName)370428790, PsoDataType.Structure, 320, 0, (MetaName)2449081679), + new PsoStructureEntryInfo((MetaName)2360416497, PsoDataType.Structure, 340, 0, (MetaName)1640186987) + ); + case (MetaName)53366421: + return new PsoStructureInfo((MetaName)53366421, 0, 0, 116, + new PsoStructureEntryInfo((MetaName)347298932, PsoDataType.Float, 0, 0, 0), + new PsoStructureEntryInfo((MetaName)1166640595, PsoDataType.Float, 4, 0, 0), + new PsoStructureEntryInfo((MetaName)2698396339, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1593818711, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)496127271, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2190165672, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)121379805, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3197086918, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1578589400, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1197726055, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3329995088, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)3813597325, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)4073295642, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)3759114450, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)60903513, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)1114733078, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)819051225, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)1070205007, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)2428401420, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)871660954, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)29182579, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)1532863616, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)807986206, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)2604348013, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)801070127, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)1747790072, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)1838053251, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)3201590411, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)1212129799, PsoDataType.Float, 112, 0, 0) + ); + case (MetaName)1902464991: + return new PsoStructureInfo((MetaName)1902464991, 0, 0, 8, + new PsoStructureEntryInfo((MetaName)420083265, PsoDataType.Float, 0, 0, 0), + new PsoStructureEntryInfo((MetaName)4066516916, PsoDataType.SInt, 4, 0, 0) + ); + case (MetaName)2026887270: + return new PsoStructureInfo((MetaName)2026887270, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)2262853888, PsoDataType.UShort, 0, 0, 0), + new PsoStructureEntryInfo((MetaName)735818480, PsoDataType.UShort, 2, 0, 0), + new PsoStructureEntryInfo((MetaName)4138858726, PsoDataType.Float2, 4, 0, 0), + new PsoStructureEntryInfo((MetaName)3205558428, PsoDataType.Float2, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)1388742013, PsoDataType.Bool, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3712817443, PsoDataType.Enum, 24, 0, (MetaName)1049598006), + new PsoStructureEntryInfo((MetaName)1737696498, PsoDataType.Enum, 28, 0, (MetaName)1049598006) + ); + case (MetaName)1690619373: + return new PsoStructureInfo((MetaName)1690619373, 0, 0, 28, + new PsoStructureEntryInfo((MetaName)4115899538, PsoDataType.Float, 0, 0, 0), + new PsoStructureEntryInfo((MetaName)70992481, PsoDataType.Float, 4, 0, 0), + new PsoStructureEntryInfo((MetaName)3885599006, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2995953429, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3124083955, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2170322240, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1452712925, PsoDataType.Float, 24, 0, 0) + ); + case (MetaName)283649933: + return new PsoStructureInfo((MetaName)283649933, 0, 0, 100, + new PsoStructureEntryInfo((MetaName)3708284943, PsoDataType.Float, 0, 0, 0), + new PsoStructureEntryInfo((MetaName)1172300147, PsoDataType.Float, 4, 0, 0), + new PsoStructureEntryInfo((MetaName)3725084347, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)4112712376, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)646913210, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)397988749, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1296848312, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)187030077, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3533921583, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2652932444, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)2075786872, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)105068200, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2402173156, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)3692711717, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)4088397509, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)709315443, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)1734631491, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)382138818, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)285457106, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)1912611271, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)4158832075, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)2229181525, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)1723892124, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)707151806, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)928938887, PsoDataType.Float, 96, 0, 0) + ); + case (MetaName)3031405081: + return new PsoStructureInfo((MetaName)3031405081, 0, 0, 20, + new PsoStructureEntryInfo((MetaName)2152230135, PsoDataType.Float2, 0, 0, 0), + new PsoStructureEntryInfo((MetaName)4201231105, PsoDataType.Float2, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)142519492, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)866622976, PsoDataType.Bool, 17, 0, 0) + ); + case (MetaName)2449081679: + return new PsoStructureInfo((MetaName)2449081679, 0, 0, 20, + new PsoStructureEntryInfo(MetaName.vPos, PsoDataType.Float2, 0, 0, 0), + new PsoStructureEntryInfo((MetaName)1805863696, PsoDataType.Float2, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)806477731, PsoDataType.Float, 16, 0, 0) + ); + case (MetaName)1640186987: + return new PsoStructureInfo((MetaName)1640186987, 0, 0, 12, + new PsoStructureEntryInfo((MetaName)717614933, PsoDataType.UShort, 0, 0, 0), + new PsoStructureEntryInfo((MetaName)81490677, PsoDataType.UShort, 2, 0, 0), + new PsoStructureEntryInfo((MetaName)2014573657, PsoDataType.Float, 4, 0, 0), + new PsoStructureEntryInfo((MetaName)3269987179, PsoDataType.Float, 8, 0, 0) + ); + case MetaName.CTaskMotionAiming__Tunables: + return new PsoStructureInfo(MetaName.CTaskMotionAiming__Tunables, 0, 0, 144, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3051090926, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1886735419, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1030928652, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1966094123, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2358855400, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)214999846, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)469859232, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1722146938, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)1350763236, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)3375971933, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3611401160, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)956068907, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)997046562, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.Turn, PsoDataType.Structure, 72, 0, (MetaName)150934045), + new PsoStructureEntryInfo(MetaName.PitchChangeRate, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)724740943, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)2955289081, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)1952772149, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)1545452032, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)2752952312, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)3521301980, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)2967257859, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)2563588038, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)1051732090, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)3381710529, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)2949921986, PsoDataType.Bool, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)138117989, PsoDataType.Bool, 133, 0, 0), + new PsoStructureEntryInfo((MetaName)122800807, PsoDataType.Bool, 134, 0, 0), + new PsoStructureEntryInfo((MetaName)259313148, PsoDataType.Bool, 135, 0, 0), + new PsoStructureEntryInfo((MetaName)2900191858, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)827074596, PsoDataType.Bool, 140, 0, 0) + ); + case (MetaName)150934045: + return new PsoStructureInfo((MetaName)150934045, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)2853820726, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1403610920, PsoDataType.Float, 12, 0, 0) + ); + case (MetaName)1099459847: + return new PsoStructureInfo((MetaName)1099459847, 0, 0, 136, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3519366748, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)626958998, PsoDataType.UInt, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1117824032, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3524235412, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)72858195, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2210871472, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)2759154614, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2321281590, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)177240921, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1388183900, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)810486897, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)2955815816, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)731604244, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)2942205087, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)2391787980, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)3008826210, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)325409255, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)2032071225, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)171073592, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)2122727094, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)578605354, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)961953658, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)291845288, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)1918070033, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)677105748, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)2691956573, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)27278755, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)2575647854, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)3370383430, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)951644869, PsoDataType.String, 132, 7, 0) + ); + case MetaName.CTaskMotionSwimming__Tunables: + return new PsoStructureInfo(MetaName.CTaskMotionSwimming__Tunables, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2829230620, PsoDataType.SInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2216234163, PsoDataType.SInt, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)4258712195), + new PsoStructureEntryInfo((MetaName)1092654765, PsoDataType.Array, 24, 0, (MetaName)3), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)304399001), + new PsoStructureEntryInfo((MetaName)2321693669, PsoDataType.Array, 40, 0, (MetaName)5) + ); + case (MetaName)4258712195: + return new PsoStructureInfo((MetaName)4258712195, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.ModelName, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3020467458), + new PsoStructureEntryInfo(MetaName.Variations, PsoDataType.Array, 16, 0, (MetaName)1) + ); + case (MetaName)3020467458: + return new PsoStructureInfo((MetaName)3020467458, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2469984956), + new PsoStructureEntryInfo((MetaName)4006165571, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1478092361, PsoDataType.Structure, 24, 0, (MetaName)2354064210), + new PsoStructureEntryInfo((MetaName)505931244, PsoDataType.Structure, 48, 0, (MetaName)2354064210) + ); + case (MetaName)2354064210: + return new PsoStructureInfo((MetaName)2354064210, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Component, PsoDataType.Enum, 8, 0, (MetaName)884254308), + new PsoStructureEntryInfo(MetaName.DrawableId, PsoDataType.UInt, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3029420796, PsoDataType.UInt, 16, 0, 0) + ); + case (MetaName)2469984956: + return new PsoStructureInfo((MetaName)2469984956, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Component, PsoDataType.Enum, 8, 0, (MetaName)884254308), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UInt, 0, 0, 0), + new PsoStructureEntryInfo((MetaName)4176789291, PsoDataType.Array, 16, 0, (MetaName)1) + ); + case (MetaName)304399001: + return new PsoStructureInfo((MetaName)304399001, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.ModelName, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.Index, PsoDataType.SInt, 12, 0, 0) + ); + case MetaName.CTaskMotionBasicLocomotionLowLod__Tunables: + return new PsoStructureInfo(MetaName.CTaskMotionBasicLocomotionLowLod__Tunables, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)830448667, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)932904484, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3756162272, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1213035272, PsoDataType.Float, 28, 0, 0) + ); + case MetaName.CTaskFishLocomotion__Tunables: + return new PsoStructureInfo(MetaName.CTaskFishLocomotion__Tunables, 0, 0, 120, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1138520829, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1142247737, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1055045198, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1298540281, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)190400066, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)660335017, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)2035076014, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)4133472264, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2691956573, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1242076965, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)2945548240, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3350282721, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)3728756551, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)1246801857, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)763241052, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)1444953847, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)1909345264, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)1086011957, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)61986925, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)3431403282, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)1039725890, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)3742890223, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)2334883967, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)487169156, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)951644869, PsoDataType.String, 112, 7, 0), + new PsoStructureEntryInfo((MetaName)1984559896, PsoDataType.Float, 116, 0, 0) + ); + case MetaName.CTaskHumanLocomotion__Tunables: + return new PsoStructureInfo(MetaName.CTaskHumanLocomotion__Tunables, 0, 0, 864, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3782895898, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1302286994, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2741511192, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3394605993, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)971520507, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1182689916, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)806948898, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)3959772122, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)843042981, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2165656152, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)684879272, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)956068907, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)997046562, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)183241195, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)1662197919, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)985371239, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)2545261234, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)1926561545, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)639925745, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)1990190949, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2557519583), + new PsoStructureEntryInfo((MetaName)2593822105, PsoDataType.Array, 96, 4, (MetaName)196629) + ); + case (MetaName)2557519583: + return new PsoStructureInfo((MetaName)2557519583, 0, 0, 256, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.Standard, PsoDataType.Structure, 16, 0, (MetaName)1246324819), + new PsoStructureEntryInfo((MetaName)1367672446, PsoDataType.Structure, 96, 0, (MetaName)1246324819), + new PsoStructureEntryInfo((MetaName)2775606479, PsoDataType.Structure, 176, 0, (MetaName)1246324819) + ); + case (MetaName)1246324819: + return new PsoStructureInfo((MetaName)1246324819, 0, 0, 80, + new PsoStructureEntryInfo((MetaName)3163856764, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)916804787, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2151433465, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2584063876, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2229072832, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)4203477475, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1021183862, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)817979133, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)4229364158, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)4209639571, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)206173392, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)243413468, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3031402448, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3334261987, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2979286721, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)2172130562, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)3423772986, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)1171907848, PsoDataType.Bool, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)26697373, PsoDataType.Bool, 77, 0, 0) + ); + case MetaName.CTaskMotionTennis__Tunables: + return new PsoStructureInfo(MetaName.CTaskMotionTennis__Tunables, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2509399696, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1204182041, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1932572913, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2769179410, PsoDataType.Float, 28, 0, 0) + ); + case MetaName.CTaskQuadLocomotion__Tunables: + return new PsoStructureInfo(MetaName.CTaskQuadLocomotion__Tunables, 0, 0, 184, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3129761256, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1268028398, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3543637314, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)246989054, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2582103758, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1722856329, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3054410305, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)891286257, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)3646294886, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2324978953, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)545188344, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3696984410, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)892232162, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)3661307080, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)1148310117, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)3928052593, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)305608474, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)3939547333, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)2123652996, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)484878979, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)3846215494, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)1243932439, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)562952832, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)1266064609, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)1010088937, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)3914009351, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)1107407285, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)265096732, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)1913804545, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)326250284, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)3846643666, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)2496636494, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)792142948, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)2508724347, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo((MetaName)3764305197, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)577153356, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)1520516679, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)2282663253, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo((MetaName)1345455105, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo((MetaName)951644869, PsoDataType.String, 172, 7, 0), + new PsoStructureEntryInfo((MetaName)3492404675, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo((MetaName)3330274310, PsoDataType.Float, 180, 0, 0) + ); + case MetaName.CEventPotentialBeWalkedInto__Tunables: + return new PsoStructureInfo(MetaName.CEventPotentialBeWalkedInto__Tunables, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3702961077, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3689187240, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1651660816, PsoDataType.Float, 24, 0, 0) + ); + case MetaName.CEventPotentialGetRunOver__Tunables: + return new PsoStructureInfo(MetaName.CEventPotentialGetRunOver__Tunables, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)152364693, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2913264363, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)4063222790, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3174431501, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)4246045187, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3403479156, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)509314747, PsoDataType.Float, 40, 0, 0) + ); + case MetaName.CEventPotentialBlast__Tunables: + return new PsoStructureInfo(MetaName.CEventPotentialBlast__Tunables, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0) + ); + case MetaName.CTaskComplexEvasiveStep__Tunables: + return new PsoStructureInfo(MetaName.CTaskComplexEvasiveStep__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.BlendOutDelta, PsoDataType.Float, 16, 0, 0) + ); + case MetaName.CTaskFall__Tunables: + return new PsoStructureInfo(MetaName.CTaskFall__Tunables, 0, 0, 176, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)187177991, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)696030652, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)934569024, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1694135928, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1425777632, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3844027585, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3197570465, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)391736247, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2495576534, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)712615227, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)1308347600, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)2498638030, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)1347777197, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)176941965, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)2788362157, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)4199432698, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)2760872373, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)1208994934, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)2222398831, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)2333975606, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)3639487949, PsoDataType.UInt, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)2836403845, PsoDataType.UInt, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)2719065213, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)358840176, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)1723088470, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)793837940, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)1882364948, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)3177202947, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)145933303, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)4164582757, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)2538011040, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)2847920310, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)3337751765, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)3897556344, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo((MetaName)4229439207, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)2581310221, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)3807299066, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)2776570354, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo((MetaName)4036569890, PsoDataType.Float, 168, 0, 0) + ); + case MetaName.CTaskFlyToPoint__Tunables: + return new PsoStructureInfo(MetaName.CTaskFlyToPoint__Tunables, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1983182002, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)552115106, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3968352519, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)4040142753, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)530164593, PsoDataType.Float, 32, 0, 0) + ); + case MetaName.CTaskGetUp__Tunables: + return new PsoStructureInfo(MetaName.CTaskGetUp__Tunables, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1193017389, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)461478411, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)266220607, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)4255515242, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)992799658, PsoDataType.Bool, 29, 0, 0), + new PsoStructureEntryInfo((MetaName)2093200171, PsoDataType.SInt, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1512271781, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)866980885, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1887702115, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)3215816764, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1412213192, PsoDataType.SInt, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)123069407, PsoDataType.SInt, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)774340160, PsoDataType.SInt, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)4110175468, PsoDataType.SInt, 64, 0, 0) + ); + case MetaName.CTaskGoToScenario__Tunables: + return new PsoStructureInfo(MetaName.CTaskGoToScenario__Tunables, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2832422495, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2874710517, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1440906110, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)126173811, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2433763429, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2212250161, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1732510557, PsoDataType.Float, 40, 0, 0) + ); + case MetaName.CTaskMoveToTacticalPoint__Tunables: + return new PsoStructureInfo(MetaName.CTaskMoveToTacticalPoint__Tunables, 0, 0, 224, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3333387022, PsoDataType.Structure, 16, 0, (MetaName)2164459263), + new PsoStructureEntryInfo((MetaName)4292170157, PsoDataType.Float, 208, 0, 0), + new PsoStructureEntryInfo((MetaName)331709996, PsoDataType.Float, 212, 0, 0), + new PsoStructureEntryInfo((MetaName)2494967040, PsoDataType.Float, 216, 0, 0), + new PsoStructureEntryInfo((MetaName)847783567, PsoDataType.Float, 220, 0, 0) + ); + case (MetaName)2164459263: + return new PsoStructureInfo((MetaName)2164459263, 0, 0, 192, + new PsoStructureEntryInfo((MetaName)2523520621, PsoDataType.Structure, 8, 0, (MetaName)3018405043), + new PsoStructureEntryInfo((MetaName)680699981, PsoDataType.Structure, 88, 0, (MetaName)1211016943), + new PsoStructureEntryInfo(MetaName.Position, PsoDataType.Structure, 160, 0, (MetaName)3791189200) + ); + case (MetaName)3018405043: + return new PsoStructureInfo((MetaName)3018405043, 0, 0, 80, + new PsoStructureEntryInfo((MetaName)212355988, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2733810571, PsoDataType.Structure, 16, 0, (MetaName)1890577968), + new PsoStructureEntryInfo((MetaName)581818714, PsoDataType.Structure, 32, 0, (MetaName)3436208238) + ); + case (MetaName)1890577968: + return new PsoStructureInfo((MetaName)1890577968, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)2479092473, PsoDataType.Float, 8, 0, 0) + ); + case (MetaName)3436208238: + return new PsoStructureInfo((MetaName)3436208238, 0, 0, 48, + new PsoStructureEntryInfo((MetaName)1572599387, PsoDataType.Structure, 8, 0, (MetaName)532562236), + new PsoStructureEntryInfo((MetaName)1995960590, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2250254670, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3709090817, PsoDataType.Float, 40, 0, 0) + ); + case (MetaName)532562236: + return new PsoStructureInfo((MetaName)532562236, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)2828335077, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1433159873, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.Min, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.Max, PsoDataType.Float, 20, 0, 0) + ); + case (MetaName)1211016943: + return new PsoStructureInfo((MetaName)1211016943, 0, 0, 72, + new PsoStructureEntryInfo((MetaName)212355988, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2733810571, PsoDataType.Structure, 16, 0, (MetaName)1762528765), + new PsoStructureEntryInfo((MetaName)581818714, PsoDataType.Structure, 32, 0, (MetaName)2194913513) + ); + case (MetaName)1762528765: + return new PsoStructureInfo((MetaName)1762528765, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)2479092473, PsoDataType.Float, 8, 0, 0) + ); + case (MetaName)2194913513: + return new PsoStructureInfo((MetaName)2194913513, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)1572599387, PsoDataType.Structure, 8, 0, (MetaName)333617339), + new PsoStructureEntryInfo((MetaName)2250254670, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3709090817, PsoDataType.Float, 36, 0, 0) + ); + case (MetaName)333617339: + return new PsoStructureInfo((MetaName)333617339, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)2828335077, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1433159873, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.Min, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.Max, PsoDataType.Float, 20, 0, 0) + ); + case (MetaName)3791189200: + return new PsoStructureInfo((MetaName)3791189200, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)1011332177, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2889265507, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)1140912184, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2733041160, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)502596100, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)744506381, PsoDataType.Float, 28, 0, 0) + ); + case MetaName.CTaskMoveCrossRoadAtTrafficLights__Tunables: + return new PsoStructureInfo(MetaName.CTaskMoveCrossRoadAtTrafficLights__Tunables, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)956704533, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)645072887), + new PsoStructureEntryInfo((MetaName)2967055211, PsoDataType.Array, 24, 0, (MetaName)2), + new PsoStructureEntryInfo((MetaName)3623500230, PsoDataType.UInt, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)398266299, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)1248305822, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2115554015, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)2354781986, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)1991353814, PsoDataType.Bool, 60, 0, 0) + ); + case (MetaName)645072887: + return new PsoStructureInfo((MetaName)645072887, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)4135922358, PsoDataType.Float3, 16, 0, 0) + ); + case MetaName.CTaskMoveWithinAttackWindow__Tunables: + return new PsoStructureInfo(MetaName.CTaskMoveWithinAttackWindow__Tunables, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3595841120, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1154727971, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1305363589, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3574291632, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)685847089, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1415555709, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)328649625, PsoDataType.Float, 40, 0, 0) + ); + case MetaName.CTaskMoveFollowNavMesh__Tunables: + return new PsoStructureInfo(MetaName.CTaskMoveFollowNavMesh__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3188916891, PsoDataType.UByte, 16, 0, 0) + ); + case MetaName.CTaskParachute__Tunables: + return new PsoStructureInfo(MetaName.CTaskParachute__Tunables, 0, 0, 1312, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)143335713, PsoDataType.Structure, 16, 0, (MetaName)2342773550), + new PsoStructureEntryInfo((MetaName)2700491627, PsoDataType.Structure, 40, 0, (MetaName)1918103038), + new PsoStructureEntryInfo((MetaName)4264481693, PsoDataType.Structure, 64, 0, (MetaName)3788337195), + new PsoStructureEntryInfo((MetaName)960147082, PsoDataType.Structure, 96, 0, (MetaName)4209854321), + new PsoStructureEntryInfo((MetaName)2890662262, PsoDataType.Structure, 144, 0, (MetaName)4209854321), + new PsoStructureEntryInfo((MetaName)2243095299, PsoDataType.Structure, 192, 0, (MetaName)3009185102), + new PsoStructureEntryInfo((MetaName)1126598037, PsoDataType.Structure, 208, 0, (MetaName)560894723), + new PsoStructureEntryInfo((MetaName)590082074, PsoDataType.Structure, 264, 0, (MetaName)2934924657), + new PsoStructureEntryInfo((MetaName)3248104514, PsoDataType.Structure, 280, 0, (MetaName)2046463254), + new PsoStructureEntryInfo((MetaName)1163966079, PsoDataType.Structure, 464, 0, (MetaName)2206940602), + new PsoStructureEntryInfo((MetaName)3151745571, PsoDataType.Structure, 552, 0, (MetaName)954219518), + new PsoStructureEntryInfo(MetaName.Allow, PsoDataType.Structure, 592, 0, (MetaName)202257215), + new PsoStructureEntryInfo((MetaName)3095142060, PsoDataType.Structure, 616, 0, (MetaName)892940524), + new PsoStructureEntryInfo((MetaName)3256630458, PsoDataType.Structure, 640, 0, (MetaName)3266862316), + new PsoStructureEntryInfo((MetaName)1349337627, PsoDataType.Structure, 656, 0, (MetaName)889782022), + new PsoStructureEntryInfo((MetaName)67050499, PsoDataType.Structure, 1008, 0, (MetaName)629460530), + new PsoStructureEntryInfo((MetaName)3357299335, PsoDataType.Structure, 1024, 0, (MetaName)196547756), + new PsoStructureEntryInfo((MetaName)3328657748, PsoDataType.Structure, 1040, 0, (MetaName)1078023650), + new PsoStructureEntryInfo((MetaName)3260617242, PsoDataType.Structure, 1144, 0, (MetaName)2787675897), + new PsoStructureEntryInfo((MetaName)2667671232, PsoDataType.Structure, 1160, 0, (MetaName)947557087), + new PsoStructureEntryInfo((MetaName)3149009694, PsoDataType.Float, 1216, 0, 0), + new PsoStructureEntryInfo((MetaName)4258663913, PsoDataType.Float, 1220, 0, 0), + new PsoStructureEntryInfo((MetaName)950864184, PsoDataType.Float, 1224, 0, 0), + new PsoStructureEntryInfo((MetaName)119610653, PsoDataType.Float, 1228, 0, 0), + new PsoStructureEntryInfo((MetaName)2724758116, PsoDataType.Float, 1232, 0, 0), + new PsoStructureEntryInfo((MetaName)3041351606, PsoDataType.Float, 1236, 0, 0), + new PsoStructureEntryInfo((MetaName)135326749, PsoDataType.Float, 1240, 0, 0), + new PsoStructureEntryInfo((MetaName)332728501, PsoDataType.Float, 1244, 0, 0), + new PsoStructureEntryInfo((MetaName)3323891652, PsoDataType.Float, 1248, 0, 0), + new PsoStructureEntryInfo((MetaName)4131153122, PsoDataType.Float, 1252, 0, 0), + new PsoStructureEntryInfo((MetaName)3018517000, PsoDataType.Float, 1256, 0, 0), + new PsoStructureEntryInfo((MetaName)2027520168, PsoDataType.Float, 1260, 0, 0), + new PsoStructureEntryInfo((MetaName)87152394, PsoDataType.Float, 1264, 0, 0), + new PsoStructureEntryInfo((MetaName)1753140963, PsoDataType.String, 1268, 7, 0), + new PsoStructureEntryInfo((MetaName)745109363, PsoDataType.String, 1272, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)974228846), + new PsoStructureEntryInfo((MetaName)1735940634, PsoDataType.Array, 1280, 0, (MetaName)36), + new PsoStructureEntryInfo(MetaName.FirstPersonDriveByIKOffset, PsoDataType.Float3, 1296, 0, 0) + ); + case (MetaName)2342773550: + return new PsoStructureInfo((MetaName)2342773550, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Pitch, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.Roll, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2514469802, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.Heading, PsoDataType.Float, 20, 0, 0) + ); + case (MetaName)1918103038: + return new PsoStructureInfo((MetaName)1918103038, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Pitch, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.Roll, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2514469802, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3493497994, PsoDataType.Float, 20, 0, 0) + ); + case (MetaName)3788337195: + return new PsoStructureInfo((MetaName)3788337195, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)509392339, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1035721466, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)4261179401, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1361361101, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2297479061, PsoDataType.Float, 24, 0, 0) + ); + case (MetaName)4209854321: + return new PsoStructureInfo((MetaName)4209854321, 0, 0, 48, + new PsoStructureEntryInfo((MetaName)509392339, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)4261179401, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)4013155074, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2707471304, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1361361101, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)430837016, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)494928189, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1128820245, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1251049479, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2297479061, PsoDataType.Float, 44, 0, 0) + ); + case (MetaName)3009185102: + return new PsoStructureInfo((MetaName)3009185102, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)509392339, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)4261179401, PsoDataType.Float, 12, 0, 0) + ); + case (MetaName)560894723: + return new PsoStructureInfo((MetaName)560894723, 0, 0, 56, + new PsoStructureEntryInfo((MetaName)2611998079, PsoDataType.Structure, 8, 0, (MetaName)801836577) + ); + case (MetaName)801836577: + return new PsoStructureInfo((MetaName)801836577, 0, 0, 48, + new PsoStructureEntryInfo((MetaName)78660797, PsoDataType.Structure, 8, 0, (MetaName)2238420428), + new PsoStructureEntryInfo((MetaName)1228835903, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1610340719, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)888388965, PsoDataType.Float, 40, 0, 0) + ); + case (MetaName)2238420428: + return new PsoStructureInfo((MetaName)2238420428, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)1871798248, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1965746967, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)4050970672, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)413002367, PsoDataType.Float, 20, 0, 0) + ); + case (MetaName)2934924657: + return new PsoStructureInfo((MetaName)2934924657, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)3597427549, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)489565795, PsoDataType.Float, 12, 0, 0) + ); + case (MetaName)2046463254: + return new PsoStructureInfo((MetaName)2046463254, 0, 0, 184, + new PsoStructureEntryInfo(MetaName.Target, PsoDataType.Structure, 8, 0, (MetaName)4228543633), + new PsoStructureEntryInfo((MetaName)3493497994, PsoDataType.Structure, 24, 0, (MetaName)1021020250), + new PsoStructureEntryInfo((MetaName)3016943843, PsoDataType.Structure, 56, 0, (MetaName)1305267132), + new PsoStructureEntryInfo((MetaName)3154540810, PsoDataType.Structure, 80, 0, (MetaName)1305267132), + new PsoStructureEntryInfo((MetaName)2757465295, PsoDataType.Structure, 104, 0, (MetaName)2131363216), + new PsoStructureEntryInfo((MetaName)2154895854, PsoDataType.Structure, 128, 0, (MetaName)2131363216), + new PsoStructureEntryInfo((MetaName)2901180925, PsoDataType.Structure, 152, 0, (MetaName)209420440) + ); + case (MetaName)4228543633: + return new PsoStructureInfo((MetaName)4228543633, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)4143621306, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1514279376, PsoDataType.Float, 12, 0, 0) + ); + case (MetaName)1021020250: + return new PsoStructureInfo((MetaName)1021020250, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.MaxDistance, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)64309451, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3884700100, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)485092302, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)760576493, PsoDataType.Float, 24, 0, 0) + ); + case (MetaName)1305267132: + return new PsoStructureInfo((MetaName)1305267132, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)3784903261, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2207962562, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)1576728196, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2536907014, PsoDataType.Float, 20, 0, 0) + ); + case (MetaName)2131363216: + return new PsoStructureInfo((MetaName)2131363216, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)2923527027, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2339537570, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)1936752322, PsoDataType.Float, 16, 0, 0) + ); + case (MetaName)209420440: + return new PsoStructureInfo((MetaName)209420440, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.MinDistance, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistance, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)1206332797, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)4276410337, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3500436404, PsoDataType.Float, 24, 0, 0) + ); + case (MetaName)2206940602: + return new PsoStructureInfo((MetaName)2206940602, 0, 0, 88, + new PsoStructureEntryInfo((MetaName)3543710223, PsoDataType.Structure, 8, 0, (MetaName)3954319942), + new PsoStructureEntryInfo((MetaName)2650334467, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2876804674, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)4118156471, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)2039762038, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)1260903928, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)4197363947, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)2103581552, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)1293732320, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)3113590399, PsoDataType.Float, 80, 0, 0) + ); + case (MetaName)3954319942: + return new PsoStructureInfo((MetaName)3954319942, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Normal, PsoDataType.Structure, 8, 0, (MetaName)1558938460), + new PsoStructureEntryInfo((MetaName)3150145630, PsoDataType.Structure, 24, 0, (MetaName)1558938460) + ); + case (MetaName)1558938460: + return new PsoStructureInfo((MetaName)1558938460, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.Forward, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2519270732, PsoDataType.Float, 12, 0, 0) + ); + case (MetaName)954219518: + return new PsoStructureInfo((MetaName)954219518, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)336137001, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1928060490, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)4262842160, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2440882257, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)4118156471, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)739494681, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1260903928, PsoDataType.Float, 32, 0, 0) + ); + case (MetaName)202257215: + return new PsoStructureInfo((MetaName)202257215, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)3563387020, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1694228856, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3903892409, PsoDataType.Float, 16, 0, 0) + ); + case (MetaName)892940524: + return new PsoStructureInfo((MetaName)892940524, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)365994391, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3869597064, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo((MetaName)2309595247, PsoDataType.String, 16, 7, 0) + ); + case (MetaName)3266862316: + return new PsoStructureInfo((MetaName)3266862316, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)1202762864, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)904794347, PsoDataType.Float, 12, 0, 0) + ); + case (MetaName)889782022: + return new PsoStructureInfo((MetaName)889782022, 0, 0, 352, + new PsoStructureEntryInfo((MetaName)2611998079, PsoDataType.Structure, 8, 0, (MetaName)1386112053) + ); + case (MetaName)1386112053: + return new PsoStructureInfo((MetaName)1386112053, 0, 0, 344, + new PsoStructureEntryInfo(MetaName.Normal, PsoDataType.Structure, 8, 0, (MetaName)899207522), + new PsoStructureEntryInfo((MetaName)3150145630, PsoDataType.Structure, 224, 0, (MetaName)3310740500) + ); + case (MetaName)899207522: + return new PsoStructureInfo((MetaName)899207522, 0, 0, 216, + new PsoStructureEntryInfo((MetaName)914788843, PsoDataType.Structure, 8, 0, (MetaName)3387028743), + new PsoStructureEntryInfo((MetaName)320841962, PsoDataType.Structure, 120, 0, (MetaName)3597070589) + ); + case (MetaName)3387028743: + return new PsoStructureInfo((MetaName)3387028743, 0, 0, 112, + new PsoStructureEntryInfo((MetaName)3814756382, PsoDataType.Structure, 8, 0, (MetaName)3597070589), + new PsoStructureEntryInfo((MetaName)2547715741, PsoDataType.Bool, 104, 0, 0) + ); + case (MetaName)3597070589: + return new PsoStructureInfo((MetaName)3597070589, 0, 0, 96, + new PsoStructureEntryInfo((MetaName)2828335077, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1433159873, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)324547252, PsoDataType.Structure, 16, 0, (MetaName)162458425), + new PsoStructureEntryInfo((MetaName)1611654117, PsoDataType.Structure, 40, 0, (MetaName)162458425), + new PsoStructureEntryInfo((MetaName)3107625217, PsoDataType.Structure, 64, 0, (MetaName)162458425), + new PsoStructureEntryInfo((MetaName)3419197588, PsoDataType.Bool, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)2795607090, PsoDataType.Bool, 89, 0, 0) + ); + case (MetaName)162458425: + return new PsoStructureInfo((MetaName)162458425, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.X, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.Y, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.Z, PsoDataType.Float, 16, 0, 0) + ); + case (MetaName)3310740500: + return new PsoStructureInfo((MetaName)3310740500, 0, 0, 120, + new PsoStructureEntryInfo((MetaName)914788843, PsoDataType.Structure, 8, 0, (MetaName)3387028743) + ); + case (MetaName)629460530: + return new PsoStructureInfo((MetaName)629460530, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)731090194, PsoDataType.Bool, 9, 0, 0), + new PsoStructureEntryInfo((MetaName)1879187973, PsoDataType.Bool, 10, 0, 0) + ); + case (MetaName)196547756: + return new PsoStructureInfo((MetaName)196547756, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.MinDistance, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)715231316, PsoDataType.Bool, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2562048776, PsoDataType.Bool, 13, 0, 0) + ); + case (MetaName)1078023650: + return new PsoStructureInfo((MetaName)1078023650, 0, 0, 104, + new PsoStructureEntryInfo((MetaName)102733762, PsoDataType.Structure, 8, 0, (MetaName)2874150626), + new PsoStructureEntryInfo((MetaName)2936843542, PsoDataType.Structure, 32, 0, (MetaName)2874150626), + new PsoStructureEntryInfo((MetaName)2742077142, PsoDataType.Structure, 56, 0, (MetaName)2874150626), + new PsoStructureEntryInfo((MetaName)2577801154, PsoDataType.Structure, 80, 0, (MetaName)2874150626) + ); + case (MetaName)2874150626: + return new PsoStructureInfo((MetaName)2874150626, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.X, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.Y, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.Z, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3610904814, PsoDataType.Bool, 20, 0, 0) + ); + case (MetaName)2787675897: + return new PsoStructureInfo((MetaName)2787675897, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.Disabled, PsoDataType.Bool, 8, 0, 0) + ); + case (MetaName)947557087: + return new PsoStructureInfo((MetaName)947557087, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.Falling, PsoDataType.Structure, 8, 0, (MetaName)3452040071), + new PsoStructureEntryInfo((MetaName)325816429, PsoDataType.Structure, 40, 0, (MetaName)2930279050) + ); + case (MetaName)3452040071: + return new PsoStructureInfo((MetaName)3452040071, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Duration, PsoDataType.UInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)4133137923, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2952102575, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1509127932, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1137728512, PsoDataType.Float, 24, 0, 0) + ); + case (MetaName)2930279050: + return new PsoStructureInfo((MetaName)2930279050, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.Duration, PsoDataType.UInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.Intensity, PsoDataType.Float, 12, 0, 0) + ); + case (MetaName)974228846: + return new PsoStructureInfo((MetaName)974228846, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.ModelName, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1192596872), + new PsoStructureEntryInfo(MetaName.Variations, PsoDataType.Array, 16, 0, (MetaName)1) + ); + case (MetaName)1192596872: + return new PsoStructureInfo((MetaName)1192596872, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3788247444), + new PsoStructureEntryInfo((MetaName)4006165571, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2636443310, PsoDataType.Structure, 24, 0, (MetaName)3901274641) + ); + case (MetaName)3901274641: + return new PsoStructureInfo((MetaName)3901274641, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Component, PsoDataType.Enum, 8, 0, (MetaName)884254308), + new PsoStructureEntryInfo(MetaName.DrawableId, PsoDataType.UInt, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3029420796, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1424942312, PsoDataType.UInt, 20, 0, 0) + ); + case (MetaName)3788247444: + return new PsoStructureInfo((MetaName)3788247444, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Component, PsoDataType.Enum, 8, 0, (MetaName)884254308), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UInt, 0, 0, 0), + new PsoStructureEntryInfo((MetaName)4176789291, PsoDataType.Array, 16, 0, (MetaName)1) + ); + case MetaName.CTaskParachuteObject__Tunables: + return new PsoStructureInfo(MetaName.CTaskParachuteObject__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1259738869, PsoDataType.Float, 16, 0, 0) + ); + case MetaName.CTaskTakeOffPedVariation__Tunables: + return new PsoStructureInfo(MetaName.CTaskTakeOffPedVariation__Tunables, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0) + ); + case MetaName.CTaskHeliPassengerRappel__Tunables: + return new PsoStructureInfo(MetaName.CTaskHeliPassengerRappel__Tunables, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1491518630, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2199025334, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2768160631, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1487680899, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2804961359, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2890096206, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)2869375884, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)210693397, PsoDataType.Float, 44, 0, 0) + ); + case MetaName.CTaskRappel__Tunables: + return new PsoStructureInfo(MetaName.CTaskRappel__Tunables, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)564993371, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1357105096, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3670878450, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2330528087, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3096283176, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)425134671, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1851998260, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2105176291, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)3567409373, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2130522201, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)1608634776, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)4109388444, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2841425601, PsoDataType.Bool, 64, 0, 0) + ); + case MetaName.CTaskVault__Tunables: + return new PsoStructureInfo(MetaName.CTaskVault__Tunables, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3158074083, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2856025533, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)360286196, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2762624828, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1893591066, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)4171416824, PsoDataType.Float, 36, 0, 0) + ); + case MetaName.CTaskJump__Tunables: + return new PsoStructureInfo(MetaName.CTaskJump__Tunables, 0, 0, 104, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)4057741743, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)988692459, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3568425813, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1477129396, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)910411457, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2289178459, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1943815238, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)3965084574, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)1258832245, PsoDataType.Bool, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)3734083336, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)787384491, PsoDataType.Bool, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)1816652759, PsoDataType.Bool, 57, 0, 0), + new PsoStructureEntryInfo((MetaName)69785967, PsoDataType.Bool, 58, 0, 0), + new PsoStructureEntryInfo((MetaName)1351443366, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)3163116709, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)2158524964, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)1609589815, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)2469517273, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)1011217048, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)1107591412, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)3462282137, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)1048227809, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)503191318, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)2170844885, PsoDataType.Float, 100, 0, 0) + ); + case MetaName.CPedTargetEvaluator__Tunables: + return new PsoStructureInfo(MetaName.CPedTargetEvaluator__Tunables, 0, 0, 232, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3817163838, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2076997846, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)908567944, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2485794835, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)118717170, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2082223604, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3338545377, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)3532059041, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)3833299605, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1974328161, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)2675889779, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)2608892368, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2159755352, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)3188195832, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)2452287190, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)3537128593, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)2861651580, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)354050193, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)2239503730, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)1168690220, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)1044442786, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)647449150, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)521885682, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)3895688789, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)2061852453, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)762484474, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)1964865895, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)1986201193, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)1053617936, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)2219818555, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)3520267510, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)3711072717, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)2459910426, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)1405902341, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo((MetaName)1975453329, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)3770142196, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)1432381156, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)4259971013, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo((MetaName)2260731941, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo((MetaName)3977716086, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo((MetaName)318279589, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo((MetaName)4286470540, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo((MetaName)1298342428, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo((MetaName)379592677, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo((MetaName)2894102221, PsoDataType.UInt, 192, 0, 0), + new PsoStructureEntryInfo((MetaName)780951691, PsoDataType.Float, 196, 0, 0), + new PsoStructureEntryInfo((MetaName)2509546906, PsoDataType.Float, 200, 0, 0), + new PsoStructureEntryInfo((MetaName)655402948, PsoDataType.Float, 204, 0, 0), + new PsoStructureEntryInfo((MetaName)155512302, PsoDataType.Float, 208, 0, 0), + new PsoStructureEntryInfo((MetaName)680689338, PsoDataType.Float, 212, 0, 0), + new PsoStructureEntryInfo((MetaName)2979929207, PsoDataType.UInt, 216, 0, 0), + new PsoStructureEntryInfo((MetaName)3508597107, PsoDataType.UInt, 220, 0, 0), + new PsoStructureEntryInfo((MetaName)2400008353, PsoDataType.Bool, 224, 0, 0), + new PsoStructureEntryInfo((MetaName)1169108573, PsoDataType.Bool, 225, 0, 0), + new PsoStructureEntryInfo((MetaName)4090546975, PsoDataType.Bool, 226, 0, 0), + new PsoStructureEntryInfo((MetaName)1619169047, PsoDataType.Bool, 227, 0, 0), + new PsoStructureEntryInfo((MetaName)3603478229, PsoDataType.Bool, 228, 0, 0) + ); + case MetaName.CGrabHelper__Tunables: + return new PsoStructureInfo(MetaName.CGrabHelper__Tunables, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.Sets, PsoDataType.Structure, 16, 0, (MetaName)2070432509) + ); + case (MetaName)2070432509: + return new PsoStructureInfo((MetaName)2070432509, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.sets, PsoDataType.Map, 8, 1, (MetaName)1) + ); + case MetaName.CNmTuningSet: + return new PsoStructureInfo(MetaName.CNmTuningSet, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Id, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.Priority, PsoDataType.SInt, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo((MetaName)605698999, PsoDataType.Array, 24, 0, (MetaName)3) + ); + case MetaName.CNmMessage: + return new PsoStructureInfo(MetaName.CNmMessage, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 8, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo((MetaName)1933425356, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo((MetaName)3330375348, PsoDataType.Bool, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)191752587, PsoDataType.Bool, 33, 0, 0) + ); + case MetaName.CNmParameterBool: + return new PsoStructureInfo(MetaName.CNmParameterBool, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 8, 0), + new PsoStructureEntryInfo(MetaName.Value, PsoDataType.Bool, 16, 0, 0) + ); + case MetaName.CNmParameterFloat: + return new PsoStructureInfo(MetaName.CNmParameterFloat, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 8, 0), + new PsoStructureEntryInfo(MetaName.Value, PsoDataType.Float, 16, 0, 0) + ); + case MetaName.CNmParameterRandomFloat: + return new PsoStructureInfo(MetaName.CNmParameterRandomFloat, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 8, 0), + new PsoStructureEntryInfo(MetaName.Min, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.Max, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.CNmParameterInt: + return new PsoStructureInfo(MetaName.CNmParameterInt, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 8, 0), + new PsoStructureEntryInfo(MetaName.Value, PsoDataType.SInt, 16, 0, 0) + ); + case MetaName.CTaskNMControl__Tunables: + return new PsoStructureInfo(MetaName.CTaskNMControl__Tunables, 0, 0, 128, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1589180219, PsoDataType.Structure, 16, 0, (MetaName)3336326859), + new PsoStructureEntryInfo((MetaName)609938430, PsoDataType.Structure, 48, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)553250717, PsoDataType.Structure, 88, 0, MetaName.CNmTuningSet) + ); + case (MetaName)3336326859: + return new PsoStructureInfo((MetaName)3336326859, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)2492839498, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)3256506769, PsoDataType.Bool, 9, 0, 0), + new PsoStructureEntryInfo((MetaName)2018281497, PsoDataType.Bool, 10, 0, 0), + new PsoStructureEntryInfo((MetaName)1280594926, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSpeed, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2171339313, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)219280121, PsoDataType.UInt, 24, 0, 0) + ); + case MetaName.CNmParameterString: + return new PsoStructureInfo(MetaName.CNmParameterString, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 8, 0), + new PsoStructureEntryInfo(MetaName.Value, PsoDataType.String, 16, 8, 0) + ); + case MetaName.CTaskNMBehaviour__Tunables: + return new PsoStructureInfo(MetaName.CTaskNMBehaviour__Tunables, 0, 0, 936, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)325894988, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1794949754, PsoDataType.SInt, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2482945086, PsoDataType.SInt, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2584307454, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)503115024, PsoDataType.Bool, 29, 0, 0), + new PsoStructureEntryInfo((MetaName)3172335713, PsoDataType.SInt, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1068424255, PsoDataType.SInt, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)75381461, PsoDataType.Bool, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)83217879, PsoDataType.Bool, 41, 0, 0), + new PsoStructureEntryInfo((MetaName)2870540718, PsoDataType.Bool, 42, 0, 0), + new PsoStructureEntryInfo((MetaName)89764064, PsoDataType.Bool, 43, 0, 0), + new PsoStructureEntryInfo((MetaName)1435456656, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)3639122208, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1934953324, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)2370073816, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3827728081, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)3990938220, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)2851995582, PsoDataType.Structure, 72, 0, (MetaName)3979439077), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)4115910995), + new PsoStructureEntryInfo((MetaName)1291841671, PsoDataType.Array, 176, 0, MetaName.USHORT), + new PsoStructureEntryInfo((MetaName)1742296994, PsoDataType.Structure, 192, 0, (MetaName)2720813484), + new PsoStructureEntryInfo((MetaName)755518553, PsoDataType.Structure, 272, 0, (MetaName)2720813484), + new PsoStructureEntryInfo((MetaName)3611321062, PsoDataType.Float, 352, 0, 0), + new PsoStructureEntryInfo((MetaName)1036094636, PsoDataType.Float, 356, 0, 0), + new PsoStructureEntryInfo((MetaName)2745991583, PsoDataType.Float, 360, 0, 0), + new PsoStructureEntryInfo((MetaName)2007819517, PsoDataType.Float, 364, 0, 0), + new PsoStructureEntryInfo((MetaName)3476926475, PsoDataType.Float, 368, 0, 0), + new PsoStructureEntryInfo((MetaName)1115174900, PsoDataType.Float, 372, 0, 0), + new PsoStructureEntryInfo((MetaName)4064358618, PsoDataType.Float, 376, 0, 0), + new PsoStructureEntryInfo((MetaName)4163982628, PsoDataType.Float, 380, 0, 0), + new PsoStructureEntryInfo((MetaName)999125689, PsoDataType.Float, 384, 0, 0), + new PsoStructureEntryInfo((MetaName)2568028856, PsoDataType.Float, 388, 0, 0), + new PsoStructureEntryInfo((MetaName)1493712076, PsoDataType.Float, 392, 0, 0), + new PsoStructureEntryInfo((MetaName)3804386946, PsoDataType.Float, 396, 0, 0), + new PsoStructureEntryInfo((MetaName)3383227946, PsoDataType.Float, 400, 0, 0), + new PsoStructureEntryInfo((MetaName)3356594861, PsoDataType.Float, 404, 0, 0), + new PsoStructureEntryInfo((MetaName)1953114585, PsoDataType.Float, 408, 0, 0), + new PsoStructureEntryInfo((MetaName)1598687789, PsoDataType.Float, 412, 0, 0), + new PsoStructureEntryInfo((MetaName)2070345117, PsoDataType.Float, 416, 0, 0), + new PsoStructureEntryInfo((MetaName)1538253009, PsoDataType.Float, 420, 0, 0), + new PsoStructureEntryInfo((MetaName)2575088986, PsoDataType.Float, 424, 0, 0), + new PsoStructureEntryInfo((MetaName)1027107196, PsoDataType.Float, 428, 0, 0), + new PsoStructureEntryInfo((MetaName)2815969152, PsoDataType.Float, 432, 0, 0), + new PsoStructureEntryInfo((MetaName)1298279329, PsoDataType.Float, 436, 0, 0), + new PsoStructureEntryInfo((MetaName)4060868299, PsoDataType.Bool, 440, 0, 0), + new PsoStructureEntryInfo((MetaName)3758147000, PsoDataType.Float, 444, 0, 0), + new PsoStructureEntryInfo((MetaName)602234407, PsoDataType.Float, 448, 0, 0), + new PsoStructureEntryInfo((MetaName)116532981, PsoDataType.Float, 452, 0, 0), + new PsoStructureEntryInfo((MetaName)2253067348, PsoDataType.SInt, 456, 0, 0), + new PsoStructureEntryInfo((MetaName)3679622218, PsoDataType.Float, 460, 0, 0), + new PsoStructureEntryInfo((MetaName)1360661757, PsoDataType.Float, 464, 0, 0), + new PsoStructureEntryInfo((MetaName)2482984819, PsoDataType.Structure, 472, 0, (MetaName)3979439077), + new PsoStructureEntryInfo(MetaName.Start, PsoDataType.Structure, 576, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)2265693971, PsoDataType.Structure, 616, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)1916209420, PsoDataType.Structure, 656, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)1043632907, PsoDataType.Structure, 696, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3798182907, PsoDataType.Structure, 736, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)2725274669, PsoDataType.Structure, 776, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)569763335, PsoDataType.Structure, 816, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)2982454130, PsoDataType.Structure, 856, 0, (MetaName)267001783), + new PsoStructureEntryInfo((MetaName)1543515715, PsoDataType.Structure, 880, 0, (MetaName)2578171686), + new PsoStructureEntryInfo((MetaName)1834701470, PsoDataType.Structure, 896, 0, (MetaName)1040069698) + ); + case (MetaName)3979439077: + return new PsoStructureInfo((MetaName)3979439077, 0, 0, 104, + new PsoStructureEntryInfo((MetaName)237851371, PsoDataType.Structure, 8, 0, (MetaName)3749122641), + new PsoStructureEntryInfo(MetaName.Player, PsoDataType.Structure, 40, 0, (MetaName)3749122641), + new PsoStructureEntryInfo((MetaName)410406055, PsoDataType.Structure, 72, 0, (MetaName)3749122641) + ); + case (MetaName)3749122641: + return new PsoStructureInfo((MetaName)3749122641, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)1416568288, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1393994109, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2088054141, PsoDataType.SInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2400689426, PsoDataType.Bool, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2229954249, PsoDataType.SInt, 24, 0, 0) + ); + case (MetaName)2720813484: + return new PsoStructureInfo((MetaName)2720813484, 0, 0, 80, + new PsoStructureEntryInfo((MetaName)19643947, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1912045929, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3418860704, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)798220376, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)974350285, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1234302495, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3386895833, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1980284711, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)2004593632, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)121419715, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)1002558306, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)3428812559, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3122448379, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3805238957, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2194212345, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)83737662, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)1737477488, PsoDataType.Float, 72, 0, 0) + ); + case (MetaName)267001783: + return new PsoStructureInfo((MetaName)267001783, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)2222583561, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2449600555, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)1105441606, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2370876339, PsoDataType.Float, 20, 0, 0) + ); + case (MetaName)2578171686: + return new PsoStructureInfo((MetaName)2578171686, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)2891493908, PsoDataType.Float, 8, 0, 0) + ); + case (MetaName)1040069698: + return new PsoStructureInfo((MetaName)1040069698, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)3247587106, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)670176362, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2716995625, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2302810051, PsoDataType.Bool, 17, 0, 0), + new PsoStructureEntryInfo((MetaName)48284945, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1658632009, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3443143875, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3804354300, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3048137979, PsoDataType.Float, 36, 0, 0) + ); + case (MetaName)4115910995: + return new PsoStructureInfo((MetaName)4115910995, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)2111641000, PsoDataType.Enum, 8, 0, (MetaName)3509057257), + new PsoStructureEntryInfo((MetaName)2283156278, PsoDataType.Float, 12, 0, 0) + ); + case MetaName.CTaskNMBalance__Tunables: + return new PsoStructureInfo(MetaName.CTaskNMBalance__Tunables, 0, 0, 912, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)406034015, PsoDataType.Enum, 16, 0, (MetaName)3509057257), + new PsoStructureEntryInfo((MetaName)2701068933, PsoDataType.Structure, 24, 0, (MetaName)760338219), + new PsoStructureEntryInfo((MetaName)1000319425, PsoDataType.Float3, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)3892109820, PsoDataType.Bool, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)930009703, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)2245023424, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)3524092362, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)66577426, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)1708224645, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)3171415609, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)2588071080, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)1502498286, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)3223569917, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo((MetaName)729908938, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)3628130093, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)3439106982, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)3990998153, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo((MetaName)3459663346, PsoDataType.SInt, 168, 0, 0), + new PsoStructureEntryInfo((MetaName)382034967, PsoDataType.SInt, 172, 0, 0), + new PsoStructureEntryInfo((MetaName)2862149771, PsoDataType.Structure, 176, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)987294494, PsoDataType.Structure, 216, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)385444229, PsoDataType.Structure, 256, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3386895833, PsoDataType.Structure, 296, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3396170193, PsoDataType.Structure, 336, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3705331241, PsoDataType.Structure, 376, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)4192987078, PsoDataType.Structure, 416, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)944999838, PsoDataType.Structure, 456, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.Teeter, PsoDataType.Structure, 496, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)1639523711, PsoDataType.Structure, 536, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)2787586299, PsoDataType.Structure, 576, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)4093402329, PsoDataType.Structure, 616, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3974797120, PsoDataType.Structure, 656, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)4123949353, PsoDataType.SInt, 696, 0, 0), + new PsoStructureEntryInfo((MetaName)739931697, PsoDataType.SInt, 700, 0, 0), + new PsoStructureEntryInfo((MetaName)952442515, PsoDataType.SInt, 704, 0, 0), + new PsoStructureEntryInfo((MetaName)577683658, PsoDataType.Structure, 712, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)258986085, PsoDataType.Structure, 752, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)256038063, PsoDataType.Structure, 792, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)1444135973, PsoDataType.Structure, 832, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)476585181, PsoDataType.Structure, 872, 0, (MetaName)3749122641) + ); + case (MetaName)760338219: + return new PsoStructureInfo((MetaName)760338219, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Enable, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2130375977, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2708100865, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3439766974, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3727574793, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1864398785, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2377779348, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1180195582, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)675904337, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1400954876, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)4112497335, PsoDataType.SInt, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.Duration, PsoDataType.SInt, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)1033385210, PsoDataType.Bool, 56, 0, 0) + ); + case MetaName.CNmParameterVector: + return new PsoStructureInfo(MetaName.CNmParameterVector, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 8, 0), + new PsoStructureEntryInfo(MetaName.Value, PsoDataType.Float3, 16, 0, 0) + ); + case MetaName.CTaskNMBrace__Tunables: + return new PsoStructureInfo(MetaName.CTaskNMBrace__Tunables, 0, 0, 1568, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2892094444, PsoDataType.Structure, 16, 0, (MetaName)2216090795), + new PsoStructureEntryInfo((MetaName)172669903, PsoDataType.Structure, 40, 0, (MetaName)1267291753), + new PsoStructureEntryInfo((MetaName)1247412006, PsoDataType.Structure, 64, 0, (MetaName)238499603), + new PsoStructureEntryInfo((MetaName)2966151540, PsoDataType.Structure, 144, 0, (MetaName)2808943365), + new PsoStructureEntryInfo((MetaName)2102302469, PsoDataType.Structure, 176, 0, (MetaName)3816043274), + new PsoStructureEntryInfo((MetaName)1163046056, PsoDataType.Structure, 232, 0, (MetaName)3816043274), + new PsoStructureEntryInfo((MetaName)2143662100, PsoDataType.Structure, 288, 0, (MetaName)3816043274), + new PsoStructureEntryInfo((MetaName)3224113269, PsoDataType.Structure, 344, 0, (MetaName)3816043274), + new PsoStructureEntryInfo((MetaName)883555571, PsoDataType.Structure, 400, 0, (MetaName)3816043274), + new PsoStructureEntryInfo((MetaName)3413603413, PsoDataType.Structure, 456, 0, (MetaName)3816043274), + new PsoStructureEntryInfo((MetaName)2074671276, PsoDataType.Bool, 512, 0, 0), + new PsoStructureEntryInfo((MetaName)599992998, PsoDataType.Bool, 513, 0, 0), + new PsoStructureEntryInfo((MetaName)347021105, PsoDataType.Float, 516, 0, 0), + new PsoStructureEntryInfo((MetaName)4197576600, PsoDataType.Bool, 520, 0, 0), + new PsoStructureEntryInfo((MetaName)2079428645, PsoDataType.Float, 524, 0, 0), + new PsoStructureEntryInfo((MetaName)3699124688, PsoDataType.Float, 528, 0, 0), + new PsoStructureEntryInfo((MetaName)4203888010, PsoDataType.Float, 532, 0, 0), + new PsoStructureEntryInfo((MetaName)1270097093, PsoDataType.Float, 536, 0, 0), + new PsoStructureEntryInfo((MetaName)1698949999, PsoDataType.Float, 540, 0, 0), + new PsoStructureEntryInfo((MetaName)760529768, PsoDataType.Float, 544, 0, 0), + new PsoStructureEntryInfo((MetaName)2616874064, PsoDataType.SInt, 548, 0, 0), + new PsoStructureEntryInfo((MetaName)2452951318, PsoDataType.SInt, 552, 0, 0), + new PsoStructureEntryInfo((MetaName)112556840, PsoDataType.SInt, 556, 0, 0), + new PsoStructureEntryInfo((MetaName)2235898070, PsoDataType.SInt, 560, 0, 0), + new PsoStructureEntryInfo(MetaName.Start, PsoDataType.Structure, 568, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3396170193, PsoDataType.Structure, 608, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.Weak, PsoDataType.Structure, 648, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3974797120, PsoDataType.Structure, 688, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)1418190490, PsoDataType.Structure, 728, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)4250665956, PsoDataType.Structure, 768, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)1218193578, PsoDataType.Float, 808, 0, 0), + new PsoStructureEntryInfo((MetaName)648899635, PsoDataType.Structure, 816, 0, (MetaName)1649426998), + new PsoStructureEntryInfo(MetaName.Update, PsoDataType.Structure, 1256, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)2865917470, PsoDataType.Structure, 1296, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)2691364124, PsoDataType.Structure, 1336, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3262694177, PsoDataType.Structure, 1376, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3612199348, PsoDataType.Structure, 1416, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)468457579, PsoDataType.Structure, 1456, 0, (MetaName)3979439077) + ); + case (MetaName)2216090795: + return new PsoStructureInfo((MetaName)2216090795, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1768633733), + new PsoStructureEntryInfo(MetaName.sets, PsoDataType.Array, 8, 0, 0) + ); + case (MetaName)1267291753: + return new PsoStructureInfo((MetaName)1267291753, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)3650822252, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleScale, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)1737474230, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.PedScale, PsoDataType.Float, 20, 0, 0) + ); + case (MetaName)238499603: + return new PsoStructureInfo((MetaName)238499603, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.Apply, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2414966970, PsoDataType.Float3, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.Velocity, PsoDataType.Float3, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2944635386, PsoDataType.Float3, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.Max, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)4112497335, PsoDataType.SInt, 68, 0, 0) + ); + case (MetaName)2808943365: + return new PsoStructureInfo((MetaName)2808943365, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)3439766974, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)3727574793, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)1864398785, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2377779348, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1033385210, PsoDataType.Bool, 24, 0, 0) + ); + case (MetaName)3816043274: + return new PsoStructureInfo((MetaName)3816043274, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.Apply, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2708100865, PsoDataType.Bool, 9, 0, 0), + new PsoStructureEntryInfo((MetaName)3891030916, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)1711478621, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3279914945, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3255660709, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1033385210, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2640302727, PsoDataType.Bool, 29, 0, 0), + new PsoStructureEntryInfo((MetaName)1660316244, PsoDataType.Bool, 30, 0, 0), + new PsoStructureEntryInfo((MetaName)3126754678, PsoDataType.Bool, 31, 0, 0), + new PsoStructureEntryInfo((MetaName)4063846733, PsoDataType.Bool, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)122191424, PsoDataType.Bool, 33, 0, 0), + new PsoStructureEntryInfo((MetaName)3327649992, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1967662718, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)3421300414, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.Duration, PsoDataType.SInt, 48, 0, 0) + ); + case (MetaName)1649426998: + return new PsoStructureInfo((MetaName)1649426998, 0, 0, 440, + new PsoStructureEntryInfo((MetaName)1832992496, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2055428725, PsoDataType.SInt, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3597443216, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1174887920, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1061400063, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3606585778, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3776343247, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)648899635, PsoDataType.Structure, 40, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3136215640, PsoDataType.Structure, 80, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)2664008333, PsoDataType.Structure, 120, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)1316017959, PsoDataType.Structure, 160, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)2222643548, PsoDataType.Structure, 200, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)2880735205, PsoDataType.Structure, 240, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)2353506762, PsoDataType.Structure, 280, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)2214161412, PsoDataType.Structure, 320, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)600771112, PsoDataType.Structure, 360, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3275734390, PsoDataType.Structure, 400, 0, MetaName.CNmTuningSet) + ); + case (MetaName)1768633733: + return new PsoStructureInfo((MetaName)1768633733, 0, 0, 736, + new PsoStructureEntryInfo(MetaName.Id, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)143477949, PsoDataType.Bool, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)172669903, PsoDataType.Structure, 16, 0, (MetaName)1267291753), + new PsoStructureEntryInfo((MetaName)1094485493, PsoDataType.Bool, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2074671276, PsoDataType.Bool, 41, 0, 0), + new PsoStructureEntryInfo((MetaName)599992998, PsoDataType.Bool, 42, 0, 0), + new PsoStructureEntryInfo((MetaName)3606813162, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)1333505912, PsoDataType.Bool, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2143662100, PsoDataType.Structure, 56, 0, (MetaName)3816043274), + new PsoStructureEntryInfo((MetaName)2230782934, PsoDataType.Bool, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)3224113269, PsoDataType.Structure, 120, 0, (MetaName)3816043274), + new PsoStructureEntryInfo((MetaName)3258479231, PsoDataType.Bool, 176, 0, 0), + new PsoStructureEntryInfo((MetaName)2966151540, PsoDataType.Structure, 184, 0, (MetaName)2808943365), + new PsoStructureEntryInfo((MetaName)134807671, PsoDataType.Bool, 216, 0, 0), + new PsoStructureEntryInfo((MetaName)4203888010, PsoDataType.Float, 220, 0, 0), + new PsoStructureEntryInfo((MetaName)3907466188, PsoDataType.Bool, 224, 0, 0), + new PsoStructureEntryInfo((MetaName)1270097093, PsoDataType.Float, 228, 0, 0), + new PsoStructureEntryInfo((MetaName)2100597904, PsoDataType.Structure, 232, 0, (MetaName)3816043274), + new PsoStructureEntryInfo((MetaName)2561285304, PsoDataType.Bool, 288, 0, 0), + new PsoStructureEntryInfo((MetaName)4027713155, PsoDataType.Bool, 289, 0, 0), + new PsoStructureEntryInfo((MetaName)648899635, PsoDataType.Structure, 296, 0, (MetaName)1649426998) + ); + case MetaName.CNmParameterResetMessage: + return new PsoStructureInfo(MetaName.CNmParameterResetMessage, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 8, 0) + ); + case MetaName.CTaskNMDraggingToSafety__Tunables: + return new PsoStructureInfo(MetaName.CTaskNMDraggingToSafety__Tunables, 0, 0, 160, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.Stiffness, PsoDataType.Structure, 16, 0, (MetaName)2241487041), + new PsoStructureEntryInfo((MetaName)989307764, PsoDataType.Structure, 48, 0, (MetaName)1214269741), + new PsoStructureEntryInfo((MetaName)1591913012, PsoDataType.Structure, 96, 0, (MetaName)2410537644), + new PsoStructureEntryInfo((MetaName)3184237865, PsoDataType.Structure, 112, 0, (MetaName)2059054874) + ); + case (MetaName)2241487041: + return new PsoStructureInfo((MetaName)2241487041, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)1783791261, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)3404836153, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3435621206, PsoDataType.Float, 16, 0, 0) + ); + case (MetaName)1214269741: + return new PsoStructureInfo((MetaName)1214269741, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)416915558, PsoDataType.Float3, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)697293397, PsoDataType.Float3, 32, 0, 0) + ); + case (MetaName)2410537644: + return new PsoStructureInfo((MetaName)2410537644, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.MaxDistance, PsoDataType.Float, 8, 0, 0) + ); + case (MetaName)2059054874: + return new PsoStructureInfo((MetaName)2059054874, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2557494577, PsoDataType.Float3, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)4292584457, PsoDataType.Float3, 32, 0, 0) + ); + case MetaName.CTaskNMDrunk__Tunables: + return new PsoStructureInfo(MetaName.CTaskNMDrunk__Tunables, 0, 0, 256, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1358716283, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1290250752, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)15793390, PsoDataType.SInt, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)72944862, PsoDataType.SInt, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)481812193, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)615835079, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3439085926, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2515092116, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)1337934970, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1747662930, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)1333092266, PsoDataType.SInt, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3088121500, PsoDataType.SInt, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)890221191, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)971008663, PsoDataType.SInt, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)230707381, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)603776431, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)604632997, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)906382083, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)2778976875, PsoDataType.Bool, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)2274869694, PsoDataType.Bool, 89, 0, 0), + new PsoStructureEntryInfo(MetaName.Start, PsoDataType.Structure, 96, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)212355988, PsoDataType.Structure, 136, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3575677823, PsoDataType.Structure, 176, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.Idle, PsoDataType.Structure, 216, 0, MetaName.CNmTuningSet) + ); + case MetaName.CTaskNMElectrocute__Tunables: + return new PsoStructureInfo(MetaName.CTaskNMElectrocute__Tunables, 0, 0, 400, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)871993282, PsoDataType.Enum, 16, 0, (MetaName)3509057257), + new PsoStructureEntryInfo((MetaName)2966151540, PsoDataType.Structure, 24, 0, (MetaName)760338219), + new PsoStructureEntryInfo((MetaName)279094028, PsoDataType.Float3, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)3699124688, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.Start, PsoDataType.Structure, 120, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3122448379, PsoDataType.Structure, 160, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3805238957, PsoDataType.Structure, 200, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)2194212345, PsoDataType.Structure, 240, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3974797120, PsoDataType.Structure, 280, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)4246526405, PsoDataType.Structure, 320, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3413282736, PsoDataType.Structure, 360, 0, MetaName.CNmTuningSet) + ); + case MetaName.CTaskNMExplosion__Tunables: + return new PsoStructureInfo(MetaName.CTaskNMExplosion__Tunables, 0, 0, 344, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3100954165, PsoDataType.SInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3892117779, PsoDataType.SInt, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3993091983, PsoDataType.Bool, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2811070889, PsoDataType.Bool, 25, 0, 0), + new PsoStructureEntryInfo((MetaName)2106002013, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2088499253, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3140918872, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1581787136, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)3622461286, PsoDataType.UInt, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2616410929, PsoDataType.UInt, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2414092533, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)4249251885, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)2221851990, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)3439568038, PsoDataType.SInt, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)478429586, PsoDataType.SInt, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)4260165656, PsoDataType.SInt, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)127971633, PsoDataType.SInt, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)1703031604, PsoDataType.Bool, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)3831760128, PsoDataType.Bool, 81, 0, 0), + new PsoStructureEntryInfo((MetaName)776602752, PsoDataType.Structure, 88, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)1213801104, PsoDataType.Structure, 128, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)2633206880, PsoDataType.Structure, 168, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.Update, PsoDataType.Structure, 208, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.Explosion, PsoDataType.Structure, 248, 0, (MetaName)3490848491) + ); + case (MetaName)3490848491: + return new PsoStructureInfo((MetaName)3490848491, 0, 0, 96, + new PsoStructureEntryInfo((MetaName)380014673, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)3219752194, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)938878998, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)670734777, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2267090113, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3667685650, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)4074006169, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1446526858, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1615867498, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1654280371, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)1388744206, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)4112643692, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3388239219, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)1948575789, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)107265024, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)2554943154, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)3768610799, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)4071693543, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)1612043114, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)1833631034, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)868220978, PsoDataType.Float, 88, 0, 0) + ); + case MetaName.CTaskNMFlinch__Tunables: + return new PsoStructureInfo(MetaName.CTaskNMFlinch__Tunables, 0, 0, 624, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.Start, PsoDataType.Structure, 16, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)1672543877, PsoDataType.Structure, 56, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3460531080, PsoDataType.Structure, 96, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)264772538, PsoDataType.Structure, 136, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3396170193, PsoDataType.Structure, 176, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)4148786995, PsoDataType.Structure, 216, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)62148721, PsoDataType.Structure, 256, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)2720032072, PsoDataType.Structure, 296, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3291888789, PsoDataType.Structure, 336, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3720463376, PsoDataType.Structure, 376, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.Update, PsoDataType.Structure, 416, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3974797120, PsoDataType.Structure, 456, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)1418190490, PsoDataType.Structure, 496, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)1399921457, PsoDataType.Structure, 536, 0, (MetaName)2070432509), + new PsoStructureEntryInfo((MetaName)4009202106, PsoDataType.Structure, 568, 0, (MetaName)2070432509), + new PsoStructureEntryInfo((MetaName)2410986509, PsoDataType.Bool, 600, 0, 0), + new PsoStructureEntryInfo((MetaName)4237013150, PsoDataType.SInt, 604, 0, 0), + new PsoStructureEntryInfo((MetaName)2519882664, PsoDataType.SInt, 608, 0, 0), + new PsoStructureEntryInfo((MetaName)1706111854, PsoDataType.Float, 612, 0, 0), + new PsoStructureEntryInfo((MetaName)913654553, PsoDataType.Float, 616, 0, 0), + new PsoStructureEntryInfo((MetaName)2189152686, PsoDataType.Float, 620, 0, 0) + ); + case MetaName.CNmParameterRandomInt: + return new PsoStructureInfo(MetaName.CNmParameterRandomInt, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 8, 0), + new PsoStructureEntryInfo(MetaName.Min, PsoDataType.SInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.Max, PsoDataType.SInt, 20, 0, 0) + ); + case MetaName.CTaskNMHighFall__Tunables: + return new PsoStructureInfo(MetaName.CTaskNMHighFall__Tunables, 0, 0, 1112, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2459418685, PsoDataType.Structure, 16, 0, (MetaName)760338219), + new PsoStructureEntryInfo((MetaName)3608118347, PsoDataType.SInt, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)2619863448, PsoDataType.Structure, 88, 0, (MetaName)760338219), + new PsoStructureEntryInfo((MetaName)2080285568, PsoDataType.SInt, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)1503093096, PsoDataType.SInt, 156, 0, 0), + new PsoStructureEntryInfo(MetaName.Start, PsoDataType.Structure, 160, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)1916434556, PsoDataType.Structure, 200, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)224741676, PsoDataType.Structure, 240, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)1362978742, PsoDataType.Structure, 280, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)862016535, PsoDataType.Structure, 320, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)1040810614, PsoDataType.Structure, 360, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)29931670, PsoDataType.Structure, 400, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)1017102101, PsoDataType.Structure, 440, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)2578429326, PsoDataType.Structure, 480, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3419269985, PsoDataType.Structure, 520, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3533734703, PsoDataType.Bool, 560, 0, 0), + new PsoStructureEntryInfo(MetaName.Update, PsoDataType.Structure, 568, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)4265715862, PsoDataType.Structure, 608, 0, (MetaName)3979439077), + new PsoStructureEntryInfo((MetaName)2430282312, PsoDataType.Structure, 712, 0, (MetaName)3749122641), + new PsoStructureEntryInfo((MetaName)558729515, PsoDataType.Structure, 744, 0, (MetaName)3749122641), + new PsoStructureEntryInfo((MetaName)1165801413, PsoDataType.Float, 776, 0, 0), + new PsoStructureEntryInfo((MetaName)3891222055, PsoDataType.Float, 780, 0, 0), + new PsoStructureEntryInfo((MetaName)1666177823, PsoDataType.Float, 784, 0, 0), + new PsoStructureEntryInfo((MetaName)888956679, PsoDataType.Float, 788, 0, 0), + new PsoStructureEntryInfo((MetaName)3956869012, PsoDataType.Bool, 792, 0, 0), + new PsoStructureEntryInfo((MetaName)2331611470, PsoDataType.SInt, 796, 0, 0), + new PsoStructureEntryInfo((MetaName)3919163430, PsoDataType.SInt, 800, 0, 0), + new PsoStructureEntryInfo((MetaName)1342466268, PsoDataType.Structure, 808, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)2200596271, PsoDataType.Structure, 848, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)1799229733, PsoDataType.Structure, 888, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)220567909, PsoDataType.UByte, 928, 0, 0), + new PsoStructureEntryInfo((MetaName)4004286054, PsoDataType.Float, 932, 0, 0), + new PsoStructureEntryInfo((MetaName)1373544668, PsoDataType.Float, 936, 0, 0), + new PsoStructureEntryInfo((MetaName)2767003073, PsoDataType.Float, 940, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Float, 0, 0, 0), + new PsoStructureEntryInfo((MetaName)1187767114, PsoDataType.Array, 944, 4, (MetaName)1376291), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Float, 0, 0, 0), + new PsoStructureEntryInfo((MetaName)3808435735, PsoDataType.Array, 1028, 4, (MetaName)1310757) + ); + case MetaName.CTaskNMInjuredOnGround__Tunables: + return new PsoStructureInfo(MetaName.CTaskNMInjuredOnGround__Tunables, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3434153865, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)715813748, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)18835671, PsoDataType.SInt, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2620945991, PsoDataType.SInt, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2495781827, PsoDataType.SInt, 32, 0, 0) + ); + case MetaName.CTaskNMJumpRollFromRoadVehicle__Tunables: + return new PsoStructureInfo(MetaName.CTaskNMJumpRollFromRoadVehicle__Tunables, 0, 0, 304, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1393168468, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2371670611, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.Start, PsoDataType.Structure, 24, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)769744308, PsoDataType.Structure, 64, 0, (MetaName)2070432509), + new PsoStructureEntryInfo((MetaName)4265715862, PsoDataType.Structure, 96, 0, (MetaName)3979439077), + new PsoStructureEntryInfo((MetaName)784154981, PsoDataType.Structure, 200, 0, (MetaName)3979439077) + ); + case MetaName.CTaskNMOnFire__Tunables: + return new PsoStructureInfo(MetaName.CTaskNMOnFire__Tunables, 0, 0, 176, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.Start, PsoDataType.Structure, 16, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.Weak, PsoDataType.Structure, 56, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.Update, PsoDataType.Structure, 96, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3974797120, PsoDataType.Structure, 136, 0, MetaName.CNmTuningSet) + ); + case MetaName.CTaskNMPrototype__Tunables: + return new PsoStructureInfo(MetaName.CTaskNMPrototype__Tunables, 0, 0, 288, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)4079974935, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3281708108, PsoDataType.SInt, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2224677187, PsoDataType.Bool, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.Start, PsoDataType.Structure, 32, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.Update, PsoDataType.Structure, 72, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3974797120, PsoDataType.Structure, 112, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CTaskNMPrototype__Tunables__TimedTuning), + new PsoStructureEntryInfo((MetaName)2683667002, PsoDataType.Array, 152, 0, MetaName.POINTER), + new PsoStructureEntryInfo((MetaName)2970224816, PsoDataType.Structure, 168, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3261705071, PsoDataType.Structure, 208, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3903387629, PsoDataType.Structure, 248, 0, MetaName.CNmTuningSet) + ); + case MetaName.CTaskNMPrototype__Tunables__TimedTuning: + return new PsoStructureInfo(MetaName.CTaskNMPrototype__Tunables__TimedTuning, 0, 0, 56, + new PsoStructureEntryInfo((MetaName)704872957, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1887945139, PsoDataType.Bool, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)605698999, PsoDataType.Structure, 16, 0, MetaName.CNmTuningSet) + ); + case MetaName.CTaskNMRiverRapids__Tunables: + return new PsoStructureInfo(MetaName.CTaskNMRiverRapids__Tunables, 0, 0, 272, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)978248567, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2761683393, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2237132872, PsoDataType.Bool, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3772786175, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3419496233, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1056777533, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3868696870, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1372422790, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Float, 0, 0, 0), + new PsoStructureEntryInfo((MetaName)2460325000, PsoDataType.Array, 48, 4, (MetaName)1376265), + new PsoStructureEntryInfo((MetaName)1990395340, PsoDataType.Structure, 136, 0, (MetaName)2361842970), + new PsoStructureEntryInfo(MetaName.Start, PsoDataType.Structure, 192, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.Update, PsoDataType.Structure, 232, 0, MetaName.CNmTuningSet) + ); + case (MetaName)2361842970: + return new PsoStructureInfo((MetaName)2361842970, 0, 0, 56, + new PsoStructureEntryInfo((MetaName)3904393624, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1774619724, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3679690700, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)966292507, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3395352877, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2926397774, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2396268986, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1198151288, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)2122555922, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)3789430640, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2562294840, PsoDataType.Float, 48, 0, 0) + ); + case MetaName.CTaskNMShot__Tunables: + return new PsoStructureInfo(MetaName.CTaskNMShot__Tunables, 0, 0, 2304, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3405078066, PsoDataType.SInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1078427012, PsoDataType.SInt, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2006791804, PsoDataType.Bool, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3665067262, PsoDataType.Bool, 25, 0, 0), + new PsoStructureEntryInfo((MetaName)2987127575, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3437539423, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)100413071, PsoDataType.Enum, 36, 0, (MetaName)3509057257), + new PsoStructureEntryInfo((MetaName)3985239087, PsoDataType.SInt, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)3639036861, PsoDataType.SInt, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)3419541350, PsoDataType.SInt, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)655022274, PsoDataType.SInt, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3609300401, PsoDataType.SInt, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)4263173023, PsoDataType.SInt, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)3295848876, PsoDataType.SInt, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)2382871963, PsoDataType.SInt, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)2977969682, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)3753244842, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)3872529888, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)336969407, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)1471062121, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)1412443494, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)1950052429, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)125672080, PsoDataType.Bool, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)709707651, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)2464589752, PsoDataType.Structure, 112, 0, (MetaName)2342621138), + new PsoStructureEntryInfo((MetaName)3968865312, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)245896742, PsoDataType.Structure, 152, 0, (MetaName)209088469), + new PsoStructureEntryInfo((MetaName)3061537468, PsoDataType.Structure, 352, 0, (MetaName)996969243), + new PsoStructureEntryInfo((MetaName)4009335731, PsoDataType.Structure, 392, 0, (MetaName)996969243), + new PsoStructureEntryInfo((MetaName)509938192, PsoDataType.Structure, 432, 0, (MetaName)1001943080), + new PsoStructureEntryInfo((MetaName)3674358794, PsoDataType.Structure, 464, 0, (MetaName)2149258416), + new PsoStructureEntryInfo((MetaName)3699124688, PsoDataType.Float, 504, 0, 0), + new PsoStructureEntryInfo((MetaName)1128285975, PsoDataType.Bool, 508, 0, 0), + new PsoStructureEntryInfo((MetaName)3571595842, PsoDataType.SInt, 512, 0, 0), + new PsoStructureEntryInfo((MetaName)3769959610, PsoDataType.Float, 516, 0, 0), + new PsoStructureEntryInfo((MetaName)4015640822, PsoDataType.Float, 520, 0, 0), + new PsoStructureEntryInfo((MetaName)3055246492, PsoDataType.Float, 524, 0, 0), + new PsoStructureEntryInfo((MetaName)417172126, PsoDataType.Float, 528, 0, 0), + new PsoStructureEntryInfo((MetaName)2286694021, PsoDataType.Float, 532, 0, 0), + new PsoStructureEntryInfo((MetaName)1056935054, PsoDataType.SInt, 536, 0, 0), + new PsoStructureEntryInfo((MetaName)3537415104, PsoDataType.SInt, 540, 0, 0), + new PsoStructureEntryInfo((MetaName)1779515548, PsoDataType.Bool, 544, 0, 0), + new PsoStructureEntryInfo((MetaName)3717266986, PsoDataType.Bool, 545, 0, 0), + new PsoStructureEntryInfo((MetaName)390630339, PsoDataType.Bool, 546, 0, 0), + new PsoStructureEntryInfo((MetaName)3271496489, PsoDataType.SInt, 548, 0, 0), + new PsoStructureEntryInfo((MetaName)702711221, PsoDataType.SInt, 552, 0, 0), + new PsoStructureEntryInfo((MetaName)249145917, PsoDataType.Bool, 556, 0, 0), + new PsoStructureEntryInfo((MetaName)3192396779, PsoDataType.SInt, 560, 0, 0), + new PsoStructureEntryInfo((MetaName)266530001, PsoDataType.SInt, 564, 0, 0), + new PsoStructureEntryInfo((MetaName)315966693, PsoDataType.Structure, 568, 0, (MetaName)436100430), + new PsoStructureEntryInfo((MetaName)1399921457, PsoDataType.Structure, 2136, 0, (MetaName)2070432509), + new PsoStructureEntryInfo((MetaName)124792981, PsoDataType.Structure, 2168, 0, (MetaName)3979439077), + new PsoStructureEntryInfo((MetaName)3512832436, PsoDataType.Structure, 2272, 0, (MetaName)3749122641) + ); + case (MetaName)2342621138: + return new PsoStructureInfo((MetaName)2342621138, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)2392243130, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)3138282762, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)180206572, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1229015521, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)959886766, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2100915621, PsoDataType.Float, 28, 0, 0) + ); + case (MetaName)209088469: + return new PsoStructureInfo((MetaName)209088469, 0, 0, 200, + new PsoStructureEntryInfo((MetaName)1393173723, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)3969466346, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3839056884, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)4101332336, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)253998194, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)167326155, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)4025040637, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1810182352, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1035940220, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2071204131, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)3207843175, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)3825480237, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3579666943, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3764669870, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)4071309368, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)3217262184, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)895546582, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)2406131077, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)926832193, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)3069940419, PsoDataType.SInt, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)2456570730, PsoDataType.SInt, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)4026600462, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)3040120990, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3509057257), + new PsoStructureEntryInfo((MetaName)3129842207, PsoDataType.Flags, 100, 0, (MetaName)2097175), + new PsoStructureEntryInfo((MetaName)2681040368, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)2187976068, PsoDataType.Bool, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)3053385153, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)1084989136, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)1833987390, PsoDataType.Bool, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)3084941871, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)1689181219, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)2148964650, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)1454653034, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)930478842, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)2892741044, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)188546747, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo((MetaName)4252723795, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)184133535, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)3585973980, PsoDataType.Structure, 160, 0, (MetaName)3192684380) + ); + case (MetaName)3192684380: + return new PsoStructureInfo((MetaName)3192684380, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)3839056884, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)4101332336, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)253998194, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)167326155, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)4025040637, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1810182352, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1035940220, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3207843175, PsoDataType.Float, 36, 0, 0) + ); + case (MetaName)996969243: + return new PsoStructureInfo((MetaName)996969243, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Enable, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1191223326, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)4172681798, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.Blend, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)883722394, PsoDataType.Enum, 24, 0, (MetaName)3509057257), + new PsoStructureEntryInfo((MetaName)2168296036, PsoDataType.Enum, 28, 0, (MetaName)3509057257), + new PsoStructureEntryInfo((MetaName)1744405318, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2827348378, PsoDataType.UInt, 36, 0, 0) + ); + case (MetaName)1001943080: + return new PsoStructureInfo((MetaName)1001943080, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)4170306057, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1120630761, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)81171216, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)474003950, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2121757492, PsoDataType.Float, 24, 0, 0) + ); + case (MetaName)2149258416: + return new PsoStructureInfo((MetaName)2149258416, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)1894293331, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2663144521, PsoDataType.SInt, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3575120372, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3002630191, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1905000551, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3342224597, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2054532609, PsoDataType.Float, 32, 0, 0) + ); + case (MetaName)436100430: + return new PsoStructureInfo((MetaName)436100430, 0, 0, 1568, + new PsoStructureEntryInfo((MetaName)212355988, PsoDataType.Structure, 8, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)2945330295, PsoDataType.Structure, 48, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3856838428, PsoDataType.Structure, 88, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)1190774472, PsoDataType.Structure, 128, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3676971081, PsoDataType.Structure, 168, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)2194212345, PsoDataType.Structure, 208, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)478190306, PsoDataType.Structure, 248, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)800099441, PsoDataType.Structure, 288, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)451773670, PsoDataType.Structure, 328, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)256476042, PsoDataType.Structure, 368, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3003938851, PsoDataType.Structure, 408, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)2675545657, PsoDataType.Structure, 448, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3674358794, PsoDataType.Structure, 488, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3495314353, PsoDataType.Structure, 528, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3260924144, PsoDataType.Structure, 568, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)1203310844, PsoDataType.Structure, 608, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)264772538, PsoDataType.Structure, 648, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)4148786995, PsoDataType.Structure, 688, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)62148721, PsoDataType.Structure, 728, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3600525461, PsoDataType.Structure, 768, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)1586436866, PsoDataType.Structure, 808, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3396170193, PsoDataType.Structure, 848, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)2464589752, PsoDataType.Structure, 888, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)1877343639, PsoDataType.Structure, 928, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)745594459, PsoDataType.Structure, 968, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3103279089, PsoDataType.Structure, 1008, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)1740552960, PsoDataType.Structure, 1048, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.StaggerFall, PsoDataType.Structure, 1088, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)4093402329, PsoDataType.Structure, 1128, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)1126347982, PsoDataType.Structure, 1168, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3814409847, PsoDataType.Structure, 1208, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3571002906, PsoDataType.Structure, 1248, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)246824093, PsoDataType.Structure, 1288, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3062524360, PsoDataType.Structure, 1328, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.Teeter, PsoDataType.Structure, 1368, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3291888789, PsoDataType.Structure, 1408, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3720463376, PsoDataType.Structure, 1448, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)3072964466, PsoDataType.Structure, 1488, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.Female, PsoDataType.Structure, 1528, 0, MetaName.CNmTuningSet) + ); + case MetaName.CTaskNMSimple__Tunables: + return new PsoStructureInfo(MetaName.CTaskNMSimple__Tunables, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2610655349), + new PsoStructureEntryInfo(MetaName.Tuning, PsoDataType.Map, 16, 1, (MetaName)65538) + ); + case (MetaName)2610655349: + return new PsoStructureInfo((MetaName)2610655349, 0, 0, 176, + new PsoStructureEntryInfo((MetaName)4168588760, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2235294119, PsoDataType.SInt, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)4246262885, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.Start, PsoDataType.Structure, 24, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.Update, PsoDataType.Structure, 64, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)494965274, PsoDataType.Structure, 104, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo((MetaName)124792981, PsoDataType.Structure, 144, 0, (MetaName)3749122641) + ); + case MetaName.CTaskNMThroughWindscreen__Tunables: + return new PsoStructureInfo(MetaName.CTaskNMThroughWindscreen__Tunables, 0, 0, 232, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1393168468, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2371670611, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2251372495, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2466946069, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3963787762, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2641066262, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)164203436, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2962336026, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2854807360, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2357933858, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)4180033042, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3242658957, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)301898848, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)3996231382, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)4245738856, PsoDataType.SInt, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)1575645985, PsoDataType.Structure, 80, 0, (MetaName)1267291753), + new PsoStructureEntryInfo((MetaName)3654250561, PsoDataType.Structure, 104, 0, (MetaName)1267291753), + new PsoStructureEntryInfo((MetaName)3619347977, PsoDataType.Structure, 128, 0, (MetaName)1267291753), + new PsoStructureEntryInfo(MetaName.Start, PsoDataType.Structure, 152, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.Update, PsoDataType.Structure, 192, 0, MetaName.CNmTuningSet) + ); + case MetaName.CTaskRageRagdoll__Tunables: + return new PsoStructureInfo(MetaName.CTaskRageRagdoll__Tunables, 0, 0, 168, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2573019437, PsoDataType.Structure, 16, 0, (MetaName)2579680791), + new PsoStructureEntryInfo((MetaName)2519031107, PsoDataType.Structure, 48, 0, (MetaName)2579680791), + new PsoStructureEntryInfo((MetaName)2622719195, PsoDataType.Structure, 80, 0, (MetaName)2579680791), + new PsoStructureEntryInfo((MetaName)3405457664, PsoDataType.Structure, 112, 0, (MetaName)2715073781), + new PsoStructureEntryInfo((MetaName)3498784443, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)3163227947, PsoDataType.Float, 164, 0, 0) + ); + case (MetaName)2579680791: + return new PsoStructureInfo((MetaName)2579680791, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)79279568, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2901808706, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)494142166, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)649526198, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3898851432, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)498117381, PsoDataType.Float, 28, 0, 0) + ); + case (MetaName)2715073781: + return new PsoStructureInfo((MetaName)2715073781, 0, 0, 48, + new PsoStructureEntryInfo((MetaName)702174865, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)3098879897, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)628688906, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)4043035065, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3072803950, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3121676006, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3679879803, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3492529421, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3454936156, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)664247322, PsoDataType.Float, 44, 0, 0) + ); + case MetaName.CPlayerInfo__Tunables: + return new PsoStructureInfo(MetaName.CPlayerInfo__Tunables, 0, 0, 992, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2545446674, PsoDataType.Structure, 16, 0, (MetaName)2968011987), + new PsoStructureEntryInfo((MetaName)3029474439, PsoDataType.Structure, 48, 0, (MetaName)2859355160), + new PsoStructureEntryInfo((MetaName)1127062988, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)86779191, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)2451123132, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)1576858885, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)2104384861, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)3615351832, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)3763989739, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)3211960089, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)600117053, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)1353421746, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)420979855, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)3684109243, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)164620332, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)3579116253, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)1351646535, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)1241525786, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)328254695, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)3990545757, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)1793159754, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)1613714646, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)3746655905, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)4019573548, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo((MetaName)1929662760, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)2709145468, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)4027241659, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)3428727331, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo((MetaName)4176468490, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo((MetaName)2465303084, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo((MetaName)1171875727, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo((MetaName)2109232134, PsoDataType.UInt, 180, 0, 0), + new PsoStructureEntryInfo((MetaName)3942172091, PsoDataType.UInt, 184, 0, 0), + new PsoStructureEntryInfo((MetaName)560650271, PsoDataType.String, 188, 7, 0), + new PsoStructureEntryInfo((MetaName)1651229959, PsoDataType.Bool, 192, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CPlayerInfo__sSprintControlData), + new PsoStructureEntryInfo((MetaName)3828880770, PsoDataType.Array, 200, 1, (MetaName)262180), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CPlayerInfo__sPlayerStatInfo), + new PsoStructureEntryInfo((MetaName)977451662, PsoDataType.Array, 336, 1, (MetaName)524326), + new PsoStructureEntryInfo((MetaName)4178328957, PsoDataType.Float, 984, 0, 0), + new PsoStructureEntryInfo((MetaName)1447073898, PsoDataType.Float, 988, 0, 0) + ); + case (MetaName)2968011987: + return new PsoStructureInfo((MetaName)2968011987, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)1417010304, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1507206306, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2183058530, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1141048876, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1014164585, PsoDataType.Float, 24, 0, 0) + ); + case (MetaName)2859355160: + return new PsoStructureInfo((MetaName)2859355160, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)2426887593, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2454614730, PsoDataType.UInt, 12, 0, 0) + ); + case MetaName.CPlayerInfo__sSprintControlData: + return new PsoStructureInfo(MetaName.CPlayerInfo__sSprintControlData, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)3672071413, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1878184186, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2933611601, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1066024874, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)597877266, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2301637192, PsoDataType.Float, 28, 0, 0) + ); + case MetaName.CPlayerInfo__sPlayerStatInfo: + return new PsoStructureInfo(MetaName.CPlayerInfo__sPlayerStatInfo, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1051647876, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)1624872472, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)299633947, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1166926746, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1924165020, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3607524859, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1670377462, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1011508514, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)3955578614, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)353529649, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2239295053, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3700594697, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3171739573, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)355034181, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)1331483625, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)2479363241, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)3048005225, PsoDataType.Float, 76, 0, 0) + ); + case MetaName.CAnimSpeedUps__Tunables: + return new PsoStructureInfo(MetaName.CAnimSpeedUps__Tunables, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)367433608, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2530564765, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)935832867, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)891602871, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2900803312, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1245165468, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)674066505, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2570857418, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2345403785, PsoDataType.Bool, 48, 0, 0) + ); + case MetaName.CPlayerPedTargeting__Tunables: + return new PsoStructureInfo(MetaName.CPlayerPedTargeting__Tunables, 0, 0, 3776, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1046040592, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)925392687, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1845591318, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1369945566, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1109599945, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3651791969, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)694461643, PsoDataType.UInt, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2930848614, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)3783727678, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3215957770, PsoDataType.Bool, 46, 0, 0), + new PsoStructureEntryInfo((MetaName)2995853681, PsoDataType.Bool, 47, 0, 0), + new PsoStructureEntryInfo((MetaName)2235947157, PsoDataType.Bool, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)216413736, PsoDataType.Bool, 49, 0, 0), + new PsoStructureEntryInfo((MetaName)208459187, PsoDataType.Bool, 50, 0, 0), + new PsoStructureEntryInfo((MetaName)951183830, PsoDataType.Bool, 51, 0, 0), + new PsoStructureEntryInfo((MetaName)1909407402, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)315412703, PsoDataType.Bool, 53, 0, 0), + new PsoStructureEntryInfo((MetaName)3853036348, PsoDataType.Bool, 54, 0, 0), + new PsoStructureEntryInfo((MetaName)2837888679, PsoDataType.Bool, 55, 0, 0), + new PsoStructureEntryInfo((MetaName)1791816512, PsoDataType.Bool, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)1097471232, PsoDataType.Structure, 64, 0, MetaName.CTargettingDifficultyInfo), + new PsoStructureEntryInfo((MetaName)3104062807, PsoDataType.Structure, 528, 0, MetaName.CTargettingDifficultyInfo), + new PsoStructureEntryInfo((MetaName)2843442022, PsoDataType.Structure, 992, 0, MetaName.CTargettingDifficultyInfo), + new PsoStructureEntryInfo((MetaName)933644170, PsoDataType.Structure, 1456, 0, MetaName.CTargettingDifficultyInfo), + new PsoStructureEntryInfo((MetaName)1051298047, PsoDataType.Structure, 1920, 0, MetaName.CTargettingDifficultyInfo), + new PsoStructureEntryInfo((MetaName)1712651720, PsoDataType.Structure, 2384, 0, MetaName.CTargettingDifficultyInfo), + new PsoStructureEntryInfo((MetaName)3769742750, PsoDataType.Structure, 2848, 0, MetaName.CTargettingDifficultyInfo), + new PsoStructureEntryInfo((MetaName)1604857901, PsoDataType.Structure, 3312, 0, MetaName.CTargettingDifficultyInfo) + ); + case MetaName.CTargettingDifficultyInfo: + return new PsoStructureInfo(MetaName.CTargettingDifficultyInfo, 0, 0, 464, + new PsoStructureEntryInfo((MetaName)4263854907, PsoDataType.Enum, 8, 0, (MetaName)4263854907), + new PsoStructureEntryInfo((MetaName)3742855719, PsoDataType.Bool, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2942037123, PsoDataType.Bool, 13, 0, 0), + new PsoStructureEntryInfo((MetaName)2667436072, PsoDataType.Bool, 14, 0, 0), + new PsoStructureEntryInfo((MetaName)3139641677, PsoDataType.Bool, 15, 0, 0), + new PsoStructureEntryInfo((MetaName)1473266781, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)297555324, PsoDataType.Bool, 17, 0, 0), + new PsoStructureEntryInfo((MetaName)1815260878, PsoDataType.Bool, 18, 0, 0), + new PsoStructureEntryInfo((MetaName)1214053169, PsoDataType.Bool, 19, 0, 0), + new PsoStructureEntryInfo((MetaName)3032938120, PsoDataType.Bool, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2834495058, PsoDataType.Bool, 21, 0, 0), + new PsoStructureEntryInfo((MetaName)3708089905, PsoDataType.Bool, 22, 0, 0), + new PsoStructureEntryInfo((MetaName)3927328861, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1424095429, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)494811143, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1217679840, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)361676600, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)3274621266, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2598900761, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2015184340, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)1280045894, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)1394170274, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)3789965859, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)3751177723, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)3414965475, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)3583828968, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)2308178823, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)4232341165, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)4081370038, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)2946314787, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)3453384537, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)1235721286, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)3025537526, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)2510305536, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)1940999374, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)3411810706, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)2012228463, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)1649684365, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)3539954611, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)2357834650, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)1661550302, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)2224486137, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)1340511632, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)64509274, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo((MetaName)2809571307, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)2827935386, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)2152729841, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)134284951, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo((MetaName)1099784311, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo((MetaName)505547665, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo((MetaName)3649321767, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo((MetaName)1403902499, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo((MetaName)3553881274, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo((MetaName)352361634, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo((MetaName)1117580274, PsoDataType.Float, 192, 0, 0), + new PsoStructureEntryInfo((MetaName)4067802571, PsoDataType.Float, 196, 0, 0), + new PsoStructureEntryInfo((MetaName)2124028122, PsoDataType.Float, 200, 0, 0), + new PsoStructureEntryInfo((MetaName)3433060120, PsoDataType.Float, 204, 0, 0), + new PsoStructureEntryInfo((MetaName)2167138628, PsoDataType.Float, 208, 0, 0), + new PsoStructureEntryInfo((MetaName)2633888729, PsoDataType.Float, 212, 0, 0), + new PsoStructureEntryInfo((MetaName)1036145679, PsoDataType.Float, 216, 0, 0), + new PsoStructureEntryInfo((MetaName)2689623744, PsoDataType.Float, 220, 0, 0), + new PsoStructureEntryInfo((MetaName)3282516112, PsoDataType.Float, 224, 0, 0), + new PsoStructureEntryInfo((MetaName)2407796767, PsoDataType.Float, 228, 0, 0), + new PsoStructureEntryInfo((MetaName)2444069349, PsoDataType.Float, 232, 0, 0), + new PsoStructureEntryInfo((MetaName)2679873658, PsoDataType.Float, 236, 0, 0), + new PsoStructureEntryInfo((MetaName)767482079, PsoDataType.Float, 240, 0, 0), + new PsoStructureEntryInfo((MetaName)286043552, PsoDataType.Float, 244, 0, 0), + new PsoStructureEntryInfo((MetaName)1715236167, PsoDataType.Float, 248, 0, 0), + new PsoStructureEntryInfo((MetaName)1204531501, PsoDataType.Float, 252, 0, 0), + new PsoStructureEntryInfo((MetaName)2894104098, PsoDataType.Float, 256, 0, 0), + new PsoStructureEntryInfo((MetaName)1976544803, PsoDataType.Float, 260, 0, 0), + new PsoStructureEntryInfo((MetaName)922516025, PsoDataType.Float, 264, 0, 0), + new PsoStructureEntryInfo((MetaName)3926385305, PsoDataType.Float, 268, 0, 0), + new PsoStructureEntryInfo((MetaName)493048149, PsoDataType.Float, 272, 0, 0), + new PsoStructureEntryInfo((MetaName)2549641570, PsoDataType.Float, 276, 0, 0), + new PsoStructureEntryInfo((MetaName)1952125540, PsoDataType.UInt, 280, 0, 0), + new PsoStructureEntryInfo((MetaName)2774244387, PsoDataType.UInt, 284, 0, 0), + new PsoStructureEntryInfo((MetaName)3957255740, PsoDataType.Float, 288, 0, 0), + new PsoStructureEntryInfo((MetaName)3799655237, PsoDataType.Float, 292, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CCurveSet), + new PsoStructureEntryInfo((MetaName)4116334946, PsoDataType.Array, 296, 1, (MetaName)262224), + new PsoStructureEntryInfo((MetaName)390534438, PsoDataType.Structure, 432, 0, MetaName.CCurveSet) + ); + case MetaName.CCurveSet: + return new PsoStructureInfo(MetaName.CCurveSet, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CCurve), + new PsoStructureEntryInfo((MetaName)1403691063, PsoDataType.Array, 16, 0, (MetaName)1) + ); + case MetaName.CCurve: + return new PsoStructureInfo(MetaName.CCurve, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)541735427, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2372087104, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2680890523, PsoDataType.Float, 16, 0, 0) + ); + case MetaName.CRandomEventManager__Tunables: + return new PsoStructureInfo(MetaName.CRandomEventManager__Tunables, 0, 0, 96, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3284686610, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 17, 0, 0), + new PsoStructureEntryInfo((MetaName)1727634143, PsoDataType.Bool, 18, 0, 0), + new PsoStructureEntryInfo((MetaName)95033849, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3561980965, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1980648971), + new PsoStructureEntryInfo((MetaName)2154193106, PsoDataType.Array, 32, 0, (MetaName)6), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2790883352), + new PsoStructureEntryInfo((MetaName)4113341331, PsoDataType.Array, 48, 0, (MetaName)8), + new PsoStructureEntryInfo((MetaName)1201683089, PsoDataType.Bool, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)1965911345, PsoDataType.SInt, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)2463315253, PsoDataType.SInt, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)3549282925, PsoDataType.SInt, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)1676424772, PsoDataType.SInt, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)1696043144, PsoDataType.String, 84, 7, 0), + new PsoStructureEntryInfo((MetaName)2549257506, PsoDataType.String, 88, 7, 0) + ); + case (MetaName)1980648971: + return new PsoStructureInfo((MetaName)1980648971, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)2873713085, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2347950667, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2841351028, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)397262754, PsoDataType.Float, 20, 0, 0) + ); + case (MetaName)2790883352: + return new PsoStructureInfo((MetaName)2790883352, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)790968462, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2154193106, PsoDataType.Enum, 12, 0, (MetaName)3799765345) + ); + case MetaName.CEventExplosionHeard__Tunables: + return new PsoStructureInfo(MetaName.CEventExplosionHeard__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3413677046, PsoDataType.Float, 16, 0, 0) + ); + case MetaName.CRelationshipManager__Tunables: + return new PsoStructureInfo(MetaName.CRelationshipManager__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1828214902, PsoDataType.Bool, 16, 0, 0) + ); + case MetaName.CTaskAgitated__Tunables: + return new PsoStructureInfo(MetaName.CTaskAgitated__Tunables, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)67050499, PsoDataType.Structure, 16, 0, (MetaName)588501678), + new PsoStructureEntryInfo((MetaName)3284365585, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1549370724, PsoDataType.Float, 36, 0, 0) + ); + case (MetaName)588501678: + return new PsoStructureInfo((MetaName)588501678, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)4197530443, PsoDataType.Bool, 9, 0, 0), + new PsoStructureEntryInfo((MetaName)2753590613, PsoDataType.Bool, 10, 0, 0), + new PsoStructureEntryInfo((MetaName)3024574816, PsoDataType.Bool, 11, 0, 0) + ); + case MetaName.CTaskConfront__Tunables: + return new PsoStructureInfo(MetaName.CTaskConfront__Tunables, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)172591904, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3291058825, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1348357381, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)466062419, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2212321440, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2214254758, PsoDataType.Float, 36, 0, 0) + ); + case MetaName.CTaskSmartFlee__Tunables: + return new PsoStructureInfo(MetaName.CTaskSmartFlee__Tunables, 0, 0, 136, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2976849785, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2923989237, PsoDataType.Bool, 17, 0, 0), + new PsoStructureEntryInfo((MetaName)964747565, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2588997912, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3847831913, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)182226933, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3494668944, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)55450154, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1156561437, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2850307001, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)4172340609, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)916666022, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)1653710895, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2200934401, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)1946412733, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)1422617106, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)4172879726, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)2520530295, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)1376968536, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)3487053313, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)3267921887, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)2049624973, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)1276762529, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)225841828, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)3858374889, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)9265257, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)882826582, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)945475130, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)909291779, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)325049815, PsoDataType.SInt, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)4045684189, PsoDataType.Bool, 132, 0, 0) + ); + case MetaName.CTaskScenarioFlee__Tunables: + return new PsoStructureInfo(MetaName.CTaskScenarioFlee__Tunables, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1574250361, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2790363538, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2543804780, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3314827784, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3546053113, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1817496588, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1578763478, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)586057169, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)3328108206, PsoDataType.UInt, 48, 0, 0) + ); + case MetaName.CTaskExhaustedFlee__Tunables: + return new PsoStructureInfo(MetaName.CTaskExhaustedFlee__Tunables, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3024832208, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3136810971, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2366160443, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2348909882, PsoDataType.Float, 28, 0, 0) + ); + case MetaName.CTaskWalkAway__Tunables: + return new PsoStructureInfo(MetaName.CTaskWalkAway__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2538781855, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)368954988, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.CTaskGrowlAndFlee__Tunables: + return new PsoStructureInfo(MetaName.CTaskGrowlAndFlee__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1024232437, PsoDataType.Float, 16, 0, 0) + ); + case MetaName.CTaskIntimidate__Tunables: + return new PsoStructureInfo(MetaName.CTaskIntimidate__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)920671881, PsoDataType.Bool, 16, 0, 0) + ); + case MetaName.CTaskReactAndFlee__Tunables: + return new PsoStructureInfo(MetaName.CTaskReactAndFlee__Tunables, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)859826315, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2916287204, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)198397458, PsoDataType.Bool, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3275732457, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3320627039, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2030474037, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1240074404, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1154906885, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2653769818, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1359604368, PsoDataType.Float, 52, 0, 0) + ); + case MetaName.CTaskReactInDirection__Tunables: + return new PsoStructureInfo(MetaName.CTaskReactInDirection__Tunables, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0) + ); + case MetaName.CTaskReactToExplosion__Tunables: + return new PsoStructureInfo(MetaName.CTaskReactToExplosion__Tunables, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1811470108, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1218603971, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2034399215, PsoDataType.Float, 24, 0, 0) + ); + case MetaName.CTaskReactToImminentExplosion__Tunables: + return new PsoStructureInfo(MetaName.CTaskReactToImminentExplosion__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1872481699, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1218603971, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.CTaskShockingEvent__Tunables: + return new PsoStructureInfo(MetaName.CTaskShockingEvent__Tunables, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1379047521, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)40347237, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3006329763, PsoDataType.Float, 24, 0, 0) + ); + case MetaName.CTaskShockingEventGoto__Tunables: + return new PsoStructureInfo(MetaName.CTaskShockingEventGoto__Tunables, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3622532239, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3859213332, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)803081093, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2347754539, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1071466356, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1440512567, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1670586696, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)3333208061, PsoDataType.Float, 44, 0, 0) + ); + case MetaName.CTaskShockingEventHurryAway__Tunables: + return new PsoStructureInfo(MetaName.CTaskShockingEventHurryAway__Tunables, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1706779012, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2723841400, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)821642865, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3706002780, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1757042582, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1713122871, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)551070027, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2458557466, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2097584563, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1339551933, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)2071699275, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)2708798326, PsoDataType.UInt, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2385841716, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)1980022811, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)3508977239, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)4026550489, PsoDataType.Float, 76, 0, 0) + ); + case MetaName.CTaskShockingEventWatch__Tunables: + return new PsoStructureInfo(MetaName.CTaskShockingEventWatch__Tunables, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3193923873, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1236817557, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3056724293, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2758358422, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1440458015, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)334429677, PsoDataType.Float, 36, 0, 0) + ); + case MetaName.CTaskShockingEventReact__Tunables: + return new PsoStructureInfo(MetaName.CTaskShockingEventReact__Tunables, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3607448121, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2265632345, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3891776628, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2301662345, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1003164741, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1213974814, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)160395732, PsoDataType.Float, 40, 0, 0) + ); + case MetaName.CTaskShockingEventBackAway__Tunables: + return new PsoStructureInfo(MetaName.CTaskShockingEventBackAway__Tunables, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1871838464, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3690289360, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3382384728, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)780063382, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)4112548279, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1858039250, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)2509346908, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2592101241, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)3402152282, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)3550098093, PsoDataType.Float, 52, 0, 0) + ); + case MetaName.CTaskShockingEventReactToAircraft__Tunables: + return new PsoStructureInfo(MetaName.CTaskShockingEventReactToAircraft__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3695837863, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)317231619, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.CTaskShockingPoliceInvestigate__Tunables: + return new PsoStructureInfo(MetaName.CTaskShockingPoliceInvestigate__Tunables, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2347754539, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1440512567, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)162655462, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2782271258, PsoDataType.UInt, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2066926080, PsoDataType.UInt, 32, 0, 0) + ); + case MetaName.CTaskShockingEventStopAndStare__Tunables: + return new PsoStructureInfo(MetaName.CTaskShockingEventStopAndStare__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)157002911, PsoDataType.Float, 16, 0, 0) + ); + case MetaName.CTaskShove__Tunables: + return new PsoStructureInfo(MetaName.CTaskShove__Tunables, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)67050499, PsoDataType.Structure, 16, 0, (MetaName)838054604), + new PsoStructureEntryInfo(MetaName.MaxDistance, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1241644828, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1978969151, PsoDataType.Float, 40, 0, 0) + ); + case (MetaName)838054604: + return new PsoStructureInfo((MetaName)838054604, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)3061072832, PsoDataType.Bool, 9, 0, 0) + ); + case MetaName.CTaskShoved__Tunables: + return new PsoStructureInfo(MetaName.CTaskShoved__Tunables, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0) + ); + case MetaName.CScenarioClipHelper__Tunables: + return new PsoStructureInfo(MetaName.CScenarioClipHelper__Tunables, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0) + ); + case MetaName.CVehicleScenarioManager__AttractorTuning__Tunables: + return new PsoStructureInfo(MetaName.CVehicleScenarioManager__AttractorTuning__Tunables, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)745911052, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)819069056, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1250203641, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)722704686, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)575445590, PsoDataType.SInt, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3415237781, PsoDataType.UInt, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)884187023, PsoDataType.UInt, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)281170344, PsoDataType.UInt, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2108114328, PsoDataType.UInt, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)3561917245, PsoDataType.UShort, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)865654234, PsoDataType.UShort, 54, 0, 0) + ); + case MetaName.CTaskCoupleScenario__Tunables: + return new PsoStructureInfo(MetaName.CTaskCoupleScenario__Tunables, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)810755963, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1791608761, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2300691636, PsoDataType.Float, 24, 0, 0) + ); + case MetaName.CTaskCowerScenario__Tunables: + return new PsoStructureInfo(MetaName.CTaskCowerScenario__Tunables, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2722629246, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)829574868, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1673427683, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)619528635, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1865528825, PsoDataType.UInt, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3437799044, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3668424542, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1966243013, PsoDataType.UInt, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)263563417, PsoDataType.UInt, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1944104863, PsoDataType.UInt, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)2271449308, PsoDataType.UInt, 56, 0, 0) + ); + case MetaName.CTaskUseScenario__Tunables: + return new PsoStructureInfo(MetaName.CTaskUseScenario__Tunables, 0, 0, 152, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)652219771, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3465127340, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)365892591, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)788433631, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)394374347, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1712423423, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1532444703, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2055075186, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)4290867387, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)695930878, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)1136341997, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)2568949102, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2442429563, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)884159106, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)851779527, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)5170829, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)643049118, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)2913322701, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)3638708710, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)3090913677, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)3609661010, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)4087190680, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)1822017225, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)1178169613, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)1596520127, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)3452202501, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)3836158716, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)699708569, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)790344800, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)2090002900, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)1666523442, PsoDataType.SInt, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)471524408, PsoDataType.SInt, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)2237139323, PsoDataType.SByte, 144, 0, 0) + ); + case MetaName.CTaskUseVehicleScenario__Tunables: + return new PsoStructureInfo(MetaName.CTaskUseVehicleScenario__Tunables, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)157002911, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2115224183, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2685821768, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2686150441, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2409655710, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3935882297, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)370645093, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2931101691, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)3249924134, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1118749782, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)1499169614, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)26476902, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)1252284298, PsoDataType.UShort, 64, 0, 0) + ); + case MetaName.CTaskWanderingScenario__Tunables: + return new PsoStructureInfo(MetaName.CTaskWanderingScenario__Tunables, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1799405168, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1010415847, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)4287996365, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2212250161, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3384585290, PsoDataType.UInt, 32, 0, 0) + ); + case MetaName.CTaskPoliceOrderResponse__Tunables: + return new PsoStructureInfo(MetaName.CTaskPoliceOrderResponse__Tunables, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2597134309, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)408114095, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1059555640, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)847675324, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3069250390, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3640126549, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3243012891, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)683308669, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)527303977, PsoDataType.Float, 48, 0, 0) + ); + case MetaName.CTaskArrestPed__Tunables: + return new PsoStructureInfo(MetaName.CTaskArrestPed__Tunables, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3825720952, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)684815089, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1433360068, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1359250131, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2654770325, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1425198943, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)4218266421, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)305536610, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)605981827, PsoDataType.UInt, 48, 0, 0) + ); + case MetaName.CTaskSwatOrderResponse__Tunables: + return new PsoStructureInfo(MetaName.CTaskSwatOrderResponse__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3243012891, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)683308669, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.CTaskHeliOrderResponse__Tunables: + return new PsoStructureInfo(MetaName.CTaskHeliOrderResponse__Tunables, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3905663903, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)143141277, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)490178156, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2892876798, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3618878970, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3555374966, PsoDataType.Float, 36, 0, 0) + ); + case MetaName.CTaskWitness__Tunables: + return new PsoStructureInfo(MetaName.CTaskWitness__Tunables, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)897487244, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1736715102, PsoDataType.UInt, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3450986312, PsoDataType.UInt, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2062768994, PsoDataType.UInt, 28, 0, 0) + ); + case MetaName.CEventShocking__Tunables: + return new PsoStructureInfo(MetaName.CEventShocking__Tunables, 0, 0, 224, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.LifeTime, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2272290579, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2651939713, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)17870529, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1284602455, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)760739523, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)2651403585, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2181133548, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)162073420, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2978098349, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)1287855842, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)199132405, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)3010798658, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)424721387, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)4262514281, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)3859810396, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)3939134595, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)273885309, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)1169941758, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)3084950400, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)1926295578, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)2306714989, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)4002374438, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)3928192642, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)3384130276, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)449694767, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)946719330, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)2167383018, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)1941376054, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)1295611070, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)2937486448, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)3170606833, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)1805287691, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)564420500, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo((MetaName)2906908712, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)735659884, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)143794235, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)2597491379, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo((MetaName)1799800134, PsoDataType.UInt, 168, 0, 0), + new PsoStructureEntryInfo((MetaName)1621558076, PsoDataType.UInt, 172, 0, 0), + new PsoStructureEntryInfo((MetaName)1884622848, PsoDataType.String, 176, 7, 0), + new PsoStructureEntryInfo((MetaName)1372129940, PsoDataType.String, 180, 7, 0), + new PsoStructureEntryInfo(MetaName.Priority, PsoDataType.SInt, 184, 0, 0), + new PsoStructureEntryInfo((MetaName)1507389089, PsoDataType.Enum, 188, 0, (MetaName)1507389089), + new PsoStructureEntryInfo((MetaName)3664766217, PsoDataType.Bool, 192, 0, 0), + new PsoStructureEntryInfo((MetaName)1030055336, PsoDataType.Bool, 193, 0, 0), + new PsoStructureEntryInfo((MetaName)3215420778, PsoDataType.Bool, 194, 0, 0), + new PsoStructureEntryInfo((MetaName)387027865, PsoDataType.Bool, 195, 0, 0), + new PsoStructureEntryInfo((MetaName)1307368391, PsoDataType.Bool, 196, 0, 0), + new PsoStructureEntryInfo((MetaName)3611561302, PsoDataType.Bool, 197, 0, 0), + new PsoStructureEntryInfo((MetaName)1434985449, PsoDataType.Bool, 198, 0, 0), + new PsoStructureEntryInfo((MetaName)1461520922, PsoDataType.Bool, 199, 0, 0), + new PsoStructureEntryInfo((MetaName)3973997152, PsoDataType.Bool, 200, 0, 0), + new PsoStructureEntryInfo((MetaName)144280219, PsoDataType.Bool, 201, 0, 0), + new PsoStructureEntryInfo((MetaName)4035148525, PsoDataType.Bool, 202, 0, 0), + new PsoStructureEntryInfo(MetaName.IgnorePavementChecks, PsoDataType.Bool, 203, 0, 0), + new PsoStructureEntryInfo((MetaName)3118021097, PsoDataType.Bool, 204, 0, 0), + new PsoStructureEntryInfo((MetaName)3828609944, PsoDataType.Enum, 208, 0, (MetaName)1809724872), + new PsoStructureEntryInfo((MetaName)2309582193, PsoDataType.Bool, 212, 0, 0), + new PsoStructureEntryInfo((MetaName)1542742362, PsoDataType.Bool, 213, 0, 0), + new PsoStructureEntryInfo((MetaName)2924272020, PsoDataType.Bool, 214, 0, 0), + new PsoStructureEntryInfo((MetaName)3833488932, PsoDataType.Bool, 215, 0, 0), + new PsoStructureEntryInfo((MetaName)2404066730, PsoDataType.Bool, 216, 0, 0), + new PsoStructureEntryInfo((MetaName)409978509, PsoDataType.Bool, 217, 0, 0) + ); + case MetaName.CSituationalClipSetStreamer__Tunables: + return new PsoStructureInfo(MetaName.CSituationalClipSetStreamer__Tunables, 0, 0, 88, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)394023184, PsoDataType.Structure, 16, 0, (MetaName)2341712397), + new PsoStructureEntryInfo((MetaName)603736164, PsoDataType.Structure, 48, 0, (MetaName)178027873) + ); + case (MetaName)2341712397: + return new PsoStructureInfo((MetaName)2341712397, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.ClipSet, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2787113182, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1095110195), + new PsoStructureEntryInfo(MetaName.Variations, PsoDataType.Array, 16, 0, (MetaName)2) + ); + case (MetaName)178027873: + return new PsoStructureInfo((MetaName)178027873, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)2755047550, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3696584734, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo((MetaName)4027846555, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)4017342285, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo((MetaName)3482724306, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)551602790, PsoDataType.String, 28, 7, 0), + new PsoStructureEntryInfo((MetaName)2838084369, PsoDataType.Float, 32, 0, 0) + ); + case (MetaName)1095110195: + return new PsoStructureInfo((MetaName)1095110195, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.ClipSet, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3169257000, PsoDataType.Bool, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.Chances, PsoDataType.Float, 16, 0, 0) + ); + case MetaName.CEventFootStepHeard__Tunables: + return new PsoStructureInfo(MetaName.CEventFootStepHeard__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)564420500, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2906908712, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.CTacticalAnalysisNavMeshPoints__Tunables: + return new PsoStructureInfo(MetaName.CTacticalAnalysisNavMeshPoints__Tunables, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.MinDistance, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistance, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2084497360, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)765310, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)967712511, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2714855430, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)861953935, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2410167662, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)579362303, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)72559400, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)2086611921, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)1731877118, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)1638764838, PsoDataType.SInt, 64, 0, 0) + ); + case MetaName.CTacticalAnalysisCoverPointSearch__Tunables: + return new PsoStructureInfo(MetaName.CTacticalAnalysisCoverPointSearch__Tunables, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3333387022, PsoDataType.Structure, 16, 0, (MetaName)850484111), + new PsoStructureEntryInfo((MetaName)1815040418, PsoDataType.SInt, 48, 0, 0) + ); + case (MetaName)850484111: + return new PsoStructureInfo((MetaName)850484111, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)1339021909, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1420062864, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2637460797, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)4180445694, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1883452103, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2980335366, PsoDataType.Float, 28, 0, 0) + ); + case MetaName.CTacticalAnalysisCoverPoints__Tunables: + return new PsoStructureInfo(MetaName.CTacticalAnalysisCoverPoints__Tunables, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)4233283909, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)110388555, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2124766118, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2973796969, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)967712511, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2714855430, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1814559575, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2410167662, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)1638764838, PsoDataType.SInt, 48, 0, 0) + ); + case MetaName.CTacticalAnalysis__Tunables: + return new PsoStructureInfo(MetaName.CTacticalAnalysis__Tunables, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1572599387, PsoDataType.Structure, 16, 0, (MetaName)1310298123), + new PsoStructureEntryInfo((MetaName)67050499, PsoDataType.Structure, 40, 0, (MetaName)1230349399), + new PsoStructureEntryInfo((MetaName)3555945363, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)3815175242, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)1570040321, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 76, 0, 0) + ); + case (MetaName)1310298123: + return new PsoStructureInfo((MetaName)1310298123, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)1083242382, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)3390301810, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)688870759, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1564203967, PsoDataType.Float, 20, 0, 0) + ); + case (MetaName)1230349399: + return new PsoStructureInfo((MetaName)1230349399, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)3053199956, PsoDataType.Bool, 9, 0, 0), + new PsoStructureEntryInfo((MetaName)2288844751, PsoDataType.Bool, 10, 0, 0), + new PsoStructureEntryInfo(MetaName.Position, PsoDataType.Bool, 11, 0, 0), + new PsoStructureEntryInfo((MetaName)682590761, PsoDataType.Bool, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)743861760, PsoDataType.Bool, 13, 0, 0), + new PsoStructureEntryInfo((MetaName)4030133267, PsoDataType.Bool, 14, 0, 0), + new PsoStructureEntryInfo((MetaName)3709090817, PsoDataType.Bool, 15, 0, 0), + new PsoStructureEntryInfo((MetaName)3663294436, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3702072617, PsoDataType.Bool, 17, 0, 0), + new PsoStructureEntryInfo((MetaName)728351840, PsoDataType.Bool, 18, 0, 0) + ); + case MetaName.CTaskVehicleApproach__Tunables: + return new PsoStructureInfo(MetaName.CTaskVehicleApproach__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1354574680, PsoDataType.Float, 16, 0, 0) + ); + case MetaName.CTaskVehicleBlock__Tunables: + return new PsoStructureInfo(MetaName.CTaskVehicleBlock__Tunables, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3093267843, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3739118103, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3139639651, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2229910851, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3717085729, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1577260290, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)4094305061, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1212941547, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)737095977, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1917200737, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)935837869, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)67415689, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2713817702, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)3682638304, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)1195737890, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)2961114452, PsoDataType.Float, 76, 0, 0) + ); + case MetaName.CTaskVehicleBlockCruiseInFront__Tunables: + return new PsoStructureInfo(MetaName.CTaskVehicleBlockCruiseInFront__Tunables, 0, 0, 128, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1934123857, PsoDataType.Structure, 16, 0, (MetaName)3985328803), + new PsoStructureEntryInfo((MetaName)67050499, PsoDataType.Structure, 56, 0, (MetaName)999261493), + new PsoStructureEntryInfo((MetaName)474269749, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)3717085729, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)1577260290, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)2841547079, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)4284975454, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)2085906895, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)2016261853, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)2690108566, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)2913237777, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)1514235773, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)2070026726, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)2635294172, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)4219085548, PsoDataType.Float, 120, 0, 0) + ); + case (MetaName)3985328803: + return new PsoStructureInfo((MetaName)3985328803, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)2519270732, PsoDataType.Structure, 8, 0, (MetaName)1883924946) + ); + case (MetaName)1883924946: + return new PsoStructureInfo((MetaName)1883924946, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)2241187664, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)3879165256, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)4154217054, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1352021757, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)977032494, PsoDataType.Float, 24, 0, 0) + ); + case (MetaName)999261493: + return new PsoStructureInfo((MetaName)999261493, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)217069262, PsoDataType.Bool, 9, 0, 0), + new PsoStructureEntryInfo((MetaName)3041273548, PsoDataType.Bool, 10, 0, 0), + new PsoStructureEntryInfo((MetaName)2932215080, PsoDataType.Bool, 11, 0, 0), + new PsoStructureEntryInfo((MetaName)1537468920, PsoDataType.Bool, 12, 0, 0) + ); + case MetaName.CTaskVehicleBlockBrakeInFront__Tunables: + return new PsoStructureInfo(MetaName.CTaskVehicleBlockBrakeInFront__Tunables, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1751757949, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1340388073, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1369613048, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3279921996, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)110293208, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2361783730, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1786731261, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1580566536, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)1823449253, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)3954141229, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3775809407, PsoDataType.Float, 56, 0, 0) + ); + case MetaName.CTaskVehicleBlockBackAndForth__Tunables: + return new PsoStructureInfo(MetaName.CTaskVehicleBlockBackAndForth__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2515377448, PsoDataType.Float, 16, 0, 0) + ); + case MetaName.CTaskVehicleFlee__Tunables: + return new PsoStructureInfo(MetaName.CTaskVehicleFlee__Tunables, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1825428191, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2981979817, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1907731990, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2288728578, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1095332633, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3303023161, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3189387953, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)3164535731, PsoDataType.Float, 44, 0, 0) + ); + case MetaName.CTaskVehicleCruiseBoat__Tunables: + return new PsoStructureInfo(MetaName.CTaskVehicleCruiseBoat__Tunables, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)330577879, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3620765866, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2679850916, PsoDataType.Float, 24, 0, 0) + ); + case MetaName.CTaskVehicleDeadDriver__Tunables: + return new PsoStructureInfo(MetaName.CTaskVehicleDeadDriver__Tunables, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3588251070, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3605734753, PsoDataType.Enum, 20, 0, (MetaName)888350649), + new PsoStructureEntryInfo((MetaName)168285857, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3758934792, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1718221861, PsoDataType.Enum, 32, 0, (MetaName)2055586340), + new PsoStructureEntryInfo((MetaName)1568208081, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)64513465, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2512256335, PsoDataType.Enum, 44, 0, (MetaName)3374036042), + new PsoStructureEntryInfo((MetaName)3259827294, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1676250682, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)1151983218, PsoDataType.Enum, 56, 0, (MetaName)4001255574) + ); + case MetaName.CTaskVehicleFleeBoat__Tunables: + return new PsoStructureInfo(MetaName.CTaskVehicleFleeBoat__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)191817975, PsoDataType.Float, 16, 0, 0) + ); + case MetaName.CTaskVehicleCrash__Tunables: + return new PsoStructureInfo(MetaName.CTaskVehicleCrash__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2743225815, PsoDataType.Float, 16, 0, 0) + ); + case MetaName.CTaskVehicleGoToPointWithAvoidanceAutomobile__Tunables: + return new PsoStructureInfo(MetaName.CTaskVehicleGoToPointWithAvoidanceAutomobile__Tunables, 0, 0, 104, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)10772112, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3101610967, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3640450256, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2435522850, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)94249946, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3105879189, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)315595788, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)252789847, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)724928304, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1592953719, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)1319056930, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3043121072, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2493712752, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)1721238833, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)44796921, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)462717652, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)508750981, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)2304242044, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)3887812374, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)4090325919, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)2371258779, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)1016024123, PsoDataType.Float, 100, 0, 0) + ); + case MetaName.CTaskVehicleGoToBoat__Tunables: + return new PsoStructureInfo(MetaName.CTaskVehicleGoToBoat__Tunables, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3943951078, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)157944410, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1396210696, PsoDataType.Float, 24, 0, 0) + ); + case MetaName.CTaskVehicleGoToHelicopter__Tunables: + return new PsoStructureInfo(MetaName.CTaskVehicleGoToHelicopter__Tunables, 0, 0, 152, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2171885531, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3454970252, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)139171723, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2384591971, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2222663190, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)814841404, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)664693842, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)922081581, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)1366920760, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)3266080932, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)2573768812, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)974150069, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)528950431, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)4280868953, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)3367104276, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)369724672, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)2043681017, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)1412479638, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)1518108829, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)3036720225, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)1623304217, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)1597259961, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)3551843612, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)2436197334, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)1438517312, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)444775360, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)3623227512, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)3009403254, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)1335540990, PsoDataType.SInt, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)892450737, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)1504259891, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)2393149687, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)47710483, PsoDataType.UInt, 144, 0, 0) + ); + case MetaName.CTaskVehicleGoToPlane__Tunables: + return new PsoStructureInfo(MetaName.CTaskVehicleGoToPlane__Tunables, 0, 0, 112, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)54155191, PsoDataType.SInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2996388896, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3035684229, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1673702936, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1731534963, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2986015914, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)502368761, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2791696823, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)4244700983, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2569057742, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)682642275, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)2384591971, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)922081581, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)1366920760, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)3266080932, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)2427028852, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)665138033, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)1584865556, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)3696891742, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)1158342846, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)2739053876, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)2573768812, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)974150069, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)528950431, PsoDataType.Float, 108, 0, 0) + ); + case MetaName.CTaskVehicleLandPlane__Tunables: + return new PsoStructureInfo(MetaName.CTaskVehicleLandPlane__Tunables, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)4110448569, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)4081532692, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3067654195, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)564764161, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3983307371, PsoDataType.Float, 32, 0, 0) + ); + case MetaName.CTaskVehicleMissionBase__Tunables: + return new PsoStructureInfo(MetaName.CTaskVehicleMissionBase__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2478597497, PsoDataType.UInt, 16, 0, 0) + ); + case MetaName.CTaskVehicleParkNew__Tunables: + return new PsoStructureInfo(MetaName.CTaskVehicleParkNew__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1316038287, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)4245532224, PsoDataType.UByte, 20, 0, 0) + ); + case MetaName.CTaskVehiclePlaneChase__Tunables: + return new PsoStructureInfo(MetaName.CTaskVehiclePlaneChase__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1724998945, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSpeed, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.CTaskVehiclePullAlongside__Tunables: + return new PsoStructureInfo(MetaName.CTaskVehiclePullAlongside__Tunables, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3717085729, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1577260290, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2358940861, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1143414935, PsoDataType.Float, 28, 0, 0) + ); + case MetaName.CTaskVehiclePursue__Tunables: + return new PsoStructureInfo(MetaName.CTaskVehiclePursue__Tunables, 0, 0, 120, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1925470428, PsoDataType.Structure, 16, 0, (MetaName)42267357), + new PsoStructureEntryInfo((MetaName)4083276309, PsoDataType.Structure, 40, 0, (MetaName)42267357), + new PsoStructureEntryInfo((MetaName)2632846246, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)3533260791, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)2025348338, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)1979699436, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)820982755, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)2246107998, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)3659936455, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)628879039, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)2850579408, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)1301007976, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)2789360544, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)2986369414, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)1150609584, PsoDataType.Float, 112, 0, 0) + ); + case (MetaName)42267357: + return new PsoStructureInfo((MetaName)42267357, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)2782043564, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)4282800535, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)1240074404, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1154906885, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.CTaskVehicleRam__Tunables: + return new PsoStructureInfo(MetaName.CTaskVehicleRam__Tunables, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3890964100, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1492713734, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2075820886, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3537928320, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2134482011, PsoDataType.Float, 32, 0, 0) + ); + case MetaName.CTaskVehicleShotTire__Tunables: + return new PsoStructureInfo(MetaName.CTaskVehicleShotTire__Tunables, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)4163863357, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1487496534, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)601372446, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)403672092, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2183062202, PsoDataType.Float, 32, 0, 0) + ); + case MetaName.CTaskVehicleSpinOut__Tunables: + return new PsoStructureInfo(MetaName.CTaskVehicleSpinOut__Tunables, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3717085729, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1577260290, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3083236924, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2926405391, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)730064409, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1688870175, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3250501977, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)992439102, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)514198685, PsoDataType.Float, 48, 0, 0) + ); + case MetaName.CPrioritizedClipSetRequestManager__Tunables: + return new PsoStructureInfo(MetaName.CPrioritizedClipSetRequestManager__Tunables, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2797308174, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2514516235, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3956347885, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1337224709, PsoDataType.SInt, 32, 0, 0) + ); + case MetaName.CVehicleClipRequestHelper__Tunables: + return new PsoStructureInfo(MetaName.CVehicleClipRequestHelper__Tunables, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)868829697, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2354829088, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)475173943, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3216270742, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3089390809, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1000280571, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)2704081606, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1599003681, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)3950304880, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo((MetaName)3726126567, PsoDataType.Bool, 46, 0, 0), + new PsoStructureEntryInfo((MetaName)774087018, PsoDataType.Bool, 47, 0, 0), + new PsoStructureEntryInfo((MetaName)2305444416, PsoDataType.Bool, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)3147840041, PsoDataType.Bool, 49, 0, 0), + new PsoStructureEntryInfo((MetaName)4236803127, PsoDataType.Bool, 50, 0, 0), + new PsoStructureEntryInfo((MetaName)1924248769, PsoDataType.Bool, 51, 0, 0) + ); + case MetaName.CTaskInVehicleBasic__Tunables: + return new PsoStructureInfo(MetaName.CTaskInVehicleBasic__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)156254164, PsoDataType.Float, 16, 0, 0) + ); + case MetaName.CTaskPlayerDrive__Tunables: + return new PsoStructureInfo(MetaName.CTaskPlayerDrive__Tunables, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2280670656, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)324788932, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2089726799, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)897691679, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2863410559, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2485839112, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3877124457, PsoDataType.Float, 40, 0, 0) + ); + case MetaName.CTaskCarReactToVehicleCollision__Tunables: + return new PsoStructureInfo(MetaName.CTaskCarReactToVehicleCollision__Tunables, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1251865784, PsoDataType.Structure, 16, 0, (MetaName)3933935552), + new PsoStructureEntryInfo((MetaName)2744941697, PsoDataType.Float, 56, 0, 0) + ); + case (MetaName)3933935552: + return new PsoStructureInfo((MetaName)3933935552, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)3649567479, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)512026668, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2890274297, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)4171049765, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1871327732, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2395375846, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTime, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTime, PsoDataType.Float, 36, 0, 0) + ); + case MetaName.CTaskEnterVehicle__Tunables: + return new PsoStructureInfo(MetaName.CTaskEnterVehicle__Tunables, 0, 0, 408, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2341452292, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)583417184, PsoDataType.Bool, 17, 0, 0), + new PsoStructureEntryInfo((MetaName)4238205678, PsoDataType.Bool, 18, 0, 0), + new PsoStructureEntryInfo((MetaName)1131247892, PsoDataType.Bool, 19, 0, 0), + new PsoStructureEntryInfo((MetaName)2336701139, PsoDataType.Bool, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)609083866, PsoDataType.Bool, 21, 0, 0), + new PsoStructureEntryInfo((MetaName)1336261201, PsoDataType.Bool, 22, 0, 0), + new PsoStructureEntryInfo((MetaName)454797365, PsoDataType.Bool, 23, 0, 0), + new PsoStructureEntryInfo((MetaName)3299231528, PsoDataType.Bool, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2101205108, PsoDataType.Bool, 25, 0, 0), + new PsoStructureEntryInfo((MetaName)2067979515, PsoDataType.Bool, 26, 0, 0), + new PsoStructureEntryInfo((MetaName)2377829258, PsoDataType.Bool, 27, 0, 0), + new PsoStructureEntryInfo((MetaName)192421777, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)509809270, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3899294511, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1556614668, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)667864712, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)3475018274, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1021030104, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)132682005, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)2541408088, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2420294542, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)3006117682, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)3341844967, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)1493908582, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)428832696, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)3626807160, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)1828436652, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)3911832280, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)354147533, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)4195927131, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)2320755313, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)1933869525, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)58162742, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)1089127336, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)2264946778, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)706443375, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)3597820233, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)2664369195, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)3214386681, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)3395959775, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)4109701939, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)149985112, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo((MetaName)3699582686, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)3408785399, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)492953913, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)3831454313, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo((MetaName)2387057259, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo((MetaName)3555981726, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo((MetaName)820682935, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo((MetaName)1024103431, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo((MetaName)4256000061, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo((MetaName)356015597, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo((MetaName)1607735267, PsoDataType.Float, 192, 0, 0), + new PsoStructureEntryInfo((MetaName)1506926002, PsoDataType.Float, 196, 0, 0), + new PsoStructureEntryInfo((MetaName)1172728662, PsoDataType.Float, 200, 0, 0), + new PsoStructureEntryInfo((MetaName)4222207562, PsoDataType.Float, 204, 0, 0), + new PsoStructureEntryInfo((MetaName)1484783860, PsoDataType.Float, 208, 0, 0), + new PsoStructureEntryInfo((MetaName)1118824342, PsoDataType.Float, 212, 0, 0), + new PsoStructureEntryInfo((MetaName)4028760366, PsoDataType.Float, 216, 0, 0), + new PsoStructureEntryInfo((MetaName)2427558104, PsoDataType.Float, 220, 0, 0), + new PsoStructureEntryInfo((MetaName)2206944099, PsoDataType.Float, 224, 0, 0), + new PsoStructureEntryInfo((MetaName)1348653070, PsoDataType.Float, 228, 0, 0), + new PsoStructureEntryInfo((MetaName)114247175, PsoDataType.Float, 232, 0, 0), + new PsoStructureEntryInfo((MetaName)3271021322, PsoDataType.Float, 236, 0, 0), + new PsoStructureEntryInfo((MetaName)2555911368, PsoDataType.Float, 240, 0, 0), + new PsoStructureEntryInfo((MetaName)3839836820, PsoDataType.Float, 244, 0, 0), + new PsoStructureEntryInfo((MetaName)2153531751, PsoDataType.Float, 248, 0, 0), + new PsoStructureEntryInfo((MetaName)1243230599, PsoDataType.Float, 252, 0, 0), + new PsoStructureEntryInfo((MetaName)3836837046, PsoDataType.Float, 256, 0, 0), + new PsoStructureEntryInfo((MetaName)3089447490, PsoDataType.Float, 260, 0, 0), + new PsoStructureEntryInfo((MetaName)3652074424, PsoDataType.Float, 264, 0, 0), + new PsoStructureEntryInfo((MetaName)910622893, PsoDataType.Float, 268, 0, 0), + new PsoStructureEntryInfo((MetaName)2172495855, PsoDataType.Bool, 272, 0, 0), + new PsoStructureEntryInfo((MetaName)1615640364, PsoDataType.Float, 276, 0, 0), + new PsoStructureEntryInfo((MetaName)754839673, PsoDataType.Float, 280, 0, 0), + new PsoStructureEntryInfo((MetaName)3439162962, PsoDataType.Float, 284, 0, 0), + new PsoStructureEntryInfo((MetaName)2050658669, PsoDataType.Float, 288, 0, 0), + new PsoStructureEntryInfo((MetaName)2525435888, PsoDataType.Float, 292, 0, 0), + new PsoStructureEntryInfo((MetaName)3760186281, PsoDataType.Float, 296, 0, 0), + new PsoStructureEntryInfo((MetaName)4219594699, PsoDataType.Float, 300, 0, 0), + new PsoStructureEntryInfo((MetaName)3663548072, PsoDataType.Float, 304, 0, 0), + new PsoStructureEntryInfo((MetaName)119275101, PsoDataType.Float, 308, 0, 0), + new PsoStructureEntryInfo((MetaName)2217815195, PsoDataType.UInt, 312, 0, 0), + new PsoStructureEntryInfo((MetaName)2689559592, PsoDataType.UInt, 316, 0, 0), + new PsoStructureEntryInfo((MetaName)2624279103, PsoDataType.String, 320, 7, 0), + new PsoStructureEntryInfo((MetaName)3431653792, PsoDataType.String, 324, 7, 0), + new PsoStructureEntryInfo((MetaName)1755247816, PsoDataType.String, 328, 7, 0), + new PsoStructureEntryInfo((MetaName)1983954745, PsoDataType.String, 332, 7, 0), + new PsoStructureEntryInfo((MetaName)2379662115, PsoDataType.String, 336, 7, 0), + new PsoStructureEntryInfo((MetaName)2061479056, PsoDataType.String, 340, 7, 0), + new PsoStructureEntryInfo((MetaName)807201844, PsoDataType.String, 344, 7, 0), + new PsoStructureEntryInfo((MetaName)1982208210, PsoDataType.String, 348, 7, 0), + new PsoStructureEntryInfo((MetaName)1866652328, PsoDataType.String, 352, 7, 0), + new PsoStructureEntryInfo((MetaName)3508843174, PsoDataType.String, 356, 7, 0), + new PsoStructureEntryInfo((MetaName)2993991731, PsoDataType.String, 360, 7, 0), + new PsoStructureEntryInfo((MetaName)4167965920, PsoDataType.String, 364, 7, 0), + new PsoStructureEntryInfo((MetaName)1857752806, PsoDataType.String, 368, 7, 0), + new PsoStructureEntryInfo((MetaName)536807372, PsoDataType.String, 372, 7, 0), + new PsoStructureEntryInfo((MetaName)298521545, PsoDataType.String, 376, 7, 0), + new PsoStructureEntryInfo((MetaName)3045129247, PsoDataType.String, 380, 7, 0), + new PsoStructureEntryInfo((MetaName)2509236171, PsoDataType.String, 384, 7, 0), + new PsoStructureEntryInfo((MetaName)939217889, PsoDataType.String, 388, 7, 0), + new PsoStructureEntryInfo((MetaName)3905015036, PsoDataType.String, 392, 7, 0), + new PsoStructureEntryInfo((MetaName)3309036906, PsoDataType.String, 396, 7, 0), + new PsoStructureEntryInfo((MetaName)3854657159, PsoDataType.Bool, 400, 0, 0), + new PsoStructureEntryInfo((MetaName)1405627810, PsoDataType.Bool, 401, 0, 0), + new PsoStructureEntryInfo((MetaName)2067860370, PsoDataType.Float, 404, 0, 0) + ); + case MetaName.CTaskEnterVehicleAlign__Tunables: + return new PsoStructureInfo(MetaName.CTaskEnterVehicleAlign__Tunables, 0, 0, 136, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1827422982, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3670985951, PsoDataType.Bool, 17, 0, 0), + new PsoStructureEntryInfo((MetaName)142881218, PsoDataType.Bool, 18, 0, 0), + new PsoStructureEntryInfo((MetaName)2981016968, PsoDataType.Bool, 19, 0, 0), + new PsoStructureEntryInfo((MetaName)3699526709, PsoDataType.Bool, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2679767269, PsoDataType.Bool, 21, 0, 0), + new PsoStructureEntryInfo((MetaName)1175770299, PsoDataType.Bool, 22, 0, 0), + new PsoStructureEntryInfo((MetaName)1408347563, PsoDataType.Bool, 23, 0, 0), + new PsoStructureEntryInfo((MetaName)86992154, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3669742245, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2555216789, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2551900503, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1557395660, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1946397601, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)996663150, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2661149439, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)717764835, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)1305634921, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)3904376533, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)2898549300, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)2167006115, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)502763290, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)2507965951, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)2870050188, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)3484537704, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)840729400, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)4264959731, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)452418176, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)2300124116, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)4059105444, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)3090504223, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)2571589718, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)24914513, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)158501595, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)1420291822, PsoDataType.Float, 128, 0, 0) + ); + case MetaName.CTaskOpenVehicleDoorFromOutside__Tunables: + return new PsoStructureInfo(MetaName.CTaskOpenVehicleDoorFromOutside__Tunables, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2861302055, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)462320915, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1506371742, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2878218804, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2631224923, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3370177558, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)350729378, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1408201742, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)3933910603, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)474312049, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)757048139, PsoDataType.String, 56, 7, 0), + new PsoStructureEntryInfo((MetaName)3849261684, PsoDataType.String, 60, 7, 0), + new PsoStructureEntryInfo((MetaName)118829386, PsoDataType.String, 64, 7, 0), + new PsoStructureEntryInfo((MetaName)2087055883, PsoDataType.String, 68, 7, 0), + new PsoStructureEntryInfo((MetaName)4187378175, PsoDataType.String, 72, 7, 0), + new PsoStructureEntryInfo((MetaName)26377711, PsoDataType.String, 76, 7, 0) + ); + case MetaName.CTaskCloseVehicleDoorFromInside__Tunables: + return new PsoStructureInfo(MetaName.CTaskCloseVehicleDoorFromInside__Tunables, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)734813238, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2181733270, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)444144670, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3092993621, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)932416743, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2057785224, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)2238708643, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2994929358, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)763167134, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)3960625221, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)1752043243, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)480380605, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2802682741, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)2696374786, PsoDataType.Float, 68, 0, 0) + ); + case MetaName.CTaskEnterVehicleSeat__Tunables: + return new PsoStructureInfo(MetaName.CTaskEnterVehicleSeat__Tunables, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)52645552, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2759646652, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1776336338, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo((MetaName)923017874, PsoDataType.String, 28, 7, 0), + new PsoStructureEntryInfo((MetaName)2521753678, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo((MetaName)2593531090, PsoDataType.String, 36, 7, 0), + new PsoStructureEntryInfo((MetaName)427276467, PsoDataType.String, 40, 7, 0) + ); + case MetaName.CTaskExitVehicle__Tunables: + return new PsoStructureInfo(MetaName.CTaskExitVehicle__Tunables, 0, 0, 88, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3885866805, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2885633587, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3090579301, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1384973258, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3420274436, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)873885486, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)95286584, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2378492841, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)676285031, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)4256472352, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3093573752, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)1266778169, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)52645552, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)3107868104, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)1326750951, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)2102914796, PsoDataType.UInt, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)2758806077, PsoDataType.String, 80, 7, 0), + new PsoStructureEntryInfo((MetaName)374589004, PsoDataType.String, 84, 7, 0) + ); + case MetaName.CTaskExitVehicleSeat__Tunables: + return new PsoStructureInfo(MetaName.CTaskExitVehicleSeat__Tunables, 0, 0, 232, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3909498748, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1948944372, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3235771585, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)343578348, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3752389553, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)4096940896, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1332340783, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1768336421, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)553575729, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2218133629, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3739360652, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)2470385571, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2090607393, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)91246296, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)1443265623, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)828622422, PsoDataType.String, 76, 7, 0), + new PsoStructureEntryInfo((MetaName)3819225408, PsoDataType.String, 80, 7, 0), + new PsoStructureEntryInfo((MetaName)2529144140, PsoDataType.String, 84, 7, 0), + new PsoStructureEntryInfo((MetaName)2626413479, PsoDataType.String, 88, 7, 0), + new PsoStructureEntryInfo((MetaName)3459414413, PsoDataType.String, 92, 7, 0), + new PsoStructureEntryInfo((MetaName)3745870995, PsoDataType.String, 96, 7, 0), + new PsoStructureEntryInfo((MetaName)542641977, PsoDataType.String, 100, 7, 0), + new PsoStructureEntryInfo((MetaName)2307365987, PsoDataType.String, 104, 7, 0), + new PsoStructureEntryInfo((MetaName)988275496, PsoDataType.String, 108, 7, 0), + new PsoStructureEntryInfo((MetaName)2347965860, PsoDataType.String, 112, 7, 0), + new PsoStructureEntryInfo((MetaName)824689766, PsoDataType.String, 116, 7, 0), + new PsoStructureEntryInfo((MetaName)1085529957, PsoDataType.String, 120, 7, 0), + new PsoStructureEntryInfo((MetaName)1983795837, PsoDataType.String, 124, 7, 0), + new PsoStructureEntryInfo((MetaName)4109561514, PsoDataType.String, 128, 7, 0), + new PsoStructureEntryInfo((MetaName)2498096438, PsoDataType.String, 132, 7, 0), + new PsoStructureEntryInfo((MetaName)90808597, PsoDataType.String, 136, 7, 0), + new PsoStructureEntryInfo((MetaName)1640661523, PsoDataType.String, 140, 7, 0), + new PsoStructureEntryInfo((MetaName)1583960251, PsoDataType.String, 144, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)609992288), + new PsoStructureEntryInfo((MetaName)3606683380, PsoDataType.Array, 152, 0, (MetaName)34), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3736014569), + new PsoStructureEntryInfo((MetaName)2503125343, PsoDataType.Array, 168, 0, (MetaName)36), + new PsoStructureEntryInfo((MetaName)3130040539, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo((MetaName)477015084, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo((MetaName)4272192282, PsoDataType.Float, 192, 0, 0), + new PsoStructureEntryInfo((MetaName)1434272564, PsoDataType.Float, 196, 0, 0), + new PsoStructureEntryInfo((MetaName)3416772737, PsoDataType.Float, 200, 0, 0), + new PsoStructureEntryInfo((MetaName)93138639, PsoDataType.Float, 204, 0, 0), + new PsoStructureEntryInfo((MetaName)667507334, PsoDataType.Float, 208, 0, 0), + new PsoStructureEntryInfo((MetaName)207811054, PsoDataType.Float, 212, 0, 0), + new PsoStructureEntryInfo((MetaName)4193052421, PsoDataType.Float, 216, 0, 0), + new PsoStructureEntryInfo((MetaName)4180330400, PsoDataType.Float, 220, 0, 0), + new PsoStructureEntryInfo((MetaName)1345368814, PsoDataType.String, 224, 7, 0), + new PsoStructureEntryInfo((MetaName)1495472466, PsoDataType.String, 228, 7, 0) + ); + case (MetaName)609992288: + return new PsoStructureInfo((MetaName)609992288, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo((MetaName)3647518623, PsoDataType.Array, 16, 0, (MetaName)1) + ); + case (MetaName)3736014569: + return new PsoStructureInfo((MetaName)3736014569, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1118518303), + new PsoStructureEntryInfo(MetaName.Seats, PsoDataType.Array, 16, 0, (MetaName)1) + ); + case (MetaName)1118518303: + return new PsoStructureInfo((MetaName)1118518303, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)1926032835, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)448596277, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo((MetaName)646946550, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)788888146, PsoDataType.Enum, 20, 0, (MetaName)894416699) + ); + case MetaName.CTaskReactToBeingAskedToLeaveVehicle__Tunables: + return new PsoStructureInfo(MetaName.CTaskReactToBeingAskedToLeaveVehicle__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3652981848, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3050367607, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.CTaskRideTrain__Tunables: + return new PsoStructureInfo(MetaName.CTaskRideTrain__Tunables, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2811169447, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1867895091, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1143137996, PsoDataType.Float, 24, 0, 0) + ); + case MetaName.CTaskTrainBase__Tunables: + return new PsoStructureInfo(MetaName.CTaskTrainBase__Tunables, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.TargetRadius, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1468879986, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)4110448569, PsoDataType.Float, 24, 0, 0) + ); + case MetaName.CTaskTryToGrabVehicleDoor__Tunables: + return new PsoStructureInfo(MetaName.CTaskTryToGrabVehicleDoor__Tunables, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1433408101, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2123286016, PsoDataType.UInt, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2222197615, PsoDataType.Float, 24, 0, 0) + ); + case MetaName.CTaskVehicleFSM__Tunables: + return new PsoStructureInfo(MetaName.CTaskVehicleFSM__Tunables, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)4265363743, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2569732609, PsoDataType.Bool, 17, 0, 0), + new PsoStructureEntryInfo((MetaName)1293114690, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3263047395, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)1699227528, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)7853624, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1213730703, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)4167152455, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2914709570, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)423470112, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2361725074, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)4213098799, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)1835160785, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)1964009554, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)2552082535, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)3034610967, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)195183113, PsoDataType.UInt, 76, 0, 0) + ); + case MetaName.CTaskMotionInVehicle__Tunables: + return new PsoStructureInfo(MetaName.CTaskMotionInVehicle__Tunables, 0, 0, 208, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)4046635601, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3306188437, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)4258377742, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3562480846, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1359095251, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)935626028, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)438194982, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)4219653521, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2551415238, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1807337106, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)1568293823, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3752389553, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)4171402878, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)1054799563, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)3807823759, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)2469007968, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)422547942, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)3114188164, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)4270612236, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)1515003340, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)908927858, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)2115168466, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)301666014, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)830782336, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)1079251923, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)2495843356, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)946605886, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)1058383858, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)1717140709, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)2871611248, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)3976993041, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)1346841624, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)419181205, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)2317632829, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo((MetaName)3982029176, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)3047698562, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)1917995403, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)3020055197, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo((MetaName)3200053693, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo((MetaName)1734471519, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo((MetaName)3267312723, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo((MetaName)3503503802, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo((MetaName)1165173355, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo((MetaName)2444940549, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo((MetaName)3252894044, PsoDataType.Float, 192, 0, 0), + new PsoStructureEntryInfo((MetaName)559307397, PsoDataType.Float, 196, 0, 0), + new PsoStructureEntryInfo((MetaName)599372255, PsoDataType.UInt, 200, 0, 0) + ); + case MetaName.CTaskMotionInAutomobile__Tunables: + return new PsoStructureInfo(MetaName.CTaskMotionInAutomobile__Tunables, 0, 0, 536, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)718713683, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3645563068, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2286839301, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3070028166, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3221129138, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2737592779, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)3234674890, PsoDataType.UInt, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)525349387, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)1540399603, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1551960100, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)4159734133, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)4058717361, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)1082826303, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)3223119611, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)4228832635, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)1495829016, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)2758926922, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)2682740739, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)819470063, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)3275703461, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)3852741535, PsoDataType.Bool, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)4247487957, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)2142946869, PsoDataType.SInt, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)2167334901, PsoDataType.String, 108, 7, 0), + new PsoStructureEntryInfo((MetaName)3305089148, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)166726527, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)3038905403, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)3175914177, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)2116015636, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)1260039600, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)3525415799, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)2058043106, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)2654954309, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)3271949585, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo((MetaName)2198401741, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)1825055764, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)4250418611, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)3517975074, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo((MetaName)705106159, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo((MetaName)3949027340, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo((MetaName)1535257534, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo((MetaName)2330583994, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo((MetaName)2363497120, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo((MetaName)1223047739, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo((MetaName)1728172908, PsoDataType.Float, 192, 0, 0), + new PsoStructureEntryInfo((MetaName)663934809, PsoDataType.Float, 196, 0, 0), + new PsoStructureEntryInfo((MetaName)158324629, PsoDataType.Float, 200, 0, 0), + new PsoStructureEntryInfo((MetaName)851764695, PsoDataType.Float, 204, 0, 0), + new PsoStructureEntryInfo((MetaName)2405402680, PsoDataType.Float, 208, 0, 0), + new PsoStructureEntryInfo((MetaName)2721586149, PsoDataType.Float, 212, 0, 0), + new PsoStructureEntryInfo((MetaName)2132426494, PsoDataType.Float, 216, 0, 0), + new PsoStructureEntryInfo((MetaName)2190188961, PsoDataType.Float, 220, 0, 0), + new PsoStructureEntryInfo((MetaName)4042046110, PsoDataType.Float, 224, 0, 0), + new PsoStructureEntryInfo((MetaName)663937180, PsoDataType.Float, 228, 0, 0), + new PsoStructureEntryInfo((MetaName)1466872193, PsoDataType.Float, 232, 0, 0), + new PsoStructureEntryInfo((MetaName)1503418851, PsoDataType.UInt, 236, 0, 0), + new PsoStructureEntryInfo((MetaName)1683629424, PsoDataType.UInt, 240, 0, 0), + new PsoStructureEntryInfo((MetaName)2532196566, PsoDataType.Float, 244, 0, 0), + new PsoStructureEntryInfo((MetaName)2406738390, PsoDataType.Float, 248, 0, 0), + new PsoStructureEntryInfo((MetaName)3912339645, PsoDataType.Float, 252, 0, 0), + new PsoStructureEntryInfo((MetaName)3426806263, PsoDataType.Float, 256, 0, 0), + new PsoStructureEntryInfo((MetaName)580774094, PsoDataType.Float, 260, 0, 0), + new PsoStructureEntryInfo((MetaName)682602058, PsoDataType.Float, 264, 0, 0), + new PsoStructureEntryInfo((MetaName)2988949625, PsoDataType.Float, 268, 0, 0), + new PsoStructureEntryInfo((MetaName)2175562542, PsoDataType.Float, 272, 0, 0), + new PsoStructureEntryInfo((MetaName)2821506258, PsoDataType.Float, 276, 0, 0), + new PsoStructureEntryInfo((MetaName)4038428233, PsoDataType.Float, 280, 0, 0), + new PsoStructureEntryInfo((MetaName)514772223, PsoDataType.Float, 284, 0, 0), + new PsoStructureEntryInfo((MetaName)765288989, PsoDataType.Float, 288, 0, 0), + new PsoStructureEntryInfo((MetaName)333974259, PsoDataType.Float, 292, 0, 0), + new PsoStructureEntryInfo((MetaName)4108731380, PsoDataType.Float, 296, 0, 0), + new PsoStructureEntryInfo((MetaName)380529072, PsoDataType.Float, 300, 0, 0), + new PsoStructureEntryInfo((MetaName)3403073366, PsoDataType.Float, 304, 0, 0), + new PsoStructureEntryInfo((MetaName)2671402641, PsoDataType.Float, 308, 0, 0), + new PsoStructureEntryInfo((MetaName)3023759131, PsoDataType.Float, 312, 0, 0), + new PsoStructureEntryInfo((MetaName)640640576, PsoDataType.Float, 316, 0, 0), + new PsoStructureEntryInfo((MetaName)445721091, PsoDataType.Float, 320, 0, 0), + new PsoStructureEntryInfo((MetaName)2001571571, PsoDataType.Float, 324, 0, 0), + new PsoStructureEntryInfo((MetaName)1295618163, PsoDataType.Float, 328, 0, 0), + new PsoStructureEntryInfo((MetaName)622968896, PsoDataType.Float, 332, 0, 0), + new PsoStructureEntryInfo((MetaName)2029080904, PsoDataType.Float, 336, 0, 0), + new PsoStructureEntryInfo((MetaName)2895820001, PsoDataType.Float, 340, 0, 0), + new PsoStructureEntryInfo((MetaName)3604323696, PsoDataType.Float, 344, 0, 0), + new PsoStructureEntryInfo((MetaName)2175428814, PsoDataType.Float, 348, 0, 0), + new PsoStructureEntryInfo((MetaName)346108670, PsoDataType.Float, 352, 0, 0), + new PsoStructureEntryInfo((MetaName)3123171906, PsoDataType.Float, 356, 0, 0), + new PsoStructureEntryInfo((MetaName)3193879405, PsoDataType.Float, 360, 0, 0), + new PsoStructureEntryInfo((MetaName)1771118662, PsoDataType.Float, 364, 0, 0), + new PsoStructureEntryInfo((MetaName)1104842114, PsoDataType.Float, 368, 0, 0), + new PsoStructureEntryInfo((MetaName)2239621028, PsoDataType.UInt, 372, 0, 0), + new PsoStructureEntryInfo((MetaName)7898446, PsoDataType.UInt, 376, 0, 0), + new PsoStructureEntryInfo((MetaName)56684479, PsoDataType.UInt, 380, 0, 0), + new PsoStructureEntryInfo((MetaName)345487015, PsoDataType.UInt, 384, 0, 0), + new PsoStructureEntryInfo((MetaName)723740105, PsoDataType.String, 388, 7, 0), + new PsoStructureEntryInfo((MetaName)2195918560, PsoDataType.String, 392, 7, 0), + new PsoStructureEntryInfo((MetaName)2232368689, PsoDataType.String, 396, 7, 0), + new PsoStructureEntryInfo((MetaName)1348667163, PsoDataType.String, 400, 7, 0), + new PsoStructureEntryInfo((MetaName)2026680640, PsoDataType.String, 404, 7, 0), + new PsoStructureEntryInfo((MetaName)1430534928, PsoDataType.String, 408, 7, 0), + new PsoStructureEntryInfo((MetaName)1851449258, PsoDataType.String, 412, 7, 0), + new PsoStructureEntryInfo((MetaName)2091354753, PsoDataType.String, 416, 7, 0), + new PsoStructureEntryInfo((MetaName)1023392893, PsoDataType.String, 420, 7, 0), + new PsoStructureEntryInfo((MetaName)2273702662, PsoDataType.String, 424, 7, 0), + new PsoStructureEntryInfo((MetaName)2867244273, PsoDataType.String, 428, 7, 0), + new PsoStructureEntryInfo((MetaName)1322656239, PsoDataType.String, 432, 7, 0), + new PsoStructureEntryInfo((MetaName)3951489866, PsoDataType.String, 436, 7, 0), + new PsoStructureEntryInfo((MetaName)1402571365, PsoDataType.String, 440, 7, 0), + new PsoStructureEntryInfo((MetaName)1920935636, PsoDataType.String, 444, 7, 0), + new PsoStructureEntryInfo((MetaName)1786685138, PsoDataType.String, 448, 7, 0), + new PsoStructureEntryInfo((MetaName)4017603423, PsoDataType.String, 452, 7, 0), + new PsoStructureEntryInfo((MetaName)1797630730, PsoDataType.Float, 456, 0, 0), + new PsoStructureEntryInfo((MetaName)2658529211, PsoDataType.Float, 460, 0, 0), + new PsoStructureEntryInfo((MetaName)3474960988, PsoDataType.Float, 464, 0, 0), + new PsoStructureEntryInfo((MetaName)3061913457, PsoDataType.Float, 468, 0, 0), + new PsoStructureEntryInfo((MetaName)2713284751, PsoDataType.Float, 472, 0, 0), + new PsoStructureEntryInfo((MetaName)2044390676, PsoDataType.Float, 476, 0, 0), + new PsoStructureEntryInfo((MetaName)137806659, PsoDataType.Float, 480, 0, 0), + new PsoStructureEntryInfo((MetaName)402428981, PsoDataType.Float, 484, 0, 0), + new PsoStructureEntryInfo((MetaName)1039484179, PsoDataType.Float, 488, 0, 0), + new PsoStructureEntryInfo((MetaName)342194320, PsoDataType.Float, 492, 0, 0), + new PsoStructureEntryInfo((MetaName)2083391331, PsoDataType.Float, 496, 0, 0), + new PsoStructureEntryInfo((MetaName)2714021858, PsoDataType.Float, 500, 0, 0), + new PsoStructureEntryInfo((MetaName)2266547610, PsoDataType.Float, 504, 0, 0), + new PsoStructureEntryInfo((MetaName)1896779219, PsoDataType.Float, 508, 0, 0), + new PsoStructureEntryInfo((MetaName)1233910025, PsoDataType.Float, 512, 0, 0), + new PsoStructureEntryInfo((MetaName)1743777174, PsoDataType.Float, 516, 0, 0), + new PsoStructureEntryInfo((MetaName)868848233, PsoDataType.Float, 520, 0, 0), + new PsoStructureEntryInfo((MetaName)1182962200, PsoDataType.Float, 524, 0, 0), + new PsoStructureEntryInfo((MetaName)1798674235, PsoDataType.Float, 528, 0, 0), + new PsoStructureEntryInfo((MetaName)647907606, PsoDataType.Float, 532, 0, 0) + ); + case MetaName.CTaskMotionOnBicycle__Tunables: + return new PsoStructureInfo(MetaName.CTaskMotionOnBicycle__Tunables, 0, 0, 224, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)541806245, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.StillToSitPedalGearApproachRate, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2418985851, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)514488562, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3869148508, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1916394191, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1906306837, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)811691519, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)1900606204, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1735614949, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)651496609, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3504747140, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)221837246, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)1599024557, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)3553993325, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)1621924028, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)3302557202, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)2103453391, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)524252818, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)1054799563, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)3807823759, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)2116015636, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)1260039600, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)1801923157, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)1962859811, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)4228525959, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)373069342, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)1466153272, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)1333345561, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)4004042226, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)1157744908, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)3608841595, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)2455313637, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)1137589274, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo((MetaName)2587752772, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)3469844948, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)3389614983, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)1025905604, PsoDataType.Bool, 164, 0, 0), + new PsoStructureEntryInfo((MetaName)2966685819, PsoDataType.String, 168, 7, 0), + new PsoStructureEntryInfo((MetaName)628124008, PsoDataType.String, 172, 7, 0), + new PsoStructureEntryInfo((MetaName)2298295044, PsoDataType.String, 176, 7, 0), + new PsoStructureEntryInfo((MetaName)2443433960, PsoDataType.String, 180, 7, 0), + new PsoStructureEntryInfo((MetaName)2199245470, PsoDataType.String, 184, 7, 0), + new PsoStructureEntryInfo((MetaName)4170136432, PsoDataType.String, 188, 7, 0), + new PsoStructureEntryInfo((MetaName)896939326, PsoDataType.String, 192, 7, 0), + new PsoStructureEntryInfo((MetaName)450274249, PsoDataType.String, 196, 7, 0), + new PsoStructureEntryInfo((MetaName)2341866800, PsoDataType.String, 200, 7, 0), + new PsoStructureEntryInfo((MetaName)1718435094, PsoDataType.String, 204, 7, 0), + new PsoStructureEntryInfo((MetaName)1736721816, PsoDataType.String, 208, 7, 0), + new PsoStructureEntryInfo((MetaName)2145122814, PsoDataType.String, 212, 7, 0), + new PsoStructureEntryInfo((MetaName)2306546493, PsoDataType.String, 216, 7, 0), + new PsoStructureEntryInfo((MetaName)2112680596, PsoDataType.String, 220, 7, 0) + ); + case MetaName.CTaskMotionOnBicycleController__Tunables: + return new PsoStructureInfo(MetaName.CTaskMotionOnBicycleController__Tunables, 0, 0, 184, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)863715729, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3178576793, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2196376340, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3840966049, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)510487850, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1082334520, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)2271374387, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)733218, PsoDataType.String, 44, 7, 0), + new PsoStructureEntryInfo((MetaName)1933131499, PsoDataType.String, 48, 7, 0), + new PsoStructureEntryInfo((MetaName)1163109918, PsoDataType.String, 52, 7, 0), + new PsoStructureEntryInfo((MetaName)1089195126, PsoDataType.String, 56, 7, 0), + new PsoStructureEntryInfo((MetaName)1151736662, PsoDataType.String, 60, 7, 0), + new PsoStructureEntryInfo((MetaName)4061011008, PsoDataType.String, 64, 7, 0), + new PsoStructureEntryInfo((MetaName)2693600057, PsoDataType.String, 68, 7, 0), + new PsoStructureEntryInfo((MetaName)4229390137, PsoDataType.String, 72, 7, 0), + new PsoStructureEntryInfo((MetaName)1333997798, PsoDataType.String, 76, 7, 0), + new PsoStructureEntryInfo((MetaName)945663205, PsoDataType.String, 80, 7, 0), + new PsoStructureEntryInfo((MetaName)3073315828, PsoDataType.String, 84, 7, 0), + new PsoStructureEntryInfo((MetaName)3808805794, PsoDataType.String, 88, 7, 0), + new PsoStructureEntryInfo((MetaName)1792476542, PsoDataType.String, 92, 7, 0), + new PsoStructureEntryInfo((MetaName)697395711, PsoDataType.String, 96, 7, 0), + new PsoStructureEntryInfo((MetaName)413582134, PsoDataType.String, 100, 7, 0), + new PsoStructureEntryInfo((MetaName)688331024, PsoDataType.String, 104, 7, 0), + new PsoStructureEntryInfo((MetaName)1543557460, PsoDataType.String, 108, 7, 0), + new PsoStructureEntryInfo((MetaName)323139173, PsoDataType.String, 112, 7, 0), + new PsoStructureEntryInfo((MetaName)2616623374, PsoDataType.String, 116, 7, 0), + new PsoStructureEntryInfo((MetaName)3652939154, PsoDataType.String, 120, 7, 0), + new PsoStructureEntryInfo((MetaName)3950475012, PsoDataType.String, 124, 7, 0), + new PsoStructureEntryInfo((MetaName)874968111, PsoDataType.String, 128, 7, 0), + new PsoStructureEntryInfo((MetaName)1348669466, PsoDataType.String, 132, 7, 0), + new PsoStructureEntryInfo((MetaName)2864920648, PsoDataType.String, 136, 7, 0), + new PsoStructureEntryInfo((MetaName)2365139646, PsoDataType.String, 140, 7, 0), + new PsoStructureEntryInfo((MetaName)963408802, PsoDataType.String, 144, 7, 0), + new PsoStructureEntryInfo((MetaName)2138292255, PsoDataType.String, 148, 7, 0), + new PsoStructureEntryInfo((MetaName)1620728723, PsoDataType.String, 152, 7, 0), + new PsoStructureEntryInfo((MetaName)196702567, PsoDataType.String, 156, 7, 0), + new PsoStructureEntryInfo((MetaName)4285496170, PsoDataType.String, 160, 7, 0), + new PsoStructureEntryInfo((MetaName)3916128451, PsoDataType.String, 164, 7, 0), + new PsoStructureEntryInfo((MetaName)2221169411, PsoDataType.String, 168, 7, 0), + new PsoStructureEntryInfo((MetaName)4163976723, PsoDataType.String, 172, 7, 0), + new PsoStructureEntryInfo((MetaName)4218531778, PsoDataType.String, 176, 7, 0), + new PsoStructureEntryInfo((MetaName)182997087, PsoDataType.String, 180, 7, 0) + ); + case MetaName.CBikeLeanAngleHelper__Tunables: + return new PsoStructureInfo(MetaName.CBikeLeanAngleHelper__Tunables, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)347971119, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1694816095, PsoDataType.Bool, 17, 0, 0), + new PsoStructureEntryInfo((MetaName)1030667828, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3420225248, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)4138940297, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)2940067495, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1365613076, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1850650077, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1393469938, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2868091491, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)4254763028, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)2573017241, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)48278855, PsoDataType.Float, 60, 0, 0) + ); + case MetaName.CTaskMotionInTurret__Tunables: + return new PsoStructureInfo(MetaName.CTaskMotionInTurret__Tunables, 0, 0, 248, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)4093217060, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)4102381397, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2540703340, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3512769803, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)171275597, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2073783636, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1235675432, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2737439830, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)1027124968, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2183745831, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3114603561, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)943989780, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2556074717, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)1811862646, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)216639291, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)1460193378, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)3098186043, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)1012095486, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)1934656831, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)2982819675, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)2624331049, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)1324859893, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)1057562451, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)1546988642, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)3067513344, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)1707713717, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)2395321832, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)1059545904, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)3062906436, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)2949666078, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)705780320, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)459162028, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)1797630730, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)1465756410, PsoDataType.String, 148, 7, 0), + new PsoStructureEntryInfo((MetaName)1144665981, PsoDataType.String, 152, 7, 0), + new PsoStructureEntryInfo((MetaName)790728667, PsoDataType.String, 156, 7, 0), + new PsoStructureEntryInfo((MetaName)2997429282, PsoDataType.String, 160, 7, 0), + new PsoStructureEntryInfo((MetaName)2148334725, PsoDataType.String, 164, 7, 0), + new PsoStructureEntryInfo((MetaName)356569692, PsoDataType.String, 168, 7, 0), + new PsoStructureEntryInfo((MetaName)2567235955, PsoDataType.String, 172, 7, 0), + new PsoStructureEntryInfo((MetaName)3042448153, PsoDataType.String, 176, 7, 0), + new PsoStructureEntryInfo((MetaName)1974526496, PsoDataType.String, 180, 7, 0), + new PsoStructureEntryInfo((MetaName)139557085, PsoDataType.String, 184, 7, 0), + new PsoStructureEntryInfo((MetaName)1206230540, PsoDataType.String, 188, 7, 0), + new PsoStructureEntryInfo((MetaName)3713053450, PsoDataType.String, 192, 7, 0), + new PsoStructureEntryInfo((MetaName)2463362878, PsoDataType.String, 196, 7, 0), + new PsoStructureEntryInfo((MetaName)3874294070, PsoDataType.String, 200, 7, 0), + new PsoStructureEntryInfo((MetaName)3624061968, PsoDataType.String, 204, 7, 0), + new PsoStructureEntryInfo((MetaName)3609018768, PsoDataType.String, 208, 7, 0), + new PsoStructureEntryInfo((MetaName)1611862735, PsoDataType.String, 212, 7, 0), + new PsoStructureEntryInfo((MetaName)413072568, PsoDataType.String, 216, 7, 0), + new PsoStructureEntryInfo((MetaName)1114189303, PsoDataType.String, 220, 7, 0), + new PsoStructureEntryInfo((MetaName)531096295, PsoDataType.String, 224, 7, 0), + new PsoStructureEntryInfo((MetaName)2077576253, PsoDataType.String, 228, 7, 0), + new PsoStructureEntryInfo((MetaName)3278999439, PsoDataType.String, 232, 7, 0), + new PsoStructureEntryInfo((MetaName)4038706223, PsoDataType.String, 236, 7, 0), + new PsoStructureEntryInfo((MetaName)1558752243, PsoDataType.String, 240, 7, 0), + new PsoStructureEntryInfo((MetaName)4031618294, PsoDataType.String, 244, 7, 0) + ); + case MetaName.CWanted__Tunables: + return new PsoStructureInfo(MetaName.CWanted__Tunables, 0, 0, 2696, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)651905954, PsoDataType.Structure, 16, 0, MetaName.CWanted__Tunables__WantedLevel), + new PsoStructureEntryInfo(MetaName.WantedLevel1, PsoDataType.Structure, 128, 0, MetaName.CWanted__Tunables__WantedLevel), + new PsoStructureEntryInfo(MetaName.WantedLevel2, PsoDataType.Structure, 240, 0, MetaName.CWanted__Tunables__WantedLevel), + new PsoStructureEntryInfo(MetaName.WantedLevel3, PsoDataType.Structure, 352, 0, MetaName.CWanted__Tunables__WantedLevel), + new PsoStructureEntryInfo(MetaName.WantedLevel4, PsoDataType.Structure, 464, 0, MetaName.CWanted__Tunables__WantedLevel), + new PsoStructureEntryInfo(MetaName.WantedLevel5, PsoDataType.Structure, 576, 0, MetaName.CWanted__Tunables__WantedLevel), + new PsoStructureEntryInfo((MetaName)1654675133, PsoDataType.Structure, 688, 0, (MetaName)2685546187), + new PsoStructureEntryInfo((MetaName)67050499, PsoDataType.Structure, 2640, 0, (MetaName)1581603972), + new PsoStructureEntryInfo((MetaName)577434903, PsoDataType.Structure, 2656, 0, (MetaName)4245193745), + new PsoStructureEntryInfo((MetaName)904929247, PsoDataType.UInt, 2672, 0, 0), + new PsoStructureEntryInfo((MetaName)1730819989, PsoDataType.UInt, 2676, 0, 0), + new PsoStructureEntryInfo((MetaName)115496620, PsoDataType.UInt, 2680, 0, 0), + new PsoStructureEntryInfo((MetaName)922425823, PsoDataType.UInt, 2684, 0, 0), + new PsoStructureEntryInfo((MetaName)3003441217, PsoDataType.UInt, 2688, 0, 0), + new PsoStructureEntryInfo((MetaName)2940774268, PsoDataType.Float, 2692, 0, 0) + ); + case MetaName.CWanted__Tunables__WantedLevel: + return new PsoStructureInfo(MetaName.CWanted__Tunables__WantedLevel, 0, 0, 112, + new PsoStructureEntryInfo((MetaName)1654675133, PsoDataType.Structure, 8, 0, (MetaName)3660423994) + ); + case (MetaName)3660423994: + return new PsoStructureInfo((MetaName)3660423994, 0, 0, 104, + new PsoStructureEntryInfo((MetaName)3703855515, PsoDataType.Structure, 8, 0, (MetaName)1037717481), + new PsoStructureEntryInfo((MetaName)847633247, PsoDataType.Structure, 72, 0, (MetaName)3986648608) + ); + case (MetaName)1037717481: + return new PsoStructureInfo((MetaName)1037717481, 0, 0, 64, + new PsoStructureEntryInfo((MetaName)1358049181, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)3025359898, PsoDataType.Structure, 16, 0, (MetaName)1310408174), + new PsoStructureEntryInfo((MetaName)398571259, PsoDataType.Structure, 40, 0, (MetaName)3442100148) + ); + case (MetaName)1310408174: + return new PsoStructureInfo((MetaName)1310408174, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)1092646882, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)2553544690, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)3060363673, PsoDataType.Float, 16, 0, 0) + ); + case (MetaName)3442100148: + return new PsoStructureInfo((MetaName)3442100148, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)3674050950, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)3107625217, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)746028494, PsoDataType.Bool, 16, 0, 0) + ); + case (MetaName)3986648608: + return new PsoStructureInfo((MetaName)3986648608, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)3888134503, PsoDataType.Structure, 8, 0, (MetaName)2123007699) + ); + case (MetaName)2123007699: + return new PsoStructureInfo((MetaName)2123007699, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)353469799, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)4112497335, PsoDataType.Float, 16, 0, 0) + ); + case (MetaName)2685546187: + return new PsoStructureInfo((MetaName)2685546187, 0, 0, 1952, + new PsoStructureEntryInfo((MetaName)4197810024, PsoDataType.Structure, 8, 0, (MetaName)2145739988), + new PsoStructureEntryInfo((MetaName)1606361377, PsoDataType.Structure, 152, 0, (MetaName)1602748523), + new PsoStructureEntryInfo(MetaName.Peds, PsoDataType.Structure, 280, 0, (MetaName)3209293959), + new PsoStructureEntryInfo(MetaName.Dispatch, PsoDataType.Structure, 1920, 0, (MetaName)3840146119) + ); + case (MetaName)2145739988: + return new PsoStructureInfo((MetaName)2145739988, 0, 0, 144, + new PsoStructureEntryInfo((MetaName)3333387022, PsoDataType.Structure, 8, 0, (MetaName)3801009121), + new PsoStructureEntryInfo((MetaName)2913237777, PsoDataType.Structure, 96, 0, (MetaName)2528332511), + new PsoStructureEntryInfo((MetaName)987604024, PsoDataType.Structure, 120, 0, (MetaName)2528332511) + ); + case (MetaName)3801009121: + return new PsoStructureInfo((MetaName)3801009121, 0, 0, 88, + new PsoStructureEntryInfo((MetaName)3025359898, PsoDataType.Structure, 8, 0, (MetaName)2379615087) + ); + case (MetaName)2379615087: + return new PsoStructureInfo((MetaName)2379615087, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.Distance, PsoDataType.Structure, 8, 0, (MetaName)2528332511), + new PsoStructureEntryInfo(MetaName.Direction, PsoDataType.Structure, 32, 0, (MetaName)2528332511), + new PsoStructureEntryInfo((MetaName)3060363673, PsoDataType.Structure, 56, 0, (MetaName)2528332511) + ); + case (MetaName)2528332511: + return new PsoStructureInfo((MetaName)2528332511, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Min, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.Max, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)2828335077, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1433159873, PsoDataType.Float, 20, 0, 0) + ); + case (MetaName)1602748523: + return new PsoStructureInfo((MetaName)1602748523, 0, 0, 128, + new PsoStructureEntryInfo((MetaName)1107258897, PsoDataType.Structure, 8, 0, (MetaName)2528332511), + new PsoStructureEntryInfo((MetaName)3214855311, PsoDataType.Structure, 32, 0, (MetaName)2528332511), + new PsoStructureEntryInfo((MetaName)4205882999, PsoDataType.Structure, 56, 0, (MetaName)2528332511), + new PsoStructureEntryInfo((MetaName)2096238662, PsoDataType.Structure, 80, 0, (MetaName)2528332511), + new PsoStructureEntryInfo((MetaName)2154790128, PsoDataType.Structure, 104, 0, (MetaName)2528332511) + ); + case (MetaName)3209293959: + return new PsoStructureInfo((MetaName)3209293959, 0, 0, 1640, + new PsoStructureEntryInfo((MetaName)1528396268, PsoDataType.Structure, 8, 0, (MetaName)2022711333), + new PsoStructureEntryInfo((MetaName)507550818, PsoDataType.Structure, 552, 0, (MetaName)2022711333), + new PsoStructureEntryInfo((MetaName)2552595859, PsoDataType.Structure, 1096, 0, (MetaName)2022711333) + ); + case (MetaName)2022711333: + return new PsoStructureInfo((MetaName)2022711333, 0, 0, 544, + new PsoStructureEntryInfo(MetaName.Situations, PsoDataType.Structure, 8, 0, (MetaName)1181208064), + new PsoStructureEntryInfo((MetaName)2432019232, PsoDataType.Structure, 496, 0, (MetaName)2528332511), + new PsoStructureEntryInfo((MetaName)641071834, PsoDataType.Structure, 520, 0, (MetaName)2528332511) + ); + case (MetaName)1181208064: + return new PsoStructureInfo((MetaName)1181208064, 0, 0, 488, + new PsoStructureEntryInfo(MetaName.Default, PsoDataType.Structure, 8, 0, (MetaName)3795144262), + new PsoStructureEntryInfo((MetaName)3094451383, PsoDataType.Structure, 128, 0, (MetaName)3795144262), + new PsoStructureEntryInfo((MetaName)345193988, PsoDataType.Structure, 248, 0, (MetaName)3795144262), + new PsoStructureEntryInfo((MetaName)3499358923, PsoDataType.Structure, 368, 0, (MetaName)3795144262) + ); + case (MetaName)3795144262: + return new PsoStructureInfo((MetaName)3795144262, 0, 0, 120, + new PsoStructureEntryInfo((MetaName)1188235128, PsoDataType.Structure, 8, 0, (MetaName)2528332511), + new PsoStructureEntryInfo((MetaName)625679404, PsoDataType.Structure, 32, 0, (MetaName)2528332511), + new PsoStructureEntryInfo((MetaName)920840724, PsoDataType.Structure, 56, 0, (MetaName)2528332511), + new PsoStructureEntryInfo(MetaName.WeaponAccuracy, PsoDataType.Structure, 80, 0, (MetaName)2528332511), + new PsoStructureEntryInfo((MetaName)409082717, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)3234043128, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)2268167532, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)1749910459, PsoDataType.Float, 116, 0, 0) + ); + case (MetaName)3840146119: + return new PsoStructureInfo((MetaName)3840146119, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)296253880, PsoDataType.Structure, 8, 0, (MetaName)2528332511) + ); + case (MetaName)1581603972: + return new PsoStructureInfo((MetaName)1581603972, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)473322006, PsoDataType.Bool, 9, 0, 0), + new PsoStructureEntryInfo(MetaName.Crimes, PsoDataType.Bool, 10, 0, 0) + ); + case (MetaName)4245193745: + return new PsoStructureInfo((MetaName)4245193745, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)2905197964, PsoDataType.Float, 8, 0, 0) + ); + case MetaName.CEventGunAimedAt__Tunables: + return new PsoStructureInfo(MetaName.CEventGunAimedAt__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)564420500, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2906908712, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.CEventGunShot__Tunables: + return new PsoStructureInfo(MetaName.CEventGunShot__Tunables, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)564420500, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2906908712, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3483089763, PsoDataType.Float, 24, 0, 0) + ); + case MetaName.CEventMeleeAction__Tunables: + return new PsoStructureInfo(MetaName.CEventMeleeAction__Tunables, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)564420500, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2906908712, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.CTaskAimAndThrowProjectile__Tunables: + return new PsoStructureInfo(MetaName.CTaskAimAndThrowProjectile__Tunables, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3236417550, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1407383707, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3153397162, PsoDataType.UInt, 24, 0, 0) + ); + case MetaName.CTaskSwapWeapon__Tunables: + return new PsoStructureInfo(MetaName.CTaskSwapWeapon__Tunables, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)4280609914, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1084086108, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1362808676, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2789076521, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)677754437, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)4171399035, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)2230131245, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1593645740, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)1231407173, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2181619027, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)2950978586, PsoDataType.Bool, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)45502974, PsoDataType.Bool, 57, 0, 0) + ); + case MetaName.CTaskAimGunOnFoot__Tunables: + return new PsoStructureInfo(MetaName.CTaskAimGunOnFoot__Tunables, 0, 0, 112, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)817834735, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1908604654, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)644208462, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)4243324346, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3879469601, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1822973195, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1768561713, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2511610049, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2412774208, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1555086572, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)794209155, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)1671878115, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)3876119945, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)2495484427, PsoDataType.Float3, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)3684533695, PsoDataType.UInt, 96, 0, 0) + ); + case MetaName.CTaskGun__Tunables: + return new PsoStructureInfo(MetaName.CTaskGun__Tunables, 0, 0, 104, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1571509424, PsoDataType.SInt, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2834021629, PsoDataType.SInt, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1300484749, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)433744442, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1522624465, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2841960409, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)2724641994, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2167660448, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)3890597462, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1782949708, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)420989827, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)206502145, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2838815119, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)4068186391, PsoDataType.String, 68, 7, 0), + new PsoStructureEntryInfo((MetaName)724878846, PsoDataType.String, 72, 7, 0), + new PsoStructureEntryInfo((MetaName)4032674616, PsoDataType.UInt, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)674462637, PsoDataType.UInt, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)3886708440, PsoDataType.UInt, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)1969287622, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)3228655867, PsoDataType.UInt, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)270252777, PsoDataType.UInt, 96, 0, 0) + ); + case MetaName.CTaskAimGunVehicleDriveBy__Tunables: + return new PsoStructureInfo(MetaName.CTaskAimGunVehicleDriveBy__Tunables, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3789052240, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3792438004, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)536817715, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2221861795, PsoDataType.UInt, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)1480451859, PsoDataType.UInt, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1466310013, PsoDataType.UInt, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)939946101, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo((MetaName)3931552272, PsoDataType.String, 44, 7, 0), + new PsoStructureEntryInfo((MetaName)2134287489, PsoDataType.String, 48, 7, 0), + new PsoStructureEntryInfo((MetaName)3728753498, PsoDataType.String, 52, 7, 0), + new PsoStructureEntryInfo((MetaName)2221302483, PsoDataType.String, 56, 7, 0), + new PsoStructureEntryInfo((MetaName)3323392529, PsoDataType.String, 60, 7, 0), + new PsoStructureEntryInfo((MetaName)2684719351, PsoDataType.String, 64, 7, 0), + new PsoStructureEntryInfo((MetaName)4246561663, PsoDataType.String, 68, 7, 0) + ); + case MetaName.CWildlifeManager__Tunables: + return new PsoStructureInfo(MetaName.CWildlifeManager__Tunables, 0, 0, 136, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)597953858, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1961626874, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)3368483780, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)2777866816, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)3248533699, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)303177901, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)1961260334, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2107629661, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)883567309, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2995052029, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)1328674939, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3539942532, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)1744844248, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)1094365177, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)3534467233, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)519277350, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)2825120069, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)798871205, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)1856882404, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)1340414393, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)3846222437, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)1785192888, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)2326003695, PsoDataType.String, 104, 7, 0), + new PsoStructureEntryInfo((MetaName)3940110369, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)422419421, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)4195725397, PsoDataType.UInt, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)750370993, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)3653722296, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)1235067475, PsoDataType.Float, 128, 0, 0) + ); + case MetaName.CPopGroupList: + return new PsoStructureInfo(MetaName.CPopGroupList, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1530774378), + new PsoStructureEntryInfo((MetaName)3299118270, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1530774378), + new PsoStructureEntryInfo((MetaName)3356170168, PsoDataType.Array, 24, 0, (MetaName)2), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo((MetaName)2772741337, PsoDataType.Array, 40, 0, (MetaName)4) + ); + case (MetaName)1530774378: + return new PsoStructureInfo((MetaName)1530774378, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3852980612), + new PsoStructureEntryInfo((MetaName)4042130640, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)4186696686), + new PsoStructureEntryInfo(MetaName.flags, PsoDataType.Flags, 32, 0, (MetaName)2097155) + ); + case MetaName.CDoorTuningFile: + return new PsoStructureInfo(MetaName.CDoorTuningFile, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)607870603), + new PsoStructureEntryInfo(MetaName.NamedTuningArray, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)934147895), + new PsoStructureEntryInfo(MetaName.ModelToTuneMapping, PsoDataType.Array, 24, 0, (MetaName)2) + ); + case (MetaName)607870603: + return new PsoStructureInfo((MetaName)607870603, 0, 0, 144, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 2, 0), + new PsoStructureEntryInfo(MetaName.Tuning, PsoDataType.Structure, 16, 0, (MetaName)2175119364) + ); + case (MetaName)2175119364: + return new PsoStructureInfo((MetaName)2175119364, 0, 0, 128, + new PsoStructureEntryInfo(MetaName.AutoOpenVolumeOffset, PsoDataType.Float3a, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)2809332931), + new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.Flags, 32, 0, (MetaName)2097153), + new PsoStructureEntryInfo(MetaName.AutoOpenRadiusModifier, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.AutoOpenRate, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.AutoOpenCosineAngleBetweenThreshold, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.AutoOpenCloseRateTaper, PsoDataType.Bool, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.UseAutoOpenTriggerBox, PsoDataType.Bool, 49, 0, 0), + new PsoStructureEntryInfo(MetaName.CustomTriggerBox, PsoDataType.Bool, 50, 0, 0), + new PsoStructureEntryInfo(MetaName.TriggerBoxMinMax, PsoDataType.Structure, 64, 0, MetaName.rage__spdAABB), + new PsoStructureEntryInfo(MetaName.BreakableByVehicle, PsoDataType.Bool, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.BreakingImpulse, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldLatchShut, PsoDataType.Bool, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.MassMultiplier, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.WeaponImpulseMultiplier, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.RotationLimitAngle, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.TorqueAngularVelocityLimit, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.StdDoorRotDir, PsoDataType.Enum, 124, 0, MetaName.StdDoorRotDir) + ); + case (MetaName)934147895: + return new PsoStructureInfo((MetaName)934147895, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.ModelName, PsoDataType.String, 8, 2, 0), + new PsoStructureEntryInfo(MetaName.TuningName, PsoDataType.String, 16, 2, 0) + ); + case (MetaName)3852980612: + return new PsoStructureInfo((MetaName)3852980612, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.Variations, PsoDataType.Structure, 16, 3, 0) + ); + case MetaName.CAmbientPedModelVariations: + return new PsoStructureInfo(MetaName.CAmbientPedModelVariations, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3553377863), + new PsoStructureEntryInfo(MetaName.CompRestrictions, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3159204365), + new PsoStructureEntryInfo(MetaName.PropRestrictions, PsoDataType.Array, 24, 0, (MetaName)2), + new PsoStructureEntryInfo(MetaName.LoadOut, PsoDataType.String, 40, 7, 0) + ); + case (MetaName)3553377863: + return new PsoStructureInfo((MetaName)3553377863, 0, 0, 12, + new PsoStructureEntryInfo(MetaName.Component, PsoDataType.Enum, 0, 0, (MetaName)884254308), + new PsoStructureEntryInfo(MetaName.DrawableIndex, PsoDataType.SInt, 4, 0, 0), + new PsoStructureEntryInfo(MetaName.Restriction, PsoDataType.Enum, 8, 0, (MetaName)2065671281) + ); + case (MetaName)3721180525: + return new PsoStructureInfo((MetaName)3721180525, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1778476350), + new PsoStructureEntryInfo((MetaName)1652130128, PsoDataType.Array, 8, 0, 0) + ); + case (MetaName)1778476350: + return new PsoStructureInfo((MetaName)1778476350, 0, 0, 48, + new PsoStructureEntryInfo((MetaName)1231029245, PsoDataType.Structure, 16, 0, MetaName.rage__spdAABB) + ); + case MetaName.CScenarioPointManifest: + return new PsoStructureInfo(MetaName.CScenarioPointManifest, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.VersionNumber, PsoDataType.SInt, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo(MetaName.RegionDefs, PsoDataType.Array, 8, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo(MetaName.Groups, PsoDataType.Array, 24, 0, (MetaName)3), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.InteriorNames, PsoDataType.Array, 40, 0, (MetaName)5) + ); + case MetaName.CScenarioPointRegionDef: + return new PsoStructureInfo(MetaName.CScenarioPointRegionDef, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 0, 8, 0), + new PsoStructureEntryInfo(MetaName.AABB, PsoDataType.Structure, 16, 0, MetaName.rage__spdAABB) + ); + case MetaName.CScenarioPointGroup: + return new PsoStructureInfo(MetaName.CScenarioPointGroup, 0, 0, 8, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.EnabledByDefault, PsoDataType.Bool, 4, 0, 0) + ); + case (MetaName)1353902600: + return new PsoStructureInfo((MetaName)1353902600, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3356301454), + new PsoStructureEntryInfo(MetaName.Requests, PsoDataType.Array, 0, 0, 0) + ); + case (MetaName)3356301454: + return new PsoStructureInfo((MetaName)3356301454, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)4037058594, PsoDataType.Structure, 0, 0, (MetaName)2548004600), + new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.SInt, 24, 0, 0) + ); + case (MetaName)2548004600: + return new PsoStructureInfo((MetaName)2548004600, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)2112595704, PsoDataType.String, 0, 3, 0), + new PsoStructureEntryInfo((MetaName)207195018, PsoDataType.String, 16, 0, (MetaName)524288) + ); + case (MetaName)62557530: + return new PsoStructureInfo((MetaName)62557530, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3112305802), + new PsoStructureEntryInfo(MetaName.zones, PsoDataType.Array, 0, 0, 0) + ); + case (MetaName)3112305802: + return new PsoStructureInfo((MetaName)3112305802, 0, 0, 88, + new PsoStructureEntryInfo(MetaName.zoneName, PsoDataType.String, 0, 2, 0), + new PsoStructureEntryInfo(MetaName.spName, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.mpName, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo(MetaName.vfxRegion, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo((MetaName)1896983690, PsoDataType.UByte, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1856972365, PsoDataType.Enum, 24, 0, (MetaName)1756502932), + new PsoStructureEntryInfo((MetaName)218173601, PsoDataType.Enum, 28, 0, (MetaName)3204395397), + new PsoStructureEntryInfo((MetaName)1915622273, PsoDataType.Enum, 32, 0, (MetaName)4286852891), + new PsoStructureEntryInfo((MetaName)218662697, PsoDataType.Enum, 36, 0, (MetaName)4095090001), + new PsoStructureEntryInfo(MetaName.vehDirtMin, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.vehDirtMax, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.vehDirtGrowScale, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.pedDirtMin, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.pedDirtMax, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3463006534, PsoDataType.UByte, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)986658337, PsoDataType.UByte, 61, 0, 0), + new PsoStructureEntryInfo((MetaName)365907991, PsoDataType.UByte, 62, 0, 0), + new PsoStructureEntryInfo((MetaName)1430479029, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)2056852733, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)1457405649, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)2304154060, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)1018913504, PsoDataType.SInt, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)9361713, PsoDataType.Bool, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)2931752685, PsoDataType.Bool, 85, 0, 0) + ); + case (MetaName)3016688820: + return new PsoStructureInfo((MetaName)3016688820, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)912106952), + new PsoStructureEntryInfo(MetaName.NamedTuningArray, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3821651387), + new PsoStructureEntryInfo(MetaName.ModelToTuneMapping, PsoDataType.Array, 24, 0, (MetaName)2) + ); + case (MetaName)912106952: + return new PsoStructureInfo((MetaName)912106952, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 2, 0), + new PsoStructureEntryInfo(MetaName.Tuning, PsoDataType.Structure, 16, 0, (MetaName)61864478) + ); + case (MetaName)61864478: + return new PsoStructureInfo((MetaName)61864478, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)98189892), + new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.Flags, 8, 0, (MetaName)2097152) + ); + case (MetaName)3821651387: + return new PsoStructureInfo((MetaName)3821651387, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.ModelName, PsoDataType.String, 8, 2, 0), + new PsoStructureEntryInfo(MetaName.TuningName, PsoDataType.String, 16, 2, 0) + ); + case MetaName.CScenarioPointRegion: + return new PsoStructureInfo(MetaName.CScenarioPointRegion, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.VersionNumber, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CExtensionDefSpawnPoint), + new PsoStructureEntryInfo(MetaName.ScenarioPoints, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo((MetaName)3696045377, PsoDataType.Structure, 32, 0, (MetaName)4023740759) + ); + case MetaName.CExtensionDefSpawnPoint: + return new PsoStructureInfo(MetaName.CExtensionDefSpawnPoint, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.offsetPosition, PsoDataType.Float3, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.offsetRotation, PsoDataType.Float4, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.spawnType, PsoDataType.String, 48, 7, 0), + new PsoStructureEntryInfo(MetaName.pedType, PsoDataType.String, 52, 7, 0), + new PsoStructureEntryInfo(MetaName.group, PsoDataType.String, 56, 7, 0), + new PsoStructureEntryInfo(MetaName.availableInMpSp, PsoDataType.Enum, 60, 0, (MetaName)3573596290), + new PsoStructureEntryInfo(MetaName.timeTillPedLeaves, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.start, PsoDataType.UByte, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.end, PsoDataType.UByte, 69, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)700327466), + new PsoStructureEntryInfo(MetaName.flags, PsoDataType.Flags, 72, 0, (MetaName)196618), + new PsoStructureEntryInfo(MetaName.highPri, PsoDataType.Bool, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.extendedRange, PsoDataType.Bool, 77, 0, 0) + ); + case (MetaName)4023740759: + return new PsoStructureInfo((MetaName)4023740759, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CScenarioChainingNode), + new PsoStructureEntryInfo(MetaName.Nodes, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CScenarioChainingEdge), + new PsoStructureEntryInfo(MetaName.Edges, PsoDataType.Array, 24, 0, (MetaName)2) + ); + case MetaName.CScenarioChainingNode: + return new PsoStructureInfo(MetaName.CScenarioChainingNode, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Position, PsoDataType.Float3a, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2602393771, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo(MetaName.ScenarioType, PsoDataType.String, 36, 7, 0), + new PsoStructureEntryInfo((MetaName)407126079, PsoDataType.Bool, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1308720135, PsoDataType.Bool, 41, 0, 0) + ); + case MetaName.CScenarioChainingEdge: + return new PsoStructureInfo(MetaName.CScenarioChainingEdge, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.NodeIndexFrom, PsoDataType.UShort, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.NodeIndexTo, PsoDataType.UShort, 10, 0, 0), + new PsoStructureEntryInfo(MetaName.NavMode, PsoDataType.Enum, 12, 2, (MetaName)3971773454), + new PsoStructureEntryInfo(MetaName.NavSpeed, PsoDataType.Enum, 13, 2, (MetaName)941086046) + ); + case (MetaName)376833625: + return new PsoStructureInfo((MetaName)376833625, 0, 0, 112, + new PsoStructureEntryInfo((MetaName)1235281004, PsoDataType.Bool, 0, 0, 0), + new PsoStructureEntryInfo((MetaName)4086467184, PsoDataType.Bool, 1, 0, 0), + new PsoStructureEntryInfo((MetaName)911147899, PsoDataType.Bool, 2, 0, 0), + new PsoStructureEntryInfo((MetaName)315291935, PsoDataType.Bool, 3, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UByte, 0, 0, 0), + new PsoStructureEntryInfo((MetaName)2996560424, PsoDataType.Array, 4, 4, (MetaName)786436), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3538495220), + new PsoStructureEntryInfo((MetaName)3796409423, PsoDataType.Array, 16, 0, (MetaName)6), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)253191135), + new PsoStructureEntryInfo((MetaName)2131007641, PsoDataType.Array, 32, 0, (MetaName)8), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CComponentInfo), + new PsoStructureEntryInfo(MetaName.compInfos, PsoDataType.Array, 48, 0, (MetaName)10), + new PsoStructureEntryInfo(MetaName.propInfo, PsoDataType.Structure, 64, 0, (MetaName)2858946626), + new PsoStructureEntryInfo(MetaName.dlcName, PsoDataType.String, 104, 8, 0) + ); + case (MetaName)2858946626: + return new PsoStructureInfo((MetaName)2858946626, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)2598445407, PsoDataType.UByte, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)94549140), + new PsoStructureEntryInfo((MetaName)3902803273, PsoDataType.Array, 8, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CAnchorProps), + new PsoStructureEntryInfo(MetaName.aAnchors, PsoDataType.Array, 24, 0, (MetaName)3) + ); + case (MetaName)3538495220: + return new PsoStructureInfo((MetaName)3538495220, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)3371516811, PsoDataType.UByte, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1535046754), + new PsoStructureEntryInfo((MetaName)1756136273, PsoDataType.Array, 8, 0, (MetaName)1) + ); + case (MetaName)1535046754: + return new PsoStructureInfo((MetaName)1535046754, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.propMask, PsoDataType.UByte, 0, 0, 0), + new PsoStructureEntryInfo((MetaName)2806194106, PsoDataType.UByte, 1, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1036962405), + new PsoStructureEntryInfo(MetaName.aTexData, PsoDataType.Array, 8, 0, (MetaName)2), + new PsoStructureEntryInfo(MetaName.clothData, PsoDataType.Structure, 24, 0, (MetaName)2236980467) + ); + case (MetaName)2236980467: + return new PsoStructureInfo((MetaName)2236980467, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)2828247905, PsoDataType.Bool, 0, 0, 0) + ); + case (MetaName)1036962405: + return new PsoStructureInfo((MetaName)1036962405, 0, 0, 3, + new PsoStructureEntryInfo(MetaName.texId, PsoDataType.UByte, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.distribution, PsoDataType.UByte, 1, 0, 0) + ); + case MetaName.CComponentInfo: + return new PsoStructureInfo(MetaName.CComponentInfo, 0, 0, 48, + new PsoStructureEntryInfo((MetaName)802196719, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo((MetaName)4233133352, PsoDataType.String, 4, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Float, 0, 0, 0), + new PsoStructureEntryInfo((MetaName)128864925, PsoDataType.Array, 8, 4, (MetaName)327682), + new PsoStructureEntryInfo(MetaName.flags, PsoDataType.UInt, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.inclusions, PsoDataType.Flags, 32, 0, (MetaName)2101247), + new PsoStructureEntryInfo(MetaName.exclusions, PsoDataType.Flags, 36, 0, (MetaName)2101247), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)884254308), + new PsoStructureEntryInfo((MetaName)1613922652, PsoDataType.Flags, 40, 1, (MetaName)1048583), + new PsoStructureEntryInfo((MetaName)2114993291, PsoDataType.UShort, 42, 0, 0), + new PsoStructureEntryInfo((MetaName)3509540765, PsoDataType.UByte, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)4196345791, PsoDataType.UByte, 45, 0, 0) + ); + case MetaName.CCreatureMetaData: + return new PsoStructureInfo(MetaName.CCreatureMetaData, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CShaderVariableComponent), + new PsoStructureEntryInfo(MetaName.shaderVariableComponents, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CPedPropExpressionData), + new PsoStructureEntryInfo(MetaName.pedPropExpressions, PsoDataType.Array, 24, 0, (MetaName)2), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CPedCompExpressionData), + new PsoStructureEntryInfo(MetaName.pedCompExpressions, PsoDataType.Array, 40, 0, (MetaName)4) + ); + case MetaName.CShaderVariableComponent: + return new PsoStructureInfo(MetaName.CShaderVariableComponent, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.pedcompID, PsoDataType.UInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.maskID, PsoDataType.UInt, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.shaderVariableHashString, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UByte, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.tracks, PsoDataType.Array, 24, 0, (MetaName)3), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UShort, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.ids, PsoDataType.Array, 40, 0, (MetaName)5), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UByte, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.components, PsoDataType.Array, 56, 0, MetaName.POINTER) + ); + case MetaName.CPedPropExpressionData: + return new PsoStructureInfo(MetaName.CPedPropExpressionData, 0, 0, 88, + new PsoStructureEntryInfo(MetaName.pedPropID, PsoDataType.UInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.pedPropVarIndex, PsoDataType.SInt, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.pedPropExpressionIndex, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UByte, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.tracks, PsoDataType.Array, 24, 0, (MetaName)3), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UShort, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.ids, PsoDataType.Array, 40, 0, (MetaName)5), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UByte, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.types, PsoDataType.Array, 56, 0, MetaName.POINTER), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UByte, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.components, PsoDataType.Array, 72, 0, (MetaName)9) + ); + case MetaName.CPedCompExpressionData: + return new PsoStructureInfo(MetaName.CPedCompExpressionData, 0, 0, 88, + new PsoStructureEntryInfo(MetaName.pedCompID, PsoDataType.UInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.pedCompVarIndex, PsoDataType.SInt, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.pedCompExpressionIndex, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UByte, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.tracks, PsoDataType.Array, 24, 0, (MetaName)3), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UShort, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.ids, PsoDataType.Array, 40, 0, (MetaName)5), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UByte, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.types, PsoDataType.Array, 56, 0, MetaName.POINTER), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UByte, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.components, PsoDataType.Array, 72, 0, (MetaName)9) + ); + case (MetaName)3527760993: + return new PsoStructureInfo((MetaName)3527760993, 0, 0, 5296, + new PsoStructureEntryInfo((MetaName)1185457940, PsoDataType.Float, 268, 0, 0), + new PsoStructureEntryInfo((MetaName)399683105, PsoDataType.String, 272, 0, (MetaName)16777216), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UInt, 0, 0, 0), + new PsoStructureEntryInfo((MetaName)2110267871, PsoDataType.Array, 528, 4, (MetaName)262146), + new PsoStructureEntryInfo((MetaName)281069076, PsoDataType.Float3, 544, 0, 0), + new PsoStructureEntryInfo((MetaName)2963173633, PsoDataType.Float, 560, 0, 0), + new PsoStructureEntryInfo((MetaName)2952522139, PsoDataType.String, 564, 0, (MetaName)1572864), + new PsoStructureEntryInfo((MetaName)1493683017, PsoDataType.Float3, 592, 0, 0), + new PsoStructureEntryInfo((MetaName)1263529604, PsoDataType.Float3, 608, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo((MetaName)1337787258, PsoDataType.Array, 624, 0, (MetaName)9), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo((MetaName)1537015366, PsoDataType.Array, 640, 0, (MetaName)11), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo((MetaName)873743947, PsoDataType.Array, 656, 0, (MetaName)13), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo((MetaName)101111438, PsoDataType.Array, 672, 0, (MetaName)15), + new PsoStructureEntryInfo((MetaName)1956494238, PsoDataType.Structure, 688, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 696, 4, 0), + new PsoStructureEntryInfo((MetaName)1047819622, PsoDataType.SInt, 704, 0, 0), + new PsoStructureEntryInfo((MetaName)398786672, PsoDataType.SInt, 708, 0, 0), + new PsoStructureEntryInfo((MetaName)4079543520, PsoDataType.SInt, 712, 0, 0), + new PsoStructureEntryInfo((MetaName)3421999474, PsoDataType.Float, 716, 0, 0), + new PsoStructureEntryInfo((MetaName)953346839, PsoDataType.Float, 720, 0, 0), + new PsoStructureEntryInfo((MetaName)3025199107, PsoDataType.Float, 724, 0, 0), + new PsoStructureEntryInfo((MetaName)1910831709, PsoDataType.UInt, 728, 1, 0), + new PsoStructureEntryInfo((MetaName)1783584102, PsoDataType.SInt, 732, 0, 0), + new PsoStructureEntryInfo((MetaName)660302675, PsoDataType.SInt, 736, 0, 0), + new PsoStructureEntryInfo((MetaName)473400434, PsoDataType.Float, 740, 0, 0), + new PsoStructureEntryInfo((MetaName)969234229, PsoDataType.Float, 744, 0, 0), + new PsoStructureEntryInfo((MetaName)2234426246, PsoDataType.UInt, 748, 1, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Float, 0, 0, 0), + new PsoStructureEntryInfo((MetaName)2618346740, PsoDataType.Array, 752, 0, (MetaName)31), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Float, 0, 0, 0), + new PsoStructureEntryInfo((MetaName)4212477189, PsoDataType.Array, 768, 0, MetaName.FLOAT), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1737539928), + new PsoStructureEntryInfo((MetaName)1452216515, PsoDataType.Array, 784, 1, (MetaName)2621475), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)220202594), + new PsoStructureEntryInfo((MetaName)1234565986, PsoDataType.Array, 5280, 0, (MetaName)37) + ); + case (MetaName)1334016442: + return new PsoStructureInfo((MetaName)1334016442, 0, 0, 12, + new PsoStructureEntryInfo((MetaName)647685198, PsoDataType.UByte, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)4202662936, PsoDataType.UByte, 9, 0, 0) + ); + case (MetaName)1737539928: + return new PsoStructureInfo((MetaName)1737539928, 0, 0, 64, + new PsoStructureEntryInfo((MetaName)3148363891, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo((MetaName)281069076, PsoDataType.Float3, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.fStartTime, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)2963173633, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)632986329, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2689106272, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)1047819622, PsoDataType.SInt, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)398786672, PsoDataType.SInt, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)1999956592, PsoDataType.Bool, 56, 0, 0) + ); + case (MetaName)68930034: + return new PsoStructureInfo((MetaName)68930034, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0) + ); + case (MetaName)162924556: + return new PsoStructureInfo((MetaName)162924556, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0) + ); + case (MetaName)2665839426: + return new PsoStructureInfo((MetaName)2665839426, 0, 0, 64, + new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo((MetaName)1324611103, PsoDataType.UInt, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1690336060, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)3688268720, PsoDataType.Float, 60, 0, 0) + ); + case (MetaName)462317467: + return new PsoStructureInfo((MetaName)462317467, 0, 0, 120, + new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo((MetaName)692898807, PsoDataType.String, 48, 7, 0), + new PsoStructureEntryInfo((MetaName)1324611103, PsoDataType.UInt, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)2982365822, PsoDataType.String, 64, 7, 0), + new PsoStructureEntryInfo((MetaName)3382327909, PsoDataType.String, 68, 7, 0), + new PsoStructureEntryInfo((MetaName)2016919075, PsoDataType.String, 72, 7, 0), + new PsoStructureEntryInfo((MetaName)1251016415, PsoDataType.String, 84, 7, 0), + new PsoStructureEntryInfo((MetaName)2221257278, PsoDataType.String, 88, 7, 0), + new PsoStructureEntryInfo((MetaName)2464163899, PsoDataType.String, 96, 7, 0), + new PsoStructureEntryInfo((MetaName)259776703, PsoDataType.Bool, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)2435794203, PsoDataType.Bool, 105, 0, 0), + new PsoStructureEntryInfo((MetaName)1741651815, PsoDataType.Bool, 106, 0, 0), + new PsoStructureEntryInfo((MetaName)555167272, PsoDataType.String, 108, 7, 0), + new PsoStructureEntryInfo((MetaName)3123042911, PsoDataType.String, 112, 7, 0) + ); + case (MetaName)2296489151: + return new PsoStructureInfo((MetaName)2296489151, 0, 0, 96, + new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo((MetaName)692898807, PsoDataType.String, 48, 7, 0), + new PsoStructureEntryInfo((MetaName)1324611103, PsoDataType.UInt, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)2982365822, PsoDataType.String, 64, 7, 0), + new PsoStructureEntryInfo((MetaName)3382327909, PsoDataType.String, 68, 7, 0), + new PsoStructureEntryInfo((MetaName)2016919075, PsoDataType.String, 72, 7, 0), + new PsoStructureEntryInfo((MetaName)1251016415, PsoDataType.String, 84, 7, 0), + new PsoStructureEntryInfo((MetaName)2221257278, PsoDataType.String, 88, 7, 0) + ); + case (MetaName)1024212505: + return new PsoStructureInfo((MetaName)1024212505, 0, 0, 128, + new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Float3, 0, 0, 0), + new PsoStructureEntryInfo((MetaName)2013990738, PsoDataType.Array, 48, 4, (MetaName)262148), + new PsoStructureEntryInfo((MetaName)4242690206, PsoDataType.Float, 112, 0, 0) + ); + case (MetaName)204478241: + return new PsoStructureInfo((MetaName)204478241, 0, 0, 64, + new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 3, 0), + new PsoStructureEntryInfo((MetaName)1293919506, PsoDataType.Float, 56, 0, 0) + ); + case (MetaName)979016746: + return new PsoStructureInfo((MetaName)979016746, 0, 0, 80, + new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo((MetaName)1835178760, PsoDataType.Float3, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)315509558, PsoDataType.Float, 64, 0, 0) + ); + case (MetaName)2083739024: + return new PsoStructureInfo((MetaName)2083739024, 0, 0, 80, + new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 3, 0), + new PsoStructureEntryInfo((MetaName)4294123624, PsoDataType.String, 56, 3, 0), + new PsoStructureEntryInfo((MetaName)211975133, PsoDataType.UInt, 72, 0, 0), + new PsoStructureEntryInfo((MetaName)2549745289, PsoDataType.String, 76, 7, 0) + ); + case (MetaName)307438872: + return new PsoStructureInfo((MetaName)307438872, 0, 0, 48, + new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 7, 0) + ); + case (MetaName)1781777258: + return new PsoStructureInfo((MetaName)1781777258, 0, 0, 240, + new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 16, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 32, 0, (MetaName)4194304), + new PsoStructureEntryInfo((MetaName)3788713491, PsoDataType.Float3, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)3313809689, PsoDataType.Float3, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)1835178760, PsoDataType.Float3, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)3937240636, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)391886097, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo((MetaName)1743670592, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo((MetaName)3963210786, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo((MetaName)75610905, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo((MetaName)1810161173, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo((MetaName)1078847881, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo((MetaName)1698708840, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo((MetaName)2725338958, PsoDataType.Float, 192, 0, 0), + new PsoStructureEntryInfo((MetaName)1342101, PsoDataType.Float, 196, 0, 0), + new PsoStructureEntryInfo((MetaName)1233248098, PsoDataType.SInt, 200, 0, 0), + new PsoStructureEntryInfo((MetaName)2477126074, PsoDataType.SInt, 204, 0, 0), + new PsoStructureEntryInfo((MetaName)2104882549, PsoDataType.SInt, 208, 0, 0), + new PsoStructureEntryInfo((MetaName)1994003276, PsoDataType.SInt, 212, 0, 0), + new PsoStructureEntryInfo((MetaName)34975788, PsoDataType.SInt, 216, 0, 0), + new PsoStructureEntryInfo((MetaName)2428927641, PsoDataType.UInt, 220, 0, 0), + new PsoStructureEntryInfo((MetaName)2759730476, PsoDataType.UInt, 224, 0, 0), + new PsoStructureEntryInfo((MetaName)1437992521, PsoDataType.UShort, 228, 0, 0), + new PsoStructureEntryInfo((MetaName)2375647859, PsoDataType.Bool, 230, 0, 0) + ); + case (MetaName)425672361: + return new PsoStructureInfo((MetaName)425672361, 0, 0, 208, + new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo((MetaName)3788713491, PsoDataType.Float3, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)3313809689, PsoDataType.Float3, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)1835178760, PsoDataType.Float3, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)3937240636, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)391886097, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)1743670592, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)3963210786, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)75610905, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)1810161173, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)1078847881, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)1698708840, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)2725338958, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)1342101, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo((MetaName)1632842349, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)1233248098, PsoDataType.SInt, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)2477126074, PsoDataType.SInt, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)2104882549, PsoDataType.SInt, 164, 0, 0), + new PsoStructureEntryInfo((MetaName)1994003276, PsoDataType.SInt, 168, 0, 0), + new PsoStructureEntryInfo((MetaName)2428927641, PsoDataType.UInt, 176, 0, 0), + new PsoStructureEntryInfo((MetaName)2759730476, PsoDataType.UInt, 180, 0, 0), + new PsoStructureEntryInfo((MetaName)2375647859, PsoDataType.Bool, 186, 0, 0), + new PsoStructureEntryInfo((MetaName)1324611103, PsoDataType.UInt, 192, 0, 0) + ); + case (MetaName)3787091478: + return new PsoStructureInfo((MetaName)3787091478, 0, 0, 56, + new PsoStructureEntryInfo((MetaName)1591208228, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3149172832, PsoDataType.SInt, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)4289498236, PsoDataType.SInt, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3754530640, PsoDataType.Structure, 32, 3, 0), + new PsoStructureEntryInfo((MetaName)2164901921, PsoDataType.UInt, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2962717212, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 48, 0, 0) + ); + case (MetaName)2095750852: + return new PsoStructureInfo((MetaName)2095750852, 0, 0, 56, + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)505193016, PsoDataType.SInt, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2231657823, PsoDataType.SInt, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)467155910, PsoDataType.SInt, 48, 0, 0) + ); + case (MetaName)534106966: + return new PsoStructureInfo((MetaName)534106966, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0) + ); + case (MetaName)1016128875: + return new PsoStructureInfo((MetaName)1016128875, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo((MetaName)2880561169, PsoDataType.Array, 0, 0, 0) + ); + case (MetaName)1626675902: + return new PsoStructureInfo((MetaName)1626675902, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 8, 0), + new PsoStructureEntryInfo(MetaName.Value, PsoDataType.SInt, 16, 0, 0) + ); + case (MetaName)1674696498: + return new PsoStructureInfo((MetaName)1674696498, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 8, 0), + new PsoStructureEntryInfo(MetaName.Value, PsoDataType.Float, 16, 0, 0) + ); + case (MetaName)3528166281: + return new PsoStructureInfo((MetaName)3528166281, 0, 0, 80, + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo((MetaName)281069076, PsoDataType.Float3, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2963173633, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)632986329, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)2689106272, PsoDataType.Float, 72, 0, 0) + ); + case (MetaName)3132728576: + return new PsoStructureInfo((MetaName)3132728576, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 32, 0, 0) + ); + case (MetaName)1377451264: + return new PsoStructureInfo((MetaName)1377451264, 0, 0, 48, + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.SInt, 0, 0, 0), + new PsoStructureEntryInfo((MetaName)1236477325, PsoDataType.Array, 32, 0, (MetaName)2) + ); + case (MetaName)1160694198: + return new PsoStructureInfo((MetaName)1160694198, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 32, 7, 0) + ); + case (MetaName)1032739425: + return new PsoStructureInfo((MetaName)1032739425, 0, 0, 272, + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo((MetaName)1835178760, PsoDataType.Float3, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)1522820057, PsoDataType.Float4, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)1690336060, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo((MetaName)3688268720, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo((MetaName)3931395097, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo((MetaName)3995079835, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo((MetaName)2269408044, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo((MetaName)2792355072, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo((MetaName)1455403991, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo((MetaName)2245753507, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo((MetaName)3792964618, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo((MetaName)129942887, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo((MetaName)1682304034, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo((MetaName)1316012152, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo((MetaName)1218720991, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo((MetaName)872811427, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo((MetaName)1832730358, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo((MetaName)1099319606, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo((MetaName)2577299971, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo((MetaName)3267149471, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo((MetaName)3063864558, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo((MetaName)71148997, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo((MetaName)2331545500, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo((MetaName)4246749927, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo((MetaName)1253384283, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo((MetaName)3093400296, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo((MetaName)4064056507, PsoDataType.Bool, 176, 0, 0), + new PsoStructureEntryInfo((MetaName)2666061934, PsoDataType.Bool, 177, 0, 0), + new PsoStructureEntryInfo((MetaName)22229384, PsoDataType.Bool, 178, 0, 0), + new PsoStructureEntryInfo((MetaName)2168731396, PsoDataType.Bool, 179, 0, 0), + new PsoStructureEntryInfo((MetaName)1142553590, PsoDataType.Structure, 192, 0, (MetaName)2335868993), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1378659296), + new PsoStructureEntryInfo((MetaName)3502363965, PsoDataType.Array, 256, 0, (MetaName)34) + ); + case (MetaName)2335868993: + return new PsoStructureInfo((MetaName)2335868993, 0, 0, 64, + new PsoStructureEntryInfo((MetaName)1299282176, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)3788713491, PsoDataType.Float3, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3313809689, PsoDataType.Float3, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3937240636, PsoDataType.Float, 48, 0, 0) + ); + case (MetaName)3215026609: + return new PsoStructureInfo((MetaName)3215026609, 0, 0, 64, + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo((MetaName)1537748314, PsoDataType.SInt, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2643240271, PsoDataType.SInt, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2279341021, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2810110094, PsoDataType.SInt, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)1271134520, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)1836544003, PsoDataType.Float, 60, 0, 0) + ); + case (MetaName)80958073: + return new PsoStructureInfo((MetaName)80958073, 0, 0, 48, + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 32, 3, 0) + ); + case (MetaName)4198689239: + return new PsoStructureInfo((MetaName)4198689239, 0, 0, 48, + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 7, 0) + ); + case (MetaName)220202594: + return new PsoStructureInfo((MetaName)220202594, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)3148363891, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.SInt, 0, 0, 0), + new PsoStructureEntryInfo((MetaName)580974885, PsoDataType.Array, 8, 0, (MetaName)1) + ); + case (MetaName)2042362651: + return new PsoStructureInfo((MetaName)2042362651, 0, 0, 120, + new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo((MetaName)692898807, PsoDataType.String, 48, 7, 0), + new PsoStructureEntryInfo((MetaName)1324611103, PsoDataType.UInt, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)2982365822, PsoDataType.String, 64, 7, 0), + new PsoStructureEntryInfo((MetaName)3382327909, PsoDataType.String, 68, 7, 0), + new PsoStructureEntryInfo((MetaName)2016919075, PsoDataType.String, 72, 7, 0), + new PsoStructureEntryInfo((MetaName)1251016415, PsoDataType.String, 84, 7, 0), + new PsoStructureEntryInfo((MetaName)2221257278, PsoDataType.String, 88, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 3, 0), + new PsoStructureEntryInfo((MetaName)1501402472, PsoDataType.Array, 96, 0, (MetaName)11), + new PsoStructureEntryInfo((MetaName)3754821582, PsoDataType.Bool, 112, 0, 0) + ); + case (MetaName)2587541103: + return new PsoStructureInfo((MetaName)2587541103, 0, 0, 48, + new PsoStructureEntryInfo((MetaName)1591208228, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3149172832, PsoDataType.SInt, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)4289498236, PsoDataType.SInt, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3754530640, PsoDataType.Structure, 32, 3, 0), + new PsoStructureEntryInfo((MetaName)2164901921, PsoDataType.UInt, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)2962717212, PsoDataType.Bool, 44, 0, 0) + ); + case (MetaName)852034231: + return new PsoStructureInfo((MetaName)852034231, 0, 0, 80, + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo((MetaName)1262004121, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo(MetaName.position, PsoDataType.Float3, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.radius, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)3980674446, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)311972855, PsoDataType.SInt, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.enabled, PsoDataType.Bool, 76, 0, 0), + new PsoStructureEntryInfo((MetaName)2862808673, PsoDataType.Bool, 77, 0, 0) + ); + case (MetaName)1609567909: + return new PsoStructureInfo((MetaName)1609567909, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo((MetaName)198751340, PsoDataType.Float, 32, 0, 0) + ); + case (MetaName)3750235532: + return new PsoStructureInfo((MetaName)3750235532, 0, 0, 72, + new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo((MetaName)692898807, PsoDataType.String, 48, 7, 0), + new PsoStructureEntryInfo((MetaName)1324611103, PsoDataType.UInt, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)1844888803, PsoDataType.String, 64, 7, 0) + ); + case (MetaName)3028272477: + return new PsoStructureInfo((MetaName)3028272477, 0, 0, 104, + new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo((MetaName)692898807, PsoDataType.String, 48, 7, 0), + new PsoStructureEntryInfo((MetaName)1324611103, PsoDataType.UInt, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)2982365822, PsoDataType.String, 64, 7, 0), + new PsoStructureEntryInfo((MetaName)3382327909, PsoDataType.String, 68, 7, 0), + new PsoStructureEntryInfo((MetaName)2016919075, PsoDataType.String, 72, 7, 0), + new PsoStructureEntryInfo((MetaName)1251016415, PsoDataType.String, 84, 7, 0), + new PsoStructureEntryInfo((MetaName)2221257278, PsoDataType.String, 88, 7, 0), + new PsoStructureEntryInfo((MetaName)4160620743, PsoDataType.UInt, 96, 0, 0) + ); + case (MetaName)222809975: + return new PsoStructureInfo((MetaName)222809975, 0, 0, 80, + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo((MetaName)1039931786, PsoDataType.Float4, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)583681460, PsoDataType.Float3, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)867510818, PsoDataType.SInt, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)3936668519, PsoDataType.UShort, 68, 0, 0) + ); + case (MetaName)2483426166: + return new PsoStructureInfo((MetaName)2483426166, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo((MetaName)208974921, PsoDataType.Bool, 32, 0, 0) + ); + case (MetaName)578480161: + return new PsoStructureInfo((MetaName)578480161, 0, 0, 80, + new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo((MetaName)692898807, PsoDataType.String, 48, 7, 0), + new PsoStructureEntryInfo((MetaName)2268451071, PsoDataType.Float3, 64, 0, 0) + ); + case (MetaName)1696721139: + return new PsoStructureInfo((MetaName)1696721139, 0, 0, 64, + new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo((MetaName)692898807, PsoDataType.String, 48, 7, 0), + new PsoStructureEntryInfo((MetaName)1844888803, PsoDataType.String, 56, 7, 0) + ); + case (MetaName)576081308: + return new PsoStructureInfo((MetaName)576081308, 0, 0, 64, + new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo((MetaName)692898807, PsoDataType.String, 48, 7, 0), + new PsoStructureEntryInfo((MetaName)2789976084, PsoDataType.UInt, 56, 0, 0) + ); + case (MetaName)3570809234: + return new PsoStructureInfo((MetaName)3570809234, 0, 0, 80, + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo((MetaName)1835178760, PsoDataType.Float3, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)330442780, PsoDataType.Float4, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)658992148, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)4242690206, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo((MetaName)3346932687, PsoDataType.UInt, 72, 1, 0), + new PsoStructureEntryInfo((MetaName)2257773206, PsoDataType.Float, 76, 0, 0) + ); + case (MetaName)2841702621: + return new PsoStructureInfo((MetaName)2841702621, 0, 0, 48, + new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 7, 0) + ); + case (MetaName)918254035: + return new PsoStructureInfo((MetaName)918254035, 0, 0, 72, + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)4067992989, PsoDataType.SInt, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)1237172464, PsoDataType.SInt, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)1609620374, PsoDataType.SInt, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2225359196, PsoDataType.SInt, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)2747538743, PsoDataType.SInt, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)756943177, PsoDataType.SInt, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2453634574, PsoDataType.SInt, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)3834082948, PsoDataType.Float, 68, 0, 0) + ); + case (MetaName)557437386: + return new PsoStructureInfo((MetaName)557437386, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 8, 0), + new PsoStructureEntryInfo(MetaName.Value, PsoDataType.String, 16, 3, 0) + ); + case (MetaName)303942334: + return new PsoStructureInfo((MetaName)303942334, 0, 0, 48, + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo((MetaName)198751340, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.color, PsoDataType.UInt, 40, 1, 0) + ); + case (MetaName)3654996547: + return new PsoStructureInfo((MetaName)3654996547, 0, 0, 48, + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo((MetaName)867510818, PsoDataType.SInt, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)3936668519, PsoDataType.UShort, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)734609027, PsoDataType.String, 40, 7, 0) + ); + case (MetaName)4113944278: + return new PsoStructureInfo((MetaName)4113944278, 0, 0, 56, + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.SInt, 0, 0, 0), + new PsoStructureEntryInfo((MetaName)814194086, PsoDataType.Array, 40, 0, (MetaName)3) + ); + case (MetaName)989168939: + return new PsoStructureInfo((MetaName)989168939, 0, 0, 80, + new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), + new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo((MetaName)1835178760, PsoDataType.Float3, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)315509558, PsoDataType.Float, 64, 0, 0) + ); + case MetaName.CPackFileMetaData: + return new PsoStructureInfo(MetaName.CPackFileMetaData, 0, 0, 96, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CMapDataGroup), + new PsoStructureEntryInfo(MetaName.MapDataGroups, PsoDataType.Array, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CHDTxdAssetBinding), + new PsoStructureEntryInfo(MetaName.HDTxdBindingArray, PsoDataType.Array, 16, 0, (MetaName)2), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CImapDependency), + new PsoStructureEntryInfo(MetaName.imapDependencies, PsoDataType.Array, 32, 0, (MetaName)4), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CImapDependencies), + new PsoStructureEntryInfo(MetaName.imapDependencies_2, PsoDataType.Array, 48, 0, (MetaName)6), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CItypDependencies), + new PsoStructureEntryInfo(MetaName.itypDependencies_2, PsoDataType.Array, 64, 0, (MetaName)8), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CInteriorBoundsFiles), + new PsoStructureEntryInfo(MetaName.Interiors, PsoDataType.Array, 80, 0, (MetaName)10) + ); + case MetaName.CMapDataGroup: + return new PsoStructureInfo(MetaName.CMapDataGroup, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.Bounds, PsoDataType.Array, 8, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)1193003611), + new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.Flags, 24, 0, (MetaName)2097155), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.WeatherTypes, PsoDataType.Array, 32, 0, (MetaName)5), + new PsoStructureEntryInfo(MetaName.HoursOnOff, PsoDataType.UInt, 48, 0, 0) + ); + case MetaName.CHDTxdAssetBinding: + return new PsoStructureInfo(MetaName.CHDTxdAssetBinding, 0, 0, 132, + new PsoStructureEntryInfo(MetaName.assetType, PsoDataType.Enum, 0, 0, (MetaName)3387532954), + new PsoStructureEntryInfo(MetaName.targetAsset, PsoDataType.String, 4, 0, (MetaName)4194304), + new PsoStructureEntryInfo(MetaName.HDTxd, PsoDataType.String, 68, 0, (MetaName)4194304) + ); + case MetaName.CImapDependencies: + return new PsoStructureInfo(MetaName.CImapDependencies, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.imapName, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, MetaName.manifestFlags), + new PsoStructureEntryInfo(MetaName.manifestFlags, PsoDataType.Flags, 4, 0, (MetaName)2097153), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.itypDepArray, PsoDataType.Array, 8, 0, (MetaName)3) + ); + case MetaName.CItypDependencies: + return new PsoStructureInfo(MetaName.CItypDependencies, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.itypName, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, MetaName.manifestFlags), + new PsoStructureEntryInfo(MetaName.manifestFlags, PsoDataType.Flags, 4, 0, (MetaName)2097153), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.itypDepArray, PsoDataType.Array, 8, 0, (MetaName)3) + ); + case MetaName.CInteriorBoundsFiles: + return new PsoStructureInfo(MetaName.CInteriorBoundsFiles, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.Bounds, PsoDataType.Array, 8, 0, (MetaName)1) + ); + case MetaName.CMapTypes: + return new PsoStructureInfo(MetaName.CMapTypes, 0, 0, 96, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo(MetaName.extensions, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo(MetaName.archetypes, PsoDataType.Array, 24, 0, (MetaName)2), + new PsoStructureEntryInfo(MetaName.name, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.dependencies, PsoDataType.Array, 48, 0, (MetaName)5), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CTxdRelationship), + new PsoStructureEntryInfo(MetaName.txdRelationships, PsoDataType.Array, 64, 0, MetaName.POINTER), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CCompositeEntityType), + new PsoStructureEntryInfo(MetaName.compositeEntityTypes, PsoDataType.Array, 80, 0, (MetaName)9) + ); + case MetaName.CTxdRelationship: + return new PsoStructureInfo(MetaName.CTxdRelationship, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.parent, PsoDataType.String, 8, 3, 0), + new PsoStructureEntryInfo(MetaName.child, PsoDataType.String, 24, 3, 0) + ); + case MetaName.CCompositeEntityType: + return new PsoStructureInfo(MetaName.CCompositeEntityType, 0, 0, 336, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 0, 0, (MetaName)4194304), + new PsoStructureEntryInfo(MetaName.lodDist, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.flags, PsoDataType.UInt, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.specialAttribute, PsoDataType.UInt, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.bbMin, PsoDataType.Float3, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.bbMax, PsoDataType.Float3, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.bsCentre, PsoDataType.Float3, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.bsRadius, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.StartModel, PsoDataType.String, 136, 0, (MetaName)4194304), + new PsoStructureEntryInfo(MetaName.EndModel, PsoDataType.String, 200, 0, (MetaName)4194304), + new PsoStructureEntryInfo(MetaName.StartImapFile, PsoDataType.String, 264, 3, 0), + new PsoStructureEntryInfo(MetaName.EndImapFile, PsoDataType.String, 280, 3, 0), + new PsoStructureEntryInfo(MetaName.PtFxAssetName, PsoDataType.String, 296, 3, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1980345114), + new PsoStructureEntryInfo(MetaName.Animations, PsoDataType.Array, 312, 0, (MetaName)13) + ); + case (MetaName)1980345114: + return new PsoStructureInfo((MetaName)1980345114, 0, 0, 216, + new PsoStructureEntryInfo(MetaName.AnimDict, PsoDataType.String, 0, 0, (MetaName)4194304), + new PsoStructureEntryInfo(MetaName.AnimName, PsoDataType.String, 64, 0, (MetaName)4194304), + new PsoStructureEntryInfo(MetaName.AnimatedModel, PsoDataType.String, 128, 0, (MetaName)4194304), + new PsoStructureEntryInfo(MetaName.punchInPhase, PsoDataType.Float, 192, 0, 0), + new PsoStructureEntryInfo(MetaName.punchOutPhase, PsoDataType.Float, 196, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3430328684), + new PsoStructureEntryInfo(MetaName.effectsData, PsoDataType.Array, 200, 0, (MetaName)5) + ); + case (MetaName)3430328684: + return new PsoStructureInfo((MetaName)3430328684, 0, 0, 160, + new PsoStructureEntryInfo(MetaName.fxType, PsoDataType.UInt, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.fxOffsetPos, PsoDataType.Float3, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.fxOffsetRot, PsoDataType.Float4, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.boneTag, PsoDataType.UInt, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.startPhase, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.endPhase, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.ptFxIsTriggered, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.ptFxTag, PsoDataType.String, 61, 0, (MetaName)4194304), + new PsoStructureEntryInfo(MetaName.ptFxScale, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.ptFxProbability, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo(MetaName.ptFxHasTint, PsoDataType.Bool, 136, 0, 0), + new PsoStructureEntryInfo(MetaName.ptFxTintR, PsoDataType.UByte, 137, 0, 0), + new PsoStructureEntryInfo(MetaName.ptFxTintG, PsoDataType.UByte, 138, 0, 0), + new PsoStructureEntryInfo(MetaName.ptFxTintB, PsoDataType.UByte, 139, 0, 0), + new PsoStructureEntryInfo(MetaName.ptFxSize, PsoDataType.Float3, 144, 0, 0) + ); + case MetaName.CExtensionDefParticleEffect: + return new PsoStructureInfo(MetaName.CExtensionDefParticleEffect, 0, 0, 96, + new PsoStructureEntryInfo(MetaName.name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.offsetPosition, PsoDataType.Float3, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.offsetRotation, PsoDataType.Float4, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.fxName, PsoDataType.String, 48, 3, 0), + new PsoStructureEntryInfo(MetaName.fxType, PsoDataType.SInt, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.boneTag, PsoDataType.SInt, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.scale, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.probability, PsoDataType.SInt, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.flags, PsoDataType.SInt, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.color, PsoDataType.UInt, 84, 1, 0) + ); + case MetaName.CBaseArchetypeDef: + return new PsoStructureInfo(MetaName.CBaseArchetypeDef, 0, 0, 176, + new PsoStructureEntryInfo(MetaName.lodDist, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.flags, PsoDataType.UInt, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.specialAttribute, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.bbMin, PsoDataType.Float3, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.bbMax, PsoDataType.Float3, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.bsCentre, PsoDataType.Float3, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.bsRadius, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.hdTextureDist, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.name, PsoDataType.String, 88, 3, 0), + new PsoStructureEntryInfo(MetaName.textureDictionary, PsoDataType.String, 104, 3, 0), + new PsoStructureEntryInfo(MetaName.clipDictionary, PsoDataType.String, 120, 3, 0), + new PsoStructureEntryInfo(MetaName.drawableDictionary, PsoDataType.String, 136, 3, 0), + new PsoStructureEntryInfo(MetaName.physicsDictionary, PsoDataType.String, 152, 7, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo(MetaName.extensions, PsoDataType.Array, 160, 0, (MetaName)13) + ); + case MetaName.CImapDependency: + return new PsoStructureInfo(MetaName.CImapDependency, 0, 0, 12, + new PsoStructureEntryInfo(MetaName.imapName, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.itypName, PsoDataType.String, 4, 7, 0), + new PsoStructureEntryInfo(MetaName.packFileName, PsoDataType.String, 8, 7, 0) + ); + case MetaName.CMapData: + return new PsoStructureInfo(MetaName.CMapData, 0, 0, 304, + new PsoStructureEntryInfo(MetaName.name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.parent, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo(MetaName.flags, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.contentFlags, PsoDataType.UInt, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.streamingExtentsMin, PsoDataType.Float3, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.streamingExtentsMax, PsoDataType.Float3, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.entitiesExtentsMin, PsoDataType.Float3, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.entitiesExtentsMax, PsoDataType.Float3, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo(MetaName.entities, PsoDataType.Array, 96, 0, (MetaName)8), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)372253349), + new PsoStructureEntryInfo(MetaName.containerLods, PsoDataType.Array, 112, 0, (MetaName)10), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.BoxOccluder), + new PsoStructureEntryInfo(MetaName.boxOccluders, PsoDataType.Array, 128, 0, MetaName.PsoPOINTER), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.OccludeModel), + new PsoStructureEntryInfo(MetaName.occludeModels, PsoDataType.Array, 144, 0, (MetaName)14), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.physicsDictionaries, PsoDataType.Array, 160, 0, MetaName.STRING), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CTimeCycleModifier), + new PsoStructureEntryInfo(MetaName.timeCycleModifiers, PsoDataType.Array, 176, 0, (MetaName)18), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CCarGen), + new PsoStructureEntryInfo(MetaName.carGenerators, PsoDataType.Array, 192, 0, (MetaName)20), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CLODLight), + new PsoStructureEntryInfo(MetaName.LODLights, PsoDataType.Array, 208, 0, (MetaName)22), + new PsoStructureEntryInfo(MetaName.block, PsoDataType.Structure, 224, 0, MetaName.CBlockDesc) + ); + case (MetaName)372253349: + return new PsoStructureInfo((MetaName)372253349, 0, 0, 8, + new PsoStructureEntryInfo(MetaName.name, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.parentIndex, PsoDataType.UInt, 4, 0, 0) + ); + case MetaName.BoxOccluder: + return new PsoStructureInfo(MetaName.BoxOccluder, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.iCenterX, PsoDataType.SShort, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.iCenterY, PsoDataType.SShort, 2, 0, 0), + new PsoStructureEntryInfo(MetaName.iCenterZ, PsoDataType.SShort, 4, 0, 0), + new PsoStructureEntryInfo(MetaName.iCosZ, PsoDataType.SShort, 6, 0, 0), + new PsoStructureEntryInfo(MetaName.iLength, PsoDataType.SShort, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.iWidth, PsoDataType.SShort, 10, 0, 0), + new PsoStructureEntryInfo(MetaName.iHeight, PsoDataType.SShort, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.iSinZ, PsoDataType.SShort, 14, 0, 0) + ); + case MetaName.OccludeModel: + return new PsoStructureInfo(MetaName.OccludeModel, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.bmin, PsoDataType.Float3a, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.bmax, PsoDataType.Float3a, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.dataSize, PsoDataType.UInt, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UByte, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.verts, PsoDataType.Array, 40, 6, (MetaName)2097155), + new PsoStructureEntryInfo((MetaName)853977995, PsoDataType.UShort, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2337695078, PsoDataType.UShort, 50, 0, 0) + ); + case MetaName.CTimeCycleModifier: + return new PsoStructureInfo(MetaName.CTimeCycleModifier, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.minExtents, PsoDataType.Float3, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.maxExtents, PsoDataType.Float3, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.percentage, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.range, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.startHour, PsoDataType.UInt, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.endHour, PsoDataType.UInt, 60, 0, 0) + ); + case MetaName.CCarGen: + return new PsoStructureInfo(MetaName.CCarGen, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.position, PsoDataType.Float3, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.orientX, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.orientY, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.perpendicularLength, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.carModel, PsoDataType.String, 44, 7, 0), + new PsoStructureEntryInfo(MetaName.flags, PsoDataType.UInt, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)2431193454, PsoDataType.UInt, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)379378343, PsoDataType.UInt, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.bodyColorRemap1, PsoDataType.SInt, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.bodyColorRemap2, PsoDataType.SInt, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.bodyColorRemap3, PsoDataType.SInt, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.bodyColorRemap4, PsoDataType.SInt, 72, 0, 0) + ); + case MetaName.CLODLight: + return new PsoStructureInfo(MetaName.CLODLight, 0, 0, 136, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.VECTOR3), + new PsoStructureEntryInfo(MetaName.direction, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Float, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.falloff, PsoDataType.Array, 24, 0, (MetaName)2), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Float, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.falloffExponent, PsoDataType.Array, 40, 0, (MetaName)4), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UInt, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.timeAndStateFlags, PsoDataType.Array, 56, 0, (MetaName)6), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UInt, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.hash, PsoDataType.Array, 72, 0, (MetaName)8), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UByte, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.coneInnerAngle, PsoDataType.Array, 88, 0, (MetaName)10), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UByte, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.coneOuterAngleOrCapExt, PsoDataType.Array, 104, 0, MetaName.PsoPOINTER), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UByte, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.coronaIntensity, PsoDataType.Array, 120, 0, (MetaName)14) + ); + case MetaName.CBlockDesc: + return new PsoStructureInfo(MetaName.CBlockDesc, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.version, PsoDataType.UInt, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.flags, PsoDataType.UInt, 4, 0, 0), + new PsoStructureEntryInfo(MetaName.name, PsoDataType.String, 8, 3, 0), + new PsoStructureEntryInfo(MetaName.exportedBy, PsoDataType.String, 24, 3, 0), + new PsoStructureEntryInfo(MetaName.owner, PsoDataType.String, 40, 3, 0), + new PsoStructureEntryInfo(MetaName.time, PsoDataType.String, 56, 3, 0) + ); + case MetaName.CEntityDef: + return new PsoStructureInfo(MetaName.CEntityDef, 0, 0, 128, + new PsoStructureEntryInfo(MetaName.archetypeName, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.flags, PsoDataType.UInt, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.guid, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.position, PsoDataType.Float3, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.rotation, PsoDataType.Float4, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.scaleXY, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.scaleZ, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.parentIndex, PsoDataType.SInt, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.lodDist, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.lodLevel, PsoDataType.Enum, 80, 0, (MetaName)1264241711), + new PsoStructureEntryInfo(MetaName.numChildren, PsoDataType.UInt, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.priorityLevel, PsoDataType.Enum, 88, 0, (MetaName)648413703), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), + new PsoStructureEntryInfo(MetaName.extensions, PsoDataType.Array, 96, 0, MetaName.PsoPOINTER), + new PsoStructureEntryInfo(MetaName.ambientOcclusionMultiplier, PsoDataType.SInt, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.artificialAmbientOcclusion, PsoDataType.SInt, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.tintValue, PsoDataType.UInt, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.lightGroup, PsoDataType.UInt, 124, 0, 0) + ); + case MetaName.CDistantLODLight: + return new PsoStructureInfo(MetaName.CDistantLODLight, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.VECTOR3), + new PsoStructureEntryInfo(MetaName.position, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UInt, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.RGBI, PsoDataType.Array, 24, 0, (MetaName)2), + new PsoStructureEntryInfo(MetaName.numStreetLights, PsoDataType.UShort, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.category, PsoDataType.UShort, 42, 0, 0) + ); + case (MetaName)3730683074: + return new PsoStructureInfo((MetaName)3730683074, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2166096847), + new PsoStructureEntryInfo((MetaName)3085292924, PsoDataType.Array, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1998468471), + new PsoStructureEntryInfo((MetaName)1142266249, PsoDataType.Array, 16, 0, (MetaName)2) + ); + case (MetaName)2166096847: + return new PsoStructureInfo((MetaName)2166096847, 0, 0, 40, + new PsoStructureEntryInfo((MetaName)3748344047, PsoDataType.UInt, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.PortalIdx, PsoDataType.SInt, 4, 0, 0), + new PsoStructureEntryInfo(MetaName.RoomIdx, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)57503776, PsoDataType.UInt, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)1028873946, PsoDataType.SInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)4133637881), + new PsoStructureEntryInfo((MetaName)3203972140, PsoDataType.Array, 24, 0, (MetaName)5) + ); + case (MetaName)4133637881: + return new PsoStructureInfo((MetaName)4133637881, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.LinkType, PsoDataType.UInt, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxOcclusion, PsoDataType.Float, 4, 0, 0), + new PsoStructureEntryInfo((MetaName)3815194629, PsoDataType.UInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.IsDoor, PsoDataType.Bool, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.IsGlass, PsoDataType.Bool, 13, 0, 0) + ); + case (MetaName)1998468471: + return new PsoStructureInfo((MetaName)1998468471, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.Key, PsoDataType.UInt, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2301425487), + new PsoStructureEntryInfo((MetaName)3530626268, PsoDataType.Array, 8, 0, (MetaName)1) + ); + case (MetaName)2301425487: + return new PsoStructureInfo((MetaName)2301425487, 0, 0, 8, + new PsoStructureEntryInfo((MetaName)2721898107, PsoDataType.UInt, 0, 0, 0), + new PsoStructureEntryInfo((MetaName)1084559223, PsoDataType.SInt, 4, 0, 0) + ); + case (MetaName)2807227399: + return new PsoStructureInfo((MetaName)2807227399, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)78766281, PsoDataType.UInt, 8, 1, 0), + new PsoStructureEntryInfo((MetaName)3615736814, PsoDataType.UInt, 12, 1, 0), + new PsoStructureEntryInfo((MetaName)1981979787, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3155797354, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.camMotionBlurSettingsMetadata: + return new PsoStructureInfo(MetaName.camMotionBlurSettingsMetadata, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)3274038425, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1743155234, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)1328935990, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3242284698, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo((MetaName)938189370, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo((MetaName)1317618698, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)304164673, PsoDataType.UInt, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)3109021193, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)2711268798, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo((MetaName)960288180, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo((MetaName)3693477470, PsoDataType.UInt, 56, 0, 0) + ); + case (MetaName)2211164655: + return new PsoStructureInfo((MetaName)2211164655, 0, 0, 16, + new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)415335014, PsoDataType.Float, 12, 0, 0) + ); + case MetaName.camThirdPersonCameraMetadataQuadrupedalHeightSpring: + return new PsoStructureInfo(MetaName.camThirdPersonCameraMetadataQuadrupedalHeightSpring, 0, 0, 24, + new PsoStructureEntryInfo((MetaName)651835053, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)1065492607, PsoDataType.Float, 20, 0, 0) + ); + case (MetaName)2380636687: + return new PsoStructureInfo((MetaName)2380636687, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.Duration, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2993575128, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)4042229056, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.Start, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.End, PsoDataType.Float, 32, 0, 0) + ); + case MetaName.camAnimSceneDirectorMetadata: + return new PsoStructureInfo(MetaName.camAnimSceneDirectorMetadata, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)2406434970, PsoDataType.String, 24, 7, 0) + ); + case (MetaName)665455491: + return new PsoStructureInfo((MetaName)665455491, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3154226565), + new PsoStructureEntryInfo(MetaName.areas, PsoDataType.Array, 8, 0, 0) + ); + case (MetaName)3154226565: + return new PsoStructureInfo((MetaName)3154226565, 0, 0, 32, + new PsoStructureEntryInfo((MetaName)2473579981, PsoDataType.Float4, 16, 0, 0) + ); + case (MetaName)3584713396: + return new PsoStructureInfo((MetaName)3584713396, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)2394623568, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo((MetaName)3368196277, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo((MetaName)2477967991, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo((MetaName)3376433583, PsoDataType.String, 28, 7, 0), + new PsoStructureEntryInfo((MetaName)689054964, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo((MetaName)147587300, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo((MetaName)201820320, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo((MetaName)4035657267, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo((MetaName)3058832678, PsoDataType.String, 48, 7, 0), + new PsoStructureEntryInfo((MetaName)2649613364, PsoDataType.String, 52, 7, 0), + new PsoStructureEntryInfo((MetaName)4282874513, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo((MetaName)969882415, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo((MetaName)2143223731, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo((MetaName)1149455399, PsoDataType.String, 68, 7, 0), + new PsoStructureEntryInfo((MetaName)835576115, PsoDataType.String, 72, 7, 0) + ); + case MetaName.CTaskNMBuoyancy__Tunables: + return new PsoStructureInfo(MetaName.CTaskNMBuoyancy__Tunables, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo((MetaName)124792981, PsoDataType.Structure, 16, 0, (MetaName)3749122641) + ); + case (MetaName)932638721: + return new PsoStructureInfo((MetaName)932638721, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 2, 0), + new PsoStructureEntryInfo((MetaName)4259179796, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 2, 0), + new PsoStructureEntryInfo((MetaName)3705267857, PsoDataType.Array, 24, 0, (MetaName)2), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 2, 0), + new PsoStructureEntryInfo((MetaName)3574026465, PsoDataType.Array, 40, 0, (MetaName)4) + ); + default: + return null; + } + } + public static PsoEnumInfo GetEnumInfo(MetaName name) + { + //to generate enuminfos + switch (name) + { + case (MetaName)360458334: + return new PsoEnumInfo((MetaName)360458334, 1, + new PsoEnumEntryInfo(MetaName.none, -1), + new PsoEnumEntryInfo((MetaName)815563434, 0), + new PsoEnumEntryInfo((MetaName)969376721, 1), + new PsoEnumEntryInfo((MetaName)731244402, 2), + new PsoEnumEntryInfo((MetaName)3537679873, 3), + new PsoEnumEntryInfo((MetaName)3183119293, 4), + new PsoEnumEntryInfo((MetaName)4039766491, 5), + new PsoEnumEntryInfo((MetaName)3777516184, 6), + new PsoEnumEntryInfo((MetaName)229878718, 7), + new PsoEnumEntryInfo((MetaName)4285337393, 8), + new PsoEnumEntryInfo((MetaName)847803751, 9) + ); + case (MetaName)544262540: + return new PsoEnumInfo((MetaName)544262540, 1, + new PsoEnumEntryInfo((MetaName)52583446, 0), + new PsoEnumEntryInfo((MetaName)2253400966, 1), + new PsoEnumEntryInfo((MetaName)4012089111, 2), + new PsoEnumEntryInfo((MetaName)2477037232, 3), + new PsoEnumEntryInfo((MetaName)437487559, 4), + new PsoEnumEntryInfo((MetaName)730308174, 5), + new PsoEnumEntryInfo((MetaName)3129410619, 6), + new PsoEnumEntryInfo((MetaName)1762671403, 7), + new PsoEnumEntryInfo((MetaName)2615326998, 8), + new PsoEnumEntryInfo((MetaName)4157715503, 9), + new PsoEnumEntryInfo((MetaName)2969646890, 10), + new PsoEnumEntryInfo((MetaName)1645071976, 11), + new PsoEnumEntryInfo((MetaName)1358390657, 12) + ); + case (MetaName)2065815796: + return new PsoEnumInfo((MetaName)2065815796, 1, + new PsoEnumEntryInfo(MetaName.none, 0), + new PsoEnumEntryInfo((MetaName)2318284788, 1), + new PsoEnumEntryInfo((MetaName)840729009, 2), + new PsoEnumEntryInfo((MetaName)3921902053, 3) + ); + case (MetaName)3865430600: + return new PsoEnumInfo((MetaName)3865430600, 1, + new PsoEnumEntryInfo(MetaName.MKT_STANDARD, 0), + new PsoEnumEntryInfo(MetaName.MKT_SPORT, 1), + new PsoEnumEntryInfo(MetaName.MKT_SUV, 2), + new PsoEnumEntryInfo(MetaName.MKT_SPECIAL, 3) + ); + case (MetaName)2363989491: + return new PsoEnumInfo((MetaName)2363989491, 1, + new PsoEnumEntryInfo(MetaName.VMT_SPOILER, 0), + new PsoEnumEntryInfo(MetaName.VMT_BUMPER_F, 1), + new PsoEnumEntryInfo(MetaName.VMT_BUMPER_R, 2), + new PsoEnumEntryInfo(MetaName.VMT_SKIRT, 3), + new PsoEnumEntryInfo(MetaName.VMT_EXHAUST, 4), + new PsoEnumEntryInfo(MetaName.VMT_CHASSIS, 5), + new PsoEnumEntryInfo(MetaName.VMT_GRILL, 6), + new PsoEnumEntryInfo(MetaName.VMT_BONNET, 7), + new PsoEnumEntryInfo(MetaName.VMT_WING_L, 8), + new PsoEnumEntryInfo(MetaName.VMT_WING_R, 9), + new PsoEnumEntryInfo(MetaName.VMT_ROOF, 10), + new PsoEnumEntryInfo(MetaName.VMT_PLTHOLDER, 11), + new PsoEnumEntryInfo(MetaName.VMT_PLTVANITY, 12), + new PsoEnumEntryInfo(MetaName.VMT_INTERIOR1, 13), + new PsoEnumEntryInfo(MetaName.VMT_INTERIOR2, 14), + new PsoEnumEntryInfo(MetaName.VMT_INTERIOR3, 15), + new PsoEnumEntryInfo(MetaName.VMT_INTERIOR4, 16), + new PsoEnumEntryInfo(MetaName.VMT_INTERIOR5, 17), + new PsoEnumEntryInfo(MetaName.VMT_SEATS, 18), + new PsoEnumEntryInfo(MetaName.VMT_STEERING, 19), + new PsoEnumEntryInfo(MetaName.VMT_KNOB, 20), + new PsoEnumEntryInfo(MetaName.VMT_PLAQUE, 21), + new PsoEnumEntryInfo(MetaName.VMT_ICE, 22), + new PsoEnumEntryInfo(MetaName.VMT_TRUNK, 23), + new PsoEnumEntryInfo(MetaName.VMT_HYDRO, 24), + new PsoEnumEntryInfo(MetaName.VMT_ENGINEBAY1, 25), + new PsoEnumEntryInfo(MetaName.VMT_ENGINEBAY2, 26), + new PsoEnumEntryInfo(MetaName.VMT_ENGINEBAY3, 27), + new PsoEnumEntryInfo(MetaName.VMT_CHASSIS2, 28), + new PsoEnumEntryInfo(MetaName.VMT_CHASSIS3, 29), + new PsoEnumEntryInfo(MetaName.VMT_CHASSIS4, 30), + new PsoEnumEntryInfo(MetaName.VMT_CHASSIS5, 31), + new PsoEnumEntryInfo(MetaName.VMT_DOOR_L, 32), + new PsoEnumEntryInfo((MetaName)514696742, 33), + new PsoEnumEntryInfo(MetaName.VMT_LIVERY_MOD, 34), + new PsoEnumEntryInfo((MetaName)3409280882, 35), + new PsoEnumEntryInfo(MetaName.VMT_ENGINE, 36), + new PsoEnumEntryInfo(MetaName.VMT_BRAKES, 37), + new PsoEnumEntryInfo(MetaName.VMT_GEARBOX, 38), + new PsoEnumEntryInfo(MetaName.VMT_HORN, 39), + new PsoEnumEntryInfo(MetaName.VMT_SUSPENSION, 40), + new PsoEnumEntryInfo(MetaName.VMT_ARMOUR, 41), + new PsoEnumEntryInfo((MetaName)3278520444, 42), + new PsoEnumEntryInfo((MetaName)2334449168, 43), + new PsoEnumEntryInfo((MetaName)1675686396, 44), + new PsoEnumEntryInfo((MetaName)3968559424, 45), + new PsoEnumEntryInfo((MetaName)3919652883, 46), + new PsoEnumEntryInfo((MetaName)2656522436, 47), + new PsoEnumEntryInfo(MetaName.VMT_WHEELS, 48), + new PsoEnumEntryInfo(MetaName.VMT_WHEELS_REAR_OR_HYDRAULICS, 49) + ); + case (MetaName)3635907608: + return new PsoEnumInfo((MetaName)3635907608, 1, + new PsoEnumEntryInfo(MetaName.none, -1), + new PsoEnumEntryInfo(MetaName.chassis, 0), + new PsoEnumEntryInfo((MetaName)1970334199, 48), + new PsoEnumEntryInfo(MetaName.bumper_f, 49), + new PsoEnumEntryInfo(MetaName.bumper_r, 50), + new PsoEnumEntryInfo(MetaName.wing_rf, 51), + new PsoEnumEntryInfo(MetaName.wing_lf, 52), + new PsoEnumEntryInfo(MetaName.bonnet, 53), + new PsoEnumEntryInfo(MetaName.boot, 54), + new PsoEnumEntryInfo(MetaName.exhaust, 56), + new PsoEnumEntryInfo(MetaName.exhaust_2, 57), + new PsoEnumEntryInfo(MetaName.exhaust_3, 58), + new PsoEnumEntryInfo(MetaName.exhaust_4, 59), + new PsoEnumEntryInfo((MetaName)1666652977, 60), + new PsoEnumEntryInfo((MetaName)1972682668, 61), + new PsoEnumEntryInfo((MetaName)3204862618, 62), + new PsoEnumEntryInfo((MetaName)3503093287, 63), + new PsoEnumEntryInfo((MetaName)442599751, 64), + new PsoEnumEntryInfo((MetaName)2600343066, 65), + new PsoEnumEntryInfo((MetaName)3598945568, 66), + new PsoEnumEntryInfo((MetaName)3896619164, 67), + new PsoEnumEntryInfo((MetaName)2989016171, 68), + new PsoEnumEntryInfo((MetaName)3320572913, 69), + new PsoEnumEntryInfo((MetaName)529211190, 70), + new PsoEnumEntryInfo((MetaName)823345734, 71), + new PsoEnumEntryInfo(MetaName.extra_1, 401), + new PsoEnumEntryInfo(MetaName.extra_2, 402), + new PsoEnumEntryInfo(MetaName.extra_3, 403), + new PsoEnumEntryInfo(MetaName.extra_4, 404), + new PsoEnumEntryInfo(MetaName.extra_5, 405), + new PsoEnumEntryInfo((MetaName)3145755371, 406), + new PsoEnumEntryInfo((MetaName)2360446286, 407), + new PsoEnumEntryInfo((MetaName)2661527858, 408), + new PsoEnumEntryInfo((MetaName)1913477126, 409), + new PsoEnumEntryInfo((MetaName)2125833567, 410), + new PsoEnumEntryInfo((MetaName)2431830489, 411), + new PsoEnumEntryInfo((MetaName)2720558148, 412), + new PsoEnumEntryInfo((MetaName)903844796, 413), + new PsoEnumEntryInfo((MetaName)1202337617, 414), + new PsoEnumEntryInfo((MetaName)2190258525, 417), + new PsoEnumEntryInfo((MetaName)1950749904, 418), + new PsoEnumEntryInfo((MetaName)1709504522, 419), + new PsoEnumEntryInfo((MetaName)1480285367, 420), + new PsoEnumEntryInfo((MetaName)1213709552, 421), + new PsoEnumEntryInfo((MetaName)848662892, 422), + new PsoEnumEntryInfo((MetaName)3990325233, 423), + new PsoEnumEntryInfo((MetaName)367056899, 424), + new PsoEnumEntryInfo((MetaName)3413787451, 425), + new PsoEnumEntryInfo((MetaName)2734584581, 426), + new PsoEnumEntryInfo(MetaName.mod_col_1, 427), + new PsoEnumEntryInfo(MetaName.mod_col_2, 428), + new PsoEnumEntryInfo(MetaName.mod_col_3, 429), + new PsoEnumEntryInfo(MetaName.mod_col_4, 430), + new PsoEnumEntryInfo(MetaName.mod_col_5, 431), + new PsoEnumEntryInfo((MetaName)1547719720, 432), + new PsoEnumEntryInfo((MetaName)580018373, 433), + new PsoEnumEntryInfo((MetaName)4191162177, 434), + new PsoEnumEntryInfo((MetaName)3257212908, 435), + new PsoEnumEntryInfo((MetaName)3033709986, 436), + new PsoEnumEntryInfo((MetaName)2249285664, 437), + new PsoEnumEntryInfo((MetaName)1498318491, 438), + new PsoEnumEntryInfo((MetaName)1787603223, 439), + new PsoEnumEntryInfo((MetaName)1573326728, 440), + new PsoEnumEntryInfo((MetaName)1862676998, 441), + new PsoEnumEntryInfo((MetaName)1044598917, 442), + new PsoEnumEntryInfo(MetaName.misc_a, 369), + new PsoEnumEntryInfo(MetaName.misc_b, 370), + new PsoEnumEntryInfo(MetaName.misc_c, 371), + new PsoEnumEntryInfo(MetaName.misc_d, 372), + new PsoEnumEntryInfo(MetaName.misc_e, 373), + new PsoEnumEntryInfo(MetaName.misc_f, 374), + new PsoEnumEntryInfo(MetaName.misc_g, 375), + new PsoEnumEntryInfo(MetaName.misc_h, 376), + new PsoEnumEntryInfo(MetaName.misc_i, 377), + new PsoEnumEntryInfo(MetaName.misc_j, 378), + new PsoEnumEntryInfo(MetaName.misc_k, 379), + new PsoEnumEntryInfo(MetaName.misc_l, 380), + new PsoEnumEntryInfo(MetaName.misc_m, 381), + new PsoEnumEntryInfo(MetaName.misc_n, 382), + new PsoEnumEntryInfo(MetaName.misc_o, 383), + new PsoEnumEntryInfo(MetaName.misc_p, 384), + new PsoEnumEntryInfo(MetaName.misc_q, 385), + new PsoEnumEntryInfo(MetaName.misc_r, 386), + new PsoEnumEntryInfo(MetaName.misc_s, 387), + new PsoEnumEntryInfo(MetaName.misc_t, 388), + new PsoEnumEntryInfo(MetaName.misc_u, 389), + new PsoEnumEntryInfo(MetaName.misc_v, 390), + new PsoEnumEntryInfo(MetaName.misc_w, 391), + new PsoEnumEntryInfo(MetaName.misc_x, 392), + new PsoEnumEntryInfo(MetaName.misc_y, 393), + new PsoEnumEntryInfo(MetaName.misc_z, 394), + new PsoEnumEntryInfo((MetaName)2690009945, 395), + new PsoEnumEntryInfo((MetaName)1385115596, 396), + new PsoEnumEntryInfo((MetaName)2921986035, 79), + new PsoEnumEntryInfo(MetaName.steeringwheel, 80), + new PsoEnumEntryInfo((MetaName)3929033220, 29), + new PsoEnumEntryInfo((MetaName)837923007, 21), + new PsoEnumEntryInfo((MetaName)991413023, 22), + new PsoEnumEntryInfo(MetaName.headlight_l, 91), + new PsoEnumEntryInfo(MetaName.headlight_r, 92), + new PsoEnumEntryInfo((MetaName)3979005071, 97), + new PsoEnumEntryInfo(MetaName.indicator_lf, 95), + new PsoEnumEntryInfo((MetaName)112742354, 98), + new PsoEnumEntryInfo(MetaName.indicator_rf, 96), + new PsoEnumEntryInfo((MetaName)3008822349, 93), + new PsoEnumEntryInfo((MetaName)914195096, 94), + new PsoEnumEntryInfo(MetaName.window_lf, 42), + new PsoEnumEntryInfo(MetaName.window_rf, 43), + new PsoEnumEntryInfo((MetaName)2355575415, 45), + new PsoEnumEntryInfo((MetaName)2639884295, 44), + new PsoEnumEntryInfo((MetaName)2675373130, 46), + new PsoEnumEntryInfo((MetaName)3523659197, 47), + new PsoEnumEntryInfo(MetaName.hub_lf, 30), + new PsoEnumEntryInfo(MetaName.hub_rf, 31), + new PsoEnumEntryInfo(MetaName.windscreen_r, 41), + new PsoEnumEntryInfo((MetaName)4084563217, 104), + new PsoEnumEntryInfo((MetaName)556062831, 105), + new PsoEnumEntryInfo((MetaName)3850133799, 106), + new PsoEnumEntryInfo((MetaName)728001778, 107), + new PsoEnumEntryInfo(MetaName.door_dside_f, 3), + new PsoEnumEntryInfo(MetaName.door_dside_r, 4), + new PsoEnumEntryInfo(MetaName.door_pside_f, 5), + new PsoEnumEntryInfo(MetaName.door_pside_r, 6), + new PsoEnumEntryInfo(MetaName.bobble_head, 361), + new PsoEnumEntryInfo(MetaName.bobble_base, 362), + new PsoEnumEntryInfo((MetaName)785162942, 363), + new PsoEnumEntryInfo(MetaName.engineblock, 364), + new PsoEnumEntryInfo((MetaName)3654959273, 474), + new PsoEnumEntryInfo((MetaName)808381781, 475), + new PsoEnumEntryInfo((MetaName)4268165574, 476), + new PsoEnumEntryInfo((MetaName)3579951032, 477), + new PsoEnumEntryInfo((MetaName)2733953759, 478), + new PsoEnumEntryInfo((MetaName)4123490435, 479), + new PsoEnumEntryInfo((MetaName)3342441320, 480), + new PsoEnumEntryInfo((MetaName)1726175929, 481), + new PsoEnumEntryInfo((MetaName)1947366679, 482), + new PsoEnumEntryInfo((MetaName)2065498928, 483), + new PsoEnumEntryInfo((MetaName)2572238744, 484), + new PsoEnumEntryInfo((MetaName)730555402, 485), + new PsoEnumEntryInfo((MetaName)4194074861, 486), + new PsoEnumEntryInfo((MetaName)1343696161, 487), + new PsoEnumEntryInfo((MetaName)506677594, 488), + new PsoEnumEntryInfo((MetaName)4167728581, 489), + new PsoEnumEntryInfo((MetaName)3326122354, 490), + new PsoEnumEntryInfo((MetaName)217851628, 491), + new PsoEnumEntryInfo((MetaName)3666821647, 492), + new PsoEnumEntryInfo((MetaName)2168885119, 493), + new PsoEnumEntryInfo((MetaName)2399611648, 494), + new PsoEnumEntryInfo((MetaName)3519328378, 495), + new PsoEnumEntryInfo((MetaName)2958716326, 496), + new PsoEnumEntryInfo((MetaName)3292501248, 497), + new PsoEnumEntryInfo((MetaName)2651277456, 498), + new PsoEnumEntryInfo((MetaName)3888995355, 499), + new PsoEnumEntryInfo((MetaName)3843353624, 500), + new PsoEnumEntryInfo((MetaName)3135215534, 501), + new PsoEnumEntryInfo((MetaName)3364434689, 502), + new PsoEnumEntryInfo((MetaName)2723112578, 503), + new PsoEnumEntryInfo((MetaName)2970026993, 504), + new PsoEnumEntryInfo((MetaName)2245832093, 505), + new PsoEnumEntryInfo((MetaName)2492156666, 506), + new PsoEnumEntryInfo((MetaName)1765012564, 507), + new PsoEnumEntryInfo((MetaName)2014155263, 508), + new PsoEnumEntryInfo((MetaName)1286290243, 509), + new PsoEnumEntryInfo((MetaName)1535367412, 510), + new PsoEnumEntryInfo((MetaName)3992710274, 511), + new PsoEnumEntryInfo((MetaName)1077448950, 512), + new PsoEnumEntryInfo((MetaName)1382757723, 513), + new PsoEnumEntryInfo((MetaName)614062521, 514), + new PsoEnumEntryInfo((MetaName)3783807571, 524), + new PsoEnumEntryInfo((MetaName)2839830988, 525), + new PsoEnumEntryInfo((MetaName)3138651499, 526), + new PsoEnumEntryInfo((MetaName)2400824695, 527), + new PsoEnumEntryInfo((MetaName)4141162370, 560), + new PsoEnumEntryInfo((MetaName)451472348, 561), + new PsoEnumEntryInfo((MetaName)1768767594, 562), + new PsoEnumEntryInfo((MetaName)3599310922, 563), + new PsoEnumEntryInfo((MetaName)1496111458, 564), + new PsoEnumEntryInfo((MetaName)3929521030, 565), + new PsoEnumEntryInfo((MetaName)1157497495, 566), + new PsoEnumEntryInfo((MetaName)1032498025, 567), + new PsoEnumEntryInfo((MetaName)2573434709, 568), + new PsoEnumEntryInfo((MetaName)930609265, 569), + new PsoEnumEntryInfo((MetaName)879315983, 570), + new PsoEnumEntryInfo((MetaName)411536741, 571), + new PsoEnumEntryInfo((MetaName)1086719913, 572), + new PsoEnumEntryInfo((MetaName)3237490897, 573), + new PsoEnumEntryInfo((MetaName)3375838140, 574), + new PsoEnumEntryInfo((MetaName)2381840182, 575), + new PsoEnumEntryInfo((MetaName)3607058940, 576), + new PsoEnumEntryInfo((MetaName)3607058940, 577), + new PsoEnumEntryInfo((MetaName)1208798824, 578), + new PsoEnumEntryInfo((MetaName)303656220, 579), + new PsoEnumEntryInfo((MetaName)660207018, 580), + new PsoEnumEntryInfo((MetaName)2796607005, 581), + new PsoEnumEntryInfo((MetaName)3045655218, 582), + new PsoEnumEntryInfo((MetaName)2017296145, 583), + new PsoEnumEntryInfo((MetaName)3978311755, 584), + new PsoEnumEntryInfo((MetaName)1122332083, 585), + new PsoEnumEntryInfo((MetaName)1123212214, 586), + new PsoEnumEntryInfo((MetaName)4063416457, 587), + new PsoEnumEntryInfo((MetaName)4011591561, 588), + new PsoEnumEntryInfo((MetaName)2320654166, 589), + new PsoEnumEntryInfo((MetaName)2292220415, 590), + new PsoEnumEntryInfo((MetaName)2166816405, 591), + new PsoEnumEntryInfo((MetaName)2486991428, 592) + ); + case (MetaName)3413962745: + return new PsoEnumInfo((MetaName)3413962745, 1, + new PsoEnumEntryInfo(MetaName.VMCP_DEFAULT, 0), + new PsoEnumEntryInfo((MetaName)3001706694, 1), + new PsoEnumEntryInfo((MetaName)1148399176, 2), + new PsoEnumEntryInfo((MetaName)2057559994, 3), + new PsoEnumEntryInfo((MetaName)1556139353, 4), + new PsoEnumEntryInfo((MetaName)1830737308, 5), + new PsoEnumEntryInfo((MetaName)457854237, 6), + new PsoEnumEntryInfo((MetaName)1629770278, 7), + new PsoEnumEntryInfo((MetaName)2879151926, 8), + new PsoEnumEntryInfo((MetaName)3193071790, 9), + new PsoEnumEntryInfo((MetaName)2770495034, 10) + ); + case (MetaName)1795685103: + return new PsoEnumInfo((MetaName)1795685103, 1, + new PsoEnumEntryInfo(MetaName.JOB_BIG, 0), + new PsoEnumEntryInfo((MetaName)568575574, 1), + new PsoEnumEntryInfo((MetaName)4127034762, 2), + new PsoEnumEntryInfo((MetaName)1877679104, 3), + new PsoEnumEntryInfo((MetaName)2980984179, 4), + new PsoEnumEntryInfo((MetaName)298596333, 5), + new PsoEnumEntryInfo((MetaName)652367616, 6), + new PsoEnumEntryInfo((MetaName)2308938833, 7), + new PsoEnumEntryInfo((MetaName)3292874000, 8), + new PsoEnumEntryInfo((MetaName)1961485429, 9), + new PsoEnumEntryInfo((MetaName)394130841, 10), + new PsoEnumEntryInfo((MetaName)4072415756, 11), + new PsoEnumEntryInfo((MetaName)1792396879, 12), + new PsoEnumEntryInfo((MetaName)980984444, 13), + new PsoEnumEntryInfo((MetaName)1218436764, 14) + ); + case MetaName.DataFileType: + return new PsoEnumInfo(MetaName.DataFileType, 1, + new PsoEnumEntryInfo(MetaName.RPF_FILE, 0), + new PsoEnumEntryInfo((MetaName)3422262499, 1), + new PsoEnumEntryInfo((MetaName)4115202587, 2), + new PsoEnumEntryInfo(MetaName.IPL_FILE, 3), + new PsoEnumEntryInfo(MetaName.PERMANENT_ITYP_FILE, 4), + new PsoEnumEntryInfo((MetaName)4175147664, 5), + new PsoEnumEntryInfo(MetaName.HANDLING_FILE, 6), + new PsoEnumEntryInfo(MetaName.VEHICLEEXTRAS_FILE, 7), + new PsoEnumEntryInfo((MetaName)1244900227, 8), + new PsoEnumEntryInfo(MetaName.PEDSTREAM_FILE, 9), + new PsoEnumEntryInfo(MetaName.CARCOLS_FILE, 10), + new PsoEnumEntryInfo(MetaName.POPGRP_FILE, 11), + new PsoEnumEntryInfo((MetaName)337231870, 12), + new PsoEnumEntryInfo((MetaName)3783701680, 13), + new PsoEnumEntryInfo(MetaName.POPSCHED_FILE, 14), + new PsoEnumEntryInfo(MetaName.ZONEBIND_FILE, 15), + new PsoEnumEntryInfo((MetaName)2322405299, 16), + new PsoEnumEntryInfo((MetaName)1691493964, 17), + new PsoEnumEntryInfo((MetaName)1339784773, 18), + new PsoEnumEntryInfo((MetaName)2041822787, 19), + new PsoEnumEntryInfo(MetaName.PED_PERSONALITY_FILE, 20), + new PsoEnumEntryInfo((MetaName)1804477999, 21), + new PsoEnumEntryInfo((MetaName)321643698, 22), + new PsoEnumEntryInfo((MetaName)1803244175, 23), + new PsoEnumEntryInfo((MetaName)153829429, 24), + new PsoEnumEntryInfo((MetaName)1431237327, 25), + new PsoEnumEntryInfo((MetaName)3850710962, 26), + new PsoEnumEntryInfo(MetaName.TIMECYCLE_FILE, 27), + new PsoEnumEntryInfo(MetaName.TIMECYCLEMOD_FILE, 28), + new PsoEnumEntryInfo(MetaName.WEATHER_FILE, 29), + new PsoEnumEntryInfo((MetaName)2403189033, 30), + new PsoEnumEntryInfo((MetaName)2431127142, 31), + new PsoEnumEntryInfo(MetaName.PROCOBJ_FILE, 32), + new PsoEnumEntryInfo(MetaName.PROC_META_FILE, 33), + new PsoEnumEntryInfo(MetaName.VFX_SETTINGS_FILE, 34), + new PsoEnumEntryInfo(MetaName.SP_STATS_DISPLAY_LIST_FILE, 35), + new PsoEnumEntryInfo(MetaName.MP_STATS_DISPLAY_LIST_FILE, 36), + new PsoEnumEntryInfo((MetaName)915034040, 37), + new PsoEnumEntryInfo((MetaName)3897970480, 38), + new PsoEnumEntryInfo((MetaName)1815909929, 39), + new PsoEnumEntryInfo((MetaName)1987285695, 40), + new PsoEnumEntryInfo((MetaName)2221411686, 41), + new PsoEnumEntryInfo((MetaName)3993726615, 42), + new PsoEnumEntryInfo(MetaName.TIME_FILE, 43), + new PsoEnumEntryInfo(MetaName.BLOODFX_FILE, 44), + new PsoEnumEntryInfo(MetaName.ENTITYFX_FILE, 45), + new PsoEnumEntryInfo(MetaName.EXPLOSIONFX_FILE, 46), + new PsoEnumEntryInfo(MetaName.MATERIALFX_FILE, 47), + new PsoEnumEntryInfo((MetaName)775482934, 48), + new PsoEnumEntryInfo((MetaName)2701401283, 49), + new PsoEnumEntryInfo((MetaName)2889043007, 50), + new PsoEnumEntryInfo((MetaName)2374071028, 51), + new PsoEnumEntryInfo((MetaName)2737334773, 52), + new PsoEnumEntryInfo((MetaName)1714450686, 53), + new PsoEnumEntryInfo((MetaName)4183131447, 54), + new PsoEnumEntryInfo((MetaName)3947749085, 55), + new PsoEnumEntryInfo((MetaName)3685712067, 56), + new PsoEnumEntryInfo(MetaName.WHEELFX_FILE, 57), + new PsoEnumEntryInfo(MetaName.WEAPONFX_FILE, 58), + new PsoEnumEntryInfo(MetaName.DECALS_FILE, 59), + new PsoEnumEntryInfo(MetaName.NAVMESH_INDEXREMAPPING_FILE, 60), + new PsoEnumEntryInfo(MetaName.NAVNODE_INDEXREMAPPING_FILE, 61), + new PsoEnumEntryInfo(MetaName.AUDIOMESH_INDEXREMAPPING_FILE, 62), + new PsoEnumEntryInfo(MetaName.JUNCTION_TEMPLATES_FILE, 63), + new PsoEnumEntryInfo(MetaName.PATH_ZONES_FILE, 64), + new PsoEnumEntryInfo(MetaName.DISTANT_LIGHTS_FILE, 65), + new PsoEnumEntryInfo(MetaName.DISTANT_LIGHTS_HD_FILE, 66), + new PsoEnumEntryInfo((MetaName)3179455283, 67), + new PsoEnumEntryInfo(MetaName.WATER_FILE, 68), + new PsoEnumEntryInfo(MetaName.TRAINCONFIGS_FILE, 69), + new PsoEnumEntryInfo(MetaName.TRAINTRACK_FILE, 70), + new PsoEnumEntryInfo(MetaName.PED_METADATA_FILE, 71), + new PsoEnumEntryInfo(MetaName.WEAPON_METADATA_FILE, 72), + new PsoEnumEntryInfo(MetaName.VEHICLE_METADATA_FILE, 73), + new PsoEnumEntryInfo((MetaName)1977530558, 74), + new PsoEnumEntryInfo((MetaName)3996479808, 75), + new PsoEnumEntryInfo((MetaName)3511689339, 76), + new PsoEnumEntryInfo((MetaName)3376025535, 77), + new PsoEnumEntryInfo(MetaName.WEAPONINFO_FILE, 78), + new PsoEnumEntryInfo(MetaName.WEAPONCOMPONENTSINFO_FILE, 79), + new PsoEnumEntryInfo(MetaName.LOADOUTS_FILE, 80), + new PsoEnumEntryInfo((MetaName)3015019398, 81), + new PsoEnumEntryInfo((MetaName)2957501757, 82), + new PsoEnumEntryInfo((MetaName)276092270, 83), + new PsoEnumEntryInfo(MetaName.SCENARIO_POINTS_PSO_FILE, 84), + new PsoEnumEntryInfo((MetaName)265895563, 85), + new PsoEnumEntryInfo((MetaName)4254420265, 86), + new PsoEnumEntryInfo((MetaName)569488699, 87), + new PsoEnumEntryInfo((MetaName)1322995281, 88), + new PsoEnumEntryInfo((MetaName)1575806881, 89), + new PsoEnumEntryInfo((MetaName)2585891657, 90), + new PsoEnumEntryInfo((MetaName)1221077490, 91), + new PsoEnumEntryInfo((MetaName)2488014020, 92), + new PsoEnumEntryInfo((MetaName)873638153, 93), + new PsoEnumEntryInfo((MetaName)4108615940, 94), + new PsoEnumEntryInfo(MetaName.SLOWNESS_ZONES_FILE, 95), + new PsoEnumEntryInfo(MetaName.LIQUIDFX_FILE, 96), + new PsoEnumEntryInfo(MetaName.VFXVEHICLEINFO_FILE, 97), + new PsoEnumEntryInfo(MetaName.VFXPEDINFO_FILE, 98), + new PsoEnumEntryInfo(MetaName.DOOR_TUNING_FILE, 99), + new PsoEnumEntryInfo(MetaName.PTFXASSETINFO_FILE, 100), + new PsoEnumEntryInfo(MetaName.SCRIPTFX_FILE, 101), + new PsoEnumEntryInfo(MetaName.VFXREGIONINFO_FILE, 102), + new PsoEnumEntryInfo(MetaName.VFXINTERIORINFO_FILE, 103), + new PsoEnumEntryInfo((MetaName)2801332849, 104), + new PsoEnumEntryInfo(MetaName.STREET_VEHICLE_ASSOCIATION_FILE, 105), + new PsoEnumEntryInfo(MetaName.VFXWEAPONINFO_FILE, 106), + new PsoEnumEntryInfo(MetaName.EXPLOSION_INFO_FILE, 107), + new PsoEnumEntryInfo(MetaName.JUNCTION_TEMPLATES_PSO_FILE, 108), + new PsoEnumEntryInfo(MetaName.MAPZONES_FILE, 109), + new PsoEnumEntryInfo(MetaName.SP_STATS_UI_LIST_FILE, 110), + new PsoEnumEntryInfo(MetaName.MP_STATS_UI_LIST_FILE, 111), + new PsoEnumEntryInfo(MetaName.OBJ_COVER_TUNING_FILE, 112), + new PsoEnumEntryInfo(MetaName.STREAMING_REQUEST_LISTS_FILE, 113), + new PsoEnumEntryInfo((MetaName)1504533439, 114), + new PsoEnumEntryInfo(MetaName.WORLD_HEIGHTMAP_FILE, 115), + new PsoEnumEntryInfo(MetaName.WORLD_WATERHEIGHT_FILE, 116), + new PsoEnumEntryInfo(MetaName.PED_OVERLAY_FILE, 117), + new PsoEnumEntryInfo(MetaName.WEAPON_ANIMATIONS_FILE, 118), + new PsoEnumEntryInfo(MetaName.VEHICLE_POPULATION_FILE, 119), + new PsoEnumEntryInfo((MetaName)1586102416, 120), + new PsoEnumEntryInfo((MetaName)1389081087, 121), + new PsoEnumEntryInfo((MetaName)3648540414, 122), + new PsoEnumEntryInfo((MetaName)2747161193, 123), + new PsoEnumEntryInfo((MetaName)1160967041, 124), + new PsoEnumEntryInfo((MetaName)322779061, 125), + new PsoEnumEntryInfo((MetaName)595808921, 126), + new PsoEnumEntryInfo((MetaName)2040342322, 127), + new PsoEnumEntryInfo((MetaName)873568416, 128), + new PsoEnumEntryInfo((MetaName)607800534, 129), + new PsoEnumEntryInfo((MetaName)387140454, 130), + new PsoEnumEntryInfo((MetaName)2229907729, 131), + new PsoEnumEntryInfo(MetaName.VEHGEN_MARKUP_FILE, 132), + new PsoEnumEntryInfo((MetaName)1241304438, 133), + new PsoEnumEntryInfo(MetaName.TATTOO_SHOP_DLC_FILE, 134), + new PsoEnumEntryInfo(MetaName.VEHICLE_VARIATION_FILE, 135), + new PsoEnumEntryInfo(MetaName.CONTENT_UNLOCKING_META_FILE, 136), + new PsoEnumEntryInfo(MetaName.SHOP_PED_APPAREL_META_FILE, 137), + new PsoEnumEntryInfo(MetaName.AUDIO_SOUNDDATA, 138), + new PsoEnumEntryInfo((MetaName)2270570848, 139), + new PsoEnumEntryInfo(MetaName.AUDIO_GAMEDATA, 140), + new PsoEnumEntryInfo(MetaName.AUDIO_DYNAMIXDATA, 141), + new PsoEnumEntryInfo(MetaName.AUDIO_SPEECHDATA, 142), + new PsoEnumEntryInfo(MetaName.AUDIO_SYNTHDATA, 143), + new PsoEnumEntryInfo(MetaName.AUDIO_WAVEPACK, 144), + new PsoEnumEntryInfo(MetaName.CLIP_SETS_FILE, 145), + new PsoEnumEntryInfo((MetaName)3354018708, 146), + new PsoEnumEntryInfo((MetaName)1714317514, 147), + new PsoEnumEntryInfo((MetaName)1603688191, 148), + new PsoEnumEntryInfo(MetaName.VEHICLE_SHOP_DLC_FILE, 149), + new PsoEnumEntryInfo(MetaName.WEAPON_SHOP_INFO_METADATA_FILE, 150), + new PsoEnumEntryInfo((MetaName)2609475948, 151), + new PsoEnumEntryInfo((MetaName)1309368403, 152), + new PsoEnumEntryInfo((MetaName)648947982, 153), + new PsoEnumEntryInfo((MetaName)2127547113, 154), + new PsoEnumEntryInfo((MetaName)2324879915, 155), + new PsoEnumEntryInfo((MetaName)91648887, 156), + new PsoEnumEntryInfo((MetaName)2018868761, 157), + new PsoEnumEntryInfo((MetaName)4129824885, 158), + new PsoEnumEntryInfo((MetaName)25671749, 159), + new PsoEnumEntryInfo(MetaName.TEXTFILE_METAFILE, 160), + new PsoEnumEntryInfo((MetaName)1639152529, 161), + new PsoEnumEntryInfo(MetaName.MOVE_NETWORK_DEFS, 162), + new PsoEnumEntryInfo(MetaName.WEAPONINFO_FILE_PATCH, 163), + new PsoEnumEntryInfo(MetaName.DLC_SCRIPT_METAFILE, 164), + new PsoEnumEntryInfo(MetaName.VEHICLE_LAYOUTS_FILE, 165), + new PsoEnumEntryInfo(MetaName.DLC_WEAPON_PICKUPS, 166), + new PsoEnumEntryInfo(MetaName.EXTRA_TITLE_UPDATE_DATA, 167), + new PsoEnumEntryInfo(MetaName.SCALEFORM_DLC_FILE, 168), + new PsoEnumEntryInfo(MetaName.OVERLAY_INFO_FILE, 169), + new PsoEnumEntryInfo(MetaName.ALTERNATE_VARIATIONS_FILE, 170), + new PsoEnumEntryInfo((MetaName)1866311889, 171), + new PsoEnumEntryInfo(MetaName.FIREFX_FILE, 172), + new PsoEnumEntryInfo(MetaName.INTERIOR_PROXY_ORDER_FILE, 173), + new PsoEnumEntryInfo(MetaName.DLC_ITYP_REQUEST, 174), + new PsoEnumEntryInfo(MetaName.EXTRA_FOLDER_MOUNT_DATA, 175), + new PsoEnumEntryInfo((MetaName)2738801230, 176), + new PsoEnumEntryInfo((MetaName)2678176687, 177), + new PsoEnumEntryInfo((MetaName)3169431862, 178), + new PsoEnumEntryInfo((MetaName)2421375782, 179), + new PsoEnumEntryInfo((MetaName)2145817864, 180), + new PsoEnumEntryInfo(MetaName.SCENARIO_INFO_FILE, 181), + new PsoEnumEntryInfo(MetaName.CONDITIONAL_ANIMS_FILE, 182), + new PsoEnumEntryInfo(MetaName.STATS_METADATA_PSO_FILE, 183), + new PsoEnumEntryInfo(MetaName.VFXFOGVOLUMEINFO_FILE, 184), + new PsoEnumEntryInfo(MetaName.RPF_FILE_PRE_INSTALL, 185), + new PsoEnumEntryInfo((MetaName)341493400, 186), + new PsoEnumEntryInfo((MetaName)3625514299, 187), + new PsoEnumEntryInfo((MetaName)33804852, 188), + new PsoEnumEntryInfo((MetaName)2800880346, 189), + new PsoEnumEntryInfo((MetaName)4292163424, 190), + new PsoEnumEntryInfo(MetaName.PED_FIRST_PERSON_ASSET_DATA, 191), + new PsoEnumEntryInfo(MetaName.GTXD_PARENTING_DATA, 192), + new PsoEnumEntryInfo((MetaName)364263123, 193), + new PsoEnumEntryInfo((MetaName)350410266, 194), + new PsoEnumEntryInfo((MetaName)3155601669, 195), + new PsoEnumEntryInfo(MetaName.PED_DAMAGE_APPEND_FILE, 196), + new PsoEnumEntryInfo((MetaName)1197964820, 197), + new PsoEnumEntryInfo((MetaName)3650318782, 198), + new PsoEnumEntryInfo((MetaName)2882324974, 199), + new PsoEnumEntryInfo(MetaName.PED_FIRST_PERSON_ALTERNATE_DATA, 200) + ); + case MetaName.DataFileContents: + return new PsoEnumInfo(MetaName.DataFileContents, 1, + new PsoEnumEntryInfo(MetaName.CONTENTS_DEFAULT, 0), + new PsoEnumEntryInfo(MetaName.CONTENTS_PROPS, 1), + new PsoEnumEntryInfo(MetaName.CONTENTS_MAP, 2), + new PsoEnumEntryInfo(MetaName.CONTENTS_LODS, 3), + new PsoEnumEntryInfo(MetaName.CONTENTS_PEDS, 4), + new PsoEnumEntryInfo(MetaName.CONTENTS_VEHICLES, 5), + new PsoEnumEntryInfo(MetaName.CONTENTS_ANIMATION, 6), + new PsoEnumEntryInfo(MetaName.CONTENTS_CUTSCENE, 7), + new PsoEnumEntryInfo(MetaName.CONTENTS_DLC_MAP_DATA, 8), + new PsoEnumEntryInfo((MetaName)2652598047, 9), + new PsoEnumEntryInfo((MetaName)1137770612, 10) + ); + case MetaName.InstallPartition: + return new PsoEnumInfo(MetaName.InstallPartition, 1, + new PsoEnumEntryInfo(MetaName.PARTITION_NONE, -1), + new PsoEnumEntryInfo(MetaName.PARTITION_0, 0), + new PsoEnumEntryInfo(MetaName.PARTITION_1, 1), + new PsoEnumEntryInfo(MetaName.PARTITION_2, 2), + new PsoEnumEntryInfo((MetaName)2899492762, 3) + ); + case (MetaName)2942646938: + return new PsoEnumInfo((MetaName)2942646938, 1, + new PsoEnumEntryInfo(MetaName.RADIO_GENRE_OFF, 0), + new PsoEnumEntryInfo(MetaName.RADIO_GENRE_MODERN_ROCK, 1), + new PsoEnumEntryInfo(MetaName.RADIO_GENRE_CLASSIC_ROCK, 2), + new PsoEnumEntryInfo((MetaName)4176867203, 3), + new PsoEnumEntryInfo((MetaName)285221172, 4), + new PsoEnumEntryInfo((MetaName)255693040, 5), + new PsoEnumEntryInfo(MetaName.RADIO_GENRE_PUNK, 6), + new PsoEnumEntryInfo((MetaName)3586021020, 7), + new PsoEnumEntryInfo(MetaName.RADIO_GENRE_RIGHT_WING_TALK, 8), + new PsoEnumEntryInfo((MetaName)1750835908, 9), + new PsoEnumEntryInfo((MetaName)43700981, 10), + new PsoEnumEntryInfo(MetaName.RADIO_GENRE_MEXICAN, 11), + new PsoEnumEntryInfo(MetaName.RADIO_GENRE_REGGAE, 12), + new PsoEnumEntryInfo(MetaName.RADIO_GENRE_JAZZ, 13), + new PsoEnumEntryInfo(MetaName.RADIO_GENRE_MOTOWN, 14), + new PsoEnumEntryInfo(MetaName.RADIO_GENRE_SURF, 15), + new PsoEnumEntryInfo((MetaName)4132096390, 16) + ); + case (MetaName)374769227: + return new PsoEnumInfo((MetaName)374769227, 1, + new PsoEnumEntryInfo(MetaName.SF_JEER_AT_HOT_PED, 0), + new PsoEnumEntryInfo((MetaName)296569367, 1), + new PsoEnumEntryInfo(MetaName.SF_HOT_PERSON, 2) + ); + case (MetaName)637184392: + return new PsoEnumInfo((MetaName)637184392, 1, + new PsoEnumEntryInfo(MetaName.EMPTY, 0), + new PsoEnumEntryInfo(MetaName.HIGH_HEELS, 1), + new PsoEnumEntryInfo((MetaName)87075802, 2) + ); + case (MetaName)2011786168: + return new PsoEnumInfo((MetaName)2011786168, 1, + new PsoEnumEntryInfo(MetaName.SAT_NONE, -1), + new PsoEnumEntryInfo((MetaName)2137706596, 0), + new PsoEnumEntryInfo((MetaName)3583791984, 1), + new PsoEnumEntryInfo((MetaName)2744852139, 2), + new PsoEnumEntryInfo((MetaName)977651983, 3), + new PsoEnumEntryInfo((MetaName)2169367037, 4) + ); + case MetaName.ThermalBehaviour: + return new PsoEnumInfo(MetaName.ThermalBehaviour, 1, + new PsoEnumEntryInfo((MetaName)3088554349, 0), + new PsoEnumEntryInfo((MetaName)3827341951, 1), + new PsoEnumEntryInfo(MetaName.TB_WARM, 2), + new PsoEnumEntryInfo((MetaName)2709699671, 3) + ); + case (MetaName)4015041481: + return new PsoEnumInfo((MetaName)4015041481, 1, + new PsoEnumEntryInfo(MetaName.SLOD_HUMAN, 0), + new PsoEnumEntryInfo((MetaName)1128152005, 1), + new PsoEnumEntryInfo((MetaName)3496177438, 2), + new PsoEnumEntryInfo((MetaName)551739454, 3), + new PsoEnumEntryInfo((MetaName)462532381, 4) + ); + case (MetaName)3029795674: + return new PsoEnumInfo((MetaName)3029795674, 1, + new PsoEnumEntryInfo(MetaName.SCENARIO_POP_STREAMING_NORMAL, 0), + new PsoEnumEntryInfo((MetaName)1152280719, 1) + ); + case (MetaName)888587604: + return new PsoEnumInfo((MetaName)888587604, 1, + new PsoEnumEntryInfo((MetaName)3148113674, 0), + new PsoEnumEntryInfo((MetaName)1563097128, 1), + new PsoEnumEntryInfo((MetaName)2099691605, 2), + new PsoEnumEntryInfo(MetaName.DSP_NORMAL, 3) + ); + case (MetaName)3057039286: + return new PsoEnumInfo((MetaName)3057039286, 1, + new PsoEnumEntryInfo((MetaName)383539244, 0), + new PsoEnumEntryInfo((MetaName)2803657832, 1), + new PsoEnumEntryInfo((MetaName)3916722287, 2), + new PsoEnumEntryInfo((MetaName)157616235, 3) + ); + case (MetaName)224899699: + return new PsoEnumInfo((MetaName)224899699, 1, + new PsoEnumEntryInfo((MetaName)2933717348, 0), + new PsoEnumEntryInfo((MetaName)892548521, 1), + new PsoEnumEntryInfo((MetaName)2727614813, 2), + new PsoEnumEntryInfo((MetaName)3032530358, 3), + new PsoEnumEntryInfo((MetaName)508324092, 4), + new PsoEnumEntryInfo(MetaName.APF_ISLOOPED, 5), + new PsoEnumEntryInfo((MetaName)2715402776, 6), + new PsoEnumEntryInfo((MetaName)2559750026, 7), + new PsoEnumEntryInfo((MetaName)334669388, 8), + new PsoEnumEntryInfo((MetaName)2827814553, 9), + new PsoEnumEntryInfo((MetaName)3646785267, 10), + new PsoEnumEntryInfo((MetaName)3914016462, 11), + new PsoEnumEntryInfo((MetaName)1023626813, 12), + new PsoEnumEntryInfo((MetaName)3730225937, 13), + new PsoEnumEntryInfo(MetaName.APF_ISBLENDAUTOREMOVE, 14), + new PsoEnumEntryInfo((MetaName)3723366928, 15), + new PsoEnumEntryInfo((MetaName)1984129772, 16), + new PsoEnumEntryInfo((MetaName)332392317, 17), + new PsoEnumEntryInfo((MetaName)1706286383, 18), + new PsoEnumEntryInfo((MetaName)1964664646, 19), + new PsoEnumEntryInfo((MetaName)46138343, 20), + new PsoEnumEntryInfo((MetaName)3541611037, 21), + new PsoEnumEntryInfo((MetaName)28056044, 22), + new PsoEnumEntryInfo((MetaName)2237335835, 23), + new PsoEnumEntryInfo((MetaName)1604795828, 24), + new PsoEnumEntryInfo((MetaName)1772376494, 25), + new PsoEnumEntryInfo((MetaName)1238878851, 26), + new PsoEnumEntryInfo((MetaName)2310486390, 27), + new PsoEnumEntryInfo((MetaName)1871501357, 28), + new PsoEnumEntryInfo((MetaName)98009864, 29), + new PsoEnumEntryInfo((MetaName)1321103795, 30), + new PsoEnumEntryInfo((MetaName)3765996064, 31) + ); + case (MetaName)1498349301: + return new PsoEnumInfo((MetaName)1498349301, 1, + new PsoEnumEntryInfo(MetaName.AP_LOW, 0), + new PsoEnumEntryInfo(MetaName.AP_MEDIUM, 1), + new PsoEnumEntryInfo((MetaName)313384972, 2), + new PsoEnumEntryInfo((MetaName)2096169364, 3), + new PsoEnumEntryInfo((MetaName)3509068476, 4), + new PsoEnumEntryInfo((MetaName)611607097, 5) + ); + case (MetaName)1631789397: + return new PsoEnumInfo((MetaName)1631789397, 1, + new PsoEnumEntryInfo(MetaName.SP_STREAMING, 0), + new PsoEnumEntryInfo(MetaName.SP_SINGLEPLAYER_RESIDENT, 1), + new PsoEnumEntryInfo(MetaName.SP_MULTIPLAYER_RESIDENT, 2) + ); + case (MetaName)733577798: + return new PsoEnumInfo((MetaName)733577798, 1, + new PsoEnumEntryInfo((MetaName)3866220764, 0), + new PsoEnumEntryInfo(MetaName.SP_Low, 1), + new PsoEnumEntryInfo(MetaName.SP_Medium, 2), + new PsoEnumEntryInfo((MetaName)44700989, 3) + ); + case (MetaName)2476021071: + return new PsoEnumInfo((MetaName)2476021071, 1, + new PsoEnumEntryInfo((MetaName)332192867, 0), + new PsoEnumEntryInfo((MetaName)1791815485, 1), + new PsoEnumEntryInfo((MetaName)2556745525, 2), + new PsoEnumEntryInfo((MetaName)3362010507, 3) + ); + case (MetaName)3696221852: + return new PsoEnumInfo((MetaName)3696221852, 1, + new PsoEnumEntryInfo((MetaName)535426628, 0), + new PsoEnumEntryInfo((MetaName)2694408850, 1), + new PsoEnumEntryInfo((MetaName)3585121058, 2) + ); + case (MetaName)2168155209: + return new PsoEnumInfo((MetaName)2168155209, 1, + new PsoEnumEntryInfo((MetaName)133697287, -1), + new PsoEnumEntryInfo((MetaName)3954742285, 0), + new PsoEnumEntryInfo((MetaName)201802975, 1), + new PsoEnumEntryInfo((MetaName)1916954442, 2), + new PsoEnumEntryInfo((MetaName)507840474, 3), + new PsoEnumEntryInfo((MetaName)1919284445, 4), + new PsoEnumEntryInfo((MetaName)4132752489, 5), + new PsoEnumEntryInfo((MetaName)499113587, 6) + ); + case (MetaName)3261591327: + return new PsoEnumInfo((MetaName)3261591327, 1, + new PsoEnumEntryInfo((MetaName)2736859683, 0), + new PsoEnumEntryInfo((MetaName)856837195, 1), + new PsoEnumEntryInfo((MetaName)1505659915, 2), + new PsoEnumEntryInfo((MetaName)2834501937, 3), + new PsoEnumEntryInfo((MetaName)373586892, 4) + ); + case (MetaName)516897642: + return new PsoEnumInfo((MetaName)516897642, 1, + new PsoEnumEntryInfo((MetaName)165337364, 0), + new PsoEnumEntryInfo((MetaName)385965901, 1), + new PsoEnumEntryInfo((MetaName)3779370608, 2) + ); + case (MetaName)2665868448: + return new PsoEnumInfo((MetaName)2665868448, 1, + new PsoEnumEntryInfo((MetaName)2470279016, 0), + new PsoEnumEntryInfo((MetaName)2411291289, 1), + new PsoEnumEntryInfo((MetaName)2103152910, 2), + new PsoEnumEntryInfo((MetaName)3535879124, 3), + new PsoEnumEntryInfo((MetaName)3456440271, 4) + ); + case (MetaName)2628996780: + return new PsoEnumInfo((MetaName)2628996780, 1, + new PsoEnumEntryInfo((MetaName)3708927680, 0), + new PsoEnumEntryInfo((MetaName)2136499167, 1), + new PsoEnumEntryInfo((MetaName)3568072118, 2) + ); + case (MetaName)2363471356: + return new PsoEnumInfo((MetaName)2363471356, 1, + new PsoEnumEntryInfo(MetaName.BONETAG_INVALID, -1), + new PsoEnumEntryInfo(MetaName.BONETAG_ROOT, 0), + new PsoEnumEntryInfo((MetaName)1724691876, 17916), + new PsoEnumEntryInfo(MetaName.BONETAG_PELVIS, 11816), + new PsoEnumEntryInfo(MetaName.BONETAG_PELVIS1, 53251), + new PsoEnumEntryInfo(MetaName.BONETAG_SPINE_ROOT, 57597), + new PsoEnumEntryInfo(MetaName.BONETAG_SPINE0, 23553), + new PsoEnumEntryInfo(MetaName.BONETAG_SPINE1, 24816), + new PsoEnumEntryInfo(MetaName.BONETAG_SPINE2, 24817), + new PsoEnumEntryInfo(MetaName.BONETAG_SPINE3, 24818), + new PsoEnumEntryInfo(MetaName.BONETAG_NECK, 39317), + new PsoEnumEntryInfo(MetaName.BONETAG_NECK2, 24532), + new PsoEnumEntryInfo(MetaName.BONETAG_HEAD, 31086), + new PsoEnumEntryInfo(MetaName.BONETAG_R_CLAVICLE, 10706), + new PsoEnumEntryInfo(MetaName.BONETAG_R_UPPERARM, 40269), + new PsoEnumEntryInfo(MetaName.BONETAG_R_FOREARM, 28252), + new PsoEnumEntryInfo(MetaName.BONETAG_R_HAND, 57005), + new PsoEnumEntryInfo((MetaName)2544970273, 58866), + new PsoEnumEntryInfo((MetaName)1005591915, 64016), + new PsoEnumEntryInfo((MetaName)774537696, 64017), + new PsoEnumEntryInfo((MetaName)4262590177, 58867), + new PsoEnumEntryInfo((MetaName)557114589, 64096), + new PsoEnumEntryInfo((MetaName)308168496, 64097), + new PsoEnumEntryInfo((MetaName)2082763528, 58868), + new PsoEnumEntryInfo((MetaName)2175091220, 64112), + new PsoEnumEntryInfo(MetaName.BONETAG_R_FINGER22, 64113), + new PsoEnumEntryInfo((MetaName)1358503090, 58869), + new PsoEnumEntryInfo((MetaName)1281645843, 64064), + new PsoEnumEntryInfo((MetaName)2136457977, 64065), + new PsoEnumEntryInfo((MetaName)1589098543, 58870), + new PsoEnumEntryInfo((MetaName)1518893755, 64080), + new PsoEnumEntryInfo((MetaName)2295060289, 64081), + new PsoEnumEntryInfo(MetaName.BONETAG_L_CLAVICLE, 64729), + new PsoEnumEntryInfo(MetaName.BONETAG_L_UPPERARM, 45509), + new PsoEnumEntryInfo(MetaName.BONETAG_L_FOREARM, 61163), + new PsoEnumEntryInfo(MetaName.BONETAG_L_HAND, 18905), + new PsoEnumEntryInfo((MetaName)3483436254, 26610), + new PsoEnumEntryInfo((MetaName)3342631108, 4089), + new PsoEnumEntryInfo((MetaName)2503351480, 4090), + new PsoEnumEntryInfo((MetaName)986241836, 26611), + new PsoEnumEntryInfo((MetaName)2527500201, 4169), + new PsoEnumEntryInfo((MetaName)4250526990, 4170), + new PsoEnumEntryInfo((MetaName)1293713363, 26612), + new PsoEnumEntryInfo((MetaName)3526758439, 4185), + new PsoEnumEntryInfo(MetaName.BONETAG_L_FINGER22, 4186), + new PsoEnumEntryInfo((MetaName)858967036, 26613), + new PsoEnumEntryInfo((MetaName)3236167907, 4137), + new PsoEnumEntryInfo((MetaName)2527702127, 4138), + new PsoEnumEntryInfo((MetaName)1149791911, 26614), + new PsoEnumEntryInfo((MetaName)3182656438, 4153), + new PsoEnumEntryInfo((MetaName)4127878243, 4154), + new PsoEnumEntryInfo(MetaName.BONETAG_L_THIGH, 58271), + new PsoEnumEntryInfo(MetaName.BONETAG_L_CALF, 63931), + new PsoEnumEntryInfo(MetaName.BONETAG_L_FOOT, 14201), + new PsoEnumEntryInfo((MetaName)3734897948, 2108), + new PsoEnumEntryInfo((MetaName)2497263744, 7531), + new PsoEnumEntryInfo(MetaName.BONETAG_R_THIGH, 51826), + new PsoEnumEntryInfo(MetaName.BONETAG_R_CALF, 36864), + new PsoEnumEntryInfo(MetaName.BONETAG_R_FOOT, 52301), + new PsoEnumEntryInfo((MetaName)1201239981, 20781), + new PsoEnumEntryInfo((MetaName)3004057651, 45631), + new PsoEnumEntryInfo((MetaName)1914315501, 35731), + new PsoEnumEntryInfo((MetaName)1648548119, 5232), + new PsoEnumEntryInfo((MetaName)533252846, 37119), + new PsoEnumEntryInfo((MetaName)2013152691, 61007), + new PsoEnumEntryInfo((MetaName)1274264606, 43810), + new PsoEnumEntryInfo((MetaName)2720329662, 23639), + new PsoEnumEntryInfo((MetaName)2841566254, 6442), + new PsoEnumEntryInfo(MetaName.BONETAG_L_PH_HAND, 60309), + new PsoEnumEntryInfo(MetaName.BONETAG_R_PH_HAND, 28422), + new PsoEnumEntryInfo((MetaName)3721004313, 41922), + new PsoEnumEntryInfo((MetaName)1646663439, 18212), + new PsoEnumEntryInfo((MetaName)2650851428, 33399), + new PsoEnumEntryInfo((MetaName)4289658079, 38180), + new PsoEnumEntryInfo((MetaName)2379061275, 39126), + new PsoEnumEntryInfo((MetaName)176026430, 39638), + new PsoEnumEntryInfo((MetaName)3870648046, 36029), + new PsoEnumEntryInfo((MetaName)3398180204, 6286), + new PsoEnumEntryInfo((MetaName)981146734, 838), + new PsoEnumEntryInfo(MetaName.BONETAG_TAIL1, 839), + new PsoEnumEntryInfo(MetaName.BONETAG_TAIL2, 840), + new PsoEnumEntryInfo((MetaName)2659378300, 841), + new PsoEnumEntryInfo((MetaName)1899006424, 842), + new PsoEnumEntryInfo((MetaName)2199399847, 843), + new PsoEnumEntryInfo((MetaName)1109140959, 30992), + new PsoEnumEntryInfo((MetaName)803570034, 30993), + new PsoEnumEntryInfo((MetaName)631663860, 30994), + new PsoEnumEntryInfo((MetaName)322488345, 30995), + new PsoEnumEntryInfo((MetaName)5907036, 30996), + new PsoEnumEntryInfo((MetaName)4136373952, 30997), + new PsoEnumEntryInfo((MetaName)2411152202, 6986), + new PsoEnumEntryInfo((MetaName)2717247431, 6987), + new PsoEnumEntryInfo((MetaName)1883898992, 6988), + new PsoEnumEntryInfo((MetaName)601675397, 16351), + new PsoEnumEntryInfo((MetaName)62423933, 1805), + new PsoEnumEntryInfo((MetaName)2641889475, 39905), + new PsoEnumEntryInfo((MetaName)1949780854, 5956), + new PsoEnumEntryInfo((MetaName)3296017019, 6468), + new PsoEnumEntryInfo((MetaName)1556908436, 25260), + new PsoEnumEntryInfo((MetaName)3030868822, 27474), + new PsoEnumEntryInfo((MetaName)3452992357, 56604), + new PsoEnumEntryInfo((MetaName)3473614855, 12844), + new PsoEnumEntryInfo((MetaName)633057706, 57717), + new PsoEnumEntryInfo((MetaName)3570968304, 24806), + new PsoEnumEntryInfo((MetaName)2034893792, 65245), + new PsoEnumEntryInfo((MetaName)974447640, 35502), + new PsoEnumEntryInfo((MetaName)2263842006, 15570), + new PsoEnumEntryInfo((MetaName)1882359409, 28462), + new PsoEnumEntryInfo((MetaName)2421563540, 13201), + new PsoEnumEntryInfo((MetaName)2644806883, 48472), + new PsoEnumEntryInfo((MetaName)4089752637, 5930), + new PsoEnumEntryInfo((MetaName)1473028002, 44297), + new PsoEnumEntryInfo((MetaName)1823061586, 47158), + new PsoEnumEntryInfo((MetaName)3875905388, 19729), + new PsoEnumEntryInfo((MetaName)2560977519, 43885), + new PsoEnumEntryInfo((MetaName)4050972607, 2359), + new PsoEnumEntryInfo((MetaName)1028261740, 2449), + new PsoEnumEntryInfo((MetaName)3159424443, 19336), + new PsoEnumEntryInfo((MetaName)1939403075, 64744), + new PsoEnumEntryInfo((MetaName)1097108699, 64745), + new PsoEnumEntryInfo((MetaName)428522884, 64746), + new PsoEnumEntryInfo((MetaName)3131540134, 56194), + new PsoEnumEntryInfo((MetaName)1217317825, 45733), + new PsoEnumEntryInfo((MetaName)4198936370, 45734), + new PsoEnumEntryInfo((MetaName)1977853546, 45735), + new PsoEnumEntryInfo((MetaName)2601253047, 48389), + new PsoEnumEntryInfo((MetaName)2181973692, 48390), + new PsoEnumEntryInfo((MetaName)3140860170, 48391), + new PsoEnumEntryInfo((MetaName)455142432, 30929), + new PsoEnumEntryInfo((MetaName)3803060301, 33869), + new PsoEnumEntryInfo((MetaName)746815866, 4126) + ); + case (MetaName)679492: + return new PsoEnumInfo((MetaName)679492, 1, + new PsoEnumEntryInfo((MetaName)1777437223, -1), + new PsoEnumEntryInfo((MetaName)2399258053, 0), + new PsoEnumEntryInfo((MetaName)2432469028, 1), + new PsoEnumEntryInfo((MetaName)3909664268, 2), + new PsoEnumEntryInfo((MetaName)3536499660, 3), + new PsoEnumEntryInfo((MetaName)1181702304, 4), + new PsoEnumEntryInfo((MetaName)349722727, 5), + new PsoEnumEntryInfo((MetaName)3533829783, 6), + new PsoEnumEntryInfo((MetaName)3154734852, 7), + new PsoEnumEntryInfo((MetaName)1577332483, 8), + new PsoEnumEntryInfo((MetaName)2355147898, 9), + new PsoEnumEntryInfo((MetaName)1961167048, 10), + new PsoEnumEntryInfo((MetaName)2694183171, 11), + new PsoEnumEntryInfo((MetaName)1041698964, 12), + new PsoEnumEntryInfo((MetaName)350030577, 13), + new PsoEnumEntryInfo((MetaName)3640634991, 14), + new PsoEnumEntryInfo((MetaName)2143791359, 15), + new PsoEnumEntryInfo((MetaName)2673689260, 16), + new PsoEnumEntryInfo((MetaName)3942228219, 17), + new PsoEnumEntryInfo((MetaName)646994767, 18), + new PsoEnumEntryInfo((MetaName)3285173209, 19), + new PsoEnumEntryInfo((MetaName)4165326180, 20), + new PsoEnumEntryInfo((MetaName)1433594767, 21), + new PsoEnumEntryInfo((MetaName)455532549, 22), + new PsoEnumEntryInfo((MetaName)3010631297, 23), + new PsoEnumEntryInfo((MetaName)2357888979, 24), + new PsoEnumEntryInfo((MetaName)3891414216, 25), + new PsoEnumEntryInfo((MetaName)3403853718, 26), + new PsoEnumEntryInfo((MetaName)340754025, 27), + new PsoEnumEntryInfo((MetaName)415809717, 28), + new PsoEnumEntryInfo((MetaName)349709635, 29), + new PsoEnumEntryInfo((MetaName)1126885779, 30), + new PsoEnumEntryInfo((MetaName)1128169606, 31), + new PsoEnumEntryInfo((MetaName)2219631463, 32), + new PsoEnumEntryInfo((MetaName)1143575659, 33), + new PsoEnumEntryInfo((MetaName)3837427351, 34), + new PsoEnumEntryInfo((MetaName)59976830, 35), + new PsoEnumEntryInfo((MetaName)1551687812, 36), + new PsoEnumEntryInfo((MetaName)4047674909, 37), + new PsoEnumEntryInfo((MetaName)2224745689, 38), + new PsoEnumEntryInfo((MetaName)3026080462, 39), + new PsoEnumEntryInfo((MetaName)267379975, 40), + new PsoEnumEntryInfo((MetaName)3864441807, 41), + new PsoEnumEntryInfo((MetaName)1987630632, 42), + new PsoEnumEntryInfo((MetaName)3735882313, 43), + new PsoEnumEntryInfo((MetaName)656066551, 44), + new PsoEnumEntryInfo((MetaName)3891593880, 45), + new PsoEnumEntryInfo((MetaName)1710619059, 46), + new PsoEnumEntryInfo((MetaName)4159761865, 47), + new PsoEnumEntryInfo((MetaName)3912379355, 48), + new PsoEnumEntryInfo((MetaName)1671778076, 49), + new PsoEnumEntryInfo((MetaName)688944506, 50), + new PsoEnumEntryInfo((MetaName)676227960, 51), + new PsoEnumEntryInfo((MetaName)1453403596, 52), + new PsoEnumEntryInfo((MetaName)1472286989, 53), + new PsoEnumEntryInfo((MetaName)2101842785, 54), + new PsoEnumEntryInfo((MetaName)2254996260, 55), + new PsoEnumEntryInfo((MetaName)1875581587, 56), + new PsoEnumEntryInfo((MetaName)2626785081, 57), + new PsoEnumEntryInfo((MetaName)4066674550, 58), + new PsoEnumEntryInfo((MetaName)2971250354, 59), + new PsoEnumEntryInfo((MetaName)3406258685, 60), + new PsoEnumEntryInfo((MetaName)3745008516, 61), + new PsoEnumEntryInfo((MetaName)3221146268, 62), + new PsoEnumEntryInfo((MetaName)2465001478, 63), + new PsoEnumEntryInfo((MetaName)2268340744, 64), + new PsoEnumEntryInfo((MetaName)2473728071, 65), + new PsoEnumEntryInfo((MetaName)2787107962, 66), + new PsoEnumEntryInfo((MetaName)1875610286, 67), + new PsoEnumEntryInfo((MetaName)55400259, 68) + ); + case (MetaName)726948528: + return new PsoEnumInfo((MetaName)726948528, 1, + new PsoEnumEntryInfo((MetaName)2375349691, 0), + new PsoEnumEntryInfo((MetaName)978806254, 1), + new PsoEnumEntryInfo((MetaName)345174417, 2), + new PsoEnumEntryInfo((MetaName)2719994633, 3), + new PsoEnumEntryInfo((MetaName)1055203807, 4) + ); + case (MetaName)1599521754: + return new PsoEnumInfo((MetaName)1599521754, 1, + new PsoEnumEntryInfo((MetaName)1546538473, 0) + ); + case (MetaName)956281369: + return new PsoEnumInfo((MetaName)956281369, 1, + new PsoEnumEntryInfo(MetaName.PROCOBJ_ALIGN_OBJ, 0), + new PsoEnumEntryInfo((MetaName)2886679239, 1), + new PsoEnumEntryInfo(MetaName.PROCOBJ_USE_SEED, 2), + new PsoEnumEntryInfo(MetaName.PROCOBJ_IS_FLOATING, 3), + new PsoEnumEntryInfo(MetaName.PROCOBJ_CAST_SHADOW, 4), + new PsoEnumEntryInfo(MetaName.PROCOBJ_NETWORK_GAME, 5) + ); + case (MetaName)1247137385: + return new PsoEnumInfo((MetaName)1247137385, 1, + new PsoEnumEntryInfo(MetaName.PROCPLANT_LOD0, 0), + new PsoEnumEntryInfo(MetaName.PROCPLANT_LOD1, 1), + new PsoEnumEntryInfo(MetaName.PROCPLANT_LOD2, 2), + new PsoEnumEntryInfo(MetaName.PROCPLANT_FURGRASS, 3), + new PsoEnumEntryInfo(MetaName.PROCPLANT_CAMERADONOTCULL, 4), + new PsoEnumEntryInfo(MetaName.PROCPLANT_UNDERWATER, 5), + new PsoEnumEntryInfo(MetaName.PROCPLANT_GROUNDSCALE1VERT, 6), + new PsoEnumEntryInfo(MetaName.PROCPLANT_NOGROUNDSKEW_LOD0, 7), + new PsoEnumEntryInfo(MetaName.PROCPLANT_NOGROUNDSKEW_LOD1, 8), + new PsoEnumEntryInfo(MetaName.PROCPLANT_NOGROUNDSKEW_LOD2, 9), + new PsoEnumEntryInfo(MetaName.PROCPLANT_NOSHADOW, 10) + ); + case (MetaName)2782414211: + return new PsoEnumInfo((MetaName)2782414211, 1, + new PsoEnumEntryInfo((MetaName)3117886768, 0), + new PsoEnumEntryInfo((MetaName)361913441, 1), + new PsoEnumEntryInfo((MetaName)1673907105, 2) + ); + case (MetaName)3404480226: + return new PsoEnumInfo((MetaName)3404480226, 1, + new PsoEnumEntryInfo((MetaName)643717225, 0), + new PsoEnumEntryInfo((MetaName)1755526414, 1), + new PsoEnumEntryInfo((MetaName)3148884390, 2), + new PsoEnumEntryInfo((MetaName)1950121897, 3), + new PsoEnumEntryInfo((MetaName)2065407336, 4), + new PsoEnumEntryInfo((MetaName)1249738073, 5), + new PsoEnumEntryInfo((MetaName)3037431481, 6), + new PsoEnumEntryInfo((MetaName)2009750623, 7), + new PsoEnumEntryInfo((MetaName)3659952659, 8), + new PsoEnumEntryInfo((MetaName)4024787971, 9), + new PsoEnumEntryInfo((MetaName)4081041159, 10), + new PsoEnumEntryInfo((MetaName)3123586287, 11), + new PsoEnumEntryInfo((MetaName)1678048274, 12), + new PsoEnumEntryInfo((MetaName)1275607205, 13), + new PsoEnumEntryInfo((MetaName)1635759186, 14), + new PsoEnumEntryInfo((MetaName)2276229539, 15), + new PsoEnumEntryInfo((MetaName)493733281, 16), + new PsoEnumEntryInfo((MetaName)1037540057, 17), + new PsoEnumEntryInfo((MetaName)1162901510, 18), + new PsoEnumEntryInfo((MetaName)739467989, 19), + new PsoEnumEntryInfo((MetaName)677568593, 20), + new PsoEnumEntryInfo((MetaName)1739703625, 21), + new PsoEnumEntryInfo((MetaName)2932239149, 22), + new PsoEnumEntryInfo((MetaName)1612186711, 23), + new PsoEnumEntryInfo((MetaName)629489585, 24), + new PsoEnumEntryInfo((MetaName)3531030925, 25), + new PsoEnumEntryInfo((MetaName)1769219469, 26), + new PsoEnumEntryInfo((MetaName)1816463715, 27), + new PsoEnumEntryInfo((MetaName)3449512558, 28) + ); + case (MetaName)2136742399: + return new PsoEnumInfo((MetaName)2136742399, 1, + new PsoEnumEntryInfo((MetaName)2580680746, 0), + new PsoEnumEntryInfo((MetaName)4067031256, 1), + new PsoEnumEntryInfo((MetaName)3668340720, 2) + ); + case (MetaName)513957198: + return new PsoEnumInfo((MetaName)513957198, 1, + new PsoEnumEntryInfo(MetaName.ON_FOOT, 0), + new PsoEnumEntryInfo(MetaName.IN_VEHICLE, 1), + new PsoEnumEntryInfo((MetaName)1812735189, 2), + new PsoEnumEntryInfo((MetaName)1045637820, 3), + new PsoEnumEntryInfo((MetaName)3210104948, 4), + new PsoEnumEntryInfo((MetaName)2742629541, 5), + new PsoEnumEntryInfo((MetaName)2079134431, 6), + new PsoEnumEntryInfo((MetaName)4177603501, 7) + ); + case (MetaName)2703064232: + return new PsoEnumInfo((MetaName)2703064232, 1, + new PsoEnumEntryInfo((MetaName)2573120959, 0), + new PsoEnumEntryInfo((MetaName)3489645472, 1), + new PsoEnumEntryInfo((MetaName)2770781844, 2), + new PsoEnumEntryInfo((MetaName)3839202812, 3), + new PsoEnumEntryInfo((MetaName)70078021, 4) + ); + case (MetaName)3921015781: + return new PsoEnumInfo((MetaName)3921015781, 1, + new PsoEnumEntryInfo((MetaName)3099024980, 0), + new PsoEnumEntryInfo((MetaName)3810146036, 1), + new PsoEnumEntryInfo((MetaName)1812191173, 2), + new PsoEnumEntryInfo((MetaName)2081939217, 3), + new PsoEnumEntryInfo((MetaName)2879490434, 4), + new PsoEnumEntryInfo((MetaName)3899422166, 5), + new PsoEnumEntryInfo((MetaName)4202435238, 6), + new PsoEnumEntryInfo((MetaName)1924959165, 7), + new PsoEnumEntryInfo((MetaName)2394366735, 8), + new PsoEnumEntryInfo((MetaName)2691765069, 9), + new PsoEnumEntryInfo((MetaName)3782218410, 10), + new PsoEnumEntryInfo((MetaName)1054471073, 11), + new PsoEnumEntryInfo((MetaName)3232508014, 12), + new PsoEnumEntryInfo((MetaName)3268408636, 13), + new PsoEnumEntryInfo((MetaName)156483360, 14), + new PsoEnumEntryInfo((MetaName)610568483, 15), + new PsoEnumEntryInfo((MetaName)1031574247, 16), + new PsoEnumEntryInfo((MetaName)1817346630, 17), + new PsoEnumEntryInfo((MetaName)3038768594, 18), + new PsoEnumEntryInfo((MetaName)3433776656, 19), + new PsoEnumEntryInfo((MetaName)3224106151, 20), + new PsoEnumEntryInfo((MetaName)3781585750, 21), + new PsoEnumEntryInfo((MetaName)728471947, 22), + new PsoEnumEntryInfo((MetaName)2868857018, 23), + new PsoEnumEntryInfo((MetaName)3394937778, 24), + new PsoEnumEntryInfo((MetaName)1572642455, 25), + new PsoEnumEntryInfo((MetaName)4148234847, 26) + ); + case (MetaName)4206293824: + return new PsoEnumInfo((MetaName)4206293824, 1, + new PsoEnumEntryInfo((MetaName)3090781844, 0), + new PsoEnumEntryInfo((MetaName)714439506, 1), + new PsoEnumEntryInfo((MetaName)3541453901, 2), + new PsoEnumEntryInfo((MetaName)3420181340, 3), + new PsoEnumEntryInfo((MetaName)3785293538, 4), + new PsoEnumEntryInfo((MetaName)2987466695, 5), + new PsoEnumEntryInfo((MetaName)2089898957, 6), + new PsoEnumEntryInfo((MetaName)776877896, 7), + new PsoEnumEntryInfo((MetaName)1192126664, 8), + new PsoEnumEntryInfo((MetaName)1989206149, 9), + new PsoEnumEntryInfo((MetaName)2132778492, 10), + new PsoEnumEntryInfo((MetaName)1459749185, 11), + new PsoEnumEntryInfo((MetaName)769806680, 12), + new PsoEnumEntryInfo((MetaName)344800761, 13), + new PsoEnumEntryInfo((MetaName)2607259232, 14) + ); + case (MetaName)902027429: + return new PsoEnumInfo((MetaName)902027429, 1, + new PsoEnumEntryInfo((MetaName)1166188847, 0), + new PsoEnumEntryInfo((MetaName)899750670, 1) + ); + case (MetaName)3529626013: + return new PsoEnumInfo((MetaName)3529626013, 1, + new PsoEnumEntryInfo(MetaName.CAR, 0), + new PsoEnumEntryInfo(MetaName.PLANE, 1), + new PsoEnumEntryInfo(MetaName.TRAILER, 2), + new PsoEnumEntryInfo((MetaName)1011863180, 3), + new PsoEnumEntryInfo((MetaName)3778816900, 4), + new PsoEnumEntryInfo((MetaName)2983251618, 5), + new PsoEnumEntryInfo(MetaName.BIKE, 6), + new PsoEnumEntryInfo(MetaName.BICYCLE, 7), + new PsoEnumEntryInfo(MetaName.BOAT, 8), + new PsoEnumEntryInfo((MetaName)3644569018, 9), + new PsoEnumEntryInfo((MetaName)2537188912, 10), + new PsoEnumEntryInfo(MetaName.ALL, 11) + ); + case (MetaName)3889593720: + return new PsoEnumInfo((MetaName)3889593720, 1, + new PsoEnumEntryInfo((MetaName)2388118614, 0), + new PsoEnumEntryInfo((MetaName)1309321028, 1), + new PsoEnumEntryInfo((MetaName)2409045263, 2), + new PsoEnumEntryInfo((MetaName)1405307635, 3), + new PsoEnumEntryInfo((MetaName)3183067451, 4) + ); + case (MetaName)2675594832: + return new PsoEnumInfo((MetaName)2675594832, 1, + new PsoEnumEntryInfo((MetaName)1665251515, 0), + new PsoEnumEntryInfo((MetaName)665056449, 1), + new PsoEnumEntryInfo((MetaName)1838090773, 2), + new PsoEnumEntryInfo((MetaName)1429252732, 3), + new PsoEnumEntryInfo((MetaName)335156894, 4), + new PsoEnumEntryInfo((MetaName)1995789406, 5), + new PsoEnumEntryInfo((MetaName)301163182, 6), + new PsoEnumEntryInfo((MetaName)2727636155, 7), + new PsoEnumEntryInfo((MetaName)2154274359, 8), + new PsoEnumEntryInfo((MetaName)3233981661, 9), + new PsoEnumEntryInfo((MetaName)3036600251, 10) + ); + case (MetaName)2920442291: + return new PsoEnumInfo((MetaName)2920442291, 1, + new PsoEnumEntryInfo((MetaName)3796340206, 0), + new PsoEnumEntryInfo((MetaName)1662727357, 1), + new PsoEnumEntryInfo((MetaName)740214256, 2), + new PsoEnumEntryInfo((MetaName)1066836384, 3), + new PsoEnumEntryInfo((MetaName)698500424, 4), + new PsoEnumEntryInfo((MetaName)2087263659, 5) + ); + case MetaName.Affluence: + return new PsoEnumInfo(MetaName.Affluence, 1, + new PsoEnumEntryInfo(MetaName.AFF_POOR, 0), + new PsoEnumEntryInfo(MetaName.AFF_AVERAGE, 1), + new PsoEnumEntryInfo(MetaName.AFF_RICH, 2) + ); + case MetaName.TechSavvy: + return new PsoEnumInfo(MetaName.TechSavvy, 1, + new PsoEnumEntryInfo(MetaName.TS_LOW, 0), + new PsoEnumEntryInfo(MetaName.TS_HIGH, 1) + ); + case (MetaName)3079935216: + return new PsoEnumInfo((MetaName)3079935216, 1, + new PsoEnumEntryInfo((MetaName)294976751, 0), + new PsoEnumEntryInfo((MetaName)914958829, 1), + new PsoEnumEntryInfo((MetaName)1317922943, 2), + new PsoEnumEntryInfo((MetaName)2849017488, 3), + new PsoEnumEntryInfo((MetaName)4164385006, 4), + new PsoEnumEntryInfo((MetaName)2870992946, 5), + new PsoEnumEntryInfo((MetaName)640530450, 6), + new PsoEnumEntryInfo((MetaName)3501709025, 7), + new PsoEnumEntryInfo((MetaName)3634362686, 8), + new PsoEnumEntryInfo((MetaName)168692563, 9), + new PsoEnumEntryInfo((MetaName)1200956848, 10), + new PsoEnumEntryInfo((MetaName)4202267286, 11), + new PsoEnumEntryInfo((MetaName)985531983, 12), + new PsoEnumEntryInfo(MetaName.BF_COWARDLY_FOR_SHOCKING_EVENTS, 13), + new PsoEnumEntryInfo(MetaName.BF_BOOST_BRAVERY_IN_GROUP, 14), + new PsoEnumEntryInfo((MetaName)1160283338, 15), + new PsoEnumEntryInfo((MetaName)2997524846, 16), + new PsoEnumEntryInfo((MetaName)4159638386, 17), + new PsoEnumEntryInfo((MetaName)687848862, 18), + new PsoEnumEntryInfo(MetaName.BF_ALLOW_CONFRONT_FOR_TERRITORY_REACTIONS, 19), + new PsoEnumEntryInfo((MetaName)1196718962, 20) + ); + case (MetaName)1639628591: + return new PsoEnumInfo((MetaName)1639628591, 1, + new PsoEnumEntryInfo((MetaName)2861521524, 0), + new PsoEnumEntryInfo((MetaName)491616304, 1) + ); + case (MetaName)1559228487: + return new PsoEnumInfo((MetaName)1559228487, 1, + new PsoEnumEntryInfo((MetaName)4105818928, 0), + new PsoEnumEntryInfo((MetaName)3822780995, 1), + new PsoEnumEntryInfo((MetaName)754232761, 2), + new PsoEnumEntryInfo((MetaName)3386029841, 3), + new PsoEnumEntryInfo((MetaName)569621039, 4), + new PsoEnumEntryInfo((MetaName)860304717, 5), + new PsoEnumEntryInfo((MetaName)3392782621, 6), + new PsoEnumEntryInfo((MetaName)1740709742, 7), + new PsoEnumEntryInfo((MetaName)2989860387, 8) + ); + case (MetaName)966624441: + return new PsoEnumInfo((MetaName)966624441, 1, + new PsoEnumEntryInfo((MetaName)1952942912, 0), + new PsoEnumEntryInfo((MetaName)2426586936, 1), + new PsoEnumEntryInfo((MetaName)638477469, 2), + new PsoEnumEntryInfo((MetaName)4078932877, 3), + new PsoEnumEntryInfo((MetaName)2711794664, 4) + ); + case (MetaName)454750378: + return new PsoEnumInfo((MetaName)454750378, 1, + new PsoEnumEntryInfo((MetaName)2708677357, 0), + new PsoEnumEntryInfo((MetaName)3984591931, 1), + new PsoEnumEntryInfo((MetaName)2235154210, 2) + ); + case (MetaName)1931302076: + return new PsoEnumInfo((MetaName)1931302076, 1, + new PsoEnumEntryInfo((MetaName)3711568277, 0), + new PsoEnumEntryInfo((MetaName)986173808, 1), + new PsoEnumEntryInfo((MetaName)1833278132, 2), + new PsoEnumEntryInfo((MetaName)373155899, 3), + new PsoEnumEntryInfo((MetaName)2515903841, 4), + new PsoEnumEntryInfo((MetaName)1486063330, 5) + ); + case (MetaName)4044698613: + return new PsoEnumInfo((MetaName)4044698613, 1, + new PsoEnumEntryInfo((MetaName)49782489, 0), + new PsoEnumEntryInfo((MetaName)1073022306, 1), + new PsoEnumEntryInfo((MetaName)3906611689, 2), + new PsoEnumEntryInfo((MetaName)1112780501, 3), + new PsoEnumEntryInfo((MetaName)1594514833, 4) + ); + case (MetaName)4002001992: + return new PsoEnumInfo((MetaName)4002001992, 1, + new PsoEnumEntryInfo((MetaName)4238595643, 0) + ); + case (MetaName)1507389089: + return new PsoEnumInfo((MetaName)1507389089, 1, + new PsoEnumEntryInfo((MetaName)1637555008, 0), + new PsoEnumEntryInfo(MetaName.AET_Interesting, 1), + new PsoEnumEntryInfo(MetaName.AET_Threatening, 2), + new PsoEnumEntryInfo(MetaName.AET_Threatened, 3), + new PsoEnumEntryInfo(MetaName.AET_In_Place, 4), + new PsoEnumEntryInfo(MetaName.AET_Directed_In_Place, 5), + new PsoEnumEntryInfo(MetaName.AET_Flinch, 6) + ); + case (MetaName)1049598006: + return new PsoEnumInfo((MetaName)1049598006, 1, + new PsoEnumEntryInfo((MetaName)1600411487, 0), + new PsoEnumEntryInfo((MetaName)3999177563, 1), + new PsoEnumEntryInfo((MetaName)3250863043, 2) + ); + case (MetaName)884254308: + return new PsoEnumInfo((MetaName)884254308, 1, + new PsoEnumEntryInfo(MetaName.PV_COMP_INVALID, -1), + new PsoEnumEntryInfo(MetaName.PV_COMP_HEAD, 0), + new PsoEnumEntryInfo(MetaName.PV_COMP_BERD, 1), + new PsoEnumEntryInfo(MetaName.PV_COMP_HAIR, 2), + new PsoEnumEntryInfo(MetaName.PV_COMP_UPPR, 3), + new PsoEnumEntryInfo(MetaName.PV_COMP_LOWR, 4), + new PsoEnumEntryInfo(MetaName.PV_COMP_HAND, 5), + new PsoEnumEntryInfo(MetaName.PV_COMP_FEET, 6), + new PsoEnumEntryInfo(MetaName.PV_COMP_TEEF, 7), + new PsoEnumEntryInfo(MetaName.PV_COMP_ACCS, 8), + new PsoEnumEntryInfo(MetaName.PV_COMP_TASK, 9), + new PsoEnumEntryInfo(MetaName.PV_COMP_DECL, 10), + new PsoEnumEntryInfo(MetaName.PV_COMP_JBIB, 11), + new PsoEnumEntryInfo(MetaName.PV_COMP_MAX, 12) + ); + case (MetaName)3509057257: + return new PsoEnumInfo((MetaName)3509057257, 1, + new PsoEnumEntryInfo((MetaName)540107349, 0), + new PsoEnumEntryInfo((MetaName)1739907813, 1), + new PsoEnumEntryInfo((MetaName)2408459571, 2), + new PsoEnumEntryInfo((MetaName)2446307443, 3), + new PsoEnumEntryInfo((MetaName)3821605495, 4), + new PsoEnumEntryInfo((MetaName)3373894112, 5), + new PsoEnumEntryInfo((MetaName)4158664243, 6), + new PsoEnumEntryInfo((MetaName)2548005619, 7), + new PsoEnumEntryInfo((MetaName)1729141078, 8), + new PsoEnumEntryInfo((MetaName)1967764936, 9), + new PsoEnumEntryInfo((MetaName)3266498717, 10), + new PsoEnumEntryInfo((MetaName)2288805232, 11), + new PsoEnumEntryInfo((MetaName)2053403138, 12), + new PsoEnumEntryInfo((MetaName)125251313, 13), + new PsoEnumEntryInfo((MetaName)3905421121, 14), + new PsoEnumEntryInfo((MetaName)488421620, 15), + new PsoEnumEntryInfo((MetaName)1968199161, 16), + new PsoEnumEntryInfo((MetaName)937951079, 17), + new PsoEnumEntryInfo((MetaName)1124094743, 18), + new PsoEnumEntryInfo((MetaName)339046583, 19), + new PsoEnumEntryInfo((MetaName)111082097, 20) + ); + case (MetaName)4263854907: + return new PsoEnumInfo((MetaName)4263854907, 1, + new PsoEnumEntryInfo((MetaName)40312212, 0), + new PsoEnumEntryInfo((MetaName)2263813480, 1), + new PsoEnumEntryInfo((MetaName)1924092278, 2) + ); + case (MetaName)3799765345: + return new PsoEnumInfo((MetaName)3799765345, 1, + new PsoEnumEntryInfo((MetaName)1195757242, -1), + new PsoEnumEntryInfo((MetaName)1610395939, 0), + new PsoEnumEntryInfo((MetaName)2126457811, 1), + new PsoEnumEntryInfo((MetaName)1484258773, 2), + new PsoEnumEntryInfo((MetaName)1150557519, 3), + new PsoEnumEntryInfo((MetaName)1795127718, 4), + new PsoEnumEntryInfo((MetaName)2215450775, 5), + new PsoEnumEntryInfo((MetaName)2353748938, 6) + ); + case (MetaName)1809724872: + return new PsoEnumInfo((MetaName)1809724872, 1, + new PsoEnumEntryInfo((MetaName)3073843763, 0), + new PsoEnumEntryInfo((MetaName)2909022553, 1), + new PsoEnumEntryInfo((MetaName)3804705025, 2) + ); + case (MetaName)888350649: + return new PsoEnumInfo((MetaName)888350649, 1, + new PsoEnumEntryInfo((MetaName)2341131515, 0), + new PsoEnumEntryInfo((MetaName)485311651, 1), + new PsoEnumEntryInfo((MetaName)1413720671, 2), + new PsoEnumEntryInfo((MetaName)1962395292, 3) + ); + case (MetaName)2055586340: + return new PsoEnumInfo((MetaName)2055586340, 1, + new PsoEnumEntryInfo((MetaName)3014288776, 0), + new PsoEnumEntryInfo((MetaName)1410481380, 1), + new PsoEnumEntryInfo((MetaName)1541573135, 2), + new PsoEnumEntryInfo((MetaName)279516121, 3) + ); + case (MetaName)3374036042: + return new PsoEnumInfo((MetaName)3374036042, 1, + new PsoEnumEntryInfo((MetaName)2165534923, 0), + new PsoEnumEntryInfo((MetaName)1834753809, 1), + new PsoEnumEntryInfo((MetaName)2650352944, 2), + new PsoEnumEntryInfo((MetaName)4235841451, 3) + ); + case (MetaName)4001255574: + return new PsoEnumInfo((MetaName)4001255574, 1, + new PsoEnumEntryInfo((MetaName)1409024016, 0), + new PsoEnumEntryInfo((MetaName)2508718569, 1), + new PsoEnumEntryInfo((MetaName)1024930189, 2), + new PsoEnumEntryInfo((MetaName)2066966848, 3) + ); + case (MetaName)894416699: + return new PsoEnumInfo((MetaName)894416699, 1, + new PsoEnumEntryInfo((MetaName)982742767, 0), + new PsoEnumEntryInfo((MetaName)469567916, 1), + new PsoEnumEntryInfo((MetaName)3935682468, 2), + new PsoEnumEntryInfo((MetaName)2563045769, 3), + new PsoEnumEntryInfo((MetaName)3757862915, 4), + new PsoEnumEntryInfo((MetaName)1261964441, 5), + new PsoEnumEntryInfo((MetaName)2355736970, 6), + new PsoEnumEntryInfo((MetaName)2152776352, 7) + ); + case (MetaName)4186696686: + return new PsoEnumInfo((MetaName)4186696686, 1, + new PsoEnumEntryInfo((MetaName)198544766, 0), + new PsoEnumEntryInfo((MetaName)2602754504, 1), + new PsoEnumEntryInfo((MetaName)2037609896, 2), + new PsoEnumEntryInfo((MetaName)35209924, 3), + new PsoEnumEntryInfo((MetaName)1732741445, 4), + new PsoEnumEntryInfo((MetaName)2486476801, 5), + new PsoEnumEntryInfo((MetaName)3747129892, 6), + new PsoEnumEntryInfo((MetaName)600606236, 7), + new PsoEnumEntryInfo((MetaName)3190143096, 8) + ); + case (MetaName)2809332931: + return new PsoEnumInfo((MetaName)2809332931, 1, + new PsoEnumEntryInfo(MetaName.DontCloseWhenTouched, 0), + new PsoEnumEntryInfo(MetaName.AutoOpensForSPVehicleWithPedsOnly, 1), + new PsoEnumEntryInfo(MetaName.AutoOpensForSPPlayerPedsOnly, 2), + new PsoEnumEntryInfo(MetaName.AutoOpensForMPVehicleWithPedsOnly, 3), + new PsoEnumEntryInfo(MetaName.AutoOpensForMPPlayerPedsOnly, 4), + new PsoEnumEntryInfo(MetaName.DelayDoorClosingForPlayer, 5), + new PsoEnumEntryInfo(MetaName.AutoOpensForAllVehicles, 6), + new PsoEnumEntryInfo(MetaName.IgnoreOpenDoorTaskEdgeLerp, 7), + new PsoEnumEntryInfo(MetaName.AutoOpensForLawEnforcement, 8) + ); + case MetaName.StdDoorRotDir: + return new PsoEnumInfo(MetaName.StdDoorRotDir, 1, + new PsoEnumEntryInfo(MetaName.StdDoorOpenBothDir, 0), + new PsoEnumEntryInfo(MetaName.StdDoorOpenNegDir, 1), + new PsoEnumEntryInfo(MetaName.StdDoorOpenPosDir, 2) + ); + case (MetaName)2065671281: + return new PsoEnumInfo((MetaName)2065671281, 1, + new PsoEnumEntryInfo(MetaName.CantUse, 0), + new PsoEnumEntryInfo(MetaName.MustUse, 1) + ); + case (MetaName)1756502932: + return new PsoEnumInfo((MetaName)1756502932, 1, + new PsoEnumEntryInfo((MetaName)1618156912, 0), + new PsoEnumEntryInfo((MetaName)325739119, 1), + new PsoEnumEntryInfo((MetaName)1129710621, 2), + new PsoEnumEntryInfo((MetaName)2784202857, 3), + new PsoEnumEntryInfo((MetaName)3198877297, 4), + new PsoEnumEntryInfo((MetaName)2664559559, 5) + ); + case (MetaName)3204395397: + return new PsoEnumInfo((MetaName)3204395397, 1, + new PsoEnumEntryInfo((MetaName)3124669982, 0), + new PsoEnumEntryInfo((MetaName)1679254647, 1), + new PsoEnumEntryInfo((MetaName)1875723229, 2) + ); + case (MetaName)4286852891: + return new PsoEnumInfo((MetaName)4286852891, 1, + new PsoEnumEntryInfo(MetaName.VEHICLE_RESPONSE_DEFAULT, 0), + new PsoEnumEntryInfo(MetaName.VEHICLE_RESPONSE_COUNTRYSIDE, 1), + new PsoEnumEntryInfo(MetaName.VEHICLE_RESPONSE_ARMY_BASE, 2), + new PsoEnumEntryInfo((MetaName)2910242310, 3) + ); + case (MetaName)4095090001: + return new PsoEnumInfo((MetaName)4095090001, 1, + new PsoEnumEntryInfo((MetaName)514090469, 0), + new PsoEnumEntryInfo((MetaName)3761654755, 1) + ); + case (MetaName)98189892: + return new PsoEnumInfo((MetaName)98189892, 1, + new PsoEnumEntryInfo((MetaName)3074030570, 0), + new PsoEnumEntryInfo((MetaName)4102086546, 1), + new PsoEnumEntryInfo((MetaName)1753198982, 2), + new PsoEnumEntryInfo((MetaName)3712292480, 3), + new PsoEnumEntryInfo((MetaName)3483214048, 4), + new PsoEnumEntryInfo((MetaName)1192754605, 5), + new PsoEnumEntryInfo((MetaName)4173874730, 6), + new PsoEnumEntryInfo((MetaName)3315722870, 7), + new PsoEnumEntryInfo((MetaName)3014113591, 8), + new PsoEnumEntryInfo((MetaName)980667646, 9), + new PsoEnumEntryInfo((MetaName)4149395173, 10), + new PsoEnumEntryInfo((MetaName)1200088335, 11), + new PsoEnumEntryInfo((MetaName)1675103884, 12), + new PsoEnumEntryInfo((MetaName)2231393111, 13), + new PsoEnumEntryInfo((MetaName)1921771349, 14), + new PsoEnumEntryInfo((MetaName)1507251800, 15), + new PsoEnumEntryInfo((MetaName)2740301581, 16), + new PsoEnumEntryInfo((MetaName)1105971590, 17), + new PsoEnumEntryInfo((MetaName)4153767546, 18), + new PsoEnumEntryInfo((MetaName)3854489506, 19), + new PsoEnumEntryInfo((MetaName)4158814707, 20) + ); + case (MetaName)3573596290: + return new PsoEnumInfo((MetaName)3573596290, 1, + new PsoEnumEntryInfo(MetaName.kBoth, 0), + new PsoEnumEntryInfo(MetaName.kOnlySp, 1), + new PsoEnumEntryInfo(MetaName.kOnlyMp, 2) + ); + case (MetaName)700327466: + return new PsoEnumInfo((MetaName)700327466, 1, + new PsoEnumEntryInfo(MetaName.IgnoreMaxInRange, 0), + new PsoEnumEntryInfo(MetaName.NoSpawn, 1), + new PsoEnumEntryInfo(MetaName.StationaryReactions, 2) + ); + case (MetaName)3971773454: + return new PsoEnumInfo((MetaName)3971773454, 1, + new PsoEnumEntryInfo(MetaName.Direct, 0), + new PsoEnumEntryInfo(MetaName.NavMesh, 1), + new PsoEnumEntryInfo(MetaName.Roads, 2) + ); + case (MetaName)941086046: + return new PsoEnumInfo((MetaName)941086046, 1, + new PsoEnumEntryInfo((MetaName)3279574318, 0), + new PsoEnumEntryInfo((MetaName)2212923970, 1), + new PsoEnumEntryInfo((MetaName)4022799658, 2), + new PsoEnumEntryInfo((MetaName)1425672334, 3), + new PsoEnumEntryInfo((MetaName)957720931, 4), + new PsoEnumEntryInfo((MetaName)3795195414, 5), + new PsoEnumEntryInfo((MetaName)2834622009, 6), + new PsoEnumEntryInfo((MetaName)1876554076, 7), + new PsoEnumEntryInfo((MetaName)698543797, 8), + new PsoEnumEntryInfo((MetaName)3911005380, 9), + new PsoEnumEntryInfo((MetaName)3717649022, 10), + new PsoEnumEntryInfo((MetaName)3356026130, 11) + ); + case (MetaName)1193003611: + return new PsoEnumInfo((MetaName)1193003611, 1, + new PsoEnumEntryInfo((MetaName)3029576156, 0), + new PsoEnumEntryInfo((MetaName)211193083, 1) + ); + case (MetaName)3387532954: + return new PsoEnumInfo((MetaName)3387532954, 1, + new PsoEnumEntryInfo(MetaName.AT_TXD, 0), + new PsoEnumEntryInfo(MetaName.AT_DRB, 1), + new PsoEnumEntryInfo(MetaName.AT_DWD, 2), + new PsoEnumEntryInfo(MetaName.AT_FRG, 3) + ); + case MetaName.manifestFlags: + return new PsoEnumInfo(MetaName.manifestFlags, 1, + new PsoEnumEntryInfo(MetaName.INTERIOR_DATA, 0) + ); + case (MetaName)1264241711: + return new PsoEnumInfo((MetaName)1264241711, 1, + new PsoEnumEntryInfo(MetaName.LODTYPES_DEPTH_HD, 0), + new PsoEnumEntryInfo(MetaName.LODTYPES_DEPTH_LOD, 1), + new PsoEnumEntryInfo(MetaName.LODTYPES_DEPTH_SLOD1, 2), + new PsoEnumEntryInfo(MetaName.LODTYPES_DEPTH_SLOD2, 3), + new PsoEnumEntryInfo(MetaName.LODTYPES_DEPTH_SLOD3, 4), + new PsoEnumEntryInfo(MetaName.LODTYPES_DEPTH_ORPHANHD, 5), + new PsoEnumEntryInfo(MetaName.LODTYPES_DEPTH_SLOD4, 6) + ); + case (MetaName)648413703: + return new PsoEnumInfo((MetaName)648413703, 1, + new PsoEnumEntryInfo(MetaName.PRI_REQUIRED, 0), + new PsoEnumEntryInfo(MetaName.PRI_OPTIONAL_HIGH, 1), + new PsoEnumEntryInfo(MetaName.PRI_OPTIONAL_MEDIUM, 2), + new PsoEnumEntryInfo(MetaName.PRI_OPTIONAL_LOW, 3) + ); + default: + return null; + } + } + + + + private static string GetSafeName(MetaName namehash, uint key) { string name = namehash.ToString(); diff --git a/Project/Panels/EditYtypArchetypePanel.Designer.cs b/Project/Panels/EditYtypArchetypePanel.Designer.cs index 6fbd3ff..ff4a489 100644 --- a/Project/Panels/EditYtypArchetypePanel.Designer.cs +++ b/Project/Panels/EditYtypArchetypePanel.Designer.cs @@ -547,13 +547,14 @@ // // EntitySetsListBox // - this.EntitySetsListBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this.EntitySetsListBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.EntitySetsListBox.CheckOnClick = true; this.EntitySetsListBox.FormattingEnabled = true; this.EntitySetsListBox.Location = new System.Drawing.Point(11, 42); this.EntitySetsListBox.Name = "EntitySetsListBox"; - this.EntitySetsListBox.Size = new System.Drawing.Size(603, 214); + this.EntitySetsListBox.Size = new System.Drawing.Size(603, 319); this.EntitySetsListBox.TabIndex = 2; this.EntitySetsListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.EntitySetsListBox_ItemCheck); // From f84b51d1c123608dc09d953ec6f39480adf060b9 Mon Sep 17 00:00:00 2001 From: dexy Date: Fri, 14 Dec 2018 21:23:05 +1100 Subject: [PATCH 032/158] Save RSC Meta files to RPF directly from Meta Editor form --- .../GameFiles/MetaTypes/MetaNames.cs | 2 + .../GameFiles/MetaTypes/MetaXml.cs | 11 ++ .../GameFiles/MetaTypes/PsoTypes.cs | 12 +- ExploreForm.cs | 55 ++++-- Forms/MetaForm.cs | 172 +++++++++++++++++- 5 files changed, 233 insertions(+), 19 deletions(-) diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs index af51960..33f366d 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs @@ -3426,6 +3426,8 @@ namespace CodeWalker.GameFiles LODLights = 1326371921, BoxOccluder = 975711773, OccludeModel = 2741784237, + sirenLight = 4091688452, + sirenCorona = 472016577, diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs index 18613a1..b40c0ef 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs @@ -1763,4 +1763,15 @@ namespace CodeWalker.GameFiles } + + + public enum MetaFormat + { + XML = 0, + RSC = 1, + PSO = 2, + RBF = 3, + CacheFile = 4, + } + } diff --git a/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs b/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs index a534dba..83a5c58 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs @@ -487,18 +487,18 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.leftTailLightMultiples, PsoDataType.UByte, 122, 0, 0), new PsoStructureEntryInfo(MetaName.rightTailLightMultiples, PsoDataType.UByte, 123, 0, 0), new PsoStructureEntryInfo(MetaName.useRealLights, PsoDataType.Bool, 124, 0, 0), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)4091688452), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.sirenLight), new PsoStructureEntryInfo((MetaName)2047330294, PsoDataType.Array, 128, 1, (MetaName)1310739) ); case (MetaName)188820339: return new PsoStructureInfo((MetaName)188820339, 0, 0, 16, new PsoStructureEntryInfo(MetaName.sequencer, PsoDataType.UInt, 8, 0, 0) ); - case (MetaName)4091688452: - return new PsoStructureInfo((MetaName)4091688452, 0, 0, 112, + case MetaName.sirenLight: + return new PsoStructureInfo(MetaName.sirenLight, 0, 0, 112, new PsoStructureEntryInfo(MetaName.rotation, PsoDataType.Structure, 8, 0, (MetaName)1356743507), new PsoStructureEntryInfo(MetaName.flashiness, PsoDataType.Structure, 40, 0, (MetaName)1356743507), - new PsoStructureEntryInfo(MetaName.corona, PsoDataType.Structure, 72, 0, (MetaName)472016577), + new PsoStructureEntryInfo(MetaName.corona, PsoDataType.Structure, 72, 0, MetaName.sirenCorona), new PsoStructureEntryInfo(MetaName.color, PsoDataType.UInt, 96, 1, 0), new PsoStructureEntryInfo(MetaName.intensity, PsoDataType.Float, 100, 0, 0), new PsoStructureEntryInfo(MetaName.lightGroup, PsoDataType.UByte, 104, 0, 0), @@ -520,8 +520,8 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.direction, PsoDataType.Bool, 25, 0, 0), new PsoStructureEntryInfo(MetaName.syncToBpm, PsoDataType.Bool, 26, 0, 0) ); - case (MetaName)472016577: - return new PsoStructureInfo((MetaName)472016577, 0, 0, 24, + case MetaName.sirenCorona: + return new PsoStructureInfo(MetaName.sirenCorona, 0, 0, 24, new PsoStructureEntryInfo(MetaName.intensity, PsoDataType.Float, 8, 0, 0), new PsoStructureEntryInfo(MetaName.size, PsoDataType.Float, 12, 0, 0), new PsoStructureEntryInfo(MetaName.pull, PsoDataType.Float, 16, 0, 0), diff --git a/ExploreForm.cs b/ExploreForm.cs index 352e3b9..812da28 100644 --- a/ExploreForm.cs +++ b/ExploreForm.cs @@ -44,7 +44,7 @@ namespace CodeWalker private GameFileCache FileCache { get; set; } = GameFileCacheFactory.Create(); private object FileCacheSyncRoot = new object(); - private bool EditMode = false; + public bool EditMode { get; private set; } = false; public ThemeBase Theme { get; private set; } @@ -905,7 +905,6 @@ namespace CodeWalker RecurseAddMainTreeViewNodes(f, CurrentFolder.TreeNode); CurrentFolder.AddChild(f); - CurrentFolder.ListItems = null; RefreshMainListView(); } @@ -1053,11 +1052,23 @@ namespace CodeWalker } } + public void RefreshMainListViewInvoke() + { + if (InvokeRequired) + { + BeginInvoke(new Action(() => { RefreshMainListView(); })); + } + else + { + RefreshMainListView(); + } + } private void RefreshMainListView() { MainListView.VirtualListSize = 0; if (CurrentFolder != null) { + CurrentFolder.ListItems = null; //makes sure to rebuild the current files list CurrentFiles = CurrentFolder.GetListItems(); foreach (var file in CurrentFiles) //cache all the data for use by the list view. @@ -1314,6 +1325,13 @@ namespace CodeWalker try #endif { + var exform = FindExistingForm(item?.File); + if (exform != null) + { + exform.Focus(); + return; + } + byte[] data = null; string name = ""; string path = ""; @@ -1469,35 +1487,35 @@ namespace CodeWalker private void ViewYmt(string name, string path, byte[] data, RpfFileEntry e) { var ymt = RpfFile.GetFile(e, data); - MetaForm f = new MetaForm(); + MetaForm f = new MetaForm(this); f.Show(); f.LoadMeta(ymt); } private void ViewYmf(string name, string path, byte[] data, RpfFileEntry e) { var ymf = RpfFile.GetFile(e, data); - MetaForm f = new MetaForm(); + MetaForm f = new MetaForm(this); f.Show(); f.LoadMeta(ymf); } private void ViewYmap(string name, string path, byte[] data, RpfFileEntry e) { var ymap = RpfFile.GetFile(e, data); - MetaForm f = new MetaForm(); + MetaForm f = new MetaForm(this); f.Show(); f.LoadMeta(ymap); } private void ViewYtyp(string name, string path, byte[] data, RpfFileEntry e) { var ytyp = RpfFile.GetFile(e, data); - MetaForm f = new MetaForm(); + MetaForm f = new MetaForm(this); f.Show(); f.LoadMeta(ytyp); } private void ViewJPso(string name, string path, byte[] data, RpfFileEntry e) { var pso = RpfFile.GetFile(e, data); - MetaForm f = new MetaForm(); + MetaForm f = new MetaForm(this); f.Show(); f.LoadMeta(pso); } @@ -1538,7 +1556,7 @@ namespace CodeWalker private void ViewCut(string name, string path, byte[] data, RpfFileEntry e) { var cut = RpfFile.GetFile(e, data); - MetaForm f = new MetaForm(); + MetaForm f = new MetaForm(this); f.Show(); f.LoadMeta(cut); } @@ -1594,12 +1612,29 @@ namespace CodeWalker private void ViewCacheDat(string name, string path, byte[] data, RpfFileEntry e) { var cachedat = RpfFile.GetFile(e, data); - MetaForm f = new MetaForm(); + MetaForm f = new MetaForm(this); f.Show(); f.LoadMeta(cachedat); } + private Form FindExistingForm(RpfFileEntry e) + { + if (e == null) return null; + var allforms = Application.OpenForms; + var path = e.Path.ToLowerInvariant(); + foreach (var form in allforms) + { + var metaform = form as MetaForm; + if (metaform?.rpfFileEntry == e) return metaform; + if (metaform?.rpfFileEntry?.Path?.ToLowerInvariant() == path) + return metaform; //need to test the path as well since the file entry may have been replaced by a new version..! + + } + return null; + } + + private void ShowTreeContextMenu(TreeNode n, Point p) { var f = n?.Tag as MainTreeFolder; @@ -2265,7 +2300,6 @@ namespace CodeWalker } - CurrentFolder.ListItems = null; RefreshMainListView(); } @@ -2407,7 +2441,6 @@ namespace CodeWalker } } - CurrentFolder.ListItems = null; RefreshMainListView(); } private void CopySelected() diff --git a/Forms/MetaForm.cs b/Forms/MetaForm.cs index 17e8fe2..87848f9 100644 --- a/Forms/MetaForm.cs +++ b/Forms/MetaForm.cs @@ -11,6 +11,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; +using System.Xml; namespace CodeWalker.Forms { @@ -44,8 +45,15 @@ namespace CodeWalker.Forms private bool DelayHighlight = false; - public MetaForm() + private ExploreForm exploreForm = null; + public RpfFileEntry rpfFileEntry { get; private set; } = null; + private MetaFormat metaFormat = MetaFormat.XML; + + + public MetaForm(ExploreForm owner) { + exploreForm = owner; + InitializeComponent(); } @@ -119,14 +127,18 @@ namespace CodeWalker.Forms Xml = ""; RawPropertyGrid.SelectedObject = null; modified = false; + rpfFileEntry = null; return true; } private void NewDocument() { - if (!CloseDocument()) return; //same thing really.. + if (!CloseDocument()) return; FileName = "New.xml"; + rpfFileEntry = null; + + //TODO: decide XML/RSC/PSO/RBF format..? } private void OpenDocument() { @@ -144,9 +156,32 @@ namespace CodeWalker.Forms FilePath = fn; FileName = new FileInfo(fn).Name; RawPropertyGrid.SelectedObject = null; + rpfFileEntry = null; + + //TODO: open RSC/PSO/RBF..? } private void SaveDocument(bool saveAs = false) { + if ((metaFormat != MetaFormat.XML) && (saveAs == false)) + { + var doc = new XmlDocument(); + try + { + doc.LoadXml(xml); + } + catch (Exception ex) + { + MessageBox.Show("There's something wrong with your XML document:\r\n" + ex.Message, "Unable to parse XML"); + return; + } + if (SaveMeta(doc)) + { + return; + } + //if Meta saving failed for whatever reason, fallback to saving the XML in the filesystem. + saveAs = true; + } + if (string.IsNullOrEmpty(FileName)) saveAs = true; if (string.IsNullOrEmpty(FilePath)) saveAs = true; else if ((FilePath.ToLowerInvariant().StartsWith(GTAFolder.CurrentGTAFolder.ToLowerInvariant()))) saveAs = true; @@ -171,6 +206,7 @@ namespace CodeWalker.Forms modified = false; FilePath = fn; FileName = new FileInfo(fn).Name; + metaFormat = MetaFormat.XML; } @@ -181,7 +217,15 @@ namespace CodeWalker.Forms Xml = MetaXml.GetXml(ymt, out fn); FileName = fn; RawPropertyGrid.SelectedObject = ymt; + rpfFileEntry = ymt?.RpfFileEntry; modified = false; + metaFormat = MetaFormat.XML; + if (ymt != null) + { + if (ymt.Meta != null) metaFormat = MetaFormat.RSC; + if (ymt.Pso != null) metaFormat = MetaFormat.PSO; + if (ymt.Rbf != null) metaFormat = MetaFormat.RBF; + } } public void LoadMeta(YmfFile ymf) { @@ -189,7 +233,15 @@ namespace CodeWalker.Forms Xml = MetaXml.GetXml(ymf, out fn); FileName = fn; RawPropertyGrid.SelectedObject = ymf; + rpfFileEntry = ymf?.FileEntry; modified = false; + metaFormat = MetaFormat.XML; + if (ymf != null) + { + if (ymf.Meta != null) metaFormat = MetaFormat.RSC; + if (ymf.Pso != null) metaFormat = MetaFormat.PSO; + if (ymf.Rbf != null) metaFormat = MetaFormat.RBF; + } } public void LoadMeta(YmapFile ymap) { @@ -197,7 +249,15 @@ namespace CodeWalker.Forms Xml = MetaXml.GetXml(ymap, out fn); FileName = fn; RawPropertyGrid.SelectedObject = ymap; + rpfFileEntry = ymap?.RpfFileEntry; modified = false; + metaFormat = MetaFormat.XML; + if (ymap != null) + { + if (ymap.Meta != null) metaFormat = MetaFormat.RSC; + if (ymap.Pso != null) metaFormat = MetaFormat.PSO; + if (ymap.Rbf != null) metaFormat = MetaFormat.RBF; + } } public void LoadMeta(YtypFile ytyp) { @@ -205,7 +265,15 @@ namespace CodeWalker.Forms Xml = MetaXml.GetXml(ytyp, out fn); FileName = fn; RawPropertyGrid.SelectedObject = ytyp; + rpfFileEntry = ytyp?.RpfFileEntry; modified = false; + metaFormat = MetaFormat.XML; + if (ytyp != null) + { + if (ytyp.Meta != null) metaFormat = MetaFormat.RSC; + if (ytyp.Pso != null) metaFormat = MetaFormat.PSO; + if (ytyp.Rbf != null) metaFormat = MetaFormat.RBF; + } } public void LoadMeta(JPsoFile jpso) { @@ -213,7 +281,13 @@ namespace CodeWalker.Forms Xml = MetaXml.GetXml(jpso, out fn); FileName = fn; RawPropertyGrid.SelectedObject = jpso; + rpfFileEntry = jpso?.FileEntry; modified = false; + metaFormat = MetaFormat.XML; + if (jpso != null) + { + if (jpso.Pso != null) metaFormat = MetaFormat.PSO; + } } public void LoadMeta(CutFile cut) { @@ -221,7 +295,13 @@ namespace CodeWalker.Forms Xml = MetaXml.GetXml(cut, out fn); FileName = fn; RawPropertyGrid.SelectedObject = cut; + rpfFileEntry = cut?.FileEntry; modified = false; + metaFormat = MetaFormat.XML; + if (cut != null) + { + if (cut.Pso != null) metaFormat = MetaFormat.PSO; + } } public void LoadMeta(CacheDatFile cachedat) { @@ -229,11 +309,99 @@ namespace CodeWalker.Forms Xml = cachedat.GetXml(); FileName = fn; RawPropertyGrid.SelectedObject = cachedat; + rpfFileEntry = cachedat?.FileEntry; modified = false; + metaFormat = MetaFormat.XML; + if (cachedat?.FileEntry != null) + { + metaFormat = MetaFormat.CacheFile; + } } + public bool SaveMeta(XmlDocument doc) + { + //if explorer is in edit mode, and the current RpfFileEntry is valid, convert XML to the + //current meta format and then save the file into the RPF. + //otherwise, save the generated file to disk? + //(currently just return false and revert to XML file save) + + if (!(exploreForm?.EditMode ?? false)) return false; + if (rpfFileEntry?.Parent == null) return false; + + byte[] data = null; + + try + { + switch (metaFormat) + { + default: + case MetaFormat.XML: return false;//what are we even doing here? + case MetaFormat.RSC: + var meta = XmlMeta.GetMeta(doc); + if ((meta.DataBlocks?.Data == null) || (meta.DataBlocks.Count == 0)) + { + MessageBox.Show("Schema not supported.", "Cannot import Meta XML"); + return false; + } + data = ResourceBuilder.Build(meta, 2); //meta is RSC "Version":2 (it's actually a type identifier, not a version!) + break; + case MetaFormat.PSO: + MessageBox.Show("Sorry, PSO import is not supported yet.", "Cannot import PSO XML"); + return false; + case MetaFormat.RBF: + MessageBox.Show("Sorry, RBF import is not supported.", "Cannot import RBF XML"); + return false; + case MetaFormat.CacheFile: + MessageBox.Show("Sorry, CacheFile import is not supported.", "Cannot import CacheFile XML"); + return false; + } + } + catch (Exception ex) + { + MessageBox.Show("Exception encountered!\r\n" + ex.Message, "Cannot convert XML"); + return false; + } + if (data == null) + { + MessageBox.Show("Schema not supported. (Unspecified error - data was null!)", "Cannot convert XML"); + return false; + } + + if (!rpfFileEntry.Path.ToLowerInvariant().StartsWith("mods")) + { + if (MessageBox.Show("This file is NOT located in the mods folder - Are you SURE you want to save this file?\r\nWARNING: This could cause permanent damage to your game!!!", "WARNING: Are you sure about this?", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return false;//that was a close one + } + } + + try + { + + var newentry = RpfFile.CreateFile(rpfFileEntry.Parent, rpfFileEntry.Name, data); + if (newentry != rpfFileEntry) + { } + rpfFileEntry = newentry; + + exploreForm?.RefreshMainListViewInvoke(); //update the file details in explorer... + + modified = false; + + return true; //victory! + } + catch (Exception ex) + { + MessageBox.Show("Error saving file to RPF! The RPF archive may be corrupted...\r\n" + ex.Message, "Really Bad Error"); + } + + return false; + } + + + + Style BlueStyle = new TextStyle(Brushes.Blue, null, FontStyle.Regular); Style RedStyle = new TextStyle(Brushes.Red, null, FontStyle.Regular); Style MaroonStyle = new TextStyle(Brushes.Maroon, null, FontStyle.Regular); From f24691a586f75bb47da9472566a4dbfe8f4f1ad9 Mon Sep 17 00:00:00 2001 From: dexy Date: Fri, 14 Dec 2018 22:17:13 +1100 Subject: [PATCH 033/158] Fixed RPF explorer search results back/forward bug --- ExploreForm.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ExploreForm.cs b/ExploreForm.cs index 812da28..1fc911e 100644 --- a/ExploreForm.cs +++ b/ExploreForm.cs @@ -1068,7 +1068,10 @@ namespace CodeWalker MainListView.VirtualListSize = 0; if (CurrentFolder != null) { - CurrentFolder.ListItems = null; //makes sure to rebuild the current files list + if (!CurrentFolder.IsSearchResults) + { + CurrentFolder.ListItems = null; //makes sure to rebuild the current files list + } CurrentFiles = CurrentFolder.GetListItems(); foreach (var file in CurrentFiles) //cache all the data for use by the list view. From 0ec052ddbced8608077955fb5557a6681b4aaf00 Mon Sep 17 00:00:00 2001 From: dexy Date: Fri, 14 Dec 2018 22:33:19 +1100 Subject: [PATCH 034/158] XmlMeta bug fix for IntFlags2 --- CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs | 16 ++++++++++------ Forms/MetaForm.cs | 8 ++++++-- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs b/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs index bc3ba05..79eb93e 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs @@ -179,9 +179,11 @@ namespace CodeWalker.GameFiles case MetaStructureEntryDataType.IntFlags1: case MetaStructureEntryDataType.IntFlags2: { - var _infos = MetaTypes.GetEnumInfo(entry.ReferenceKey); - - mb.AddEnumInfo(_infos.EnumNameHash); + if (entry.ReferenceKey != 0) + { + var _infos = MetaTypes.GetEnumInfo(entry.ReferenceKey); + mb.AddEnumInfo(_infos.EnumNameHash); + } int val = GetEnumInt(entry.ReferenceKey, cnode.InnerText, entry.DataType); Write(val, data, entry.DataOffset); @@ -190,9 +192,11 @@ namespace CodeWalker.GameFiles case MetaStructureEntryDataType.ShortFlags: { - var _infos = MetaTypes.GetEnumInfo(entry.ReferenceKey); - - mb.AddEnumInfo(_infos.EnumNameHash); + if (entry.ReferenceKey != 0) + { + var _infos = MetaTypes.GetEnumInfo(entry.ReferenceKey); + mb.AddEnumInfo(_infos.EnumNameHash); + } int val = GetEnumInt(entry.ReferenceKey, cnode.InnerText, entry.DataType); Write((short)val, data, entry.DataOffset); diff --git a/Forms/MetaForm.cs b/Forms/MetaForm.cs index 87848f9..3076493 100644 --- a/Forms/MetaForm.cs +++ b/Forms/MetaForm.cs @@ -332,7 +332,9 @@ namespace CodeWalker.Forms byte[] data = null; +#if !DEBUG try +#endif { switch (metaFormat) { @@ -358,11 +360,13 @@ namespace CodeWalker.Forms return false; } } +#if !DEBUG catch (Exception ex) { - MessageBox.Show("Exception encountered!\r\n" + ex.Message, "Cannot convert XML"); + MessageBox.Show("Exception encountered!\r\n" + ex.ToString(), "Cannot convert XML"); return false; } +#endif if (data == null) { MessageBox.Show("Schema not supported. (Unspecified error - data was null!)", "Cannot convert XML"); @@ -393,7 +397,7 @@ namespace CodeWalker.Forms } catch (Exception ex) { - MessageBox.Show("Error saving file to RPF! The RPF archive may be corrupted...\r\n" + ex.Message, "Really Bad Error"); + MessageBox.Show("Error saving file to RPF! The RPF archive may be corrupted...\r\n" + ex.ToString(), "Really Bad Error"); } return false; From ca7f270c5c84750b09a7e1e4a29f604a98922043 Mon Sep 17 00:00:00 2001 From: dexy Date: Sat, 15 Dec 2018 01:46:48 +1100 Subject: [PATCH 035/158] Added Occlusion mode and render YmapBoxOccluders (OccludeModels todo) --- .../GameFiles/FileTypes/YmapFile.cs | 29 +++++ Utils/MapUtils.cs | 27 ++++ WorldForm.Designer.cs | 19 ++- WorldForm.cs | 73 +++++++++++ WorldForm.resx | 116 +++++++++--------- WorldInfoForm.Designer.cs | 3 +- WorldInfoForm.cs | 10 ++ 7 files changed, 214 insertions(+), 63 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs index fc528c0..0150d17 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs @@ -2235,10 +2235,39 @@ namespace CodeWalker.GameFiles public YmapFile Ymap { get; set; } + + public Vector3 Position { get; set; } + public Vector3 Size { get; set; } + public Vector3 BBMin { get; set; } + public Vector3 BBMax { get; set; } + public Quaternion Orientation { get; set; } + + public YmapBoxOccluder(YmapFile ymap, BoxOccluder box) { Ymap = ymap; _Box = box; + + + Vector3 ymapbbmin = ymap._CMapData.entitiesExtentsMin; + Vector3 ymapbbmax = ymap._CMapData.entitiesExtentsMax; + Vector3 ymapbbrng = ymapbbmax - ymapbbmin; + + + Vector3 boxcenter = new Vector3(box.iCenterX, box.iCenterY, box.iCenterZ) / 4.0f;// / 32767.0f; + Vector3 boxsize = new Vector3(box.iLength, box.iWidth, box.iHeight) / 4.0f;// / 32767.0f; + + Position = boxcenter;// * ymapbbrng; + Size = boxsize;// * ymapbbrng; + BBMin = Size * -0.5f; + BBMax = Size * 0.5f; + + float cosz = box.iCosZ / 32767.0f;// ((float)short.MaxValue) + float sinz = box.iSinZ / 32767.0f; + + float angl = (float)Math.Atan2(cosz, sinz); + Orientation = Quaternion.RotationYawPitchRoll(0.0f, 0.0f, angl); + } } diff --git a/Utils/MapUtils.cs b/Utils/MapUtils.cs index 196bf0a..0942af4 100644 --- a/Utils/MapUtils.cs +++ b/Utils/MapUtils.cs @@ -181,6 +181,8 @@ namespace CodeWalker public YmapCarGen CarGenerator { get; set; } public YmapGrassInstanceBatch GrassBatch { get; set; } public YmapDistantLODLights DistantLodLights { get; set; } + public YmapBoxOccluder BoxOccluder { get; set; } + public YmapOccludeModel OccludeModel { get; set; } public YmapEntityDef MloEntityDef { get; set; } public MCMloRoomDef MloRoomDef { get; set; } public WaterQuad WaterQuad { get; set; } @@ -226,6 +228,8 @@ namespace CodeWalker (PathNode != null) || (TrainTrackNode != null) || (DistantLodLights != null) || + (BoxOccluder != null) || + (OccludeModel != null) || (MloEntityDef != null) || (ScenarioNode != null) || (Audio != null) || @@ -251,6 +255,8 @@ namespace CodeWalker || (MloEntityDef != mhit.MloEntityDef) || (DistantLodLights != mhit.DistantLodLights) || (GrassBatch != mhit.GrassBatch) + || (BoxOccluder != mhit.BoxOccluder) + || (OccludeModel != mhit.OccludeModel) || (WaterQuad != mhit.WaterQuad) || (CollisionBounds != mhit.CollisionBounds) || (NavPoly != mhit.NavPoly) @@ -274,6 +280,8 @@ namespace CodeWalker || (MloEntityDef != null) || (DistantLodLights != null) || (GrassBatch != null) + || (BoxOccluder != null) + || (OccludeModel != null) || (WaterQuad != null) || (CollisionBounds != null) || (NavPoly != null) @@ -299,6 +307,8 @@ namespace CodeWalker TimeCycleModifier = null; CarGenerator = null; GrassBatch = null; + BoxOccluder = null; + OccludeModel = null; WaterQuad = null; CollisionBounds = null; NavPoly = null; @@ -346,6 +356,14 @@ namespace CodeWalker { name = DistantLodLights.Ymap?.Name ?? ""; } + else if (BoxOccluder != null) + { + name = "BoxOccluder " + (BoxOccluder.Ymap?.Name ?? ""); + } + else if (OccludeModel != null) + { + name = "OccludeModel " + (OccludeModel.Ymap?.Name ?? ""); + } else if (CollisionBounds != null) { name = CollisionBounds.GetName(); @@ -424,6 +442,14 @@ namespace CodeWalker { name = TimeCycleModifier.CTimeCycleModifier.name.ToString(); } + if (BoxOccluder != null) + { + name = "BoxOccluder " + (BoxOccluder.Ymap?.Name ?? ""); + } + if (OccludeModel != null) + { + name = "OccludeModel " + (OccludeModel.Ymap?.Name ?? ""); + } if (CarGenerator != null) { name = CarGenerator.NameString(); @@ -847,6 +873,7 @@ namespace CodeWalker Scenario = 14, PopZone = 15, Audio = 16, + Occlusion = 17, } diff --git a/WorldForm.Designer.cs b/WorldForm.Designer.cs index e8a306f..f02fe27 100644 --- a/WorldForm.Designer.cs +++ b/WorldForm.Designer.cs @@ -285,6 +285,7 @@ namespace CodeWalker this.ToolbarCameraMapViewButton = new System.Windows.Forms.ToolStripMenuItem(); this.ToolbarCameraOrthographicButton = new System.Windows.Forms.ToolStripMenuItem(); this.ToolbarPanel = new System.Windows.Forms.Panel(); + this.ToolbarSelectOcclusionButton = new System.Windows.Forms.ToolStripMenuItem(); this.StatusStrip.SuspendLayout(); this.ToolsPanel.SuspendLayout(); this.ToolsTabControl.SuspendLayout(); @@ -345,7 +346,7 @@ namespace CodeWalker this.StatusLabel.BackColor = System.Drawing.SystemColors.Control; this.StatusLabel.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; this.StatusLabel.Name = "StatusLabel"; - this.StatusLabel.Size = new System.Drawing.Size(847, 17); + this.StatusLabel.Size = new System.Drawing.Size(878, 17); this.StatusLabel.Spring = true; this.StatusLabel.Text = "Initialising"; this.StatusLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; @@ -1048,7 +1049,8 @@ namespace CodeWalker "Distant Lod Lights", "Mlo Instance", "Scenario", - "Audio"}); + "Audio", + "Occlusion"}); this.SelectionModeComboBox.Location = new System.Drawing.Point(51, 30); this.SelectionModeComboBox.Name = "SelectionModeComboBox"; this.SelectionModeComboBox.Size = new System.Drawing.Size(121, 21); @@ -2694,7 +2696,7 @@ namespace CodeWalker this.ToolbarCameraModeButton}); this.Toolbar.Location = new System.Drawing.Point(1, 0); this.Toolbar.Name = "Toolbar"; - this.Toolbar.Size = new System.Drawing.Size(554, 25); + this.Toolbar.Size = new System.Drawing.Size(585, 25); this.Toolbar.TabIndex = 6; this.Toolbar.Text = "toolStrip1"; // @@ -2851,7 +2853,8 @@ namespace CodeWalker this.ToolbarSelectDistantLodLightsButton, this.ToolbarSelectMloInstanceButton, this.ToolbarSelectScenarioButton, - this.ToolbarSelectAudioButton}); + this.ToolbarSelectAudioButton, + this.ToolbarSelectOcclusionButton}); this.ToolbarSelectButton.Image = ((System.Drawing.Image)(resources.GetObject("ToolbarSelectButton.Image"))); this.ToolbarSelectButton.ImageTransparentColor = System.Drawing.Color.Magenta; this.ToolbarSelectButton.Name = "ToolbarSelectButton"; @@ -3258,6 +3261,13 @@ namespace CodeWalker this.ToolbarPanel.TabIndex = 7; this.ToolbarPanel.Visible = false; // + // ToolbarSelectOcclusionButton + // + this.ToolbarSelectOcclusionButton.Name = "ToolbarSelectOcclusionButton"; + this.ToolbarSelectOcclusionButton.Size = new System.Drawing.Size(181, 22); + this.ToolbarSelectOcclusionButton.Text = "Occlusion"; + this.ToolbarSelectOcclusionButton.Click += new System.EventHandler(this.ToolbarSelectOcclusionButton_Click); + // // WorldForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -3599,5 +3609,6 @@ namespace CodeWalker private System.Windows.Forms.NumericUpDown SnapGridSizeUpDown; private System.Windows.Forms.Label label26; private System.Windows.Forms.CheckBox RenderEntitiesCheckBox; + private System.Windows.Forms.ToolStripMenuItem ToolbarSelectOcclusionButton; } } \ No newline at end of file diff --git a/WorldForm.cs b/WorldForm.cs index 0e88468..e29e193 100644 --- a/WorldForm.cs +++ b/WorldForm.cs @@ -1118,6 +1118,10 @@ namespace CodeWalker case MapSelectionMode.Grass: change = change || (LastMouseHit.GrassBatch != PrevMouseHit.GrassBatch); break; + case MapSelectionMode.Occlusion: + change = change || (LastMouseHit.BoxOccluder != PrevMouseHit.BoxOccluder) + || (LastMouseHit.OccludeModel != PrevMouseHit.OccludeModel); + break; case MapSelectionMode.WaterQuad: change = change || (LastMouseHit.WaterQuad != PrevMouseHit.WaterQuad); break; @@ -1189,6 +1193,14 @@ namespace CodeWalker { ori = CurMouseHit.CarGenerator.Orientation; } + if (CurMouseHit.BoxOccluder != null) + { + ori = CurMouseHit.BoxOccluder.Orientation; + } + if (CurMouseHit.OccludeModel != null) + { + //ori = CurMouseHit.OccludeModel.Orientation; + } if (CurMouseHit.MloEntityDef != null) { scale = Vector3.One; @@ -1443,6 +1455,14 @@ namespace CodeWalker bbmax = selectionItem.GrassBatch.AABBMax; scale = Vector3.One; } + if (selectionItem.BoxOccluder != null) + { + var bo = selectionItem.BoxOccluder; + camrel = bo.Position - camera.Position; + ori = bo.Orientation; + bbmin = bo.BBMin; + bbmax = bo.BBMax; + } if (selectionItem.NavPoly != null) { Renderer.RenderSelectionNavPoly(selectionItem.NavPoly); @@ -2684,7 +2704,40 @@ namespace CodeWalker } } } + if ((SelectionMode == MapSelectionMode.Occlusion) && (ymap.BoxOccluders != null)) + { + for (int i = 0; i < ymap.BoxOccluders.Length; i++) + { + var bo = ymap.BoxOccluders[i]; + if ((bo.Position - camera.Position).Length() > dmax) continue; + MapBox mb = new MapBox(); + mb.CamRelPos = bo.Position - camera.Position; + mb.BBMin = bo.BBMin; + mb.BBMax = bo.BBMax; + mb.Orientation = bo.Orientation; + mb.Scale = Vector3.One; + Renderer.BoundingBoxes.Add(mb); + + Quaternion orinv = Quaternion.Invert(bo.Orientation); + Ray mraytrn = new Ray(); + mraytrn.Position = orinv.Multiply(camera.MouseRay.Position - mb.CamRelPos); + mraytrn.Direction = orinv.Multiply(mray.Direction); + bbox.Minimum = mb.BBMin; + bbox.Maximum = mb.BBMax; + if (mraytrn.Intersects(ref bbox, out hitdist) && (hitdist < CurMouseHit.HitDist) && (hitdist > 0)) + { + CurMouseHit.BoxOccluder = bo; + CurMouseHit.HitDist = hitdist; + CurMouseHit.CamRel = mb.CamRelPos; + CurMouseHit.AABB = bbox; + } + } + } + if ((SelectionMode == MapSelectionMode.Occlusion) && (ymap.OccludeModels != null)) + { + //TODO + } } private void UpdateMouseHits(List waterquads) @@ -3652,6 +3705,16 @@ namespace CodeWalker SelectionEntityTabPage.Text = "Grass"; SelEntityPropertyGrid.SelectedObject = item.GrassBatch; } + else if (item.BoxOccluder != null) + { + SelectionEntityTabPage.Text = "Box Occluder"; + SelEntityPropertyGrid.SelectedObject = item.BoxOccluder; + } + else if (item.OccludeModel != null) + { + SelectionEntityTabPage.Text = "Occlude Model"; + SelEntityPropertyGrid.SelectedObject = item.OccludeModel; + } else if (item.WaterQuad != null) { SelectionEntityTabPage.Text = "WaterQuad"; @@ -5830,6 +5893,10 @@ namespace CodeWalker mode = MapSelectionMode.Audio; ToolbarSelectAudioButton.Checked = true; break; + case "Occlusion": + mode = MapSelectionMode.Occlusion; + ToolbarSelectOcclusionButton.Checked = true; + break; } SelectionMode = mode; @@ -7449,6 +7516,12 @@ namespace CodeWalker SetMouseSelect(true); } + private void ToolbarSelectOcclusionButton_Click(object sender, EventArgs e) + { + SetSelectionMode("Occlusion"); + SetMouseSelect(true); + } + private void ToolbarMoveButton_Click(object sender, EventArgs e) { SetWidgetMode(ToolbarMoveButton.Checked ? "Default" : "Position"); diff --git a/WorldForm.resx b/WorldForm.resx index fe93ed0..fdff026 100644 --- a/WorldForm.resx +++ b/WorldForm.resx @@ -240,25 +240,6 @@ ufo YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAB4SURBVDhP3ZC7DcAgDEQZKTMwHOvSIFriS7BlEB+HMic9 QJbvFThLUkpXzjkSpaeuzMPlEELx3jdsBauyCHBY6UWYPQI93KEljQD3jL6EGzN6x0bASyNYwkKU8Udm gd6TMnIikDJyIqjVNz8T7FgKrAwFX6lVinM3aJ05lWDPRRcAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wwAADsMBx2+oZAAAAHRJREFUOE/tk0EKgCAQRedIncGrGZ602lowuFW/kM1ElLYLEh668D1dKO2DmYcQ - gs/EHpTsnIvGmGZKQMrWjnH12y3ztJR9NfBGxiwD6lpPQEYMaxU4n3aF3PcHPh/AY8Ljy67vDkgZ36AG - WlEyBgKdHDIRJSPcKxCRg0UPAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - xAAADsQBlSsOGwAAAThJREFUOE+dk01ugzAQhTlBj+MDIJC4A1yEa7DMnlWaSiAu0ZI7BNi0XaRpF7Bg - 4/pzbMsQ0qod6SX2zHvPP4yDdUzTJBR2CieF2YAxOWFot6GKDwrlMAyyKAqZZZkMw1AjTVOdowYHrpFd - w4if67p2os/L1wI2DwfuwkRNSitu2+NdA1szJqUVC7ZGYb9/dOQtA/6bptFjcxyBwY7zkfwL0KDF4ESC - 7bHCx/miCf7qYJ1jjjYYx3Fm0nfDXfJWzhjMzuBweJJvr++b5K1dOQN7hP9AH0H96EvM83zh7q+2zsH1 - L1H0fS+TJHEX+ZsBXDRobS/oRorjWB5/aqSXVkZRJKuqQnxtJEJNXCvjTu9D9kGOmhEvW5kwJiVb43wI - WBXYx9R1nV75RuyHKrrnzCcGjE1u9ZyD4BugoZigQ9xrngAAAABJRU5ErkJggg== @@ -267,34 +248,6 @@ ufo YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAB0SURBVDhP7ZNBCoAgEEXnSJ3BqxmetNpaMLhVv5DNRJS2 CxIeuvA9XSjtg5mHEILPxB6U7JyLxphmSkDK1o5x9dst87SUfTXwRsYsA+paT0BGDGsVOJ92hdz3Bz4f wGPC48uu7w5IGd+gBlpRMgYCnRwyESUj3CsQkYNFDwAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m - dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADMSURBVDhPrZLBDcMgDEUzGxN0ilyZJ92DqXJoe4Cr - y3f8EXERUptaehVx/F8gzSIil1hKKWIMB8C0EA4hTCXToqCXVFbjOwElKSUF65zzzUbHhad4CYkxyr7v - KvHHIhQ0ybbd5fl4KVhDgns+SPSnDqzYMgQME/TsOO2d/EVQ17ozXmgD2/VHgMCGdY5h9psALwovDBLc - 9GAYcwyzZ//FUZCgiS3btj8k/tqiR3Xn0w+pDp2e2IN+xZJWncAzDINTTQSAwRYGLfQbsrwBmeh5Q8G/ - p8gAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wwAADsMBx2+oZAAAAH5JREFUOE+9kEEKwCAMBH2bL+hPfI/9ooe2B71aVpKS5iBB0i4MyCZZjcFdrbUu - IdsuDMUYB/8H1Fo3HQCPynOhsZTSU0pPAM7wpiG4hcFAzns/j2uAMzzZo3ntDHiYkTWNXwCztAJr+ROl - 0IhU+UTzMEsHkG2XS4CE7K8Uwg0o2F4o9CrlEwAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m - dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADLSURBVDhPpZHRDcIwDEQzWxbqGEjZoOzRqfoBfLS/ - Jnf1IWMKAmrpSYl7d3HSYmaHKOu6msNG2BOKPhVEtdZHiPbqfR0QQqy1Rn4OUMg0TQTrZVlOLt2vLnoJ - EcMw2DzPDMEke9AsYBrHs10vN4I1QqImwwDcFyMjQGaBHr5Bo8nEoYCnCQTGzVeI4oj6fIi+KHgoPBhC - 4knCjTww9vxfbIUQNDEyiGIZ8t6tW/k0vC/AOpuiueNOLwVkUeylvju9FJCg8E1vM/2PlTv5UoervVTJ - uQAAAABJRU5ErkJggg== @@ -389,6 +342,64 @@ ufo 4BJN+IjGo5O8ZJndGVhKxpjWWts551aih0fre+0BLaVchRAezPB2NXSSV/gVwXGYPJiVUt6ns1ghCDjn UQG86w3FToVgDcWCWS9Fvi/Ao0RVAcwUjwpyhzmf4n8BFApS5HZRwRuONGMbrIJ1JIN8O2QAAAAASUVO RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEvSURBVDhP3dK/K0dRGMfxKxRJopCSEkLya/guUhQRmQwG + WfwIkYySgYUSKUKJlOK/MBoMFMofYLUIsfJ+f3NuF3+A8tRree5zP/fcc070f6oHT/jAPTqQj6WvXvCM + TZQgG3H58gFGcYVLtGIN15jBNDbwiGNUIg4pQx8GsQuHhrCDW8yjHyns4Q0DcCXpykM5bFzgHGPYxw1G + UIVMtMHfWUUj4nIg/KurGIYrSAZYOXDGlbhXcZlegUO8Yxzb+BlQAwNW0G0jVAYK0AwHtnCEOyQDZvGC + ObTbKIIvLMA9WIYDizhFMsDjfsAZptCA9JcdfoVBvryOSbgCe4HPTuCz+BQMKEUvJmCy96ET1ehCuAf2 + 5ZF+uwdZKEYtmuBGFSIXhtejBe5PHX7dxL+qKPoEppRHcXOtiDsAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAAHRJREFUOE/tk0EKgCAQRedIncGrGZ602lowuFW/kM1ElLYLEh668D1dKO2DmYcQ + gs/EHpTsnIvGmGZKQMrWjnH12y3ztJR9NfBGxiwD6lpPQEYMaxU4n3aF3PcHPh/AY8Ljy67vDkgZ36AG + WlEyBgKdHDIRJSPcKxCRg0UPAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + xAAADsQBlSsOGwAAAThJREFUOE+dk01ugzAQhTlBj+MDIJC4A1yEa7DMnlWaSiAu0ZI7BNi0XaRpF7Bg + 4/pzbMsQ0qod6SX2zHvPP4yDdUzTJBR2CieF2YAxOWFot6GKDwrlMAyyKAqZZZkMw1AjTVOdowYHrpFd + w4if67p2os/L1wI2DwfuwkRNSitu2+NdA1szJqUVC7ZGYb9/dOQtA/6bptFjcxyBwY7zkfwL0KDF4ESC + 7bHCx/miCf7qYJ1jjjYYx3Fm0nfDXfJWzhjMzuBweJJvr++b5K1dOQN7hP9AH0H96EvM83zh7q+2zsH1 + L1H0fS+TJHEX+ZsBXDRobS/oRorjWB5/aqSXVkZRJKuqQnxtJEJNXCvjTu9D9kGOmhEvW5kwJiVb43wI + WBXYx9R1nV75RuyHKrrnzCcGjE1u9ZyD4BugoZigQ9xrngAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADMSURBVDhPrZLBDcMgDEUzGxN0ilyZJ92DqXJoe4Cr + y3f8EXERUptaehVx/F8gzSIil1hKKWIMB8C0EA4hTCXToqCXVFbjOwElKSUF65zzzUbHhad4CYkxyr7v + KvHHIhQ0ybbd5fl4KVhDgns+SPSnDqzYMgQME/TsOO2d/EVQ17ozXmgD2/VHgMCGdY5h9psALwovDBLc + 9GAYcwyzZ//FUZCgiS3btj8k/tqiR3Xn0w+pDp2e2IN+xZJWncAzDINTTQSAwRYGLfQbsrwBmeh5Q8G/ + p8gAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAAH5JREFUOE+9kEEKwCAMBH2bL+hPfI/9ooe2B71aVpKS5iBB0i4MyCZZjcFdrbUu + IdsuDMUYB/8H1Fo3HQCPynOhsZTSU0pPAM7wpiG4hcFAzns/j2uAMzzZo3ntDHiYkTWNXwCztAJr+ROl + 0IhU+UTzMEsHkG2XS4CE7K8Uwg0o2F4o9CrlEwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADLSURBVDhPpZHRDcIwDEQzWxbqGEjZoOzRqfoBfLS/ + Jnf1IWMKAmrpSYl7d3HSYmaHKOu6msNG2BOKPhVEtdZHiPbqfR0QQqy1Rn4OUMg0TQTrZVlOLt2vLnoJ + EcMw2DzPDMEke9AsYBrHs10vN4I1QqImwwDcFyMjQGaBHr5Bo8nEoYCnCQTGzVeI4oj6fIi+KHgoPBhC + 4knCjTww9vxfbIUQNDEyiGIZ8t6tW/k0vC/AOpuiueNOLwVkUeylvju9FJCg8E1vM/2PlTv5UoervVTJ + uQAAAABJRU5ErkJggg== @@ -424,17 +435,6 @@ ufo rp3fhGJScIRLzKMLFTC9cMIu3nCDVUyjB6WkYA93mEWbAyH9cMImPuA+rWMA31YwBU82kF6BS32Er/aO M8zAh+OEghpcwQ2bg3uwBW8ewFd7xQkm0IA4oaAS7bh2KHjBIZbhV/D6GJkFphrdcIP8lFrAGPwPOjCO QdQiTqrAWNICd7gPnUj+xBKaU9dxfhTkjwV/FxU+AbsiGnc46OYIAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEvSURBVDhP3dK/K0dRGMfxKxRJopCSEkLya/guUhQRmQwG - WfwIkYySgYUSKUKJlOK/MBoMFMofYLUIsfJ+f3NuF3+A8tRree5zP/fcc070f6oHT/jAPTqQj6WvXvCM - TZQgG3H58gFGcYVLtGIN15jBNDbwiGNUIg4pQx8GsQuHhrCDW8yjHyns4Q0DcCXpykM5bFzgHGPYxw1G - UIVMtMHfWUUj4nIg/KurGIYrSAZYOXDGlbhXcZlegUO8Yxzb+BlQAwNW0G0jVAYK0AwHtnCEOyQDZvGC - ObTbKIIvLMA9WIYDizhFMsDjfsAZptCA9JcdfoVBvryOSbgCe4HPTuCz+BQMKEUvJmCy96ET1ehCuAf2 - 5ZF+uwdZKEYtmuBGFSIXhtejBe5PHX7dxL+qKPoEppRHcXOtiDsAAAAASUVORK5CYII= diff --git a/WorldInfoForm.Designer.cs b/WorldInfoForm.Designer.cs index 51ccf9c..db9a24c 100644 --- a/WorldInfoForm.Designer.cs +++ b/WorldInfoForm.Designer.cs @@ -545,7 +545,8 @@ namespace CodeWalker "Distant Lod Lights", "Mlo Instance", "Scenario", - "Audio"}); + "Audio", + "Occlusion"}); this.SelectionModeComboBox.Location = new System.Drawing.Point(453, 12); this.SelectionModeComboBox.Name = "SelectionModeComboBox"; this.SelectionModeComboBox.Size = new System.Drawing.Size(121, 21); diff --git a/WorldInfoForm.cs b/WorldInfoForm.cs index 0c5a47a..706137b 100644 --- a/WorldInfoForm.cs +++ b/WorldInfoForm.cs @@ -114,6 +114,16 @@ namespace CodeWalker SelectionEntityTabPage.Text = "Grass"; SelEntityPropertyGrid.SelectedObject = item.GrassBatch; } + else if (item.BoxOccluder != null) + { + SelectionEntityTabPage.Text = "Box Occluder"; + SelEntityPropertyGrid.SelectedObject = item.BoxOccluder; + } + else if (item.OccludeModel != null) + { + SelectionEntityTabPage.Text = "Occlude Model"; + SelEntityPropertyGrid.SelectedObject = item.OccludeModel; + } else if (item.WaterQuad != null) { SelectionEntityTabPage.Text = "Water Quad"; From 3533260884af69cd2f2ca0ae92aad61491738c26 Mon Sep 17 00:00:00 2001 From: dexy Date: Sat, 15 Dec 2018 04:09:02 +1100 Subject: [PATCH 036/158] Rendering OccludeModels when in Occlusion mode --- .../GameFiles/FileTypes/YmapFile.cs | 59 +++++++++++++++---- .../GameFiles/MetaTypes/MetaTypes.cs | 15 +++++ Rendering/Renderer.cs | 9 +++ WorldForm.cs | 8 ++- 4 files changed, 78 insertions(+), 13 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs index 0150d17..7bf9c31 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs @@ -455,6 +455,9 @@ namespace CodeWalker.GameFiles for (int i = 0; i < COccludeModels.Length; i++) { OccludeModels[i] = new YmapOccludeModel(this, COccludeModels[i]); + + OccludeModels[i].Load(Meta); + } } } @@ -2212,19 +2215,60 @@ namespace CodeWalker.GameFiles [TypeConverter(typeof(ExpandableObjectConverter))] - public class YmapOccludeModel + public class YmapOccludeModel : BasePathData { public OccludeModel _OccludeModel; public OccludeModel OccludeModel { get { return _OccludeModel; } set { _OccludeModel = value; } } public YmapFile Ymap { get; set; } + public byte[] Data { get; set; } + public Vector3[] Vertices { get; set; } + public byte[] Indices { get; set; } public YmapOccludeModel(YmapFile ymap, OccludeModel model) { Ymap = ymap; _OccludeModel = model; } + + + public void Load(Meta meta) + { + var vptr = _OccludeModel.verts; + var dataSize = _OccludeModel.dataSize; + var indicesOffset = _OccludeModel.Unk_853977995; + var vertexCount = indicesOffset / 12; + var indexCount = (int)(dataSize - indicesOffset);// / 4; + Data = MetaTypes.GetByteArray(meta, vptr, dataSize); + Vertices = MetaTypes.ConvertDataArray(Data, 0, vertexCount); + Indices = new byte[indexCount]; + Buffer.BlockCopy(Data, indicesOffset, Indices, 0, indexCount); + } + + + public EditorVertex[] GetTriangleVertices() + { + if ((Vertices == null) || (Indices == null)) return null; + EditorVertex[] res = new EditorVertex[Indices.Length];//changing from indexed to nonindexed triangle list + var colour = new Color4(1.0f, 1.0f, 1.0f, 0.2f); //todo: colours for occlude models? currently transparent white + var colourval = (uint)colour.ToRgba(); + for (int i = 0; i < Indices.Length; i++) + { + res[i].Position = Vertices[Indices[i]]; + res[i].Colour = colourval; + } + return res; + } + + public EditorVertex[] GetPathVertices() + { + return null; + } + public Vector4[] GetNodePositions() + { + return null; + } } [TypeConverter(typeof(ExpandableObjectConverter))] @@ -2248,17 +2292,8 @@ namespace CodeWalker.GameFiles Ymap = ymap; _Box = box; - - Vector3 ymapbbmin = ymap._CMapData.entitiesExtentsMin; - Vector3 ymapbbmax = ymap._CMapData.entitiesExtentsMax; - Vector3 ymapbbrng = ymapbbmax - ymapbbmin; - - - Vector3 boxcenter = new Vector3(box.iCenterX, box.iCenterY, box.iCenterZ) / 4.0f;// / 32767.0f; - Vector3 boxsize = new Vector3(box.iLength, box.iWidth, box.iHeight) / 4.0f;// / 32767.0f; - - Position = boxcenter;// * ymapbbrng; - Size = boxsize;// * ymapbbrng; + Position = new Vector3(box.iCenterX, box.iCenterY, box.iCenterZ) / 4.0f; + Size = new Vector3(box.iLength, box.iWidth, box.iHeight) / 4.0f; BBMin = Size * -0.5f; BBMax = Size * 0.5f; diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaTypes.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaTypes.cs index 13b5a0a..c0000b1 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaTypes.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaTypes.cs @@ -1728,6 +1728,21 @@ namespace CodeWalker.GameFiles Buffer.BlockCopy(ptrblock.Data, (int)ptroffset, data, 0, count); return data; } + public static byte[] GetByteArray(Meta meta, DataBlockPointer ptr, uint count) + { + //var pointer = array.Pointer; + uint ptrindex = ptr.PointerDataIndex;// (pointer & 0xFFF) - 1; + uint ptroffset = ptr.PointerDataOffset;// ((pointer >> 12) & 0xFFFFF); + var ptrblock = (ptrindex < meta.DataBlocks.Count) ? meta.DataBlocks[(int)ptrindex] : null; + if ((ptrblock == null) || (ptrblock.Data == null))// || (ptrblock.StructureNameHash != name)) + { return null; } //no block or wrong block? shouldn't happen! + //var count = array.Count1; + if ((ptroffset + count) > ptrblock.Data.Length) + { return null; } + byte[] data = new byte[count]; + Buffer.BlockCopy(ptrblock.Data, (int)ptroffset, data, 0, (int)count); + return data; + } public static T[] GetTypedDataArray(Meta meta, MetaName name) where T : struct diff --git a/Rendering/Renderer.cs b/Rendering/Renderer.cs index 3d67492..f37cf18 100644 --- a/Rendering/Renderer.cs +++ b/Rendering/Renderer.cs @@ -1433,6 +1433,15 @@ namespace CodeWalker.Rendering } } + public void RenderBasePath(BasePathData basepath) + { + RenderablePathBatch rnd = renderableCache.GetRenderablePathBatch(basepath); + if ((rnd != null) && (rnd.IsLoaded)) + { + shaders.Enqueue(rnd); + } + } + public void RenderScenarios(List ymts) { foreach (var scenario in ymts) diff --git a/WorldForm.cs b/WorldForm.cs index e29e193..0ceb125 100644 --- a/WorldForm.cs +++ b/WorldForm.cs @@ -2736,7 +2736,13 @@ namespace CodeWalker } if ((SelectionMode == MapSelectionMode.Occlusion) && (ymap.OccludeModels != null)) { - //TODO + for (int i = 0; i < ymap.OccludeModels.Length; i++) + { + var om = ymap.OccludeModels[i]; + + Renderer.RenderBasePath(om); + + } } } From 13a57102a9927d57fd8ec436198cb45e1878a499 Mon Sep 17 00:00:00 2001 From: dexy Date: Sat, 15 Dec 2018 12:12:57 +1100 Subject: [PATCH 037/158] Selectable OccludeModels, also occluder ymap indices now displayed --- .../GameFiles/FileTypes/YmapFile.cs | 5 ++++- Utils/MapUtils.cs | 8 +++---- WorldForm.cs | 21 +++++++++++++++++++ 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs index 7bf9c31..d9185da 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs @@ -442,6 +442,7 @@ namespace CodeWalker.GameFiles for (int i = 0; i < CBoxOccluders.Length; i++) { BoxOccluders[i] = new YmapBoxOccluder(this, CBoxOccluders[i]); + BoxOccluders[i].Index = i; } } } @@ -455,7 +456,7 @@ namespace CodeWalker.GameFiles for (int i = 0; i < COccludeModels.Length; i++) { OccludeModels[i] = new YmapOccludeModel(this, COccludeModels[i]); - + OccludeModels[i].Index = i; OccludeModels[i].Load(Meta); } @@ -2225,6 +2226,7 @@ namespace CodeWalker.GameFiles public byte[] Data { get; set; } public Vector3[] Vertices { get; set; } public byte[] Indices { get; set; } + public int Index { get; set; } public YmapOccludeModel(YmapFile ymap, OccludeModel model) { @@ -2285,6 +2287,7 @@ namespace CodeWalker.GameFiles public Vector3 BBMin { get; set; } public Vector3 BBMax { get; set; } public Quaternion Orientation { get; set; } + public int Index { get; set; } public YmapBoxOccluder(YmapFile ymap, BoxOccluder box) diff --git a/Utils/MapUtils.cs b/Utils/MapUtils.cs index 0942af4..3b36cc9 100644 --- a/Utils/MapUtils.cs +++ b/Utils/MapUtils.cs @@ -358,11 +358,11 @@ namespace CodeWalker } else if (BoxOccluder != null) { - name = "BoxOccluder " + (BoxOccluder.Ymap?.Name ?? ""); + name = "BoxOccluder " + (BoxOccluder.Ymap?.Name ?? "") + ": " + BoxOccluder.Index.ToString(); } else if (OccludeModel != null) { - name = "OccludeModel " + (OccludeModel.Ymap?.Name ?? ""); + name = "OccludeModel " + (OccludeModel.Ymap?.Name ?? "") + ": " + OccludeModel.Index.ToString(); } else if (CollisionBounds != null) { @@ -444,11 +444,11 @@ namespace CodeWalker } if (BoxOccluder != null) { - name = "BoxOccluder " + (BoxOccluder.Ymap?.Name ?? ""); + name = "BoxOccluder " + (BoxOccluder.Ymap?.Name ?? "") + ": " + BoxOccluder.Index.ToString(); } if (OccludeModel != null) { - name = "OccludeModel " + (OccludeModel.Ymap?.Name ?? ""); + name = "OccludeModel " + (OccludeModel.Ymap?.Name ?? "") + ": " + OccludeModel.Index.ToString(); } if (CarGenerator != null) { diff --git a/WorldForm.cs b/WorldForm.cs index 0ceb125..e040a94 100644 --- a/WorldForm.cs +++ b/WorldForm.cs @@ -2728,6 +2728,7 @@ namespace CodeWalker if (mraytrn.Intersects(ref bbox, out hitdist) && (hitdist < CurMouseHit.HitDist) && (hitdist > 0)) { CurMouseHit.BoxOccluder = bo; + CurMouseHit.OccludeModel = null; CurMouseHit.HitDist = hitdist; CurMouseHit.CamRel = mb.CamRelPos; CurMouseHit.AABB = bbox; @@ -2742,6 +2743,26 @@ namespace CodeWalker Renderer.RenderBasePath(om); + MapBox mb = new MapBox(); + mb.CamRelPos = -camera.Position; + mb.BBMin = om._OccludeModel.bmin; + mb.BBMax = om._OccludeModel.bmax; + mb.Orientation = Quaternion.Identity;// bo.Orientation; + mb.Scale = Vector3.One; + Renderer.BoundingBoxes.Add(mb); + + + bbox.Minimum = mb.BBMin; + bbox.Maximum = mb.BBMax; + if (mray.Intersects(ref bbox, out hitdist) && (hitdist < CurMouseHit.HitDist) && (hitdist > 0)) + { + CurMouseHit.BoxOccluder = null; + CurMouseHit.OccludeModel = om; + CurMouseHit.HitDist = hitdist; + CurMouseHit.CamRel = mb.CamRelPos; + CurMouseHit.AABB = bbox; + } + } } From cc6e9b6c8399c5f54f7a210c0698debccec0aa49 Mon Sep 17 00:00:00 2001 From: dexy Date: Sun, 16 Dec 2018 16:37:48 +1100 Subject: [PATCH 038/158] Updated DockPanelSuite and FastColoredTextBox to latest versions. Use NuGet manager to update your local files! --- App.config | 15 +++++++++++---- CodeWalker.csproj | 13 ++++++------- packages.config | 6 +++--- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/App.config b/App.config index 0ce7d78..11bc587 100644 --- a/App.config +++ b/App.config @@ -1,7 +1,7 @@ - + - +
@@ -153,8 +153,7 @@ - + Move Forwards: W Move Backwards: S Move Left: A @@ -204,4 +203,12 @@ + + + + + + + + \ No newline at end of file diff --git a/CodeWalker.csproj b/CodeWalker.csproj index 5d9c7bd..d76a1be 100644 --- a/CodeWalker.csproj +++ b/CodeWalker.csproj @@ -91,9 +91,8 @@ Resources\CW.ico - - packages\FCTB.2.16.21.0\lib\FastColoredTextBox.dll - False + + packages\FCTB.2.16.24\lib\FastColoredTextBox.dll packages\SharpDX.4.0.1\lib\net45\SharpDX.dll @@ -130,11 +129,11 @@ - - packages\DockPanelSuite.3.0.4\lib\net40\WeifenLuo.WinFormsUI.Docking.dll + + packages\DockPanelSuite.3.0.6\lib\net40\WeifenLuo.WinFormsUI.Docking.dll - - packages\DockPanelSuite.ThemeVS2015.3.0.4\lib\net40\WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll + + packages\DockPanelSuite.ThemeVS2015.3.0.6\lib\net40\WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll diff --git a/packages.config b/packages.config index 51f22e4..145bc8c 100644 --- a/packages.config +++ b/packages.config @@ -1,8 +1,8 @@  - - - + + + From 56e2988713bdbf69bbca870fc1a4e05a74f49f96 Mon Sep 17 00:00:00 2001 From: dexy Date: Sun, 16 Dec 2018 16:40:56 +1100 Subject: [PATCH 039/158] Updated DockPanelSuite for CodeWalker.WinForms project --- CodeWalker.WinForms/CodeWalker.WinForms.csproj | 9 +++++---- CodeWalker.WinForms/app.config | 11 +++++++++++ CodeWalker.WinForms/packages.config | 4 ++-- 3 files changed, 18 insertions(+), 6 deletions(-) create mode 100644 CodeWalker.WinForms/app.config diff --git a/CodeWalker.WinForms/CodeWalker.WinForms.csproj b/CodeWalker.WinForms/CodeWalker.WinForms.csproj index 73201d9..4e73fa3 100644 --- a/CodeWalker.WinForms/CodeWalker.WinForms.csproj +++ b/CodeWalker.WinForms/CodeWalker.WinForms.csproj @@ -40,11 +40,11 @@ - - ..\packages\DockPanelSuite.3.0.4\lib\net40\WeifenLuo.WinFormsUI.Docking.dll + + ..\packages\DockPanelSuite.3.0.6\lib\net40\WeifenLuo.WinFormsUI.Docking.dll - - ..\packages\DockPanelSuite.ThemeVS2015.3.0.4\lib\net40\WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll + + ..\packages\DockPanelSuite.ThemeVS2015.3.0.6\lib\net40\WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll @@ -109,6 +109,7 @@ + diff --git a/CodeWalker.WinForms/app.config b/CodeWalker.WinForms/app.config new file mode 100644 index 0000000..56b711f --- /dev/null +++ b/CodeWalker.WinForms/app.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/CodeWalker.WinForms/packages.config b/CodeWalker.WinForms/packages.config index ca4f513..44d10c1 100644 --- a/CodeWalker.WinForms/packages.config +++ b/CodeWalker.WinForms/packages.config @@ -1,5 +1,5 @@  - - + + \ No newline at end of file From f738a03eaa266837347966c8df63fb7c1b7cf9a5 Mon Sep 17 00:00:00 2001 From: dexy Date: Sun, 16 Dec 2018 17:20:00 +1100 Subject: [PATCH 040/158] Fixed interior and embedded collisions not being drawn when in Collisions mode --- Rendering/Renderer.cs | 8 +++++--- WorldForm.cs | 1 + 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Rendering/Renderer.cs b/Rendering/Renderer.cs index f37cf18..659f31a 100644 --- a/Rendering/Renderer.cs +++ b/Rendering/Renderer.cs @@ -110,6 +110,8 @@ namespace CodeWalker.Rendering private List renderskeletonlist = new List(); private List skeletonLineVerts = new List(); + public MapSelectionMode SelectionMode = MapSelectionMode.Entity; //to assist in rendering embedded collisions properly... + public BoundsShaderMode boundsmode = BoundsShaderMode.None; public bool renderboundsclip = Settings.Default.BoundsDepthClip; @@ -1599,7 +1601,7 @@ namespace CodeWalker.Rendering //todo: render parent if children loading....... } - if (ent.IsMlo && rendercollisionmeshes && renderinteriors) + if ((rendercollisionmeshes || (SelectionMode == MapSelectionMode.Collision)) && renderinteriors) { RenderInteriorCollisionMesh(ent); } @@ -2030,7 +2032,7 @@ namespace CodeWalker.Rendering RenderArchetype(intarch, intent); } } - if (rendercollisionmeshes) + if (rendercollisionmeshes || (SelectionMode == MapSelectionMode.Collision)) { RenderInteriorCollisionMesh(entity); } @@ -2336,7 +2338,7 @@ namespace CodeWalker.Rendering float distance = (camrel + bscen).Length(); - if (rendercollisionmeshes && rendercollisionmeshlayerdrawable) + if ((rendercollisionmeshes || (SelectionMode == MapSelectionMode.Collision)) && rendercollisionmeshlayerdrawable) { Drawable sdrawable = rndbl.Key as Drawable; if ((sdrawable != null) && (sdrawable.Bound != null)) diff --git a/WorldForm.cs b/WorldForm.cs index e040a94..e4c265e 100644 --- a/WorldForm.cs +++ b/WorldForm.cs @@ -5928,6 +5928,7 @@ namespace CodeWalker } SelectionMode = mode; SelectionModeStr = modestr; + Renderer.SelectionMode = mode; if (SelectionModeComboBox.Text != modestr) { From 37afa2335ce8848eb2ae878ee3cf3c42937a8597 Mon Sep 17 00:00:00 2001 From: dexy Date: Sun, 16 Dec 2018 22:32:33 +1100 Subject: [PATCH 041/158] Moved entity sets checkboxlist to MLO Instance tab on entity panel. Added support for updating/saving MLO instance data. Added support for updating/saving TImeArchetype data. --- .../GameFiles/FileTypes/YmapFile.cs | 11 +- .../GameFiles/MetaTypes/Archetype.cs | 64 +++++++-- CodeWalker.Core/GameFiles/RpfFile.cs | 4 + .../Panels/EditYmapEntityPanel.Designer.cs | 135 +++++++++++++++++ Project/Panels/EditYmapEntityPanel.cs | 136 ++++++++++++++++++ .../Panels/EditYtypArchetypePanel.Designer.cs | 99 ++++++++++--- Project/Panels/EditYtypArchetypePanel.cs | 95 +++++++++--- Project/ProjectForm.cs | 10 +- WorldForm.cs | 4 + 9 files changed, 500 insertions(+), 58 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs index d9185da..8d2a6b4 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs @@ -599,6 +599,11 @@ namespace CodeWalker.GameFiles var ent = AllEntities[i]; if (ent.MloInstance != null) { + ent.MloInstance.UpdateDefaultEntitySets(); + + ent.MloInstance._Instance.CEntityDef = ent.CEntityDef; //overwrite with all the updated values.. + ent.MloInstance._Instance.defaultEntitySets = mb.AddUintArrayPtr(ent.MloInstance.defaultEntitySets); + ptrs[i] = mb.AddItemPtr(MetaName.CMloInstanceDef, ent.MloInstance.Instance); } else @@ -1003,12 +1008,16 @@ namespace CodeWalker.GameFiles flags = SetBit(flags, 1); //2 break; } + if (yent.MloInstance != null) + { + contentFlags = SetBit(contentFlags, 3); //8 //(interior instance) + } } } if ((CMloInstanceDefs != null) && (CMloInstanceDefs.Length > 0)) { - contentFlags = SetBit(contentFlags, 3); //8 + contentFlags = SetBit(contentFlags, 3); //8 //(interior instance) //is this still necessary? } if ((physicsDictionaries != null) && (physicsDictionaries.Length > 0)) { diff --git a/CodeWalker.Core/GameFiles/MetaTypes/Archetype.cs b/CodeWalker.Core/GameFiles/MetaTypes/Archetype.cs index ebd4de1..d5279b8 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/Archetype.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/Archetype.cs @@ -89,7 +89,7 @@ namespace CodeWalker.GameFiles public uint TimeFlags { get; set; } public bool[] ActiveHours { get; set; } public string[] ActiveHoursText { get; set; } - public bool ExtraFlag { get; set; } + public bool ExtraFlag { get { return ((TimeFlags >> 24) & 1) == 1; } } public void Init(YtypFile ytyp, ref CTimeArchetypeDef arch) @@ -99,18 +99,8 @@ namespace CodeWalker.GameFiles _TimeArchetypeDef = arch; TimeFlags = arch.TimeArchetypeDef.timeFlags; - ActiveHours = new bool[24]; - ActiveHoursText = new string[24]; - for (int i = 0; i < 24; i++) - { - bool v = ((TimeFlags >> i) & 1) == 1; - ActiveHours[i] = v; - int nxth = (i < 23) ? (i + 1) : 0; - string hrs = string.Format("{0:00}:00 - {1:00}:00", i, nxth); - ActiveHoursText[i] = (hrs + (v ? " - On" : " - Off")); - } - ExtraFlag = ((TimeFlags >> 24) & 1) == 1; + UpdateActiveHours(); } public override bool IsActive(float hour) @@ -120,6 +110,35 @@ namespace CodeWalker.GameFiles if ((h < 0) || (h > 23)) return true; return ActiveHours[h]; } + + + public void UpdateActiveHours() + { + if (ActiveHours == null) + { + ActiveHours = new bool[24]; + ActiveHoursText = new string[24]; + } + for (int i = 0; i < 24; i++) + { + bool v = ((TimeFlags >> i) & 1) == 1; + ActiveHours[i] = v; + + int nxth = (i < 23) ? (i + 1) : 0; + string hrs = string.Format("{0:00}:00 - {1:00}:00", i, nxth); + ActiveHoursText[i] = (hrs + (v ? " - On" : " - Off")); + } + } + + public void SetTimeFlags(uint flags) + { + TimeFlags = flags; + _TimeArchetypeDef._TimeArchetypeDef.timeFlags = flags; + + UpdateActiveHours(); + } + + } public class MloArchetype : Archetype @@ -630,6 +649,27 @@ namespace CodeWalker.GameFiles Entities = entities.ToArray(); } + public void UpdateDefaultEntitySets() + { + var list = new List(); + var mloarch = Owner?.Archetype as MloArchetype; + + for (uint i = 0; i < mloarch.entitySets.Length; i++) + { + var entset = mloarch.entitySets[i]; + MloInstanceEntitySet instset = null; + EntitySets.TryGetValue(entset._Data.name, out instset); + if (instset != null) + { + if (instset.Visible) + { + list.Add(i); + } + } + } + + defaultEntitySets = list.ToArray(); + } } [TypeConverter(typeof(ExpandableObjectConverter))] diff --git a/CodeWalker.Core/GameFiles/RpfFile.cs b/CodeWalker.Core/GameFiles/RpfFile.cs index 0ab4f45..3a0fcc7 100644 --- a/CodeWalker.Core/GameFiles/RpfFile.cs +++ b/CodeWalker.Core/GameFiles/RpfFile.cs @@ -2012,6 +2012,10 @@ namespace CodeWalker.GameFiles } public string GetShortNameLower() { + if (NameLower == null) + { + NameLower = Name.ToLowerInvariant(); + } int ind = NameLower.LastIndexOf('.'); if (ind > 0) { diff --git a/Project/Panels/EditYmapEntityPanel.Designer.cs b/Project/Panels/EditYmapEntityPanel.Designer.cs index d12ebea..92c60c1 100644 --- a/Project/Panels/EditYmapEntityPanel.Designer.cs +++ b/Project/Panels/EditYmapEntityPanel.Designer.cs @@ -80,11 +80,23 @@ this.EntityPivotRotationNormalizeButton = new System.Windows.Forms.Button(); this.label94 = new System.Windows.Forms.Label(); this.EntityPivotRotationTextBox = new System.Windows.Forms.TextBox(); + this.EntityMiloTabPage = new System.Windows.Forms.TabPage(); + this.MiloEntitySetsListBox = new System.Windows.Forms.CheckedListBox(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.MiloGroupIDTextBox = new System.Windows.Forms.TextBox(); + this.MiloFloorIDTextBox = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.MiloNumExitPortalsTextBox = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.MiloFlagsTextBox = new System.Windows.Forms.TextBox(); + this.label6 = new System.Windows.Forms.Label(); this.EntityTabControl.SuspendLayout(); this.EntityGeneralTabPage.SuspendLayout(); this.EntityLodTabPage.SuspendLayout(); this.EntityExtensionsTabPage.SuspendLayout(); this.EntityPivotTabPage.SuspendLayout(); + this.EntityMiloTabPage.SuspendLayout(); this.SuspendLayout(); // // EntityTabControl @@ -96,6 +108,7 @@ this.EntityTabControl.Controls.Add(this.EntityLodTabPage); this.EntityTabControl.Controls.Add(this.EntityExtensionsTabPage); this.EntityTabControl.Controls.Add(this.EntityPivotTabPage); + this.EntityTabControl.Controls.Add(this.EntityMiloTabPage); this.EntityTabControl.Location = new System.Drawing.Point(2, 3); this.EntityTabControl.Name = "EntityTabControl"; this.EntityTabControl.SelectedIndex = 0; @@ -669,6 +682,115 @@ this.EntityPivotRotationTextBox.TabIndex = 25; this.EntityPivotRotationTextBox.TextChanged += new System.EventHandler(this.EntityPivotRotationTextBox_TextChanged); // + // EntityMiloTabPage + // + this.EntityMiloTabPage.Controls.Add(this.MiloFlagsTextBox); + this.EntityMiloTabPage.Controls.Add(this.label6); + this.EntityMiloTabPage.Controls.Add(this.MiloNumExitPortalsTextBox); + this.EntityMiloTabPage.Controls.Add(this.label5); + this.EntityMiloTabPage.Controls.Add(this.label3); + this.EntityMiloTabPage.Controls.Add(this.MiloGroupIDTextBox); + this.EntityMiloTabPage.Controls.Add(this.MiloFloorIDTextBox); + this.EntityMiloTabPage.Controls.Add(this.label4); + this.EntityMiloTabPage.Controls.Add(this.MiloEntitySetsListBox); + this.EntityMiloTabPage.Controls.Add(this.label2); + this.EntityMiloTabPage.Location = new System.Drawing.Point(4, 22); + this.EntityMiloTabPage.Name = "EntityMiloTabPage"; + this.EntityMiloTabPage.Size = new System.Drawing.Size(555, 476); + this.EntityMiloTabPage.TabIndex = 4; + this.EntityMiloTabPage.Text = "MLO Instance"; + this.EntityMiloTabPage.UseVisualStyleBackColor = true; + // + // MiloEntitySetsListBox + // + this.MiloEntitySetsListBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.MiloEntitySetsListBox.CheckOnClick = true; + this.MiloEntitySetsListBox.FormattingEnabled = true; + this.MiloEntitySetsListBox.Location = new System.Drawing.Point(103, 128); + this.MiloEntitySetsListBox.Name = "MiloEntitySetsListBox"; + this.MiloEntitySetsListBox.Size = new System.Drawing.Size(434, 319); + this.MiloEntitySetsListBox.TabIndex = 4; + this.MiloEntitySetsListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.MiloEntitySetsListBox_ItemCheck); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(3, 129); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(91, 13); + this.label2.TabIndex = 3; + this.label2.Text = "DefaultEntitySets:"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(5, 18); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(50, 13); + this.label3.TabIndex = 36; + this.label3.Text = "GroupID:"; + // + // MiloGroupIDTextBox + // + this.MiloGroupIDTextBox.Location = new System.Drawing.Point(101, 15); + this.MiloGroupIDTextBox.Name = "MiloGroupIDTextBox"; + this.MiloGroupIDTextBox.Size = new System.Drawing.Size(154, 20); + this.MiloGroupIDTextBox.TabIndex = 37; + this.MiloGroupIDTextBox.TextChanged += new System.EventHandler(this.MiloGroupIDTextBox_TextChanged); + // + // MiloFloorIDTextBox + // + this.MiloFloorIDTextBox.Location = new System.Drawing.Point(101, 41); + this.MiloFloorIDTextBox.Name = "MiloFloorIDTextBox"; + this.MiloFloorIDTextBox.Size = new System.Drawing.Size(154, 20); + this.MiloFloorIDTextBox.TabIndex = 39; + this.MiloFloorIDTextBox.TextChanged += new System.EventHandler(this.MiloFloorIDTextBox_TextChanged); + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(5, 44); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(44, 13); + this.label4.TabIndex = 38; + this.label4.Text = "FloorID:"; + // + // MiloNumExitPortalsTextBox + // + this.MiloNumExitPortalsTextBox.Location = new System.Drawing.Point(101, 67); + this.MiloNumExitPortalsTextBox.Name = "MiloNumExitPortalsTextBox"; + this.MiloNumExitPortalsTextBox.Size = new System.Drawing.Size(154, 20); + this.MiloNumExitPortalsTextBox.TabIndex = 41; + this.MiloNumExitPortalsTextBox.TextChanged += new System.EventHandler(this.MiloNumExitPortalsTextBox_TextChanged); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(5, 70); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(81, 13); + this.label5.TabIndex = 40; + this.label5.Text = "NumExitPortals:"; + // + // MiloFlagsTextBox + // + this.MiloFlagsTextBox.Location = new System.Drawing.Point(101, 93); + this.MiloFlagsTextBox.Name = "MiloFlagsTextBox"; + this.MiloFlagsTextBox.Size = new System.Drawing.Size(154, 20); + this.MiloFlagsTextBox.TabIndex = 43; + this.MiloFlagsTextBox.TextChanged += new System.EventHandler(this.MiloFlagsTextBox_TextChanged); + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(5, 96); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(75, 13); + this.label6.TabIndex = 42; + this.label6.Text = "MLOInstFlags:"; + // // EditYmapEntityPanel // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -687,6 +809,8 @@ this.EntityExtensionsTabPage.PerformLayout(); this.EntityPivotTabPage.ResumeLayout(false); this.EntityPivotTabPage.PerformLayout(); + this.EntityMiloTabPage.ResumeLayout(false); + this.EntityMiloTabPage.PerformLayout(); this.ResumeLayout(false); } @@ -744,5 +868,16 @@ private System.Windows.Forms.Label label94; private System.Windows.Forms.TextBox EntityPivotRotationTextBox; private System.Windows.Forms.Label label1; + private System.Windows.Forms.TabPage EntityMiloTabPage; + private System.Windows.Forms.CheckedListBox MiloEntitySetsListBox; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox MiloGroupIDTextBox; + private System.Windows.Forms.TextBox MiloFloorIDTextBox; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TextBox MiloNumExitPortalsTextBox; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TextBox MiloFlagsTextBox; + private System.Windows.Forms.Label label6; } } \ No newline at end of file diff --git a/Project/Panels/EditYmapEntityPanel.cs b/Project/Panels/EditYmapEntityPanel.cs index b286963..cb96874 100644 --- a/Project/Panels/EditYmapEntityPanel.cs +++ b/Project/Panels/EditYmapEntityPanel.cs @@ -119,9 +119,37 @@ namespace CodeWalker.Project.Panels var cv = ((e.flags & (1u << i)) > 0); EntityFlagsCheckedListBox.SetItemCheckState(i, cv ? CheckState.Checked : CheckState.Unchecked); } + + + + MiloEntitySetsListBox.Items.Clear(); + if (CurrentEntity.MloInstance != null) + { + var milo = CurrentEntity.MloInstance._Instance; + MiloGroupIDTextBox.Text = milo.groupId.ToString(); + MiloFloorIDTextBox.Text = milo.floorId.ToString(); + MiloNumExitPortalsTextBox.Text = milo.numExitPortals.ToString(); + MiloFlagsTextBox.Text = milo.MLOInstflags.ToString(); + foreach (var sets in CurrentEntity.MloInstance.EntitySets) + { + MloInstanceEntitySet set = sets.Value; + MiloEntitySetsListBox.Items.Add(set.EntitySet.ToString(), set.Visible); + } + } + else + { + MiloGroupIDTextBox.Text = string.Empty; + MiloFloorIDTextBox.Text = string.Empty; + MiloNumExitPortalsTextBox.Text = string.Empty; + MiloFlagsTextBox.Text = string.Empty; + } + + populatingui = false; + UpdateTabVisibility(); + ProjectForm.WorldForm?.SelectEntity(CurrentEntity); //hopefully the drawable is already loaded - this will try get from cache @@ -147,6 +175,36 @@ namespace CodeWalker.Project.Panels } + private void UpdateTabVisibility() + { + + //avoid resetting the tabs if no change is necessary. + bool ok = true; + bool miloTabVis = false; + foreach (var tab in EntityTabControl.TabPages) + { + if (tab == EntityMiloTabPage) miloTabVis = true; + } + + if ((CurrentEntity?.MloInstance != null) != miloTabVis) ok = false; + if (ok) return; + + var seltab = EntityTabControl.SelectedTab; + + EntityTabControl.TabPages.Clear(); + + EntityTabControl.TabPages.Add(EntityGeneralTabPage); + EntityTabControl.TabPages.Add(EntityLodTabPage); + EntityTabControl.TabPages.Add(EntityExtensionsTabPage); + EntityTabControl.TabPages.Add(EntityPivotTabPage); + if (CurrentEntity?.MloInstance != null) EntityTabControl.TabPages.Add(EntityMiloTabPage); + + if (EntityTabControl.TabPages.Contains(seltab)) + { + EntityTabControl.SelectedTab = seltab; + } + } + private void EntityArchetypeTextBox_TextChanged(object sender, EventArgs e) { @@ -665,5 +723,83 @@ namespace CodeWalker.Project.Panels Quaternion q = Quaternion.Normalize(new Quaternion(v)); EntityPivotRotationTextBox.Text = FloatUtil.GetVector4String(new Vector4(q.X, q.Y, q.Z, q.W)); } + + private void MiloGroupIDTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEntity?.MloInstance == null) return; + uint groupId = 0; + uint.TryParse(MiloGroupIDTextBox.Text, out groupId); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentEntity.MloInstance._Instance.groupId != groupId) + { + CurrentEntity.MloInstance._Instance.groupId = groupId; + ProjectItemChanged(); + } + } + } + + private void MiloFloorIDTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEntity?.MloInstance == null) return; + uint floorId = 0; + uint.TryParse(MiloFloorIDTextBox.Text, out floorId); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentEntity.MloInstance._Instance.floorId != floorId) + { + CurrentEntity.MloInstance._Instance.floorId = floorId; + ProjectItemChanged(); + } + } + } + + private void MiloNumExitPortalsTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEntity?.MloInstance == null) return; + uint num = 0; + uint.TryParse(MiloNumExitPortalsTextBox.Text, out num); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentEntity.MloInstance._Instance.numExitPortals != num) + { + CurrentEntity.MloInstance._Instance.numExitPortals = num; + ProjectItemChanged(); + } + } + } + + private void MiloFlagsTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEntity?.MloInstance == null) return; + uint flags = 0; + uint.TryParse(MiloFlagsTextBox.Text, out flags); + lock (ProjectForm.ProjectSyncRoot) + { + if (CurrentEntity.MloInstance._Instance.MLOInstflags != flags) + { + CurrentEntity.MloInstance._Instance.MLOInstflags = flags; + ProjectItemChanged(); + } + } + } + + private void MiloEntitySetsListBox_ItemCheck(object sender, ItemCheckEventArgs e) + { + if (populatingui) return; + var inst = CurrentEntity?.MloInstance; + var mloarch = CurrentEntity?.Archetype as MloArchetype; + if ((inst != null) && (mloarch != null)) + { + MloInstanceEntitySet mloInstanceEntitySet = inst.EntitySets[mloarch.entitySets[e.Index]._Data.name]; + mloInstanceEntitySet.Visible = e.NewValue == CheckState.Checked; + return; + } + e.NewValue = CheckState.Unchecked; + } } } diff --git a/Project/Panels/EditYtypArchetypePanel.Designer.cs b/Project/Panels/EditYtypArchetypePanel.Designer.cs index ff4a489..dd94437 100644 --- a/Project/Panels/EditYtypArchetypePanel.Designer.cs +++ b/Project/Panels/EditYtypArchetypePanel.Designer.cs @@ -64,14 +64,16 @@ this.label1 = new System.Windows.Forms.Label(); this.TabControl = new System.Windows.Forms.TabControl(); this.MloArchetypeTabPage = new System.Windows.Forms.TabPage(); - this.EntitySetsListBox = new System.Windows.Forms.CheckedListBox(); + this.TimeArchetypeTabPage = new System.Windows.Forms.TabPage(); + this.TimeFlagsTextBox = new System.Windows.Forms.TextBox(); + this.TimeFlagsCheckedListBox = new System.Windows.Forms.CheckedListBox(); this.label15 = new System.Windows.Forms.Label(); this.BaseArchetypeTabPage.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.SpecialAttributeNumericUpDown)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.HDTextureDistNumericUpDown)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.LodDistNumericUpDown)).BeginInit(); this.TabControl.SuspendLayout(); - this.MloArchetypeTabPage.SuspendLayout(); + this.TimeArchetypeTabPage.SuspendLayout(); this.SuspendLayout(); // // BaseArchetypeTabPage @@ -526,6 +528,7 @@ // this.TabControl.Controls.Add(this.BaseArchetypeTabPage); this.TabControl.Controls.Add(this.MloArchetypeTabPage); + this.TabControl.Controls.Add(this.TimeArchetypeTabPage); this.TabControl.Dock = System.Windows.Forms.DockStyle.Fill; this.TabControl.Location = new System.Drawing.Point(0, 0); this.TabControl.Name = "TabControl"; @@ -535,8 +538,6 @@ // // MloArchetypeTabPage // - this.MloArchetypeTabPage.Controls.Add(this.EntitySetsListBox); - this.MloArchetypeTabPage.Controls.Add(this.label15); this.MloArchetypeTabPage.Location = new System.Drawing.Point(4, 22); this.MloArchetypeTabPage.Name = "MloArchetypeTabPage"; this.MloArchetypeTabPage.Padding = new System.Windows.Forms.Padding(3); @@ -545,27 +546,79 @@ this.MloArchetypeTabPage.Text = "Mlo Archetype Def"; this.MloArchetypeTabPage.UseVisualStyleBackColor = true; // - // EntitySetsListBox + // TimeArchetypeTabPage // - this.EntitySetsListBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.EntitySetsListBox.CheckOnClick = true; - this.EntitySetsListBox.FormattingEnabled = true; - this.EntitySetsListBox.Location = new System.Drawing.Point(11, 42); - this.EntitySetsListBox.Name = "EntitySetsListBox"; - this.EntitySetsListBox.Size = new System.Drawing.Size(603, 319); - this.EntitySetsListBox.TabIndex = 2; - this.EntitySetsListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.EntitySetsListBox_ItemCheck); + this.TimeArchetypeTabPage.Controls.Add(this.TimeFlagsTextBox); + this.TimeArchetypeTabPage.Controls.Add(this.TimeFlagsCheckedListBox); + this.TimeArchetypeTabPage.Controls.Add(this.label15); + this.TimeArchetypeTabPage.Location = new System.Drawing.Point(4, 22); + this.TimeArchetypeTabPage.Name = "TimeArchetypeTabPage"; + this.TimeArchetypeTabPage.Size = new System.Drawing.Size(631, 479); + this.TimeArchetypeTabPage.TabIndex = 2; + this.TimeArchetypeTabPage.Text = "Time Archetype Def"; + this.TimeArchetypeTabPage.UseVisualStyleBackColor = true; + // + // TimeFlagsTextBox + // + this.TimeFlagsTextBox.Location = new System.Drawing.Point(72, 6); + this.TimeFlagsTextBox.Name = "TimeFlagsTextBox"; + this.TimeFlagsTextBox.Size = new System.Drawing.Size(147, 20); + this.TimeFlagsTextBox.TabIndex = 69; + this.TimeFlagsTextBox.TextChanged += new System.EventHandler(this.TimeFlagsTextBox_TextChanged); + // + // TimeFlagsCheckedListBox + // + this.TimeFlagsCheckedListBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.TimeFlagsCheckedListBox.CheckOnClick = true; + this.TimeFlagsCheckedListBox.FormattingEnabled = true; + this.TimeFlagsCheckedListBox.Items.AddRange(new object[] { + "1 - 00:00 - 01:00", + "2 - 01:00 - 02:00", + "4 - 02:00 - 03:00", + "8 - 03:00 - 04:00", + "16 - 04:00 - 05:00", + "32 - 05:00 - 06:00", + "64 - 06:00 - 07:00", + "128 - 07:00 - 08:00", + "256 - 08:00 - 09:00", + "512 - 09:00 - 10:00", + "1024 - 10:00 - 11:00", + "2048 - 11:00 - 12:00", + "4096 - 12:00 - 13:00", + "8192 - 13:00 - 14:00", + "16384 - 14:00 - 15:00", + "32768 - 15:00 - 16:00", + "65536 - 16:00 - 17:00", + "131072 - 17:00 - 18:00", + "262144 - 18:00 - 19:00", + "524288 - 19:00 - 20:00", + "1048576 - 20:00 - 21:00", + "2097152 - 21:00 - 22:00", + "4194304 - 22:00 - 23:00", + "8388608 - 23:00 - 00:00", + "16777216 - Unk25", + "33554432 - Unk26", + "67108864 - Unk27", + "134217728 - Unk28", + "268435456 - Unk29", + "536870912 - Unk30", + "1073741824 - Unk31", + "2147483648 - Unk32"}); + this.TimeFlagsCheckedListBox.Location = new System.Drawing.Point(18, 32); + this.TimeFlagsCheckedListBox.Name = "TimeFlagsCheckedListBox"; + this.TimeFlagsCheckedListBox.Size = new System.Drawing.Size(201, 424); + this.TimeFlagsCheckedListBox.TabIndex = 70; + this.TimeFlagsCheckedListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.TimeFlagsCheckedListBox_ItemCheck); // // label15 // this.label15.AutoSize = true; - this.label15.Location = new System.Drawing.Point(8, 26); + this.label15.Location = new System.Drawing.Point(5, 9); this.label15.Name = "label15"; - this.label15.Size = new System.Drawing.Size(57, 13); - this.label15.TabIndex = 1; - this.label15.Text = "EntitySets:"; + this.label15.Size = new System.Drawing.Size(61, 13); + this.label15.TabIndex = 68; + this.label15.Text = "Time Flags:"; // // EditYtypArchetypePanel // @@ -584,8 +637,8 @@ ((System.ComponentModel.ISupportInitialize)(this.HDTextureDistNumericUpDown)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.LodDistNumericUpDown)).EndInit(); this.TabControl.ResumeLayout(false); - this.MloArchetypeTabPage.ResumeLayout(false); - this.MloArchetypeTabPage.PerformLayout(); + this.TimeArchetypeTabPage.ResumeLayout(false); + this.TimeArchetypeTabPage.PerformLayout(); this.ResumeLayout(false); } @@ -627,7 +680,9 @@ private System.Windows.Forms.Label label1; private System.Windows.Forms.TabControl TabControl; private System.Windows.Forms.TabPage MloArchetypeTabPage; - private System.Windows.Forms.CheckedListBox EntitySetsListBox; + private System.Windows.Forms.TabPage TimeArchetypeTabPage; + private System.Windows.Forms.TextBox TimeFlagsTextBox; + private System.Windows.Forms.CheckedListBox TimeFlagsCheckedListBox; private System.Windows.Forms.Label label15; } } \ No newline at end of file diff --git a/Project/Panels/EditYtypArchetypePanel.cs b/Project/Panels/EditYtypArchetypePanel.cs index 79fc5a6..796a0d3 100644 --- a/Project/Panels/EditYtypArchetypePanel.cs +++ b/Project/Panels/EditYtypArchetypePanel.cs @@ -59,7 +59,6 @@ namespace CodeWalker.Project.Panels BSCenterTextBox.Text = FloatUtil.GetVector3String(CurrentArchetype._BaseArchetypeDef.bsCentre); BSRadiusTextBox.Text = CurrentArchetype._BaseArchetypeDef.bsRadius.ToString(CultureInfo.InvariantCulture); - EntitySetsListBox.Items.Clear(); if (CurrentArchetype is MloArchetype MloArchetype) { if (!TabControl.TabPages.Contains(MloArchetypeTabPage)) @@ -67,19 +66,25 @@ namespace CodeWalker.Project.Panels TabControl.TabPages.Add(MloArchetypeTabPage); } - MloInstanceData mloinstance = ProjectForm.TryGetMloInstance(MloArchetype); - if (mloinstance != null) - { - EntitySetsListBox.Enabled = true; - foreach (var sets in mloinstance.EntitySets) - { - MloInstanceEntitySet set = sets.Value; - EntitySetsListBox.Items.Add(set.EntitySet.ToString(), set.Visible); - } - } - else EntitySetsListBox.Enabled = false; + //MloInstanceData mloinstance = ProjectForm.TryGetMloInstance(MloArchetype); + //nothing to see here right now } else TabControl.TabPages.Remove(MloArchetypeTabPage); + + + + if (CurrentArchetype is TimeArchetype TimeArchetype) + { + if (!TabControl.TabPages.Contains(TimeArchetypeTabPage)) + { + TabControl.TabPages.Add(TimeArchetypeTabPage); + } + + TimeFlagsTextBox.Text = TimeArchetype.TimeFlags.ToString(); + + } + else TabControl.TabPages.Remove(TimeArchetypeTabPage); + } } @@ -335,19 +340,69 @@ namespace CodeWalker.Project.Panels ProjectForm.DeleteArchetype(); } - private void EntitySetsListBox_ItemCheck(object sender, ItemCheckEventArgs e) + private void TimeFlagsTextBox_TextChanged(object sender, EventArgs e) { - if (CurrentArchetype is MloArchetype MloArchetype) + if (populatingui) return; + if (CurrentArchetype == null) return; + if (CurrentArchetype is TimeArchetype TimeArchetype) { - var inst = ProjectForm.TryGetMloInstance(MloArchetype); - if (inst != null) + uint flags = 0; + uint.TryParse(TimeFlagsTextBox.Text, out flags); + populatingui = true; + for (int i = 0; i < TimeFlagsCheckedListBox.Items.Count; i++) { - MloInstanceEntitySet mloInstanceEntitySet = inst.EntitySets[MloArchetype.entitySets[e.Index]._Data.name]; - mloInstanceEntitySet.Visible = e.NewValue == CheckState.Checked; - return; + var c = ((flags & (1u << i)) > 0); + TimeFlagsCheckedListBox.SetItemCheckState(i, c ? CheckState.Checked : CheckState.Unchecked); + } + populatingui = false; + lock (ProjectForm.ProjectSyncRoot) + { + if (TimeArchetype.TimeFlags != flags) + { + TimeArchetype.SetTimeFlags(flags); + ProjectForm.SetYtypHasChanged(true); + } + } + } + + } + + private void TimeFlagsCheckedListBox_ItemCheck(object sender, ItemCheckEventArgs e) + { + if (populatingui) return; + if (CurrentArchetype == null) return; + if (CurrentArchetype is TimeArchetype TimeArchetype) + { + uint flags = 0; + for (int i = 0; i < TimeFlagsCheckedListBox.Items.Count; i++) + { + if (e.Index == i) + { + if (e.NewValue == CheckState.Checked) + { + flags += (uint)(1 << i); + } + } + else + { + if (TimeFlagsCheckedListBox.GetItemChecked(i)) + { + flags += (uint)(1 << i); + } + } + } + populatingui = true; + TimeFlagsTextBox.Text = flags.ToString(); + populatingui = false; + lock (ProjectForm.ProjectSyncRoot) + { + if (TimeArchetype.TimeFlags != flags) + { + TimeArchetype.SetTimeFlags(flags); + ProjectForm.SetYtypHasChanged(true); + } } } - e.NewValue = CheckState.Unchecked; } } } diff --git a/Project/ProjectForm.cs b/Project/ProjectForm.cs index 4d2a68e..5c18e50 100644 --- a/Project/ProjectForm.cs +++ b/Project/ProjectForm.cs @@ -4382,11 +4382,15 @@ namespace CodeWalker.Project for (int i = 0; i < CurrentProjectFile.YmapFiles.Count; i++) { var ymap = CurrentProjectFile.YmapFiles[i]; - // make sure we're not hiding ymaps that have been added by the end-user. - var isnew = ymap.RpfFileEntry.ShortNameHash == 0; if (ymap.Loaded) { - ymaps[isnew ? JenkHash.GenHash(ymap.Name) : ymap.RpfFileEntry.ShortNameHash] = ymap; + // make sure we're replacing ymaps that have been added by the end-user. + if (ymap.RpfFileEntry.ShortNameHash == 0) + { + ymap.RpfFileEntry.ShortNameHash = JenkHash.GenHash(ymap.RpfFileEntry.GetShortNameLower()); + } + + ymaps[ymap.RpfFileEntry.ShortNameHash] = ymap; } } diff --git a/WorldForm.cs b/WorldForm.cs index e4c265e..17e0438 100644 --- a/WorldForm.cs +++ b/WorldForm.cs @@ -3437,6 +3437,10 @@ namespace CodeWalker ms.EntityDef = entity; ms.Archetype = entity?.Archetype; ms.AABB = new BoundingBox(entity.BBMin, entity.BBMax); + if (entity.MloInstance != null) + { + ms.MloEntityDef = entity; + } SelectItem(ms); } } From 439d10e23aef1b5108857a3405f6afa1fcf94f52 Mon Sep 17 00:00:00 2001 From: dexy Date: Mon, 17 Dec 2018 00:07:20 +1100 Subject: [PATCH 042/158] Fixed editing lagginess when project window open, and fixed editing widget deadlock issue --- Project/ProjectForm.cs | 766 ++++++++++++++++++----------------------- WorldForm.cs | 2 +- 2 files changed, 339 insertions(+), 429 deletions(-) diff --git a/Project/ProjectForm.cs b/Project/ProjectForm.cs index 5c18e50..70755b8 100644 --- a/Project/ProjectForm.cs +++ b/Project/ProjectForm.cs @@ -4738,515 +4738,425 @@ namespace CodeWalker.Project catch { } } public void OnWorldSelectionModified(MapSelection sel, List items) - { - if (sel.MultipleSelection) - { - //TODO!! - } - else if (sel.EntityDef != null) - { - OnWorldEntityModified(sel.EntityDef); - } - else if (sel.CarGenerator != null) - { - OnWorldCarGenModified(sel.CarGenerator); - } - else if (sel.PathNode != null) - { - OnWorldPathNodeModified(sel.PathNode, sel.PathLink); - } - else if (sel.NavPoly != null) - { - OnWorldNavPolyModified(sel.NavPoly); - } - else if (sel.NavPoint != null) - { - OnWorldNavPointModified(sel.NavPoint); - } - else if (sel.NavPortal != null) - { - OnWorldNavPortalModified(sel.NavPortal); - } - else if (sel.TrainTrackNode != null) - { - OnWorldTrainNodeModified(sel.TrainTrackNode); - } - else if (sel.ScenarioNode != null) - { - OnWorldScenarioNodeModified(sel.ScenarioNode); - } - else if (sel.Audio != null) - { - OnWorldAudioPlacementModified(sel.Audio); - } - } - private void OnWorldEntityModified(YmapEntityDef ent) { try { if (InvokeRequired) { - BeginInvoke(new Action(() => { OnWorldEntityModified(ent); })); + BeginInvoke(new Action(() => { OnWorldSelectionModified(sel, items); })); } else { - if ((ent.Ymap == null) && (ent.MloParent == null)) + if (sel.MultipleSelection) { - return;//TODO: properly handle interior entities! + //TODO!! } - - if (CurrentProjectFile == null) + else if (sel.EntityDef != null) { - NewProject(); + OnWorldEntityModified(sel.EntityDef); } - - if (ent.MloParent == null && ent.Ymap != null) + else if (sel.CarGenerator != null) { - if (!YmapExistsInProject(ent.Ymap)) + OnWorldCarGenModified(sel.CarGenerator); + } + else if (sel.PathNode != null) + { + OnWorldPathNodeModified(sel.PathNode, sel.PathLink); + } + else if (sel.NavPoly != null) + { + OnWorldNavPolyModified(sel.NavPoly); + } + else if (sel.NavPoint != null) + { + OnWorldNavPointModified(sel.NavPoint); + } + else if (sel.NavPortal != null) + { + OnWorldNavPortalModified(sel.NavPortal); + } + else if (sel.TrainTrackNode != null) + { + OnWorldTrainNodeModified(sel.TrainTrackNode); + } + else if (sel.ScenarioNode != null) + { + OnWorldScenarioNodeModified(sel.ScenarioNode); + } + else if (sel.Audio != null) + { + OnWorldAudioPlacementModified(sel.Audio); + } + } + } + catch { } + } + private void OnWorldEntityModified(YmapEntityDef ent) + { + if ((ent.Ymap == null) && (ent.MloParent == null)) + { + return;//TODO: properly handle interior entities! + } + + if (CurrentProjectFile == null) + { + NewProject(); + } + + if (ent.MloParent == null && ent.Ymap != null) + { + if (!YmapExistsInProject(ent.Ymap)) + { + ent.Ymap.HasChanged = true; + AddYmapToProject(ent.Ymap); + ProjectExplorer?.TrySelectEntityTreeNode(ent); + } + + if (ent != CurrentEntity) + { + CurrentEntity = ent; + ProjectExplorer?.TrySelectEntityTreeNode(ent); + } + + if (ent == CurrentEntity) + { + ShowEditYmapEntityPanel(false); + + if (ent.Ymap != null) + { + SetYmapHasChanged(true); + } + } + } + else if (ent.MloParent != null && ent.Ymap == null) + { + MloInstanceData mloInstance = ent.MloParent?.MloInstance; + if (mloInstance != null) + { + var mcEntity = mloInstance.TryGetArchetypeEntity(ent); + if (mcEntity != null) + { + if (!YtypExistsInProject(ent.MloParent.Archetype.Ytyp)) { - ent.Ymap.HasChanged = true; - AddYmapToProject(ent.Ymap); - ProjectExplorer?.TrySelectEntityTreeNode(ent); + ent.MloParent.Archetype.Ytyp.HasChanged = true; + AddYtypToProject(ent.MloParent.Archetype.Ytyp); + ProjectExplorer?.TrySelectMloEntityTreeNode(mcEntity); } if (ent != CurrentEntity) { CurrentEntity = ent; - ProjectExplorer?.TrySelectEntityTreeNode(ent); - } - - if (ent == CurrentEntity) - { - ShowEditYmapEntityPanel(false); - - if (ent.Ymap != null) - { - SetYmapHasChanged(true); - } - } - } - else if (ent.MloParent != null && ent.Ymap == null) - { - MloInstanceData mloInstance = ent.MloParent?.MloInstance; - if (mloInstance != null) - { - var mcEntity = mloInstance.TryGetArchetypeEntity(ent); - if (mcEntity != null) - { - if (!YtypExistsInProject(ent.MloParent.Archetype.Ytyp)) - { - ent.MloParent.Archetype.Ytyp.HasChanged = true; - AddYtypToProject(ent.MloParent.Archetype.Ytyp); - ProjectExplorer?.TrySelectMloEntityTreeNode(mcEntity); - } - - if (ent != CurrentEntity) - { - CurrentEntity = ent; - ProjectExplorer?.TrySelectMloEntityTreeNode(mcEntity); - } - } - } - - if (ent == CurrentEntity) - { - ShowEditYmapEntityPanel(false); - - if (ent.MloParent.Archetype.Ytyp != null) - { - SetYtypHasChanged(true); - } + ProjectExplorer?.TrySelectMloEntityTreeNode(mcEntity); } } } + + if (ent == CurrentEntity) + { + ShowEditYmapEntityPanel(false); + + if (ent.MloParent.Archetype.Ytyp != null) + { + SetYtypHasChanged(true); + } + } } - catch { } } private void OnWorldCarGenModified(YmapCarGen cargen) { - try + if (cargen?.Ymap == null) return; + + if (CurrentProjectFile == null) { - if (InvokeRequired) + NewProject(); + } + + if (!YmapExistsInProject(cargen.Ymap)) + { + cargen.Ymap.HasChanged = true; + AddYmapToProject(cargen.Ymap); + ProjectExplorer?.TrySelectCarGenTreeNode(cargen); + } + + if (cargen != CurrentCarGen) + { + CurrentCarGen = cargen; + ProjectExplorer?.TrySelectCarGenTreeNode(cargen); + } + + if (cargen == CurrentCarGen) + { + ShowEditYmapCarGenPanel(false); + + ProjectExplorer?.UpdateCarGenTreeNode(cargen); + + if (cargen.Ymap != null) { - BeginInvoke(new Action(() => { OnWorldCarGenModified(cargen); })); - } - else - { - if (cargen?.Ymap == null) return; - - if (CurrentProjectFile == null) - { - NewProject(); - } - - if (!YmapExistsInProject(cargen.Ymap)) - { - cargen.Ymap.HasChanged = true; - AddYmapToProject(cargen.Ymap); - ProjectExplorer?.TrySelectCarGenTreeNode(cargen); - } - - if (cargen != CurrentCarGen) - { - CurrentCarGen = cargen; - ProjectExplorer?.TrySelectCarGenTreeNode(cargen); - } - - if (cargen == CurrentCarGen) - { - ShowEditYmapCarGenPanel(false); - - ProjectExplorer?.UpdateCarGenTreeNode(cargen); - - if (cargen.Ymap != null) - { - SetYmapHasChanged(true); - } - } - + SetYmapHasChanged(true); } } - catch { } + } private void OnWorldPathNodeModified(YndNode node, YndLink link) { - try + if (node?.Ynd == null) return; + + if (CurrentProjectFile == null) { - if (InvokeRequired) + NewProject(); + } + + if (!YndExistsInProject(node.Ynd)) + { + node.Ynd.HasChanged = true; + AddYndToProject(node.Ynd); + ProjectExplorer?.TrySelectPathNodeTreeNode(node); + } + + if (node != CurrentPathNode) + { + CurrentPathNode = node; + ProjectExplorer?.TrySelectPathNodeTreeNode(node); + } + + //////if (link != CurrentPathLink) + //////{ + ////// CurrentPathLink = link; + ////// ShowEditYndLinkPanel(false); + //////} + + if (node == CurrentPathNode) + { + //////ShowEditYndPanel(false); + ShowEditYndNodePanel(false); + + //////UpdatePathNodeTreeNode(node); + + if (node.Ynd != null) { - BeginInvoke(new Action(() => { OnWorldPathNodeModified(node, link); })); - } - else - { - if (node?.Ynd == null) return; - - if (CurrentProjectFile == null) - { - NewProject(); - } - - if (!YndExistsInProject(node.Ynd)) - { - node.Ynd.HasChanged = true; - AddYndToProject(node.Ynd); - ProjectExplorer?.TrySelectPathNodeTreeNode(node); - } - - if (node != CurrentPathNode) - { - CurrentPathNode = node; - ProjectExplorer?.TrySelectPathNodeTreeNode(node); - } - - //////if (link != CurrentPathLink) - //////{ - ////// CurrentPathLink = link; - ////// ShowEditYndLinkPanel(false); - //////} - - if (node == CurrentPathNode) - { - //////ShowEditYndPanel(false); - ShowEditYndNodePanel(false); - - //////UpdatePathNodeTreeNode(node); - - if (node.Ynd != null) - { - SetYndHasChanged(true); - } - } - + SetYndHasChanged(true); } } - catch { } } private void OnWorldNavPolyModified(YnvPoly poly) { - try + if (poly?.Ynv == null) return; + + if (CurrentProjectFile == null) { - if (InvokeRequired) + NewProject(); + } + + if (!YnvExistsInProject(poly.Ynv)) + { + poly.Ynv.HasChanged = true; + AddYnvToProject(poly.Ynv); + ProjectExplorer?.TrySelectNavPolyTreeNode(poly); + } + + if (poly != CurrentNavPoly) + { + CurrentNavPoly = poly; + ProjectExplorer?.TrySelectNavPolyTreeNode(poly); + } + + if (poly == CurrentNavPoly) + { + ShowEditYnvPolyPanel(false); + + //////UpdateNavPolyTreeNode(poly); + + if (poly.Ynv != null) { - BeginInvoke(new Action(() => { OnWorldNavPolyModified(poly); })); - } - else - { - if (poly?.Ynv == null) return; - - if (CurrentProjectFile == null) - { - NewProject(); - } - - if (!YnvExistsInProject(poly.Ynv)) - { - poly.Ynv.HasChanged = true; - AddYnvToProject(poly.Ynv); - ProjectExplorer?.TrySelectNavPolyTreeNode(poly); - } - - if (poly != CurrentNavPoly) - { - CurrentNavPoly = poly; - ProjectExplorer?.TrySelectNavPolyTreeNode(poly); - } - - if (poly == CurrentNavPoly) - { - ShowEditYnvPolyPanel(false); - - //////UpdateNavPolyTreeNode(poly); - - if (poly.Ynv != null) - { - SetYnvHasChanged(true); - } - } - + SetYnvHasChanged(true); } } - catch { } + } private void OnWorldNavPointModified(YnvPoint point) { - try + if (point?.Ynv == null) return; + + if (CurrentProjectFile == null) { - if (InvokeRequired) + NewProject(); + } + + if (!YnvExistsInProject(point.Ynv)) + { + point.Ynv.HasChanged = true; + AddYnvToProject(point.Ynv); + ProjectExplorer?.TrySelectNavPointTreeNode(point); + } + + if (point != CurrentNavPoint) + { + CurrentNavPoint = point; + ProjectExplorer?.TrySelectNavPointTreeNode(point); + } + + if (point == CurrentNavPoint) + { + ShowEditYnvPointPanel(false); + + //////UpdateNavPointTreeNode(poly); + + if (point.Ynv != null) { - BeginInvoke(new Action(() => { OnWorldNavPointModified(point); })); - } - else - { - if (point?.Ynv == null) return; - - if (CurrentProjectFile == null) - { - NewProject(); - } - - if (!YnvExistsInProject(point.Ynv)) - { - point.Ynv.HasChanged = true; - AddYnvToProject(point.Ynv); - ProjectExplorer?.TrySelectNavPointTreeNode(point); - } - - if (point != CurrentNavPoint) - { - CurrentNavPoint = point; - ProjectExplorer?.TrySelectNavPointTreeNode(point); - } - - if (point == CurrentNavPoint) - { - ShowEditYnvPointPanel(false); - - //////UpdateNavPointTreeNode(poly); - - if (point.Ynv != null) - { - SetYnvHasChanged(true); - } - } - + SetYnvHasChanged(true); } } - catch { } + } private void OnWorldNavPortalModified(YnvPortal portal) { - try + if (portal?.Ynv == null) return; + + if (CurrentProjectFile == null) { - if (InvokeRequired) + NewProject(); + } + + if (!YnvExistsInProject(portal.Ynv)) + { + portal.Ynv.HasChanged = true; + AddYnvToProject(portal.Ynv); + ProjectExplorer?.TrySelectNavPortalTreeNode(portal); + } + + if (portal != CurrentNavPortal) + { + CurrentNavPortal = portal; + ProjectExplorer?.TrySelectNavPortalTreeNode(portal); + } + + if (portal == CurrentNavPortal) + { + ShowEditYnvPortalPanel(false); + + //////UpdateNavPortalTreeNode(poly); + + if (portal.Ynv != null) { - BeginInvoke(new Action(() => { OnWorldNavPortalModified(portal); })); - } - else - { - if (portal?.Ynv == null) return; - - if (CurrentProjectFile == null) - { - NewProject(); - } - - if (!YnvExistsInProject(portal.Ynv)) - { - portal.Ynv.HasChanged = true; - AddYnvToProject(portal.Ynv); - ProjectExplorer?.TrySelectNavPortalTreeNode(portal); - } - - if (portal != CurrentNavPortal) - { - CurrentNavPortal = portal; - ProjectExplorer?.TrySelectNavPortalTreeNode(portal); - } - - if (portal == CurrentNavPortal) - { - ShowEditYnvPortalPanel(false); - - //////UpdateNavPortalTreeNode(poly); - - if (portal.Ynv != null) - { - SetYnvHasChanged(true); - } - } - + SetYnvHasChanged(true); } } - catch { } + } private void OnWorldTrainNodeModified(TrainTrackNode node) { - try + if (node?.Track == null) return; + + if (CurrentProjectFile == null) { - if (InvokeRequired) + NewProject(); + } + + if (!TrainTrackExistsInProject(node.Track)) + { + node.Track.HasChanged = true; + AddTrainTrackToProject(node.Track); + ProjectExplorer?.TrySelectTrainNodeTreeNode(node); + } + + if (node != CurrentTrainNode) + { + CurrentTrainNode = node; + ProjectExplorer?.TrySelectTrainNodeTreeNode(node); + } + + if (node == CurrentTrainNode) + { + ShowEditTrainNodePanel(false); + + if (node.Track != null) { - BeginInvoke(new Action(() => { OnWorldTrainNodeModified(node); })); - } - else - { - if (node?.Track == null) return; - - if (CurrentProjectFile == null) - { - NewProject(); - } - - if (!TrainTrackExistsInProject(node.Track)) - { - node.Track.HasChanged = true; - AddTrainTrackToProject(node.Track); - ProjectExplorer?.TrySelectTrainNodeTreeNode(node); - } - - if (node != CurrentTrainNode) - { - CurrentTrainNode = node; - ProjectExplorer?.TrySelectTrainNodeTreeNode(node); - } - - if (node == CurrentTrainNode) - { - ShowEditTrainNodePanel(false); - - if (node.Track != null) - { - SetTrainTrackHasChanged(true); - } - } + SetTrainTrackHasChanged(true); } } - catch { } } private void OnWorldScenarioNodeModified(ScenarioNode node) { - try + if (node?.Ymt == null) return; + + if (CurrentProjectFile == null) { - if (InvokeRequired) + NewProject(); + } + + if (!ScenarioExistsInProject(node.Ymt)) + { + node.Ymt.HasChanged = true; + AddScenarioToProject(node.Ymt); + ProjectExplorer?.TrySelectScenarioNodeTreeNode(node); + } + + if (node != CurrentScenarioNode) + { + CurrentScenarioNode = node; + ProjectExplorer?.TrySelectScenarioNodeTreeNode(node); + } + + if (node == CurrentScenarioNode) + { + //ShowEditScenarioPanel(false); + ShowEditScenarioNodePanel(false); + + if (node?.Ymt != null) { - BeginInvoke(new Action(() => { OnWorldScenarioNodeModified(node); })); - } - else - { - if (node?.Ymt == null) return; - - if (CurrentProjectFile == null) - { - NewProject(); - } - - if (!ScenarioExistsInProject(node.Ymt)) - { - node.Ymt.HasChanged = true; - AddScenarioToProject(node.Ymt); - ProjectExplorer?.TrySelectScenarioNodeTreeNode(node); - } - - if (node != CurrentScenarioNode) - { - CurrentScenarioNode = node; - ProjectExplorer?.TrySelectScenarioNodeTreeNode(node); - } - - if (node == CurrentScenarioNode) - { - //ShowEditScenarioPanel(false); - ShowEditScenarioNodePanel(false); - - if (node?.Ymt != null) - { - SetScenarioHasChanged(true); - } - } + SetScenarioHasChanged(true); } } - catch { } } private void OnWorldAudioPlacementModified(AudioPlacement audio) { - try + if (audio?.RelFile == null) return; + + if (CurrentProjectFile == null) { - if (InvokeRequired) + NewProject(); + } + + if (!AudioFileExistsInProject(audio.RelFile)) + { + audio.RelFile.HasChanged = true; + AddAudioFileToProject(audio.RelFile); + if (audio.AudioZone != null) { - BeginInvoke(new Action(() => { OnWorldAudioPlacementModified(audio); })); + ProjectExplorer?.TrySelectAudioZoneTreeNode(audio); } - else + if (audio.AudioEmitter != null) { - if (audio?.RelFile == null) return; - - if (CurrentProjectFile == null) - { - NewProject(); - } - - if (!AudioFileExistsInProject(audio.RelFile)) - { - audio.RelFile.HasChanged = true; - AddAudioFileToProject(audio.RelFile); - if (audio.AudioZone != null) - { - ProjectExplorer?.TrySelectAudioZoneTreeNode(audio); - } - if (audio.AudioEmitter != null) - { - ProjectExplorer?.TrySelectAudioEmitterTreeNode(audio); - } - } - - if ((audio.AudioZone != null) && (audio != CurrentAudioZone)) - { - CurrentAudioZone = audio; - ProjectExplorer?.TrySelectAudioZoneTreeNode(audio); - } - if ((audio.AudioEmitter != null) && (audio != CurrentAudioEmitter)) - { - CurrentAudioEmitter = audio; - ProjectExplorer?.TrySelectAudioEmitterTreeNode(audio); - } - if (audio == CurrentAudioZone) - { - ShowEditAudioZonePanel(false); - if (audio.RelFile != null) - { - SetAudioFileHasChanged(true); - } - } - else if (audio == CurrentAudioEmitter) - { - ShowEditAudioEmitterPanel(false); - if (audio.RelFile != null) - { - SetAudioFileHasChanged(true); - } - } - + ProjectExplorer?.TrySelectAudioEmitterTreeNode(audio); + } + } + + if ((audio.AudioZone != null) && (audio != CurrentAudioZone)) + { + CurrentAudioZone = audio; + ProjectExplorer?.TrySelectAudioZoneTreeNode(audio); + } + if ((audio.AudioEmitter != null) && (audio != CurrentAudioEmitter)) + { + CurrentAudioEmitter = audio; + ProjectExplorer?.TrySelectAudioEmitterTreeNode(audio); + } + if (audio == CurrentAudioZone) + { + ShowEditAudioZonePanel(false); + if (audio.RelFile != null) + { + SetAudioFileHasChanged(true); + } + } + else if (audio == CurrentAudioEmitter) + { + ShowEditAudioEmitterPanel(false); + if (audio.RelFile != null) + { + SetAudioFileHasChanged(true); } } - catch { } } diff --git a/WorldForm.cs b/WorldForm.cs index 17e0438..386f236 100644 --- a/WorldForm.cs +++ b/WorldForm.cs @@ -3375,7 +3375,7 @@ namespace CodeWalker if (mhit.HasValue) { //make sure the path link gets changed (sub-selection!) - lock (Renderer.RenderSyncRoot) + //lock (Renderer.RenderSyncRoot) { SelectedItem.PathLink = mhitv.PathLink; SelectedItem.ScenarioEdge = mhitv.ScenarioEdge; From 34a29a5faa12c8f4fa489b36b66e2f8725acb50f Mon Sep 17 00:00:00 2001 From: dexy Date: Mon, 17 Dec 2018 01:26:23 +1100 Subject: [PATCH 043/158] Added Edit Archetype button on Entity Editor, improved Archetype editing hash parsing --- .../Panels/EditYmapEntityPanel.Designer.cs | 118 ++++++++++-------- Project/Panels/EditYmapEntityPanel.cs | 9 ++ .../Panels/EditYtypArchetypePanel.Designer.cs | 4 +- Project/Panels/EditYtypArchetypePanel.cs | 35 ++++-- Project/ProjectForm.cs | 72 ++++++----- 5 files changed, 146 insertions(+), 92 deletions(-) diff --git a/Project/Panels/EditYmapEntityPanel.Designer.cs b/Project/Panels/EditYmapEntityPanel.Designer.cs index 92c60c1..2243697 100644 --- a/Project/Panels/EditYmapEntityPanel.Designer.cs +++ b/Project/Panels/EditYmapEntityPanel.Designer.cs @@ -81,16 +81,17 @@ this.label94 = new System.Windows.Forms.Label(); this.EntityPivotRotationTextBox = new System.Windows.Forms.TextBox(); this.EntityMiloTabPage = new System.Windows.Forms.TabPage(); - this.MiloEntitySetsListBox = new System.Windows.Forms.CheckedListBox(); - this.label2 = new System.Windows.Forms.Label(); + this.MiloFlagsTextBox = new System.Windows.Forms.TextBox(); + this.label6 = new System.Windows.Forms.Label(); + this.MiloNumExitPortalsTextBox = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); this.label3 = new System.Windows.Forms.Label(); this.MiloGroupIDTextBox = new System.Windows.Forms.TextBox(); this.MiloFloorIDTextBox = new System.Windows.Forms.TextBox(); this.label4 = new System.Windows.Forms.Label(); - this.MiloNumExitPortalsTextBox = new System.Windows.Forms.TextBox(); - this.label5 = new System.Windows.Forms.Label(); - this.MiloFlagsTextBox = new System.Windows.Forms.TextBox(); - this.label6 = new System.Windows.Forms.Label(); + this.MiloEntitySetsListBox = new System.Windows.Forms.CheckedListBox(); + this.label2 = new System.Windows.Forms.Label(); + this.EntityEditArchetypeButton = new System.Windows.Forms.Button(); this.EntityTabControl.SuspendLayout(); this.EntityGeneralTabPage.SuspendLayout(); this.EntityLodTabPage.SuspendLayout(); @@ -117,6 +118,7 @@ // // EntityGeneralTabPage // + this.EntityGeneralTabPage.Controls.Add(this.EntityEditArchetypeButton); this.EntityGeneralTabPage.Controls.Add(this.EntityFlagsCheckedListBox); this.EntityGeneralTabPage.Controls.Add(this.label13); this.EntityGeneralTabPage.Controls.Add(this.label28); @@ -701,27 +703,39 @@ this.EntityMiloTabPage.Text = "MLO Instance"; this.EntityMiloTabPage.UseVisualStyleBackColor = true; // - // MiloEntitySetsListBox + // MiloFlagsTextBox // - this.MiloEntitySetsListBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.MiloEntitySetsListBox.CheckOnClick = true; - this.MiloEntitySetsListBox.FormattingEnabled = true; - this.MiloEntitySetsListBox.Location = new System.Drawing.Point(103, 128); - this.MiloEntitySetsListBox.Name = "MiloEntitySetsListBox"; - this.MiloEntitySetsListBox.Size = new System.Drawing.Size(434, 319); - this.MiloEntitySetsListBox.TabIndex = 4; - this.MiloEntitySetsListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.MiloEntitySetsListBox_ItemCheck); + this.MiloFlagsTextBox.Location = new System.Drawing.Point(101, 93); + this.MiloFlagsTextBox.Name = "MiloFlagsTextBox"; + this.MiloFlagsTextBox.Size = new System.Drawing.Size(154, 20); + this.MiloFlagsTextBox.TabIndex = 43; + this.MiloFlagsTextBox.TextChanged += new System.EventHandler(this.MiloFlagsTextBox_TextChanged); // - // label2 + // label6 // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(3, 129); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(91, 13); - this.label2.TabIndex = 3; - this.label2.Text = "DefaultEntitySets:"; + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(5, 96); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(75, 13); + this.label6.TabIndex = 42; + this.label6.Text = "MLOInstFlags:"; + // + // MiloNumExitPortalsTextBox + // + this.MiloNumExitPortalsTextBox.Location = new System.Drawing.Point(101, 67); + this.MiloNumExitPortalsTextBox.Name = "MiloNumExitPortalsTextBox"; + this.MiloNumExitPortalsTextBox.Size = new System.Drawing.Size(154, 20); + this.MiloNumExitPortalsTextBox.TabIndex = 41; + this.MiloNumExitPortalsTextBox.TextChanged += new System.EventHandler(this.MiloNumExitPortalsTextBox_TextChanged); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(5, 70); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(81, 13); + this.label5.TabIndex = 40; + this.label5.Text = "NumExitPortals:"; // // label3 // @@ -757,39 +771,38 @@ this.label4.TabIndex = 38; this.label4.Text = "FloorID:"; // - // MiloNumExitPortalsTextBox + // MiloEntitySetsListBox // - this.MiloNumExitPortalsTextBox.Location = new System.Drawing.Point(101, 67); - this.MiloNumExitPortalsTextBox.Name = "MiloNumExitPortalsTextBox"; - this.MiloNumExitPortalsTextBox.Size = new System.Drawing.Size(154, 20); - this.MiloNumExitPortalsTextBox.TabIndex = 41; - this.MiloNumExitPortalsTextBox.TextChanged += new System.EventHandler(this.MiloNumExitPortalsTextBox_TextChanged); + this.MiloEntitySetsListBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.MiloEntitySetsListBox.CheckOnClick = true; + this.MiloEntitySetsListBox.FormattingEnabled = true; + this.MiloEntitySetsListBox.Location = new System.Drawing.Point(103, 128); + this.MiloEntitySetsListBox.Name = "MiloEntitySetsListBox"; + this.MiloEntitySetsListBox.Size = new System.Drawing.Size(434, 319); + this.MiloEntitySetsListBox.TabIndex = 4; + this.MiloEntitySetsListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.MiloEntitySetsListBox_ItemCheck); // - // label5 + // label2 // - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(5, 70); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(81, 13); - this.label5.TabIndex = 40; - this.label5.Text = "NumExitPortals:"; + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(3, 129); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(91, 13); + this.label2.TabIndex = 3; + this.label2.Text = "DefaultEntitySets:"; // - // MiloFlagsTextBox + // EntityEditArchetypeButton // - this.MiloFlagsTextBox.Location = new System.Drawing.Point(101, 93); - this.MiloFlagsTextBox.Name = "MiloFlagsTextBox"; - this.MiloFlagsTextBox.Size = new System.Drawing.Size(154, 20); - this.MiloFlagsTextBox.TabIndex = 43; - this.MiloFlagsTextBox.TextChanged += new System.EventHandler(this.MiloFlagsTextBox_TextChanged); - // - // label6 - // - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(5, 96); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(75, 13); - this.label6.TabIndex = 42; - this.label6.Text = "MLOInstFlags:"; + this.EntityEditArchetypeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.EntityEditArchetypeButton.Location = new System.Drawing.Point(454, 59); + this.EntityEditArchetypeButton.Name = "EntityEditArchetypeButton"; + this.EntityEditArchetypeButton.Size = new System.Drawing.Size(95, 23); + this.EntityEditArchetypeButton.TabIndex = 35; + this.EntityEditArchetypeButton.Text = "Edit Archetype..."; + this.EntityEditArchetypeButton.UseVisualStyleBackColor = true; + this.EntityEditArchetypeButton.Click += new System.EventHandler(this.EntityEditArchetypeButton_Click); // // EditYmapEntityPanel // @@ -879,5 +892,6 @@ private System.Windows.Forms.Label label5; private System.Windows.Forms.TextBox MiloFlagsTextBox; private System.Windows.Forms.Label label6; + private System.Windows.Forms.Button EntityEditArchetypeButton; } } \ No newline at end of file diff --git a/Project/Panels/EditYmapEntityPanel.cs b/Project/Panels/EditYmapEntityPanel.cs index cb96874..4579896 100644 --- a/Project/Panels/EditYmapEntityPanel.cs +++ b/Project/Panels/EditYmapEntityPanel.cs @@ -801,5 +801,14 @@ namespace CodeWalker.Project.Panels } e.NewValue = CheckState.Unchecked; } + + private void EntityEditArchetypeButton_Click(object sender, EventArgs e) + { + if (ProjectForm != null) + { + ProjectForm.SetCurrentArchetype(CurrentEntity?.Archetype); + ProjectForm.ShowEditArchetypePanel(true); + } + } } } diff --git a/Project/Panels/EditYtypArchetypePanel.Designer.cs b/Project/Panels/EditYtypArchetypePanel.Designer.cs index dd94437..56ae0a2 100644 --- a/Project/Panels/EditYtypArchetypePanel.Designer.cs +++ b/Project/Panels/EditYtypArchetypePanel.Designer.cs @@ -338,9 +338,9 @@ "536870912 - Unk30", "1073741824 - Unk31", "2147483648 - Unk32"}); - this.EntityFlagsCheckedListBox.Location = new System.Drawing.Point(422, 38); + this.EntityFlagsCheckedListBox.Location = new System.Drawing.Point(441, 38); this.EntityFlagsCheckedListBox.Name = "EntityFlagsCheckedListBox"; - this.EntityFlagsCheckedListBox.Size = new System.Drawing.Size(201, 274); + this.EntityFlagsCheckedListBox.Size = new System.Drawing.Size(182, 274); this.EntityFlagsCheckedListBox.TabIndex = 67; this.EntityFlagsCheckedListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.ArchetypeFlagsCheckedListBox_ItemCheck); // diff --git a/Project/Panels/EditYtypArchetypePanel.cs b/Project/Panels/EditYtypArchetypePanel.cs index 796a0d3..d7e10b9 100644 --- a/Project/Panels/EditYtypArchetypePanel.cs +++ b/Project/Panels/EditYtypArchetypePanel.cs @@ -162,7 +162,11 @@ namespace CodeWalker.Project.Panels return; } - var hash = JenkHash.GenHash(TextureDictTextBox.Text); + var hash = 0u; + if (!uint.TryParse(TextureDictTextBox.Text, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(TextureDictTextBox.Text); + } if (CurrentArchetype._BaseArchetypeDef.textureDictionary != hash) { @@ -173,10 +177,10 @@ namespace CodeWalker.Project.Panels ProjectForm.SetYtypHasChanged(true); return; } - TextureDictHashLabel.Text = "Hash: " + hash.ToString(); CurrentArchetype._BaseArchetypeDef.textureDictionary = hash; ProjectForm.SetYtypHasChanged(true); } + TextureDictHashLabel.Text = "Hash: " + hash.ToString(); } } @@ -197,7 +201,11 @@ namespace CodeWalker.Project.Panels return; } - var hash = JenkHash.GenHash(PhysicsDictionaryTextBox.Text); + var hash = 0u; + if (!uint.TryParse(PhysicsDictionaryTextBox.Text, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(PhysicsDictionaryTextBox.Text); + } if (CurrentArchetype._BaseArchetypeDef.physicsDictionary != hash) { @@ -208,17 +216,20 @@ namespace CodeWalker.Project.Panels ProjectForm.SetYtypHasChanged(true); return; } - PhysicsDictHashLabel.Text = "Hash: " + hash.ToString(); - CurrentArchetype._BaseArchetypeDef.physicsDictionary = hash; ProjectForm.SetYtypHasChanged(true); } + PhysicsDictHashLabel.Text = "Hash: " + hash.ToString(); } } private void ArchetypeNameTextBox_TextChanged(object sender, EventArgs e) { - var hash = JenkHash.GenHash(ArchetypeNameTextBox.Text); + var hash = 0u; + if (!uint.TryParse(ArchetypeNameTextBox.Text, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(ArchetypeNameTextBox.Text); + } if (CurrentArchetype._BaseArchetypeDef.name != hash) { @@ -235,7 +246,11 @@ namespace CodeWalker.Project.Panels private void AssetNameTextBox_TextChanged(object sender, EventArgs e) { - var hash = JenkHash.GenHash(AssetNameTextBox.Text); + var hash = 0u; + if (!uint.TryParse(AssetNameTextBox.Text, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(AssetNameTextBox.Text); + } if (CurrentArchetype._BaseArchetypeDef.assetName != hash) { @@ -246,7 +261,11 @@ namespace CodeWalker.Project.Panels private void ClipDictionaryTextBox_TextChanged(object sender, EventArgs e) { - var hash = JenkHash.GenHash(ClipDictionaryTextBox.Text); + var hash = 0u; + if (!uint.TryParse(ClipDictionaryTextBox.Text, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(ClipDictionaryTextBox.Text); + } if (CurrentArchetype._BaseArchetypeDef.clipDictionary != hash) { diff --git a/Project/ProjectForm.cs b/Project/ProjectForm.cs index 70755b8..d10334b 100644 --- a/Project/ProjectForm.cs +++ b/Project/ProjectForm.cs @@ -231,12 +231,12 @@ namespace CodeWalker.Project } return null; } - private void ShowDefaultPanels() + public void ShowDefaultPanels() { ShowProjectExplorer(); ShowWelcomePanel(); } - private void ShowProjectExplorer() + public void ShowProjectExplorer() { if ((ProjectExplorer == null) || (ProjectExplorer.IsDisposed) || (ProjectExplorer.Disposing)) { @@ -251,11 +251,11 @@ namespace CodeWalker.Project ProjectExplorer.Show(); } } - private void ShowWelcomePanel() + public void ShowWelcomePanel() { ShowPreviewPanel(() => { return new WelcomePanel(); }); } - private void ShowPreviewPanel(Func createFunc, Action updateAction = null) where T : ProjectPanel + public void ShowPreviewPanel(Func createFunc, Action updateAction = null) where T : ProjectPanel { if ((PreviewPanel != null) && (PreviewPanel is T)) { @@ -276,11 +276,15 @@ namespace CodeWalker.Project PreviewPanel = panel; } } - private void ShowPanel(bool promote, Func createFunc, Action updateAction, Func findFunc) where T : ProjectPanel + public void ShowPanel(bool promote, Func createFunc, Action updateAction, Func findFunc) where T : ProjectPanel { T found = FindPanel(findFunc); if ((found != null) && (found != PreviewPanel)) { + if (found.IsHidden) + { + found.Show(); + } found.BringToFront();//.Show(); updateAction?.Invoke(found); } @@ -306,159 +310,159 @@ namespace CodeWalker.Project } } } - private void ShowEditProjectPanel(bool promote) + public void ShowEditProjectPanel(bool promote) { ShowPanel(promote, () => { return new EditProjectPanel(this); }, //createFunc (panel) => { panel.SetProject(CurrentProjectFile); }, //updateFunc (panel) => { return true; }); //findFunc } - private void ShowEditProjectManifestPanel(bool promote) + public void ShowEditProjectManifestPanel(bool promote) { ShowPanel(promote, () => { return new EditProjectManifestPanel(this); }, //createFunc (panel) => { panel.SetProject(CurrentProjectFile); }, //updateFunc (panel) => { return true; }); //findFunc } - private void ShowGenerateNavMeshPanel(bool promote) + public void ShowGenerateNavMeshPanel(bool promote) { ShowPanel(promote, () => { return new GenerateNavMeshPanel(this); }, //createFunc (panel) => { panel.SetProject(CurrentProjectFile); }, //updateFunc (panel) => { return true; }); //findFunc } - private void ShowEditYmapPanel(bool promote) + public void ShowEditYmapPanel(bool promote) { ShowPanel(promote, () => { return new EditYmapPanel(this); }, //createFunc (panel) => { panel.SetYmap(CurrentYmapFile); }, //updateFunc (panel) => { return panel.Ymap == CurrentYmapFile; }); //findFunc } - private void ShowEditYmapEntityPanel(bool promote) + public void ShowEditYmapEntityPanel(bool promote) { ShowPanel(promote, () => { return new EditYmapEntityPanel(this); }, //createFunc (panel) => { panel.SetEntity(CurrentEntity); }, //updateFunc (panel) => { return panel.CurrentEntity == CurrentEntity; }); //findFunc } - private void ShowEditYmapCarGenPanel(bool promote) + public void ShowEditYmapCarGenPanel(bool promote) { ShowPanel(promote, () => { return new EditYmapCarGenPanel(this); }, //createFunc (panel) => { panel.SetCarGen(CurrentCarGen); }, //updateFunc (panel) => { return panel.CurrentCarGen == CurrentCarGen; }); //findFunc } - private void ShowEditYmapGrassBatchPanel(bool promote) + public void ShowEditYmapGrassBatchPanel(bool promote) { ShowPanel(promote, () => { return new EditYmapGrassPanel(this); }, //createFunc (panel) => { panel.SetBatch(CurrentGrassBatch); }, //updateFunc (panel) => { return panel.CurrentBatch == CurrentGrassBatch; }); //findFunc } - private void ShowEditYtypPanel(bool promote) + public void ShowEditYtypPanel(bool promote) { ShowPanel(promote, () => { return new EditYtypPanel(this); }, //createFunc (panel) => { panel.SetYtyp(CurrentYtypFile); }, //updateFunc (panel) => { return panel.Ytyp == CurrentYtypFile; }); //findFunc } - private void ShowEditArchetypePanel(bool promote) + public void ShowEditArchetypePanel(bool promote) { ShowPanel(promote, () => { return new EditYtypArchetypePanel(this); }, //createFunc (panel) => { panel.SetArchetype(CurrentArchetype); }, //updateFunc (panel) => { return panel.CurrentArchetype == CurrentArchetype; }); //findFunc } - private void ShowEditYndPanel(bool promote) + public void ShowEditYndPanel(bool promote) { ShowPanel(promote, () => { return new EditYndPanel(this); }, //createFunc (panel) => { panel.SetYnd(CurrentYndFile); }, //updateFunc (panel) => { return panel.Ynd == CurrentYndFile; }); //findFunc } - private void ShowEditYndNodePanel(bool promote) + public void ShowEditYndNodePanel(bool promote) { ShowPanel(promote, () => { return new EditYndNodePanel(this); }, //createFunc (panel) => { panel.SetPathNode(CurrentPathNode); }, //updateFunc (panel) => { return panel.CurrentPathNode == CurrentPathNode; }); //findFunc } - private void ShowEditYnvPanel(bool promote) + public void ShowEditYnvPanel(bool promote) { ShowPanel(promote, () => { return new EditYnvPanel(this); }, //createFunc (panel) => { panel.SetYnv(CurrentYnvFile); }, //updateFunc (panel) => { return panel.Ynv == CurrentYnvFile; }); //findFunc } - private void ShowEditYnvPolyPanel(bool promote) + public void ShowEditYnvPolyPanel(bool promote) { ShowPanel(promote, () => { return new EditYnvPolyPanel(this); }, //createFunc (panel) => { panel.SetYnvPoly(CurrentNavPoly); }, //updateFunc (panel) => { return panel.YnvPoly == CurrentNavPoly; }); //findFunc } - private void ShowEditYnvPointPanel(bool promote) + public void ShowEditYnvPointPanel(bool promote) { ShowPanel(promote, () => { return new EditYnvPointPanel(this); }, //createFunc (panel) => { panel.SetYnvPoint(CurrentNavPoint); }, //updateFunc (panel) => { return panel.YnvPoint == CurrentNavPoint; }); //findFunc } - private void ShowEditYnvPortalPanel(bool promote) + public void ShowEditYnvPortalPanel(bool promote) { ShowPanel(promote, () => { return new EditYnvPortalPanel(this); }, //createFunc (panel) => { panel.SetYnvPortal(CurrentNavPortal); }, //updateFunc (panel) => { return panel.YnvPortal == CurrentNavPortal; }); //findFunc } - private void ShowEditTrainTrackPanel(bool promote) + public void ShowEditTrainTrackPanel(bool promote) { ShowPanel(promote, () => { return new EditTrainTrackPanel(this); }, //createFunc (panel) => { panel.SetTrainTrack(CurrentTrainTrack); }, //updateFunc (panel) => { return panel.Track == CurrentTrainTrack; }); //findFunc } - private void ShowEditTrainNodePanel(bool promote) + public void ShowEditTrainNodePanel(bool promote) { ShowPanel(promote, () => { return new EditTrainNodePanel(this); }, //createFunc (panel) => { panel.SetTrainNode(CurrentTrainNode); }, //updateFunc (panel) => { return panel.TrainNode == CurrentTrainNode; }); //findFunc } - private void ShowEditScenarioYmtPanel(bool promote) + public void ShowEditScenarioYmtPanel(bool promote) { ShowPanel(promote, () => { return new EditScenarioYmtPanel(this); }, //createFunc (panel) => { panel.SetScenarioYmt(CurrentScenario); }, //updateFunc (panel) => { return panel.CurrentScenario == CurrentScenario; }); //findFunc } - private void ShowEditScenarioNodePanel(bool promote) + public void ShowEditScenarioNodePanel(bool promote) { ShowPanel(promote, () => { return new EditScenarioNodePanel(this); }, //createFunc (panel) => { panel.SetScenarioNode(CurrentScenarioNode); }, //updateFunc (panel) => { return panel.CurrentScenarioNode == CurrentScenarioNode; }); //findFunc } - private void ShowEditYtypArchetypeMloRoomPanel(bool promote) + public void ShowEditYtypArchetypeMloRoomPanel(bool promote) { ShowPanel(promote, () => { return new EditYtypArchetypeMloRoomPanel(this); }, //createFunc (panel) => { panel.SetRoom(CurrentMloRoom); }, //updateFunc (panel) => { return panel.CurrentRoom == CurrentMloRoom; }); //findFunc } - private void ShowEditAudioFilePanel(bool promote) //TODO + public void ShowEditAudioFilePanel(bool promote) //TODO { } - private void ShowEditAudioZonePanel(bool promote) //TODO + public void ShowEditAudioZonePanel(bool promote) //TODO { } - private void ShowEditAudioEmitterPanel(bool promote) //TODO + public void ShowEditAudioEmitterPanel(bool promote) //TODO { } - private void ShowEditAudioZoneListPanel(bool promote) //TODO + public void ShowEditAudioZoneListPanel(bool promote) //TODO { } - private void ShowEditAudioEmitterListPanel(bool promote) //TODO + public void ShowEditAudioEmitterListPanel(bool promote) //TODO { } @@ -692,6 +696,14 @@ namespace CodeWalker.Project RefreshUI(); } + public void SetCurrentArchetype(Archetype arch) + { + CurrentArchetype = arch; + if (CurrentArchetype != null) + { + CurrentYtypFile = CurrentEntity?.MloParent?.Archetype?.Ytyp ?? CurrentArchetype?.Ytyp; + } + } private void ClosePanel(Func findFunc) where T : ProjectPanel { From 7c31cfb6eec9ca01ade54fb2378808641b5d4e2e Mon Sep 17 00:00:00 2001 From: dexy Date: Thu, 20 Dec 2018 04:28:43 +1100 Subject: [PATCH 044/158] XML to PSO conversion (experimental) --- CodeWalker.Core/CodeWalker.Core.csproj | 2 + CodeWalker.Core/GameFiles/GameFileCache.cs | 37 +- CodeWalker.Core/GameFiles/MetaTypes/Meta.cs | 6 +- .../GameFiles/MetaTypes/MetaTypes.cs | 4 + .../GameFiles/MetaTypes/MetaXml.cs | 232 ++-- CodeWalker.Core/GameFiles/MetaTypes/Pso.cs | 155 ++- .../GameFiles/MetaTypes/PsoBuilder.cs | 504 +++++++ .../GameFiles/MetaTypes/PsoTypes.cs | 23 +- CodeWalker.Core/GameFiles/MetaTypes/XmlPso.cs | 1222 +++++++++++++++++ ExploreForm.cs | 51 +- Forms/MetaForm.cs | 10 +- 11 files changed, 2097 insertions(+), 149 deletions(-) create mode 100644 CodeWalker.Core/GameFiles/MetaTypes/PsoBuilder.cs create mode 100644 CodeWalker.Core/GameFiles/MetaTypes/XmlPso.cs diff --git a/CodeWalker.Core/CodeWalker.Core.csproj b/CodeWalker.Core/CodeWalker.Core.csproj index 3e40522..e1ee816 100644 --- a/CodeWalker.Core/CodeWalker.Core.csproj +++ b/CodeWalker.Core/CodeWalker.Core.csproj @@ -84,9 +84,11 @@ + + diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index 271f128..896868c 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -2212,16 +2212,27 @@ namespace CodeWalker.GameFiles var exceptions = new List(); var allpsos = new List(); + var diffpsos = new List(); foreach (RpfFile file in AllRpfs) { foreach (RpfEntry entry in file.AllEntries) { +#if !DEBUG try +#endif { var n = entry.NameLower; + if (!(n.EndsWith(".pso") || + n.EndsWith(".ymt") || + n.EndsWith(".ymf") || + n.EndsWith(".ymap") || + n.EndsWith(".ytyp") || + n.EndsWith(".cut"))) + continue; //PSO files seem to only have these extensions + var fentry = entry as RpfFileEntry; - var data = entry.File.ExtractFile(fentry); //kind of slow, but sure to catch all PSO files + var data = entry.File.ExtractFile(fentry); if (data != null) { using (MemoryStream ms = new MemoryStream(data)) @@ -2236,19 +2247,43 @@ namespace CodeWalker.GameFiles allpsos.Add(fentry.Path); PsoTypes.EnsurePsoTypes(pso); + + var xml = PsoXml.GetXml(pso); + if (!string.IsNullOrEmpty(xml)) + { } + + var xdoc = new XmlDocument(); + xdoc.LoadXml(xml); + var pso2 = XmlPso.GetPso(xdoc); + var pso2b = pso2.Save(); + + var pso3 = new PsoFile(); + pso3.Load(pso2b); + var xml3 = PsoXml.GetXml(pso3); + + if (xml.Length != xml3.Length) + { } + if (xml != xml3) + { + diffpsos.Add(fentry.Path); + } + } } } } +#if !DEBUG catch (Exception ex) { UpdateStatus("Error! " + ex.ToString()); exceptions.Add(ex); } +#endif } } string allpsopaths = string.Join("\r\n", allpsos); + string diffpsopaths = string.Join("\r\n", diffpsos); string str = PsoTypes.GetTypesInitString(); if (!string.IsNullOrEmpty(str)) diff --git a/CodeWalker.Core/GameFiles/MetaTypes/Meta.cs b/CodeWalker.Core/GameFiles/MetaTypes/Meta.cs index c617940..5d457c8 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/Meta.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/Meta.cs @@ -621,9 +621,9 @@ namespace CodeWalker.GameFiles public ushort Count2 { get; set; } public uint Unk1 { get; set; } - public uint PointerDataId { get { return (Pointer & 0xFFF); } } - public uint PointerDataIndex { get { return (Pointer & 0xFFF) - 1; } } - public uint PointerDataOffset { get { return ((Pointer >> 12) & 0xFFFFF); } } + public uint PointerDataId { get { return (Pointer & 0xFFF); } set { Pointer = (Pointer & 0xFFFFF000) + (value & 0xFFF); } } + public uint PointerDataIndex { get { return (Pointer & 0xFFF) - 1; } set { PointerDataId = value + 1; } } + public uint PointerDataOffset { get { return ((Pointer >> 12) & 0xFFFFF); } set { Pointer = (Pointer & 0xFFF) + ((value << 12) & 0xFFFFF000); } } diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaTypes.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaTypes.cs index c0000b1..0939b17 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaTypes.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaTypes.cs @@ -2007,6 +2007,10 @@ namespace CodeWalker.GameFiles { return (ushort)(((x & 0xFF00) >> 8) | ((x & 0x00FF) << 8)); } + public static short SwapBytes(short x) + { + return (short)SwapBytes((ushort)x); + } public static uint SwapBytes(uint x) { // swap adjacent 16-bit blocks diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs index b40c0ef..453aaf8 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs @@ -5,6 +5,7 @@ using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; +using System.Xml; namespace CodeWalker.GameFiles { @@ -640,6 +641,10 @@ namespace CodeWalker.GameFiles var structInfo = cont.GetStructureInfo(structName); if (structInfo == null) + { + structInfo = PsoTypes.GetStructureInfo(structName);//fallback to builtin... + } + if (structInfo == null) { ErrorXml(sb, indent, "Couldn't find structure info " + name + "!"); return; @@ -708,7 +713,10 @@ namespace CodeWalker.GameFiles case 0: //int enum var intEVal = MetaTypes.SwapBytes(BitConverter.ToInt32(data, eoffset)); var intE = enumInfo.FindEntry(intEVal); - StringTag(sb, cind, ename, HashString(intE?.EntryNameHash ?? 0)); + var intH = HashString(intE?.EntryNameHash ?? 0); + if (string.IsNullOrEmpty(intH)) + { } + StringTag(sb, cind, ename, intH); break; case 2: //byte enum var byteEVal = data[eoffset]; @@ -718,9 +726,9 @@ namespace CodeWalker.GameFiles } break; case PsoDataType.Flags: - uint fCount = (entry.ReferenceKey >> 16) & 0x0000FFFF; - uint fEntry = (entry.ReferenceKey & 0xFFFF); - var fEnt = structInfo.GetEntry((int)fEntry); + //uint fCount = (entry.ReferenceKey >> 16) & 0x0000FFFF; + uint fEntry = (entry.ReferenceKey & 0xFFF); + var fEnt = (fEntry != 0xFFF) ? structInfo.GetEntry((int)fEntry) : null; PsoEnumInfo flagsInfo = null; if ((fEnt != null) && (fEnt.EntryNameHash == MetaName.ARRAYINFO)) { @@ -728,7 +736,9 @@ namespace CodeWalker.GameFiles } if (flagsInfo == null) { - flagsInfo = cont.GetEnumInfo(entry.EntryNameHash); + if (fEntry != 0xFFF) + { } + //flagsInfo = cont.GetEnumInfo(entry.EntryNameHash); } uint? flagsVal = null; switch (entry.Unk_5h) @@ -805,13 +815,14 @@ namespace CodeWalker.GameFiles default: ErrorXml(sb, cind, ename + ": Unexpected Integer subtype: " + entry.Unk_5h.ToString()); break; - case 0: //signed int + case 0: //signed int (? flags?) var int6aVal = MetaTypes.SwapBytes(BitConverter.ToInt32(data, eoffset)); ValueTag(sb, cind, ename, int6aVal.ToString()); break; case 1: //unsigned int var int6bVal = MetaTypes.SwapBytes(BitConverter.ToUInt32(data, eoffset)); - ValueTag(sb, cind, ename, "0x" + int6bVal.ToString("X").PadLeft(8, '0')); + ValueTag(sb, cind, ename, int6bVal.ToString()); + //ValueTag(sb, cind, ename, "0x" + int6bVal.ToString("X").PadLeft(8, '0')); break; } break; @@ -833,16 +844,16 @@ namespace CodeWalker.GameFiles ValueTag(sb, cind, ename, short4Val.ToString()); break; case PsoDataType.HFloat://half float? - var short1EVal = MetaTypes.SwapBytes(BitConverter.ToUInt16(data, eoffset)); + var short1EVal = MetaTypes.SwapBytes(BitConverter.ToInt16(data, eoffset)); ValueTag(sb, cind, ename, short1EVal.ToString()); break; case PsoDataType.String: - var str0 = GetStringValue(cont.Pso, entry, data, eoffset); - if (str0 == null) - { - ErrorXml(sb, cind, ename + ": Unexpected String subtype: " + entry.Unk_5h.ToString()); - } - else + var str0 = XmlEscape(GetStringValue(cont.Pso, entry, data, eoffset)); + //if (str0 == null) + //{ + // ErrorXml(sb, cind, ename + ": Unexpected String subtype: " + entry.Unk_5h.ToString()); + //} + //else { StringTag(sb, cind, ename, str0); } @@ -909,8 +920,13 @@ namespace CodeWalker.GameFiles var boffset = offset + block.Offset; var eoffset = boffset + entry.DataOffset; var aOffset = offset + entry.DataOffset; + var abOffset = aOffset + block.Offset; var aBlockId = blockId; uint aCount = (entry.ReferenceKey >> 16) & 0x0000FFFF; + Array_Structure arrStruc = new Array_Structure(); + arrStruc.PointerDataId = (uint)aBlockId; + arrStruc.PointerDataOffset = (uint)aOffset; + arrStruc.Count1 = arrStruc.Count2 = (ushort)aCount; var aind = indent + 1; string arrTag = ename; PsoStructureEntryInfo arrEntry = estruct.GetEntry((int)(entry.ReferenceKey & 0xFFFF)); @@ -922,17 +938,24 @@ namespace CodeWalker.GameFiles var data = cont.Pso.DataSection.Data; + bool embedded = true; switch (entry.Unk_5h) { default: ErrorXml(sb, indent, ename + ": WIP! Unsupported Array subtype: " + entry.Unk_5h.ToString()); break; case 0: //Array_Structure - var arrStruc = MetaTypes.ConvertData(data, eoffset); + arrStruc = MetaTypes.ConvertData(data, eoffset); arrStruc.SwapEnd(); aBlockId = (int)arrStruc.PointerDataId; aOffset = (int)arrStruc.PointerDataOffset; aCount = arrStruc.Count1; + var aBlock = cont.Pso.GetBlock(aBlockId); + if (aBlock != null) + { + abOffset = aOffset + aBlock.Offset; + } + embedded = false; break; case 1: //Raw in-line array break; @@ -941,11 +964,20 @@ namespace CodeWalker.GameFiles case 4: //pointer array? default array? if (arrEntry.Unk_5h == 3) //pointers... { - var arrStruc4 = MetaTypes.ConvertData(data, eoffset); - arrStruc4.SwapEnd(); - aBlockId = (int)arrStruc4.PointerDataId; - aOffset = (int)arrStruc4.PointerDataOffset; - aCount = arrStruc4.Count1; + arrStruc = MetaTypes.ConvertData(data, eoffset); + arrStruc.SwapEnd(); + aBlockId = (int)arrStruc.PointerDataId; + aOffset = (int)arrStruc.PointerDataOffset; + aCount = arrStruc.Count1; + var aBlock2 = cont.Pso.GetBlock(aBlockId); + if (aBlock2 != null) + { + abOffset = aOffset + aBlock2.Offset; + } + embedded = false; + } + else + { } break; case 129: //also raw inline array? in junctions.pso @@ -959,10 +991,11 @@ namespace CodeWalker.GameFiles break; case PsoDataType.Array: var rk0 = (entry.ReferenceKey >> 16) & 0x0000FFFF; + //var rk1 = entry.ReferenceKey & 0x0000FFFF; + //var rk3 = (arrEntry.ReferenceKey >> 16) & 0x0000FFFF; + //var rk4 = arrEntry.ReferenceKey & 0x0000FFFF; if (rk0 > 0) { - //var arrStruc5 = MetaTypes.ConvertDataArray(data, eoffset, (int)rk0); - //for (int n = 0; n < rk0; n++) arrStruc5[n].SwapEnd(); aOffset = offset + entry.DataOffset; OpenTag(sb, indent, arrTag); @@ -997,7 +1030,14 @@ namespace CodeWalker.GameFiles for (int n = 0; n < aCount; n++) { var ptrVal = ptrArr[n]; - WriteNode(sb, aind, cont, ptrVal.BlockID, (int)ptrVal.ItemOffset, XmlTagMode.ItemAndType); + if (ptrVal.Pointer == 0) + { + SelfClosingTag(sb, aind, "Item"); //"null" entry... + } + else + { + WriteNode(sb, aind, cont, ptrVal.BlockID, (int)ptrVal.ItemOffset, XmlTagMode.ItemAndType); + } } CloseTag(sb, indent, ename); } @@ -1050,6 +1090,8 @@ namespace CodeWalker.GameFiles ErrorXml(sb, indent, ename + ": Unexpected String array subtype: " + entry.Unk_5h.ToString()); break; case 0: //hash array... + if (embedded) + { } var arrHash = MetaTypes.ConvertData(data, eoffset); arrHash.SwapEnd(); var hashArr = PsoTypes.GetHashArray(cont.Pso, arrHash); @@ -1064,54 +1106,70 @@ namespace CodeWalker.GameFiles WriteRawArray(sb, v2Arr, indent, ename, "Vector2", FormatVector2Swap, 1); break; case PsoDataType.Float3: - aCount = (entry.ReferenceKey >> 16) & 0x0000FFFF; + if (!embedded) + { } arrTag += " itemType=\"Vector3\""; //this is actually aligned as vector4, the W values are crazy in places var v4Arr = MetaTypes.ConvertDataArray(data, eoffset, (int)aCount); WriteRawArray(sb, v4Arr, indent, ename, "Vector3", FormatVector4SwapXYZOnly, 1); break; case PsoDataType.UByte: + if (embedded) + { } + else + { } //block type 2 var barr = new byte[aCount]; if (aCount > 0) { - var bblock = cont.Pso.GetBlock(aBlockId); - var boffs = bblock.Offset + aOffset; - Buffer.BlockCopy(data, boffs, barr, 0, (int)aCount); + //var bblock = cont.Pso.GetBlock(aBlockId); + //var boffs = bblock.Offset + aOffset; + Buffer.BlockCopy(data, abOffset /*boffs*/, barr, 0, (int)aCount); } WriteRawArray(sb, barr, indent, ename, "byte"); break; case PsoDataType.Bool: + if (embedded) + { } + else + { } var barr2 = new byte[aCount]; if (aCount > 0) { - var bblock = cont.Pso.GetBlock(aBlockId); - var boffs = bblock.Offset + aOffset; - Buffer.BlockCopy(data, boffs, barr2, 0, (int)aCount); + //var bblock = cont.Pso.GetBlock(aBlockId); + //var boffs = bblock.Offset + aOffset; + Buffer.BlockCopy(data, abOffset /*boffs*/, barr2, 0, (int)aCount); } WriteRawArray(sb, barr2, indent, ename, "boolean"); //todo: true/false output break; case PsoDataType.Float: - var arrFloat = MetaTypes.ConvertData(data, eoffset); - arrFloat.SwapEnd(); + if (embedded) + { } + var arrFloat = new Array_float(arrStruc.Pointer, arrStruc.Count1); //block type 7 var floatArr = PsoTypes.GetFloatArray(cont.Pso, arrFloat); WriteRawArray(sb, floatArr, indent, ename, "float"); break; case PsoDataType.UShort: - var arrShort = MetaTypes.ConvertData(data, eoffset); - arrShort.SwapEnd(); - var shortArr = PsoTypes.GetUShortArray(cont.Pso, arrShort); + if (embedded) + { } + var shortArr = PsoTypes.GetUShortArray(cont.Pso, arrStruc); //block type 4 WriteRawArray(sb, shortArr, indent, ename, "ushort"); break; case PsoDataType.UInt: - var intArr = MetaTypes.ConvertDataArray(data, eoffset, (int)aCount); + if (embedded) + { } + var arrUint = new Array_uint(arrStruc.Pointer, arrStruc.Count1); //block type 6 + var intArr = PsoTypes.GetUintArray(cont.Pso, arrUint); WriteRawArray(sb, intArr, indent, ename, "int"); break; case PsoDataType.SInt: - var arrUint2 = MetaTypes.ConvertData(data, eoffset); - arrUint2.SwapEnd(); + if (embedded) + { } + var arrUint2 = new Array_uint(arrStruc.Pointer, arrStruc.Count1); //block type 5 var intArr2 = PsoTypes.GetUintArray(cont.Pso, arrUint2); WriteRawArray(sb, intArr2, indent, ename, "int"); break; case PsoDataType.Enum: + if (embedded) + { } var arrEnum = MetaTypes.ConvertData(data, eoffset); arrEnum.SwapEnd(); var enumArr = PsoTypes.GetUintArray(cont.Pso, arrEnum); @@ -1139,41 +1197,23 @@ namespace CodeWalker.GameFiles var mapidx2 = (entry.ReferenceKey >> 16) & 0x0000FFFF; var mapreftype1 = structInfo.Entries[mapidx2]; var mapreftype2 = structInfo.Entries[mapidx1]; - var x1 = MetaTypes.SwapBytes(BitConverter.ToInt32(data, eoffset));//same as ref key? - var x2 = MetaTypes.SwapBytes(BitConverter.ToInt32(data, eoffset + 4));//0? - var x3 = MetaTypes.SwapBytes(BitConverter.ToInt32(data, eoffset + 8));//pointer? - var x4 = MetaTypes.SwapBytes(BitConverter.ToInt32(data, eoffset + 12));// - var x5 = MetaTypes.SwapBytes(BitConverter.ToInt32(data, eoffset + 16));//count/capacity? - var x6 = MetaTypes.SwapBytes(BitConverter.ToInt32(data, eoffset + 20));// + var x1 = MetaTypes.SwapBytes(BitConverter.ToInt32(data, eoffset)); + var x2 = MetaTypes.SwapBytes(BitConverter.ToInt32(data, eoffset + 4)); + var sptr = MetaTypes.ConvertData(data, eoffset + 8); + sptr.SwapEnd(); - //File.WriteAllText("C:\\CodeWalker.Projects\\testxml.xml", sb.ToString()); if (x1 != 0x1000000) { } if (x2 != 0) { } - if (x4 != 0) - { } - if (x6 != 0) + if (mapreftype2.ReferenceKey != 0) { } - - var xBlockId = x3 & 0xFFF; - var xOffset = (x3 >> 12) & 0xFFFFF; - var xCount1 = x5 & 0xFFFF; - var xCount2 = (x5 >> 16) & 0xFFFF; - - //var x1a = x1 & 0xFFF; //block id? for another pointer? - //var x1b = (x1 >> 12) & 0xFFFFF; //offset? - //var x4u = (uint)x4; - //var x4a = x4 & 0xFFF; //block id? - //var x4b = (x4 >> 12) & 0xFFFFF; //offset? - //var x2h = (MetaHash)(uint)x2; - //var x6h = (MetaHash)(uint)x6; - //if (x1a > 0) - //{ } - - + var xBlockId = (int)sptr.PointerDataId;// x3 & 0xFFF; + var xOffset = sptr.PointerDataOffset;// (x3 >> 12) & 0xFFFFF; + var xCount1 = sptr.Count1;// x5 & 0xFFFF; + var xCount2 = sptr.Count2;// (x5 >> 16) & 0xFFFF; var xBlock = cont.Pso.GetBlock(xBlockId); if ((xBlock == null) && (xCount1 > 0)) @@ -1183,8 +1223,7 @@ namespace CodeWalker.GameFiles else { if (xCount1 != xCount2) - { - } + { } if (xCount1 > 0) { var xStruct = cont.GetStructureInfo(xBlock.NameHash); @@ -1218,10 +1257,10 @@ namespace CodeWalker.GameFiles { ErrorXml(sb, aind, ename + ": Map Item was not a structure!"); } - else if (iEntry.Unk_5h != 3) - { - ErrorXml(sb, aind, ename + ": Map Item was not a structure pointer - TODO!"); - } + //else if (iEntry.Unk_5h != 3) + //{ + // ErrorXml(sb, aind, ename + ": Map Item was not a structure pointer - TODO!"); + //} else { OpenTag(sb, xind, ename); @@ -1236,30 +1275,39 @@ namespace CodeWalker.GameFiles var kOffset = sOffset + kEntry.DataOffset; var iOffset = sOffset + iEntry.DataOffset; var kStr = GetStringValue(cont.Pso, kEntry, data, kOffset); - var iPtr = MetaTypes.ConvertData(data, iOffset); - iPtr.SwapEnd(); - var iBlock = cont.Pso.GetBlock(iPtr.BlockID); - if (iBlock == null) + if (iEntry.ReferenceKey != 0)//(xBlock.NameHash != MetaName.ARRAYINFO)//257,258,259 { - OpenTag(sb, aind, "Item type=\"" + HashString((MetaName)entry.ReferenceKey) + "\" key=\"" + kStr + "\""); - WriteNode(sb, aind, cont, iPtr.BlockID, (int)iPtr.ItemOffset, XmlTagMode.None, (MetaName)entry.ReferenceKey); + //embedded map values + var vOffset = xOffset2 + iEntry.DataOffset; + OpenTag(sb, aind, "Item type=\"" + HashString((MetaName)iEntry.ReferenceKey) + "\" key=\"" + kStr + "\""); + WriteNode(sb, aind, cont, xBlockId, vOffset, XmlTagMode.None, (MetaName)iEntry.ReferenceKey); CloseTag(sb, aind, "Item"); } else { - var iStr = "Item type=\"" + HashString(iBlock.NameHash) + "\" key=\"" + kStr + "\""; - var iStruc = cont.GetStructureInfo(iBlock.NameHash); - if (iStruc?.EntriesCount == 0) + var iPtr = MetaTypes.ConvertData(data, iOffset); + iPtr.SwapEnd(); + var iBlock = cont.Pso.GetBlock(iPtr.BlockID); + if (iBlock == null) { - //SelfClosingTag(sb, aind, iStr); - OpenTag(sb, aind, iStr); - CloseTag(sb, aind, "Item"); + ErrorXml(sb, aind, ename + ": Could not find iBlock for Map entry!"); } else { - OpenTag(sb, aind, iStr); - WriteNode(sb, aind, cont, iPtr.BlockID, (int)iPtr.ItemOffset, XmlTagMode.None);//, (MetaName)entry.ReferenceKey); - CloseTag(sb, aind, "Item"); + var iStr = "Item type=\"" + HashString(iBlock.NameHash) + "\" key=\"" + kStr + "\""; + var iStruc = cont.GetStructureInfo(iBlock.NameHash); + if (iStruc?.EntriesCount == 0) + { + //SelfClosingTag(sb, aind, iStr); + OpenTag(sb, aind, iStr); + CloseTag(sb, aind, "Item"); + } + else + { + OpenTag(sb, aind, iStr); + WriteNode(sb, aind, cont, iPtr.BlockID, (int)iPtr.ItemOffset, XmlTagMode.None);//, (MetaName)entry.ReferenceKey); + CloseTag(sb, aind, "Item"); + } } } xOffset2 += xStruct.StructureLength; @@ -1311,7 +1359,17 @@ namespace CodeWalker.GameFiles } - + public static string XmlEscape(string unescaped) + { + if (unescaped == null) return null; + XmlDocument doc = new XmlDocument(); + XmlNode node = doc.CreateElement("root"); + node.InnerText = unescaped; + var escaped = node.InnerXml; + if (escaped != unescaped) + { } + return node.InnerXml; + } public class PsoCont diff --git a/CodeWalker.Core/GameFiles/MetaTypes/Pso.cs b/CodeWalker.Core/GameFiles/MetaTypes/Pso.cs index a92ff3e..f63fa26 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/Pso.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/Pso.cs @@ -205,6 +205,13 @@ namespace CodeWalker.GameFiles public PsoSTRESection STRESection { get; set; } public PsoCHKSSection CHKSSection { get; set; } + + public void Load(byte[] data) + { + using (var ms = new MemoryStream(data)) + Load(ms); + } + public void Load(string fileName) { using (var stream = new FileStream(fileName, FileMode.Open)) @@ -268,6 +275,19 @@ namespace CodeWalker.GameFiles } } + + public byte[] Save() + { + var ms = new MemoryStream(); + Save(ms); + + var buf = new byte[ms.Length]; + ms.Position = 0; + ms.Read(buf, 0, buf.Length); + + return buf; + } + public void Save(string fileName) { using (var stream = new FileStream(fileName, FileMode.Create)) @@ -280,6 +300,11 @@ namespace CodeWalker.GameFiles if (DataSection != null) DataSection.Write(writer); if (DataMapSection != null) DataMapSection.Write(writer); if (SchemaSection != null) SchemaSection.Write(writer); + if (STRFSection != null) STRFSection.Write(writer); + if (STRSSection != null) STRSSection.Write(writer); + if (STRESection != null) STRESection.Write(writer); + if (PSIGSection != null) PSIGSection.Write(writer); + if (CHKSSection != null) CHKSSection.Write(writer); } @@ -342,11 +367,13 @@ namespace CodeWalker.GameFiles public void Write(DataWriter writer) { + Length = Data.Length; + writer.Write(Data); - writer.Position -= Data.Length; - writer.Write((uint)0x5053494E); - writer.Write((uint)(Data.Length)); - writer.Position += Data.Length - 8; + writer.Position -= Length; + writer.Write(Ident); + writer.Write((uint)(Length)); + writer.Position += Length - 8; } public override string ToString() @@ -413,10 +440,10 @@ namespace CodeWalker.GameFiles public void Read(DataReader reader) { - this.NameHash = (MetaName)reader.ReadUInt32(); - this.Offset = reader.ReadInt32(); - this.Unknown_8h = reader.ReadInt32(); - this.Length = reader.ReadInt32(); + NameHash = (MetaName)reader.ReadUInt32(); + Offset = reader.ReadInt32(); + Unknown_8h = reader.ReadInt32(); + Length = reader.ReadInt32(); } public void Write(DataWriter writer) @@ -449,7 +476,7 @@ namespace CodeWalker.GameFiles Length = reader.ReadInt32(); Count = reader.ReadUInt32(); - this.EntriesIdx = new PsoElementIndexInfo[Count]; + EntriesIdx = new PsoElementIndexInfo[Count]; for (int i = 0; i < Count; i++) { var entry = new PsoElementIndexInfo(); @@ -457,7 +484,7 @@ namespace CodeWalker.GameFiles EntriesIdx[i] = entry; } - this.Entries = new PsoElementInfo[Count]; + Entries = new PsoElementInfo[Count]; for (int i = 0; i < Count; i++) { reader.Position = EntriesIdx[i].Offset; @@ -506,7 +533,7 @@ namespace CodeWalker.GameFiles writer.Write(Ident); writer.Write((int)(12 + entriesStream.Length + indexStream.Length)); - writer.Write((int)(Entries.Length)); + writer.Write((uint)(Entries.Length)); // write entries index data var buf1 = new byte[indexStream.Length]; @@ -536,8 +563,8 @@ namespace CodeWalker.GameFiles public void Read(DataReader reader) { - this.NameHash = (MetaName)reader.ReadUInt32(); - this.Offset = reader.ReadInt32(); + NameHash = (MetaName)reader.ReadUInt32(); + Offset = reader.ReadInt32(); } public void Write(DataWriter writer) @@ -590,11 +617,11 @@ namespace CodeWalker.GameFiles public override void Read(DataReader reader) { uint x = reader.ReadUInt32(); - this.Type = (byte)((x & 0xFF000000) >> 24); - this.EntriesCount = (short)(x & 0xFFFF); - this.Unk = (byte)((x & 0x00FF0000) >> 16); - this.StructureLength = reader.ReadInt32(); - this.Unk_Ch = reader.ReadUInt32(); + Type = (byte)((x & 0xFF000000) >> 24); + EntriesCount = (short)(x & 0xFFFF); + Unk = (byte)((x & 0x00FF0000) >> 16); + StructureLength = reader.ReadInt32(); + Unk_Ch = reader.ReadUInt32(); if (Unk_Ch != 0) { } @@ -655,7 +682,7 @@ namespace CodeWalker.GameFiles { public MetaName EntryNameHash { get; set; } public PsoDataType Type { get; set; } - public byte Unk_5h { get; set; } + public byte Unk_5h { get; set; } //0 = default, 3 = pointer array? public ushort DataOffset { get; set; } public uint ReferenceKey { get; set; } // when array -> entry index with type @@ -673,11 +700,11 @@ namespace CodeWalker.GameFiles public void Read(DataReader reader) { - this.EntryNameHash = (MetaName)reader.ReadUInt32(); - this.Type = (PsoDataType)reader.ReadByte(); - this.Unk_5h = reader.ReadByte(); - this.DataOffset = reader.ReadUInt16(); - this.ReferenceKey = reader.ReadUInt32(); + EntryNameHash = (MetaName)reader.ReadUInt32(); + Type = (PsoDataType)reader.ReadByte(); + Unk_5h = reader.ReadByte(); + DataOffset = reader.ReadUInt16(); + ReferenceKey = reader.ReadUInt32(); } public void Write(DataWriter writer) @@ -721,8 +748,8 @@ namespace CodeWalker.GameFiles public override void Read(DataReader reader) { uint x = reader.ReadUInt32(); - this.Type = (byte)((x & 0xFF000000) >> 24); - this.EntriesCount = (int)(x & 0x00FFFFFF); + Type = (byte)((x & 0xFF000000) >> 24); + EntriesCount = (int)(x & 0x00FFFFFF); Entries = new PsoEnumEntryInfo[EntriesCount]; for (int i = 0; i < EntriesCount; i++) @@ -762,6 +789,21 @@ namespace CodeWalker.GameFiles return null; } + public PsoEnumEntryInfo FindEntryByName(MetaName name) + { + if (Entries == null) return null; + for (int i = 0; i < Entries.Length; i++) + { + var entry = Entries[i]; + if (entry.EntryNameHash == name) + { + return entry; + } + } + return null; + } + + public override string ToString() { @@ -785,8 +827,8 @@ namespace CodeWalker.GameFiles public void Read(DataReader reader) { - this.EntryNameHash = (MetaName)reader.ReadUInt32(); - this.EntryKey = reader.ReadInt32(); + EntryNameHash = (MetaName)reader.ReadUInt32(); + EntryKey = reader.ReadInt32(); } public void Write(DataWriter writer) @@ -827,10 +869,25 @@ namespace CodeWalker.GameFiles public void Write(DataWriter writer) { + var strStream = new MemoryStream(); + var strWriter = new DataWriter(strStream, Endianess.BigEndian); + foreach (var str in Strings) + { + strWriter.Write(str); + } + + Length = (int)strStream.Length + 8; writer.Write(Ident); writer.Write(Length); + if (strStream.Length > 0) + { + var buf1 = new byte[strStream.Length]; + strStream.Position = 0; + strStream.Read(buf1, 0, buf1.Length); + writer.Write(buf1); + } } @@ -867,10 +924,25 @@ namespace CodeWalker.GameFiles public void Write(DataWriter writer) { + var strStream = new MemoryStream(); + var strWriter = new DataWriter(strStream, Endianess.BigEndian); + foreach (var str in Strings) + { + strWriter.Write(str); + } + + Length = (int)strStream.Length + 8; writer.Write(Ident); writer.Write(Length); + if (strStream.Length > 0) + { + var buf1 = new byte[strStream.Length]; + strStream.Position = 0; + strStream.Read(buf1, 0, buf1.Length); + writer.Write(buf1); + } } @@ -886,7 +958,6 @@ namespace CodeWalker.GameFiles public int Length { get; set; } public byte[] Data { get; set; } - //public MetaHash[] Hashes { get; set; } //public byte[] Decr1 { get; set; } //public byte[] Decr2 { get; set; } @@ -899,26 +970,25 @@ namespace CodeWalker.GameFiles { Data = reader.ReadBytes(Length - 8); - //reader.Position = 8; - //List hashes = new List(); - //while (reader.Position < reader.Length) - //{ - // hashes.Add(reader.ReadUInt32()); - //} - //Hashes = hashes.ToArray(); - //Decr1 = GTACrypto.DecryptAES(Data); //Decr2 = GTACrypto.DecryptNG(Data, ) + //TODO: someone plz figure out that encryption } } public void Write(DataWriter writer) { + Length = (Data?.Length??0) + 8; + writer.Write(Ident); writer.Write(Length); + if (Length > 8) + { + writer.Write(Data); + } } @@ -947,10 +1017,15 @@ namespace CodeWalker.GameFiles public void Write(DataWriter writer) { + Length = (Data?.Length ?? 0) + 8; writer.Write(Ident); writer.Write(Length); + if (Length > 8) + { + writer.Write(Data); + } } @@ -983,11 +1058,13 @@ namespace CodeWalker.GameFiles public void Write(DataWriter writer) { + Length = 20; writer.Write(Ident); writer.Write(Length); - - + writer.Write(FileSize); + writer.Write(Checksum); + writer.Write(Unk0); } public override string ToString() diff --git a/CodeWalker.Core/GameFiles/MetaTypes/PsoBuilder.cs b/CodeWalker.Core/GameFiles/MetaTypes/PsoBuilder.cs new file mode 100644 index 0000000..ceeb96f --- /dev/null +++ b/CodeWalker.Core/GameFiles/MetaTypes/PsoBuilder.cs @@ -0,0 +1,504 @@ +using SharpDX; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CodeWalker.GameFiles +{ + public class PsoBuilder + { + + + public PsoBuilderPointer RootPointer { get; set; } + + List STRFStrings = new List(); + List STRSStrings = new List(); + + + Dictionary StructureInfos = new Dictionary(); + Dictionary EnumInfos = new Dictionary(); + + + List Blocks = new List(); + int MaxBlockLength = 0x100000; //TODO: figure what this should be! + + public PsoBuilderBlock EnsureBlock(MetaName type) + { + foreach (var block in Blocks) + { + if (block.StructureNameHash == type) + { + if (block.TotalSize < MaxBlockLength) + { + return block; + } + } + } + PsoBuilderBlock b = new PsoBuilderBlock(); + b.StructureNameHash = type; + b.Index = Blocks.Count; + Blocks.Add(b); + return b; + } + + + public PsoBuilderPointer AddItem(MetaName type, T item) where T : struct + { + byte[] data = MetaTypes.ConvertToBytes(item); + return AddItem(type, data); + } + + public PsoBuilderPointer AddItem(MetaName type, byte[] data) + { + PsoBuilderBlock block = EnsureBlock(type); + int brem = data.Length % 16; + if (brem > 0) + { + int newlen = data.Length - brem + 16; + byte[] newdata = new byte[newlen]; + Buffer.BlockCopy(data, 0, newdata, 0, data.Length); + data = newdata; //make sure item size is multiple of 16... so pointers don't need sub offsets! + } + int idx = block.AddItem(data); + PsoBuilderPointer r = new PsoBuilderPointer(); + r.BlockID = block.Index + 1; + r.Offset = (idx * data.Length); + r.Length = data.Length; + return r; + } + + public PsoBuilderPointer AddItemArray(MetaName type, T[] items) where T : struct + { + byte[] data = MetaTypes.ConvertArrayToBytes(items); + return AddItemArray(type, data, items.Length); + } + + public PsoBuilderPointer AddItemArray(MetaName type, byte[] data, int length) + { + PsoBuilderBlock block = EnsureBlock(type); + int datalen = data.Length; + int newlen = datalen; + //int lenrem = newlen % 16; + //if (lenrem != 0) + //{ + // newlen += (16 - lenrem); + //} + byte[] newdata = new byte[newlen]; + Buffer.BlockCopy(data, 0, newdata, 0, datalen); + int offs = block.TotalSize; + int idx = block.AddItem(newdata); + PsoBuilderPointer r = new PsoBuilderPointer(); + r.BlockID = block.Index + 1; + r.Offset = offs; //(idx * data.Length);; + r.Length = length; + return r; + } + + + + public PsoPOINTER AddItemPtr(MetaName type, T item) where T : struct //helper method for AddItem + { + var ptr = AddItem(type, item); + return new PsoPOINTER(ptr.BlockID, ptr.Offset, 0); + } + + public PsoPOINTER AddItemPtr(MetaName type, byte[] data)//helper method for AddItem + { + var ptr = AddItem(type, data); + return new PsoPOINTER(ptr.BlockID, ptr.Offset, 0); + } + + public Array_Structure AddItemArrayPtr(MetaName type, T[] items) where T : struct //helper method for AddItemArray + { + if ((items == null) || (items.Length == 0)) return new Array_Structure(); + var ptr = AddItemArray(type, items); + return new Array_Structure(ptr.Pointer, ptr.Length); + } + + public Array_Structure AddItemArrayPtr(MetaName type, byte[][] data) //helper method for AddItemArray + { + if ((data == null) || (data.Length == 0)) return new Array_Structure(); + + int len = 0; + + for (int i = 0; i < data.Length; i++) + { + len += data[i].Length; + } + + var newdata = new byte[len]; + + int offset = 0; + + for (int i = 0; i < data.Length; i++) + { + Buffer.BlockCopy(data[i], 0, newdata, offset, data[i].Length); + offset += data[i].Length; + } + + var ptr = AddItemArray(type, newdata, data.Length); + return new Array_Structure(ptr.Pointer, ptr.Length); + } + + + + public Array_StructurePointer AddPointerArray(PsoPOINTER[] arr) + { + if ((arr == null) || (arr.Length == 0)) return new Array_StructurePointer(); + var ptr = AddItemArray(MetaName.PsoPOINTER, arr); + Array_StructurePointer sp = new Array_StructurePointer(); + sp.Count1 = (ushort)arr.Length; + sp.Count2 = sp.Count1; + sp.Pointer = ptr.Pointer; + return sp; + } + + + + public PsoBuilderPointer AddString(string str) + { + PsoBuilderBlock block = EnsureBlock((MetaName)1); //PsoSTRING seems to be 1 + byte[] data = Encoding.ASCII.GetBytes(str + (char)0); + int datalen = data.Length; + int newlen = datalen; + //int lenrem = newlen % 16; + //if (lenrem != 0) //pad the data length up to multiple of 16. + //{ + // newlen += (16 - lenrem); + //} + byte[] newdata = new byte[newlen]; + Buffer.BlockCopy(data, 0, newdata, 0, datalen); + int offs = block.TotalSize; + int idx = block.AddItem(newdata); + PsoBuilderPointer r = new PsoBuilderPointer(); + r.BlockID = block.Index + 1; + r.Offset = offs;// (idx * data.Length); + r.Length = datalen; //actual length of string. + return r; + } + + + public Array_Vector3 AddPaddedVector3ArrayPtr(Vector4[] items) + { + if ((items == null) || (items.Length == 0)) return new Array_Vector3(); + var ptr = AddItemArray((MetaName)1, items); //MetaName.VECTOR4 padded to vec4... + return new Array_Vector3(ptr.Pointer, items.Length); + } + public Array_Vector3 AddVector2ArrayPtr(Vector2[] items) + { + if ((items == null) || (items.Length == 0)) return new Array_Vector3(); + var ptr = AddItemArray((MetaName)1, items); //MetaName.VECTOR4 padded to vec4...? + return new Array_Vector3(ptr.Pointer, items.Length); + } + public Array_uint AddHashArrayPtr(MetaHash[] items) + { + if ((items == null) || (items.Length == 0)) return new Array_uint(); + var ptr = AddItemArray((MetaName)6, items); //MetaName.HASH + return new Array_uint(ptr.Pointer, items.Length); + } + public Array_uint AddUIntArrayPtr(uint[] items) + { + if ((items == null) || (items.Length == 0)) return new Array_uint(); + var ptr = AddItemArray((MetaName)6, items); + return new Array_uint(ptr.Pointer, items.Length); + } + public Array_uint AddSIntArrayPtr(int[] items) + { + if ((items == null) || (items.Length == 0)) return new Array_uint(); + var ptr = AddItemArray((MetaName)5, items); + return new Array_uint(ptr.Pointer, items.Length); + } + public Array_ushort AddUShortArrayPtr(ushort[] items) + { + if ((items == null) || (items.Length == 0)) return new Array_ushort(); + var ptr = AddItemArray((MetaName)4, items); + return new Array_ushort(ptr.Pointer, items.Length); + } + public Array_byte AddByteArrayPtr(byte[] items) + { + if ((items == null) || (items.Length == 0)) return new Array_byte(); + var ptr = AddItemArray((MetaName)2, items); + return new Array_byte(ptr.Pointer, items.Length); + } + public Array_float AddFloatArrayPtr(float[] items) + { + if ((items == null) || (items.Length == 0)) return new Array_float(); + var ptr = AddItemArray((MetaName)7, items); //MetaName.PsoFLOAT ? comes up as MetaName.POINTER due to RSC meta values + return new Array_float(ptr.Pointer, items.Length); + } + + + + + public void AddStringToSTRF(string str) + { + STRFStrings.Add(str); + } + public void AddStringToSTRS(string str) + { + STRSStrings.Add(str); + } + + + + + public void AddStructureInfo(MetaName name) + { + if (!StructureInfos.ContainsKey(name)) + { + PsoStructureInfo si = PsoTypes.GetStructureInfo(name); + if (si != null) + { + StructureInfos[name] = si; + } + } + } + public void AddEnumInfo(MetaName name) + { + if (!EnumInfos.ContainsKey(name)) + { + PsoEnumInfo ei = PsoTypes.GetEnumInfo(name); + if (ei != null) + { + EnumInfos[name] = ei; + } + } + } + + + public PsoStructureInfo AddMapNodeStructureInfo(MetaName valType) + { + PsoStructureInfo inf = null; + + if (valType == 0) + { + inf = PsoTypes.GetStructureInfo(MetaName.ARRAYINFO); //default ARRAYINFO with pointer + if (!StructureInfos.ContainsKey(inf.IndexInfo.NameHash)) + { + StructureInfos[inf.IndexInfo.NameHash] = inf; + } + return inf; + } + + var structInfo = PsoTypes.GetStructureInfo(valType); + if (structInfo == null) + { }//error? + + MetaName xName = MetaName.ARRAYINFO + 1; //257 + bool nameOk = !StructureInfos.ContainsKey(xName); + while (!nameOk) + { + var exInfo = StructureInfos[xName]; + var exInfoItem = exInfo.FindEntry(MetaName.Item); + if (((MetaName)(exInfoItem?.ReferenceKey ?? 0) == valType)) + { + return exInfo; //this one already exists.. use it! + } + xName++; + nameOk = !StructureInfos.ContainsKey(xName); + } + + + + inf = new PsoStructureInfo(xName, 0, 2, 8 + structInfo.StructureLength, + new PsoStructureEntryInfo(MetaName.Key, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.Item, PsoDataType.Structure, 8, 0, valType) + ); + + if (!StructureInfos.ContainsKey(xName)) + { + StructureInfos[xName] = inf; + } + + return inf; + + + //switch (valType) + //{ + // case (MetaName)331140115: return PsoTypes.GetStructureInfo((MetaName)257); + // case (MetaName)2046450505: return PsoTypes.GetStructureInfo((MetaName)258); + // case (MetaName)3219912345: return PsoTypes.GetStructureInfo((MetaName)259); + // case (MetaName)0: return PsoTypes.GetStructureInfo(MetaName.ARRAYINFO); + // default: + // return PsoTypes.GetStructureInfo(MetaName.ARRAYINFO);//error? + //} + //case (MetaName)257: + // return new PsoStructureInfo((MetaName)257, 0, 2, 32, + // new PsoStructureEntryInfo(MetaName.Key, PsoDataType.String, 0, 7, 0), + // new PsoStructureEntryInfo(MetaName.Item, PsoDataType.Structure, 8, 0, (MetaName)331140115) + // ); + //case (MetaName)258: + // return new PsoStructureInfo((MetaName)258, 0, 2, 24, + // new PsoStructureEntryInfo(MetaName.Key, PsoDataType.String, 0, 7, 0), + // new PsoStructureEntryInfo(MetaName.Item, PsoDataType.Structure, 8, 0, (MetaName)2046450505) + // ); + //case (MetaName)259: + // return new PsoStructureInfo((MetaName)259, 0, 2, 32, + // new PsoStructureEntryInfo(MetaName.Key, PsoDataType.String, 0, 7, 0), + // new PsoStructureEntryInfo(MetaName.Item, PsoDataType.Structure, 8, 0, (MetaName)3219912345) + // ); + //case (MetaName)3219912345: + // return new PsoStructureInfo((MetaName)3219912345, 0, 0, 24, + // new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2356519750), + // new PsoStructureEntryInfo((MetaName)4147768898, PsoDataType.Array, 8, 0, 0) + // ); + } + + + + + public byte[] GetData() + { + int totlen = 16; + for (int i = 0; i < Blocks.Count; i++) + { + totlen += Blocks[i].TotalSize; + } + byte[] data = new byte[totlen]; + int offset = 16; //reserved space for headers + for (int i = 0; i < Blocks.Count; i++) + { + var block = Blocks[i]; + for (int j = 0; j < block.Items.Count; j++) + { + var bdata = block.Items[j]; + Buffer.BlockCopy(bdata, 0, data, offset, bdata.Length); + offset += bdata.Length; + } + } + if (offset != data.Length) + { } + return data; + } + + + + + + + public PsoFile GetPso() + { + PsoFile pso = new PsoFile(); + pso.SchemaSection = new PsoSchemaSection(); + + var schEntries = new List(); + foreach (var structInfo in StructureInfos.Values) + { + schEntries.Add(structInfo); + } + foreach (var enumInfo in EnumInfos.Values) + { + schEntries.Add(enumInfo); + } + pso.SchemaSection.Entries = schEntries.ToArray(); + pso.SchemaSection.EntriesIdx = new PsoElementIndexInfo[schEntries.Count]; + for (int i = 0; i < schEntries.Count; i++) + { + pso.SchemaSection.EntriesIdx[i] = new PsoElementIndexInfo(); + pso.SchemaSection.EntriesIdx[i].NameHash = schEntries[i].IndexInfo.NameHash; + } + + if (STRFStrings.Count > 0) + { + pso.STRFSection = new PsoSTRFSection(); + pso.STRFSection.Strings = STRFStrings.ToArray(); + } + if (STRSStrings.Count > 0) + { + pso.STRSSection = new PsoSTRSSection(); + pso.STRSSection.Strings = STRSStrings.ToArray(); + } + + + pso.DataSection = new PsoDataSection(); + pso.DataSection.Data = GetData(); + + pso.DataMapSection = new PsoDataMapSection(); + pso.DataMapSection.Entries = new PsoDataMappingEntry[Blocks.Count]; + pso.DataMapSection.RootId = RootPointer.BlockID; + var offset = 16; + for (int i = 0; i < Blocks.Count; i++) + { + var b = Blocks[i]; + var e = new PsoDataMappingEntry(); + e.NameHash = b.StructureNameHash; + e.Length = b.TotalSize; + e.Offset = offset; + offset += b.TotalSize; + pso.DataMapSection.Entries[i] = e; + } + + + + return pso; + } + + } + + + + public class PsoBuilderBlock + { + public MetaName StructureNameHash { get; set; } + public List Items { get; set; } = new List(); + public int TotalSize { get; set; } = 0; + public int Index { get; set; } = 0; + + public int AddItem(byte[] item) + { + int idx = Items.Count; + Items.Add(item); + TotalSize += item.Length; + return idx; + } + + public uint BasePointer + { + get + { + return (((uint)Index + 1) & 0xFFF); + } + } + + + //public MetaDataBlock GetMetaDataBlock() + //{ + // if (TotalSize <= 0) return null; + // byte[] data = new byte[TotalSize]; + // int offset = 0; + // for (int j = 0; j < Items.Count; j++) + // { + // var bdata = Items[j]; + // Buffer.BlockCopy(bdata, 0, data, offset, bdata.Length); + // offset += bdata.Length; + // } + // MetaDataBlock db = new MetaDataBlock(); + // db.StructureNameHash = StructureNameHash; + // db.DataLength = TotalSize; + // db.Data = data; + // return db; + //} + + + } + + public struct PsoBuilderPointer + { + public int BlockID { get; set; } //1-based id + public int Offset { get; set; } //byte offset + public int Length { get; set; } //for temp use... + public uint Pointer + { + get + { + uint bidx = (((uint)BlockID) & 0xFFF); + uint offs = (((uint)Offset) & 0xFFFFF) << 12; + return bidx + offs; + } + } + } + + +} diff --git a/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs b/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs index 83a5c58..8f148ff 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs @@ -647,11 +647,11 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.Probabilities, PsoDataType.Array, 8, 0, 0) ); case (MetaName)2575850962: - return new PsoStructureInfo((MetaName)2575850962, 0, 0, 40, + return new PsoStructureInfo((MetaName)2575850962, 0, 0, 44 /*40*/, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UByte, 0, 0, 0), - new PsoStructureEntryInfo(MetaName.indices, PsoDataType.Array, 8, 4, (MetaName)262144), + new PsoStructureEntryInfo(MetaName.indices, PsoDataType.Array, 8, 4, (MetaName)393216 /*262144*/), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Bool, 0, 0, 0), - new PsoStructureEntryInfo(MetaName.liveries, PsoDataType.Array, 12, 4, (MetaName)1638402) + new PsoStructureEntryInfo(MetaName.liveries, PsoDataType.Array, 14 /*12*/, 4, (MetaName)1966082 /*1638402*/) ); case (MetaName)938618322: return new PsoStructureInfo((MetaName)938618322, 0, 0, 16, @@ -16104,10 +16104,13 @@ namespace CodeWalker.GameFiles var blocki = (int)ptr.PointerDataId;// (ptr.Pointer & 0xFFF) - 1; var offset = (int)ptr.PointerDataOffset;// (ptr.Pointer >> 12) & 0xFFFFF; - var block = pso.GetBlock(blocki); + var block = pso.GetBlock(blocki); //nameHash = 1 if (block == null) { return null; } + //if (block.NameHash != (MetaName)1) + //{ } + var length = ptr.Count1; var lastbyte = offset + length; if (lastbyte >= block.Length) @@ -16133,10 +16136,13 @@ namespace CodeWalker.GameFiles var blocki = (int)ptr.PointerDataId;// (ptr.Pointer & 0xFFF) - 1; var offset = (int)ptr.PointerDataOffset;// (ptr.Pointer >> 12) & 0xFFFFF; - var block = pso.GetBlock(blocki); + var block = pso.GetBlock(blocki); //nameHash = 1 if (block == null) { return null; } + //if (block.NameHash != (MetaName)1) + //{ } + //var length = ptr.Count1; //var lastbyte = offset + length; //if (lastbyte >= block.Length) @@ -16217,6 +16223,13 @@ namespace CodeWalker.GameFiles public uint ItemOffset { get { return ((Pointer>>12) & 0xFFFFF); } } //byte offset + public PsoPOINTER(int blockID, int itemOffset, uint extra) + { + Pointer = (((uint)itemOffset << 12) & 0xFFFFF000) + ((uint)blockID & 0xFFF); + Unk2 = extra; + } + + public override string ToString() { return BlockID.ToString() + ", " + ItemOffset.ToString() + ", " + Unk2.ToString(); diff --git a/CodeWalker.Core/GameFiles/MetaTypes/XmlPso.cs b/CodeWalker.Core/GameFiles/MetaTypes/XmlPso.cs new file mode 100644 index 0000000..6584027 --- /dev/null +++ b/CodeWalker.Core/GameFiles/MetaTypes/XmlPso.cs @@ -0,0 +1,1222 @@ +using SharpDX; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using System.Xml; + +namespace CodeWalker.GameFiles +{ + public class XmlPso + { + + public static PsoFile GetPso(XmlDocument doc) + { + PsoBuilder pb = new PsoBuilder(); + + Traverse(doc.DocumentElement, pb, 0, true); + + var pso = pb.GetPso(); + + return pso; + } + + + + private static byte[] Traverse(XmlNode node, PsoBuilder pb, MetaName type = 0, bool isRoot = false) + { + if (type == 0) + { + type = (MetaName)(uint)GetHash(node.Name); + } + + var infos = PsoTypes.GetStructureInfo(type); + if (infos != null) + { + byte[] data = new byte[infos.StructureLength]; + var arrayResults = new PsoArrayResults(); + + arrayResults.Structures = new Dictionary(); + arrayResults.StructurePointers = new Dictionary(); + arrayResults.UInts = new Dictionary(); + arrayResults.UShorts = new Dictionary(); + arrayResults.UBytes = new Dictionary(); + arrayResults.Floats = new Dictionary(); + arrayResults.Float_XYZs = new Dictionary(); + arrayResults.Hashes = new Dictionary(); + + Array.Clear(data, 0, infos.StructureLength); //shouldn't really be necessary... + + PsoStructureEntryInfo arrEntry = null; + + + //if (isRoot) + //{ + // pb.EnsureBlock(type); + //} + + for (int i = 0; i < infos.Entries.Length; i++) + { + var entry = infos.Entries[i]; + var cnode = GetEntryNode(node.ChildNodes, entry.EntryNameHash); + + if (entry.EntryNameHash == MetaName.ARRAYINFO) + { + arrEntry = entry; + continue; + } + + if (cnode == null) + { + //warning: node not found in XML for this entry! + continue; + } + + switch (entry.Type) + { + case PsoDataType.Array: + { + TraverseArray(cnode, pb, entry, arrEntry, arrayResults, data, infos); + break; + } + case PsoDataType.Structure: + { + var struc = Traverse(cnode, pb, (MetaName)entry.ReferenceKey); + if (struc != null) + { + switch (entry.Unk_5h) + { + default: + //ErrorXml(sb, cind, ename + ": Unexpected Structure subtype: " + entry.Unk_5h.ToString()); + break; + case 0: //default structure + + Buffer.BlockCopy(struc, 0, data, entry.DataOffset, struc.Length); + + break; + case 3: //structure pointer... + case 4: //also pointer? what's the difference? + + var bptr = pb.AddItem((MetaName)entry.ReferenceKey, struc); + var ptr = new PsoPOINTER(bptr.BlockID, bptr.Offset, 0); + ptr.SwapEnd(); + var ptrb = MetaTypes.ConvertToBytes(ptr); + + Buffer.BlockCopy(ptrb, 0, data, entry.DataOffset, ptrb.Length); + + break; + } + } + break; + } + case PsoDataType.Map: + { + TraverseMap(cnode, pb, entry, infos, data, arrayResults); + + break; + } + + case PsoDataType.Bool: + { + byte val = (cnode.Attributes["value"].Value == "false") ? (byte)0 : (byte)1; + data[entry.DataOffset] = val; + break; + } + case PsoDataType.SByte: + { + var val = Convert.ToSByte(cnode.Attributes["value"].Value); + data[entry.DataOffset] = (byte)val; + break; + } + case PsoDataType.UByte: + { + var val = Convert.ToByte(cnode.Attributes["value"].Value); + data[entry.DataOffset] = val; + break; + } + case PsoDataType.SShort: + { + var val = Convert.ToInt16(cnode.Attributes["value"].Value); + Write(val, data, entry.DataOffset); + break; + } + case PsoDataType.UShort: + { + var val = Convert.ToUInt16(cnode.Attributes["value"].Value); + Write(val, data, entry.DataOffset); + break; + } + case PsoDataType.SInt: + { + var val = Convert.ToInt32(cnode.Attributes["value"].Value); + Write(val, data, entry.DataOffset); + break; + } + case PsoDataType.UInt: + { + switch (entry.Unk_5h) + { + default: + //ErrorXml(sb, cind, ename + ": Unexpected Integer subtype: " + entry.Unk_5h.ToString()); + break; + case 0: //signed int (? flags?) + var sval = Convert.ToInt32(cnode.Attributes["value"].Value); + Write(sval, data, entry.DataOffset); + break; + case 1: //unsigned int + var uval = Convert.ToUInt32(cnode.Attributes["value"].Value); + Write(uval, data, entry.DataOffset); + break; + } + + break; + } + case PsoDataType.Float: + { + float val = FloatUtil.Parse(cnode.Attributes["value"].Value); + Write(val, data, entry.DataOffset); + break; + } + case PsoDataType.Float2: + { + float x = FloatUtil.Parse(cnode.Attributes["x"].Value); + float y = FloatUtil.Parse(cnode.Attributes["y"].Value); + Write(x, data, entry.DataOffset); + Write(y, data, entry.DataOffset + sizeof(float)); + break; + } + case PsoDataType.Float3: + { + float x = FloatUtil.Parse(cnode.Attributes["x"].Value); + float y = FloatUtil.Parse(cnode.Attributes["y"].Value); + float z = FloatUtil.Parse(cnode.Attributes["z"].Value); + Write(x, data, entry.DataOffset); + Write(y, data, entry.DataOffset + sizeof(float)); + Write(z, data, entry.DataOffset + sizeof(float) * 2); + break; + } + case PsoDataType.Float4: + { + float x = FloatUtil.Parse(cnode.Attributes["x"].Value); + float y = FloatUtil.Parse(cnode.Attributes["y"].Value); + float z = FloatUtil.Parse(cnode.Attributes["z"].Value); + float w = FloatUtil.Parse(cnode.Attributes["w"].Value); + Write(x, data, entry.DataOffset); + Write(y, data, entry.DataOffset + sizeof(float)); + Write(z, data, entry.DataOffset + sizeof(float) * 2); + Write(w, data, entry.DataOffset + sizeof(float) * 3); + break; + } + case PsoDataType.String: + { + TraverseString(cnode, pb, entry, data); + break; + } + case PsoDataType.Enum: + { + pb.AddEnumInfo((MetaName)entry.ReferenceKey); + switch (entry.Unk_5h) + { + default: + //ErrorXml(sb, cind, ename + ": Unexpected Enum subtype: " + entry.Unk_5h.ToString()); + break; + case 0: //int enum + int ival = GetEnumInt((MetaName)entry.ReferenceKey, cnode.InnerText, entry.Type); + Write(ival, data, entry.DataOffset); + break; + case 1: //short enum? + short sval = (short)GetEnumInt((MetaName)entry.ReferenceKey, cnode.InnerText, entry.Type); + Write(sval, data, entry.DataOffset); + break; + case 2: //byte enum + byte bval = (byte)GetEnumInt((MetaName)entry.ReferenceKey, cnode.InnerText, entry.Type); + data[entry.DataOffset] = bval; + break; + } + break; + } + case PsoDataType.Flags: + { + //uint fCount = (entry.ReferenceKey >> 16) & 0x0000FFFF; + uint fEntry = (entry.ReferenceKey & 0xFFF); + var fEnt = (fEntry != 0xFFF) ? infos.GetEntry((int)fEntry) : null; + PsoEnumInfo flagsInfo = null; + MetaName fEnum = (MetaName)(fEnt?.ReferenceKey ?? 0); + if ((fEnt != null) && (fEnt.EntryNameHash == MetaName.ARRAYINFO)) + { + flagsInfo = PsoTypes.GetEnumInfo(fEnum); + } + if (flagsInfo == null) + { + if (fEntry != 0xFFF) + { } + //flagsInfo = PsoTypes.GetEnumInfo(entry.EntryNameHash); + } + if (flagsInfo != null) + { + pb.AddEnumInfo(flagsInfo.IndexInfo.NameHash); + } + else + { }//error? + + switch (entry.Unk_5h) + { + default: + //ErrorXml(sb, cind, ename + ": Unexpected Flags subtype: " + entry.Unk_5h.ToString()); + break; + case 0: //int flags + int ival = GetEnumInt(fEnum, cnode.InnerText, entry.Type); + Write(ival, data, entry.DataOffset); + break; + case 1: //short flags + short sval = (short)GetEnumInt(fEnum, cnode.InnerText, entry.Type); + Write(sval, data, entry.DataOffset); + break; + case 2: //byte flags + byte bval = (byte)GetEnumInt(fEnum, cnode.InnerText, entry.Type); + data[entry.DataOffset] = bval; + break; + } + break; + } + case PsoDataType.Float3a: + { + float x = FloatUtil.Parse(cnode.Attributes["x"].Value); + float y = FloatUtil.Parse(cnode.Attributes["y"].Value); + float z = FloatUtil.Parse(cnode.Attributes["z"].Value); + Write(x, data, entry.DataOffset); + Write(y, data, entry.DataOffset + sizeof(float)); + Write(z, data, entry.DataOffset + sizeof(float) * 2); + break; + } + case PsoDataType.Float4a: + { + float x = FloatUtil.Parse(cnode.Attributes["x"].Value); + float y = FloatUtil.Parse(cnode.Attributes["y"].Value); + float z = FloatUtil.Parse(cnode.Attributes["z"].Value); + //float w = FloatUtil.Parse(cnode.Attributes["w"].Value); + Write(x, data, entry.DataOffset); + Write(y, data, entry.DataOffset + sizeof(float)); + Write(z, data, entry.DataOffset + sizeof(float) * 2); + //Write(w, data, entry.DataOffset + sizeof(float) * 3); + break; + } + case PsoDataType.HFloat: + { + var val = Convert.ToInt16(cnode.Attributes["value"].Value); + Write(val, data, entry.DataOffset); + break; + } + case PsoDataType.Long: + { + var uval = Convert.ToUInt64(cnode.Attributes["value"].Value); + Write(uval, data, entry.DataOffset); + break; + } + + + default: + break; + + } + + + } + + + arrayResults.WriteArrays(data); + + pb.AddStructureInfo(infos.IndexInfo.NameHash); + + if (isRoot) + { + pb.RootPointer = pb.AddItem(type, data); + } + + return data; + + } + + return null; + } + + private static void TraverseMap(XmlNode node, PsoBuilder pb, PsoStructureEntryInfo entry, PsoStructureInfo infos, byte[] data, PsoArrayResults arrayResults) + { + var mapidx1 = entry.ReferenceKey & 0x0000FFFF; + var mapidx2 = (entry.ReferenceKey >> 16) & 0x0000FFFF; + var mapreftype1 = infos.Entries[mapidx2]; + var mapreftype2 = infos.Entries[mapidx1]; + + if (mapreftype2.ReferenceKey != 0) + { } + + var xStruct = pb.AddMapNodeStructureInfo((MetaName)mapreftype2.ReferenceKey); + var xName = xStruct.IndexInfo.NameHash; + var kEntry = xStruct?.FindEntry(MetaName.Key); + var iEntry = xStruct?.FindEntry(MetaName.Item); + + if (kEntry.Type != PsoDataType.String) + { } + + + + List nodesData = new List(); + + foreach (XmlNode cnode in node.ChildNodes) + { + var kattr = cnode.Attributes["key"].Value; + var tattr = cnode.Attributes["type"].Value;//CW invention for convenience..! + var khash = (MetaName)(uint)GetHash(kattr); + var thash = (MetaName)(uint)GetHash(tattr); + + byte[] strucBytes = Traverse(cnode, pb, thash); + byte[] nodeBytes = new byte[xStruct.StructureLength]; + + TraverseStringRaw(kattr, pb, kEntry, nodeBytes); //write the key + + if (xName != MetaName.ARRAYINFO)// (mapreftype2.ReferenceKey != 0) + { + //value struct embedded in ARRAYINFO node + Buffer.BlockCopy(strucBytes, 0, nodeBytes, iEntry.DataOffset, strucBytes.Length); + } + else + { + //normal ARRAYINFO with pointer value + var itemptr = pb.AddItemPtr(thash, strucBytes); + itemptr.SwapEnd(); //big schmigg + var ptrbytes = MetaTypes.ConvertToBytes(itemptr); + Buffer.BlockCopy(ptrbytes, 0, nodeBytes, iEntry.DataOffset, ptrbytes.Length); + } + + nodesData.Add(nodeBytes); + + } + + + + Write(0x1000000, data, entry.DataOffset); + Write(0, data, entry.DataOffset + 4); + + arrayResults.Structures[entry.DataOffset + 8] = pb.AddItemArrayPtr(xName, nodesData.ToArray()); //pb.AddPointerArray(nodeptrs); + } + + private static void TraverseArray(XmlNode node, PsoBuilder pb, PsoStructureEntryInfo entry, PsoStructureEntryInfo arrEntry, PsoArrayResults results, byte[] data, PsoStructureInfo structInfo) + { + int offset = entry.DataOffset; + uint aCount = (entry.ReferenceKey >> 16) & 0x0000FFFF; + uint aPtr = (entry.ReferenceKey) & 0x0000FFFF; + byte[] adata = null; + + //how do we know when it's an "embedded" array? + bool embedded = true; + switch (entry.Unk_5h) + { + default: + //ErrorXml(sb, indent, ename + ": WIP! Unsupported Array subtype: " + entry.Unk_5h.ToString()); + break; + case 0: //Array_Structure + //var arrStruc = MetaTypes.ConvertData(data, eoffset); + embedded = false; + break; + case 1: //Raw in-line array + break; + case 2: //also raw in-line array, but how different from above? + break; + case 4: //pointer array? default array? + if (arrEntry.Unk_5h == 3) //pointers... + { + //var arrStruc4 = MetaTypes.ConvertData(data, eoffset); + embedded = false; + } + else + { + } + break; + case 129: //also raw inline array? in junctions.pso (AutoJunctionAdjustments) + break; + } + + + + + switch (arrEntry.Type) + { + case PsoDataType.Structure: + { + if (embedded) + { + if (arrEntry.ReferenceKey != 0) + { + var datas = TraverseArrayStructureRaw(node, pb, (MetaName)arrEntry.ReferenceKey); + int aoffset = offset; + for (int i = 0; i < datas.Length; i++) + { + Buffer.BlockCopy(datas[i], 0, data, aoffset, datas[i].Length); + aoffset += datas[i].Length; + } + } + else + { + var ptrs = TraverseArrayStructurePointerRaw(node, pb); + adata = MetaTypes.ConvertArrayToBytes(ptrs); + } + } + else + { + if (arrEntry.ReferenceKey != 0) + { + results.Structures[offset] = TraverseArrayStructure(node, pb, (MetaName)arrEntry.ReferenceKey); + } + else + { + results.StructurePointers[offset] = TraverseArrayStructurePointer(node, pb); + } + } + break; + } + + case PsoDataType.Float2: + { + var arr = TraverseVector2ArrayRaw(node); + if (embedded) + { + adata = MetaTypes.ConvertArrayToBytes(arr); + aCount *= 8; + } + else + { + results.Float_XYZs[offset] = pb.AddVector2ArrayPtr(arr); + } + break; + } + case PsoDataType.Float3: + { + var arr = TraverseVector3ArrayRaw(node); + if (embedded) + { + adata = MetaTypes.ConvertArrayToBytes(arr); + aCount *= 16; + } + else + { + results.Float_XYZs[offset] = pb.AddPaddedVector3ArrayPtr(arr); + } + break; + } + case PsoDataType.UByte: + { + var arr = TraverseUByteArrayRaw(node); + if (embedded) + { + adata = arr; + } + else + { + results.UBytes[offset] = pb.AddByteArrayPtr(arr); + } + break; + } + case PsoDataType.Bool: + { + var arr = TraverseUByteArrayRaw(node); + if (embedded) + { + adata = arr; + } + else + { + results.UBytes[offset] = pb.AddByteArrayPtr(arr); + } + break; + } + case PsoDataType.UInt: + { + var arr = TraverseUIntArrayRaw(node); + if (embedded) + { + adata = MetaTypes.ConvertArrayToBytes(arr); + aCount *= 4; + } + else + { + results.UInts[offset] = pb.AddUIntArrayPtr(arr); + } + break; + } + case PsoDataType.SInt: + { + var arr = TraverseSIntArrayRaw(node); + if (embedded) + { + adata = MetaTypes.ConvertArrayToBytes(arr); + aCount *= 4; + } + else + { + results.UInts[offset] = pb.AddSIntArrayPtr(arr); + } + break; + } + case PsoDataType.Float: + { + var arr = TraverseFloatArrayRaw(node); + if (embedded) + { + adata = MetaTypes.ConvertArrayToBytes(arr); + aCount *= 4; + } + else + { + results.Floats[offset] = pb.AddFloatArrayPtr(arr); + } + break; + } + case PsoDataType.UShort: + { + var arr = TraverseUShortArrayRaw(node); + if (embedded) + { + adata = MetaTypes.ConvertArrayToBytes(arr); + aCount *= 2; + } + else + { + results.UShorts[offset] = pb.AddUShortArrayPtr(arr); + } + break; + } + + case PsoDataType.String: + { + switch (entry.Unk_5h) + { + default: + //ErrorXml(sb, indent, ename + ": Unexpected String array subtype: " + entry.Unk_5h.ToString()); + break; + case 0: //hash array... + var hashes = TraverseHashArrayRaw(node); + if (embedded) + { + adata = MetaTypes.ConvertArrayToBytes(hashes); + aCount *= 4; + } + else + { + results.Hashes[offset] = pb.AddHashArrayPtr(hashes); + } + break; + } + + + break; + } + + + case PsoDataType.Enum: + { + var hashes = TraverseHashArrayRaw(node); + + if (arrEntry.ReferenceKey != 0) + { + var _infos = PsoTypes.GetEnumInfo((MetaName)arrEntry.ReferenceKey); + pb.AddEnumInfo(_infos.IndexInfo.NameHash); + + var values = new uint[hashes.Length]; + for (int i = 0; i < hashes.Length; i++) + { + var enumname = (MetaName)MetaTypes.SwapBytes(hashes[i]);//yeah swap it back to little endian..! + var enuminf = _infos.FindEntryByName(enumname); + if (enuminf != null) + { + values[i] = MetaTypes.SwapBytes((uint)enuminf.EntryKey); + } + else + { } //error? + } + + if (embedded) + { } //TODO? + else + { + results.UInts[offset] = pb.AddUIntArrayPtr(values); + } + + } + else + { } + + + break; + } + + + case PsoDataType.Array: + { + //array array... + var rk0 = (entry.ReferenceKey >> 16) & 0x0000FFFF; + var rk1 = arrEntry.ReferenceKey & 0x0000FFFF; + if (rk0 > 0) //should be count of items + { + var subarrEntry = structInfo.GetEntry((int)rk1); + var subarrType = (MetaName)subarrEntry.ReferenceKey; + + var origOffset = arrEntry.DataOffset; + arrEntry.DataOffset = entry.DataOffset;//slight hack for traversing array array + foreach (XmlNode cnode in node.ChildNodes) + { + TraverseArray(cnode, pb, arrEntry, subarrEntry, results, data, structInfo); + + arrEntry.DataOffset += 16;//ptr size... todo: what if not pointer array? + } + arrEntry.DataOffset = origOffset; + + + } + + + break; + } + + + + + default: + break; + } + + if (embedded) + { + if (adata?.Length > 0) + { + if (adata.Length > aCount) + { }//bad! old data won't fit in new slot... + + Buffer.BlockCopy(adata, 0, data, offset, adata.Length); + } + else + { } + } + } + + private static void TraverseString(XmlNode node, PsoBuilder pb, PsoStructureEntryInfo entry, byte[] data) + { + TraverseStringRaw(node.InnerText, pb, entry, data); + } + private static void TraverseStringRaw(string str, PsoBuilder pb, PsoStructureEntryInfo entry, byte[] data) + { + switch (entry.Unk_5h) + { + default: + break; + case 0: + var str0len = (int)((entry.ReferenceKey >> 16) & 0xFFFF); + if (!string.IsNullOrEmpty(str)) + { + byte[] strdata = Encoding.ASCII.GetBytes(str); + Buffer.BlockCopy(strdata, 0, data, entry.DataOffset, strdata.Length); + if (strdata.Length > str0len) + { } + } + break; + case 1: + case 2: + if (!string.IsNullOrEmpty(str)) + { + var bptr = pb.AddString(str); + var ptr = new PsoPOINTER(bptr.BlockID, bptr.Offset, 0); + ptr.SwapEnd(); + var val = MetaTypes.ConvertToBytes(ptr); + Buffer.BlockCopy(val, 0, data, entry.DataOffset, val.Length); + } + break; + case 3: + if (!string.IsNullOrEmpty(str)) + { + var bptr = pb.AddString(str); + var ptr = new CharPointer(bptr.Pointer, str.Length); + ptr.SwapEnd(); + var val = MetaTypes.ConvertToBytes(ptr); + Buffer.BlockCopy(val, 0, data, entry.DataOffset, val.Length); + } + break; + case 7://hash only? + case 8://hash with STRF entry? + + var hashVal = string.IsNullOrEmpty(str) ? 0 : GetHash(str); + Write(hashVal, data, entry.DataOffset); + + if (entry.Unk_5h == 8) + { + pb.AddStringToSTRF(str); + } + break; + } + } + + + private static byte[][] TraverseArrayStructureRaw(XmlNode node, PsoBuilder pb, MetaName type) + { + var strucs = new List(); + + foreach (XmlNode cnode in node.ChildNodes) + { + var struc = Traverse(cnode, pb, type); + + if (struc != null) + { + strucs.Add(struc); + } + } + + return strucs.ToArray(); + } + private static Array_Structure TraverseArrayStructure(XmlNode node, PsoBuilder pb, MetaName type) + { + var bytes = TraverseArrayStructureRaw(node, pb, type); + + return pb.AddItemArrayPtr(type, bytes); + } + + private static PsoPOINTER[] TraverseArrayStructurePointerRaw(XmlNode node, PsoBuilder pb) + { + var ptrs = new List(); + + foreach (XmlNode cnode in node.ChildNodes) + { + var type = (MetaName)(uint)GetHash(cnode.Attributes["type"]?.Value ?? ""); + if (type != 0) + { + var struc = Traverse(cnode, pb, type); + + if (struc != null) + { + var ptr = pb.AddItemPtr(type, struc); + ptr.SwapEnd(); //big schmigg + ptrs.Add(ptr); + } + else + { } //error? + } + else + { + ptrs.Add(new PsoPOINTER());//null value? + } + } + + return ptrs.ToArray(); + } + private static Array_StructurePointer TraverseArrayStructurePointer(XmlNode node, PsoBuilder pb) + { + var ptrs = TraverseArrayStructurePointerRaw(node, pb); + + return pb.AddPointerArray(ptrs); + + } + + private static int[] TraverseSIntArrayRaw(XmlNode node) + { + var data = new List(); + + if (node.InnerText != "") + { + var split = Regex.Split(node.InnerText, @"[\s\r\n\t]"); + + for (int i = 0; i < split.Length; i++) + { + if (!string.IsNullOrEmpty(split[i])) + { + var val = Convert.ToInt32(split[i]); + data.Add(MetaTypes.SwapBytes(val)); + } + + } + } + + return data.ToArray(); + } + private static uint[] TraverseUIntArrayRaw(XmlNode node) + { + var data = new List(); + + if (node.InnerText != "") + { + var split = Regex.Split(node.InnerText, @"[\s\r\n\t]"); + + for (int i = 0; i < split.Length; i++) + { + if (!string.IsNullOrEmpty(split[i])) + { + var val = Convert.ToUInt32(split[i]); + data.Add(MetaTypes.SwapBytes(val)); + } + + } + } + + return data.ToArray(); + } + private static byte[] TraverseUByteArrayRaw(XmlNode node) + { + var data = new List(); + + if (node.InnerText != "") + { + var split = Regex.Split(node.InnerText, @"[\s\r\n\t]"); + + for (int i = 0; i < split.Length; i++) + { + if (!string.IsNullOrEmpty(split[i])) + { + var val = Convert.ToByte(split[i]); + data.Add(val); + } + } + } + + return data.ToArray(); + } + private static ushort[] TraverseUShortArrayRaw(XmlNode node) + { + var data = new List(); + + if (node.InnerText != "") + { + var split = Regex.Split(node.InnerText, @"[\s\r\n\t]"); + + for (int i = 0; i < split.Length; i++) + { + if (!string.IsNullOrEmpty(split[i])) + { + var val = Convert.ToUInt16(split[i]); + data.Add(MetaTypes.SwapBytes(val)); + } + + } + } + + return data.ToArray(); + } + private static float[] TraverseFloatArrayRaw(XmlNode node) + { + var data = new List(); + + if (node.InnerText != "") + { + var split = Regex.Split(node.InnerText, @"[\s\r\n\t]"); + + for (int i = 0; i < split.Length; i++) + { + if (!string.IsNullOrEmpty(split[i])) + { + var val = FloatUtil.Parse(split[i]); + data.Add(MetaTypes.SwapBytes(val)); + } + + } + } + + return data.ToArray(); + } + private static Vector4[] TraverseVector3ArrayRaw(XmlNode node) + { + var items = new List(); + + + var split = node.InnerText.Split('\n');// Regex.Split(node.InnerText, @"[\s\r\n\t]"); + + + float x = 0f; + float y = 0f; + float z = 0f; + float w = 0f; + + for (int i = 0; i < split.Length; i++) + { + var s = split[i]?.Trim(); + if (string.IsNullOrEmpty(s)) continue; + var split2 = Regex.Split(s, @"[\s\t]"); + int c = 0; + x = 0f; y = 0f; z = 0f; + for (int n = 0; n < split2.Length; n++) + { + var ts = split2[n]?.Trim(); + if (ts.EndsWith(",")) ts = ts.Substring(0, ts.Length - 1); + if (string.IsNullOrEmpty(ts)) continue; + var f = FloatUtil.Parse(ts); + switch (c) + { + case 0: x = f; break; + case 1: y = f; break; + case 2: z = f; break; + } + c++; + } + if (c >= 3) + { + var val = new Vector4(x, y, z, w); + items.Add(MetaTypes.SwapBytes(val)); //big schmig + } + } + + + return items.ToArray(); + } + private static Vector2[] TraverseVector2ArrayRaw(XmlNode node) + { + var items = new List(); + + + var split = node.InnerText.Split('\n');// Regex.Split(node.InnerText, @"[\s\r\n\t]"); + + + float x = 0f; + float y = 0f; + + for (int i = 0; i < split.Length; i++) + { + var s = split[i]?.Trim(); + if (string.IsNullOrEmpty(s)) continue; + var split2 = Regex.Split(s, @"[\s\t]"); + int c = 0; + x = 0f; y = 0f; + for (int n = 0; n < split2.Length; n++) + { + var ts = split2[n]?.Trim(); + if (ts.EndsWith(",")) ts = ts.Substring(0, ts.Length - 1); + if (string.IsNullOrEmpty(ts)) continue; + var f = FloatUtil.Parse(ts); + switch (c) + { + case 0: x = f; break; + case 1: y = f; break; + } + c++; + } + if (c >= 3) + { + var val = new Vector2(x, y); + items.Add(MetaTypes.SwapBytes(val)); //big schmig + } + } + + + return items.ToArray(); + } + private static MetaHash[] TraverseHashArrayRaw(XmlNode node) + { + var items = new List(); + + foreach (XmlNode cnode in node.ChildNodes) + { + var val = GetHash(cnode.InnerText); + items.Add(MetaTypes.SwapBytes(val)); + } + + return items.ToArray(); + } + + + + + private static void Write(int val, byte[] data, int offset) + { + byte[] bytes = BitConverter.GetBytes(MetaTypes.SwapBytes(val)); + Buffer.BlockCopy(bytes, 0, data, offset, sizeof(int)); + } + + private static void Write(uint val, byte[] data, int offset) + { + byte[] bytes = BitConverter.GetBytes(MetaTypes.SwapBytes(val)); + Buffer.BlockCopy(bytes, 0, data, offset, sizeof(uint)); + } + + private static void Write(short val, byte[] data, int offset) + { + byte[] bytes = BitConverter.GetBytes(MetaTypes.SwapBytes(val)); + Buffer.BlockCopy(bytes, 0, data, offset, sizeof(short)); + } + + private static void Write(ushort val, byte[] data, int offset) + { + byte[] bytes = BitConverter.GetBytes(MetaTypes.SwapBytes(val)); + Buffer.BlockCopy(bytes, 0, data, offset, sizeof(ushort)); + } + + private static void Write(float val, byte[] data, int offset) + { + byte[] bytes = BitConverter.GetBytes(MetaTypes.SwapBytes(val));//big fkn end + Buffer.BlockCopy(bytes, 0, data, offset, sizeof(float)); + } + + private static void Write(ulong val, byte[] data, int offset) + { + byte[] bytes = BitConverter.GetBytes(MetaTypes.SwapBytes(val)); + Buffer.BlockCopy(bytes, 0, data, offset, sizeof(ulong)); + } + + private static MetaHash GetHash(string str) + { + if (str.StartsWith("hash_")) + { + return (MetaHash)Convert.ToUInt32(str.Substring(5), 16); + } + else + { + return JenkHash.GenHash(str); + } + } + + private static XmlNode GetEntryNode(XmlNodeList nodes, MetaName name) + { + foreach (XmlNode node in nodes) + { + if (GetHash(node.Name) == (uint)name) + { + return node; + } + } + return null; + } + + + private static int GetEnumInt(MetaName type, string enumString, PsoDataType dataType) + { + var infos = PsoTypes.GetEnumInfo(type); + + if (infos == null) + { + return 0; + } + + + bool isFlags = (dataType == PsoDataType.Flags);// || + //(dataType == PsoDataType.IntFlags2);// || + //(dataType == PsoDataType.ShortFlags); + + if (isFlags) + { + //flags enum. (multiple values, comma-separated) + var split = enumString.Split(new[] { ',' ,' '}, StringSplitOptions.RemoveEmptyEntries); + int enumVal = 0; + + for (int i = 0; i < split.Length; i++) + { + var enumName = (MetaName)(uint)GetHash(split[i].Trim()); + + for (int j = 0; j < infos.Entries.Length; j++) + { + var entry = infos.Entries[j]; + if (entry.EntryNameHash == enumName) + { + enumVal += (1 << entry.EntryKey); + break; + } + } + } + + return enumVal; + } + else + { + //single value enum. + + var enumName = (MetaName)(uint)GetHash(enumString); + + for (int j = 0; j < infos.Entries.Length; j++) + { + var entry = infos.Entries[j]; + + if (entry.EntryNameHash == enumName) + { + return entry.EntryKey; + } + } + } + + return -1; + } + + } + + struct PsoArrayResults + { + public Dictionary Structures; + public Dictionary StructurePointers; + public Dictionary UInts; + public Dictionary UShorts; + public Dictionary UBytes; + public Dictionary Floats; + public Dictionary Float_XYZs; + public Dictionary Hashes; + + public void WriteArrays(byte[] data) + { + foreach (KeyValuePair ptr in Structures) + { + var val = ptr.Value; + val.SwapEnd(); + var _data = MetaTypes.ConvertToBytes(val); + Buffer.BlockCopy(_data, 0, data, ptr.Key, _data.Length); + } + + foreach (KeyValuePair ptr in StructurePointers) + { + var val = ptr.Value; + val.SwapEnd(); + var _data = MetaTypes.ConvertToBytes(val); + Buffer.BlockCopy(_data, 0, data, ptr.Key, _data.Length); + } + + foreach (KeyValuePair ptr in UInts) + { + var val = ptr.Value; + val.SwapEnd(); + var _data = MetaTypes.ConvertToBytes(val); + Buffer.BlockCopy(_data, 0, data, ptr.Key, _data.Length); + } + + foreach (KeyValuePair ptr in UShorts) + { + var val = ptr.Value; + val.SwapEnd(); + var _data = MetaTypes.ConvertToBytes(val); + Buffer.BlockCopy(_data, 0, data, ptr.Key, _data.Length); + } + + foreach (KeyValuePair ptr in UBytes) + { + var val = ptr.Value; + val.SwapEnd(); + var _data = MetaTypes.ConvertToBytes(val); + Buffer.BlockCopy(_data, 0, data, ptr.Key, _data.Length); + } + + foreach (KeyValuePair ptr in Floats) + { + var val = ptr.Value; + val.SwapEnd(); + var _data = MetaTypes.ConvertToBytes(val); + Buffer.BlockCopy(_data, 0, data, ptr.Key, _data.Length); + } + + foreach (KeyValuePair ptr in Float_XYZs) + { + var val = ptr.Value; + val.SwapEnd(); + var _data = MetaTypes.ConvertToBytes(val); + Buffer.BlockCopy(_data, 0, data, ptr.Key, _data.Length); + } + + foreach (KeyValuePair ptr in Hashes) + { + var val = ptr.Value; + val.SwapEnd(); + var _data = MetaTypes.ConvertToBytes(val); + Buffer.BlockCopy(_data, 0, data, ptr.Key, _data.Length); + } + } + } + +} diff --git a/ExploreForm.cs b/ExploreForm.cs index 1fc911e..efe0d4c 100644 --- a/ExploreForm.cs +++ b/ExploreForm.cs @@ -2251,6 +2251,8 @@ namespace CodeWalker var fi = new FileInfo(fpath); var fname = fi.Name; var fnamel = fname.ToLowerInvariant(); + var mformat = MetaFormat.RSC; + var trimlength = 4; if (!fnamel.EndsWith(".xml")) { @@ -2259,8 +2261,8 @@ namespace CodeWalker } if (fnamel.EndsWith(".pso.xml")) { - MessageBox.Show(fname + ": PSO XML import not yet supported.", "Cannot import XML"); - continue; + mformat = MetaFormat.PSO; + trimlength = 8; } if (fnamel.EndsWith(".rbf.xml")) { @@ -2268,8 +2270,8 @@ namespace CodeWalker continue; } - fname = fname.Substring(0, fname.Length - 4); - fnamel = fnamel.Substring(0, fnamel.Length - 4); + fname = fname.Substring(0, fname.Length - trimlength); + fnamel = fnamel.Substring(0, fnamel.Length - trimlength); var doc = new XmlDocument(); string text = File.ReadAllText(fpath); @@ -2278,21 +2280,46 @@ namespace CodeWalker doc.LoadXml(text); } - var meta = XmlMeta.GetMeta(doc); + byte[] data = null; - - if ((meta.DataBlocks?.Data == null) || (meta.DataBlocks.Count == 0)) + switch (mformat) { - MessageBox.Show(fname + ": Schema not supported.", "Cannot import XML"); - continue; + case MetaFormat.RSC: + { + var meta = XmlMeta.GetMeta(doc); + if ((meta.DataBlocks?.Data == null) || (meta.DataBlocks.Count == 0)) + { + MessageBox.Show(fname + ": Schema not supported.", "Cannot import Meta XML"); + continue; + } + data = ResourceBuilder.Build(meta, 2); //meta is RSC V:2 + break; + } + case MetaFormat.PSO: + { + var pso = XmlPso.GetPso(doc); + if ((pso.DataSection == null) || (pso.DataMapSection == null) || (pso.SchemaSection == null)) + { + MessageBox.Show(fname + ": Schema not supported.", "Cannot import PSO XML"); + continue; + } + data = pso.Save(); + break; + } + case MetaFormat.RBF: + { + //todo! + break; + } } - byte[] data = ResourceBuilder.Build(meta, 2); //meta is RSC V:2 + if (data != null) + { + RpfFile.CreateFile(parentrpffldr, fname, data); + } - RpfFile.CreateFile(parentrpffldr, fname, data); - } #if !DEBUG catch (Exception ex) diff --git a/Forms/MetaForm.cs b/Forms/MetaForm.cs index 3076493..bc8db25 100644 --- a/Forms/MetaForm.cs +++ b/Forms/MetaForm.cs @@ -350,8 +350,14 @@ namespace CodeWalker.Forms data = ResourceBuilder.Build(meta, 2); //meta is RSC "Version":2 (it's actually a type identifier, not a version!) break; case MetaFormat.PSO: - MessageBox.Show("Sorry, PSO import is not supported yet.", "Cannot import PSO XML"); - return false; + var pso = XmlPso.GetPso(doc); + if ((pso.DataSection == null) || (pso.DataMapSection == null) || (pso.SchemaSection == null)) + { + MessageBox.Show("Schema not supported.", "Cannot import PSO XML"); + return false; + } + data = pso.Save(); + break; case MetaFormat.RBF: MessageBox.Show("Sorry, RBF import is not supported.", "Cannot import RBF XML"); return false; From cd9b54b3b8751c0097df295e15cb8cff8cf28693 Mon Sep 17 00:00:00 2001 From: dexy Date: Thu, 20 Dec 2018 13:38:39 +1100 Subject: [PATCH 045/158] Fixed file corruption when saving ytyps with CMloTimeCycleModifiers --- .../GameFiles/FileTypes/YtypFile.cs | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/YtypFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YtypFile.cs index 7160363..5911783 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YtypFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YtypFile.cs @@ -90,7 +90,7 @@ namespace CodeWalker.GameFiles m._MloArchetypeDef._MloArchetypeDef.rooms = mb.AddWrapperArray(m.rooms); m._MloArchetypeDef._MloArchetypeDef.portals = mb.AddWrapperArray(m.portals); m._MloArchetypeDef._MloArchetypeDef.entitySets = mb.AddWrapperArray(m.entitySets); - m._MloArchetypeDef._MloArchetypeDef.timeCycleModifiers = mb.AddItemArrayPtr(MetaName.CTimeCycleModifier, m.timeCycleModifiers); + m._MloArchetypeDef._MloArchetypeDef.timeCycleModifiers = mb.AddItemArrayPtr(MetaName.CMloTimeCycleModifier, m.timeCycleModifiers); } catch/* (Exception e)*/ { @@ -126,19 +126,22 @@ namespace CodeWalker.GameFiles mapTypes.dependencies = new Array_uint(); // is this never used? possibly a todo? mb.AddStructureInfo(MetaName.CMapTypes); - mb.AddStructureInfo(MetaName.CBaseArchetypeDef); - mb.AddStructureInfo(MetaName.CMloArchetypeDef); - mb.AddStructureInfo(MetaName.CTimeArchetypeDef); - mb.AddStructureInfo(MetaName.CCompositeEntityType); - mb.AddStructureInfo(MetaName.CMloRoomDef); - mb.AddStructureInfo(MetaName.CMloPortalDef); - mb.AddStructureInfo(MetaName.CMloEntitySet); if ((AllArchetypes != null && AllArchetypes.Length > 0)) { + mb.AddStructureInfo(MetaName.CBaseArchetypeDef); mb.AddEnumInfo((MetaName)1991964615); // ASSET_TYPE_ } + if ((AllArchetypes != null) && (AllArchetypes.Any(x => x is MloArchetype))) + { + mb.AddStructureInfo(MetaName.CMloArchetypeDef); + mb.AddStructureInfo(MetaName.CMloRoomDef); + mb.AddStructureInfo(MetaName.CMloPortalDef); + mb.AddStructureInfo(MetaName.CMloEntitySet); + mb.AddStructureInfo(MetaName.CMloTimeCycleModifier); + } + if ((AllArchetypes != null) && (AllArchetypes.Any(x => x is MloArchetype m && m.entities.Length > 0))) { mb.AddStructureInfo(MetaName.CEntityDef); @@ -146,6 +149,17 @@ namespace CodeWalker.GameFiles mb.AddEnumInfo((MetaName)648413703); //PRI_ } + if ((AllArchetypes != null) && (AllArchetypes.Any(x => x is TimeArchetype))) + { + mb.AddStructureInfo(MetaName.CTimeArchetypeDef); + } + + if (CompositeEntityTypes?.Length > 0) + { + mb.AddStructureInfo(MetaName.CCompositeEntityType); + } + + mb.AddItem(MetaName.CMapTypes, mapTypes); Meta meta = mb.GetMeta(); From f2c2bba99d3e41e9d5611d0aa8757911e63682b2 Mon Sep 17 00:00:00 2001 From: dexy Date: Thu, 20 Dec 2018 20:52:42 +1100 Subject: [PATCH 046/158] Added some MetaNames hashes --- .../GameFiles/MetaTypes/MetaNames.cs | 57 ++++++- .../GameFiles/MetaTypes/PsoBuilder.cs | 8 +- .../GameFiles/MetaTypes/PsoTypes.cs | 140 +++++++++--------- 3 files changed, 126 insertions(+), 79 deletions(-) diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs index 33f366d..b62df9e 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs @@ -195,8 +195,24 @@ namespace CodeWalker.GameFiles BONETAG_INVALID = 3548260605, BONETAG_L_CALF = 4031667174, BONETAG_L_CLAVICLE = 3253512823, + BONETAG_L_FINGER0 = 3483436254, + BONETAG_L_FINGER01 = 3342631108, + BONETAG_L_FINGER02 = 2503351480, + BONETAG_L_FINGER1 = 986241836, + BONETAG_L_FINGER11 = 2527500201, + BONETAG_L_FINGER12 = 4250526990, + BONETAG_L_FINGER2 = 1293713363, + BONETAG_L_FINGER21 = 3526758439, BONETAG_L_FINGER22 = 222561854, + BONETAG_L_FINGER3 = 858967036, + BONETAG_L_FINGER31 = 3236167907, + BONETAG_L_FINGER32 = 2527702127, + BONETAG_L_FINGER4 = 1149791911, + BONETAG_L_FINGER41 = 3182656438, + BONETAG_L_FINGER42 = 4127878243, BONETAG_L_FOOT = 1655517369, + BONETAG_L_TOE = 3734897948, + BONETAG_L_TOE1 = 2497263744, BONETAG_L_FOREARM = 2583642279, BONETAG_L_HAND = 3058573909, BONETAG_L_PH_HAND = 2994337423, @@ -208,8 +224,24 @@ namespace CodeWalker.GameFiles BONETAG_PELVIS1 = 2070754819, BONETAG_R_CALF = 1591530804, BONETAG_R_CLAVICLE = 623050371, + BONETAG_R_FINGER0 = 2544970273, + BONETAG_R_FINGER01 = 1005591915, + BONETAG_R_FINGER02 = 774537696, + BONETAG_R_FINGER1 = 4262590177, + BONETAG_R_FINGER11 = 557114589, + BONETAG_R_FINGER12 = 308168496, + BONETAG_R_FINGER2 = 2082763528, + BONETAG_R_FINGER21 = 2175091220, BONETAG_R_FINGER22 = 1557592184, + BONETAG_R_FINGER3 = 1358503090, + BONETAG_R_FINGER31 = 1281645843, + BONETAG_R_FINGER32 = 2136457977, + BONETAG_R_FINGER4 = 1589098543, + BONETAG_R_FINGER41 = 1518893755, + BONETAG_R_FINGER42 = 2295060289, BONETAG_R_FOOT = 3872946345, + BONETAG_R_TOE = 1201239981, + BONETAG_R_TOE1 = 3004057651, BONETAG_R_FOREARM = 3269208355, BONETAG_R_HAND = 1128649107, BONETAG_R_PH_HAND = 1835505437, @@ -221,8 +253,12 @@ namespace CodeWalker.GameFiles BONETAG_SPINE1 = 2239149219, BONETAG_SPINE2 = 740327916, BONETAG_SPINE3 = 2718199230, + BONETAG_TAIL0 = 981146734, BONETAG_TAIL1 = 1278001105, BONETAG_TAIL2 = 2362982695, + BONETAG_TAIL3 = 2659378300, + BONETAG_TAIL4 = 1899006424, + BONETAG_TAIL5 = 2199399847, bOnlyAffectsLivePeds = 2543255645, bOnlyBulkyItemVariations = 3412263941, bonnet = 1704829083, @@ -3373,23 +3409,18 @@ namespace CodeWalker.GameFiles iTimeTillPedLeaves = 2296188475, uAvailableInMpSp = 717991212, - CPopGroupList = 738910261, CStreamingRequestFrame = 999226379, CVehicleWheel = 2964364979, - - - CVfxPedInfoMgr = 2677836644, CVfxPedInfo = 3269469953, vfxPedInfos = 1918175602, CPedModelInfo__InitData = 3949383814, - CVfxFogVolumeInfoMgr = 1633161012, CVfxFogVolumeInfo = 759946685, vfxFogVolumeInfos = 2287400076, @@ -3429,6 +3460,22 @@ namespace CodeWalker.GameFiles sirenLight = 4091688452, sirenCorona = 472016577, + fwClipDictionaryMetadata = 331140115, + fwMemoryGroupMetadata = 2046450505, + memoryGroupMetadatas = 3211922640, + SP_High = 44700989, + AP_HIGH = 313384972, + TB_DEAD = 3088554349, + TB_COLD = 3827341951, + TB_HOT = 2709699671, + + + + + + + + //from dav90's PSO_RBF_XMLExport_V5.7 diff --git a/CodeWalker.Core/GameFiles/MetaTypes/PsoBuilder.cs b/CodeWalker.Core/GameFiles/MetaTypes/PsoBuilder.cs index ceeb96f..a86b1dc 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/PsoBuilder.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/PsoBuilder.cs @@ -317,8 +317,8 @@ namespace CodeWalker.GameFiles //switch (valType) //{ - // case (MetaName)331140115: return PsoTypes.GetStructureInfo((MetaName)257); - // case (MetaName)2046450505: return PsoTypes.GetStructureInfo((MetaName)258); + // case MetaName.fwClipDictionaryMetadata: return PsoTypes.GetStructureInfo((MetaName)257); + // case MetaName.fwMemoryGroupMetadata: return PsoTypes.GetStructureInfo((MetaName)258); // case (MetaName)3219912345: return PsoTypes.GetStructureInfo((MetaName)259); // case (MetaName)0: return PsoTypes.GetStructureInfo(MetaName.ARRAYINFO); // default: @@ -327,12 +327,12 @@ namespace CodeWalker.GameFiles //case (MetaName)257: // return new PsoStructureInfo((MetaName)257, 0, 2, 32, // new PsoStructureEntryInfo(MetaName.Key, PsoDataType.String, 0, 7, 0), - // new PsoStructureEntryInfo(MetaName.Item, PsoDataType.Structure, 8, 0, (MetaName)331140115) + // new PsoStructureEntryInfo(MetaName.Item, PsoDataType.Structure, 8, 0, MetaName.fwClipDictionaryMetadata) // ); //case (MetaName)258: // return new PsoStructureInfo((MetaName)258, 0, 2, 24, // new PsoStructureEntryInfo(MetaName.Key, PsoDataType.String, 0, 7, 0), - // new PsoStructureEntryInfo(MetaName.Item, PsoDataType.Structure, 8, 0, (MetaName)2046450505) + // new PsoStructureEntryInfo(MetaName.Item, PsoDataType.Structure, 8, 0, MetaName.fwMemoryGroupMetadata) // ); //case (MetaName)259: // return new PsoStructureInfo((MetaName)259, 0, 2, 32, diff --git a/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs b/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs index 8f148ff..8716747 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs @@ -886,19 +886,19 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), new PsoStructureEntryInfo(MetaName.clipSets, PsoDataType.Map, 8, 1, (MetaName)1), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)331140115), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.fwClipDictionaryMetadata), new PsoStructureEntryInfo(MetaName.clipDictionaryMetadatas, PsoDataType.Map, 32, 1, (MetaName)196612), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2046450505), - new PsoStructureEntryInfo((MetaName)3211922640, PsoDataType.Map, 56, 1, (MetaName)393223), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.fwMemoryGroupMetadata), + new PsoStructureEntryInfo(MetaName.memoryGroupMetadatas, PsoDataType.Map, 56, 1, (MetaName)393223), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3219912345), - new PsoStructureEntryInfo((MetaName)3532340754, PsoDataType.Map, 80, 1, (MetaName)589834), + new PsoStructureEntryInfo((MetaName)3532340754, PsoDataType.Map, 80, 1, (MetaName)589834),//memory group modifiers new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), - new PsoStructureEntryInfo((MetaName)1333660780, PsoDataType.Map, 104, 1, (MetaName)786445) + new PsoStructureEntryInfo((MetaName)1333660780, PsoDataType.Map, 104, 1, (MetaName)786445)//move network flags dictionary ); - case MetaName.ARRAYINFO: + case MetaName.ARRAYINFO://default map node entry, with a structure pointer return new PsoStructureInfo(MetaName.ARRAYINFO, 0, 2, 16, new PsoStructureEntryInfo(MetaName.Key, PsoDataType.String, 0, 7, 0), new PsoStructureEntryInfo(MetaName.Item, PsoDataType.Structure, 8, 3, 0) @@ -931,7 +931,7 @@ namespace CodeWalker.GameFiles case MetaName.fwClipItem: return new PsoStructureInfo(MetaName.fwClipItem, 0, 0, 8 //empty struct... possibly abstract/base class ); - case (MetaName)4285341798: + case (MetaName)4285341798: //creature/animal clip set? return new PsoStructureInfo((MetaName)4285341798, 0, 0, 72, new PsoStructureEntryInfo(MetaName.fallbackId, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.clipDictionaryName, PsoDataType.String, 12, 7, 0), @@ -945,48 +945,48 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)2283074537, PsoDataType.Bool, 64, 0, 0), new PsoStructureEntryInfo((MetaName)1451470102, PsoDataType.String, 68, 7, 0) ); - case (MetaName)331140115: - return new PsoStructureInfo((MetaName)331140115, 0, 0, 24, + case MetaName.fwClipDictionaryMetadata: + return new PsoStructureInfo(MetaName.fwClipDictionaryMetadata, 0, 0, 24, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)1631789397), new PsoStructureEntryInfo(MetaName.streamingPolicy, PsoDataType.Flags, 8, 0, (MetaName)2097152), new PsoStructureEntryInfo(MetaName.memoryGroup, PsoDataType.String, 12, 7, 0), new PsoStructureEntryInfo(MetaName.streamingPriority, PsoDataType.Enum, 16, 0, (MetaName)733577798) ); - case (MetaName)257: - return new PsoStructureInfo((MetaName)257, 0, 2, 32, - new PsoStructureEntryInfo(MetaName.Key, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo(MetaName.Item, PsoDataType.Structure, 8, 0, (MetaName)331140115) - ); - case (MetaName)2046450505: - return new PsoStructureInfo((MetaName)2046450505, 0, 0, 16, + case MetaName.fwMemoryGroupMetadata: + return new PsoStructureInfo(MetaName.fwMemoryGroupMetadata, 0, 0, 16, new PsoStructureEntryInfo((MetaName)676191063, PsoDataType.UInt, 8, 0, 0), new PsoStructureEntryInfo((MetaName)1661025772, PsoDataType.UInt, 12, 0, 0) ); - case (MetaName)258: - return new PsoStructureInfo((MetaName)258, 0, 2, 24, - new PsoStructureEntryInfo(MetaName.Key, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo(MetaName.Item, PsoDataType.Structure, 8, 0, (MetaName)2046450505) - ); - case (MetaName)3219912345: + case (MetaName)3219912345://clip sets memory group modifier? return new PsoStructureInfo((MetaName)3219912345, 0, 0, 24, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2356519750), new PsoStructureEntryInfo((MetaName)4147768898, PsoDataType.Array, 8, 0, 0) ); - case (MetaName)259: - return new PsoStructureInfo((MetaName)259, 0, 2, 32, - new PsoStructureEntryInfo(MetaName.Key, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo(MetaName.Item, PsoDataType.Structure, 8, 0, (MetaName)3219912345) - ); - case (MetaName)2356519750: + case (MetaName)2356519750: //clip sets memory group modifier adjustment return new PsoStructureInfo((MetaName)2356519750, 0, 0, 16, new PsoStructureEntryInfo((MetaName)4286534285, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.Amount, PsoDataType.SInt, 12, 0, 0) ); - case (MetaName)1005381910: + case (MetaName)1005381910: //clip sets move network flags list/group? return new PsoStructureInfo((MetaName)1005381910, 0, 0, 24, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), new PsoStructureEntryInfo(MetaName.clips, PsoDataType.Array, 8, 0, 0) ); + //case (MetaName)257://this shouldn't really be in here, because it's dynamically generated, see PsoBuilder.AddMapNodeStructureInfo + // return new PsoStructureInfo((MetaName)257, 0, 2, 32, + // new PsoStructureEntryInfo(MetaName.Key, PsoDataType.String, 0, 7, 0), + // new PsoStructureEntryInfo(MetaName.Item, PsoDataType.Structure, 8, 0, MetaName.fwClipDictionaryMetadata) + // ); + //case (MetaName)258://this shouldn't really be in here, because it's dynamically generated, see PsoBuilder.AddMapNodeStructureInfo + // return new PsoStructureInfo((MetaName)258, 0, 2, 24, + // new PsoStructureEntryInfo(MetaName.Key, PsoDataType.String, 0, 7, 0), + // new PsoStructureEntryInfo(MetaName.Item, PsoDataType.Structure, 8, 0, MetaName.fwMemoryGroupMetadata) + // ); + //case (MetaName)259://this shouldn't really be in here, because it's dynamically generated, see PsoBuilder.AddMapNodeStructureInfo + // return new PsoStructureInfo((MetaName)259, 0, 2, 32, + // new PsoStructureEntryInfo(MetaName.Key, PsoDataType.String, 0, 7, 0), + // new PsoStructureEntryInfo(MetaName.Item, PsoDataType.Structure, 8, 0, (MetaName)3219912345) + // ); case (MetaName)4209092714: return new PsoStructureInfo((MetaName)4209092714, 0, 0, 24, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2319197961), @@ -14891,10 +14891,10 @@ namespace CodeWalker.GameFiles ); case MetaName.ThermalBehaviour: return new PsoEnumInfo(MetaName.ThermalBehaviour, 1, - new PsoEnumEntryInfo((MetaName)3088554349, 0), - new PsoEnumEntryInfo((MetaName)3827341951, 1), + new PsoEnumEntryInfo(MetaName.TB_DEAD, 0), + new PsoEnumEntryInfo(MetaName.TB_COLD, 1), new PsoEnumEntryInfo(MetaName.TB_WARM, 2), - new PsoEnumEntryInfo((MetaName)2709699671, 3) + new PsoEnumEntryInfo(MetaName.TB_HOT, 3) ); case (MetaName)4015041481: return new PsoEnumInfo((MetaName)4015041481, 1, @@ -14962,7 +14962,7 @@ namespace CodeWalker.GameFiles return new PsoEnumInfo((MetaName)1498349301, 1, new PsoEnumEntryInfo(MetaName.AP_LOW, 0), new PsoEnumEntryInfo(MetaName.AP_MEDIUM, 1), - new PsoEnumEntryInfo((MetaName)313384972, 2), + new PsoEnumEntryInfo(MetaName.AP_HIGH, 2), new PsoEnumEntryInfo((MetaName)2096169364, 3), new PsoEnumEntryInfo((MetaName)3509068476, 4), new PsoEnumEntryInfo((MetaName)611607097, 5) @@ -14978,7 +14978,7 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo((MetaName)3866220764, 0), new PsoEnumEntryInfo(MetaName.SP_Low, 1), new PsoEnumEntryInfo(MetaName.SP_Medium, 2), - new PsoEnumEntryInfo((MetaName)44700989, 3) + new PsoEnumEntryInfo(MetaName.SP_High, 3) ); case (MetaName)2476021071: return new PsoEnumInfo((MetaName)2476021071, 1, @@ -15051,50 +15051,50 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo(MetaName.BONETAG_R_UPPERARM, 40269), new PsoEnumEntryInfo(MetaName.BONETAG_R_FOREARM, 28252), new PsoEnumEntryInfo(MetaName.BONETAG_R_HAND, 57005), - new PsoEnumEntryInfo((MetaName)2544970273, 58866), - new PsoEnumEntryInfo((MetaName)1005591915, 64016), - new PsoEnumEntryInfo((MetaName)774537696, 64017), - new PsoEnumEntryInfo((MetaName)4262590177, 58867), - new PsoEnumEntryInfo((MetaName)557114589, 64096), - new PsoEnumEntryInfo((MetaName)308168496, 64097), - new PsoEnumEntryInfo((MetaName)2082763528, 58868), - new PsoEnumEntryInfo((MetaName)2175091220, 64112), + new PsoEnumEntryInfo(MetaName.BONETAG_R_FINGER0, 58866), + new PsoEnumEntryInfo(MetaName.BONETAG_R_FINGER01, 64016), + new PsoEnumEntryInfo(MetaName.BONETAG_R_FINGER02, 64017), + new PsoEnumEntryInfo(MetaName.BONETAG_R_FINGER1, 58867), + new PsoEnumEntryInfo(MetaName.BONETAG_R_FINGER11, 64096), + new PsoEnumEntryInfo(MetaName.BONETAG_R_FINGER12, 64097), + new PsoEnumEntryInfo(MetaName.BONETAG_R_FINGER2, 58868), + new PsoEnumEntryInfo(MetaName.BONETAG_R_FINGER21, 64112), new PsoEnumEntryInfo(MetaName.BONETAG_R_FINGER22, 64113), - new PsoEnumEntryInfo((MetaName)1358503090, 58869), - new PsoEnumEntryInfo((MetaName)1281645843, 64064), - new PsoEnumEntryInfo((MetaName)2136457977, 64065), - new PsoEnumEntryInfo((MetaName)1589098543, 58870), - new PsoEnumEntryInfo((MetaName)1518893755, 64080), - new PsoEnumEntryInfo((MetaName)2295060289, 64081), + new PsoEnumEntryInfo(MetaName.BONETAG_R_FINGER3, 58869), + new PsoEnumEntryInfo(MetaName.BONETAG_R_FINGER31, 64064), + new PsoEnumEntryInfo(MetaName.BONETAG_R_FINGER32, 64065), + new PsoEnumEntryInfo(MetaName.BONETAG_R_FINGER4, 58870), + new PsoEnumEntryInfo(MetaName.BONETAG_R_FINGER41, 64080), + new PsoEnumEntryInfo(MetaName.BONETAG_R_FINGER42, 64081), new PsoEnumEntryInfo(MetaName.BONETAG_L_CLAVICLE, 64729), new PsoEnumEntryInfo(MetaName.BONETAG_L_UPPERARM, 45509), new PsoEnumEntryInfo(MetaName.BONETAG_L_FOREARM, 61163), new PsoEnumEntryInfo(MetaName.BONETAG_L_HAND, 18905), - new PsoEnumEntryInfo((MetaName)3483436254, 26610), - new PsoEnumEntryInfo((MetaName)3342631108, 4089), - new PsoEnumEntryInfo((MetaName)2503351480, 4090), - new PsoEnumEntryInfo((MetaName)986241836, 26611), - new PsoEnumEntryInfo((MetaName)2527500201, 4169), - new PsoEnumEntryInfo((MetaName)4250526990, 4170), - new PsoEnumEntryInfo((MetaName)1293713363, 26612), - new PsoEnumEntryInfo((MetaName)3526758439, 4185), + new PsoEnumEntryInfo(MetaName.BONETAG_L_FINGER0, 26610), + new PsoEnumEntryInfo(MetaName.BONETAG_L_FINGER01, 4089), + new PsoEnumEntryInfo(MetaName.BONETAG_L_FINGER02, 4090), + new PsoEnumEntryInfo(MetaName.BONETAG_L_FINGER1, 26611), + new PsoEnumEntryInfo(MetaName.BONETAG_L_FINGER11, 4169), + new PsoEnumEntryInfo(MetaName.BONETAG_L_FINGER12, 4170), + new PsoEnumEntryInfo(MetaName.BONETAG_L_FINGER2, 26612), + new PsoEnumEntryInfo(MetaName.BONETAG_L_FINGER21, 4185), new PsoEnumEntryInfo(MetaName.BONETAG_L_FINGER22, 4186), - new PsoEnumEntryInfo((MetaName)858967036, 26613), - new PsoEnumEntryInfo((MetaName)3236167907, 4137), - new PsoEnumEntryInfo((MetaName)2527702127, 4138), - new PsoEnumEntryInfo((MetaName)1149791911, 26614), - new PsoEnumEntryInfo((MetaName)3182656438, 4153), - new PsoEnumEntryInfo((MetaName)4127878243, 4154), + new PsoEnumEntryInfo(MetaName.BONETAG_L_FINGER3, 26613), + new PsoEnumEntryInfo(MetaName.BONETAG_L_FINGER31, 4137), + new PsoEnumEntryInfo(MetaName.BONETAG_L_FINGER32, 4138), + new PsoEnumEntryInfo(MetaName.BONETAG_L_FINGER4, 26614), + new PsoEnumEntryInfo(MetaName.BONETAG_L_FINGER41, 4153), + new PsoEnumEntryInfo(MetaName.BONETAG_L_FINGER42, 4154), new PsoEnumEntryInfo(MetaName.BONETAG_L_THIGH, 58271), new PsoEnumEntryInfo(MetaName.BONETAG_L_CALF, 63931), new PsoEnumEntryInfo(MetaName.BONETAG_L_FOOT, 14201), - new PsoEnumEntryInfo((MetaName)3734897948, 2108), - new PsoEnumEntryInfo((MetaName)2497263744, 7531), + new PsoEnumEntryInfo(MetaName.BONETAG_L_TOE, 2108), + new PsoEnumEntryInfo(MetaName.BONETAG_L_TOE1, 7531), new PsoEnumEntryInfo(MetaName.BONETAG_R_THIGH, 51826), new PsoEnumEntryInfo(MetaName.BONETAG_R_CALF, 36864), new PsoEnumEntryInfo(MetaName.BONETAG_R_FOOT, 52301), - new PsoEnumEntryInfo((MetaName)1201239981, 20781), - new PsoEnumEntryInfo((MetaName)3004057651, 45631), + new PsoEnumEntryInfo(MetaName.BONETAG_R_TOE, 20781), + new PsoEnumEntryInfo(MetaName.BONETAG_R_TOE1, 45631), new PsoEnumEntryInfo((MetaName)1914315501, 35731), new PsoEnumEntryInfo((MetaName)1648548119, 5232), new PsoEnumEntryInfo((MetaName)533252846, 37119), @@ -15112,12 +15112,12 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo((MetaName)176026430, 39638), new PsoEnumEntryInfo((MetaName)3870648046, 36029), new PsoEnumEntryInfo((MetaName)3398180204, 6286), - new PsoEnumEntryInfo((MetaName)981146734, 838), + new PsoEnumEntryInfo(MetaName.BONETAG_TAIL0, 838), new PsoEnumEntryInfo(MetaName.BONETAG_TAIL1, 839), new PsoEnumEntryInfo(MetaName.BONETAG_TAIL2, 840), - new PsoEnumEntryInfo((MetaName)2659378300, 841), - new PsoEnumEntryInfo((MetaName)1899006424, 842), - new PsoEnumEntryInfo((MetaName)2199399847, 843), + new PsoEnumEntryInfo(MetaName.BONETAG_TAIL3, 841), + new PsoEnumEntryInfo(MetaName.BONETAG_TAIL4, 842), + new PsoEnumEntryInfo(MetaName.BONETAG_TAIL5, 843), new PsoEnumEntryInfo((MetaName)1109140959, 30992), new PsoEnumEntryInfo((MetaName)803570034, 30993), new PsoEnumEntryInfo((MetaName)631663860, 30994), From 6e2c81675e5556cd9bbee2477cb1c53b37becd28 Mon Sep 17 00:00:00 2001 From: dexy Date: Thu, 20 Dec 2018 22:35:19 +1100 Subject: [PATCH 047/158] Added basic DLC subpacks support --- .../GameFiles/FileTypes/DlcSetupFile.cs | 1 + CodeWalker.Core/GameFiles/GameFileCache.cs | 41 +++++++++++++++--- CodeWalker.Core/GameFiles/RpfManager.cs | 2 +- CodeWalker.Core/World/Space.cs | 42 +++++++++++-------- 4 files changed, 62 insertions(+), 24 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/DlcSetupFile.cs b/CodeWalker.Core/GameFiles/FileTypes/DlcSetupFile.cs index 43b47ee..760453a 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/DlcSetupFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/DlcSetupFile.cs @@ -21,6 +21,7 @@ namespace CodeWalker.GameFiles public bool isLevelPack { get; set; } public RpfFile DlcFile { get; set; } //used by GameFileCache + public List DlcSubpacks { get; set; } //used by GameFileCache public DlcContentFile ContentFile { get; set; } public void Load(XmlDocument doc) diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index 896868c..5da14c3 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -490,6 +490,21 @@ namespace CodeWalker.GameFiles DlcActiveRpfs.Add(dlcfile); + for (int i = 1; i <= setupfile.subPackCount; i++) + { + var subpackPath = dlcfile.Path.Replace("\\dlc.rpf", "\\dlc" + i.ToString() + ".rpf"); + var subpack = RpfMan.FindRpfFile(subpackPath); + if (subpack != null) + { + DlcActiveRpfs.Add(subpack); + + if (setupfile.DlcSubpacks == null) setupfile.DlcSubpacks = new List(); + setupfile.DlcSubpacks.Add(subpack); + } + } + + + string dlcname = GetDlcNameFromPath(dlcfile.Path); @@ -502,7 +517,7 @@ namespace CodeWalker.GameFiles //if (rpfkvp.Value.overlay) AddDlcOverlayRpf(rpfkvp.Key, umpath, setupfile, overlays); - AddDlcActiveMapRpfFile(rpfkvp.Key, phpath); + AddDlcActiveMapRpfFile(rpfkvp.Key, phpath, setupfile); } @@ -561,7 +576,7 @@ namespace CodeWalker.GameFiles //if (rpfdatafile.overlay) AddDlcOverlayRpf(dfn, rpfdatafile.filename, setupfile, overlays); - AddDlcActiveMapRpfFile(dfn, phpath); + AddDlcActiveMapRpfFile(dfn, phpath, setupfile); } else { @@ -608,7 +623,7 @@ namespace CodeWalker.GameFiles AddDlcOverlayRpf(fpath, umpath, setupfile, overlays); - AddDlcActiveMapRpfFile(fpath, phpath); + AddDlcActiveMapRpfFile(fpath, phpath, setupfile); } } } @@ -627,7 +642,7 @@ namespace CodeWalker.GameFiles } } - private void AddDlcActiveMapRpfFile(string vpath, string phpath) + private void AddDlcActiveMapRpfFile(string vpath, string phpath, DlcSetupFile setupfile) { vpath = vpath.ToLowerInvariant(); phpath = phpath.ToLowerInvariant(); @@ -684,10 +699,26 @@ namespace CodeWalker.GameFiles { string devname = setupfile.deviceName.ToLowerInvariant(); string fpath = GetDlcPlatformPath(path).ToLowerInvariant(); - string kpath = fpath.Replace(devname + ":\\", ""); + string kpath = fpath;//.Replace(devname + ":\\", ""); string dlcpath = setupfile.DlcFile.Path; fpath = fpath.Replace(devname + ":", dlcpath); fpath = fpath.Replace("x64:", dlcpath + "\\x64").Replace('/', '\\'); + if (setupfile.DlcSubpacks != null) + { + if (RpfMan.FindRpfFile(fpath) == null) + { + foreach (var subpack in setupfile.DlcSubpacks) + { + dlcpath = subpack.Path; + var tpath = kpath.Replace(devname + ":", dlcpath); + tpath = tpath.Replace("x64:", dlcpath + "\\x64").Replace('/', '\\'); + if (RpfMan.FindRpfFile(tpath) != null) + { + return GetDlcPatchedPath(tpath); + } + } + } + } return GetDlcPatchedPath(fpath); } private string GetDlcOverlayPath(string path, DlcSetupFile setupfile) diff --git a/CodeWalker.Core/GameFiles/RpfManager.cs b/CodeWalker.Core/GameFiles/RpfManager.cs index cadc31f..49a1b43 100644 --- a/CodeWalker.Core/GameFiles/RpfManager.cs +++ b/CodeWalker.Core/GameFiles/RpfManager.cs @@ -124,7 +124,7 @@ namespace CodeWalker.GameFiles private void AddRpfFile(RpfFile file, bool isdlc, bool ismod) { - isdlc = isdlc || (file.NameLower == "dlc.rpf") || (file.NameLower == "update.rpf"); + isdlc = isdlc || (file.NameLower == "update.rpf") || (file.NameLower.StartsWith("dlc") && file.NameLower.EndsWith(".rpf")); ismod = ismod || (file.Path.StartsWith("mods\\")); if (file.AllEntries != null) diff --git a/CodeWalker.Core/World/Space.cs b/CodeWalker.Core/World/Space.cs index 44ec6db..5e95911 100644 --- a/CodeWalker.Core/World/Space.cs +++ b/CodeWalker.Core/World/Space.cs @@ -420,19 +420,22 @@ namespace CodeWalker.World { AddRpfYnds(rpffile, yndentries); } - var updrpf = rpfman.FindRpfFile("update\\update.rpf"); //load nodes from patch area... - if (updrpf != null) + if (GameFileCache.EnableDlc) { - foreach (var rpffile in updrpf.Children) + var updrpf = rpfman.FindRpfFile("update\\update.rpf"); //load nodes from patch area... + if (updrpf != null) { - AddRpfYnds(rpffile, yndentries); + foreach (var rpffile in updrpf.Children) + { + AddRpfYnds(rpffile, yndentries); + } } - } - foreach (var dlcrpf in GameFileCache.DlcActiveRpfs) //load nodes from current dlc rpfs - { - foreach (var rpffile in dlcrpf.Children) + foreach (var dlcrpf in GameFileCache.DlcActiveRpfs) //load nodes from current dlc rpfs { - AddRpfYnds(rpffile, yndentries); + foreach (var rpffile in dlcrpf.Children) + { + AddRpfYnds(rpffile, yndentries); + } } } @@ -721,19 +724,22 @@ namespace CodeWalker.World { AddRpfYnvs(rpffile, ynventries); } - foreach (var dlcrpf in GameFileCache.DlcActiveRpfs) //load navmeshes from current dlc rpfs + if (GameFileCache.EnableDlc) { - foreach (var rpffile in dlcrpf.Children) + var updrpf = rpfman.FindRpfFile("update\\update.rpf"); //load navmeshes from patch area... + if (updrpf != null) { - AddRpfYnvs(rpffile, ynventries); + foreach (var rpffile in updrpf.Children) + { + AddRpfYnvs(rpffile, ynventries); + } } - } - var updrpf = rpfman.FindRpfFile("update\\update.rpf"); //load navmeshes from patch area... - if (updrpf != null) - { - foreach (var rpffile in updrpf.Children) + foreach (var dlcrpf in GameFileCache.DlcActiveRpfs) //load navmeshes from current dlc rpfs { - AddRpfYnvs(rpffile, ynventries); + foreach (var rpffile in dlcrpf.Children) + { + AddRpfYnvs(rpffile, ynventries); + } } } From 9bfd684b2b875a041ab80324ff6b68a7e67034d0 Mon Sep 17 00:00:00 2001 From: dexy Date: Fri, 21 Dec 2018 18:54:20 +1100 Subject: [PATCH 048/158] Updated TODO --- Todo.txt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Todo.txt b/Todo.txt index ccf7e6a..d9d82e5 100644 --- a/Todo.txt +++ b/Todo.txt @@ -38,13 +38,10 @@ Path editor: fix: update links in other .ynd's when deleting vanilla nodes, add Path editor: remap nodes to correct area/.ynd Nav mesh editor (YNV) -Interior entities editor (YTYP) Archetype extension editor (YTYP) Entity extension editor Time cycle mod editor -Grass editor Distant lod lights editor -Mlo instance editor Water quads editor Collision editor (YBN) Timecycle/weather XML editor @@ -100,6 +97,11 @@ done: [v.30] +Occlusion mode +XML/PSO conversion +Mlo instance editor +Interior entities editor (YTYP) +Grass editor Bug fixes for XML/Meta conversion Collision meshes now using R* colours Vehicle rendering improvements From 1ec09f03be82f58754f2350de3184c8d6335e53a Mon Sep 17 00:00:00 2001 From: dexy Date: Fri, 21 Dec 2018 19:06:39 +1100 Subject: [PATCH 049/158] Added check for RPF encryption type when saving to RPF from Meta Editor window --- ExploreForm.cs | 2 +- Forms/MetaForm.cs | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/ExploreForm.cs b/ExploreForm.cs index efe0d4c..7d14932 100644 --- a/ExploreForm.cs +++ b/ExploreForm.cs @@ -1783,7 +1783,7 @@ namespace CodeWalker - private bool EnsureRpfValidEncryption(RpfFile file = null) + public bool EnsureRpfValidEncryption(RpfFile file = null) { if ((file == null) && (CurrentFolder.RpfFolder == null)) return false; diff --git a/Forms/MetaForm.cs b/Forms/MetaForm.cs index bc8db25..ed3c1d4 100644 --- a/Forms/MetaForm.cs +++ b/Forms/MetaForm.cs @@ -389,6 +389,7 @@ namespace CodeWalker.Forms try { + if (!(exploreForm?.EnsureRpfValidEncryption(rpfFileEntry.File) ?? false)) return false; var newentry = RpfFile.CreateFile(rpfFileEntry.Parent, rpfFileEntry.Name, data); if (newentry != rpfFileEntry) From 7660a228eb2813678223f4c1e364d42e713674bc Mon Sep 17 00:00:00 2001 From: dexy Date: Fri, 21 Dec 2018 20:11:28 +1100 Subject: [PATCH 050/158] Renamed skin vertex types and adjusted vertex layouts --- .../GameFiles/Resources/VertexType.cs | 24 +-- Rendering/Shaders/BasicShader.cs | 45 +++-- Rendering/Shaders/ShadowShader.cs | 18 +- Rendering/VertexTypes.cs | 186 +++++++++--------- 4 files changed, 139 insertions(+), 134 deletions(-) diff --git a/CodeWalker.Core/GameFiles/Resources/VertexType.cs b/CodeWalker.Core/GameFiles/Resources/VertexType.cs index 1c5fefc..3957f7f 100644 --- a/CodeWalker.Core/GameFiles/Resources/VertexType.cs +++ b/CodeWalker.Core/GameFiles/Resources/VertexType.cs @@ -15,8 +15,8 @@ namespace CodeWalker.GameFiles DefaultEx = 16473, //PNCTX PNCCT = 121, PNCCTTTT = 1017, - PCCNCCTTX = 16639, - PCCNCCT = 127, + PBBNCCTTX = 16639, + PBBNCCT = 127, PNCTTTX = 16857, PNCTTX = 16601, PNCTTTX_2 = 19545, @@ -24,9 +24,9 @@ namespace CodeWalker.GameFiles PNCCTTX = 16633, PNCCTTX_2 = 17017, PNCCTTTX = 17145, - PCCNCCTX = 16511, - PCCNCTX = 16479, - PCCNCT = 95, + PBBNCCTX = 16511, + PBBNCTX = 16479, + PBBNCT = 95, PNCCTT = 249, PNCCTX = 16505, PCT = 81, @@ -39,16 +39,16 @@ namespace CodeWalker.GameFiles PNCH2 = 2147483737, //0x80000059 (89 + 0x80000000) Default Cloth? PNCTTTTX = 19673, //normal_spec_detail_dpm_vertdecal_tnt PNCTTTT = 985, - PCCNCCTT = 255, + PBBNCCTT = 255, PCTT = 209, - PCCCCT = 119, - PCCNC = 31, - PCCNCTT = 223, - PCCNCTTX = 16607, - PCCNCTTT = 479, + PBBCCT = 119, + PBBNC = 31, + PBBNCTT = 223, + PBBNCTTX = 16607, + PBBNCTTT = 479, PNCTT = 217, PNCTTT = 473, - PCCNCTTTX = 16863, + PBBNCTTTX = 16863, } diff --git a/Rendering/Shaders/BasicShader.cs b/Rendering/Shaders/BasicShader.cs index ad1f93b..99246ca 100644 --- a/Rendering/Shaders/BasicShader.cs +++ b/Rendering/Shaders/BasicShader.cs @@ -214,38 +214,43 @@ namespace CodeWalker.Rendering //supported layouts - requires Position, Normal, Colour, Texcoord layouts.Add(VertexType.Default, new InputLayout(device, vspnctbytes, VertexTypeDefault.GetLayout())); layouts.Add(VertexType.PNCH2, new InputLayout(device, vspnctbytes, VertexTypePNCH2.GetLayout())); + layouts.Add(VertexType.PNCTT, new InputLayout(device, vspnctbytes, VertexTypePNCTT.GetLayout())); + layouts.Add(VertexType.PNCTTT, new InputLayout(device, vspnctbytes, VertexTypePNCTTT.GetLayout())); + layouts.Add(VertexType.PBBNCT, new InputLayout(device, vspnctbytes, VertexTypePBBNCT.GetLayout())); + layouts.Add(VertexType.PBBNCTT, new InputLayout(device, vspnctbytes, VertexTypePBBNCTT.GetLayout())); + layouts.Add(VertexType.PBBNCTTT, new InputLayout(device, vspnctbytes, VertexTypePBBNCTTT.GetLayout())); - layouts.Add(VertexType.PCCNCT, new InputLayout(device, vspncctbytes, VertexTypePCCNCT.GetLayout())); - layouts.Add(VertexType.PCCNCCT, new InputLayout(device, vspncctbytes, VertexTypePCCNCCT.GetLayout())); layouts.Add(VertexType.PNCCT, new InputLayout(device, vspncctbytes, VertexTypePNCCT.GetLayout())); + layouts.Add(VertexType.PBBNCCT, new InputLayout(device, vspncctbytes, VertexTypePBBNCCT.GetLayout())); + layouts.Add(VertexType.PNCCTT, new InputLayout(device, vspnccttbytes, VertexTypePNCCTT.GetLayout())); + layouts.Add(VertexType.PNCCTTTT, new InputLayout(device, vspncctttbytes, VertexTypePNCCTTTT.GetLayout())); + //normalmap layouts - requires Position, Normal, Colour, Texcoord, Tangent (X) layouts.Add(VertexType.DefaultEx, new InputLayout(device, vspnctxbytes, VertexTypeDefaultEx.GetLayout())); layouts.Add(VertexType.PCCH2H4, new InputLayout(device, vspnctxbytes, VertexTypePCCH2H4.GetLayout())); + layouts.Add(VertexType.PBBNCTX, new InputLayout(device, vspnctxbytes, VertexTypePBBNCTX.GetLayout())); - layouts.Add(VertexType.PCCNCTX, new InputLayout(device, vspncctxbytes, VertexTypePCCNCTX.GetLayout())); - layouts.Add(VertexType.PCCNCCTX, new InputLayout(device, vspncctxbytes, VertexTypePCCNCCTX.GetLayout())); layouts.Add(VertexType.PNCCTX, new InputLayout(device, vspncctxbytes, VertexTypePNCCTX.GetLayout())); + layouts.Add(VertexType.PBBNCCTX, new InputLayout(device, vspncctxbytes, VertexTypePBBNCCTX.GetLayout())); + layouts.Add(VertexType.PNCTTX, new InputLayout(device, vspncttxbytes, VertexTypePNCTTX.GetLayout())); + layouts.Add(VertexType.PBBNCTTX, new InputLayout(device, vspncttxbytes, VertexTypePBBNCTTX.GetLayout())); + layouts.Add(VertexType.PBBNCTTTX, new InputLayout(device, vspncttxbytes, VertexTypePBBNCTTTX.GetLayout())); + layouts.Add(VertexType.PNCCTTX, new InputLayout(device, vspnccttxbytes, VertexTypePNCCTTX.GetLayout())); layouts.Add(VertexType.PNCCTTX_2, new InputLayout(device, vspnccttxbytes, VertexTypePNCCTTX_2.GetLayout())); - layouts.Add(VertexType.PCCNCCTTX, new InputLayout(device, vspnccttxbytes, VertexTypePCCNCCTTX.GetLayout())); layouts.Add(VertexType.PNCTTTX, new InputLayout(device, vspnctttxbytes, VertexTypePNCTTTX.GetLayout())); layouts.Add(VertexType.PNCTTTX_2, new InputLayout(device, vspnctttxbytes, VertexTypePNCTTTX_2.GetLayout())); layouts.Add(VertexType.PNCTTTX_3, new InputLayout(device, vspnctttxbytes, VertexTypePNCTTTX_3.GetLayout())); layouts.Add(VertexType.PNCTTTTX, new InputLayout(device, vspnctttxbytes, VertexTypePNCTTTTX.GetLayout())); layouts.Add(VertexType.PNCCTTTX, new InputLayout(device, vspncctttxbytes, VertexTypePNCCTTTX.GetLayout())); - layouts.Add(VertexType.PCCNCTTTX, new InputLayout(device, vspncctttxbytes, VertexTypePCCNCTTTX.GetLayout())); + layouts.Add(VertexType.PBBNCCTTX, new InputLayout(device, vspnccttxbytes, VertexTypePBBNCCTTX.GetLayout())); - layouts.Add(VertexType.PCCNCTT, new InputLayout(device, vspnccttbytes, VertexTypePCCNCTT.GetLayout())); - layouts.Add(VertexType.PCCNCTTX, new InputLayout(device, vspnccttxbytes, VertexTypePCCNCTTX.GetLayout())); - layouts.Add(VertexType.PCCNCTTT, new InputLayout(device, vspncctttbytes, VertexTypePCCNCTTT.GetLayout())); - layouts.Add(VertexType.PNCTT, new InputLayout(device, vspnctbytes, VertexTypePNCTT.GetLayout())); - layouts.Add(VertexType.PNCTTT, new InputLayout(device, vspnctbytes, VertexTypePNCTTT.GetLayout())); @@ -357,40 +362,40 @@ namespace CodeWalker.Rendering case VertexType.PNCH2: case VertexType.PNCTT: case VertexType.PNCTTT: + case VertexType.PBBNCT: + case VertexType.PBBNCTT: + case VertexType.PBBNCTTT: vs = basicvspnct; break; - case VertexType.PCCNCT: - case VertexType.PCCNCCT: case VertexType.PNCCT: + case VertexType.PBBNCCT: vs = basicvspncct; break; case VertexType.PNCCTT://not used? - case VertexType.PCCNCTT: vs = basicvspncctt; break; case VertexType.PNCCTTTT://not used? - case VertexType.PCCNCTTT: vs = basicvspnccttt; break; case VertexType.DefaultEx: case VertexType.PCCH2H4: + case VertexType.PBBNCTX: vs = basicvspnctx; break; - case VertexType.PCCNCTX: - case VertexType.PCCNCCTX: + case VertexType.PBBNCCTX: case VertexType.PNCCTX: vs = basicvspncctx; break; case VertexType.PNCTTX: + case VertexType.PBBNCTTX: vs = basicvspncttx; break; case VertexType.PNCCTTX://not used? case VertexType.PNCCTTX_2://not used? - case VertexType.PCCNCCTTX://not used? - case VertexType.PCCNCTTX: + case VertexType.PBBNCCTTX://not used? vs = basicvspnccttx; break; @@ -398,11 +403,11 @@ namespace CodeWalker.Rendering case VertexType.PNCTTTX_2: case VertexType.PNCTTTX_3: case VertexType.PNCTTTTX: //not using last texcoords! + case VertexType.PBBNCTTTX: vs = basicvspnctttx; break; case VertexType.PNCCTTTX://not used? - case VertexType.PCCNCTTTX: vs = basicvspncctttx; break; diff --git a/Rendering/Shaders/ShadowShader.cs b/Rendering/Shaders/ShadowShader.cs index e3b82cf..54514ff 100644 --- a/Rendering/Shaders/ShadowShader.cs +++ b/Rendering/Shaders/ShadowShader.cs @@ -93,8 +93,8 @@ namespace CodeWalker.Rendering layouts.Add(VertexType.DefaultEx, new InputLayout(device, vsbytes, VertexTypeDefaultEx.GetLayout())); layouts.Add(VertexType.PNCCT, new InputLayout(device, vsbytes, VertexTypePNCCT.GetLayout())); layouts.Add(VertexType.PNCCTTTT, new InputLayout(device, vsbytes, VertexTypePNCCTTTT.GetLayout())); - layouts.Add(VertexType.PCCNCCTTX, new InputLayout(device, vsbytes, VertexTypePCCNCCTTX.GetLayout())); - layouts.Add(VertexType.PCCNCCT, new InputLayout(device, vsbytes, VertexTypePCCNCCT.GetLayout())); + layouts.Add(VertexType.PBBNCCTTX, new InputLayout(device, vsbytes, VertexTypePBBNCCTTX.GetLayout())); + layouts.Add(VertexType.PBBNCCT, new InputLayout(device, vsbytes, VertexTypePBBNCCT.GetLayout())); layouts.Add(VertexType.PNCTTTX, new InputLayout(device, vsbytes, VertexTypePNCTTTX.GetLayout())); layouts.Add(VertexType.PNCTTTX_2, new InputLayout(device, vsbytes, VertexTypePNCTTTX_2.GetLayout())); layouts.Add(VertexType.PNCTTTX_3, new InputLayout(device, vsbytes, VertexTypePNCTTTX_3.GetLayout())); @@ -103,19 +103,19 @@ namespace CodeWalker.Rendering layouts.Add(VertexType.PNCCTTX, new InputLayout(device, vsbytes, VertexTypePNCCTTX.GetLayout())); layouts.Add(VertexType.PNCCTTX_2, new InputLayout(device, vsbytes, VertexTypePNCCTTX_2.GetLayout())); layouts.Add(VertexType.PNCCTTTX, new InputLayout(device, vsbytes, VertexTypePNCCTTTX.GetLayout())); - layouts.Add(VertexType.PCCNCCTX, new InputLayout(device, vsbytes, VertexTypePCCNCCTX.GetLayout())); - layouts.Add(VertexType.PCCNCTX, new InputLayout(device, vsbytes, VertexTypePCCNCTX.GetLayout())); - layouts.Add(VertexType.PCCNCT, new InputLayout(device, vsbytes, VertexTypePCCNCT.GetLayout())); + layouts.Add(VertexType.PBBNCCTX, new InputLayout(device, vsbytes, VertexTypePBBNCCTX.GetLayout())); + layouts.Add(VertexType.PBBNCTX, new InputLayout(device, vsbytes, VertexTypePBBNCTX.GetLayout())); + layouts.Add(VertexType.PBBNCT, new InputLayout(device, vsbytes, VertexTypePBBNCT.GetLayout())); layouts.Add(VertexType.PNCCTT, new InputLayout(device, vsbytes, VertexTypePNCCTT.GetLayout())); layouts.Add(VertexType.PNCCTX, new InputLayout(device, vsbytes, VertexTypePNCCTX.GetLayout())); layouts.Add(VertexType.PNCH2, new InputLayout(device, vsbytes, VertexTypePNCH2.GetLayout())); layouts.Add(VertexType.PCCH2H4, new InputLayout(device, vsbytes, VertexTypePCCH2H4.GetLayout())); - layouts.Add(VertexType.PCCNCTT, new InputLayout(device, vsbytes, VertexTypePCCNCTT.GetLayout())); - layouts.Add(VertexType.PCCNCTTX, new InputLayout(device, vsbytes, VertexTypePCCNCTTX.GetLayout())); - layouts.Add(VertexType.PCCNCTTT, new InputLayout(device, vsbytes, VertexTypePCCNCTTT.GetLayout())); + layouts.Add(VertexType.PBBNCTT, new InputLayout(device, vsbytes, VertexTypePBBNCTT.GetLayout())); + layouts.Add(VertexType.PBBNCTTX, new InputLayout(device, vsbytes, VertexTypePBBNCTTX.GetLayout())); + layouts.Add(VertexType.PBBNCTTT, new InputLayout(device, vsbytes, VertexTypePBBNCTTT.GetLayout())); layouts.Add(VertexType.PNCTT, new InputLayout(device, vsbytes, VertexTypePNCTT.GetLayout())); layouts.Add(VertexType.PNCTTT, new InputLayout(device, vsbytes, VertexTypePNCTTT.GetLayout())); - layouts.Add(VertexType.PCCNCTTTX, new InputLayout(device, vsbytes, VertexTypePCCNCTTTX.GetLayout())); + layouts.Add(VertexType.PBBNCTTTX, new InputLayout(device, vsbytes, VertexTypePBBNCTTTX.GetLayout())); diff --git a/Rendering/VertexTypes.cs b/Rendering/VertexTypes.cs index 459e1a0..67eeb72 100644 --- a/Rendering/VertexTypes.cs +++ b/Rendering/VertexTypes.cs @@ -100,14 +100,14 @@ namespace CodeWalker.Rendering } } - public struct VertexTypePCCNCCTTX //id: 1520003478, stride: 72, flags: 16639, refs: 11178 + public struct VertexTypePBBNCCTTX //id: 1520003478, stride: 72, flags: 16639, refs: 11178 { public Vector3 Position; + public uint BlendWeights; + public uint BlendIndices; + public Vector3 Normal; public uint Colour0; public uint Colour1; - public Vector3 Normal; - public uint Colour2; - public uint Colour3; public Vector2 Texcoord0; public Vector2 Texcoord1; public Vector4 Tangents; @@ -117,11 +117,11 @@ namespace CodeWalker.Rendering return new[] { new InputElement("POSITION", 0, Format.R32G32B32_Float, 0, 0), - new InputElement("COLOR", 0, Format.R8G8B8A8_UNorm, 12, 0), - new InputElement("COLOR", 1, Format.R8G8B8A8_UNorm, 16, 0), + new InputElement("BLENDWEIGHTS", 0, Format.R8G8B8A8_UNorm, 12, 0), + new InputElement("BLENDINDICES", 0, Format.R8G8B8A8_UNorm, 16, 0), new InputElement("NORMAL", 0, Format.R32G32B32_Float, 20, 0), - new InputElement("COLOR", 2, Format.R8G8B8A8_UNorm, 32, 0), - new InputElement("COLOR", 3, Format.R8G8B8A8_UNorm, 36, 0), + new InputElement("COLOR", 0, Format.R8G8B8A8_UNorm, 32, 0), + new InputElement("COLOR", 1, Format.R8G8B8A8_UNorm, 36, 0), new InputElement("TEXCOORD", 0, Format.R32G32_Float, 40, 0), new InputElement("TEXCOORD", 1, Format.R32G32_Float, 48, 0), new InputElement("TANGENT", 0, Format.R32G32B32A32_Float, 56, 0), @@ -129,14 +129,14 @@ namespace CodeWalker.Rendering } } - public struct VertexTypePCCNCCT //id: 93940118, stride: 48, flags: 127, refs: 10396 + public struct VertexTypePBBNCCT //id: 93940118, stride: 48, flags: 127, refs: 10396 { public Vector3 Position; + public uint BlendWeights; + public uint BlendIndices; + public Vector3 Normal; public uint Colour0; public uint Colour1; - public Vector3 Normal; - public uint Colour2; - public uint Colour3; public Vector2 Texcoord; public static InputElement[] GetLayout() @@ -144,11 +144,11 @@ namespace CodeWalker.Rendering return new[] { new InputElement("POSITION", 0, Format.R32G32B32_Float, 0, 0), - new InputElement("COLOR", 0, Format.R8G8B8A8_UNorm, 12, 0), - new InputElement("COLOR", 1, Format.R8G8B8A8_UNorm, 16, 0), + new InputElement("BLENDWEIGHTS", 0, Format.R8G8B8A8_UNorm, 12, 0), + new InputElement("BLENDINDICES", 0, Format.R8G8B8A8_UNorm, 16, 0), new InputElement("NORMAL", 0, Format.R32G32B32_Float, 20, 0), - new InputElement("COLOR", 2, Format.R8G8B8A8_UNorm, 32, 0), - new InputElement("COLOR", 3, Format.R8G8B8A8_UNorm, 36, 0), + new InputElement("COLOR", 0, Format.R8G8B8A8_UNorm, 32, 0), + new InputElement("COLOR", 1, Format.R8G8B8A8_UNorm, 36, 0), new InputElement("TEXCOORD", 0, Format.R32G32_Float, 40, 0), }; } @@ -304,14 +304,14 @@ namespace CodeWalker.Rendering } } - public struct VertexTypePCCNCCTX //id: 177826198, stride: 64, flags: 16511, refs: 1990 + public struct VertexTypePBBNCCTX //id: 177826198, stride: 64, flags: 16511, refs: 1990 { public Vector3 Position; + public uint BlendWeights; + public uint BlendIndices; + public Vector3 Normal; public uint Colour0; public uint Colour1; - public Vector3 Normal; - public uint Colour2; - public uint Colour3; public Vector2 Texcoord; public Vector4 Tangent; @@ -320,11 +320,11 @@ namespace CodeWalker.Rendering return new[] { new InputElement("POSITION", 0, Format.R32G32B32_Float, 0, 0), - new InputElement("COLOR", 0, Format.R8G8B8A8_UNorm, 12, 0), - new InputElement("COLOR", 1, Format.R8G8B8A8_UNorm, 16, 0), + new InputElement("BLENDWEIGHTS", 0, Format.R8G8B8A8_UNorm, 12, 0), + new InputElement("BLENDINDICES", 0, Format.R8G8B8A8_UNorm, 16, 0), new InputElement("NORMAL", 0, Format.R32G32B32_Float, 20, 0), - new InputElement("COLOR", 2, Format.R8G8B8A8_UNorm, 32, 0), - new InputElement("COLOR", 3, Format.R8G8B8A8_UNorm, 36, 0), + new InputElement("COLOR", 0, Format.R8G8B8A8_UNorm, 32, 0), + new InputElement("COLOR", 1, Format.R8G8B8A8_UNorm, 36, 0), new InputElement("TEXCOORD", 0, Format.R32G32_Float, 40, 0), new InputElement("TANGENT", 0, Format.R32G32B32A32_Float, 48, 0), }; @@ -356,13 +356,13 @@ namespace CodeWalker.Rendering } } - public struct VertexTypePCCNCTX //id: 168389014, stride: 60, flags: 16479, refs: 1736 + public struct VertexTypePBBNCTX //id: 168389014, stride: 60, flags: 16479, refs: 1736 { public Vector3 Position; - public uint Colour0; - public uint Colour1; + public uint BlendWeights; + public uint BlendIndices; public Vector3 Normal; - public uint Colour2; + public uint Colour0; public Vector2 Texcoord; public Vector4 Tangent; @@ -371,10 +371,10 @@ namespace CodeWalker.Rendering return new[] { new InputElement("POSITION", 0, Format.R32G32B32_Float, 0, 0), - new InputElement("COLOR", 0, Format.R8G8B8A8_UNorm, 12, 0), - new InputElement("COLOR", 1, Format.R8G8B8A8_UNorm, 16, 0), + new InputElement("BLENDWEIGHTS", 0, Format.R8G8B8A8_UNorm, 12, 0), + new InputElement("BLENDINDICES", 0, Format.R8G8B8A8_UNorm, 16, 0), new InputElement("NORMAL", 0, Format.R32G32B32_Float, 20, 0), - new InputElement("COLOR", 2, Format.R8G8B8A8_UNorm, 32, 0), + new InputElement("COLOR", 0, Format.R8G8B8A8_UNorm, 32, 0), new InputElement("TEXCOORD", 0, Format.R32G32_Float, 36, 0), new InputElement("TANGENT", 0, Format.R32G32B32A32_Float, 44, 0), }; @@ -493,13 +493,13 @@ namespace CodeWalker.Rendering } } - public struct VertexTypePCCNCT //id: 84502934, stride: 44, flags: 95, refs: 806 + public struct VertexTypePBBNCT //id: 84502934, stride: 44, flags: 95, refs: 806 { public Vector3 Position; - public uint Colour0; - public uint Colour1; + public uint BlendWeights; + public uint BlendIndices; public Vector3 Normal; - public uint Colour2; + public uint Colour0; public Vector2 Texcoord; public static InputElement[] GetLayout() @@ -507,10 +507,10 @@ namespace CodeWalker.Rendering return new[] { new InputElement("POSITION", 0, Format.R32G32B32_Float, 0, 0), - new InputElement("COLOR", 0, Format.R8G8B8A8_UNorm, 12, 0), - new InputElement("COLOR", 1, Format.R8G8B8A8_UNorm, 16, 0), + new InputElement("BLENDWEIGHTS", 0, Format.R8G8B8A8_UNorm, 12, 0), + new InputElement("BLENDINDICES", 0, Format.R8G8B8A8_UNorm, 16, 0), new InputElement("NORMAL", 0, Format.R32G32B32_Float, 20, 0), - new InputElement("COLOR", 2, Format.R8G8B8A8_UNorm, 32, 0), + new InputElement("COLOR", 0, Format.R8G8B8A8_UNorm, 32, 0), new InputElement("TEXCOORD", 0, Format.R32G32_Float, 36, 0), }; } @@ -573,11 +573,11 @@ namespace CodeWalker.Rendering } } - public struct VertexTypePCCNCCTT //id: 1436117398, stride: 56, flags: 255, refs: 99 + public struct VertexTypePBBNCCTT //id: 1436117398, stride: 56, flags: 255, refs: 99 { public Vector3 Position; - public uint Colour0; - public uint Colour1; + public uint BlendWeights; + public uint BlendIndices; public Vector3 Normal; public uint Colour2; public uint Colour3; @@ -589,11 +589,11 @@ namespace CodeWalker.Rendering return new[] { new InputElement("POSITION", 0, Format.R32G32B32_Float, 0, 0), - new InputElement("COLOR", 0, Format.R8G8B8A8_UNorm, 12, 0), - new InputElement("COLOR", 1, Format.R8G8B8A8_UNorm, 16, 0), + new InputElement("BLENDWEIGHTS", 0, Format.R8G8B8A8_UNorm, 12, 0), + new InputElement("BLENDINDICES", 0, Format.R8G8B8A8_UNorm, 16, 0), new InputElement("NORMAL", 0, Format.R32G32B32_Float, 20, 0), - new InputElement("COLOR", 2, Format.R8G8B8A8_UNorm, 32, 0), - new InputElement("COLOR", 3, Format.R8G8B8A8_UNorm, 36, 0), + new InputElement("COLOR", 0, Format.R8G8B8A8_UNorm, 32, 0), + new InputElement("COLOR", 1, Format.R8G8B8A8_UNorm, 36, 0), new InputElement("TEXCOORD", 0, Format.R32G32_Float, 40, 0), new InputElement("TEXCOORD", 1, Format.R32G32_Float, 48, 0), }; @@ -646,13 +646,13 @@ namespace CodeWalker.Rendering } } - public struct VertexTypePCCCCT //id: 93915542, stride: 36, flags: 119, refs: 2 + public struct VertexTypePBBCCT //id: 93915542, stride: 36, flags: 119, refs: 2 { public Vector3 Position; + public uint BlendWeights; + public uint BlendIndices; public uint Colour0; public uint Colour1; - public uint Colour2; - public uint Colour3; public Vector2 Texcoord; public static InputElement[] GetLayout() @@ -660,32 +660,32 @@ namespace CodeWalker.Rendering return new[] { new InputElement("POSITION", 0, Format.R32G32B32_Float, 0, 0), - new InputElement("COLOR", 0, Format.R8G8B8A8_UNorm, 12, 0), - new InputElement("COLOR", 1, Format.R8G8B8A8_UNorm, 16, 0), - new InputElement("COLOR", 2, Format.R8G8B8A8_UNorm, 20, 0), - new InputElement("COLOR", 3, Format.R8G8B8A8_UNorm, 24, 0), + new InputElement("BLENDWEIGHTS", 0, Format.R8G8B8A8_UNorm, 12, 0), + new InputElement("BLENDINDICES", 0, Format.R8G8B8A8_UNorm, 16, 0), + new InputElement("COLOR", 0, Format.R8G8B8A8_UNorm, 20, 0), + new InputElement("COLOR", 1, Format.R8G8B8A8_UNorm, 24, 0), new InputElement("TEXCOORD", 0, Format.R32G32_Float, 28, 0), }; } } - public struct VertexTypePCCNC //id: 616854, stride: 36, flags: 31, refs: 1 + public struct VertexTypePBBNC //id: 616854, stride: 36, flags: 31, refs: 1 { public Vector3 Position; - public uint Colour0; - public uint Colour1; + public uint BlendWeights; + public uint BlendIndices; public Vector3 Normal; - public uint Colour2; + public uint Colour0; public static InputElement[] GetLayout() { return new[] { new InputElement("POSITION", 0, Format.R32G32B32_Float, 0, 0), - new InputElement("COLOR", 0, Format.R8G8B8A8_UNorm, 12, 0), - new InputElement("COLOR", 1, Format.R8G8B8A8_UNorm, 16, 0), + new InputElement("BLENDWEIGHTS", 0, Format.R8G8B8A8_UNorm, 12, 0), + new InputElement("BLENDINDICES", 0, Format.R8G8B8A8_UNorm, 16, 0), new InputElement("NORMAL", 0, Format.R32G32B32_Float, 20, 0), - new InputElement("COLOR", 2, Format.R8G8B8A8_UNorm, 32, 0), + new InputElement("COLOR", 0, Format.R8G8B8A8_UNorm, 32, 0), }; } } @@ -741,13 +741,13 @@ namespace CodeWalker.Rendering - public struct VertexTypePCCNCTT //id: 1426680214, stride: 52, flags: 223, types: 8598872888530528662, refs: 1470 + public struct VertexTypePBBNCTT //id: 1426680214, stride: 52, flags: 223, types: 8598872888530528662, refs: 1470 { public Vector3 Position; - public uint Colour0; - public uint Colour1; + public uint BlendWeights; + public uint BlendIndices; public Vector3 Normal; - public uint Colour2; + public uint Colour0; public Vector2 Texcoord0; public Vector2 Texcoord1; @@ -756,23 +756,23 @@ namespace CodeWalker.Rendering return new[] { new InputElement("POSITION", 0, Format.R32G32B32_Float, 0, 0), - new InputElement("COLOR", 0, Format.R8G8B8A8_UNorm, 12, 0), - new InputElement("COLOR", 1, Format.R8G8B8A8_UNorm, 16, 0), + new InputElement("BLENDWEIGHTS", 0, Format.R8G8B8A8_UNorm, 12, 0), + new InputElement("BLENDINDICES", 0, Format.R8G8B8A8_UNorm, 16, 0), new InputElement("NORMAL", 0, Format.R32G32B32_Float, 20, 0), - new InputElement("COLOR", 2, Format.R8G8B8A8_UNorm, 32, 0), + new InputElement("COLOR", 0, Format.R8G8B8A8_UNorm, 32, 0), new InputElement("TEXCOORD", 0, Format.R32G32_Float, 36, 0), new InputElement("TEXCOORD", 1, Format.R32G32_Float, 44, 0), }; } } - public struct VertexTypePCCNCTTX //id: 1510566294, stride: 68, flags: 16607, types: 8598872888530528662, refs: 1478 (+9) + public struct VertexTypePBBNCTTX //id: 1510566294, stride: 68, flags: 16607, types: 8598872888530528662, refs: 1478 (+9) { public Vector3 Position; - public uint Colour0; - public uint Colour1; + public uint BlendWeights; + public uint BlendIndices; public Vector3 Normal; - public uint Colour2; + public uint Colour0; public Vector2 Texcoord0; public Vector2 Texcoord1; public Vector4 Tangent; @@ -782,10 +782,10 @@ namespace CodeWalker.Rendering return new[] { new InputElement("POSITION", 0, Format.R32G32B32_Float, 0, 0), - new InputElement("COLOR", 0, Format.R8G8B8A8_UNorm, 12, 0), - new InputElement("COLOR", 1, Format.R8G8B8A8_UNorm, 16, 0), + new InputElement("BLENDWEIGHTS", 0, Format.R8G8B8A8_UNorm, 12, 0), + new InputElement("BLENDINDICES", 0, Format.R8G8B8A8_UNorm, 16, 0), new InputElement("NORMAL", 0, Format.R32G32B32_Float, 20, 0), - new InputElement("COLOR", 2, Format.R8G8B8A8_UNorm, 32, 0), + new InputElement("COLOR", 0, Format.R8G8B8A8_UNorm, 32, 0), new InputElement("TEXCOORD", 0, Format.R32G32_Float, 36, 0), new InputElement("TEXCOORD", 1, Format.R32G32_Float, 44, 0), new InputElement("TANGENT", 0, Format.R32G32B32A32_Float, 52, 0), @@ -793,13 +793,13 @@ namespace CodeWalker.Rendering } } - public struct VertexTypePCCNCTTT //id: 1426680220, stride: 60, flags: 479, types: 8598872888530528662, refs: 1290 + public struct VertexTypePBBNCTTT //id: 1426680220, stride: 60, flags: 479, types: 8598872888530528662, refs: 1290 { public Vector3 Position; - public uint Colour0; - public uint Colour1; + public uint BlendWeights; + public uint BlendIndices; public Vector3 Normal; - public uint Colour2; + public uint Colour0; public Vector2 Texcoord0; public Vector2 Texcoord1; public Vector2 Texcoord2; @@ -809,10 +809,10 @@ namespace CodeWalker.Rendering return new[] { new InputElement("POSITION", 0, Format.R32G32B32_Float, 0, 0), - new InputElement("COLOR", 0, Format.R8G8B8A8_UNorm, 12, 0), - new InputElement("COLOR", 1, Format.R8G8B8A8_UNorm, 16, 0), + new InputElement("BLENDWEIGHTS", 0, Format.R8G8B8A8_UNorm, 12, 0), + new InputElement("BLENDINDICES", 0, Format.R8G8B8A8_UNorm, 16, 0), new InputElement("NORMAL", 0, Format.R32G32B32_Float, 20, 0), - new InputElement("COLOR", 2, Format.R8G8B8A8_UNorm, 32, 0), + new InputElement("COLOR", 0, Format.R8G8B8A8_UNorm, 32, 0), new InputElement("TEXCOORD", 0, Format.R32G32_Float, 36, 0), new InputElement("TEXCOORD", 1, Format.R32G32_Float, 44, 0), new InputElement("TEXCOORD", 2, Format.R32G32_Float, 52, 0), @@ -866,27 +866,27 @@ namespace CodeWalker.Rendering - public struct VertexTypePCCNCTTTX //id: 1510566300, stride: 76, flags: 16863, types: 8598872888530528662, refs: 38 + public struct VertexTypePBBNCTTTX //id: 1510566300, stride: 76, flags: 16863, types: 8598872888530528662, refs: 38 { - public Vector3 Component1; - public uint Component2; - public uint Component3; - public Vector3 Component4; - public uint Component5; - public Vector2 Component6; - public Vector2 Component7; - public Vector2 Component8; - public Vector4 Component9; + public Vector3 Position; + public uint BlendWeights; + public uint BlendIndices; + public Vector3 Normal; + public uint Colour0; + public Vector2 Texcoord0; + public Vector2 Texcoord1; + public Vector2 Texcoord2; + public Vector4 Tangent; public static InputElement[] GetLayout() { return new[] { new InputElement("POSITION", 0, Format.R32G32B32_Float, 0, 0), - new InputElement("COLOR", 0, Format.R8G8B8A8_UNorm, 12, 0), - new InputElement("COLOR", 1, Format.R8G8B8A8_UNorm, 16, 0), + new InputElement("BLENDWEIGHTS", 0, Format.R8G8B8A8_UNorm, 12, 0), + new InputElement("BLENDINDICES", 0, Format.R8G8B8A8_UNorm, 16, 0), new InputElement("NORMAL", 0, Format.R32G32B32_Float, 20, 0), - new InputElement("COLOR", 2, Format.R8G8B8A8_UNorm, 32, 0), + new InputElement("COLOR", 0, Format.R8G8B8A8_UNorm, 32, 0), new InputElement("TEXCOORD", 0, Format.R32G32_Float, 36, 0), new InputElement("TEXCOORD", 1, Format.R32G32_Float, 44, 0), new InputElement("TEXCOORD", 2, Format.R32G32_Float, 52, 0), From 801d530d78f5a6820778da3f3cade83f46ff0210 Mon Sep 17 00:00:00 2001 From: dexy Date: Fri, 21 Dec 2018 22:37:55 +1100 Subject: [PATCH 051/158] Slightly improved newer vehicles rendering --- Rendering/ShaderManager.cs | 10 ++++++++++ Rendering/Shaders/BasicShader.cs | 6 ++++++ 2 files changed, 16 insertions(+) diff --git a/Rendering/ShaderManager.cs b/Rendering/ShaderManager.cs index cbf97af..e65e835 100644 --- a/Rendering/ShaderManager.cs +++ b/Rendering/ShaderManager.cs @@ -1187,11 +1187,14 @@ namespace CodeWalker.Rendering case 1009159769://{vehicle_paint2.sps} case 2045642561://{vehicle_paint3.sps} case 1534086746://{vehicle_paint3_enveff.sps} + case 4262329590://{vehicle_paint4.sps} case 60950417://{vehicle_paint4_enveff.sps} case 249472155://{vehicle_paint5_enveff.sps} case 354168229://{vehicle_paint6_enveff.sps} case 617726044://{vehicle_mesh.sps} + case 1138799003://{vehicle_mesh2_enveff.sps} case 2162256878://{vehicle_tire.sps} + case 1337209217://{vehicle_tire_emissive.sps} case 3106021319://{vehicle_interior.sps} case 2837548125://{vehicle_interior2.sps} case 2094873540://{vehicle_shuts.sps} @@ -1199,21 +1202,25 @@ namespace CodeWalker.Rendering case 2226589567://{vehicle_lights.sps} case 364912658://{vehicle_lightsemissive.sps} case 3030872505://{vehicle_emissive_opaque.sps} + case 1930196358://{vehicle_emissive_alpha.sps} case 146667297://{vehicle_badges.sps} case 4162395624://{vehicle_dash_emissive.sps} case 254152173://{vehicle_dash_emissive_opaque.sps} case 3355845283://{vehicle_detail2.sps} case 4097152976://{vehicle_track.sps} + case 4268056926://{vehicle_track2.sps} case 3631243954://{vehicle_blurredrotor.sps} case 457610770://{vehicle_nosplash.sps} case 3621563260://{vehicle_nowater.sps} case 430888562://{vehicle_paint8.sps} case 4118002252://{vehicle_paint9.sps} case 158342452://{vehicle_detail.sps} + case 482429992://{vehicle_track_emissive.sps} b = BasicBatches; break; case 1041778472://{vehicle_decal.sps} case 1462664157://{vehicle_decal2.sps} + case 15603050://{vehicle_blurredrotor_emissive.sps} b = DecalBatches; break; case 3096299666://{vehicle_vehglass.sps} @@ -1223,6 +1230,9 @@ namespace CodeWalker.Rendering case 3986926894://{vehicle_cloth.sps} b = ClothBatches; break; + case 2617558500://{vehicle_cutout.sps} + b = CutoutBatches; + break; #endregion #region TODO/unused batches case 3333227093://{grass_fur.sps} diff --git a/Rendering/Shaders/BasicShader.cs b/Rendering/Shaders/BasicShader.cs index 99246ca..b586e77 100644 --- a/Rendering/Shaders/BasicShader.cs +++ b/Rendering/Shaders/BasicShader.cs @@ -531,6 +531,7 @@ namespace CodeWalker.Rendering var itex = geom.RenderableTextures[i]; var ihash = geom.TextureParamHashes[i]; if (itex == null) continue; + if (itex.Key?.NameHash == 1678728908 /*"blank"*/) continue; switch (ihash) { case MetaName.DiffuseSampler: @@ -559,6 +560,11 @@ namespace CodeWalker.Rendering break; case MetaName.heightSampler: case MetaName.EnvironmentSampler: + //case MetaName.SnowSampler0: + //case MetaName.SnowSampler1: + //case MetaName.DiffuseSampler2: + //case MetaName.DirtSampler: + //case (MetaName)3157820509://normal? break; case MetaName.FlowSampler: case MetaName.FogSampler: From a7c17f318cc64c39ec1fd6f9361be5d4f0e0e2fd Mon Sep 17 00:00:00 2001 From: dexy Date: Sun, 23 Dec 2018 15:29:35 +1100 Subject: [PATCH 052/158] Render car generators option for MrFoxPro --- Rendering/Renderer.cs | 45 ++++++++++++++++++++- WorldForm.Designer.cs | 90 ++++++++++++++++++++++++----------------- WorldForm.cs | 5 +++ WorldForm.resx | 94 +++++++++++++++++++++---------------------- 4 files changed, 148 insertions(+), 86 deletions(-) diff --git a/Rendering/Renderer.cs b/Rendering/Renderer.cs index 659f31a..1bca21f 100644 --- a/Rendering/Renderer.cs +++ b/Rendering/Renderer.cs @@ -102,6 +102,7 @@ namespace CodeWalker.Rendering public bool renderentities = true; public bool rendergrass = true; public bool renderdistlodlights = true; + public bool rendercars = false; public bool rendercollisionmeshes = Settings.Default.ShowCollisionMeshes; public bool rendercollisionmeshlayerdrawable = true; @@ -1620,7 +1621,17 @@ namespace CodeWalker.Rendering } - + if (rendercars) + { + for (int y = 0; y < VisibleYmaps.Count; y++) + { + var ymap = VisibleYmaps[y]; + if (ymap.CarGenerators != null) + { + RenderYmapCarGenerators(ymap); + } + } + } if (rendergrass) { for (int y = 0; y < VisibleYmaps.Count; y++) @@ -1956,6 +1967,10 @@ namespace CodeWalker.Rendering } } + if (rendercars && ymap.CarGenerators != null) + { + RenderYmapCarGenerators(ymap); + } if (rendergrass && (ymap.GrassInstanceBatches != null)) { RenderYmapGrass(ymap); @@ -2147,6 +2162,34 @@ namespace CodeWalker.Rendering shaders.Enqueue(lights); } + private void RenderYmapCarGenerators(YmapFile ymap) + { + + if (ymap.CarGenerators == null) return; + + var maxdist = 200 * renderworldDetailDistMult; + var maxdist2 = maxdist * maxdist; + + for (int i = 0; i < ymap.CarGenerators.Length; i++) + { + var cg = ymap.CarGenerators[i]; + + var bscent = cg.Position - camera.Position; + float bsrad = cg._CCarGen.perpendicularLength; + if (bscent.LengthSquared() > maxdist2) continue; //don't render distant cars.. + if (!camera.ViewFrustum.ContainsSphereNoClipNoOpt(ref bscent, bsrad)) + { + continue; //frustum cull cars... + } + + + Quaternion cgtrn = Quaternion.RotationAxis(Vector3.UnitZ, (float)Math.PI * -0.5f); //car fragments currently need to be rotated 90 deg right... + Quaternion cgori = Quaternion.Multiply(cg.Orientation, cgtrn); + + RenderCar(cg.Position, cgori, cg._CCarGen.carModel, cg._CCarGen.popGroup); + } + + } diff --git a/WorldForm.Designer.cs b/WorldForm.Designer.cs index f02fe27..38132cf 100644 --- a/WorldForm.Designer.cs +++ b/WorldForm.Designer.cs @@ -254,6 +254,7 @@ namespace CodeWalker this.ToolbarSelectMloInstanceButton = new System.Windows.Forms.ToolStripMenuItem(); this.ToolbarSelectScenarioButton = new System.Windows.Forms.ToolStripMenuItem(); this.ToolbarSelectAudioButton = new System.Windows.Forms.ToolStripMenuItem(); + this.ToolbarSelectOcclusionButton = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); this.ToolbarMoveButton = new System.Windows.Forms.ToolStripButton(); this.ToolbarRotateButton = new System.Windows.Forms.ToolStripButton(); @@ -285,7 +286,7 @@ namespace CodeWalker this.ToolbarCameraMapViewButton = new System.Windows.Forms.ToolStripMenuItem(); this.ToolbarCameraOrthographicButton = new System.Windows.Forms.ToolStripMenuItem(); this.ToolbarPanel = new System.Windows.Forms.Panel(); - this.ToolbarSelectOcclusionButton = new System.Windows.Forms.ToolStripMenuItem(); + this.CarGeneratorsCheckBox = new System.Windows.Forms.CheckBox(); this.StatusStrip.SuspendLayout(); this.ToolsPanel.SuspendLayout(); this.ToolsTabControl.SuspendLayout(); @@ -1300,6 +1301,7 @@ namespace CodeWalker // // tabPage8 // + this.tabPage8.Controls.Add(this.CarGeneratorsCheckBox); this.tabPage8.Controls.Add(this.RenderEntitiesCheckBox); this.tabPage8.Controls.Add(this.AdvancedSettingsButton); this.tabPage8.Controls.Add(this.ControlSettingsButton); @@ -1338,10 +1340,10 @@ namespace CodeWalker this.RenderEntitiesCheckBox.AutoSize = true; this.RenderEntitiesCheckBox.Checked = true; this.RenderEntitiesCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; - this.RenderEntitiesCheckBox.Location = new System.Drawing.Point(10, 32); + this.RenderEntitiesCheckBox.Location = new System.Drawing.Point(10, 30); this.RenderEntitiesCheckBox.Name = "RenderEntitiesCheckBox"; this.RenderEntitiesCheckBox.Size = new System.Drawing.Size(89, 17); - this.RenderEntitiesCheckBox.TabIndex = 67; + this.RenderEntitiesCheckBox.TabIndex = 29; this.RenderEntitiesCheckBox.Text = "Show entities"; this.RenderEntitiesCheckBox.UseVisualStyleBackColor = true; this.RenderEntitiesCheckBox.CheckedChanged += new System.EventHandler(this.RenderEntitiesCheckBox_CheckedChanged); @@ -1351,7 +1353,7 @@ namespace CodeWalker this.AdvancedSettingsButton.Location = new System.Drawing.Point(101, 456); this.AdvancedSettingsButton.Name = "AdvancedSettingsButton"; this.AdvancedSettingsButton.Size = new System.Drawing.Size(93, 23); - this.AdvancedSettingsButton.TabIndex = 61; + this.AdvancedSettingsButton.TabIndex = 46; this.AdvancedSettingsButton.Text = "Advanced..."; this.AdvancedSettingsButton.UseVisualStyleBackColor = true; this.AdvancedSettingsButton.Click += new System.EventHandler(this.AdvancedSettingsButton_Click); @@ -1361,7 +1363,7 @@ namespace CodeWalker this.ControlSettingsButton.Location = new System.Drawing.Point(2, 456); this.ControlSettingsButton.Name = "ControlSettingsButton"; this.ControlSettingsButton.Size = new System.Drawing.Size(93, 23); - this.ControlSettingsButton.TabIndex = 60; + this.ControlSettingsButton.TabIndex = 45; this.ControlSettingsButton.Text = "Controls..."; this.ControlSettingsButton.UseVisualStyleBackColor = true; this.ControlSettingsButton.Click += new System.EventHandler(this.ControlSettingsButton_Click); @@ -1396,7 +1398,7 @@ namespace CodeWalker this.MapViewDetailTrackBar.Minimum = 2; this.MapViewDetailTrackBar.Name = "MapViewDetailTrackBar"; this.MapViewDetailTrackBar.Size = new System.Drawing.Size(188, 45); - this.MapViewDetailTrackBar.TabIndex = 58; + this.MapViewDetailTrackBar.TabIndex = 44; this.MapViewDetailTrackBar.TickFrequency = 2; this.MapViewDetailTrackBar.Value = 10; this.MapViewDetailTrackBar.Scroll += new System.EventHandler(this.MapViewDetailTrackBar_Scroll); @@ -1412,7 +1414,7 @@ namespace CodeWalker this.CameraModeComboBox.Location = new System.Drawing.Point(82, 305); this.CameraModeComboBox.Name = "CameraModeComboBox"; this.CameraModeComboBox.Size = new System.Drawing.Size(112, 21); - this.CameraModeComboBox.TabIndex = 56; + this.CameraModeComboBox.TabIndex = 42; this.CameraModeComboBox.SelectedIndexChanged += new System.EventHandler(this.CameraModeComboBox_SelectedIndexChanged); this.CameraModeComboBox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.CameraModeComboBox_KeyPress); // @@ -1430,10 +1432,10 @@ namespace CodeWalker this.WaterQuadsCheckBox.AutoSize = true; this.WaterQuadsCheckBox.Checked = true; this.WaterQuadsCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; - this.WaterQuadsCheckBox.Location = new System.Drawing.Point(10, 129); + this.WaterQuadsCheckBox.Location = new System.Drawing.Point(10, 135); this.WaterQuadsCheckBox.Name = "WaterQuadsCheckBox"; this.WaterQuadsCheckBox.Size = new System.Drawing.Size(114, 17); - this.WaterQuadsCheckBox.TabIndex = 39; + this.WaterQuadsCheckBox.TabIndex = 35; this.WaterQuadsCheckBox.Text = "Show water quads"; this.WaterQuadsCheckBox.UseVisualStyleBackColor = true; this.WaterQuadsCheckBox.CheckedChanged += new System.EventHandler(this.WaterQuadsCheckBox_CheckedChanged); @@ -1459,10 +1461,10 @@ namespace CodeWalker // TimedEntitiesAlwaysOnCheckBox // this.TimedEntitiesAlwaysOnCheckBox.AutoSize = true; - this.TimedEntitiesAlwaysOnCheckBox.Location = new System.Drawing.Point(131, 83); + this.TimedEntitiesAlwaysOnCheckBox.Location = new System.Drawing.Point(131, 93); this.TimedEntitiesAlwaysOnCheckBox.Name = "TimedEntitiesAlwaysOnCheckBox"; this.TimedEntitiesAlwaysOnCheckBox.Size = new System.Drawing.Size(58, 17); - this.TimedEntitiesAlwaysOnCheckBox.TabIndex = 37; + this.TimedEntitiesAlwaysOnCheckBox.TabIndex = 33; this.TimedEntitiesAlwaysOnCheckBox.Text = "always"; this.TimedEntitiesAlwaysOnCheckBox.UseVisualStyleBackColor = true; this.TimedEntitiesAlwaysOnCheckBox.CheckedChanged += new System.EventHandler(this.TimedEntitiesAlwaysOnCheckBox_CheckedChanged); @@ -1472,10 +1474,10 @@ namespace CodeWalker this.GrassCheckBox.AutoSize = true; this.GrassCheckBox.Checked = true; this.GrassCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; - this.GrassCheckBox.Location = new System.Drawing.Point(10, 57); + this.GrassCheckBox.Location = new System.Drawing.Point(10, 51); this.GrassCheckBox.Name = "GrassCheckBox"; this.GrassCheckBox.Size = new System.Drawing.Size(81, 17); - this.GrassCheckBox.TabIndex = 35; + this.GrassCheckBox.TabIndex = 30; this.GrassCheckBox.Text = "Show grass"; this.GrassCheckBox.UseVisualStyleBackColor = true; this.GrassCheckBox.CheckedChanged += new System.EventHandler(this.GrassCheckBox_CheckedChanged); @@ -1485,10 +1487,10 @@ namespace CodeWalker this.InteriorsCheckBox.AutoSize = true; this.InteriorsCheckBox.Checked = true; this.InteriorsCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; - this.InteriorsCheckBox.Location = new System.Drawing.Point(10, 106); + this.InteriorsCheckBox.Location = new System.Drawing.Point(10, 114); this.InteriorsCheckBox.Name = "InteriorsCheckBox"; this.InteriorsCheckBox.Size = new System.Drawing.Size(92, 17); - this.InteriorsCheckBox.TabIndex = 38; + this.InteriorsCheckBox.TabIndex = 34; this.InteriorsCheckBox.Text = "Show interiors"; this.InteriorsCheckBox.UseVisualStyleBackColor = true; this.InteriorsCheckBox.CheckedChanged += new System.EventHandler(this.InteriorsCheckBox_CheckedChanged); @@ -1498,10 +1500,10 @@ namespace CodeWalker this.CollisionMeshLayerDrawableCheckBox.AutoSize = true; this.CollisionMeshLayerDrawableCheckBox.Checked = true; this.CollisionMeshLayerDrawableCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; - this.CollisionMeshLayerDrawableCheckBox.Location = new System.Drawing.Point(118, 247); + this.CollisionMeshLayerDrawableCheckBox.Location = new System.Drawing.Point(118, 262); this.CollisionMeshLayerDrawableCheckBox.Name = "CollisionMeshLayerDrawableCheckBox"; this.CollisionMeshLayerDrawableCheckBox.Size = new System.Drawing.Size(71, 17); - this.CollisionMeshLayerDrawableCheckBox.TabIndex = 52; + this.CollisionMeshLayerDrawableCheckBox.TabIndex = 41; this.CollisionMeshLayerDrawableCheckBox.Text = "Drawable"; this.CollisionMeshLayerDrawableCheckBox.UseVisualStyleBackColor = true; this.CollisionMeshLayerDrawableCheckBox.CheckedChanged += new System.EventHandler(this.CollisionMeshLayerDrawableCheckBox_CheckedChanged); @@ -1511,10 +1513,10 @@ namespace CodeWalker this.CollisionMeshLayer2CheckBox.AutoSize = true; this.CollisionMeshLayer2CheckBox.Checked = true; this.CollisionMeshLayer2CheckBox.CheckState = System.Windows.Forms.CheckState.Checked; - this.CollisionMeshLayer2CheckBox.Location = new System.Drawing.Point(82, 247); + this.CollisionMeshLayer2CheckBox.Location = new System.Drawing.Point(82, 262); this.CollisionMeshLayer2CheckBox.Name = "CollisionMeshLayer2CheckBox"; this.CollisionMeshLayer2CheckBox.Size = new System.Drawing.Size(32, 17); - this.CollisionMeshLayer2CheckBox.TabIndex = 51; + this.CollisionMeshLayer2CheckBox.TabIndex = 40; this.CollisionMeshLayer2CheckBox.Text = "2"; this.CollisionMeshLayer2CheckBox.UseVisualStyleBackColor = true; this.CollisionMeshLayer2CheckBox.CheckedChanged += new System.EventHandler(this.CollisionMeshLayer2CheckBox_CheckedChanged); @@ -1524,10 +1526,10 @@ namespace CodeWalker this.CollisionMeshLayer1CheckBox.AutoSize = true; this.CollisionMeshLayer1CheckBox.Checked = true; this.CollisionMeshLayer1CheckBox.CheckState = System.Windows.Forms.CheckState.Checked; - this.CollisionMeshLayer1CheckBox.Location = new System.Drawing.Point(46, 247); + this.CollisionMeshLayer1CheckBox.Location = new System.Drawing.Point(46, 262); this.CollisionMeshLayer1CheckBox.Name = "CollisionMeshLayer1CheckBox"; this.CollisionMeshLayer1CheckBox.Size = new System.Drawing.Size(32, 17); - this.CollisionMeshLayer1CheckBox.TabIndex = 50; + this.CollisionMeshLayer1CheckBox.TabIndex = 39; this.CollisionMeshLayer1CheckBox.Text = "1"; this.CollisionMeshLayer1CheckBox.UseVisualStyleBackColor = true; this.CollisionMeshLayer1CheckBox.CheckedChanged += new System.EventHandler(this.CollisionMeshLayer1CheckBox_CheckedChanged); @@ -1535,7 +1537,7 @@ namespace CodeWalker // label13 // this.label13.AutoSize = true; - this.label13.Location = new System.Drawing.Point(4, 229); + this.label13.Location = new System.Drawing.Point(4, 244); this.label13.Name = "label13"; this.label13.Size = new System.Drawing.Size(106, 13); this.label13.TabIndex = 54; @@ -1546,10 +1548,10 @@ namespace CodeWalker this.CollisionMeshLayer0CheckBox.AutoSize = true; this.CollisionMeshLayer0CheckBox.Checked = true; this.CollisionMeshLayer0CheckBox.CheckState = System.Windows.Forms.CheckState.Checked; - this.CollisionMeshLayer0CheckBox.Location = new System.Drawing.Point(10, 247); + this.CollisionMeshLayer0CheckBox.Location = new System.Drawing.Point(10, 262); this.CollisionMeshLayer0CheckBox.Name = "CollisionMeshLayer0CheckBox"; this.CollisionMeshLayer0CheckBox.Size = new System.Drawing.Size(32, 17); - this.CollisionMeshLayer0CheckBox.TabIndex = 49; + this.CollisionMeshLayer0CheckBox.TabIndex = 38; this.CollisionMeshLayer0CheckBox.Text = "0"; this.CollisionMeshLayer0CheckBox.UseVisualStyleBackColor = true; this.CollisionMeshLayer0CheckBox.CheckedChanged += new System.EventHandler(this.CollisionMeshLayer0CheckBox_CheckedChanged); @@ -1557,7 +1559,7 @@ namespace CodeWalker // label12 // this.label12.AutoSize = true; - this.label12.Location = new System.Drawing.Point(4, 178); + this.label12.Location = new System.Drawing.Point(4, 193); this.label12.Name = "label12"; this.label12.Size = new System.Drawing.Size(129, 13); this.label12.TabIndex = 51; @@ -1569,22 +1571,22 @@ namespace CodeWalker | System.Windows.Forms.AnchorStyles.Right))); this.CollisionMeshRangeTrackBar.BackColor = System.Drawing.SystemColors.ControlLightLight; this.CollisionMeshRangeTrackBar.LargeChange = 1; - this.CollisionMeshRangeTrackBar.Location = new System.Drawing.Point(6, 194); + this.CollisionMeshRangeTrackBar.Location = new System.Drawing.Point(6, 209); this.CollisionMeshRangeTrackBar.Maximum = 15; this.CollisionMeshRangeTrackBar.Minimum = 1; this.CollisionMeshRangeTrackBar.Name = "CollisionMeshRangeTrackBar"; this.CollisionMeshRangeTrackBar.Size = new System.Drawing.Size(188, 45); - this.CollisionMeshRangeTrackBar.TabIndex = 48; + this.CollisionMeshRangeTrackBar.TabIndex = 37; this.CollisionMeshRangeTrackBar.Value = 6; this.CollisionMeshRangeTrackBar.Scroll += new System.EventHandler(this.CollisionMeshRangeTrackBar_Scroll); // // CollisionMeshesCheckBox // this.CollisionMeshesCheckBox.AutoSize = true; - this.CollisionMeshesCheckBox.Location = new System.Drawing.Point(10, 156); + this.CollisionMeshesCheckBox.Location = new System.Drawing.Point(10, 171); this.CollisionMeshesCheckBox.Name = "CollisionMeshesCheckBox"; this.CollisionMeshesCheckBox.Size = new System.Drawing.Size(132, 17); - this.CollisionMeshesCheckBox.TabIndex = 47; + this.CollisionMeshesCheckBox.TabIndex = 36; this.CollisionMeshesCheckBox.Text = "Show collision meshes"; this.CollisionMeshesCheckBox.UseVisualStyleBackColor = true; this.CollisionMeshesCheckBox.CheckedChanged += new System.EventHandler(this.CollisionMeshesCheckBox_CheckedChanged); @@ -1605,10 +1607,10 @@ namespace CodeWalker this.TimedEntitiesCheckBox.AutoSize = true; this.TimedEntitiesCheckBox.Checked = true; this.TimedEntitiesCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; - this.TimedEntitiesCheckBox.Location = new System.Drawing.Point(10, 83); + this.TimedEntitiesCheckBox.Location = new System.Drawing.Point(10, 93); this.TimedEntitiesCheckBox.Name = "TimedEntitiesCheckBox"; this.TimedEntitiesCheckBox.Size = new System.Drawing.Size(117, 17); - this.TimedEntitiesCheckBox.TabIndex = 36; + this.TimedEntitiesCheckBox.TabIndex = 32; this.TimedEntitiesCheckBox.Text = "Show timed entities"; this.TimedEntitiesCheckBox.UseVisualStyleBackColor = true; this.TimedEntitiesCheckBox.CheckedChanged += new System.EventHandler(this.TimedEntitiesCheckBox_CheckedChanged); @@ -1624,7 +1626,7 @@ namespace CodeWalker this.FieldOfViewTrackBar.Minimum = 10; this.FieldOfViewTrackBar.Name = "FieldOfViewTrackBar"; this.FieldOfViewTrackBar.Size = new System.Drawing.Size(188, 45); - this.FieldOfViewTrackBar.TabIndex = 57; + this.FieldOfViewTrackBar.TabIndex = 43; this.FieldOfViewTrackBar.TickFrequency = 10; this.FieldOfViewTrackBar.Value = 100; this.FieldOfViewTrackBar.Scroll += new System.EventHandler(this.FieldOfViewTrackBar_Scroll); @@ -2696,7 +2698,7 @@ namespace CodeWalker this.ToolbarCameraModeButton}); this.Toolbar.Location = new System.Drawing.Point(1, 0); this.Toolbar.Name = "Toolbar"; - this.Toolbar.Size = new System.Drawing.Size(585, 25); + this.Toolbar.Size = new System.Drawing.Size(554, 25); this.Toolbar.TabIndex = 6; this.Toolbar.Text = "toolStrip1"; // @@ -2970,6 +2972,13 @@ namespace CodeWalker this.ToolbarSelectAudioButton.Text = "Audio"; this.ToolbarSelectAudioButton.Click += new System.EventHandler(this.ToolbarSelectAudioButton_Click); // + // ToolbarSelectOcclusionButton + // + this.ToolbarSelectOcclusionButton.Name = "ToolbarSelectOcclusionButton"; + this.ToolbarSelectOcclusionButton.Size = new System.Drawing.Size(181, 22); + this.ToolbarSelectOcclusionButton.Text = "Occlusion"; + this.ToolbarSelectOcclusionButton.Click += new System.EventHandler(this.ToolbarSelectOcclusionButton_Click); + // // toolStripSeparator1 // this.toolStripSeparator1.Name = "toolStripSeparator1"; @@ -3261,12 +3270,16 @@ namespace CodeWalker this.ToolbarPanel.TabIndex = 7; this.ToolbarPanel.Visible = false; // - // ToolbarSelectOcclusionButton + // CarGeneratorsCheckBox // - this.ToolbarSelectOcclusionButton.Name = "ToolbarSelectOcclusionButton"; - this.ToolbarSelectOcclusionButton.Size = new System.Drawing.Size(181, 22); - this.ToolbarSelectOcclusionButton.Text = "Occlusion"; - this.ToolbarSelectOcclusionButton.Click += new System.EventHandler(this.ToolbarSelectOcclusionButton_Click); + this.CarGeneratorsCheckBox.AutoSize = true; + this.CarGeneratorsCheckBox.Location = new System.Drawing.Point(10, 72); + this.CarGeneratorsCheckBox.Name = "CarGeneratorsCheckBox"; + this.CarGeneratorsCheckBox.Size = new System.Drawing.Size(124, 17); + this.CarGeneratorsCheckBox.TabIndex = 31; + this.CarGeneratorsCheckBox.Text = "Show car generators"; + this.CarGeneratorsCheckBox.UseVisualStyleBackColor = true; + this.CarGeneratorsCheckBox.CheckedChanged += new System.EventHandler(this.CarGeneratorsCheckBox_CheckedChanged); // // WorldForm // @@ -3610,5 +3623,6 @@ namespace CodeWalker private System.Windows.Forms.Label label26; private System.Windows.Forms.CheckBox RenderEntitiesCheckBox; private System.Windows.Forms.ToolStripMenuItem ToolbarSelectOcclusionButton; + private System.Windows.Forms.CheckBox CarGeneratorsCheckBox; } } \ No newline at end of file diff --git a/WorldForm.cs b/WorldForm.cs index 386f236..f0be335 100644 --- a/WorldForm.cs +++ b/WorldForm.cs @@ -6592,6 +6592,11 @@ namespace CodeWalker Renderer.rendergrass = GrassCheckBox.Checked; } + private void CarGeneratorsCheckBox_CheckedChanged(object sender, EventArgs e) + { + Renderer.rendercars = CarGeneratorsCheckBox.Checked; + } + private void TimedEntitiesCheckBox_CheckedChanged(object sender, EventArgs e) { Renderer.rendertimedents = TimedEntitiesCheckBox.Checked; diff --git a/WorldForm.resx b/WorldForm.resx index fdff026..8689d72 100644 --- a/WorldForm.resx +++ b/WorldForm.resx @@ -248,6 +248,25 @@ ufo YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAB0SURBVDhP7ZNBCoAgEEXnSJ3BqxmetNpaMLhVv5DNRJS2 CxIeuvA9XSjtg5mHEILPxB6U7JyLxphmSkDK1o5x9dst87SUfTXwRsYsA+paT0BGDGsVOJ92hdz3Bz4f wGPC48uu7w5IGd+gBlpRMgYCnRwyESUj3CsQkYNFDwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAAHRJREFUOE/tk0EKgCAQRedIncGrGZ602lowuFW/kM1ElLYLEh668D1dKO2DmYcQ + gs/EHpTsnIvGmGZKQMrWjnH12y3ztJR9NfBGxiwD6lpPQEYMaxU4n3aF3PcHPh/AY8Ljy67vDkgZ36AG + WlEyBgKdHDIRJSPcKxCRg0UPAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + xAAADsQBlSsOGwAAAThJREFUOE+dk01ugzAQhTlBj+MDIJC4A1yEa7DMnlWaSiAu0ZI7BNi0XaRpF7Bg + 4/pzbMsQ0qod6SX2zHvPP4yDdUzTJBR2CieF2YAxOWFot6GKDwrlMAyyKAqZZZkMw1AjTVOdowYHrpFd + w4if67p2os/L1wI2DwfuwkRNSitu2+NdA1szJqUVC7ZGYb9/dOQtA/6bptFjcxyBwY7zkfwL0KDF4ESC + 7bHCx/miCf7qYJ1jjjYYx3Fm0nfDXfJWzhjMzuBweJJvr++b5K1dOQN7hP9AH0H96EvM83zh7q+2zsH1 + L1H0fS+TJHEX+ZsBXDRobS/oRorjWB5/aqSXVkZRJKuqQnxtJEJNXCvjTu9D9kGOmhEvW5kwJiVb43wI + WBXYx9R1nV75RuyHKrrnzCcGjE1u9ZyD4BugoZigQ9xrngAAAABJRU5ErkJggg== @@ -257,6 +276,34 @@ ufo ZI2JiU7VVIVlp7OL+1mllIr7cb8Ie++PQwQYITnnM24NWxoBgsQYm/l+gk699bMsRA4h1JTSPsg0Xert em/mGwh3vW1Z7MvIABSWqXG3+iZHAEw1m4wD49oVANgVOL/VeSgeDAiX1mpWeKy9BIQiI+OxWQF77tG5 2Fc729BmeElf/3lNhORe+oecewDObEqX49RqCgAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADMSURBVDhPrZLBDcMgDEUzGxN0ilyZJ92DqXJoe4Cr + y3f8EXERUptaehVx/F8gzSIil1hKKWIMB8C0EA4hTCXToqCXVFbjOwElKSUF65zzzUbHhad4CYkxyr7v + KvHHIhQ0ybbd5fl4KVhDgns+SPSnDqzYMgQME/TsOO2d/EVQ17ozXmgD2/VHgMCGdY5h9psALwovDBLc + 9GAYcwyzZ//FUZCgiS3btj8k/tqiR3Xn0w+pDp2e2IN+xZJWncAzDINTTQSAwRYGLfQbsrwBmeh5Q8G/ + p8gAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAAH5JREFUOE+9kEEKwCAMBH2bL+hPfI/9ooe2B71aVpKS5iBB0i4MyCZZjcFdrbUu + IdsuDMUYB/8H1Fo3HQCPynOhsZTSU0pPAM7wpiG4hcFAzns/j2uAMzzZo3ntDHiYkTWNXwCztAJr+ROl + 0IhU+UTzMEsHkG2XS4CE7K8Uwg0o2F4o9CrlEwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADLSURBVDhPpZHRDcIwDEQzWxbqGEjZoOzRqfoBfLS/ + Jnf1IWMKAmrpSYl7d3HSYmaHKOu6msNG2BOKPhVEtdZHiPbqfR0QQqy1Rn4OUMg0TQTrZVlOLt2vLnoJ + EcMw2DzPDMEke9AsYBrHs10vN4I1QqImwwDcFyMjQGaBHr5Bo8nEoYCnCQTGzVeI4oj6fIi+KHgoPBhC + 4knCjTww9vxfbIUQNDEyiGIZ8t6tW/k0vC/AOpuiueNOLwVkUeylvju9FJCg8E1vM/2PlTv5UoervVTJ + uQAAAABJRU5ErkJggg== @@ -353,53 +400,6 @@ ufo UIVMtMHfWUUj4nIg/KurGIYrSAZYOXDGlbhXcZlegUO8Yxzb+BlQAwNW0G0jVAYK0AwHtnCEOyQDZvGC ObTbKIIvLMA9WIYDizhFMsDjfsAZptCA9JcdfoVBvryOSbgCe4HPTuCz+BQMKEUvJmCy96ET1ehCuAf2 5ZF+uwdZKEYtmuBGFSIXhtejBe5PHX7dxL+qKPoEppRHcXOtiDsAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wwAADsMBx2+oZAAAAHRJREFUOE/tk0EKgCAQRedIncGrGZ602lowuFW/kM1ElLYLEh668D1dKO2DmYcQ - gs/EHpTsnIvGmGZKQMrWjnH12y3ztJR9NfBGxiwD6lpPQEYMaxU4n3aF3PcHPh/AY8Ljy67vDkgZ36AG - WlEyBgKdHDIRJSPcKxCRg0UPAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - xAAADsQBlSsOGwAAAThJREFUOE+dk01ugzAQhTlBj+MDIJC4A1yEa7DMnlWaSiAu0ZI7BNi0XaRpF7Bg - 4/pzbMsQ0qod6SX2zHvPP4yDdUzTJBR2CieF2YAxOWFot6GKDwrlMAyyKAqZZZkMw1AjTVOdowYHrpFd - w4if67p2os/L1wI2DwfuwkRNSitu2+NdA1szJqUVC7ZGYb9/dOQtA/6bptFjcxyBwY7zkfwL0KDF4ESC - 7bHCx/miCf7qYJ1jjjYYx3Fm0nfDXfJWzhjMzuBweJJvr++b5K1dOQN7hP9AH0H96EvM83zh7q+2zsH1 - L1H0fS+TJHEX+ZsBXDRobS/oRorjWB5/aqSXVkZRJKuqQnxtJEJNXCvjTu9D9kGOmhEvW5kwJiVb43wI - WBXYx9R1nV75RuyHKrrnzCcGjE1u9ZyD4BugoZigQ9xrngAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m - dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADMSURBVDhPrZLBDcMgDEUzGxN0ilyZJ92DqXJoe4Cr - y3f8EXERUptaehVx/F8gzSIil1hKKWIMB8C0EA4hTCXToqCXVFbjOwElKSUF65zzzUbHhad4CYkxyr7v - KvHHIhQ0ybbd5fl4KVhDgns+SPSnDqzYMgQME/TsOO2d/EVQ17ozXmgD2/VHgMCGdY5h9psALwovDBLc - 9GAYcwyzZ//FUZCgiS3btj8k/tqiR3Xn0w+pDp2e2IN+xZJWncAzDINTTQSAwRYGLfQbsrwBmeh5Q8G/ - p8gAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wwAADsMBx2+oZAAAAH5JREFUOE+9kEEKwCAMBH2bL+hPfI/9ooe2B71aVpKS5iBB0i4MyCZZjcFdrbUu - IdsuDMUYB/8H1Fo3HQCPynOhsZTSU0pPAM7wpiG4hcFAzns/j2uAMzzZo3ntDHiYkTWNXwCztAJr+ROl - 0IhU+UTzMEsHkG2XS4CE7K8Uwg0o2F4o9CrlEwAAAABJRU5ErkJggg== - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m - dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADLSURBVDhPpZHRDcIwDEQzWxbqGEjZoOzRqfoBfLS/ - Jnf1IWMKAmrpSYl7d3HSYmaHKOu6msNG2BOKPhVEtdZHiPbqfR0QQqy1Rn4OUMg0TQTrZVlOLt2vLnoJ - EcMw2DzPDMEke9AsYBrHs10vN4I1QqImwwDcFyMjQGaBHr5Bo8nEoYCnCQTGzVeI4oj6fIi+KHgoPBhC - 4knCjTww9vxfbIUQNDEyiGIZ8t6tW/k0vC/AOpuiueNOLwVkUeylvju9FJCg8E1vM/2PlTv5UoervVTJ - uQAAAABJRU5ErkJggg== From ba88a4f2a536e18942eac16780ca20fbd601402c Mon Sep 17 00:00:00 2001 From: dexy Date: Sun, 23 Dec 2018 17:20:49 +1100 Subject: [PATCH 053/158] Not rendering selected cargen twice if already rendering cars --- WorldForm.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/WorldForm.cs b/WorldForm.cs index f0be335..2b1e2d5 100644 --- a/WorldForm.cs +++ b/WorldForm.cs @@ -1319,10 +1319,13 @@ namespace CodeWalker float arrowrad = arrowlen * 0.066f; Renderer.RenderSelectionArrowOutline(cg.Position, Vector3.UnitX, Vector3.UnitY, ori, arrowlen, arrowrad, cgrn); - Quaternion cgtrn = Quaternion.RotationAxis(Vector3.UnitZ, (float)Math.PI * -0.5f); //car fragments currently need to be rotated 90 deg right... - Quaternion cgori = Quaternion.Multiply(ori, cgtrn); + if (!Renderer.rendercars)//only render selected car if not already rendering cars.. + { + Quaternion cgtrn = Quaternion.RotationAxis(Vector3.UnitZ, (float)Math.PI * -0.5f); //car fragments currently need to be rotated 90 deg right... + Quaternion cgori = Quaternion.Multiply(ori, cgtrn); - Renderer.RenderCar(cg.Position, cgori, cg._CCarGen.carModel, cg._CCarGen.popGroup); + Renderer.RenderCar(cg.Position, cgori, cg._CCarGen.carModel, cg._CCarGen.popGroup); + } } if (selectionItem.PathNode != null) { From 2d20746c6546e75cb0640e698c29b6c0fbbe1648 Mon Sep 17 00:00:00 2001 From: dexy Date: Mon, 24 Dec 2018 23:34:44 +1100 Subject: [PATCH 054/158] Dat151 progress --- .../GameFiles/FileTypes/RelFile.cs | 2222 +++++++++++++---- CodeWalker.Core/GameFiles/GameFileCache.cs | 271 +- 2 files changed, 1866 insertions(+), 627 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index 831d64f..a95ad26 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -48,9 +48,23 @@ SOFTWARE. namespace CodeWalker.GameFiles { + public enum RelDatFileType : uint + { + Dat4 = 4, + Dat10ModularSynth = 10, + Dat15DynamicMixer = 15, + Dat16Curves = 16, + Dat22Categories = 22, + Dat54DataEntries = 54, + Dat149 = 149, + Dat150 = 150, + Dat151Parameters = 151 + } + [TC(typeof(EXP))] public class RelFile : GameFile, PackedFile { - public uint RelType { get; set; } + public byte[] RawFileData { get; set; } + public RelDatFileType RelType { get; set; } public uint DataLength { get; set; } public byte[] DataBlock { get; set; } public uint DataUnkVal { get; set; } @@ -91,6 +105,8 @@ namespace CodeWalker.GameFiles public void Load(byte[] data, RpfFileEntry entry) { + RawFileData = data; + RpfFileEntry = entry; Name = entry.Name; @@ -98,7 +114,7 @@ namespace CodeWalker.GameFiles BinaryReader br = new BinaryReader(ms); StringBuilder sb = new StringBuilder(); - RelType = br.ReadUInt32(); //type/version? + RelType = (RelDatFileType)br.ReadUInt32(); //type DataLength = br.ReadUInt32(); //length of data block DataBlock = br.ReadBytes((int)DataLength); //main data block... @@ -134,10 +150,11 @@ namespace CodeWalker.GameFiles IndexCount = br.ReadUInt32(); //count of index items if (IndexCount > 0) { - //checking NameTableLength here doesn't make sense! - if ((RelType == 4) && (NameTableLength == 4))//audioconfig.dat4.rel + if ((RelType == RelDatFileType.Dat4) && (NameTableLength == 4))//audioconfig.dat4.rel //checking NameTableLength here doesn't make sense! { IndexStringFlags = br.ReadUInt32(); //what is this? 2524 + if (IndexStringFlags != 2524) + { } RelIndexString[] indexstrs = new RelIndexString[IndexCount]; for (uint i = 0; i < IndexCount; i++) { @@ -217,6 +234,9 @@ namespace CodeWalker.GameFiles ParseDataBlock(); + + //BuildWavesMaps(); + } @@ -229,6 +249,7 @@ namespace CodeWalker.GameFiles BinaryReader br = new BinaryReader(ms); DataUnkVal = br.ReadUInt32(); //3 bytes used... for? ..version? flags? + #region DataUnkVal unk values test //switch (DataUnkVal) //{ // case 5252715: //dlcbusiness_amp.dat10.rel @@ -262,6 +283,7 @@ namespace CodeWalker.GameFiles // default: // break; //} + #endregion List reldatas = new List(); @@ -300,7 +322,7 @@ namespace CodeWalker.GameFiles JenkIndex.Ensure(reldata.Name); JenkIndex.Ensure(reldata.Name.ToLowerInvariant()); //which one to use? } - + //if (reldata.NameHash == 0) //{ }//no hits here //if (RelDataDict.ContainsKey(reldata.NameHash)) @@ -342,47 +364,6 @@ namespace CodeWalker.GameFiles } } - #region test - //foreach (var d in RelDatas) - //{ - // using (BinaryReader dbr = new BinaryReader(new MemoryStream(d.Data))) - // { - // switch (Type) - // { - // case 4: //00000100 //speech.dat4.rel, audioconfig.dat4.rel - // ParseData4(d, dbr); - // break; - // case 10: //00001010 //amp.dat10.rel - // ParseData10(d, dbr); - // break; - // case 15: //00001111 //mix.dat15.rel - // ParseData15(d, dbr); - // break; - // case 16: //00010000 //curves.dat16.rel - // ParseData16(d, dbr); - // break; - // case 22: //00010110 //categories.dat22.rel - // ParseData22(d, dbr); - // break; - // case 54: //00110110 //sounds.dat54.rel - // ParseData54(d, dbr); - // break; - // case 149: //10010101 //game.dat149.rel - // ParseData149(d, dbr); - // break; - // case 150: //10010110 //game.dat150.rel - // ParseData150(d, dbr); - // break; - // case 151: //10010111 //game.dat151.rel - // ParseData151(d, dbr); - // break; - // default: - // break; - // } - // } - //} - #endregion - } @@ -416,23 +397,23 @@ namespace CodeWalker.GameFiles switch (RelType) { - case 4: //speech.dat4.rel, audioconfig.dat4.rel + case RelDatFileType.Dat4: //speech.dat4.rel, audioconfig.dat4.rel return ReadData4(d, dbr); - case 10: //amp.dat10.rel + case RelDatFileType.Dat10ModularSynth: //amp.dat10.rel return ReadData10(d, dbr); - case 15: //mix.dat15.rel + case RelDatFileType.Dat15DynamicMixer: //mix.dat15.rel return ReadData15(d, dbr); - case 16: //curves.dat16.rel + case RelDatFileType.Dat16Curves: //curves.dat16.rel return ReadData16(d, dbr); - case 22: //categories.dat22.rel + case RelDatFileType.Dat22Categories: //categories.dat22.rel return ReadData22(d, dbr); - case 54: //sounds.dat54.rel + case RelDatFileType.Dat54DataEntries: //sounds.dat54.rel return ReadData54(d, dbr); - case 149: //game.dat149.rel + case RelDatFileType.Dat149: //game.dat149.rel return ReadData149(d, dbr); - case 150: //game.dat150.rel + case RelDatFileType.Dat150: //game.dat150.rel return ReadData150(d, dbr); - case 151: //game.dat151.rel + case RelDatFileType.Dat151Parameters: //game.dat151.rel return ReadData151(d, dbr); default: return d; //shouldn't get here... @@ -515,39 +496,54 @@ namespace CodeWalker.GameFiles } private RelData ReadData149(RelData d, BinaryReader br) { - //RelSound s = new RelSound(d, br); - //return s; - return d; + return ReadData151(d, br);//same as 151? } private RelData ReadData150(RelData d, BinaryReader br) { - return d; + return ReadData151(d, br);//same as 151? } private RelData ReadData151(RelData d, BinaryReader br) { switch ((Dat151RelType)d.TypeID) { - case Dat151RelType.Collision: //maybe for vehicle + case Dat151RelType.Collision: return new Dat151Collision(d, br); //maybe for vehicle + case Dat151RelType.WeaponAudioItem: return new Dat151WeaponAudioItem(d, br); + case Dat151RelType.StartTrackAction: return new Dat151StartTrackAction(d, br); + case Dat151RelType.StopTrackAction: return new Dat151StopTrackAction(d, br); + case Dat151RelType.Mood: return new Dat151Mood(d, br); + case Dat151RelType.SetMoodAction: return new Dat151SetMoodAction(d, br); + case Dat151RelType.PlayerAction: return new Dat151PlayerAction(d, br); + case Dat151RelType.StartOneShotAction: return new Dat151StartOneShotAction(d, br); + case Dat151RelType.StopOneShotAction: return new Dat151StopOneShotAction(d, br); + case Dat151RelType.FadeOutRadioAction: return new Dat151FadeOutRadioAction(d, br); + case Dat151RelType.FadeInRadioAction: return new Dat151FadeInRadioAction(d, br); + case Dat151RelType.Mod: return new Dat151Mod(d, br); + case Dat151RelType.Interior: return new Dat151Interior(d, br); + case Dat151RelType.InteriorRoom: return new Dat151InteriorRoom(d, br); + case Dat151RelType.Unk117: return new Dat151Unk117(d, br); + case Dat151RelType.Entity: return new Dat151Entity(d, br); //not sure about this + case Dat151RelType.Unk47: return new Dat151Unk47(d, br); + case Dat151RelType.Unk83: return new Dat151Unk83(d, br); + case Dat151RelType.RadioDjSpeechAction: return new Dat151RadioDjSpeechAction(d, br); + case Dat151RelType.ForceRadioTrackAction: return new Dat151ForceRadioTrackAction(d, br); + case Dat151RelType.Unk78: return new Dat151Unk78(d, br); + case Dat151RelType.RadioStationsDLC: return new Dat151RadioStationsDLC(d, br); // + case Dat151RelType.RadioDLC: return new Dat151RadioDLC(d, br); + case Dat151RelType.Unk49: return new Dat151Unk49(d, br); + case Dat151RelType.Unk84: return new Dat151Unk84(d, br); + case Dat151RelType.Unk86: return new Dat151Unk86(d, br); + case Dat151RelType.Unk81: return new Dat151Unk81(d, br); + case Dat151RelType.Unk55: return new Dat151Unk55(d, br); + case Dat151RelType.Vehicle: case Dat151RelType.VehicleEngine: - case Dat151RelType.Entity: //not sure about this case Dat151RelType.Stream: //generic audio stream? case Dat151RelType.Helicopter: //maybe case Dat151RelType.SpeechParams: case Dat151RelType.Weapon: - case Dat151RelType.RadioStationsDLC: // - case Dat151RelType.RadioDLC: case Dat151RelType.DLCMusic: case Dat151RelType.PedPVG: //maybe Ped Voice Group? - case Dat151RelType.WeaponAudioItem: case Dat151RelType.Aeroplane: - case Dat151RelType.Mood: - case Dat151RelType.StartTrackAction: - case Dat151RelType.StopTrackAction: - case Dat151RelType.SetMoodAction: - case Dat151RelType.PlayerAction: - case Dat151RelType.StartOneShotAction: - case Dat151RelType.StopOneShotAction: case Dat151RelType.AnimalParams: case Dat151RelType.VehicleScannerParams: //maybe not just vehicle case Dat151RelType.Explosion: @@ -557,10 +553,6 @@ namespace CodeWalker.GameFiles case Dat151RelType.ShoreLineRiver: case Dat151RelType.ShoreLineOcean: case Dat151RelType.ShoreLineList: - case Dat151RelType.RadioDjSpeechAction: - case Dat151RelType.FadeOutRadioAction: - case Dat151RelType.FadeInRadioAction: - case Dat151RelType.ForceRadioTrackAction: case Dat151RelType.Unk2: case Dat151RelType.Unk7: case Dat151RelType.Unk9: @@ -582,17 +574,11 @@ namespace CodeWalker.GameFiles case Dat151RelType.Unk40: case Dat151RelType.Unk41: case Dat151RelType.Unk42: - case Dat151RelType.Interior: case Dat151RelType.Unk45: - case Dat151RelType.InteriorRoom: - case Dat151RelType.Unk47: case Dat151RelType.Unk48: - case Dat151RelType.Unk49: case Dat151RelType.Unk51: - case Dat151RelType.Mod: case Dat151RelType.Unk53: case Dat151RelType.Unk54: - case Dat151RelType.Unk55: case Dat151RelType.Unk56: case Dat151RelType.Unk59: case Dat151RelType.Unk69: @@ -602,15 +588,10 @@ namespace CodeWalker.GameFiles case Dat151RelType.Unk74: case Dat151RelType.Unk75: case Dat151RelType.Unk77: - case Dat151RelType.Unk78: case Dat151RelType.Unk79: case Dat151RelType.Unk80: - case Dat151RelType.Unk81: case Dat151RelType.Unk82: - case Dat151RelType.Unk83: - case Dat151RelType.Unk84: case Dat151RelType.Unk85: - case Dat151RelType.Unk86: case Dat151RelType.Unk95: case Dat151RelType.Unk96: case Dat151RelType.Unk99: @@ -628,7 +609,6 @@ namespace CodeWalker.GameFiles case Dat151RelType.Unk114: case Dat151RelType.Unk115: case Dat151RelType.Unk116: - case Dat151RelType.Unk117: case Dat151RelType.Unk118: case Dat151RelType.Unk119: case Dat151RelType.Unk120: @@ -646,457 +626,290 @@ namespace CodeWalker.GameFiles - - - #region first research - - private void ParseData4(RelData d, BinaryReader br) + private void BuildWavesMaps() { - //speech.dat4.rel, audioconfig.dat4.rel - if (d.DataLength == 1) + var relType = RelType; + switch (RelType) { - byte b = br.ReadByte(); - switch (b) + case RelDatFileType.Dat149: + case RelDatFileType.Dat150://treat these same as 151 + case RelDatFileType.Dat151Parameters: + relType = RelDatFileType.Dat151Parameters; + break; + case RelDatFileType.Dat54DataEntries: + break; + default: + break; + } + + + if (WaveTracksOffsets != null) + { + foreach (var wtoffset in WaveTracksOffsets) { - case 0: - case 25: - case 28: - case 34: - case 89: - case 94: - case 178: - break; - default: - break; + var dboffset = wtoffset - 8; + for (int i = 0; i < RelDatasSorted.Length; i++) + { + var rd = RelDatasSorted[i]; + + if ((dboffset >= rd.DataOffset) && (dboffset < rd.DataOffset + rd.DataLength)) + { + var rdoffset = rd.DataOffset; + var rs = rd as RelSound; + if (rs != null) + { + rdoffset += rs.Header.HeaderLength; + } + var key = new WavesMapKey() + { + FileType = relType, + ItemType = rd.TypeID, + IsContainer = false + }; + var val = new WavesMapValue() + { + Item = rd, + Hash = BitConverter.ToUInt32(DataBlock, (int)dboffset), + Offset = dboffset - rdoffset, + Count = 1 + }; + AddWavesMapItem(ref key, val); + break; + } + } } - return; } - if (d.DataLength == 2) + if (WaveContainersOffsets != null) { - byte b = br.ReadByte(); - switch (b) + foreach (var wcoffset in WaveContainersOffsets) { - case 4: - case 1: - case 15: - case 12: - case 3: - case 2: - case 7: - case 5: - case 158: - case 25: - case 16: - case 64: - case 6: - case 8: - case 14: - case 22: - case 18: - case 20: - case 32: - case 17: - case 30: - case 9: - case 0: - case 47: - case 224: - case 200: - case 136: - case 45: - case 54: - case 28: - case 19: - case 37: - case 61: - case 38: - case 128: - case 24: - case 26: - case 40: - case 13: - case 36: - case 78: - case 34: - case 10: - case 21: - case 192: - case 60: - case 29: - case 33: - case 72: - case 57: - case 133: - case 11: - break; - default: - break; + var dboffset = wcoffset - 8; + for (int i = 0; i < RelDatasSorted.Length; i++) + { + var rd = RelDatasSorted[i]; + if ((dboffset >= rd.DataOffset) && (dboffset < rd.DataOffset + rd.DataLength)) + { + var key = new WavesMapKey() + { + FileType = relType, + ItemType = rd.TypeID, + IsContainer = true + }; + var val = new WavesMapValue() + { + Item = rd, + Hash = BitConverter.ToUInt32(DataBlock, (int)dboffset), + Offset = dboffset - rd.DataOffset, + Count = 1 + }; + AddWavesMapItem(ref key, val); + break; + } + } } - return; - } - if (d.DataLength == 4) - { - uint h = br.ReadUInt32(); - return; } - byte b00 = br.ReadByte(); - switch (b00) - { - case 4: - case 1: - case 0: - case 6: - case 3: - case 2: - case 5: - case 7: - case 15: - case 10: - case 8: - case 9: - break; - - case 23: - case 12: - case 11: - case 16: - case 13: - case 36: - case 30: - case 31: - case 27: - case 20: - case 19: - case 14: - case 40: - case 46: - case 22: - case 18: - case 21: - case 45: - case 17: - case 48: - case 87: - case 38: - case 28: - case 29: - case 43: - case 69: - case 50: - case 25: - case 32: - case 35: - case 34: - break; - default: - break; - } } - private void ParseData10(RelData d, BinaryReader br) + + public struct WavesMapKey { - //amp.dat10.rel + public RelDatFileType FileType { get; set; } + public uint ItemType { get; set; } + public bool IsContainer { get; set; } - byte b00 = br.ReadByte(); - switch (b00) + public override string ToString() { - case 1: - case 3: - break; - default: - break; + var cstr = IsContainer ? "Container: " : ""; + var fcstr = cstr + FileType.ToString() + ": "; + switch (FileType) + { + case RelDatFileType.Dat54DataEntries: + return fcstr + ((Dat54SoundType)ItemType).ToString(); + case RelDatFileType.Dat149: + case RelDatFileType.Dat150: + case RelDatFileType.Dat151Parameters: + return fcstr + ((Dat151RelType)ItemType).ToString(); + } + + return fcstr + ItemType.ToString(); } } - private void ParseData15(RelData d, BinaryReader br) + public class WavesMapValue { - //mix.dat15.rel + public RelData Item { get; set; } + public MetaHash Hash { get; set; } + public uint Offset { get; set; } + public uint Count { get; set; } - byte b00 = br.ReadByte(); - switch (b00) + public override string ToString() { - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - break; - default: - break; + return Offset.ToString() + ": " + Count.ToString(); } } - private void ParseData16(RelData d, BinaryReader br) + public static Dictionary> WavesMap { get; set; } = new Dictionary>(); + private static void AddWavesMapItem(ref WavesMapKey key, WavesMapValue val) { - //curves.dat16.rel - - byte b00 = br.ReadByte(); - switch (b00) + List values = null; + if (!WavesMap.TryGetValue(key, out values)) { - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 12: - case 13: - case 15: - break; - default: - break; + values = new List(); + WavesMap[key] = values; } + if (values != null) + { + foreach (var xval in values) + { + if (xval.Offset == val.Offset) + { + xval.Count++; + return;//same key, same offset, it's a match... + } + } + values.Add(val); + } + else + { } } - private void ParseData22(RelData d, BinaryReader br) + + + + + public byte[] Save() { - //categories.dat22.rel - byte b00 = br.ReadByte(); - switch (b00) - { - case 0: - break; - default: - break; - } - } - private void ParseData54(RelData d, BinaryReader br) - { - //sounds.dat54.rel - byte b00 = br.ReadByte(); - switch (b00) - { - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - case 15: - case 16: - case 17: - case 18: - case 19: - case 20: - case 21: - case 22: - case 23: - case 24: - case 25: - case 26: - case 27: - case 28: - case 29: - case 30: - case 31: - case 32: - case 33: - case 34: - case 35: - break; - default: - break; - } - } - private void ParseData149(RelData d, BinaryReader br) - { - //game.dat149.rel + //build DataBlock + //update DataLength + //update NameTableCount + //update NameTableLength + //update IndexStrings/IndexHashes + //update IndexCount + //update WaveTracksOffsets (and hashes?) + //update WaveTracksCount + //update WaveContainersOffsets + //update WaveContainersCount - byte b00 = br.ReadByte(); - switch (b00) + DataLength = (uint)(DataBlock?.Length ?? 0); + if (NameTable != null) { - case 3: - case 4: - case 17: - case 50: - case 57: - case 62: - case 63: - case 66: - case 76: - case 88: - case 90: - break; - default: - break; + NameTableCount = (uint)NameTable.Length; + uint ntlength = 4 + (4 * NameTableCount); + foreach (var name in NameTable) + { + ntlength += (uint)name.Length + 1; + } + NameTableLength = ntlength; } - } - private void ParseData150(RelData d, BinaryReader br) - { - //game.dat150.rel + else + { + NameTableCount = 0; + NameTableLength = 4; + } + if ((RelType == RelDatFileType.Dat4) && (NameTableLength == 4)) + { + IndexCount = (uint)(IndexStrings?.Length ?? 0); + } + else + { + IndexCount = (uint)(IndexHashes?.Length ?? 0); + } + WaveTracksCount = (uint)(WaveTracksOffsets?.Length ?? 0); + WaveContainersCount = (uint)(WaveContainersOffsets?.Length ?? 0); - byte b00 = br.ReadByte(); - switch (b00) - { - case 3: - case 4: - case 6: - case 8: - case 17: - case 32: - case 37: - case 38: - case 39: - case 47: - case 50: - case 52: - case 57: - case 62: - case 63: - case 64: - case 65: - case 66: - case 76: - case 88: - case 90: - case 117: - break; - default: - break; - } - } - private void ParseData151(RelData d, BinaryReader br) - { - //game.dat151.rel - byte b00 = br.ReadByte(); //??? - switch (b00) + + + //write the file data. + + MemoryStream ms = new MemoryStream(); + BinaryWriter bw = new BinaryWriter(ms); + + + bw.Write((uint)RelType); + bw.Write(DataLength); + bw.Write(DataBlock); + + bw.Write(NameTableLength); + bw.Write(NameTableCount); + if (NameTableCount > 0) { - case 1://new - case 2://new - case 3: - case 4: - case 5://new - case 6: - case 7://new - case 8:// - case 9://new - case 11://new - case 12://new - case 13://new - case 14://new - case 15://new - case 16://new - case 17: - case 18://new - case 22://new - case 23://new - case 24://new - case 25://new - case 26://new - case 27://new - case 28://new - case 29://new - case 30://new - case 31://new - case 32:// - case 33://new - case 35://new - case 36://new - case 37:// - case 38:// - case 39:// - case 40://new - case 41://new - case 42://new - case 44://new - case 45://new - case 46://new - case 47:// - case 48://new - case 49://new - case 50: - case 51://new - case 52:// - case 53://new - case 54://new - case 55://new - case 56://new - case 57: - case 59://new - case 62: - case 63: - case 64: - case 65:// - case 66: - case 67://new - case 68://new - case 69://new - case 70://new - case 71://new - case 72://new - case 73://new - case 74://new - case 75://new - case 76: - case 77://new - case 78://new - case 79://new - case 80://new - case 81://new - case 82://new - case 83://new - case 84://new - case 85://new - case 86://new - case 87://new - case 88: - case 90: - case 91://new - case 92://new - case 93://new - case 94://new - case 95://new - case 96://new - case 98://new - case 99://new - case 100://new - case 101://new - case 102://new - case 103://new - case 104://new - case 105://new - case 106://new - case 107://new - case 108://new - case 109://new - case 110://new - case 111://new - case 112://new - case 113://new - case 114://new - case 115://new - case 116://new - case 117: - case 118://new - case 119://new - case 120://new - case 121://new - break; - default: - break; + uint offset = 0; + foreach (var name in NameTable) + { + bw.Write(offset); + offset += (uint)name.Length + 1; + } + foreach (var name in NameTable) + { + foreach (var c in name) + { + bw.Write(c); + } + bw.Write((byte)0); + } + } + + bw.Write(IndexCount); + if (IndexCount > 0) + { + if ((RelType == RelDatFileType.Dat4) && (NameTableLength == 4))//audioconfig.dat4.rel //checking NameTableLength here doesn't make sense! + { + bw.Write(IndexStringFlags); //should be 2524..? could be a length? + for (uint i = 0; i < IndexCount; i++) + { + var ristr = IndexStrings[i]; + var name = ristr.Name; + bw.Write((byte)name.Length); + for (int j = 0; j < name.Length; j++) + { + bw.Write((byte)name[j]); + } + bw.Write(ristr.Offset); + bw.Write(ristr.Length); + } + } + else //for all other .rel files... + { + for (uint i = 0; i < IndexCount; i++) + { + var rihash = IndexHashes[i]; + bw.Write(rihash.Name); + bw.Write(rihash.Offset); + bw.Write(rihash.Length); + } + } + } + + bw.Write(WaveTracksCount); + if (WaveTracksCount != 0) + { + for (uint i = 0; i < WaveTracksCount; i++) + { + bw.Write(WaveTracksOffsets[i]); + } + } + + bw.Write(WaveContainersCount); + if (WaveContainersCount != 0) + { + for (uint i = 0; i < WaveContainersCount; i++) + { + bw.Write(WaveContainersOffsets[i]); + } + } + + + var buf = new byte[ms.Length]; + ms.Position = 0; + ms.Read(buf, 0, buf.Length); + return buf; + } - #endregion + @@ -1173,6 +986,11 @@ namespace CodeWalker.GameFiles TypeID = br.ReadByte(); } + public virtual uint[] GetWaveTrackOffsets() + { + return null; + } + public string GetNameString() { return (string.IsNullOrEmpty(Name)) ? NameHash.ToString() : Name; @@ -1230,15 +1048,17 @@ namespace CodeWalker.GameFiles public ushort Unk22 { get; set; } //0x46-0x48 public ushort Unk23 { get; set; } //0x48-0x4A public ushort Unk24 { get; set; } //0x4A-0x4C - public ushort Unk25 { get; set; } //0x4A-0x4C public ushort Unk26 { get; set; } //0x4A-0x4C + public uint HeaderLength { get; set; } = 0; + public RelSoundHeader(BinaryReader br) { - Flags = br.ReadUInt32(); + var pos = br.BaseStream.Position; + Flags = br.ReadUInt32(); //if (Flags.Value != 0xAAAAAAAA) if ((Flags.Value & 0xFF) != 0xAA) @@ -1285,6 +1105,9 @@ namespace CodeWalker.GameFiles if (Bit(30)) Unk25 = br.ReadUInt16(); //maybe not if (Bit(31)) Unk26 = br.ReadUInt16(); //maybe not } + + HeaderLength = (uint)(br.BaseStream.Position - pos); + } private bool Bit(int b) @@ -1324,6 +1147,11 @@ namespace CodeWalker.GameFiles + + + #region dat54 + + public enum Dat54SoundType : byte { LoopingSound = 1, @@ -2361,9 +2189,14 @@ namespace CodeWalker.GameFiles } + #endregion + + #region dat151 + + public enum Dat151RelType : byte //not sure how correct these are? { Collision = 1, //maybe for vehicle @@ -2408,7 +2241,7 @@ namespace CodeWalker.GameFiles InteriorRoom = 46, Unk47 = 47, Unk48 = 48, - Unk49 = 49, + Unk49 = 49, //doors/gates? WeaponAudioItem = 50, Unk51 = 51, Mod = 52, //what actually is a "mod" here? a change in some audio settings maybe? @@ -2439,7 +2272,7 @@ namespace CodeWalker.GameFiles Unk80 = 80, Unk81 = 81, Unk82 = 82, - Unk83 = 83, + Unk83 = 83, //something to do with animals Unk84 = 84, Unk85 = 85, Unk86 = 86, @@ -2481,6 +2314,7 @@ namespace CodeWalker.GameFiles [TC(typeof(EXP))] public class Dat151RelData : RelData { public Dat151RelType Type { get; set; } + public uint NameTableOffset { get; set; } public static int TotCount = 0; //###############DEBUGG @@ -2500,8 +2334,13 @@ namespace CodeWalker.GameFiles public Dat151RelData(RelData d, BinaryReader br) : base(d) { Type = (Dat151RelType)TypeID; + + br.BaseStream.Position = 0; //1 byte was read already (TypeID) + + NameTableOffset = ((br.ReadUInt32() >> 8) & 0xFFFFFF); } + public override string ToString() { return GetBaseString() + ": " + Type.ToString(); @@ -2531,15 +2370,11 @@ namespace CodeWalker.GameFiles [TC(typeof(EXP))] public class Dat151AmbientEmitterList : Dat151RelData { - public uint UnkOffset0 { get; set; } public uint EmitterCount { get; set; } public MetaHash[] EmitterHashes { get; set; } public Dat151AmbientEmitterList(RelData d, BinaryReader br) : base(d, br) { - br.BaseStream.Position = 0; //1 byte was read already (TypeID) - - UnkOffset0 = ((br.ReadUInt32() >> 8) & 0xFFFFFF); EmitterCount = br.ReadUInt32(); EmitterHashes = new MetaHash[EmitterCount]; for (int i = 0; i < EmitterCount; i++) @@ -2551,11 +2386,11 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } //no hits here + } } [TC(typeof(EXP))] public class Dat151AmbientZone : Dat151RelData { - public uint UnkOffset0 { get; set; } public FlagsUint Flags00 { get; set; } public Dat151ZoneShape Shape { get; set; } public FlagsUint Flags02 { get; set; } @@ -2607,9 +2442,6 @@ namespace CodeWalker.GameFiles public Dat151AmbientZone(RelData d, BinaryReader br) : base(d, br) { - br.BaseStream.Position = 0; //1 byte was read already (TypeID) - - UnkOffset0 = ((br.ReadUInt32() >> 8) & 0xFFFFFF); Flags00 = br.ReadUInt32(); Shape = (Dat151ZoneShape)br.ReadUInt32(); Flags02 = br.ReadUInt32(); @@ -2689,12 +2521,12 @@ namespace CodeWalker.GameFiles { }//no hit if (Flags05.Value != 0) { }//eg 0xAE64583B, 0x61083310, 0xCAE96294, 0x1C376176 + } } [TC(typeof(EXP))] public class Dat151AmbientEmitter : Dat151RelData { - public uint UnkOffset0 { get; set; } public FlagsUint Unk00 { get; set; } public FlagsUint Unk01 { get; set; } public FlagsUint Unk02 { get; set; } @@ -2743,9 +2575,6 @@ namespace CodeWalker.GameFiles public Dat151AmbientEmitter(RelData d, BinaryReader br) : base(d, br) { - br.BaseStream.Position = 0; //1 byte was read already (TypeID) - - UnkOffset0 = ((br.ReadUInt32() >> 8) & 0xFFFFFF); Unk00 = br.ReadUInt32(); Unk01 = br.ReadUInt32(); Unk02 = br.ReadUInt32(); @@ -3024,15 +2853,11 @@ namespace CodeWalker.GameFiles } [TC(typeof(EXP))] public class Dat151AmbientZoneList : Dat151RelData { - public uint UnkOffset0 { get; set; } public uint ZoneCount { get; set; } public MetaHash[] ZoneHashes { get; set; } public Dat151AmbientZoneList(RelData d, BinaryReader br) : base(d, br) { - br.BaseStream.Position = 0; //1 byte was read already (TypeID) - - UnkOffset0 = ((br.ReadUInt32() >> 8) & 0xFFFFFF); ZoneCount = br.ReadUInt32(); ZoneHashes = new MetaHash[ZoneCount]; for (int i = 0; i < ZoneCount; i++) @@ -3048,4 +2873,1363 @@ namespace CodeWalker.GameFiles } + + [TC(typeof(EXP))] public struct Dat151HashPair + { + public MetaHash Hash0 { get; set; } + public MetaHash Hash1 { get; set; } + + public Dat151HashPair(MetaHash hash0, MetaHash hash1) + { + Hash0 = hash0; + Hash1 = hash1; + } + + public override string ToString() + { + return Hash0.ToString() + ": " + Hash1.ToString(); + } + } + + [TC(typeof(EXP))] public class Dat151WeaponAudioItem : Dat151RelData + { + public MetaHash AudioTrack0 { get; set; } + public uint AudioItemCount { get; set; } + public Dat151HashPair[] AudioItems { get; set; } + + public Dat151WeaponAudioItem(RelData d, BinaryReader br) : base(d, br) + { + AudioTrack0 = br.ReadUInt32(); + AudioItemCount = br.ReadUInt32(); + + Dat151HashPair[] items = new Dat151HashPair[AudioItemCount]; + for (int i = 0; i < AudioItemCount; i++) + { + items[i] = new Dat151HashPair(br.ReadUInt32(), br.ReadUInt32()); + } + this.AudioItems = items; + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + + public override uint[] GetWaveTrackOffsets() + { + var offsets = new List(); + offsets.Add(0); + for (uint i = 0; i < AudioItemCount; i++) + { + offsets.Add(12 + i * 8); + } + return offsets.ToArray(); + } + } + [TC(typeof(EXP))] public class Dat151StartTrackAction : Dat151RelData + { + public uint Unk0 { get; set; } + public uint Unk1 { get; set; } + public uint Unk2 { get; set; } + public MetaHash AudioTrack0 { get; set; } + public MetaHash AudioTrack1 { get; set; } + public int Unk3 { get; set; } + public int Unk4 { get; set; } + public MetaHash AudioTrack2 { get; set; } + public uint Unk5 { get; set; } + public uint Unk6 { get; set; } + public uint Unk7 { get; set; } + public uint Unk8 { get; set; } + public uint Unk9 { get; set; } + public uint ItemCount { get; set; } + public Dat151HashPair[] Items { get; set; } + + + public Dat151StartTrackAction(RelData d, BinaryReader br) : base(d, br) + { + Unk0 = br.ReadUInt32(); + Unk1 = br.ReadUInt32(); + Unk2 = br.ReadUInt32(); + AudioTrack0 = br.ReadUInt32(); + AudioTrack1 = br.ReadUInt32(); + Unk3 = br.ReadInt32(); + Unk4 = br.ReadInt32(); + AudioTrack2 = br.ReadUInt32(); + Unk5 = br.ReadUInt32(); + Unk6 = br.ReadUInt32(); + Unk7 = br.ReadUInt32(); + Unk8 = br.ReadUInt32(); + Unk9 = br.ReadUInt32(); + ItemCount = br.ReadUInt32(); + + Dat151HashPair[] items = new Dat151HashPair[ItemCount]; + for (int i = 0; i < ItemCount; i++) + { + items[i] = new Dat151HashPair(br.ReadUInt32(), br.ReadUInt32()); + } + this.Items = items; + + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + + public override uint[] GetWaveTrackOffsets() + { + return new uint[] { 12, 16, 28 }; + } + } + [TC(typeof(EXP))] public class Dat151StopTrackAction : Dat151RelData + { + public uint Unk0 { get; set; } + public uint Unk1 { get; set; } + public uint Unk2 { get; set; } + public MetaHash AudioTrack0 { get; set; } + public MetaHash AudioTrack1 { get; set; } + public int Unk3 { get; set; } + public int Unk4 { get; set; } + + public Dat151StopTrackAction(RelData d, BinaryReader br) : base(d, br) + { + Unk0 = br.ReadUInt32(); + Unk1 = br.ReadUInt32(); + Unk2 = br.ReadUInt32(); + AudioTrack0 = br.ReadUInt32(); + AudioTrack1 = br.ReadUInt32(); + Unk3 = br.ReadInt32(); + Unk4 = br.ReadInt32(); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + + public override uint[] GetWaveTrackOffsets() + { + return new uint[] { 12, 16 }; + } + + } + [TC(typeof(EXP))] public class Dat151MoodItem + { + public MetaHash AudioTrack0 { get; set; } + public MetaHash AudioTrack1 { get; set; } + public float Unk1 { get; set; } + public float Unk2 { get; set; } + public float Unk3 { get; set; } + public float Unk4 { get; set; } + public MetaHash AudioTrack2 { get; set; } + public MetaHash AudioTrack3 { get; set; } + + public override string ToString() + { + return AudioTrack0.ToString(); + } + + public Dat151MoodItem(BinaryReader br) + { + AudioTrack0 = br.ReadUInt32(); + AudioTrack1 = br.ReadUInt32(); + Unk1 = br.ReadSingle(); + Unk2 = br.ReadSingle(); + Unk3 = br.ReadSingle(); + Unk4 = br.ReadSingle(); + AudioTrack2 = br.ReadUInt32(); + AudioTrack3 = br.ReadUInt32(); + } + } + [TC(typeof(EXP))] public class Dat151Mood : Dat151RelData + { + public MetaHash Unk0 { get; set; } + public MetaHash Unk1 { get; set; } + public MetaHash Unk2 { get; set; } + public uint MoodItemCount { get; set; } + public Dat151MoodItem[] MoodItems { get; set; } + + public Dat151Mood(RelData d, BinaryReader br) : base(d, br) + { + Unk0 = br.ReadUInt32(); + Unk1 = br.ReadUInt32(); + Unk2 = br.ReadUInt32(); + MoodItemCount = br.ReadUInt32(); + var items = new Dat151MoodItem[MoodItemCount]; + for (int i = 0; i < MoodItemCount; i++) + { + items[i] = new Dat151MoodItem(br); + } + MoodItems = items; + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + + public override uint[] GetWaveTrackOffsets() + { + var offsets = new List(); + for (uint i = 0; i < MoodItemCount; i++) + { + var offs = 16 + i * 32; //offsets for each mood item's audio tracks + offsets.Add(offs); + offsets.Add(offs + 4); + offsets.Add(offs + 24); + offsets.Add(offs + 28); + } + return offsets.ToArray(); + } + + } + [TC(typeof(EXP))] public class Dat151SetMoodAction : Dat151RelData + { + public uint Unk0 { get; set; } + public uint Unk1 { get; set; } + public uint Unk2 { get; set; } + public MetaHash AudioTrack0 { get; set; } + public MetaHash AudioTrack1 { get; set; } + public uint Unk3 { get; set; } + public MetaHash AudioTrack2 { get; set; } + public uint Unk4 { get; set; } + public uint Unk5 { get; set; } + public uint Unk6 { get; set; } + + public Dat151SetMoodAction(RelData d, BinaryReader br) : base(d, br) + { + Unk0 = br.ReadUInt32(); + Unk1 = br.ReadUInt32(); + Unk2 = br.ReadUInt32(); + AudioTrack0 = br.ReadUInt32(); + AudioTrack1 = br.ReadUInt32(); + Unk3 = br.ReadUInt32(); + AudioTrack2 = br.ReadUInt32(); + Unk4 = br.ReadUInt32(); + Unk5 = br.ReadUInt32(); + Unk6 = br.ReadUInt32(); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override uint[] GetWaveTrackOffsets() + { + return new uint[] { 12, 16, 24 }; + } + } + [TC(typeof(EXP))] public class Dat151PlayerAction : Dat151RelData + { + public uint AudioTrackCount { get; set; } + public MetaHash[] AudioTracks { get; set; } + + public Dat151PlayerAction(RelData d, BinaryReader br) : base(d, br) + { + AudioTrackCount = br.ReadUInt32(); + var tracks = new MetaHash[AudioTrackCount]; + for (int i = 0; i < AudioTrackCount; i++) + { + tracks[i] = br.ReadUInt32(); + } + AudioTracks = tracks; + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override uint[] GetWaveTrackOffsets() + { + var offsets = new List(); + for (uint i = 0; i < AudioTrackCount; i++) + { + var offs = 4 + i * 4; //offsets for each audio track + offsets.Add(offs); + } + return offsets.ToArray(); + } + + } + [TC(typeof(EXP))] public class Dat151StartOneShotAction : Dat151RelData + { + public uint Unk0 { get; set; } + public uint Unk1 { get; set; } + public uint Unk2 { get; set; } + public MetaHash AudioTrack0 { get; set; } + public MetaHash AudioTrack1 { get; set; } + public uint Unk3 { get; set; } + public MetaHash Unk4 { get; set; } + public int Unk5 { get; set; } + public int Unk6 { get; set; } + public int Unk7 { get; set; } + public int Unk8 { get; set; } + + public Dat151StartOneShotAction(RelData d, BinaryReader br) : base(d, br) + { + Unk0 = br.ReadUInt32(); + Unk1 = br.ReadUInt32(); + Unk2 = br.ReadUInt32(); + AudioTrack0 = br.ReadUInt32(); + AudioTrack1 = br.ReadUInt32(); + Unk3 = br.ReadUInt32(); + Unk4 = br.ReadUInt32(); + Unk5 = br.ReadInt32(); + Unk6 = br.ReadInt32(); + Unk7 = br.ReadInt32(); + Unk8 = br.ReadInt32(); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override uint[] GetWaveTrackOffsets() + { + return new uint[] { 12, 16 }; + } + } + [TC(typeof(EXP))] public class Dat151StopOneShotAction : Dat151RelData + { + public uint Unk0 { get; set; } + public uint Unk1 { get; set; } + public uint Unk2 { get; set; } + public MetaHash AudioTrack0 { get; set; } + public MetaHash AudioTrack1 { get; set; } + public uint Unk3 { get; set; } + + public Dat151StopOneShotAction(RelData d, BinaryReader br) : base(d, br) + { + Unk0 = br.ReadUInt32(); + Unk1 = br.ReadUInt32(); + Unk2 = br.ReadUInt32(); + AudioTrack0 = br.ReadUInt32(); + AudioTrack1 = br.ReadUInt32(); + Unk3 = br.ReadUInt32(); + + if (Unk3 != 0) + { } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override uint[] GetWaveTrackOffsets() + { + return new uint[] { 12, 16 }; + } + } + [TC(typeof(EXP))] public class Dat151FadeInRadioAction : Dat151RelData + { + public uint Unk0 { get; set; } + public uint Unk1 { get; set; } + public uint Unk2 { get; set; } + public MetaHash AudioTrack0 { get; set; } + public MetaHash AudioTrack1 { get; set; } + public float Unk3 { get; set; } + public float Unk4 { get; set; } + + public Dat151FadeInRadioAction(RelData d, BinaryReader br) : base(d, br) + { + Unk0 = br.ReadUInt32(); + Unk1 = br.ReadUInt32(); + Unk2 = br.ReadUInt32(); + AudioTrack0 = br.ReadUInt32(); + AudioTrack1 = br.ReadUInt32(); + Unk3 = br.ReadSingle(); + Unk4 = br.ReadSingle(); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override uint[] GetWaveTrackOffsets() + { + return new uint[] { 12, 16 }; + } + } + [TC(typeof(EXP))] public class Dat151FadeOutRadioAction : Dat151RelData + { + public uint Unk0 { get; set; } + public uint Unk1 { get; set; } + public uint Unk2 { get; set; } + public MetaHash AudioTrack0 { get; set; } + public MetaHash AudioTrack1 { get; set; } + public float Unk3 { get; set; } + public float Unk4 { get; set; } + + public Dat151FadeOutRadioAction(RelData d, BinaryReader br) : base(d, br) + { + Unk0 = br.ReadUInt32(); + Unk1 = br.ReadUInt32(); + Unk2 = br.ReadUInt32(); + AudioTrack0 = br.ReadUInt32(); + AudioTrack1 = br.ReadUInt32(); + Unk3 = br.ReadSingle(); + Unk4 = br.ReadSingle(); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override uint[] GetWaveTrackOffsets() + { + return new uint[] { 12, 16 }; + } + } + [TC(typeof(EXP))] public class Dat151Mod : Dat151RelData + { + public uint Unk00 { get; set; } + public uint Unk01 { get; set; } + public uint Unk02 { get; set; } + public uint Unk03 { get; set; } + public MetaHash Unk04 { get; set; } + public MetaHash Unk05 { get; set; } + public MetaHash Unk06 { get; set; } + public MetaHash Unk07 { get; set; } + public MetaHash Unk08 { get; set; } + public float Unk09 { get; set; } + public float Unk10 { get; set; } + public MetaHash Unk11 { get; set; } + public MetaHash Unk12 { get; set; } + public MetaHash Unk13 { get; set; } + public MetaHash Unk14 { get; set; } + public uint Unk15 { get; set; } + public byte AudioTracks1Count { get; set; } + public Dat151HashPair[] AudioTracks1 { get; set; } + public uint AudioTracks2Count { get; set; } + public MetaHash[] AudioTracks2 { get; set; } + + + public Dat151Mod(RelData d, BinaryReader br) : base(d, br) + { + Unk00 = br.ReadUInt32(); + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadUInt32(); + Unk03 = br.ReadUInt32(); + Unk04 = br.ReadUInt32(); + Unk05 = br.ReadUInt32(); + Unk06 = br.ReadUInt32(); + Unk07 = br.ReadUInt32(); + Unk08 = br.ReadUInt32(); + Unk09 = br.ReadSingle(); + Unk10 = br.ReadSingle(); + Unk11 = br.ReadUInt32(); + Unk12 = br.ReadUInt32(); + Unk13 = br.ReadUInt32(); + Unk14 = br.ReadUInt32(); + Unk15 = br.ReadUInt32(); + + byte tc1 = (byte)((Unk15) & 0xFF); + byte tc2 = (byte)((Unk15 >> 8) & 0xFF); + byte tc3 = (byte)((Unk15 >> 16) & 0xFF); + byte tc4 = (byte)((Unk15 >> 24) & 0xFF); + + switch (tc1)//not sure what this is + { + case 0: + case 1: + case 2: + case 3: + case 4: + break; + default: + break; + } + + AudioTracks1Count = tc2; + + if (tc3 > 0) + { } + if (tc4 > 0) + { } + + if (AudioTracks1Count == 0) + { + var AudioTrack0 = br.ReadUInt32(); + AudioTracks2 = new MetaHash[] { AudioTrack0 }; + } + else //if (AudioTracks1Count > 0) + { + var tracks1 = new Dat151HashPair[AudioTracks1Count]; + for (int i = 0; i < AudioTracks1Count; i++) + { + tracks1[i] = new Dat151HashPair(br.ReadUInt32(), br.ReadUInt32()); + } + AudioTracks1 = tracks1; + + AudioTracks2Count = br.ReadUInt32(); + + var tracks2 = new MetaHash[AudioTracks2Count]; + for (int i = 0; i < AudioTracks2Count; i++) + { + tracks2[i] = br.ReadUInt32(); + } + AudioTracks2 = tracks2; + } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + + public override uint[] GetWaveTrackOffsets() + { + var offsets = new List(); + uint offs = 64; + if (AudioTracks1Count == 0) + { + } + else //if (AudioTracks1Count > 0) + { + for (uint i = 0; i < AudioTracks1Count; i++) + { + offsets.Add(offs); + offsets.Add(offs + 4); + offs += 8; + } + offs += 4; + for (uint i = 0; i < AudioTracks2Count; i++) + { + offsets.Add(offs); + offs += 4; + } + } + + return offsets.ToArray(); + } + + } + [TC(typeof(EXP))] public class Dat151Interior : Dat151RelData + { + public uint Unk0 { get; set; } + public uint Unk1 { get; set; } + public uint Unk2 { get; set; } + public uint AudioTracksCount { get; set; } + public MetaHash[] AudioTracks { get; set; } + + public Dat151Interior(RelData d, BinaryReader br) : base(d, br) + { + Unk0 = br.ReadUInt32(); + Unk1 = br.ReadUInt32(); + Unk2 = br.ReadUInt32(); + AudioTracksCount = br.ReadUInt32(); + var tracks = new MetaHash[AudioTracksCount]; + for (int i = 0; i < AudioTracksCount; i++) + { + tracks[i] = br.ReadUInt32(); + } + AudioTracks = tracks; + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + + public override uint[] GetWaveTrackOffsets() + { + var offsets = new List(); + for (uint i = 0; i < AudioTracksCount; i++) + { + offsets.Add(16 + i * 4); + } + return offsets.ToArray(); + } + } + [TC(typeof(EXP))] public class Dat151InteriorRoom : Dat151RelData + { + public uint Unk00 { get; set; } + public MetaHash Unk01 { get; set; } + public MetaHash AudioTrack0 { get; set; } + public uint Unk02 { get; set; } + public float Unk03 { get; set; } + public float Unk04 { get; set; } + public float Unk05 { get; set; } + public MetaHash Unk06 { get; set; } + public uint Unk07 { get; set; } + public uint Unk08 { get; set; } + public uint Unk09 { get; set; } + public float Unk10 { get; set; } + public float Unk11 { get; set; } + public float Unk12 { get; set; } + public float Unk13 { get; set; } + public MetaHash Unk14 { get; set; } + + public Dat151InteriorRoom(RelData d, BinaryReader br) : base(d, br) + { + Unk00 = br.ReadUInt32(); + Unk01 = br.ReadUInt32(); + AudioTrack0 = br.ReadUInt32(); + Unk02 = br.ReadUInt32(); + Unk03 = br.ReadSingle(); + Unk04 = br.ReadSingle(); + Unk05 = br.ReadSingle(); + Unk06 = br.ReadUInt32(); + Unk07 = br.ReadUInt32(); + Unk08 = br.ReadUInt32(); + Unk09 = br.ReadUInt32(); + Unk10 = br.ReadSingle(); + Unk11 = br.ReadSingle(); + Unk12 = br.ReadSingle(); + Unk13 = br.ReadSingle(); + Unk14 = br.ReadUInt32(); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override uint[] GetWaveTrackOffsets() + { + return new uint[] { 8 }; + } + } + [TC(typeof(EXP))] public class Dat151Unk117 : Dat151RelData + { + public MetaHash AudioTrack0 { get; set; } + + public Dat151Unk117(RelData d, BinaryReader br) : base(d, br) + { + AudioTrack0 = br.ReadUInt32(); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override uint[] GetWaveTrackOffsets() + { + return new uint[] { 0 }; + } + } + [TC(typeof(EXP))] public class Dat151Entity : Dat151RelData + { + public uint Unk00 { get; set; } + public uint Unk01 { get; set; } + public uint Unk02 { get; set; } + public uint Unk03 { get; set; } + public uint Unk04 { get; set; } + public uint Unk05 { get; set; } + public uint Unk06 { get; set; } + public uint Unk07 { get; set; } + public uint Unk08 { get; set; } + public uint Unk09 { get; set; } + public uint Unk10 { get; set; } + public uint Unk11 { get; set; } + public uint Unk12 { get; set; } + public uint Unk13 { get; set; } + public uint Unk14 { get; set; } + public uint Unk15 { get; set; } + public uint Unk16 { get; set; } + public uint Unk17 { get; set; } + public uint Unk18 { get; set; } + public uint Unk19 { get; set; } + public uint Unk20 { get; set; } + public uint Unk21 { get; set; } + public uint Unk22 { get; set; } + public uint Unk23 { get; set; } + public uint Unk24 { get; set; } + public uint Unk25 { get; set; } + public uint Unk26 { get; set; } + public uint Unk27 { get; set; } + public uint Unk28 { get; set; } + public uint Unk29 { get; set; } + public uint Unk30 { get; set; } + public MetaHash AudioTrack0 { get; set; } + public uint Unk31 { get; set; } + public uint Unk32 { get; set; } + public MetaHash AudioTrack1 { get; set; } + public MetaHash AudioTrack2 { get; set; } + public uint Unk33 { get; set; } + public uint Unk34 { get; set; } + public uint Unk35 { get; set; } + public uint Unk36 { get; set; } + public uint Unk37 { get; set; } + public uint Unk38 { get; set; } + public uint Unk39 { get; set; } + public uint Unk40 { get; set; } + public uint Unk41 { get; set; } + public uint Unk42 { get; set; } + public uint Unk43 { get; set; } + public uint Unk44 { get; set; } + public uint Unk45 { get; set; } + public uint Unk46 { get; set; } + public uint Unk47 { get; set; } + public uint Unk48 { get; set; } + public uint Unk49 { get; set; } + public uint Unk50 { get; set; } + public uint Unk51 { get; set; } + public uint Unk52 { get; set; } + public uint Unk53 { get; set; } + public uint Unk54 { get; set; } + public uint Unk55 { get; set; } + public uint Unk56 { get; set; } + public uint Unk57 { get; set; } + public uint Unk58 { get; set; } + public uint Unk59 { get; set; } + public uint Unk60 { get; set; } + public uint Unk61 { get; set; } + public uint Unk62 { get; set; } + public uint Unk63 { get; set; } + public uint Unk64 { get; set; } + public uint Unk65 { get; set; } + public uint Unk66 { get; set; } + public uint Unk67 { get; set; } + public uint Unk68 { get; set; } + public uint Unk69 { get; set; } + public uint Unk70 { get; set; } + public uint Unk71 { get; set; } + public uint Unk72 { get; set; } + public uint Unk73 { get; set; } + public uint Unk74 { get; set; } + public uint Unk75 { get; set; } + public uint Unk76 { get; set; } + public uint Unk77 { get; set; } + public uint Unk78 { get; set; } + public uint Unk79 { get; set; } + public uint Unk80 { get; set; } + public uint Unk81 { get; set; } + public uint Unk82 { get; set; } + public uint Unk83 { get; set; } + public uint Unk84 { get; set; } + public uint Unk85 { get; set; } + public uint Unk86 { get; set; } + public uint Unk87 { get; set; } + public uint Unk88 { get; set; } + public uint Unk89 { get; set; } + + public Dat151Entity(RelData d, BinaryReader br) : base(d, br) + { + Unk00 = br.ReadUInt32(); + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadUInt32(); + Unk03 = br.ReadUInt32(); + Unk04 = br.ReadUInt32(); + Unk05 = br.ReadUInt32(); + Unk06 = br.ReadUInt32(); + Unk07 = br.ReadUInt32(); + Unk08 = br.ReadUInt32(); + Unk09 = br.ReadUInt32(); + Unk10 = br.ReadUInt32(); + Unk11 = br.ReadUInt32(); + Unk12 = br.ReadUInt32(); + Unk13 = br.ReadUInt32(); + Unk14 = br.ReadUInt32(); + Unk15 = br.ReadUInt32(); + Unk16 = br.ReadUInt32(); + Unk17 = br.ReadUInt32(); + Unk18 = br.ReadUInt32(); + Unk19 = br.ReadUInt32(); + Unk20 = br.ReadUInt32(); + Unk21 = br.ReadUInt32(); + Unk22 = br.ReadUInt32(); + Unk23 = br.ReadUInt32(); + Unk24 = br.ReadUInt32(); + Unk25 = br.ReadUInt32(); + Unk26 = br.ReadUInt32(); + Unk27 = br.ReadUInt32(); + Unk28 = br.ReadUInt32(); + Unk29 = br.ReadUInt32(); + Unk30 = br.ReadUInt32(); + AudioTrack0 = br.ReadUInt32(); + Unk31 = br.ReadUInt32(); + Unk32 = br.ReadUInt32(); + AudioTrack1 = br.ReadUInt32(); + AudioTrack2 = br.ReadUInt32(); + Unk33 = br.ReadUInt32(); + Unk34 = br.ReadUInt32(); + Unk35 = br.ReadUInt32(); + Unk36 = br.ReadUInt32(); + Unk37 = br.ReadUInt32(); + Unk38 = br.ReadUInt32(); + Unk39 = br.ReadUInt32(); + Unk40 = br.ReadUInt32(); + Unk41 = br.ReadUInt32(); + Unk42 = br.ReadUInt32(); + Unk43 = br.ReadUInt32(); + Unk44 = br.ReadUInt32(); + Unk45 = br.ReadUInt32(); + Unk46 = br.ReadUInt32(); + Unk47 = br.ReadUInt32(); + Unk48 = br.ReadUInt32(); + Unk49 = br.ReadUInt32(); + Unk50 = br.ReadUInt32(); + Unk51 = br.ReadUInt32(); + Unk52 = br.ReadUInt32(); + Unk53 = br.ReadUInt32(); + Unk54 = br.ReadUInt32(); + Unk55 = br.ReadUInt32(); + Unk56 = br.ReadUInt32(); + Unk57 = br.ReadUInt32(); + Unk58 = br.ReadUInt32(); + Unk59 = br.ReadUInt32(); + Unk60 = br.ReadUInt32(); + Unk61 = br.ReadUInt32(); + Unk62 = br.ReadUInt32(); + Unk63 = br.ReadUInt32(); + Unk64 = br.ReadUInt32(); + Unk65 = br.ReadUInt32(); + Unk66 = br.ReadUInt32(); + Unk67 = br.ReadUInt32(); + Unk68 = br.ReadUInt32(); + Unk69 = br.ReadUInt32(); + Unk70 = br.ReadUInt32(); + Unk71 = br.ReadUInt32(); + Unk72 = br.ReadUInt32(); + Unk73 = br.ReadUInt32(); + Unk74 = br.ReadUInt32(); + Unk75 = br.ReadUInt32(); + Unk76 = br.ReadUInt32(); + Unk77 = br.ReadUInt32(); + Unk78 = br.ReadUInt32(); + Unk79 = br.ReadUInt32(); + Unk80 = br.ReadUInt32(); + Unk81 = br.ReadUInt32(); + Unk82 = br.ReadUInt32(); + Unk83 = br.ReadUInt32(); + Unk84 = br.ReadUInt32(); + Unk85 = br.ReadUInt32(); + Unk86 = br.ReadUInt32(); + Unk87 = br.ReadUInt32(); + Unk88 = br.ReadUInt32(); + Unk89 = br.ReadUInt32(); + + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override uint[] GetWaveTrackOffsets() + { + return new uint[] { 124, 136, 140 }; + } + } + [TC(typeof(EXP))] public class Dat151Collision : Dat151RelData + { + public uint Unk00 { get; set; } + public uint Unk01 { get; set; } + public uint Unk02 { get; set; } + public uint Unk03 { get; set; } + public uint Unk04 { get; set; } + public uint Unk05 { get; set; } + public uint Unk06 { get; set; } + public uint Unk07 { get; set; } + public uint Unk08 { get; set; } + public uint Unk09 { get; set; } + public uint Unk10 { get; set; } + public uint Unk11 { get; set; } + public uint Unk12 { get; set; } + public uint Unk13 { get; set; } + public uint Unk14 { get; set; } + public uint Unk15 { get; set; } + public uint Unk16 { get; set; } + public uint Unk17 { get; set; } + public uint Unk18 { get; set; } + public uint Unk19 { get; set; } + public uint Unk20 { get; set; } + public uint Unk21 { get; set; } + public uint Unk22 { get; set; } + public uint Unk23 { get; set; } + public uint Unk24 { get; set; } + public uint Unk25 { get; set; } + public uint Unk26 { get; set; } + public uint Unk27 { get; set; } + public uint Unk28 { get; set; } + public uint Unk29 { get; set; } + public uint Unk30 { get; set; } + public uint Unk31 { get; set; } + public uint Unk32 { get; set; } + public uint Unk33 { get; set; } + public uint Unk34 { get; set; } + public uint Unk35 { get; set; } + public uint Unk36 { get; set; } + public uint Unk37 { get; set; } + public uint Unk38 { get; set; } + public uint Unk39 { get; set; } + public uint Unk40 { get; set; } + public uint Unk41 { get; set; } + public uint Unk42 { get; set; } + public uint Unk43 { get; set; } + public uint Unk44 { get; set; } + public uint Unk45 { get; set; } + public uint Unk46 { get; set; } + public uint Unk47 { get; set; } + public uint Unk48 { get; set; } + public uint Unk49 { get; set; } + public uint Unk50 { get; set; } + public MetaHash AudioTrack0 { get; set; } + public MetaHash AudioTrack1 { get; set; } + + public Dat151Collision(RelData d, BinaryReader br) : base(d, br) + { + Unk00 = br.ReadUInt32(); + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadUInt32(); + Unk03 = br.ReadUInt32(); + Unk04 = br.ReadUInt32(); + Unk05 = br.ReadUInt32(); + Unk06 = br.ReadUInt32(); + Unk07 = br.ReadUInt32(); + Unk08 = br.ReadUInt32(); + Unk09 = br.ReadUInt32(); + Unk10 = br.ReadUInt32(); + Unk11 = br.ReadUInt32(); + Unk12 = br.ReadUInt32(); + Unk13 = br.ReadUInt32(); + Unk14 = br.ReadUInt32(); + Unk15 = br.ReadUInt32(); + Unk16 = br.ReadUInt32(); + Unk17 = br.ReadUInt32(); + Unk18 = br.ReadUInt32(); + Unk19 = br.ReadUInt32(); + Unk20 = br.ReadUInt32(); + Unk21 = br.ReadUInt32(); + Unk22 = br.ReadUInt32(); + Unk23 = br.ReadUInt32(); + Unk24 = br.ReadUInt32(); + Unk25 = br.ReadUInt32(); + Unk26 = br.ReadUInt32(); + Unk27 = br.ReadUInt32(); + Unk28 = br.ReadUInt32(); + Unk29 = br.ReadUInt32(); + Unk30 = br.ReadUInt32(); + Unk31 = br.ReadUInt32(); + Unk32 = br.ReadUInt32(); + Unk33 = br.ReadUInt32(); + Unk34 = br.ReadUInt32(); + Unk35 = br.ReadUInt32(); + Unk36 = br.ReadUInt32(); + Unk37 = br.ReadUInt32(); + Unk38 = br.ReadUInt32(); + Unk39 = br.ReadUInt32(); + Unk40 = br.ReadUInt32(); + Unk41 = br.ReadUInt32(); + Unk42 = br.ReadUInt32(); + Unk43 = br.ReadUInt32(); + Unk44 = br.ReadUInt32(); + Unk45 = br.ReadUInt32(); + Unk46 = br.ReadUInt32(); + Unk47 = br.ReadUInt32(); + Unk48 = br.ReadUInt32(); + Unk49 = br.ReadUInt32(); + Unk50 = br.ReadUInt32(); + if (Unk50 > 0) + { + AudioTrack0 = br.ReadUInt32(); + AudioTrack1 = br.ReadUInt32(); + } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override uint[] GetWaveTrackOffsets() + { + if (Unk50 > 0) return new uint[] { 204, 208 }; + else return null; + } + } + [TC(typeof(EXP))] public class Dat151Unk47 : Dat151RelData + { + public uint Unk0 { get; set; } + public MetaHash AudioTrack0 { get; set; } + public float Unk1 { get; set; } + + public Dat151Unk47(RelData d, BinaryReader br) : base(d, br) + { + Unk0 = br.ReadUInt32(); + AudioTrack0 = br.ReadUInt32(); + Unk1 = br.ReadSingle(); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override uint[] GetWaveTrackOffsets() + { + return new uint[] { 4 }; + } + } + [TC(typeof(EXP))] public class Dat151Unk83 : Dat151RelData //something to do with animals + { + public uint AudioItemCount { get; set; } + public Dat151HashPair[] AudioItems { get; set; } + + public Dat151Unk83(RelData d, BinaryReader br) : base(d, br) + { + AudioItemCount = br.ReadUInt32(); + var items = new Dat151HashPair[AudioItemCount]; + for (uint i = 0; i < AudioItemCount; i++) + { + items[i] = new Dat151HashPair(br.ReadUInt32(), br.ReadUInt32()); + } + AudioItems = items; + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override uint[] GetWaveTrackOffsets() + { + var offsets = new List(); + for (uint i = 0; i < AudioItemCount; i++) + { + offsets.Add(8 + i * 8); + } + return offsets.ToArray(); + } + } + [TC(typeof(EXP))] public class Dat151ForceRadioTrackAction : Dat151RelData + { + public uint Unk0 { get; set; } + public uint Unk1 { get; set; } + public uint Unk2 { get; set; } + public MetaHash AudioTrack0 { get; set; } + public MetaHash AudioTrack1 { get; set; } + public uint Unk3 { get; set; } + public uint Unk4 { get; set; } + public uint Unk5 { get; set; } + public uint AudioTracksCount { get; set; } + public MetaHash[] AudioTracks { get; set; } + + public Dat151ForceRadioTrackAction(RelData d, BinaryReader br) : base(d, br) + { + Unk0 = br.ReadUInt32(); + Unk1 = br.ReadUInt32(); + Unk2 = br.ReadUInt32(); + AudioTrack0 = br.ReadUInt32(); + AudioTrack1 = br.ReadUInt32(); + Unk3 = br.ReadUInt32(); + Unk4 = br.ReadUInt32(); + Unk5 = br.ReadUInt32(); + AudioTracksCount = br.ReadUInt32(); + var tracks = new MetaHash[AudioTracksCount]; + for (var i = 0; i < AudioTracksCount; i++) + { + tracks[i] = br.ReadUInt32(); + } + AudioTracks = tracks; + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override uint[] GetWaveTrackOffsets() + { + var offsets = new List(); + offsets.Add(12); + offsets.Add(16); + for (uint i = 0; i < AudioTracksCount; i++) + { + offsets.Add(36 + i * 4); + } + return offsets.ToArray(); + } + } + [TC(typeof(EXP))] public class Dat151RadioDjSpeechAction : Dat151RelData + { + public uint Unk0 { get; set; } + public uint Unk1 { get; set; } + public uint Unk2 { get; set; } + public MetaHash AudioTrack0 { get; set; } + public MetaHash AudioTrack1 { get; set; } + public uint Unk3 { get; set; } + public uint Unk4 { get; set; } + public uint Unk5 { get; set; } + + public Dat151RadioDjSpeechAction(RelData d, BinaryReader br) : base(d, br) + { + Unk0 = br.ReadUInt32(); + Unk1 = br.ReadUInt32(); + Unk2 = br.ReadUInt32(); + AudioTrack0 = br.ReadUInt32(); + AudioTrack1 = br.ReadUInt32(); + Unk3 = br.ReadUInt32(); + Unk4 = br.ReadUInt32(); + Unk5 = br.ReadUInt32(); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override uint[] GetWaveTrackOffsets() + { + return new uint[] { 12, 16 }; + } + } + [TC(typeof(EXP))] public class Dat151Unk78 : Dat151RelData + { + public uint AudioItemCount { get; set; } + public Dat151HashPair[] AudioItems { get; set; } + + public Dat151Unk78(RelData d, BinaryReader br) : base(d, br) + { + AudioItemCount = br.ReadUInt32(); + var items = new Dat151HashPair[AudioItemCount]; + for (var i = 0; i < AudioItemCount; i++) + { + items[i] = new Dat151HashPair(br.ReadUInt32(), br.ReadUInt32()); + } + AudioItems = items; + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override uint[] GetWaveTrackOffsets() + { + var offsets = new List(); + for (uint i = 0; i < AudioItemCount; i++) + { + offsets.Add(8 + i * 8); + } + return offsets.ToArray(); + } + } + [TC(typeof(EXP))] public class Dat151RadioStationsDLC : Dat151RelData + { + public uint AudioTracksCount { get; set; } + public MetaHash[] AudioTracks { get; set; } + + public Dat151RadioStationsDLC(RelData d, BinaryReader br) : base(d, br) + { + AudioTracksCount = br.ReadUInt32(); + var tracks = new MetaHash[AudioTracksCount]; + for (int i = 0; i < AudioTracksCount; i++) + { + tracks[i] = br.ReadUInt32(); + } + AudioTracks = tracks; + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override uint[] GetWaveTrackOffsets() + { + var offsets = new List(); + for (uint i = 0; i < AudioTracksCount; i++) + { + offsets.Add(4 + i * 4); + } + return offsets.ToArray(); + } + } + [TC(typeof(EXP))] public class Dat151RadioDLC : Dat151RelData + { + public uint Unk00 { get; set; } + public uint Unk01 { get; set; } + public uint Unk02 { get; set; } + public uint Unk03 { get; set; } + public uint Unk04 { get; set; } + public uint Unk05 { get; set; } + public uint Unk06 { get; set; } + public uint Unk07 { get; set; } + public uint Unk08 { get; set; } + public uint Unk09 { get; set; } + public uint Unk10 { get; set; } + public uint Unk11 { get; set; } + public uint AudioTracksCount { get; set; } + public MetaHash[] AudioTracks { get; set; } + + public Dat151RadioDLC(RelData d, BinaryReader br) : base(d, br) + { + Unk00 = br.ReadUInt32(); + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadUInt32(); + Unk03 = br.ReadUInt32(); + Unk04 = br.ReadUInt32(); + Unk05 = br.ReadUInt32(); + Unk06 = br.ReadUInt32(); + Unk07 = br.ReadUInt32(); + Unk08 = br.ReadUInt32(); + Unk09 = br.ReadUInt32(); + Unk10 = br.ReadUInt32(); + Unk11 = br.ReadUInt32(); + AudioTracksCount = br.ReadUInt32(); + var tracks = new MetaHash[AudioTracksCount]; + for (int i = 0; i < AudioTracksCount; i++) + { + tracks[i] = br.ReadUInt32(); + } + AudioTracks = tracks; + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override uint[] GetWaveTrackOffsets() + { + var offsets = new List(); + for (uint i = 0; i < AudioTracksCount; i++) + { + offsets.Add(52 + i * 4); + } + return offsets.ToArray(); + } + } + [TC(typeof(EXP))] public class Dat151Unk49 : Dat151RelData //doors/gates? + { + public uint AudioItemCount { get; set; } + public Dat151HashPair[] AudioItems { get; set; } + + public Dat151Unk49(RelData d, BinaryReader br) : base(d, br) + { + AudioItemCount = br.ReadUInt32(); + var items = new Dat151HashPair[AudioItemCount]; + for (var i = 0; i < AudioItemCount; i++) + { + items[i] = new Dat151HashPair(br.ReadUInt32(), br.ReadUInt32()); + } + AudioItems = items; + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override uint[] GetWaveTrackOffsets() + { + var offsets = new List(); + for (uint i = 0; i < AudioItemCount; i++) + { + offsets.Add(8 + i * 8); + } + return offsets.ToArray(); + } + } + [TC(typeof(EXP))] public class Dat151Unk84 : Dat151RelData + { + public uint AudioItemCount { get; set; } + public Dat151HashPair[] AudioItems { get; set; } + + public Dat151Unk84(RelData d, BinaryReader br) : base(d, br) + { + AudioItemCount = br.ReadUInt32(); + var items = new Dat151HashPair[AudioItemCount]; + for (var i = 0; i < AudioItemCount; i++) + { + items[i] = new Dat151HashPair(br.ReadUInt32(), br.ReadUInt32()); + } + AudioItems = items; + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override uint[] GetWaveTrackOffsets() + { + var offsets = new List(); + for (uint i = 0; i < AudioItemCount; i++) + { + offsets.Add(8 + i * 8); + } + return offsets.ToArray(); + } + } + [TC(typeof(EXP))] public class Dat151Unk86 : Dat151RelData + { + public uint AudioItemCount { get; set; } + public Dat151HashPair[] AudioItems { get; set; } + + public Dat151Unk86(RelData d, BinaryReader br) : base(d, br) + { + AudioItemCount = br.ReadUInt32(); + var items = new Dat151HashPair[AudioItemCount]; + for (var i = 0; i < AudioItemCount; i++) + { + items[i] = new Dat151HashPair(br.ReadUInt32(), br.ReadUInt32()); + } + AudioItems = items; + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override uint[] GetWaveTrackOffsets() + { + var offsets = new List(); + for (uint i = 0; i < AudioItemCount; i++) + { + offsets.Add(8 + i * 8); + } + return offsets.ToArray(); + } + } + [TC(typeof(EXP))] public class Dat151Unk81 : Dat151RelData + { + public uint AudioItemCount { get; set; } + public Dat151HashPair[] AudioItems { get; set; } + + public Dat151Unk81(RelData d, BinaryReader br) : base(d, br) + { + AudioItemCount = br.ReadUInt32(); + var items = new Dat151HashPair[AudioItemCount]; + for (var i = 0; i < AudioItemCount; i++) + { + items[i] = new Dat151HashPair(br.ReadUInt32(), br.ReadUInt32()); + } + AudioItems = items; + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override uint[] GetWaveTrackOffsets() + { + var offsets = new List(); + for (uint i = 0; i < AudioItemCount; i++) + { + offsets.Add(8 + i * 8); + } + return offsets.ToArray(); + } + } + [TC(typeof(EXP))] public class Dat151Unk55 : Dat151RelData + { + public uint AudioItemCount { get; set; } + public Dat151HashPair[] AudioItems { get; set; } + + public Dat151Unk55(RelData d, BinaryReader br) : base(d, br) + { + AudioItemCount = br.ReadUInt32(); + var items = new Dat151HashPair[AudioItemCount]; + for (var i = 0; i < AudioItemCount; i++) + { + items[i] = new Dat151HashPair(br.ReadUInt32(), br.ReadUInt32()); + } + AudioItems = items; + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override uint[] GetWaveTrackOffsets() + { + var offsets = new List(); + for (uint i = 0; i < AudioItemCount; i++) + { + offsets.Add(8 + i * 8); + } + return offsets.ToArray(); + } + } + + + + + + + + + + + + //[TC(typeof(EXP))] public class Dat151BlankTemplateItem : Dat151RelData + //{ + // public Dat151BlankTemplateItem(RelData d, BinaryReader br) : base(d, br) + // { + // var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + // if (bytesleft != 0) + // { } + // } + //} + + + + + #endregion + + + } diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index 5da14c3..ab3a5ba 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -157,7 +157,7 @@ namespace CodeWalker.GameFiles RpfMan.Init(GTAFolder, UpdateStatus, ErrorLog);//, true); //RE test area! - //DecodeRelFiles(); + //TestAudioRels(); InitGlobal(); @@ -2115,6 +2115,168 @@ namespace CodeWalker.GameFiles + public void TestAudioRels() + { + UpdateStatus("Testing Audio REL files"); + + StringBuilder sb = new StringBuilder(); + StringBuilder sbh = new StringBuilder(); + + foreach (RpfFile rpf in RpfMan.AllRpfs) + { + foreach (RpfEntry entry in rpf.AllEntries) + { + var rfe = entry as RpfFileEntry; + var rbfe = rfe as RpfBinaryFileEntry; + if ((rfe == null) || (rbfe == null)) continue; + + if (rfe.NameLower.EndsWith(".rel")) + { + UpdateStatus(string.Format(entry.Path)); + + RelFile rel = new RelFile(rfe); + RpfMan.LoadFile(rel, rfe); + + if (rel.NameTable == null) + { + sb.AppendLine(rfe.Path + ": no strings found"); + } + else + { + sb.AppendLine(rfe.Path + ": " + rel.NameTable.Length.ToString() + " strings found:"); + foreach (string str in rel.NameTable) + { + sb.AppendLine(str); + } + } + if (rel.IndexStrings != null) + { + sb.AppendLine("Config-specific:"); + foreach (var unk in rel.IndexStrings) + { + sb.AppendLine(unk.ToString()); + } + } + if (rel.IndexHashes != null) + { + sbh.AppendLine(rfe.Path + ": " + rel.IndexHashes.Length.ToString() + " entries:"); + foreach (var unk in rel.IndexHashes) + { + sbh.Append(unk.Name.Hash.ToString("X8")); + string strval; + if (JenkIndex.Index.TryGetValue(unk.Name, out strval)) + { + sbh.Append(" - "); + sbh.Append(strval); + } + sbh.AppendLine(); + //sbh.AppendLine(unk.ToString()); + } + sbh.AppendLine(); + } + if (rel.WaveTracksHashes != null) + { + sbh.AppendLine(rfe.Path + ": " + rel.WaveTracksHashes.Length.ToString() + " Hashes1:"); + foreach (var unk in rel.WaveTracksHashes) + { + sbh.Append(unk.Hash.ToString("X8")); + string strval; + if (JenkIndex.Index.TryGetValue(unk, out strval)) + { + sbh.Append(" - "); + sbh.Append(strval); + } + sbh.AppendLine(); + } + sbh.AppendLine(); + } + if (rel.WaveContainersHashes != null) + { + sbh.AppendLine(rfe.Path + ": " + rel.WaveContainersHashes.Length.ToString() + " Hashes2:"); + foreach (var unk in rel.WaveContainersHashes) + { + sbh.Append(unk.Hash.ToString("X8")); + string strval; + if (JenkIndex.Index.TryGetValue(unk, out strval)) + { + sbh.Append(" - "); + sbh.Append(strval); + } + sbh.AppendLine(); + } + sbh.AppendLine(); + } + + sb.AppendLine(); + + + + byte[] data = rel.Save(); + if (data != null) + { + if (data.Length != rbfe.FileUncompressedSize) + { } + if (data.Length != rel.RawFileData.Length) + { } + for (int i = 0; i < data.Length; i++) //raw file test + if (data[i] != rel.RawFileData[i]) + { } + } + + + RelFile rel2 = new RelFile(); + rel2.Load(data, rfe);//roundtrip test + + if (rel2.IndexCount != rel.IndexCount) + { } + if (rel2.RelDatas == null) + { } + + } + + } + + } + int ctot = Dat151RelData.TotCount; + StringBuilder sbp = new StringBuilder(); + foreach (string s in Dat151RelData.FoundCoords) + { + sbp.AppendLine(s); + } + string posz = sbp.ToString(); + + string relstrs = sb.ToString(); + string hashstrs = sbh.ToString(); + + + var wavesmap = RelFile.WavesMap; + if (wavesmap.Count > 0) + { } + + + var sb2 = new StringBuilder(); + foreach (var kvp in wavesmap) + { + if (kvp.Key.FileType == RelDatFileType.Dat151Parameters) + { + sb2.Append(((Dat151RelType)kvp.Key.ItemType).ToString()); + sb2.Append(" "); + foreach (var val in kvp.Value) + { + sb2.Append(val.ToString()); + sb2.Append(" "); + } + + sb2.AppendLine(); + } + + } + + var dat151str = sb2.ToString(); + if (!string.IsNullOrEmpty(dat151str)) + { } + + } public void TestAudioYmts() { @@ -2758,113 +2920,6 @@ namespace CodeWalker.GameFiles - } - public void DecodeRelFiles() - { - UpdateStatus("Decoding REL files"); - - StringBuilder sb = new StringBuilder(); - StringBuilder sbh = new StringBuilder(); - - foreach (RpfFile rpf in RpfMan.AllRpfs) - { - foreach (RpfEntry entry in rpf.AllEntries) - { - RpfFileEntry rfe = entry as RpfFileEntry; - if (rfe == null) continue; - - if (rfe.NameLower.EndsWith(".rel")) - { - RelFile rel = new RelFile(rfe); - RpfMan.LoadFile(rel, rfe); - - if (rel.NameTable == null) - { - sb.AppendLine(rfe.Path + ": no strings found"); - } - else - { - sb.AppendLine(rfe.Path + ": " + rel.NameTable.Length.ToString() + " strings found:"); - foreach (string str in rel.NameTable) - { - sb.AppendLine(str); - } - } - if (rel.IndexStrings != null) - { - sb.AppendLine("Config-specific:"); - foreach (var unk in rel.IndexStrings) - { - sb.AppendLine(unk.ToString()); - } - } - if (rel.IndexHashes != null) - { - sbh.AppendLine(rfe.Path + ": " + rel.IndexHashes.Length.ToString() + " entries:"); - foreach (var unk in rel.IndexHashes) - { - sbh.Append(unk.Name.Hash.ToString("X8")); - string strval; - if (JenkIndex.Index.TryGetValue(unk.Name, out strval)) - { - sbh.Append(" - "); - sbh.Append(strval); - } - sbh.AppendLine(); - //sbh.AppendLine(unk.ToString()); - } - sbh.AppendLine(); - } - if (rel.WaveTracksHashes != null) - { - sbh.AppendLine(rfe.Path + ": " + rel.WaveTracksHashes.Length.ToString() + " Hashes1:"); - foreach (var unk in rel.WaveTracksHashes) - { - sbh.Append(unk.Hash.ToString("X8")); - string strval; - if (JenkIndex.Index.TryGetValue(unk, out strval)) - { - sbh.Append(" - "); - sbh.Append(strval); - } - sbh.AppendLine(); - } - sbh.AppendLine(); - } - if (rel.WaveContainersHashes != null) - { - sbh.AppendLine(rfe.Path + ": " + rel.WaveContainersHashes.Length.ToString() + " Hashes2:"); - foreach (var unk in rel.WaveContainersHashes) - { - sbh.Append(unk.Hash.ToString("X8")); - string strval; - if (JenkIndex.Index.TryGetValue(unk, out strval)) - { - sbh.Append(" - "); - sbh.Append(strval); - } - sbh.AppendLine(); - } - sbh.AppendLine(); - } - - sb.AppendLine(); - } - - } - - } - int ctot = Dat151RelData.TotCount; - StringBuilder sbp = new StringBuilder(); - foreach (string s in Dat151RelData.FoundCoords) - { - sbp.AppendLine(s); - } - string posz = sbp.ToString(); - - string relstrs = sb.ToString(); - string hashstrs = sbh.ToString(); - } } From 3bfe19bf802b90e14955e7ba9277896dc15ff677 Mon Sep 17 00:00:00 2001 From: dexy Date: Tue, 25 Dec 2018 00:29:24 +1100 Subject: [PATCH 055/158] Dat151 progress --- .../GameFiles/FileTypes/RelFile.cs | 76 +++++++++++++++---- 1 file changed, 60 insertions(+), 16 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index a95ad26..63beb6e 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -626,6 +626,48 @@ namespace CodeWalker.GameFiles + + + + + + private void BuildWavesTracks() + { + switch(RelType) + { + case RelDatFileType.Dat149: + case RelDatFileType.Dat150: + case RelDatFileType.Dat151Parameters: + break; + case RelDatFileType.Dat4://TODO! + case RelDatFileType.Dat54DataEntries://TODO! + default://TODO..? + return; + } + + var wtoffsets = new List(); + foreach (var rd in RelDatasSorted) + { + var offsets = rd.GetWaveTrackOffsets(); + if (offsets == null) continue; + var rdoffset = rd.DataOffset + 12; + for (int i = 0; i < offsets.Length; i++) + { + wtoffsets.Add(rdoffset + offsets[i]); + } + } + if (wtoffsets.Count > 0) + { + WaveTracksOffsets = wtoffsets.ToArray(); + } + else + { + WaveTracksOffsets = null; + } + } + + + private void BuildWavesMaps() { @@ -791,6 +833,8 @@ namespace CodeWalker.GameFiles //update WaveContainersOffsets //update WaveContainersCount + BuildWavesTracks(); + DataLength = (uint)(DataBlock?.Length ?? 0); if (NameTable != null) { @@ -3398,21 +3442,21 @@ namespace CodeWalker.GameFiles public uint Unk0 { get; set; } public uint Unk1 { get; set; } public uint Unk2 { get; set; } - public uint AudioTracksCount { get; set; } - public MetaHash[] AudioTracks { get; set; } + public uint RoomsCount { get; set; } + public MetaHash[] Rooms { get; set; } public Dat151Interior(RelData d, BinaryReader br) : base(d, br) { Unk0 = br.ReadUInt32(); Unk1 = br.ReadUInt32(); Unk2 = br.ReadUInt32(); - AudioTracksCount = br.ReadUInt32(); - var tracks = new MetaHash[AudioTracksCount]; - for (int i = 0; i < AudioTracksCount; i++) + RoomsCount = br.ReadUInt32(); + var rooms = new MetaHash[RoomsCount]; + for (int i = 0; i < RoomsCount; i++) { - tracks[i] = br.ReadUInt32(); + rooms[i] = br.ReadUInt32(); } - AudioTracks = tracks; + Rooms = rooms; var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) @@ -3422,7 +3466,7 @@ namespace CodeWalker.GameFiles public override uint[] GetWaveTrackOffsets() { var offsets = new List(); - for (uint i = 0; i < AudioTracksCount; i++) + for (uint i = 0; i < RoomsCount; i++) { offsets.Add(16 + i * 4); } @@ -3439,13 +3483,13 @@ namespace CodeWalker.GameFiles public float Unk04 { get; set; } public float Unk05 { get; set; } public MetaHash Unk06 { get; set; } - public uint Unk07 { get; set; } - public uint Unk08 { get; set; } - public uint Unk09 { get; set; } + public float Unk07 { get; set; } + public float Unk08 { get; set; } + public float Unk09 { get; set; } public float Unk10 { get; set; } public float Unk11 { get; set; } public float Unk12 { get; set; } - public float Unk13 { get; set; } + public MetaHash Unk13 { get; set; } public MetaHash Unk14 { get; set; } public Dat151InteriorRoom(RelData d, BinaryReader br) : base(d, br) @@ -3458,13 +3502,13 @@ namespace CodeWalker.GameFiles Unk04 = br.ReadSingle(); Unk05 = br.ReadSingle(); Unk06 = br.ReadUInt32(); - Unk07 = br.ReadUInt32(); - Unk08 = br.ReadUInt32(); - Unk09 = br.ReadUInt32(); + Unk07 = br.ReadSingle(); + Unk08 = br.ReadSingle(); + Unk09 = br.ReadSingle(); Unk10 = br.ReadSingle(); Unk11 = br.ReadSingle(); Unk12 = br.ReadSingle(); - Unk13 = br.ReadSingle(); + Unk13 = br.ReadUInt32(); Unk14 = br.ReadUInt32(); var bytesleft = br.BaseStream.Length - br.BaseStream.Position; From df34b6f6147f0ade05954a74d70c6d28bf290e68 Mon Sep 17 00:00:00 2001 From: dexy Date: Tue, 25 Dec 2018 14:55:46 +1100 Subject: [PATCH 056/158] Dat151 progress --- .../GameFiles/FileTypes/RelFile.cs | 355 ++++++++++++++++-- CodeWalker.Core/GameFiles/GameFileCache.cs | 11 +- 2 files changed, 327 insertions(+), 39 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index 63beb6e..bbf6b85 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -506,6 +506,10 @@ namespace CodeWalker.GameFiles { switch ((Dat151RelType)d.TypeID) { + case Dat151RelType.AmbientEmitterList: return new Dat151AmbientEmitterList(d, br); + case Dat151RelType.AmbientZone: return new Dat151AmbientZone(d, br); + case Dat151RelType.AmbientEmitter: return new Dat151AmbientEmitter(d, br); + case Dat151RelType.AmbientZoneList: return new Dat151AmbientZoneList(d, br); case Dat151RelType.Collision: return new Dat151Collision(d, br); //maybe for vehicle case Dat151RelType.WeaponAudioItem: return new Dat151WeaponAudioItem(d, br); case Dat151RelType.StartTrackAction: return new Dat151StartTrackAction(d, br); @@ -534,6 +538,11 @@ namespace CodeWalker.GameFiles case Dat151RelType.Unk86: return new Dat151Unk86(d, br); case Dat151RelType.Unk81: return new Dat151Unk81(d, br); case Dat151RelType.Unk55: return new Dat151Unk55(d, br); + case Dat151RelType.ShoreLinePool: return new Dat151ShoreLinePool(d, br); + case Dat151RelType.ShoreLineLake: return new Dat151ShoreLineLake(d, br); + case Dat151RelType.ShoreLineRiver: return new Dat151ShoreLineRiver(d, br); + case Dat151RelType.ShoreLineOcean: return new Dat151ShoreLineOcean(d, br); + case Dat151RelType.ShoreLineList: return new Dat151ShoreLineList(d, br); case Dat151RelType.Vehicle: case Dat151RelType.VehicleEngine: @@ -548,11 +557,6 @@ namespace CodeWalker.GameFiles case Dat151RelType.VehicleScannerParams: //maybe not just vehicle case Dat151RelType.Explosion: case Dat151RelType.VehicleEngineGranular: //maybe not just vehicle - case Dat151RelType.ShoreLinePool: - case Dat151RelType.ShoreLineLake: - case Dat151RelType.ShoreLineRiver: - case Dat151RelType.ShoreLineOcean: - case Dat151RelType.ShoreLineList: case Dat151RelType.Unk2: case Dat151RelType.Unk7: case Dat151RelType.Unk9: @@ -615,10 +619,6 @@ namespace CodeWalker.GameFiles case Dat151RelType.Unk121: return new Dat151RelData(d, br); - case Dat151RelType.AmbientEmitterList: return new Dat151AmbientEmitterList(d, br); - case Dat151RelType.AmbientZone: return new Dat151AmbientZone(d, br); - case Dat151RelType.AmbientEmitter: return new Dat151AmbientEmitter(d, br); - case Dat151RelType.AmbientZoneList: return new Dat151AmbientZoneList(d, br); default: return new Dat151RelData(d, br); } @@ -631,9 +631,125 @@ namespace CodeWalker.GameFiles + private void BuildDataBlock() + { + if (RelDatas == null) return; + if (RelDatasSorted == null) return; + + + switch (RelType) + { + case RelDatFileType.Dat149: + case RelDatFileType.Dat150: + case RelDatFileType.Dat151Parameters: + break; + case RelDatFileType.Dat4://TODO! + case RelDatFileType.Dat54DataEntries://TODO! + default://TODO..? + return; + } + + + + MemoryStream ms = new MemoryStream(); + BinaryWriter bw = new BinaryWriter(ms); + + bw.Write(DataUnkVal); + + + RelData lastrd = null;//debug + + for (int i = 0; i < RelDatasSorted.Length; i++) + { + + var rd = RelDatasSorted[i]; + + switch ((Dat151RelType)rd.TypeID) + { + case Dat151RelType.AmbientEmitter: + case Dat151RelType.AmbientZone: + case Dat151RelType.Unk101: + case Dat151RelType.Unk35: + while ((ms.Position & 0xF) != 0) bw.Write((byte)0); //pad up to nearest 16 bytes + break; + case Dat151RelType.Mood: + case Dat151RelType.Unk70: + case Dat151RelType.Unk29: + case Dat151RelType.SpeechParams: + case Dat151RelType.Unk11: + case Dat151RelType.Unk41: + case Dat151RelType.Unk2: + case Dat151RelType.AmbientEmitterList: + case Dat151RelType.Weapon: + case Dat151RelType.Vehicle: + case Dat151RelType.StopTrackAction: + while ((ms.Position & 3) != 0) bw.Write((byte)0); //align these to nearest 4 bytes + break; + + } + + var pos = ms.Position; + if (ms.Position != rd.DataOffset) + { } + rd.DataOffset = (uint)ms.Position; + rd.Write(bw); + var lengthwritten = ms.Position - pos; + if (lengthwritten != rd.DataLength) + { } + + + lastrd = rd; + } + + var buf = new byte[ms.Length]; + ms.Position = 0; + ms.Read(buf, 0, buf.Length); + + if ((DataBlock?.Length ?? 0) != buf.Length) + { } + + DataBlock = buf; + + } + private void BuildIndex() + { + if (RelDatas == null) return; + if (RelDatasSorted == null) return; + + switch (RelType) + { + case RelDatFileType.Dat149: + case RelDatFileType.Dat150: + case RelDatFileType.Dat151Parameters: + break; + case RelDatFileType.Dat4://TODO! + case RelDatFileType.Dat54DataEntries://TODO! + default://TODO..? + return; + } + + + //var sorted = RelDatasSorted.ToList(); + //sorted.Sort((a, b) => { return ((uint)a.NameHash).CompareTo((uint)b.NameHash); }); + //RelDatas = sorted.ToArray(); + + var hashes = new RelIndexHash[RelDatas.Length]; + for (int i = 0; i < RelDatas.Length; i++) + { + var rd = RelDatas[i]; + hashes[i] = new RelIndexHash() { Name = rd.NameHash, Offset = rd.DataOffset, Length = rd.DataLength }; + } + //if (hashes.Length != IndexHashes.Length) + //{ } + + IndexHashes = hashes; + + } private void BuildWavesTracks() { - switch(RelType) + if (RelDatasSorted == null) return; + + switch (RelType) { case RelDatFileType.Dat149: case RelDatFileType.Dat150: @@ -670,6 +786,7 @@ namespace CodeWalker.GameFiles private void BuildWavesMaps() { + //for discovering "WavesTracks" offsets var relType = RelType; switch (RelType) @@ -821,7 +938,6 @@ namespace CodeWalker.GameFiles public byte[] Save() { - //build DataBlock //update DataLength //update NameTableCount @@ -833,6 +949,8 @@ namespace CodeWalker.GameFiles //update WaveContainersOffsets //update WaveContainersCount + BuildDataBlock(); + BuildIndex(); BuildWavesTracks(); DataLength = (uint)(DataBlock?.Length ?? 0); @@ -1035,6 +1153,12 @@ namespace CodeWalker.GameFiles return null; } + public virtual void Write(BinaryWriter bw) + { + bw.Write(Data); //fallback for default byte array data writing... + } + + public string GetNameString() { return (string.IsNullOrEmpty(Name)) ? NameHash.ToString() : Name; @@ -2390,21 +2514,25 @@ namespace CodeWalker.GameFiles return GetBaseString() + ": " + Type.ToString(); } } - [TC(typeof(EXP))] public class Dat151Sound : RelSound - { - public Dat151RelType Type { get; set; } - public Dat151Sound(RelData d, BinaryReader br) : base(d, br) + [TC(typeof(EXP))] public struct Dat151HashPair + { + public MetaHash Hash0 { get; set; } + public MetaHash Hash1 { get; set; } + + public Dat151HashPair(MetaHash hash0, MetaHash hash1) { - Type = (Dat151RelType)TypeID; + Hash0 = hash0; + Hash1 = hash1; } public override string ToString() { - return GetBaseString() + ": " + Type.ToString(); + return Hash0.ToString() + ": " + Hash1.ToString(); } } + public enum Dat151ZoneShape : uint { Box = 0, @@ -2529,6 +2657,7 @@ namespace CodeWalker.GameFiles if (ExtParamsCount != 0) { } + var data = this.Data; long bytesleft = br.BaseStream.Length - br.BaseStream.Position; @@ -2917,24 +3046,6 @@ namespace CodeWalker.GameFiles } - - [TC(typeof(EXP))] public struct Dat151HashPair - { - public MetaHash Hash0 { get; set; } - public MetaHash Hash1 { get; set; } - - public Dat151HashPair(MetaHash hash0, MetaHash hash1) - { - Hash0 = hash0; - Hash1 = hash1; - } - - public override string ToString() - { - return Hash0.ToString() + ": " + Hash1.ToString(); - } - } - [TC(typeof(EXP))] public class Dat151WeaponAudioItem : Dat151RelData { public MetaHash AudioTrack0 { get; set; } @@ -4249,11 +4360,185 @@ namespace CodeWalker.GameFiles } } + [TC(typeof(EXP))] public class Dat151ShoreLinePool : Dat151RelData + { + public uint Unk01 { get; set; } + public Vector4 Unk02 { get; set; } + public int Unk03 { get; set; } + public int Unk04 { get; set; } + public int Unk05 { get; set; } + public int Unk06 { get; set; } + public int Unk07 { get; set; } + public int Unk08 { get; set; } + public int Unk09 { get; set; } + public int Unk10 { get; set; } + public int Unk11 { get; set; } + public float Unk12 { get; set; } + public int PointsCount { get; set; } + public Vector2[] Points { get; set; } + public Dat151ShoreLinePool(RelData d, BinaryReader br) : base(d, br) + { + Unk01 = br.ReadUInt32(); + Unk02 = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); + Unk03 = br.ReadInt32(); + Unk04 = br.ReadInt32(); + Unk05 = br.ReadInt32(); + Unk06 = br.ReadInt32(); + Unk07 = br.ReadInt32(); + Unk08 = br.ReadInt32(); + Unk09 = br.ReadInt32(); + Unk10 = br.ReadInt32(); + Unk11 = br.ReadInt32(); + Unk12 = br.ReadSingle(); + PointsCount = br.ReadInt32(); + var points = new Vector2[PointsCount]; + for (int i = 0; i < PointsCount; i++) + { + points[i] = new Vector2(br.ReadSingle(), br.ReadSingle()); + } + Points = points; + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + } + [TC(typeof(EXP))] public class Dat151ShoreLineLake : Dat151RelData + { + public uint Unk01 { get; set; } + public Vector4 Unk02 { get; set; } + public int Unk03 { get; set; } + public int Unk04 { get; set; } + public uint Unk05 { get; set; } + public int PointsCount { get; set; } + public Vector2[] Points { get; set; } + public Dat151ShoreLineLake(RelData d, BinaryReader br) : base(d, br) + { + Unk01 = br.ReadUInt32(); + Unk02 = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); + Unk03 = br.ReadInt32(); + Unk04 = br.ReadInt32(); + Unk05 = br.ReadUInt32(); + + byte b1 = (byte)((Unk05) & 0xFF); + byte b2 = (byte)((Unk05>>8) & 0xFF); + PointsCount = b2; + + var points = new Vector2[PointsCount]; + for (int i = 0; i < PointsCount; i++) + { + points[i] = new Vector2(br.ReadSingle(), br.ReadSingle()); + } + Points = points; + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + } + [TC(typeof(EXP))] public class Dat151ShoreLineRiver : Dat151RelData + { + public uint Unk01 { get; set; } + public Vector4 Unk02 { get; set; } + public float Unk03 { get; set; } + public uint Unk04 { get; set; } + public uint Unk05 { get; set; } + public uint Unk06 { get; set; } + public uint PointsCount { get; set; } + public Vector3[] Points { get; set; } + + public Dat151ShoreLineRiver(RelData d, BinaryReader br) : base(d, br) + { + Unk01 = br.ReadUInt32(); + Unk02 = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); + Unk03 = br.ReadSingle(); + Unk04 = br.ReadUInt32(); + Unk05 = br.ReadUInt32(); + Unk06 = br.ReadUInt32(); + PointsCount = br.ReadUInt32(); + + var points = new Vector3[PointsCount]; + for (int i = 0; i < PointsCount; i++) + { + points[i] = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); + } + Points = points; + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + } + [TC(typeof(EXP))] public class Dat151ShoreLineOcean : Dat151RelData + { + public uint Unk01 { get; set; } + public Vector4 Unk02 { get; set; } + public float Unk03 { get; set; } + public uint Unk04 { get; set; } + public MetaHash Unk05 { get; set; } + public float Unk06 { get; set; } + public float Unk07 { get; set; } + public float Unk08 { get; set; } + public float Unk09 { get; set; } + public float Unk10 { get; set; } + public float Unk11 { get; set; } + public float Unk12 { get; set; } + public uint PointsCount { get; set; } + public Vector2[] Points { get; set; } + + public Dat151ShoreLineOcean(RelData d, BinaryReader br) : base(d, br) + { + Unk01 = br.ReadUInt32(); + Unk02 = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); + Unk03 = br.ReadSingle(); + Unk04 = br.ReadUInt32(); + Unk05 = br.ReadUInt32(); + Unk06 = br.ReadSingle(); + Unk07 = br.ReadSingle(); + Unk08 = br.ReadSingle(); + Unk09 = br.ReadSingle(); + Unk10 = br.ReadSingle(); + Unk11 = br.ReadSingle(); + Unk12 = br.ReadSingle(); + + PointsCount = br.ReadUInt32(); + + var points = new Vector2[PointsCount]; + for (int i = 0; i < PointsCount; i++) + { + points[i] = new Vector2(br.ReadSingle(), br.ReadSingle()); + } + Points = points; + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + } + [TC(typeof(EXP))] public class Dat151ShoreLineList : Dat151RelData + { + public uint ShoreLineCount { get; set; } + public MetaHash[] ShoreLines { get; set; } + + public Dat151ShoreLineList(RelData d, BinaryReader br) : base(d, br) + { + ShoreLineCount = br.ReadUInt32(); + var shorelines = new MetaHash[ShoreLineCount]; + for (int i = 0; i < ShoreLineCount; i++) + { + shorelines[i] = br.ReadUInt32(); + } + ShoreLines = shorelines; + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + } diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index ab3a5ba..b364bcf 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -2216,11 +2216,14 @@ namespace CodeWalker.GameFiles { if (data.Length != rbfe.FileUncompressedSize) { } - if (data.Length != rel.RawFileData.Length) + else if (data.Length != rel.RawFileData.Length) { } - for (int i = 0; i < data.Length; i++) //raw file test - if (data[i] != rel.RawFileData[i]) - { } + else + { + for (int i = 0; i < data.Length; i++) //raw file test + if (data[i] != rel.RawFileData[i]) + { } + } } From 05d302a4e19133e074418953a132360b8fb0072a Mon Sep 17 00:00:00 2001 From: dexy Date: Tue, 25 Dec 2018 22:40:49 +1100 Subject: [PATCH 057/158] Dat151 progress --- .../GameFiles/FileTypes/RelFile.cs | 1054 +++++++++++++++-- CodeWalker.Core/GameFiles/GameFileCache.cs | 14 +- CodeWalker.csproj | 45 + Forms/RelForm.Designer.cs | 26 +- .../EditAudioEmitterListPanel.Designer.cs | 48 + Project/Panels/EditAudioEmitterListPanel.cs | 36 + Project/Panels/EditAudioEmitterListPanel.resx | 409 +++++++ .../Panels/EditAudioEmitterPanel.Designer.cs | 48 + Project/Panels/EditAudioEmitterPanel.cs | 37 + Project/Panels/EditAudioEmitterPanel.resx | 409 +++++++ Project/Panels/EditAudioFilePanel.Designer.cs | 48 + Project/Panels/EditAudioFilePanel.cs | 37 + Project/Panels/EditAudioFilePanel.resx | 409 +++++++ .../Panels/EditAudioZoneListPanel.Designer.cs | 48 + Project/Panels/EditAudioZoneListPanel.cs | 37 + Project/Panels/EditAudioZoneListPanel.resx | 409 +++++++ Project/Panels/EditAudioZonePanel.Designer.cs | 77 ++ Project/Panels/EditAudioZonePanel.cs | 38 + Project/Panels/EditAudioZonePanel.resx | 409 +++++++ Project/Panels/ProjectExplorerPanel.cs | 8 +- Project/ProjectForm.Designer.cs | 147 ++- Project/ProjectForm.cs | 270 ++++- WorldForm.cs | 15 +- 23 files changed, 3909 insertions(+), 169 deletions(-) create mode 100644 Project/Panels/EditAudioEmitterListPanel.Designer.cs create mode 100644 Project/Panels/EditAudioEmitterListPanel.cs create mode 100644 Project/Panels/EditAudioEmitterListPanel.resx create mode 100644 Project/Panels/EditAudioEmitterPanel.Designer.cs create mode 100644 Project/Panels/EditAudioEmitterPanel.cs create mode 100644 Project/Panels/EditAudioEmitterPanel.resx create mode 100644 Project/Panels/EditAudioFilePanel.Designer.cs create mode 100644 Project/Panels/EditAudioFilePanel.cs create mode 100644 Project/Panels/EditAudioFilePanel.resx create mode 100644 Project/Panels/EditAudioZoneListPanel.Designer.cs create mode 100644 Project/Panels/EditAudioZoneListPanel.cs create mode 100644 Project/Panels/EditAudioZoneListPanel.resx create mode 100644 Project/Panels/EditAudioZonePanel.Designer.cs create mode 100644 Project/Panels/EditAudioZonePanel.cs create mode 100644 Project/Panels/EditAudioZonePanel.resx diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index bbf6b85..fd9ea52 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -76,12 +76,12 @@ namespace CodeWalker.GameFiles public uint IndexStringFlags { get; set; } public RelIndexHash[] IndexHashes { get; set; } public RelIndexString[] IndexStrings { get; set; } - public uint WaveTracksCount { get; set; } - public uint[] WaveTracksOffsets { get; set; } - public MetaHash[] WaveTracksHashes { get; set; } - public uint WaveContainersCount { get; set; } - public uint[] WaveContainersOffsets { get; set; } - public MetaHash[] WaveContainersHashes { get; set; } + public uint HashTableCount { get; set; } + public uint[] HashTableOffsets { get; set; } + public MetaHash[] HashTable { get; set; } + public uint PackTableCount { get; set; } + public uint[] PackTableOffsets { get; set; } + public MetaHash[] PackTable { get; set; } public RelData[] RelDatas { get; set; } public RelData[] RelDatasSorted { get; set; } @@ -106,9 +106,11 @@ namespace CodeWalker.GameFiles public void Load(byte[] data, RpfFileEntry entry) { RawFileData = data; - - RpfFileEntry = entry; - Name = entry.Name; + if (entry != null) + { + RpfFileEntry = entry; + Name = entry.Name; + } MemoryStream ms = new MemoryStream(data); BinaryReader br = new BinaryReader(ms); @@ -189,40 +191,40 @@ namespace CodeWalker.GameFiles } - WaveTracksCount = br.ReadUInt32(); - if (WaveTracksCount != 0) + HashTableCount = br.ReadUInt32(); + if (HashTableCount != 0) { - uint[] wtoffsets = new uint[WaveTracksCount]; - MetaHash[] wthashes = new MetaHash[WaveTracksCount]; - for (uint i = 0; i < WaveTracksCount; i++) + uint[] htoffsets = new uint[HashTableCount]; + MetaHash[] hthashes = new MetaHash[HashTableCount]; + for (uint i = 0; i < HashTableCount; i++) { - wtoffsets[i] = br.ReadUInt32(); + htoffsets[i] = br.ReadUInt32(); var pos = ms.Position; - ms.Position = wtoffsets[i]; - wthashes[i] = new MetaHash(br.ReadUInt32()); + ms.Position = htoffsets[i]; + hthashes[i] = new MetaHash(br.ReadUInt32()); ms.Position = pos; } - WaveTracksOffsets = wtoffsets; - WaveTracksHashes = wthashes; + HashTableOffsets = htoffsets; + HashTable = hthashes; } - WaveContainersCount = br.ReadUInt32(); - if (WaveContainersCount != 0) + PackTableCount = br.ReadUInt32(); + if (PackTableCount != 0) { - uint[] wcoffsets = new uint[WaveContainersCount]; - MetaHash[] wchashes = new MetaHash[WaveContainersCount]; - for (uint i = 0; i < WaveContainersCount; i++) + uint[] ptoffsets = new uint[PackTableCount]; + MetaHash[] pthashes = new MetaHash[PackTableCount]; + for (uint i = 0; i < PackTableCount; i++) { - wcoffsets[i] = br.ReadUInt32(); + ptoffsets[i] = br.ReadUInt32(); var pos = ms.Position; - ms.Position = wcoffsets[i]; - wchashes[i] = new MetaHash(br.ReadUInt32()); + ms.Position = ptoffsets[i]; + pthashes[i] = new MetaHash(br.ReadUInt32()); ms.Position = pos; } - WaveContainersOffsets = wcoffsets; - WaveContainersHashes = wchashes; + PackTableOffsets = ptoffsets; + PackTable = pthashes; } if (ms.Position != ms.Length) @@ -631,6 +633,11 @@ namespace CodeWalker.GameFiles + private void BuildNameTable() + { + //TODO! + //need to do this before building the data block since nametable offsets are in there! + } private void BuildDataBlock() { if (RelDatas == null) return; @@ -696,7 +703,7 @@ namespace CodeWalker.GameFiles var lengthwritten = ms.Position - pos; if (lengthwritten != rd.DataLength) { } - + rd.DataLength = (uint)lengthwritten; lastrd = rd; } @@ -745,7 +752,7 @@ namespace CodeWalker.GameFiles IndexHashes = hashes; } - private void BuildWavesTracks() + private void BuildHashTable() { if (RelDatasSorted == null) return; @@ -761,32 +768,35 @@ namespace CodeWalker.GameFiles return; } - var wtoffsets = new List(); + var htoffsets = new List(); foreach (var rd in RelDatasSorted) { - var offsets = rd.GetWaveTrackOffsets(); + var offsets = rd.GetHashTableOffsets(); if (offsets == null) continue; var rdoffset = rd.DataOffset + 12; for (int i = 0; i < offsets.Length; i++) { - wtoffsets.Add(rdoffset + offsets[i]); + htoffsets.Add(rdoffset + offsets[i]); } } - if (wtoffsets.Count > 0) + if (htoffsets.Count > 0) { - WaveTracksOffsets = wtoffsets.ToArray(); + HashTableOffsets = htoffsets.ToArray(); } else { - WaveTracksOffsets = null; + HashTableOffsets = null; } } + private void BuildPackTable() + { + //TODO + } - - private void BuildWavesMaps() + private void BuildHashMaps() { - //for discovering "WavesTracks" offsets + //for discovering "HashTable" offsets var relType = RelType; switch (RelType) @@ -803,11 +813,11 @@ namespace CodeWalker.GameFiles } - if (WaveTracksOffsets != null) + if (HashTableOffsets != null) { - foreach (var wtoffset in WaveTracksOffsets) + foreach (var htoffset in HashTableOffsets) { - var dboffset = wtoffset - 8; + var dboffset = htoffset - 8; for (int i = 0; i < RelDatasSorted.Length; i++) { var rd = RelDatasSorted[i]; @@ -820,28 +830,28 @@ namespace CodeWalker.GameFiles { rdoffset += rs.Header.HeaderLength; } - var key = new WavesMapKey() + var key = new HashesMapKey() { FileType = relType, ItemType = rd.TypeID, IsContainer = false }; - var val = new WavesMapValue() + var val = new HashesMapValue() { Item = rd, Hash = BitConverter.ToUInt32(DataBlock, (int)dboffset), Offset = dboffset - rdoffset, Count = 1 }; - AddWavesMapItem(ref key, val); + AddHashesMapItem(ref key, val); break; } } } } - if (WaveContainersOffsets != null) + if (PackTableOffsets != null) { - foreach (var wcoffset in WaveContainersOffsets) + foreach (var wcoffset in PackTableOffsets) { var dboffset = wcoffset - 8; for (int i = 0; i < RelDatasSorted.Length; i++) @@ -849,20 +859,20 @@ namespace CodeWalker.GameFiles var rd = RelDatasSorted[i]; if ((dboffset >= rd.DataOffset) && (dboffset < rd.DataOffset + rd.DataLength)) { - var key = new WavesMapKey() + var key = new HashesMapKey() { FileType = relType, ItemType = rd.TypeID, IsContainer = true }; - var val = new WavesMapValue() + var val = new HashesMapValue() { Item = rd, Hash = BitConverter.ToUInt32(DataBlock, (int)dboffset), Offset = dboffset - rd.DataOffset, Count = 1 }; - AddWavesMapItem(ref key, val); + AddHashesMapItem(ref key, val); break; } } @@ -872,7 +882,7 @@ namespace CodeWalker.GameFiles } - public struct WavesMapKey + public struct HashesMapKey { public RelDatFileType FileType { get; set; } public uint ItemType { get; set; } @@ -895,7 +905,7 @@ namespace CodeWalker.GameFiles return fcstr + ItemType.ToString(); } } - public class WavesMapValue + public class HashesMapValue { public RelData Item { get; set; } public MetaHash Hash { get; set; } @@ -907,14 +917,14 @@ namespace CodeWalker.GameFiles return Offset.ToString() + ": " + Count.ToString(); } } - public static Dictionary> WavesMap { get; set; } = new Dictionary>(); - private static void AddWavesMapItem(ref WavesMapKey key, WavesMapValue val) + public static Dictionary> HashesMap { get; set; } = new Dictionary>(); + private static void AddHashesMapItem(ref HashesMapKey key, HashesMapValue val) { - List values = null; - if (!WavesMap.TryGetValue(key, out values)) + List values = null; + if (!HashesMap.TryGetValue(key, out values)) { - values = new List(); - WavesMap[key] = values; + values = new List(); + HashesMap[key] = values; } if (values != null) { @@ -944,14 +954,16 @@ namespace CodeWalker.GameFiles //update NameTableLength //update IndexStrings/IndexHashes //update IndexCount - //update WaveTracksOffsets (and hashes?) - //update WaveTracksCount - //update WaveContainersOffsets - //update WaveContainersCount + //update HashTableOffsets (and hashes?) + //update HashTableCount + //update PackTableOffsets + //update PackTableCount + BuildNameTable(); BuildDataBlock(); BuildIndex(); - BuildWavesTracks(); + BuildHashTable(); + BuildPackTable(); DataLength = (uint)(DataBlock?.Length ?? 0); if (NameTable != null) @@ -977,8 +989,8 @@ namespace CodeWalker.GameFiles { IndexCount = (uint)(IndexHashes?.Length ?? 0); } - WaveTracksCount = (uint)(WaveTracksOffsets?.Length ?? 0); - WaveContainersCount = (uint)(WaveContainersOffsets?.Length ?? 0); + HashTableCount = (uint)(HashTableOffsets?.Length ?? 0); + PackTableCount = (uint)(PackTableOffsets?.Length ?? 0); @@ -1045,21 +1057,21 @@ namespace CodeWalker.GameFiles } } - bw.Write(WaveTracksCount); - if (WaveTracksCount != 0) + bw.Write(HashTableCount); + if (HashTableCount != 0) { - for (uint i = 0; i < WaveTracksCount; i++) + for (uint i = 0; i < HashTableCount; i++) { - bw.Write(WaveTracksOffsets[i]); + bw.Write(HashTableOffsets[i]); } } - bw.Write(WaveContainersCount); - if (WaveContainersCount != 0) + bw.Write(PackTableCount); + if (PackTableCount != 0) { - for (uint i = 0; i < WaveContainersCount; i++) + for (uint i = 0; i < PackTableCount; i++) { - bw.Write(WaveContainersOffsets[i]); + bw.Write(PackTableOffsets[i]); } } @@ -1148,7 +1160,7 @@ namespace CodeWalker.GameFiles TypeID = br.ReadByte(); } - public virtual uint[] GetWaveTrackOffsets() + public virtual uint[] GetHashTableOffsets() { return null; } @@ -2509,6 +2521,13 @@ namespace CodeWalker.GameFiles } + public void WriteTypeAndOffset(BinaryWriter bw) + { + var val = ((NameTableOffset & 0xFFFFFF) << 8) + TypeID; + bw.Write(val); + } + + public override string ToString() { return GetBaseString() + ": " + Type.ToString(); @@ -2559,6 +2578,18 @@ namespace CodeWalker.GameFiles { } //no hits here + } + public override void Write(BinaryWriter bw) + { + //base.Write(bw); + WriteTypeAndOffset(bw); + + bw.Write(EmitterCount); + for (int i = 0; i < EmitterCount; i++) + { + bw.Write(EmitterHashes[i]); + } + } } [TC(typeof(EXP))] public class Dat151AmbientZone : Dat151RelData @@ -2589,7 +2620,7 @@ namespace CodeWalker.GameFiles public FlagsUint Flags05 { get; set; } public byte Unk14 { get; set; } public byte Unk15 { get; set; } - public ushort HashesCount { get; set; } + public byte HashesCount { get; set; } public byte Unk16 { get; set; } public MetaHash[] Hashes { get; set; } @@ -2604,6 +2635,11 @@ namespace CodeWalker.GameFiles Hash = br.ReadUInt32(); Value = br.ReadSingle(); } + public void Write(BinaryWriter bw) + { + bw.Write(Hash); + bw.Write(Value); + } public override string ToString() { return Hash.ToString() + ": " + FloatUtil.ToString(Value); @@ -2658,8 +2694,11 @@ namespace CodeWalker.GameFiles { } + #region testing + var data = this.Data; + long bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { @@ -2695,6 +2734,90 @@ namespace CodeWalker.GameFiles if (Flags05.Value != 0) { }//eg 0xAE64583B, 0x61083310, 0xCAE96294, 0x1C376176 + #endregion + + } + public override void Write(BinaryWriter bw) + { + //base.Write(bw); + WriteTypeAndOffset(bw); + + bw.Write(Flags00.Value); + bw.Write((uint)Shape); + bw.Write(Flags02.Value); + bw.Write(OuterPos.X); + bw.Write(OuterPos.Y); + bw.Write(OuterPos.Z); + bw.Write(Unused01); + bw.Write(OuterSize.X); + bw.Write(OuterSize.Y); + bw.Write(OuterSize.Z); + bw.Write(Unused02); + bw.Write(OuterVec1.X); + bw.Write(OuterVec1.Y); + bw.Write(OuterVec1.Z); + bw.Write(OuterVec1.W); + bw.Write(OuterVec2.X); + bw.Write(OuterVec2.Y); + bw.Write(OuterVec2.Z); + bw.Write(OuterVec2.W); + bw.Write(OuterAngle);//### + bw.Write(OuterVec3.X); + bw.Write(OuterVec3.Y); + bw.Write(OuterVec3.Z); + bw.Write(InnerPos.X); + bw.Write(InnerPos.Y); + bw.Write(InnerPos.Z); + bw.Write(Unused06); + bw.Write(InnerSize.X); + bw.Write(InnerSize.Y); + bw.Write(InnerSize.Z); + bw.Write(Unused07); + bw.Write(InnerVec1.X); + bw.Write(InnerVec1.Y); + bw.Write(InnerVec1.Z); + bw.Write(InnerVec1.W); + bw.Write(InnerVec2.X); + bw.Write(InnerVec2.Y); + bw.Write(InnerVec2.Z); + bw.Write(InnerVec2.W); + bw.Write(InnerAngle);//### + bw.Write(InnerVec3.X); + bw.Write(InnerVec3.Y); + bw.Write(InnerVec3.Z); + bw.Write(Vec11.X); + bw.Write(Vec11.Y); + bw.Write(Vec11.Z); + bw.Write(Vec11.W); + bw.Write(Vec12.X); + bw.Write(Vec12.Y); + bw.Write(Vec12.Z); + bw.Write(Vec12.W); + bw.Write(Vec13.X); + bw.Write(Vec13.Y); + bw.Write(Vec13.Z); + bw.Write(Vec13.W); + + bw.Write(Flags05.Value); + bw.Write(Unk14); + bw.Write(Unk15); + bw.Write(HashesCount); + bw.Write(Unk16); + for (int i = 0; i < HashesCount; i++) + { + bw.Write(Hashes[i]); + } + + bw.Write(ExtParamsCount); + for (int i = 0; i < ExtParamsCount; i++) + { + ExtParams[i].Write(bw); + } + if (ExtParamsCount != 0) + { } + + while ((bw.BaseStream.Position & 0xF) != 0) bw.Write((byte)0); //pad out to next 16 bytes + } } @@ -2739,6 +2862,12 @@ namespace CodeWalker.GameFiles Value = br.ReadSingle(); Flags = br.ReadUInt32(); } + public void Write(BinaryWriter bw) + { + bw.Write(Hash); + bw.Write(Value); + bw.Write(Flags); + } public override string ToString() { return Hash.ToString() + ": " + FloatUtil.ToString(Value) + ": " + Flags.ToString(); @@ -2796,6 +2925,8 @@ namespace CodeWalker.GameFiles } + #region testing + switch (Unk12.Value)//no pattern? { default: @@ -3021,8 +3152,59 @@ namespace CodeWalker.GameFiles long bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } + + + #endregion + } + public override void Write(BinaryWriter bw) + { + //base.Write(bw); + WriteTypeAndOffset(bw); + + bw.Write(Unk00.Value); + bw.Write(Unk01.Value); + bw.Write(Unk02.Value); + bw.Write(Position.X); + bw.Write(Position.Y); + bw.Write(Position.Z); + bw.Write(Unk03.Value); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06.Value); + bw.Write(Unk07.Value); + bw.Write(Unk08.Value); + bw.Write(Unk09); + bw.Write(InnerRad); + bw.Write(OuterRad); + bw.Write(Unk12.Value); + bw.Write(Unk13.Value); + bw.Write(Unk14.Value); + bw.Write(Unk15.Value); + bw.Write(Unk16.Value); + bw.Write(Unk17.Value); + bw.Write(Unk18.Value); + bw.Write(Unk19.Value); + bw.Write(Unk20.Value); + bw.Write(Unk21.Value); + bw.Write(Unk22.Value); + bw.Write(Unk23.Value); + bw.Write(ExtParamCount); + + if (ExtParamCount > 0) + { + for (int i = 0; i < ExtParamCount; i++) + { + ExtParams[i].Write(bw); + } + //array seems to be padded to multiples of 16 bytes. (write the rest here) + while ((bw.BaseStream.Position & 0xF) != 0) bw.Write((byte)0); //pad out to next 16 bytes + } + + } + + } [TC(typeof(EXP))] public class Dat151AmbientZoneList : Dat151RelData { @@ -3043,6 +3225,18 @@ namespace CodeWalker.GameFiles { } //no hits here } + public override void Write(BinaryWriter bw) + { + //base.Write(bw); + WriteTypeAndOffset(bw); + + bw.Write(ZoneCount); + for (int i = 0; i < ZoneCount; i++) + { + bw.Write(ZoneHashes[i]); + } + + } } @@ -3068,8 +3262,18 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } - - public override uint[] GetWaveTrackOffsets() + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + bw.Write(AudioTrack0); + bw.Write(AudioItemCount); + for (int i = 0; i < AudioItemCount; i++) + { + bw.Write(AudioItems[i].Hash0); + bw.Write(AudioItems[i].Hash1); + } + } + public override uint[] GetHashTableOffsets() { var offsets = new List(); offsets.Add(0); @@ -3128,8 +3332,33 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); - public override uint[] GetWaveTrackOffsets() + bw.Write(Unk0); + bw.Write(Unk1); + bw.Write(Unk2); + bw.Write(AudioTrack0); + bw.Write(AudioTrack1); + bw.Write(Unk3); + bw.Write(Unk4); + bw.Write(AudioTrack2); + bw.Write(Unk5); + bw.Write(Unk6); + bw.Write(Unk7); + bw.Write(Unk8); + bw.Write(Unk9); + bw.Write(ItemCount); + + for (int i = 0; i < ItemCount; i++) + { + bw.Write(Items[i].Hash0); + bw.Write(Items[i].Hash1); + } + + } + public override uint[] GetHashTableOffsets() { return new uint[] { 12, 16, 28 }; } @@ -3158,8 +3387,19 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); - public override uint[] GetWaveTrackOffsets() + bw.Write(Unk0); + bw.Write(Unk1); + bw.Write(Unk2); + bw.Write(AudioTrack0); + bw.Write(AudioTrack1); + bw.Write(Unk3); + bw.Write(Unk4); + } + public override uint[] GetHashTableOffsets() { return new uint[] { 12, 16 }; } @@ -3192,6 +3432,17 @@ namespace CodeWalker.GameFiles AudioTrack2 = br.ReadUInt32(); AudioTrack3 = br.ReadUInt32(); } + public void Write(BinaryWriter bw) + { + bw.Write(AudioTrack0); + bw.Write(AudioTrack1); + bw.Write(Unk1); + bw.Write(Unk2); + bw.Write(Unk3); + bw.Write(Unk4); + bw.Write(AudioTrack2); + bw.Write(AudioTrack3); + } } [TC(typeof(EXP))] public class Dat151Mood : Dat151RelData { @@ -3218,8 +3469,20 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); - public override uint[] GetWaveTrackOffsets() + bw.Write(Unk0); + bw.Write(Unk1); + bw.Write(Unk2); + bw.Write(MoodItemCount); + for (int i = 0; i < MoodItemCount; i++) + { + MoodItems[i].Write(bw); + } + } + public override uint[] GetHashTableOffsets() { var offsets = new List(); for (uint i = 0; i < MoodItemCount; i++) @@ -3264,7 +3527,22 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } - public override uint[] GetWaveTrackOffsets() + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk0); + bw.Write(Unk1); + bw.Write(Unk2); + bw.Write(AudioTrack0); + bw.Write(AudioTrack1); + bw.Write(Unk3); + bw.Write(AudioTrack2); + bw.Write(Unk4); + bw.Write(Unk5); + bw.Write(Unk6); + } + public override uint[] GetHashTableOffsets() { return new uint[] { 12, 16, 24 }; } @@ -3288,7 +3566,18 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } - public override uint[] GetWaveTrackOffsets() + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(AudioTrackCount); + for (int i = 0; i < AudioTrackCount; i++) + { + bw.Write(AudioTracks[i]); + } + + } + public override uint[] GetHashTableOffsets() { var offsets = new List(); for (uint i = 0; i < AudioTrackCount; i++) @@ -3332,7 +3621,23 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } - public override uint[] GetWaveTrackOffsets() + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk0); + bw.Write(Unk1); + bw.Write(Unk2); + bw.Write(AudioTrack0); + bw.Write(AudioTrack1); + bw.Write(Unk3); + bw.Write(Unk4); + bw.Write(Unk5); + bw.Write(Unk6); + bw.Write(Unk7); + bw.Write(Unk8); + } + public override uint[] GetHashTableOffsets() { return new uint[] { 12, 16 }; } @@ -3362,7 +3667,18 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } - public override uint[] GetWaveTrackOffsets() + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk0); + bw.Write(Unk1); + bw.Write(Unk2); + bw.Write(AudioTrack0); + bw.Write(AudioTrack1); + bw.Write(Unk3); + } + public override uint[] GetHashTableOffsets() { return new uint[] { 12, 16 }; } @@ -3391,7 +3707,19 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } - public override uint[] GetWaveTrackOffsets() + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk0); + bw.Write(Unk1); + bw.Write(Unk2); + bw.Write(AudioTrack0); + bw.Write(AudioTrack1); + bw.Write(Unk3); + bw.Write(Unk4); + } + public override uint[] GetHashTableOffsets() { return new uint[] { 12, 16 }; } @@ -3420,7 +3748,19 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } - public override uint[] GetWaveTrackOffsets() + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk0); + bw.Write(Unk1); + bw.Write(Unk2); + bw.Write(AudioTrack0); + bw.Write(AudioTrack1); + bw.Write(Unk3); + bw.Write(Unk4); + } + public override uint[] GetHashTableOffsets() { return new uint[] { 12, 16 }; } @@ -3442,8 +3782,8 @@ namespace CodeWalker.GameFiles public MetaHash Unk12 { get; set; } public MetaHash Unk13 { get; set; } public MetaHash Unk14 { get; set; } - public uint Unk15 { get; set; } - public byte AudioTracks1Count { get; set; } + public uint Unk15 { get; set; }//TODO: fix this + public byte AudioTracks1Count { get; set; }//TODO: fix this public Dat151HashPair[] AudioTracks1 { get; set; } public uint AudioTracks2Count { get; set; } public MetaHash[] AudioTracks2 { get; set; } @@ -3520,8 +3860,48 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); - public override uint[] GetWaveTrackOffsets() + bw.Write(Unk00); + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); + bw.Write(Unk14); + bw.Write(Unk15); + + + if (AudioTracks1Count == 0) + { + bw.Write(AudioTracks2[0]);//hrmm + } + else //if (AudioTracks1Count > 0) + { + for (int i = 0; i < AudioTracks1Count; i++) + { + bw.Write(AudioTracks1[i].Hash0); + bw.Write(AudioTracks1[i].Hash1); + } + bw.Write(AudioTracks2Count); + for (int i = 0; i < AudioTracks2Count; i++) + { + bw.Write(AudioTracks2[i]); + } + } + + } + public override uint[] GetHashTableOffsets() { var offsets = new List(); uint offs = 64; @@ -3573,8 +3953,20 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); - public override uint[] GetWaveTrackOffsets() + bw.Write(Unk0); + bw.Write(Unk1); + bw.Write(Unk2); + bw.Write(RoomsCount); + for (int i = 0; i < RoomsCount; i++) + { + bw.Write(Rooms[i]); + } + } + public override uint[] GetHashTableOffsets() { var offsets = new List(); for (uint i = 0; i < RoomsCount; i++) @@ -3626,7 +4018,28 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } - public override uint[] GetWaveTrackOffsets() + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk00); + bw.Write(Unk01); + bw.Write(AudioTrack0); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); + bw.Write(Unk14); + } + public override uint[] GetHashTableOffsets() { return new uint[] { 8 }; } @@ -3643,7 +4056,13 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } - public override uint[] GetWaveTrackOffsets() + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(AudioTrack0); + } + public override uint[] GetHashTableOffsets() { return new uint[] { 0 }; } @@ -3845,7 +4264,105 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } - public override uint[] GetWaveTrackOffsets() + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk00); + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); + bw.Write(Unk14); + bw.Write(Unk15); + bw.Write(Unk16); + bw.Write(Unk17); + bw.Write(Unk18); + bw.Write(Unk19); + bw.Write(Unk20); + bw.Write(Unk21); + bw.Write(Unk22); + bw.Write(Unk23); + bw.Write(Unk24); + bw.Write(Unk25); + bw.Write(Unk26); + bw.Write(Unk27); + bw.Write(Unk28); + bw.Write(Unk29); + bw.Write(Unk30); + bw.Write(AudioTrack0); + bw.Write(Unk31); + bw.Write(Unk32); + bw.Write(AudioTrack1); + bw.Write(AudioTrack2); + bw.Write(Unk33); + bw.Write(Unk34); + bw.Write(Unk35); + bw.Write(Unk36); + bw.Write(Unk37); + bw.Write(Unk38); + bw.Write(Unk39); + bw.Write(Unk40); + bw.Write(Unk41); + bw.Write(Unk42); + bw.Write(Unk43); + bw.Write(Unk44); + bw.Write(Unk45); + bw.Write(Unk46); + bw.Write(Unk47); + bw.Write(Unk48); + bw.Write(Unk49); + bw.Write(Unk50); + bw.Write(Unk51); + bw.Write(Unk52); + bw.Write(Unk53); + bw.Write(Unk54); + bw.Write(Unk55); + bw.Write(Unk56); + bw.Write(Unk57); + bw.Write(Unk58); + bw.Write(Unk59); + bw.Write(Unk60); + bw.Write(Unk61); + bw.Write(Unk62); + bw.Write(Unk63); + bw.Write(Unk64); + bw.Write(Unk65); + bw.Write(Unk66); + bw.Write(Unk67); + bw.Write(Unk68); + bw.Write(Unk69); + bw.Write(Unk70); + bw.Write(Unk71); + bw.Write(Unk72); + bw.Write(Unk73); + bw.Write(Unk74); + bw.Write(Unk75); + bw.Write(Unk76); + bw.Write(Unk77); + bw.Write(Unk78); + bw.Write(Unk79); + bw.Write(Unk80); + bw.Write(Unk81); + bw.Write(Unk82); + bw.Write(Unk83); + bw.Write(Unk84); + bw.Write(Unk85); + bw.Write(Unk86); + bw.Write(Unk87); + bw.Write(Unk88); + bw.Write(Unk89); + } + public override uint[] GetHashTableOffsets() { return new uint[] { 124, 136, 140 }; } @@ -3969,7 +4486,68 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } - public override uint[] GetWaveTrackOffsets() + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk00); + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); + bw.Write(Unk14); + bw.Write(Unk15); + bw.Write(Unk16); + bw.Write(Unk17); + bw.Write(Unk18); + bw.Write(Unk19); + bw.Write(Unk20); + bw.Write(Unk21); + bw.Write(Unk22); + bw.Write(Unk23); + bw.Write(Unk24); + bw.Write(Unk25); + bw.Write(Unk26); + bw.Write(Unk27); + bw.Write(Unk28); + bw.Write(Unk29); + bw.Write(Unk30); + bw.Write(Unk31); + bw.Write(Unk32); + bw.Write(Unk33); + bw.Write(Unk34); + bw.Write(Unk35); + bw.Write(Unk36); + bw.Write(Unk37); + bw.Write(Unk38); + bw.Write(Unk39); + bw.Write(Unk40); + bw.Write(Unk41); + bw.Write(Unk42); + bw.Write(Unk43); + bw.Write(Unk44); + bw.Write(Unk45); + bw.Write(Unk46); + bw.Write(Unk47); + bw.Write(Unk48); + bw.Write(Unk49); + bw.Write(Unk50); + if (Unk50 > 0) + { + bw.Write(AudioTrack0); + bw.Write(AudioTrack1); + } + } + public override uint[] GetHashTableOffsets() { if (Unk50 > 0) return new uint[] { 204, 208 }; else return null; @@ -3991,7 +4569,15 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } - public override uint[] GetWaveTrackOffsets() + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk0); + bw.Write(AudioTrack0); + bw.Write(Unk1); + } + public override uint[] GetHashTableOffsets() { return new uint[] { 4 }; } @@ -4015,7 +4601,18 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } - public override uint[] GetWaveTrackOffsets() + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(AudioItemCount); + for (uint i = 0; i < AudioItemCount; i++) + { + bw.Write(AudioItems[i].Hash0); + bw.Write(AudioItems[i].Hash1); + } + } + public override uint[] GetHashTableOffsets() { var offsets = new List(); for (uint i = 0; i < AudioItemCount; i++) @@ -4060,7 +4657,25 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } - public override uint[] GetWaveTrackOffsets() + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk0); + bw.Write(Unk1); + bw.Write(Unk2); + bw.Write(AudioTrack0); + bw.Write(AudioTrack1); + bw.Write(Unk3); + bw.Write(Unk4); + bw.Write(Unk5); + bw.Write(AudioTracksCount); + for (var i = 0; i < AudioTracksCount; i++) + { + bw.Write(AudioTracks[i]); + } + } + public override uint[] GetHashTableOffsets() { var offsets = new List(); offsets.Add(12); @@ -4098,7 +4713,20 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } - public override uint[] GetWaveTrackOffsets() + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk0); + bw.Write(Unk1); + bw.Write(Unk2); + bw.Write(AudioTrack0); + bw.Write(AudioTrack1); + bw.Write(Unk3); + bw.Write(Unk4); + bw.Write(Unk5); + } + public override uint[] GetHashTableOffsets() { return new uint[] { 12, 16 }; } @@ -4122,7 +4750,18 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } - public override uint[] GetWaveTrackOffsets() + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(AudioItemCount); + for (var i = 0; i < AudioItemCount; i++) + { + bw.Write(AudioItems[i].Hash0); + bw.Write(AudioItems[i].Hash1); + } + } + public override uint[] GetHashTableOffsets() { var offsets = new List(); for (uint i = 0; i < AudioItemCount; i++) @@ -4151,7 +4790,17 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } - public override uint[] GetWaveTrackOffsets() + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(AudioTracksCount); + for (int i = 0; i < AudioTracksCount; i++) + { + bw.Write(AudioTracks[i]); + } + } + public override uint[] GetHashTableOffsets() { var offsets = new List(); for (uint i = 0; i < AudioTracksCount; i++) @@ -4204,7 +4853,29 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } - public override uint[] GetWaveTrackOffsets() + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk00); + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(AudioTracksCount); + for (int i = 0; i < AudioTracksCount; i++) + { + bw.Write(AudioTracks[i]); + } + } + public override uint[] GetHashTableOffsets() { var offsets = new List(); for (uint i = 0; i < AudioTracksCount; i++) @@ -4233,7 +4904,18 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } - public override uint[] GetWaveTrackOffsets() + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(AudioItemCount); + for (var i = 0; i < AudioItemCount; i++) + { + bw.Write(AudioItems[i].Hash0); + bw.Write(AudioItems[i].Hash1); + } + } + public override uint[] GetHashTableOffsets() { var offsets = new List(); for (uint i = 0; i < AudioItemCount; i++) @@ -4262,7 +4944,18 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } - public override uint[] GetWaveTrackOffsets() + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(AudioItemCount); + for (var i = 0; i < AudioItemCount; i++) + { + bw.Write(AudioItems[i].Hash0); + bw.Write(AudioItems[i].Hash1); + } + } + public override uint[] GetHashTableOffsets() { var offsets = new List(); for (uint i = 0; i < AudioItemCount; i++) @@ -4291,7 +4984,18 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } - public override uint[] GetWaveTrackOffsets() + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(AudioItemCount); + for (var i = 0; i < AudioItemCount; i++) + { + bw.Write(AudioItems[i].Hash0); + bw.Write(AudioItems[i].Hash1); + } + } + public override uint[] GetHashTableOffsets() { var offsets = new List(); for (uint i = 0; i < AudioItemCount; i++) @@ -4320,7 +5024,18 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } - public override uint[] GetWaveTrackOffsets() + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(AudioItemCount); + for (var i = 0; i < AudioItemCount; i++) + { + bw.Write(AudioItems[i].Hash0); + bw.Write(AudioItems[i].Hash1); + } + } + public override uint[] GetHashTableOffsets() { var offsets = new List(); for (uint i = 0; i < AudioItemCount; i++) @@ -4349,7 +5064,18 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } - public override uint[] GetWaveTrackOffsets() + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(AudioItemCount); + for (var i = 0; i < AudioItemCount; i++) + { + bw.Write(AudioItems[i].Hash0); + bw.Write(AudioItems[i].Hash1); + } + } + public override uint[] GetHashTableOffsets() { var offsets = new List(); for (uint i = 0; i < AudioItemCount; i++) @@ -4405,6 +5131,33 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02.X); + bw.Write(Unk02.Y); + bw.Write(Unk02.Z); + bw.Write(Unk02.W); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + + bw.Write(PointsCount); + for (int i = 0; i < PointsCount; i++) + { + bw.Write(Points[i].X); + bw.Write(Points[i].Y); + } + } } [TC(typeof(EXP))] public class Dat151ShoreLineLake : Dat151RelData { @@ -4439,6 +5192,29 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02.X); + bw.Write(Unk02.Y); + bw.Write(Unk02.Z); + bw.Write(Unk02.W); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + + //byte b1 = (byte)((Unk05) & 0xFF); + //byte b2 = (byte)((Unk05 >> 8) & 0xFF); + //PointsCount = b2; + + for (int i = 0; i < PointsCount; i++) + { + bw.Write(Points[i].X); + bw.Write(Points[i].Y); + } + } } [TC(typeof(EXP))] public class Dat151ShoreLineRiver : Dat151RelData { @@ -4472,6 +5248,28 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02.X); + bw.Write(Unk02.Y); + bw.Write(Unk02.Z); + bw.Write(Unk02.W); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(PointsCount); + + for (int i = 0; i < PointsCount; i++) + { + bw.Write(Points[i].X); + bw.Write(Points[i].Y); + bw.Write(Points[i].Z); + } + } } [TC(typeof(EXP))] public class Dat151ShoreLineOcean : Dat151RelData { @@ -4518,6 +5316,34 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02.X); + bw.Write(Unk02.Y); + bw.Write(Unk02.Z); + bw.Write(Unk02.W); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + + bw.Write(PointsCount); + + for (int i = 0; i < PointsCount; i++) + { + bw.Write(Points[i].X); + bw.Write(Points[i].Y); + } + } } [TC(typeof(EXP))] public class Dat151ShoreLineList : Dat151RelData { @@ -4538,6 +5364,16 @@ namespace CodeWalker.GameFiles if (bytesleft != 0) { } } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(ShoreLineCount); + for (int i = 0; i < ShoreLineCount; i++) + { + bw.Write(ShoreLines[i]); + } + } } @@ -4552,6 +5388,10 @@ namespace CodeWalker.GameFiles // if (bytesleft != 0) // { } // } + // public override void Write(BinaryWriter bw) + // { + // WriteTypeAndOffset(bw); + // } //} diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index b364bcf..93586b4 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -2174,10 +2174,10 @@ namespace CodeWalker.GameFiles } sbh.AppendLine(); } - if (rel.WaveTracksHashes != null) + if (rel.HashTable != null) { - sbh.AppendLine(rfe.Path + ": " + rel.WaveTracksHashes.Length.ToString() + " Hashes1:"); - foreach (var unk in rel.WaveTracksHashes) + sbh.AppendLine(rfe.Path + ": " + rel.HashTable.Length.ToString() + " Hashes1:"); + foreach (var unk in rel.HashTable) { sbh.Append(unk.Hash.ToString("X8")); string strval; @@ -2190,10 +2190,10 @@ namespace CodeWalker.GameFiles } sbh.AppendLine(); } - if (rel.WaveContainersHashes != null) + if (rel.PackTable != null) { - sbh.AppendLine(rfe.Path + ": " + rel.WaveContainersHashes.Length.ToString() + " Hashes2:"); - foreach (var unk in rel.WaveContainersHashes) + sbh.AppendLine(rfe.Path + ": " + rel.PackTable.Length.ToString() + " Hashes2:"); + foreach (var unk in rel.PackTable) { sbh.Append(unk.Hash.ToString("X8")); string strval; @@ -2252,7 +2252,7 @@ namespace CodeWalker.GameFiles string hashstrs = sbh.ToString(); - var wavesmap = RelFile.WavesMap; + var wavesmap = RelFile.HashesMap; if (wavesmap.Count > 0) { } diff --git a/CodeWalker.csproj b/CodeWalker.csproj index d76a1be..459f698 100644 --- a/CodeWalker.csproj +++ b/CodeWalker.csproj @@ -291,6 +291,36 @@ + + Form + + + EditAudioEmitterListPanel.cs + + + Form + + + EditAudioEmitterPanel.cs + + + Form + + + EditAudioFilePanel.cs + + + Form + + + EditAudioZoneListPanel.cs + + + Form + + + EditAudioZonePanel.cs + Form @@ -595,6 +625,21 @@ MenuForm.cs + + EditAudioEmitterListPanel.cs + + + EditAudioEmitterPanel.cs + + + EditAudioFilePanel.cs + + + EditAudioZoneListPanel.cs + + + EditAudioZonePanel.cs + EditProjectPanel.cs diff --git a/Forms/RelForm.Designer.cs b/Forms/RelForm.Designer.cs index d524f2c..abf7ee6 100644 --- a/Forms/RelForm.Designer.cs +++ b/Forms/RelForm.Designer.cs @@ -32,8 +32,8 @@ this.RelPropertyGrid = new CodeWalker.WinForms.PropertyGridFix(); this.MainTabControl = new System.Windows.Forms.TabControl(); this.NameTableTabPage = new System.Windows.Forms.TabPage(); - this.DetailsTabPage = new System.Windows.Forms.TabPage(); this.MainTextBox = new CodeWalker.WinForms.TextBoxFix(); + this.DetailsTabPage = new System.Windows.Forms.TabPage(); this.CloseButton = new System.Windows.Forms.Button(); this.MainTabControl.SuspendLayout(); this.NameTableTabPage.SuspendLayout(); @@ -56,8 +56,8 @@ this.MainTabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.MainTabControl.Controls.Add(this.NameTableTabPage); this.MainTabControl.Controls.Add(this.DetailsTabPage); + this.MainTabControl.Controls.Add(this.NameTableTabPage); this.MainTabControl.Location = new System.Drawing.Point(5, 5); this.MainTabControl.Margin = new System.Windows.Forms.Padding(0); this.MainTabControl.Name = "MainTabControl"; @@ -76,17 +76,6 @@ this.NameTableTabPage.Text = "Names"; this.NameTableTabPage.UseVisualStyleBackColor = true; // - // DetailsTabPage - // - this.DetailsTabPage.Controls.Add(this.RelPropertyGrid); - this.DetailsTabPage.Location = new System.Drawing.Point(4, 22); - this.DetailsTabPage.Name = "DetailsTabPage"; - this.DetailsTabPage.Padding = new System.Windows.Forms.Padding(3); - this.DetailsTabPage.Size = new System.Drawing.Size(656, 368); - this.DetailsTabPage.TabIndex = 1; - this.DetailsTabPage.Text = "Details"; - this.DetailsTabPage.UseVisualStyleBackColor = true; - // // MainTextBox // this.MainTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) @@ -102,6 +91,17 @@ this.MainTextBox.TabIndex = 1; this.MainTextBox.WordWrap = false; // + // DetailsTabPage + // + this.DetailsTabPage.Controls.Add(this.RelPropertyGrid); + this.DetailsTabPage.Location = new System.Drawing.Point(4, 22); + this.DetailsTabPage.Name = "DetailsTabPage"; + this.DetailsTabPage.Padding = new System.Windows.Forms.Padding(3); + this.DetailsTabPage.Size = new System.Drawing.Size(656, 368); + this.DetailsTabPage.TabIndex = 1; + this.DetailsTabPage.Text = "Details"; + this.DetailsTabPage.UseVisualStyleBackColor = true; + // // CloseButton // this.CloseButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); diff --git a/Project/Panels/EditAudioEmitterListPanel.Designer.cs b/Project/Panels/EditAudioEmitterListPanel.Designer.cs new file mode 100644 index 0000000..33f21ff --- /dev/null +++ b/Project/Panels/EditAudioEmitterListPanel.Designer.cs @@ -0,0 +1,48 @@ +namespace CodeWalker.Project.Panels +{ + partial class EditAudioEmitterListPanel + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditAudioEmitterListPanel)); + this.SuspendLayout(); + // + // EditAudioEmitterListPanel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(562, 450); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "EditAudioEmitterListPanel"; + this.Text = "Edit Audio Emitter List"; + this.ResumeLayout(false); + + } + + #endregion + } +} \ No newline at end of file diff --git a/Project/Panels/EditAudioEmitterListPanel.cs b/Project/Panels/EditAudioEmitterListPanel.cs new file mode 100644 index 0000000..1e3e114 --- /dev/null +++ b/Project/Panels/EditAudioEmitterListPanel.cs @@ -0,0 +1,36 @@ +using CodeWalker.GameFiles; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CodeWalker.Project.Panels +{ + public partial class EditAudioEmitterListPanel : ProjectPanel + { + public ProjectForm ProjectForm; + public Dat151AmbientEmitterList CurrentEmitterList { get; set; } + + public EditAudioEmitterListPanel(ProjectForm owner) + { + ProjectForm = owner; + InitializeComponent(); + } + + public void SetEmitterList(Dat151AmbientEmitterList list) + { + CurrentEmitterList = list; + UpdateFormTitle(); + } + + private void UpdateFormTitle() + { + Text = CurrentEmitterList?.NameHash.ToString() ?? ""; + } + } +} diff --git a/Project/Panels/EditAudioEmitterListPanel.resx b/Project/Panels/EditAudioEmitterListPanel.resx new file mode 100644 index 0000000..1431f6b --- /dev/null +++ b/Project/Panels/EditAudioEmitterListPanel.resx @@ -0,0 +1,409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAMAICAAAAAAGACoDAAANgAAABAQAAAAABgAaAMAAN4MAABAQAAAAAAYACgyAABGEAAAKAAAACAA + AABAAAAAAQAYAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/u3v+Pn6//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7+/vX3/rzA3OHl9fz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7//+zv+3Z6qcLI5Pr7/wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP7+/+br+15in6+33vf5/wAAAAAAAAAAAAAAAP7+//7+/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//v8//v8//3+/wAAAAAAAAAAAAAAAAAAAP7+/+Ho+1dana20 + 4/b4/wAAAAAAAPz9//P2/+Tp/ezw/vz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///X4 + /9Pa+tPa+/H1//z9/wAAAAAAAAAAAAAAAP7+/93k+SsscaSr3PX3/wAAAP7+//L1/7W98AcWgrvC8Pj6 + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/+bs/xohiAEJdrvF9+7y//z9/wAAAAAAAAAA + AP7+/9rh+CEkapmh0/T3/wAAAPj6/9HZ/AEHcgEEb9LZ+/r7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP7//+/z/3F+zAAAXwQLcZai3fb4/wAAAAAAAAAAAP3+/97l/E9Tmaau4fT3/wAAAO/0/1dd + sAAAV7a/8/H1//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPr8/+jv/46Y3QUUf6Ot + 5PX4/wAAAAAAAAAAAP3+/9zj+3Z6wLe/7fX4/wAAAPD0/212xnaAzerw//z9/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/+/z/+Dm+/D0//z9/wAAAAAAAP7+//j6/9Pd+UhLjb/H + 9/D0//3+//n7/+nt/+jt//n7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7///7+//7+//7+/wAAAAAAAPr8/+7z/83W+ImU2A0UdFNarr/K9env//X4//z9//3+//7//wAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///j6/+Pq/255 + xhckjE5XsVVftUlTqwAKeTA9nr3H8+7z//v8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+//b4/9Tc+Sc0mRonj8rV/crX/ZSb48rX/brG8wwWgQAEdJei + 4efu//n7//7+//z9//z9//z9//z9//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//f5/+3y/+nv/+ft + /8vV+io2mImU2M7c/7vG9yIvlQAOfCg4mM3Y/s/c/4aR1AQRfGtzwtni/ebt/9vi/tri/tXd+9Tc+O3x + /vz9/wAAAAAAAAAAAAAAAAAAAAAAAPn6/87V+FVftkRPrFlnvSEqjQoUfmJvwWFvvg0TfQQIcxEchwAD + cy89n19rvVVitQwZgwAAaiMrkT9NqTVBoiw3mhQihig1mNLX+fv8/wAAAAAAAAAAAAAAAAAAAAAAAPb5 + /52l4EFLqoCK03yF0VBctGhyw52o5GVrvQAAaneBzsHM+jA3mhYgiTtIpJOf3ouW2AAAbmh0wbbA8bS+ + 7qiz5pCb16+56e/z//3+/wAAAAAAAAAAAAAAAAAAAAAAAPv8//H1/+vw/+zx/+nv/7/J9YqP3MbP/8LM + +hwqkFZftaCp5EhRrcTQ+9jj/8rW/UJMqn6J0ebt//X3//f5//b4//X3//f5//z9/wAAAAAAAAAAAAAA + AAAAAAAAAP7+//z9//3+/wAAAAAAAP3+/+7z/6at64iP3aWs7XN8zRIfhyUykp2o5MHM+oKM0xonjY6X + 2+jv//v8/wAAAP7+//n7//b5//r7//7//wAAAAAAAAAAAAAAAP7+//f5/+rw/9Pa9fL0/v7//wAAAAAA + APv8//H1/+Tr/7i/91liu0NPq0VQrS06m0NNqDdCoYqU1+nv//v8/wAAAAAAAPn7/9zi/qSt59ri/fL1 + //v8//7//wAAAPz9//D0/8rT+h0sjkVQrPD0/wAAAAAAAAAAAAAAAAAAAPz9/+7z/8LL9Jqk4aGq6LW/ + 8c3W9+Xs/vH1//v8/wAAAAAAAAAAAPf5/6at5gAAbxIfh6u16+Po/fr7/wAAAPb5/6ev5gAIeAAPernC + 8fX4/wAAAAAAAP3+//v8//z9/wAAAP3+//j6//P3//P2//b4//r8//7+//7+//v8//r8//3+/wAAAPv8 + /+Xr/nuIzwAAbBseg5Sb2fb5/wAAAPf5/8DF8pWe3d/n/vT3//39/wAAAPv8/+zx/87V9+3x/v3+/wAA + AP3+//j6//X4//v8/wAAAAAAAPn7/+Dm/snR9fD0//39//z8/fv8/+3y/8LK9aGq4dfd9/n7/wAAAPz9 + //b5//X4//v8/wAAAAAAAP7+/+7z/4aP1gEPet7k/f39/wAAAPf5/83U+ZCZ2u3x/v7+/wAAAPP3/215 + wgAJd7fB8/L1//7+/wAAAP3+//j6//f5//r8//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAPj6/87W/AAA + X2duue3y//7+/wAAAPD0/05asBQfidzj/P39/wAAAPX4/6Su6AAAXBccgtff/vv8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP3/3F8xhYli9Xe/fn6/wAAAAAAAO3y/1pltQAJd9be + /fv8/wAAAPz9/+rw/36I0Bknjs/W+vv8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAPf5/8HI7tnf+/X4//7+/wAAAAAAAO/0/3R7xgAAb9ng/Pz9/wAAAAAAAPn7/+Ln/dLY+fP2//3+ + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//r7//v8//7+/wAAAAAAAAAA + APb4/7/F84eP0e/0//7+/wAAAAAAAP7+//z9//v8//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz9//b5//X4//v8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////w////4 + P///+D////g8//D4MH/geCB/4Dggf+A4IH/wOCD/+DAB//hgAf//gAP//wAAB/AAAAPwAAAD8AAAA/AA + AAfjAAEHgYADAQPgBwEDEAEBAghgAQwIIEH8CCB//Bggf/wYMH/8ODD///h/////////////KAAAABAA + AAAgAAAAAQAYAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+vv/fL1/v///wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///4+Vx7/F5v///wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAP///4CHtrS62////////////////////wAAAAAAAAAAAP////H0/vf6/v// + /////////4yTwrrB4f///+zw+7rA6P39/////wAAAAAAAAAAAP///56l2BkcguXr/P///////42Uw8jO + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2OL+NjZ7AAArX2Ok + 4uz/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 2eP/LjJ1DAxKfYTE4Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//f7//f7//v7//v// + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/gILIR0eVeoHC3eb/8fX/+/z/AAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+Pr/ + +Pr/+Pr/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+vv/+vv/+/z//f3//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/2eP9ZWeqHx1obnOz4Or/8fX/+/z/AAAAAAAAAAAAAAAA/v7/ + +/z/9fj/8vb/8PX/7vT/8fb/9fj/+fr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/9fj/9fj/9Pj/9Pf/9vn/+/z//v7/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP9ODp9AAA5jZDQ5O7/8PX/+/z/AAAA + AAAAAAAA/v7/+/z/9Pf/7fP/5u//wsz6j5XfuMDx7fL/9vn//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+Pr/8/b/5+3/2eH/2uP/ + 5u3/7fP/8/b/+vv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3ef/U1ebBgVKio/O + 4uz/8fX/+/z/AAAAAAAA/v///P3/9fj/7fP/4uv/hIzZHSWPAABmU1i14ub/9/r/+/z/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9Pf/ + 7/X/09z/TlSzNzWYj5bh5O7/6/L/8vb/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fX/ + 2eP/QUWIEhBZbnSz3uj/8fb/+/z/AAAAAAAA/f7/+Pr/7/T/6PH/iI7cAABvAABqAABncXjK6O//9fj/ + +/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+/z/8/f/2uD/Z27EAABnAABiBgl4jJTd5vD/6O//8vX/+fv//f7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8fb/2OP/Mjd6AQE6ZGup4er/8fX/+/z/AAAAAAAA+vz/8fX/6/T/xM/8ExyJAABwAABu + GySRxc387fT/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vz/8/f/1Nr/MzqhAABhAxOBAARyBgp5jpLg5Oz/7PP/9Pf/+vz//v7/ + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP/KCtvBwZOjJHS4Or/8fX/+/z/AAAA/f7/9/n/7fP/3+j/ + UFq3AABtAAZ3BAh6mZ/n5vD/7vP/+Pr//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/6e//sbb1KzWcAABwBhaBAAFyAgp6fITR + 1d777/T/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3+j/WF2hBglTnaTj5O3/8PX/+/z/AAAA + /P3/9Pf/6vL/k5riAAByAAR0AABrY2vE4ur/6vH/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/7fL/5O3/ytX/RU6w + AABpAA5+AABuAABnhord6e7/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/7/T/3+j/k5jbT1KdgYjJ + 3uf+8fX/+/z/AAAA+/z/9fn/4ef/NDqhAABnAABrJjCU0Nn/5/D/8fX/+vv//v7/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + 9vn/7vP/6vP/ztb/O0CmAABpAABrQkuoxMn57PH/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/ + 2+X/en/CUFGak5nY3+j/8fX//P3/AAAA/P3/9fj/4en/i5DbNT2hIyuTpqzv4uz/7vP/9/n//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/9vn/7/P/6vL/ytH/X2i9XWi7wsf/6e//8/f/+Pr//v7/AAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/WF2hW1ylvMD+3uf/8PX/+/z/AAAA/f7/9vn/7fP/4uj/j5Pgf4LV3+X/6fD/ + 9Pf//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/8vX/7fP/5+//5u7/6vD/8PT/9vn//P3//v7/ + AAAAAAAAAAAAAAAAAAAA/f7/9/n/7fP/0tz9LDJzNjh/nqTk2uT/7fL/9/n//f7//f7/+fv/8/b/7PL/ + 3eX/zM//5ev/9fj/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f3/+vv/9/n/9vn/9fj/9vn/ + +fr//P3//v7/AAAAAAAAAAAA/v///f7/+vv/9vn/7/T/5vD/2Ob/VFubERNdoajk4u//5O7/7vP/9vj/ + +fr/+vv/+Pr/9fj/9Pj/9fj/9fj/+Pr//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///v7/ + /f7//P3//P3//f3//v7//v//AAAAAAAAAAAA/f7/+vz/9vn/8fX/7vT/5O3/3eb/z9n/cHjICxN5d37L + z9n/2eP/5O3/6/L/8PT/9Pf/9/n/+vv/+vv/+/z//P3//f3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+Pr/8/b/7vT/6vL/z9r+jZjeQUeq + IiuQCBN3AAFrBRB8Nj2iUViym6XlydH/4+z/6/L/8PT/9/n/+/z//f7//v//AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/8fX/6/L/3uf/ + mKTkLzibAABoAAB0Fx+HDBh7FSGDAg16AABYAABlCBB/Ji2UhYza1+D/6PL/7fL/9Pf/+vv//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/9/n/ + 8PT/7PT/z9j/XmO+AABtAABcMDSXoajsu8X7VV+5hYzblZ/fTVSxFSKMAABkAABnAAN2Qkmpsbrz5e3/ + 6vH/8fX/+Pr//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/P3/9/n/8PX/7PT/vcn3LTOZAABaAgR1ZWzD0Nf/5vL/1OP/l53lzs3/6fP/4+7/sLzwZ23CBxSD + AABnAABlHiaSmqHo3+j/5+//7/T/9vn//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/ + /v7//v7//v7//f7/+/z/9vj/7vP/7PX/tcLzEBeGAABkPEWlqLPt2eX/4e7/3On/uMX1gofVe3vPhYzY + z93+5/X/4e3/lJ3gHiOPAABtAABqChiEbHLIytD/5/D/7PL/8/f/+Pr/+fr/+Pr/+Pr/+Pr/+Pr/+Pr/ + +Pr/+fv/+vv/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+fv/9/n/9vj/9fj/9Pf/8fX/7PL/4uv/l6HgDhF7AAN4iZDe0d7/3uz/4vD/w83/VVm3 + ICiSAAFyAABlAABwaHTD1N//2un/3er/w838ZW3BEyOJJzKVAQ16NDmfwsn75fD/5u7/7PL/7vP/7fP/ + 7fP/7fL/7fP/7vP/7/T/8fb/9Pj/9vn/+fr//f3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/+Pr/9Pf/8fX/7vT/7PL/6/L/6fH/5u7/6vX/tsD0CQx4AAFwkZvi7ff/4vD/ + 4fD/z9j/OkGlAABiAABwBxWAAAt7BBN+P0uofYLUztb/4O7/6fb/6fP/qa7xQkyoBg56AABqMjugx8/+ + 5fH/4Ov/4On/3uj/3eb/3+j/3uj/1+L/0d3/1d7/3+f/7fL/9vj/+vz//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+fr/8/f/6/L/2d//v8j6vcf5ucP1wMv8wM3+vMj6PkqoAABo + UF25usP7tsPyvsr6sLrwQ0utAABqAAV1OUameIDRKDWZAAd2GyeOLDecmaHntsL0pbLom6riq7LzUlu0 + AANzBhR/AAZ0NT+ja3bBY2i/XGG6UViyWl65XGG7XGC6TVWvQU6pPkalODygqK7p8vb/+vz//v7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/7/T/wcj2R0ysExeFERmGDxuIFB6K + FBqICxSEAABsAAByDBiDCRSBBRCADhaFCRODAAh4AxF/AAl4CxeDHSaPAAp6AAN0AA19AAd3CBOBEBqH + BhGBAAh5AABwAAByAAh5BhSCAxWCAABsAABvAABlAABnAABxAABjAABmAABhAABdAABYAABhCAt/q7Lr + 8/f/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+fv/3uT/SE2vAABn + CBB/GiCMLzmfLTWcGByJFRyKGCOOMj2gHymRDxiGGyOPLDCXBRF/AAh3BhaCEyKMICqTKC2WNDqfIzCV + Awx6Eh+JHiaPAAR3AAZ5CxSDICWQX2q7Q1CqAA1+AAFxDxuHiZTbVGC4dHnQnabrTVqzY23EUV62Slau + LjaZXWm9sLjz5ez/9vn/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +Pv/4+n+e4LPfoPVpqv2vsf/zNX/zdb/xtH/v8v8pK7spKfysLb3vcr4ws784ej/hI/YAAZ1AAJzVF25 + yM//3Of/5+//i5LcAABpMzyfp6vxoKznlqHhqbbtx9H/8fz/kpvfAABiAABph4zc5PD/2OP/193/3un/ + 1+D/2OH/1+D/0Nr/zNL/3+j/6/L/7/T/9vn//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+Pr/9Pf/6vD/5u3/3+b/4uv/6PD/5+//5O3/5/P/sL3sXmS7mZzoz9f/3+z/4e// + mKLiEiKKCBF/KTWZr7T06/f/3ev/VF2zChSBipPcz9v+4u7/3ur/3ev/5/X/qrPrISmSDRJ2Xmq/3ur/ + 4uv/6vH/7fP/7fL/7/T/7vP/7fP/7fP/8PX/8fX/9Pf/+Pr/+/z//v7/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+Pr/9vn/9Pf/8vb/8vb/8/b/9Pf/7/T/6/L/tL/ubXLH + en/Ti43gqavy0t3/nafjMj6fJzaaAAV1GyeOYmW7Nz6fAABgNj6i1N//3uz/2uX/3Oj/5PH/wcj7FR2J + AAN0gong0tr/6fH/7/P/9vj/+Pr/+fv/+fv/+Pr/+Pr/+Pr/+fv/+vv//P3//f7//v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+/z/+/z/+/z//f3//f7/ + +fv/8fX/5Oz/jpbfc3jObnXLcXfOk5rks7b4iY3dR1KvDhuEAABoAABlEBV9U12ytcD13Or/3en/3ej/ + 1eL/q7fvGR+MKDKZbnnNxc/76PD/8fX/+fr//f7//v//AAAA/v7//f7//f3//P3//f3//f7//v//AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//f7//v7/AAAA + AAAAAAAAAAAAAAAA/f7/9vn/7/T/yNH5lJrleoDVmZ3pmpzpc3nPfoTWf4bYVFy3HSaLZ3PGsrb8v8r8 + y9n9q7jre4LRf4fUgIvXAwZ1AABrhYjb0NX/6PH/8PX/+Pr//f7/AAAAAAAA/v///f3/+vv/+Pr/9/r/ + 9/n/+Pr/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f7/+/z/+fr/9vj/9/n/ + +vz/+vv/+/z//v7/AAAAAAAAAAAAAAAA/v7/+vz/8/f/7PL/2uT/t8H1srP6vcH+nKTnSlOxV2C7TVaz + WGS8QUqmSlSuSFOtR1GtbXTKVl23ARB5AAh2AABnd33P3eP/4ur/7/T/9/n//P3/AAAAAAAAAAAA/P3/ + 9/n/8vb/7PH/6fD/7PL/7vP/8vb/9vn/+/z//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/+Pr/ + 8/b/7/T/8Pb/6vH/3eP97vL++fr//P3/AAAAAAAAAAAAAAAAAAAA/f7/+vv/9fj/7/T/5+//z9f+t7v4 + uLn9Z2zFLzucFCGIMz6gGCCMAAd4AAl2Dx2EER+GXWK8c3XLKzKXd4LP4er/6/L/8PX/9/n//P3//v// + AAAAAAAA/v7/+fv/8/b/7PP/y9H/i4/erLbt4er/5e3/7fP/8/b/+fv//f3//v7/AAAAAAAAAAAAAAAA + /v7/+/z/9vj/8PT/6/L/3+n/x9H9aHTAZGvG3+b9+Pr/+/z/AAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + +Pr/8vb/6/H/3OX+wMn4maDmdHrPWGG6T1a1eoHWcHfOTlayUlq1SlKubHjAxMj/0dn/4+v/7PL/8vb/ + +Pr//P3//v7/AAAAAAAAAAAA/f7/+fr/7vP/xsv5YGXAHymRKjKYYWS9rbLz4u3/6/P/8vb/+fr//f7/ + AAAAAAAAAAAA/v//+/z/9vj/7fL/5e3/xs7/Y23BIiiSAABeLTab3+b/9/r/+/z/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAA/f7/+vz/9vj/8PX/6vH/3eb/ydL8xM/6uMPyt733w8j/zNb/1Nz/3OT/4uz/5u7/ + 7fP/8vb/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAA/f7/+fv/7vP/jpHiAAJ1CxaBER6GAABoFRmGbXbH + 0Nf/7PL/9fj//P3/AAAAAAAAAAAA/v7/+fv/8/f/4Of/hYvbKDGZAABuAABdAAZyi5La5+7/9vn/+/z/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/9ff/8vb/7/X/7fP/6/L/5u3/5ez/6fD/ + 7PP/7/T/8fX/9Pf/9/n/+vv//P3//v7//v//AAAAAAAAAAAAAAAAAAAA/v7/+fv/8fb/2eH9fIbQExqH + AABrAAp6AAFyAABwS0+uztX39vn/+vz/AAAAAAAAAAAA/f7/+Pr/8ff/qbLpAABrAABhAABwDBWAfobX + 5e3/8PX/9vn//f3/AAAAAAAA/v///f7/+/z/+vv/+vv/+vz//P3//v7//v///v7//P3/+vz/+Pr/9/n/ + 9vj/9vj/9vj/9vj/9/n/+fr/+/z//P3//f7//v7//f7//P3/+/z/+vz/+/z//P3//v7/AAAA/v7/+/z/ + 9fj/7/T/5/H/uML1U1e1AAh5AABuAABvMjmdv8bz9vr/+vv/AAAAAAAAAAAA/f7/+fv/7/T/iY7aDxSA + GiONa3XHsr7w4Oj/6/H/9Pf/+vz//v7/AAAA/v///P3/+Pr/9Pf/8/f/9fj/9fj/9vn/+/z//v7/AAAA + AAAAAAAA/v7//f7//P3/+/z/+/z//P3//f7//v//AAAAAAAAAAAA/v7/+/z/9/n/9vn/9vn/9Pj/9vn/ + +/z//v7/AAAA/f7/+vz/9fj/7/T/6vL/3ef/i5PbGRqJBQl5jJbZ6vH/9Pj/+/z/AAAAAAAAAAAA/f7/ + +fv/8fT/1Nn9t7/0wcr54er/7fT/8fX/9fj/+vv//f7/AAAAAAAA/f3/+Pr/8PT/6/L/3uX/ztb/5Or/ + 8/f/+Pr//f7/AAAAAAAAAAAA/f7/+vz/+Pr/+fv/+fv/+vv//f3//v//AAAAAAAAAAAA/P3/9/n/7vL/ + 193/ztf/5u3/7vP/9Pf/+/z//v7/AAAA/v7//P3/+Pr/8fX/7PP/5/D/sLfxoKnk4+r/8vf/9/n//f3/ + AAAAAAAAAAAA/v7/+/z/9vn/9Pf/8vb/8fb/8fX/9Pf/+Pr//P3//v7/AAAAAAAA/v7/+vv/8vb/5+7/ + y9H/WWO9KSmSkZXj6vD/+Pv//P3/AAAAAAAA/f7/+Pr/9fj/8vb/6O7/7vP/9fj/+Pr//f7/AAAAAAAA + /v//+vv/8vb/7PP/hYraKiqKlp7i6PD/7fP/9ff/+/z//v7/AAAAAAAA/f7/+vv/9ff/8fX/8PX/8vb/ + 8/f/9vn/+/z//v7/AAAAAAAAAAAAAAAA/f7/+/z/+vv/+fr/+fr/+vv//P3//v7/AAAAAAAAAAAAAAAA + /P3/9fj/7PL/1d7/RUysAABhAABlg4ja6/D/+Pr//P3/AAAAAAAA+/z/9fj/6e7/2eD/h4/bnaXg7PH/ + 9fj/+/z/AAAAAAAA/v7/+Pr/8PX/y9X1JDGVAABaERWDoKnp6PH/7vP/9/n//P3/AAAAAAAAAAAA/v7/ + /P3/+vv/+fv/+fv/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//v7//v7//v//AAAAAAAA + AAAAAAAAAAAA/v7/+fv/8PX/7PX/ipPdAABsAABlQ1Cp3Ob/7vP/9/n//f7/AAAAAAAA+fv/9Pj/yNH5 + Ule2DBJ8Ljie0df+8fb/+fv//v7/AAAA/v7/+Pr/7/X/hY3YAABxAAl7AABuEBaEs7nz6fH/8fX/+vv/ + /v7/AAAAAAAAAAAAAAAA/v///v7//v7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9vn/7PL/0tn/LzidAQFsAAB0iZHb6vP/8PT/+fv//v//AAAA + /v7/+Pr/8vf/r7rqAAV4AABdPUen1N//7PL/9vn//f7/AAAA/v7/+fr/7/T/yc75S1G0AABrARKAAABp + Qker0df/7fP/9/n//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/5+7/cXXNAAd2AABuMDebzdT97PL/ + 9vj//P3/AAAAAAAA/v7/9/n/7/X/tL/uFCCLAABqHSqRvcf46fD/9Pf//f3/AAAAAAAA+vv/8vX/6vH/ + yM3+JC2XAABtAAV2Agx9q7Ly7vT/9vn//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/4uj/WWO1AAVx + KTaYu8T07fT/8vb/+vv//v7/AAAAAAAA/v7/9/n/7vX/vsn1Iy2SAABrAQ99mp/o6PD/9Pf//P3/AAAA + AAAA/P3/9/n/7vP/6fL/s7z2DBB/AABeQ0uttrr56e7/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +fv/4ef6g4zNbXfFw8v27fT/8vb/+Pr//f3/AAAAAAAAAAAA/v7/9/n/7vT/yNL7MjucAABtBxF/nKLo + 6fH/9Pf//P3/AAAAAAAA/v7/+/z/9fj/7fL/6/T/jZXbLzScrrP14en/7fL/+fv//v7/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+vz/8PP91dr34+f/8vb/8/f/9/r//P3//v//AAAAAAAAAAAA/v7/+Pr/8PX/1N3/ + QUqmAQRxBQ98m6Dm7PL/9fj//P3/AAAAAAAAAAAA/v7/+/z/9ff/8PX/5ez/ytH94ej/8vb/9vj/+/z/ + /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA + /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ + 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA + AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file diff --git a/Project/Panels/EditAudioEmitterPanel.Designer.cs b/Project/Panels/EditAudioEmitterPanel.Designer.cs new file mode 100644 index 0000000..5d1229e --- /dev/null +++ b/Project/Panels/EditAudioEmitterPanel.Designer.cs @@ -0,0 +1,48 @@ +namespace CodeWalker.Project.Panels +{ + partial class EditAudioEmitterPanel + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditAudioEmitterPanel)); + this.SuspendLayout(); + // + // EditAudioEmitterPanel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(562, 450); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "EditAudioEmitterPanel"; + this.Text = "Edit Audio Emitter"; + this.ResumeLayout(false); + + } + + #endregion + } +} \ No newline at end of file diff --git a/Project/Panels/EditAudioEmitterPanel.cs b/Project/Panels/EditAudioEmitterPanel.cs new file mode 100644 index 0000000..23cc32d --- /dev/null +++ b/Project/Panels/EditAudioEmitterPanel.cs @@ -0,0 +1,37 @@ +using CodeWalker.World; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CodeWalker.Project.Panels +{ + public partial class EditAudioEmitterPanel : ProjectPanel + { + public ProjectForm ProjectForm; + public AudioPlacement CurrentEmitter { get; set; } + + public EditAudioEmitterPanel(ProjectForm owner) + { + ProjectForm = owner; + InitializeComponent(); + } + + public void SetEmitter(AudioPlacement emitter) + { + CurrentEmitter = emitter; + UpdateFormTitle(); + } + + private void UpdateFormTitle() + { + Text = CurrentEmitter?.NameHash.ToString() ?? ""; + } + + } +} diff --git a/Project/Panels/EditAudioEmitterPanel.resx b/Project/Panels/EditAudioEmitterPanel.resx new file mode 100644 index 0000000..1431f6b --- /dev/null +++ b/Project/Panels/EditAudioEmitterPanel.resx @@ -0,0 +1,409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAMAICAAAAAAGACoDAAANgAAABAQAAAAABgAaAMAAN4MAABAQAAAAAAYACgyAABGEAAAKAAAACAA + AABAAAAAAQAYAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/u3v+Pn6//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7+/vX3/rzA3OHl9fz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7//+zv+3Z6qcLI5Pr7/wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP7+/+br+15in6+33vf5/wAAAAAAAAAAAAAAAP7+//7+/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//v8//v8//3+/wAAAAAAAAAAAAAAAAAAAP7+/+Ho+1dana20 + 4/b4/wAAAAAAAPz9//P2/+Tp/ezw/vz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///X4 + /9Pa+tPa+/H1//z9/wAAAAAAAAAAAAAAAP7+/93k+SsscaSr3PX3/wAAAP7+//L1/7W98AcWgrvC8Pj6 + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/+bs/xohiAEJdrvF9+7y//z9/wAAAAAAAAAA + AP7+/9rh+CEkapmh0/T3/wAAAPj6/9HZ/AEHcgEEb9LZ+/r7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP7//+/z/3F+zAAAXwQLcZai3fb4/wAAAAAAAAAAAP3+/97l/E9Tmaau4fT3/wAAAO/0/1dd + sAAAV7a/8/H1//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPr8/+jv/46Y3QUUf6Ot + 5PX4/wAAAAAAAAAAAP3+/9zj+3Z6wLe/7fX4/wAAAPD0/212xnaAzerw//z9/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/+/z/+Dm+/D0//z9/wAAAAAAAP7+//j6/9Pd+UhLjb/H + 9/D0//3+//n7/+nt/+jt//n7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7///7+//7+//7+/wAAAAAAAPr8/+7z/83W+ImU2A0UdFNarr/K9env//X4//z9//3+//7//wAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///j6/+Pq/255 + xhckjE5XsVVftUlTqwAKeTA9nr3H8+7z//v8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+//b4/9Tc+Sc0mRonj8rV/crX/ZSb48rX/brG8wwWgQAEdJei + 4efu//n7//7+//z9//z9//z9//z9//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//f5/+3y/+nv/+ft + /8vV+io2mImU2M7c/7vG9yIvlQAOfCg4mM3Y/s/c/4aR1AQRfGtzwtni/ebt/9vi/tri/tXd+9Tc+O3x + /vz9/wAAAAAAAAAAAAAAAAAAAAAAAPn6/87V+FVftkRPrFlnvSEqjQoUfmJvwWFvvg0TfQQIcxEchwAD + cy89n19rvVVitQwZgwAAaiMrkT9NqTVBoiw3mhQihig1mNLX+fv8/wAAAAAAAAAAAAAAAAAAAAAAAPb5 + /52l4EFLqoCK03yF0VBctGhyw52o5GVrvQAAaneBzsHM+jA3mhYgiTtIpJOf3ouW2AAAbmh0wbbA8bS+ + 7qiz5pCb16+56e/z//3+/wAAAAAAAAAAAAAAAAAAAAAAAPv8//H1/+vw/+zx/+nv/7/J9YqP3MbP/8LM + +hwqkFZftaCp5EhRrcTQ+9jj/8rW/UJMqn6J0ebt//X3//f5//b4//X3//f5//z9/wAAAAAAAAAAAAAA + AAAAAAAAAP7+//z9//3+/wAAAAAAAP3+/+7z/6at64iP3aWs7XN8zRIfhyUykp2o5MHM+oKM0xonjY6X + 2+jv//v8/wAAAP7+//n7//b5//r7//7//wAAAAAAAAAAAAAAAP7+//f5/+rw/9Pa9fL0/v7//wAAAAAA + APv8//H1/+Tr/7i/91liu0NPq0VQrS06m0NNqDdCoYqU1+nv//v8/wAAAAAAAPn7/9zi/qSt59ri/fL1 + //v8//7//wAAAPz9//D0/8rT+h0sjkVQrPD0/wAAAAAAAAAAAAAAAAAAAPz9/+7z/8LL9Jqk4aGq6LW/ + 8c3W9+Xs/vH1//v8/wAAAAAAAAAAAPf5/6at5gAAbxIfh6u16+Po/fr7/wAAAPb5/6ev5gAIeAAPernC + 8fX4/wAAAAAAAP3+//v8//z9/wAAAP3+//j6//P3//P2//b4//r8//7+//7+//v8//r8//3+/wAAAPv8 + /+Xr/nuIzwAAbBseg5Sb2fb5/wAAAPf5/8DF8pWe3d/n/vT3//39/wAAAPv8/+zx/87V9+3x/v3+/wAA + AP3+//j6//X4//v8/wAAAAAAAPn7/+Dm/snR9fD0//39//z8/fv8/+3y/8LK9aGq4dfd9/n7/wAAAPz9 + //b5//X4//v8/wAAAAAAAP7+/+7z/4aP1gEPet7k/f39/wAAAPf5/83U+ZCZ2u3x/v7+/wAAAPP3/215 + wgAJd7fB8/L1//7+/wAAAP3+//j6//f5//r8//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAPj6/87W/AAA + X2duue3y//7+/wAAAPD0/05asBQfidzj/P39/wAAAPX4/6Su6AAAXBccgtff/vv8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP3/3F8xhYli9Xe/fn6/wAAAAAAAO3y/1pltQAJd9be + /fv8/wAAAPz9/+rw/36I0Bknjs/W+vv8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAPf5/8HI7tnf+/X4//7+/wAAAAAAAO/0/3R7xgAAb9ng/Pz9/wAAAAAAAPn7/+Ln/dLY+fP2//3+ + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//r7//v8//7+/wAAAAAAAAAA + APb4/7/F84eP0e/0//7+/wAAAAAAAP7+//z9//v8//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz9//b5//X4//v8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////w////4 + P///+D////g8//D4MH/geCB/4Dggf+A4IH/wOCD/+DAB//hgAf//gAP//wAAB/AAAAPwAAAD8AAAA/AA + AAfjAAEHgYADAQPgBwEDEAEBAghgAQwIIEH8CCB//Bggf/wYMH/8ODD///h/////////////KAAAABAA + AAAgAAAAAQAYAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+vv/fL1/v///wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///4+Vx7/F5v///wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAP///4CHtrS62////////////////////wAAAAAAAAAAAP////H0/vf6/v// + /////////4yTwrrB4f///+zw+7rA6P39/////wAAAAAAAAAAAP///56l2BkcguXr/P///////42Uw8jO + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2OL+NjZ7AAArX2Ok + 4uz/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 2eP/LjJ1DAxKfYTE4Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//f7//f7//v7//v// + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/gILIR0eVeoHC3eb/8fX/+/z/AAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+Pr/ + +Pr/+Pr/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+vv/+vv/+/z//f3//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/2eP9ZWeqHx1obnOz4Or/8fX/+/z/AAAAAAAAAAAAAAAA/v7/ + +/z/9fj/8vb/8PX/7vT/8fb/9fj/+fr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/9fj/9fj/9Pj/9Pf/9vn/+/z//v7/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP9ODp9AAA5jZDQ5O7/8PX/+/z/AAAA + AAAAAAAA/v7/+/z/9Pf/7fP/5u//wsz6j5XfuMDx7fL/9vn//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+Pr/8/b/5+3/2eH/2uP/ + 5u3/7fP/8/b/+vv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3ef/U1ebBgVKio/O + 4uz/8fX/+/z/AAAAAAAA/v///P3/9fj/7fP/4uv/hIzZHSWPAABmU1i14ub/9/r/+/z/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9Pf/ + 7/X/09z/TlSzNzWYj5bh5O7/6/L/8vb/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fX/ + 2eP/QUWIEhBZbnSz3uj/8fb/+/z/AAAAAAAA/f7/+Pr/7/T/6PH/iI7cAABvAABqAABncXjK6O//9fj/ + +/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+/z/8/f/2uD/Z27EAABnAABiBgl4jJTd5vD/6O//8vX/+fv//f7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8fb/2OP/Mjd6AQE6ZGup4er/8fX/+/z/AAAAAAAA+vz/8fX/6/T/xM/8ExyJAABwAABu + GySRxc387fT/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vz/8/f/1Nr/MzqhAABhAxOBAARyBgp5jpLg5Oz/7PP/9Pf/+vz//v7/ + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP/KCtvBwZOjJHS4Or/8fX/+/z/AAAA/f7/9/n/7fP/3+j/ + UFq3AABtAAZ3BAh6mZ/n5vD/7vP/+Pr//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/6e//sbb1KzWcAABwBhaBAAFyAgp6fITR + 1d777/T/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3+j/WF2hBglTnaTj5O3/8PX/+/z/AAAA + /P3/9Pf/6vL/k5riAAByAAR0AABrY2vE4ur/6vH/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/7fL/5O3/ytX/RU6w + AABpAA5+AABuAABnhord6e7/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/7/T/3+j/k5jbT1KdgYjJ + 3uf+8fX/+/z/AAAA+/z/9fn/4ef/NDqhAABnAABrJjCU0Nn/5/D/8fX/+vv//v7/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + 9vn/7vP/6vP/ztb/O0CmAABpAABrQkuoxMn57PH/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/ + 2+X/en/CUFGak5nY3+j/8fX//P3/AAAA/P3/9fj/4en/i5DbNT2hIyuTpqzv4uz/7vP/9/n//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/9vn/7/P/6vL/ytH/X2i9XWi7wsf/6e//8/f/+Pr//v7/AAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/WF2hW1ylvMD+3uf/8PX/+/z/AAAA/f7/9vn/7fP/4uj/j5Pgf4LV3+X/6fD/ + 9Pf//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/8vX/7fP/5+//5u7/6vD/8PT/9vn//P3//v7/ + AAAAAAAAAAAAAAAAAAAA/f7/9/n/7fP/0tz9LDJzNjh/nqTk2uT/7fL/9/n//f7//f7/+fv/8/b/7PL/ + 3eX/zM//5ev/9fj/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f3/+vv/9/n/9vn/9fj/9vn/ + +fr//P3//v7/AAAAAAAAAAAA/v///f7/+vv/9vn/7/T/5vD/2Ob/VFubERNdoajk4u//5O7/7vP/9vj/ + +fr/+vv/+Pr/9fj/9Pj/9fj/9fj/+Pr//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///v7/ + /f7//P3//P3//f3//v7//v//AAAAAAAAAAAA/f7/+vz/9vn/8fX/7vT/5O3/3eb/z9n/cHjICxN5d37L + z9n/2eP/5O3/6/L/8PT/9Pf/9/n/+vv/+vv/+/z//P3//f3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+Pr/8/b/7vT/6vL/z9r+jZjeQUeq + IiuQCBN3AAFrBRB8Nj2iUViym6XlydH/4+z/6/L/8PT/9/n/+/z//f7//v//AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/8fX/6/L/3uf/ + mKTkLzibAABoAAB0Fx+HDBh7FSGDAg16AABYAABlCBB/Ji2UhYza1+D/6PL/7fL/9Pf/+vv//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/9/n/ + 8PT/7PT/z9j/XmO+AABtAABcMDSXoajsu8X7VV+5hYzblZ/fTVSxFSKMAABkAABnAAN2Qkmpsbrz5e3/ + 6vH/8fX/+Pr//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/P3/9/n/8PX/7PT/vcn3LTOZAABaAgR1ZWzD0Nf/5vL/1OP/l53lzs3/6fP/4+7/sLzwZ23CBxSD + AABnAABlHiaSmqHo3+j/5+//7/T/9vn//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/ + /v7//v7//v7//f7/+/z/9vj/7vP/7PX/tcLzEBeGAABkPEWlqLPt2eX/4e7/3On/uMX1gofVe3vPhYzY + z93+5/X/4e3/lJ3gHiOPAABtAABqChiEbHLIytD/5/D/7PL/8/f/+Pr/+fr/+Pr/+Pr/+Pr/+Pr/+Pr/ + +Pr/+fv/+vv/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+fv/9/n/9vj/9fj/9Pf/8fX/7PL/4uv/l6HgDhF7AAN4iZDe0d7/3uz/4vD/w83/VVm3 + ICiSAAFyAABlAABwaHTD1N//2un/3er/w838ZW3BEyOJJzKVAQ16NDmfwsn75fD/5u7/7PL/7vP/7fP/ + 7fP/7fL/7fP/7vP/7/T/8fb/9Pj/9vn/+fr//f3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/+Pr/9Pf/8fX/7vT/7PL/6/L/6fH/5u7/6vX/tsD0CQx4AAFwkZvi7ff/4vD/ + 4fD/z9j/OkGlAABiAABwBxWAAAt7BBN+P0uofYLUztb/4O7/6fb/6fP/qa7xQkyoBg56AABqMjugx8/+ + 5fH/4Ov/4On/3uj/3eb/3+j/3uj/1+L/0d3/1d7/3+f/7fL/9vj/+vz//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+fr/8/f/6/L/2d//v8j6vcf5ucP1wMv8wM3+vMj6PkqoAABo + UF25usP7tsPyvsr6sLrwQ0utAABqAAV1OUameIDRKDWZAAd2GyeOLDecmaHntsL0pbLom6riq7LzUlu0 + AANzBhR/AAZ0NT+ja3bBY2i/XGG6UViyWl65XGG7XGC6TVWvQU6pPkalODygqK7p8vb/+vz//v7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/7/T/wcj2R0ysExeFERmGDxuIFB6K + FBqICxSEAABsAAByDBiDCRSBBRCADhaFCRODAAh4AxF/AAl4CxeDHSaPAAp6AAN0AA19AAd3CBOBEBqH + BhGBAAh5AABwAAByAAh5BhSCAxWCAABsAABvAABlAABnAABxAABjAABmAABhAABdAABYAABhCAt/q7Lr + 8/f/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+fv/3uT/SE2vAABn + CBB/GiCMLzmfLTWcGByJFRyKGCOOMj2gHymRDxiGGyOPLDCXBRF/AAh3BhaCEyKMICqTKC2WNDqfIzCV + Awx6Eh+JHiaPAAR3AAZ5CxSDICWQX2q7Q1CqAA1+AAFxDxuHiZTbVGC4dHnQnabrTVqzY23EUV62Slau + LjaZXWm9sLjz5ez/9vn/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +Pv/4+n+e4LPfoPVpqv2vsf/zNX/zdb/xtH/v8v8pK7spKfysLb3vcr4ws784ej/hI/YAAZ1AAJzVF25 + yM//3Of/5+//i5LcAABpMzyfp6vxoKznlqHhqbbtx9H/8fz/kpvfAABiAABph4zc5PD/2OP/193/3un/ + 1+D/2OH/1+D/0Nr/zNL/3+j/6/L/7/T/9vn//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+Pr/9Pf/6vD/5u3/3+b/4uv/6PD/5+//5O3/5/P/sL3sXmS7mZzoz9f/3+z/4e// + mKLiEiKKCBF/KTWZr7T06/f/3ev/VF2zChSBipPcz9v+4u7/3ur/3ev/5/X/qrPrISmSDRJ2Xmq/3ur/ + 4uv/6vH/7fP/7fL/7/T/7vP/7fP/7fP/8PX/8fX/9Pf/+Pr/+/z//v7/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+Pr/9vn/9Pf/8vb/8vb/8/b/9Pf/7/T/6/L/tL/ubXLH + en/Ti43gqavy0t3/nafjMj6fJzaaAAV1GyeOYmW7Nz6fAABgNj6i1N//3uz/2uX/3Oj/5PH/wcj7FR2J + AAN0gong0tr/6fH/7/P/9vj/+Pr/+fv/+fv/+Pr/+Pr/+Pr/+fv/+vv//P3//f7//v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+/z/+/z/+/z//f3//f7/ + +fv/8fX/5Oz/jpbfc3jObnXLcXfOk5rks7b4iY3dR1KvDhuEAABoAABlEBV9U12ytcD13Or/3en/3ej/ + 1eL/q7fvGR+MKDKZbnnNxc/76PD/8fX/+fr//f7//v//AAAA/v7//f7//f3//P3//f3//f7//v//AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//f7//v7/AAAA + AAAAAAAAAAAAAAAA/f7/9vn/7/T/yNH5lJrleoDVmZ3pmpzpc3nPfoTWf4bYVFy3HSaLZ3PGsrb8v8r8 + y9n9q7jre4LRf4fUgIvXAwZ1AABrhYjb0NX/6PH/8PX/+Pr//f7/AAAAAAAA/v///f3/+vv/+Pr/9/r/ + 9/n/+Pr/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f7/+/z/+fr/9vj/9/n/ + +vz/+vv/+/z//v7/AAAAAAAAAAAAAAAA/v7/+vz/8/f/7PL/2uT/t8H1srP6vcH+nKTnSlOxV2C7TVaz + WGS8QUqmSlSuSFOtR1GtbXTKVl23ARB5AAh2AABnd33P3eP/4ur/7/T/9/n//P3/AAAAAAAAAAAA/P3/ + 9/n/8vb/7PH/6fD/7PL/7vP/8vb/9vn/+/z//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/+Pr/ + 8/b/7/T/8Pb/6vH/3eP97vL++fr//P3/AAAAAAAAAAAAAAAAAAAA/f7/+vv/9fj/7/T/5+//z9f+t7v4 + uLn9Z2zFLzucFCGIMz6gGCCMAAd4AAl2Dx2EER+GXWK8c3XLKzKXd4LP4er/6/L/8PX/9/n//P3//v// + AAAAAAAA/v7/+fv/8/b/7PP/y9H/i4/erLbt4er/5e3/7fP/8/b/+fv//f3//v7/AAAAAAAAAAAAAAAA + /v7/+/z/9vj/8PT/6/L/3+n/x9H9aHTAZGvG3+b9+Pr/+/z/AAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + +Pr/8vb/6/H/3OX+wMn4maDmdHrPWGG6T1a1eoHWcHfOTlayUlq1SlKubHjAxMj/0dn/4+v/7PL/8vb/ + +Pr//P3//v7/AAAAAAAAAAAA/f7/+fr/7vP/xsv5YGXAHymRKjKYYWS9rbLz4u3/6/P/8vb/+fr//f7/ + AAAAAAAAAAAA/v//+/z/9vj/7fL/5e3/xs7/Y23BIiiSAABeLTab3+b/9/r/+/z/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAA/f7/+vz/9vj/8PX/6vH/3eb/ydL8xM/6uMPyt733w8j/zNb/1Nz/3OT/4uz/5u7/ + 7fP/8vb/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAA/f7/+fv/7vP/jpHiAAJ1CxaBER6GAABoFRmGbXbH + 0Nf/7PL/9fj//P3/AAAAAAAAAAAA/v7/+fv/8/f/4Of/hYvbKDGZAABuAABdAAZyi5La5+7/9vn/+/z/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/9ff/8vb/7/X/7fP/6/L/5u3/5ez/6fD/ + 7PP/7/T/8fX/9Pf/9/n/+vv//P3//v7//v//AAAAAAAAAAAAAAAAAAAA/v7/+fv/8fb/2eH9fIbQExqH + AABrAAp6AAFyAABwS0+uztX39vn/+vz/AAAAAAAAAAAA/f7/+Pr/8ff/qbLpAABrAABhAABwDBWAfobX + 5e3/8PX/9vn//f3/AAAAAAAA/v///f7/+/z/+vv/+vv/+vz//P3//v7//v///v7//P3/+vz/+Pr/9/n/ + 9vj/9vj/9vj/9vj/9/n/+fr/+/z//P3//f7//v7//f7//P3/+/z/+vz/+/z//P3//v7/AAAA/v7/+/z/ + 9fj/7/T/5/H/uML1U1e1AAh5AABuAABvMjmdv8bz9vr/+vv/AAAAAAAAAAAA/f7/+fv/7/T/iY7aDxSA + GiONa3XHsr7w4Oj/6/H/9Pf/+vz//v7/AAAA/v///P3/+Pr/9Pf/8/f/9fj/9fj/9vn/+/z//v7/AAAA + AAAAAAAA/v7//f7//P3/+/z/+/z//P3//f7//v//AAAAAAAAAAAA/v7/+/z/9/n/9vn/9vn/9Pj/9vn/ + +/z//v7/AAAA/f7/+vz/9fj/7/T/6vL/3ef/i5PbGRqJBQl5jJbZ6vH/9Pj/+/z/AAAAAAAAAAAA/f7/ + +fv/8fT/1Nn9t7/0wcr54er/7fT/8fX/9fj/+vv//f7/AAAAAAAA/f3/+Pr/8PT/6/L/3uX/ztb/5Or/ + 8/f/+Pr//f7/AAAAAAAAAAAA/f7/+vz/+Pr/+fv/+fv/+vv//f3//v//AAAAAAAAAAAA/P3/9/n/7vL/ + 193/ztf/5u3/7vP/9Pf/+/z//v7/AAAA/v7//P3/+Pr/8fX/7PP/5/D/sLfxoKnk4+r/8vf/9/n//f3/ + AAAAAAAAAAAA/v7/+/z/9vn/9Pf/8vb/8fb/8fX/9Pf/+Pr//P3//v7/AAAAAAAA/v7/+vv/8vb/5+7/ + y9H/WWO9KSmSkZXj6vD/+Pv//P3/AAAAAAAA/f7/+Pr/9fj/8vb/6O7/7vP/9fj/+Pr//f7/AAAAAAAA + /v//+vv/8vb/7PP/hYraKiqKlp7i6PD/7fP/9ff/+/z//v7/AAAAAAAA/f7/+vv/9ff/8fX/8PX/8vb/ + 8/f/9vn/+/z//v7/AAAAAAAAAAAAAAAA/f7/+/z/+vv/+fr/+fr/+vv//P3//v7/AAAAAAAAAAAAAAAA + /P3/9fj/7PL/1d7/RUysAABhAABlg4ja6/D/+Pr//P3/AAAAAAAA+/z/9fj/6e7/2eD/h4/bnaXg7PH/ + 9fj/+/z/AAAAAAAA/v7/+Pr/8PX/y9X1JDGVAABaERWDoKnp6PH/7vP/9/n//P3/AAAAAAAAAAAA/v7/ + /P3/+vv/+fv/+fv/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//v7//v7//v//AAAAAAAA + AAAAAAAAAAAA/v7/+fv/8PX/7PX/ipPdAABsAABlQ1Cp3Ob/7vP/9/n//f7/AAAAAAAA+fv/9Pj/yNH5 + Ule2DBJ8Ljie0df+8fb/+fv//v7/AAAA/v7/+Pr/7/X/hY3YAABxAAl7AABuEBaEs7nz6fH/8fX/+vv/ + /v7/AAAAAAAAAAAAAAAA/v///v7//v7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9vn/7PL/0tn/LzidAQFsAAB0iZHb6vP/8PT/+fv//v//AAAA + /v7/+Pr/8vf/r7rqAAV4AABdPUen1N//7PL/9vn//f7/AAAA/v7/+fr/7/T/yc75S1G0AABrARKAAABp + Qker0df/7fP/9/n//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/5+7/cXXNAAd2AABuMDebzdT97PL/ + 9vj//P3/AAAAAAAA/v7/9/n/7/X/tL/uFCCLAABqHSqRvcf46fD/9Pf//f3/AAAAAAAA+vv/8vX/6vH/ + yM3+JC2XAABtAAV2Agx9q7Ly7vT/9vn//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/4uj/WWO1AAVx + KTaYu8T07fT/8vb/+vv//v7/AAAAAAAA/v7/9/n/7vX/vsn1Iy2SAABrAQ99mp/o6PD/9Pf//P3/AAAA + AAAA/P3/9/n/7vP/6fL/s7z2DBB/AABeQ0uttrr56e7/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +fv/4ef6g4zNbXfFw8v27fT/8vb/+Pr//f3/AAAAAAAAAAAA/v7/9/n/7vT/yNL7MjucAABtBxF/nKLo + 6fH/9Pf//P3/AAAAAAAA/v7/+/z/9fj/7fL/6/T/jZXbLzScrrP14en/7fL/+fv//v7/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+vz/8PP91dr34+f/8vb/8/f/9/r//P3//v//AAAAAAAAAAAA/v7/+Pr/8PX/1N3/ + QUqmAQRxBQ98m6Dm7PL/9fj//P3/AAAAAAAAAAAA/v7/+/z/9ff/8PX/5ez/ytH94ej/8vb/9vj/+/z/ + /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA + /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ + 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA + AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file diff --git a/Project/Panels/EditAudioFilePanel.Designer.cs b/Project/Panels/EditAudioFilePanel.Designer.cs new file mode 100644 index 0000000..fef616e --- /dev/null +++ b/Project/Panels/EditAudioFilePanel.Designer.cs @@ -0,0 +1,48 @@ +namespace CodeWalker.Project.Panels +{ + partial class EditAudioFilePanel + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditAudioFilePanel)); + this.SuspendLayout(); + // + // EditAudioFilePanel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(562, 450); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "EditAudioFilePanel"; + this.Text = "Edit Audio File"; + this.ResumeLayout(false); + + } + + #endregion + } +} \ No newline at end of file diff --git a/Project/Panels/EditAudioFilePanel.cs b/Project/Panels/EditAudioFilePanel.cs new file mode 100644 index 0000000..8a988c3 --- /dev/null +++ b/Project/Panels/EditAudioFilePanel.cs @@ -0,0 +1,37 @@ +using CodeWalker.GameFiles; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CodeWalker.Project.Panels +{ + public partial class EditAudioFilePanel : ProjectPanel + { + public ProjectForm ProjectForm; + public RelFile CurrentFile { get; set; } + + public EditAudioFilePanel(ProjectForm owner) + { + ProjectForm = owner; + InitializeComponent(); + } + + public void SetFile(RelFile file) + { + CurrentFile = file; + UpdateFormTitle(); + } + + private void UpdateFormTitle() + { + Text = CurrentFile?.Name ?? ""; + } + + } +} diff --git a/Project/Panels/EditAudioFilePanel.resx b/Project/Panels/EditAudioFilePanel.resx new file mode 100644 index 0000000..1431f6b --- /dev/null +++ b/Project/Panels/EditAudioFilePanel.resx @@ -0,0 +1,409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAMAICAAAAAAGACoDAAANgAAABAQAAAAABgAaAMAAN4MAABAQAAAAAAYACgyAABGEAAAKAAAACAA + AABAAAAAAQAYAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/u3v+Pn6//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7+/vX3/rzA3OHl9fz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7//+zv+3Z6qcLI5Pr7/wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP7+/+br+15in6+33vf5/wAAAAAAAAAAAAAAAP7+//7+/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//v8//v8//3+/wAAAAAAAAAAAAAAAAAAAP7+/+Ho+1dana20 + 4/b4/wAAAAAAAPz9//P2/+Tp/ezw/vz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///X4 + /9Pa+tPa+/H1//z9/wAAAAAAAAAAAAAAAP7+/93k+SsscaSr3PX3/wAAAP7+//L1/7W98AcWgrvC8Pj6 + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/+bs/xohiAEJdrvF9+7y//z9/wAAAAAAAAAA + AP7+/9rh+CEkapmh0/T3/wAAAPj6/9HZ/AEHcgEEb9LZ+/r7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP7//+/z/3F+zAAAXwQLcZai3fb4/wAAAAAAAAAAAP3+/97l/E9Tmaau4fT3/wAAAO/0/1dd + sAAAV7a/8/H1//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPr8/+jv/46Y3QUUf6Ot + 5PX4/wAAAAAAAAAAAP3+/9zj+3Z6wLe/7fX4/wAAAPD0/212xnaAzerw//z9/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/+/z/+Dm+/D0//z9/wAAAAAAAP7+//j6/9Pd+UhLjb/H + 9/D0//3+//n7/+nt/+jt//n7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7///7+//7+//7+/wAAAAAAAPr8/+7z/83W+ImU2A0UdFNarr/K9env//X4//z9//3+//7//wAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///j6/+Pq/255 + xhckjE5XsVVftUlTqwAKeTA9nr3H8+7z//v8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+//b4/9Tc+Sc0mRonj8rV/crX/ZSb48rX/brG8wwWgQAEdJei + 4efu//n7//7+//z9//z9//z9//z9//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//f5/+3y/+nv/+ft + /8vV+io2mImU2M7c/7vG9yIvlQAOfCg4mM3Y/s/c/4aR1AQRfGtzwtni/ebt/9vi/tri/tXd+9Tc+O3x + /vz9/wAAAAAAAAAAAAAAAAAAAAAAAPn6/87V+FVftkRPrFlnvSEqjQoUfmJvwWFvvg0TfQQIcxEchwAD + cy89n19rvVVitQwZgwAAaiMrkT9NqTVBoiw3mhQihig1mNLX+fv8/wAAAAAAAAAAAAAAAAAAAAAAAPb5 + /52l4EFLqoCK03yF0VBctGhyw52o5GVrvQAAaneBzsHM+jA3mhYgiTtIpJOf3ouW2AAAbmh0wbbA8bS+ + 7qiz5pCb16+56e/z//3+/wAAAAAAAAAAAAAAAAAAAAAAAPv8//H1/+vw/+zx/+nv/7/J9YqP3MbP/8LM + +hwqkFZftaCp5EhRrcTQ+9jj/8rW/UJMqn6J0ebt//X3//f5//b4//X3//f5//z9/wAAAAAAAAAAAAAA + AAAAAAAAAP7+//z9//3+/wAAAAAAAP3+/+7z/6at64iP3aWs7XN8zRIfhyUykp2o5MHM+oKM0xonjY6X + 2+jv//v8/wAAAP7+//n7//b5//r7//7//wAAAAAAAAAAAAAAAP7+//f5/+rw/9Pa9fL0/v7//wAAAAAA + APv8//H1/+Tr/7i/91liu0NPq0VQrS06m0NNqDdCoYqU1+nv//v8/wAAAAAAAPn7/9zi/qSt59ri/fL1 + //v8//7//wAAAPz9//D0/8rT+h0sjkVQrPD0/wAAAAAAAAAAAAAAAAAAAPz9/+7z/8LL9Jqk4aGq6LW/ + 8c3W9+Xs/vH1//v8/wAAAAAAAAAAAPf5/6at5gAAbxIfh6u16+Po/fr7/wAAAPb5/6ev5gAIeAAPernC + 8fX4/wAAAAAAAP3+//v8//z9/wAAAP3+//j6//P3//P2//b4//r8//7+//7+//v8//r8//3+/wAAAPv8 + /+Xr/nuIzwAAbBseg5Sb2fb5/wAAAPf5/8DF8pWe3d/n/vT3//39/wAAAPv8/+zx/87V9+3x/v3+/wAA + AP3+//j6//X4//v8/wAAAAAAAPn7/+Dm/snR9fD0//39//z8/fv8/+3y/8LK9aGq4dfd9/n7/wAAAPz9 + //b5//X4//v8/wAAAAAAAP7+/+7z/4aP1gEPet7k/f39/wAAAPf5/83U+ZCZ2u3x/v7+/wAAAPP3/215 + wgAJd7fB8/L1//7+/wAAAP3+//j6//f5//r8//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAPj6/87W/AAA + X2duue3y//7+/wAAAPD0/05asBQfidzj/P39/wAAAPX4/6Su6AAAXBccgtff/vv8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP3/3F8xhYli9Xe/fn6/wAAAAAAAO3y/1pltQAJd9be + /fv8/wAAAPz9/+rw/36I0Bknjs/W+vv8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAPf5/8HI7tnf+/X4//7+/wAAAAAAAO/0/3R7xgAAb9ng/Pz9/wAAAAAAAPn7/+Ln/dLY+fP2//3+ + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//r7//v8//7+/wAAAAAAAAAA + APb4/7/F84eP0e/0//7+/wAAAAAAAP7+//z9//v8//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz9//b5//X4//v8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////w////4 + P///+D////g8//D4MH/geCB/4Dggf+A4IH/wOCD/+DAB//hgAf//gAP//wAAB/AAAAPwAAAD8AAAA/AA + AAfjAAEHgYADAQPgBwEDEAEBAghgAQwIIEH8CCB//Bggf/wYMH/8ODD///h/////////////KAAAABAA + AAAgAAAAAQAYAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+vv/fL1/v///wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///4+Vx7/F5v///wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAP///4CHtrS62////////////////////wAAAAAAAAAAAP////H0/vf6/v// + /////////4yTwrrB4f///+zw+7rA6P39/////wAAAAAAAAAAAP///56l2BkcguXr/P///////42Uw8jO + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2OL+NjZ7AAArX2Ok + 4uz/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 2eP/LjJ1DAxKfYTE4Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//f7//f7//v7//v// + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/gILIR0eVeoHC3eb/8fX/+/z/AAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+Pr/ + +Pr/+Pr/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+vv/+vv/+/z//f3//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/2eP9ZWeqHx1obnOz4Or/8fX/+/z/AAAAAAAAAAAAAAAA/v7/ + +/z/9fj/8vb/8PX/7vT/8fb/9fj/+fr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/9fj/9fj/9Pj/9Pf/9vn/+/z//v7/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP9ODp9AAA5jZDQ5O7/8PX/+/z/AAAA + AAAAAAAA/v7/+/z/9Pf/7fP/5u//wsz6j5XfuMDx7fL/9vn//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+Pr/8/b/5+3/2eH/2uP/ + 5u3/7fP/8/b/+vv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3ef/U1ebBgVKio/O + 4uz/8fX/+/z/AAAAAAAA/v///P3/9fj/7fP/4uv/hIzZHSWPAABmU1i14ub/9/r/+/z/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9Pf/ + 7/X/09z/TlSzNzWYj5bh5O7/6/L/8vb/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fX/ + 2eP/QUWIEhBZbnSz3uj/8fb/+/z/AAAAAAAA/f7/+Pr/7/T/6PH/iI7cAABvAABqAABncXjK6O//9fj/ + +/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+/z/8/f/2uD/Z27EAABnAABiBgl4jJTd5vD/6O//8vX/+fv//f7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8fb/2OP/Mjd6AQE6ZGup4er/8fX/+/z/AAAAAAAA+vz/8fX/6/T/xM/8ExyJAABwAABu + GySRxc387fT/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vz/8/f/1Nr/MzqhAABhAxOBAARyBgp5jpLg5Oz/7PP/9Pf/+vz//v7/ + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP/KCtvBwZOjJHS4Or/8fX/+/z/AAAA/f7/9/n/7fP/3+j/ + UFq3AABtAAZ3BAh6mZ/n5vD/7vP/+Pr//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/6e//sbb1KzWcAABwBhaBAAFyAgp6fITR + 1d777/T/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3+j/WF2hBglTnaTj5O3/8PX/+/z/AAAA + /P3/9Pf/6vL/k5riAAByAAR0AABrY2vE4ur/6vH/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/7fL/5O3/ytX/RU6w + AABpAA5+AABuAABnhord6e7/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/7/T/3+j/k5jbT1KdgYjJ + 3uf+8fX/+/z/AAAA+/z/9fn/4ef/NDqhAABnAABrJjCU0Nn/5/D/8fX/+vv//v7/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + 9vn/7vP/6vP/ztb/O0CmAABpAABrQkuoxMn57PH/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/ + 2+X/en/CUFGak5nY3+j/8fX//P3/AAAA/P3/9fj/4en/i5DbNT2hIyuTpqzv4uz/7vP/9/n//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/9vn/7/P/6vL/ytH/X2i9XWi7wsf/6e//8/f/+Pr//v7/AAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/WF2hW1ylvMD+3uf/8PX/+/z/AAAA/f7/9vn/7fP/4uj/j5Pgf4LV3+X/6fD/ + 9Pf//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/8vX/7fP/5+//5u7/6vD/8PT/9vn//P3//v7/ + AAAAAAAAAAAAAAAAAAAA/f7/9/n/7fP/0tz9LDJzNjh/nqTk2uT/7fL/9/n//f7//f7/+fv/8/b/7PL/ + 3eX/zM//5ev/9fj/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f3/+vv/9/n/9vn/9fj/9vn/ + +fr//P3//v7/AAAAAAAAAAAA/v///f7/+vv/9vn/7/T/5vD/2Ob/VFubERNdoajk4u//5O7/7vP/9vj/ + +fr/+vv/+Pr/9fj/9Pj/9fj/9fj/+Pr//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///v7/ + /f7//P3//P3//f3//v7//v//AAAAAAAAAAAA/f7/+vz/9vn/8fX/7vT/5O3/3eb/z9n/cHjICxN5d37L + z9n/2eP/5O3/6/L/8PT/9Pf/9/n/+vv/+vv/+/z//P3//f3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+Pr/8/b/7vT/6vL/z9r+jZjeQUeq + IiuQCBN3AAFrBRB8Nj2iUViym6XlydH/4+z/6/L/8PT/9/n/+/z//f7//v//AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/8fX/6/L/3uf/ + mKTkLzibAABoAAB0Fx+HDBh7FSGDAg16AABYAABlCBB/Ji2UhYza1+D/6PL/7fL/9Pf/+vv//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/9/n/ + 8PT/7PT/z9j/XmO+AABtAABcMDSXoajsu8X7VV+5hYzblZ/fTVSxFSKMAABkAABnAAN2Qkmpsbrz5e3/ + 6vH/8fX/+Pr//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/P3/9/n/8PX/7PT/vcn3LTOZAABaAgR1ZWzD0Nf/5vL/1OP/l53lzs3/6fP/4+7/sLzwZ23CBxSD + AABnAABlHiaSmqHo3+j/5+//7/T/9vn//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/ + /v7//v7//v7//f7/+/z/9vj/7vP/7PX/tcLzEBeGAABkPEWlqLPt2eX/4e7/3On/uMX1gofVe3vPhYzY + z93+5/X/4e3/lJ3gHiOPAABtAABqChiEbHLIytD/5/D/7PL/8/f/+Pr/+fr/+Pr/+Pr/+Pr/+Pr/+Pr/ + +Pr/+fv/+vv/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+fv/9/n/9vj/9fj/9Pf/8fX/7PL/4uv/l6HgDhF7AAN4iZDe0d7/3uz/4vD/w83/VVm3 + ICiSAAFyAABlAABwaHTD1N//2un/3er/w838ZW3BEyOJJzKVAQ16NDmfwsn75fD/5u7/7PL/7vP/7fP/ + 7fP/7fL/7fP/7vP/7/T/8fb/9Pj/9vn/+fr//f3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/+Pr/9Pf/8fX/7vT/7PL/6/L/6fH/5u7/6vX/tsD0CQx4AAFwkZvi7ff/4vD/ + 4fD/z9j/OkGlAABiAABwBxWAAAt7BBN+P0uofYLUztb/4O7/6fb/6fP/qa7xQkyoBg56AABqMjugx8/+ + 5fH/4Ov/4On/3uj/3eb/3+j/3uj/1+L/0d3/1d7/3+f/7fL/9vj/+vz//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+fr/8/f/6/L/2d//v8j6vcf5ucP1wMv8wM3+vMj6PkqoAABo + UF25usP7tsPyvsr6sLrwQ0utAABqAAV1OUameIDRKDWZAAd2GyeOLDecmaHntsL0pbLom6riq7LzUlu0 + AANzBhR/AAZ0NT+ja3bBY2i/XGG6UViyWl65XGG7XGC6TVWvQU6pPkalODygqK7p8vb/+vz//v7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/7/T/wcj2R0ysExeFERmGDxuIFB6K + FBqICxSEAABsAAByDBiDCRSBBRCADhaFCRODAAh4AxF/AAl4CxeDHSaPAAp6AAN0AA19AAd3CBOBEBqH + BhGBAAh5AABwAAByAAh5BhSCAxWCAABsAABvAABlAABnAABxAABjAABmAABhAABdAABYAABhCAt/q7Lr + 8/f/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+fv/3uT/SE2vAABn + CBB/GiCMLzmfLTWcGByJFRyKGCOOMj2gHymRDxiGGyOPLDCXBRF/AAh3BhaCEyKMICqTKC2WNDqfIzCV + Awx6Eh+JHiaPAAR3AAZ5CxSDICWQX2q7Q1CqAA1+AAFxDxuHiZTbVGC4dHnQnabrTVqzY23EUV62Slau + LjaZXWm9sLjz5ez/9vn/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +Pv/4+n+e4LPfoPVpqv2vsf/zNX/zdb/xtH/v8v8pK7spKfysLb3vcr4ws784ej/hI/YAAZ1AAJzVF25 + yM//3Of/5+//i5LcAABpMzyfp6vxoKznlqHhqbbtx9H/8fz/kpvfAABiAABph4zc5PD/2OP/193/3un/ + 1+D/2OH/1+D/0Nr/zNL/3+j/6/L/7/T/9vn//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+Pr/9Pf/6vD/5u3/3+b/4uv/6PD/5+//5O3/5/P/sL3sXmS7mZzoz9f/3+z/4e// + mKLiEiKKCBF/KTWZr7T06/f/3ev/VF2zChSBipPcz9v+4u7/3ur/3ev/5/X/qrPrISmSDRJ2Xmq/3ur/ + 4uv/6vH/7fP/7fL/7/T/7vP/7fP/7fP/8PX/8fX/9Pf/+Pr/+/z//v7/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+Pr/9vn/9Pf/8vb/8vb/8/b/9Pf/7/T/6/L/tL/ubXLH + en/Ti43gqavy0t3/nafjMj6fJzaaAAV1GyeOYmW7Nz6fAABgNj6i1N//3uz/2uX/3Oj/5PH/wcj7FR2J + AAN0gong0tr/6fH/7/P/9vj/+Pr/+fv/+fv/+Pr/+Pr/+Pr/+fv/+vv//P3//f7//v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+/z/+/z/+/z//f3//f7/ + +fv/8fX/5Oz/jpbfc3jObnXLcXfOk5rks7b4iY3dR1KvDhuEAABoAABlEBV9U12ytcD13Or/3en/3ej/ + 1eL/q7fvGR+MKDKZbnnNxc/76PD/8fX/+fr//f7//v//AAAA/v7//f7//f3//P3//f3//f7//v//AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//f7//v7/AAAA + AAAAAAAAAAAAAAAA/f7/9vn/7/T/yNH5lJrleoDVmZ3pmpzpc3nPfoTWf4bYVFy3HSaLZ3PGsrb8v8r8 + y9n9q7jre4LRf4fUgIvXAwZ1AABrhYjb0NX/6PH/8PX/+Pr//f7/AAAAAAAA/v///f3/+vv/+Pr/9/r/ + 9/n/+Pr/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f7/+/z/+fr/9vj/9/n/ + +vz/+vv/+/z//v7/AAAAAAAAAAAAAAAA/v7/+vz/8/f/7PL/2uT/t8H1srP6vcH+nKTnSlOxV2C7TVaz + WGS8QUqmSlSuSFOtR1GtbXTKVl23ARB5AAh2AABnd33P3eP/4ur/7/T/9/n//P3/AAAAAAAAAAAA/P3/ + 9/n/8vb/7PH/6fD/7PL/7vP/8vb/9vn/+/z//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/+Pr/ + 8/b/7/T/8Pb/6vH/3eP97vL++fr//P3/AAAAAAAAAAAAAAAAAAAA/f7/+vv/9fj/7/T/5+//z9f+t7v4 + uLn9Z2zFLzucFCGIMz6gGCCMAAd4AAl2Dx2EER+GXWK8c3XLKzKXd4LP4er/6/L/8PX/9/n//P3//v// + AAAAAAAA/v7/+fv/8/b/7PP/y9H/i4/erLbt4er/5e3/7fP/8/b/+fv//f3//v7/AAAAAAAAAAAAAAAA + /v7/+/z/9vj/8PT/6/L/3+n/x9H9aHTAZGvG3+b9+Pr/+/z/AAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + +Pr/8vb/6/H/3OX+wMn4maDmdHrPWGG6T1a1eoHWcHfOTlayUlq1SlKubHjAxMj/0dn/4+v/7PL/8vb/ + +Pr//P3//v7/AAAAAAAAAAAA/f7/+fr/7vP/xsv5YGXAHymRKjKYYWS9rbLz4u3/6/P/8vb/+fr//f7/ + AAAAAAAAAAAA/v//+/z/9vj/7fL/5e3/xs7/Y23BIiiSAABeLTab3+b/9/r/+/z/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAA/f7/+vz/9vj/8PX/6vH/3eb/ydL8xM/6uMPyt733w8j/zNb/1Nz/3OT/4uz/5u7/ + 7fP/8vb/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAA/f7/+fv/7vP/jpHiAAJ1CxaBER6GAABoFRmGbXbH + 0Nf/7PL/9fj//P3/AAAAAAAAAAAA/v7/+fv/8/f/4Of/hYvbKDGZAABuAABdAAZyi5La5+7/9vn/+/z/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/9ff/8vb/7/X/7fP/6/L/5u3/5ez/6fD/ + 7PP/7/T/8fX/9Pf/9/n/+vv//P3//v7//v//AAAAAAAAAAAAAAAAAAAA/v7/+fv/8fb/2eH9fIbQExqH + AABrAAp6AAFyAABwS0+uztX39vn/+vz/AAAAAAAAAAAA/f7/+Pr/8ff/qbLpAABrAABhAABwDBWAfobX + 5e3/8PX/9vn//f3/AAAAAAAA/v///f7/+/z/+vv/+vv/+vz//P3//v7//v///v7//P3/+vz/+Pr/9/n/ + 9vj/9vj/9vj/9vj/9/n/+fr/+/z//P3//f7//v7//f7//P3/+/z/+vz/+/z//P3//v7/AAAA/v7/+/z/ + 9fj/7/T/5/H/uML1U1e1AAh5AABuAABvMjmdv8bz9vr/+vv/AAAAAAAAAAAA/f7/+fv/7/T/iY7aDxSA + GiONa3XHsr7w4Oj/6/H/9Pf/+vz//v7/AAAA/v///P3/+Pr/9Pf/8/f/9fj/9fj/9vn/+/z//v7/AAAA + AAAAAAAA/v7//f7//P3/+/z/+/z//P3//f7//v//AAAAAAAAAAAA/v7/+/z/9/n/9vn/9vn/9Pj/9vn/ + +/z//v7/AAAA/f7/+vz/9fj/7/T/6vL/3ef/i5PbGRqJBQl5jJbZ6vH/9Pj/+/z/AAAAAAAAAAAA/f7/ + +fv/8fT/1Nn9t7/0wcr54er/7fT/8fX/9fj/+vv//f7/AAAAAAAA/f3/+Pr/8PT/6/L/3uX/ztb/5Or/ + 8/f/+Pr//f7/AAAAAAAAAAAA/f7/+vz/+Pr/+fv/+fv/+vv//f3//v//AAAAAAAAAAAA/P3/9/n/7vL/ + 193/ztf/5u3/7vP/9Pf/+/z//v7/AAAA/v7//P3/+Pr/8fX/7PP/5/D/sLfxoKnk4+r/8vf/9/n//f3/ + AAAAAAAAAAAA/v7/+/z/9vn/9Pf/8vb/8fb/8fX/9Pf/+Pr//P3//v7/AAAAAAAA/v7/+vv/8vb/5+7/ + y9H/WWO9KSmSkZXj6vD/+Pv//P3/AAAAAAAA/f7/+Pr/9fj/8vb/6O7/7vP/9fj/+Pr//f7/AAAAAAAA + /v//+vv/8vb/7PP/hYraKiqKlp7i6PD/7fP/9ff/+/z//v7/AAAAAAAA/f7/+vv/9ff/8fX/8PX/8vb/ + 8/f/9vn/+/z//v7/AAAAAAAAAAAAAAAA/f7/+/z/+vv/+fr/+fr/+vv//P3//v7/AAAAAAAAAAAAAAAA + /P3/9fj/7PL/1d7/RUysAABhAABlg4ja6/D/+Pr//P3/AAAAAAAA+/z/9fj/6e7/2eD/h4/bnaXg7PH/ + 9fj/+/z/AAAAAAAA/v7/+Pr/8PX/y9X1JDGVAABaERWDoKnp6PH/7vP/9/n//P3/AAAAAAAAAAAA/v7/ + /P3/+vv/+fv/+fv/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//v7//v7//v//AAAAAAAA + AAAAAAAAAAAA/v7/+fv/8PX/7PX/ipPdAABsAABlQ1Cp3Ob/7vP/9/n//f7/AAAAAAAA+fv/9Pj/yNH5 + Ule2DBJ8Ljie0df+8fb/+fv//v7/AAAA/v7/+Pr/7/X/hY3YAABxAAl7AABuEBaEs7nz6fH/8fX/+vv/ + /v7/AAAAAAAAAAAAAAAA/v///v7//v7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9vn/7PL/0tn/LzidAQFsAAB0iZHb6vP/8PT/+fv//v//AAAA + /v7/+Pr/8vf/r7rqAAV4AABdPUen1N//7PL/9vn//f7/AAAA/v7/+fr/7/T/yc75S1G0AABrARKAAABp + Qker0df/7fP/9/n//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/5+7/cXXNAAd2AABuMDebzdT97PL/ + 9vj//P3/AAAAAAAA/v7/9/n/7/X/tL/uFCCLAABqHSqRvcf46fD/9Pf//f3/AAAAAAAA+vv/8vX/6vH/ + yM3+JC2XAABtAAV2Agx9q7Ly7vT/9vn//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/4uj/WWO1AAVx + KTaYu8T07fT/8vb/+vv//v7/AAAAAAAA/v7/9/n/7vX/vsn1Iy2SAABrAQ99mp/o6PD/9Pf//P3/AAAA + AAAA/P3/9/n/7vP/6fL/s7z2DBB/AABeQ0uttrr56e7/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +fv/4ef6g4zNbXfFw8v27fT/8vb/+Pr//f3/AAAAAAAAAAAA/v7/9/n/7vT/yNL7MjucAABtBxF/nKLo + 6fH/9Pf//P3/AAAAAAAA/v7/+/z/9fj/7fL/6/T/jZXbLzScrrP14en/7fL/+fv//v7/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+vz/8PP91dr34+f/8vb/8/f/9/r//P3//v//AAAAAAAAAAAA/v7/+Pr/8PX/1N3/ + QUqmAQRxBQ98m6Dm7PL/9fj//P3/AAAAAAAAAAAA/v7/+/z/9ff/8PX/5ez/ytH94ej/8vb/9vj/+/z/ + /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA + /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ + 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA + AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file diff --git a/Project/Panels/EditAudioZoneListPanel.Designer.cs b/Project/Panels/EditAudioZoneListPanel.Designer.cs new file mode 100644 index 0000000..13696ee --- /dev/null +++ b/Project/Panels/EditAudioZoneListPanel.Designer.cs @@ -0,0 +1,48 @@ +namespace CodeWalker.Project.Panels +{ + partial class EditAudioZoneListPanel + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditAudioZoneListPanel)); + this.SuspendLayout(); + // + // EditAudioZoneListPanel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(562, 450); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "EditAudioZoneListPanel"; + this.Text = "Edit Audio Zone List"; + this.ResumeLayout(false); + + } + + #endregion + } +} \ No newline at end of file diff --git a/Project/Panels/EditAudioZoneListPanel.cs b/Project/Panels/EditAudioZoneListPanel.cs new file mode 100644 index 0000000..5f9a953 --- /dev/null +++ b/Project/Panels/EditAudioZoneListPanel.cs @@ -0,0 +1,37 @@ +using CodeWalker.GameFiles; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CodeWalker.Project.Panels +{ + public partial class EditAudioZoneListPanel : ProjectPanel + { + public ProjectForm ProjectForm; + public Dat151AmbientZoneList CurrentZoneList { get; set; } + + public EditAudioZoneListPanel(ProjectForm owner) + { + ProjectForm = owner; + InitializeComponent(); + } + + public void SetZoneList(Dat151AmbientZoneList list) + { + CurrentZoneList = list; + UpdateFormTitle(); + } + + private void UpdateFormTitle() + { + Text = CurrentZoneList?.NameHash.ToString() ?? ""; + } + + } +} diff --git a/Project/Panels/EditAudioZoneListPanel.resx b/Project/Panels/EditAudioZoneListPanel.resx new file mode 100644 index 0000000..1431f6b --- /dev/null +++ b/Project/Panels/EditAudioZoneListPanel.resx @@ -0,0 +1,409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAMAICAAAAAAGACoDAAANgAAABAQAAAAABgAaAMAAN4MAABAQAAAAAAYACgyAABGEAAAKAAAACAA + AABAAAAAAQAYAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/u3v+Pn6//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7+/vX3/rzA3OHl9fz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7//+zv+3Z6qcLI5Pr7/wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP7+/+br+15in6+33vf5/wAAAAAAAAAAAAAAAP7+//7+/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//v8//v8//3+/wAAAAAAAAAAAAAAAAAAAP7+/+Ho+1dana20 + 4/b4/wAAAAAAAPz9//P2/+Tp/ezw/vz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///X4 + /9Pa+tPa+/H1//z9/wAAAAAAAAAAAAAAAP7+/93k+SsscaSr3PX3/wAAAP7+//L1/7W98AcWgrvC8Pj6 + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/+bs/xohiAEJdrvF9+7y//z9/wAAAAAAAAAA + AP7+/9rh+CEkapmh0/T3/wAAAPj6/9HZ/AEHcgEEb9LZ+/r7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP7//+/z/3F+zAAAXwQLcZai3fb4/wAAAAAAAAAAAP3+/97l/E9Tmaau4fT3/wAAAO/0/1dd + sAAAV7a/8/H1//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPr8/+jv/46Y3QUUf6Ot + 5PX4/wAAAAAAAAAAAP3+/9zj+3Z6wLe/7fX4/wAAAPD0/212xnaAzerw//z9/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/+/z/+Dm+/D0//z9/wAAAAAAAP7+//j6/9Pd+UhLjb/H + 9/D0//3+//n7/+nt/+jt//n7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7///7+//7+//7+/wAAAAAAAPr8/+7z/83W+ImU2A0UdFNarr/K9env//X4//z9//3+//7//wAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///j6/+Pq/255 + xhckjE5XsVVftUlTqwAKeTA9nr3H8+7z//v8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+//b4/9Tc+Sc0mRonj8rV/crX/ZSb48rX/brG8wwWgQAEdJei + 4efu//n7//7+//z9//z9//z9//z9//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//f5/+3y/+nv/+ft + /8vV+io2mImU2M7c/7vG9yIvlQAOfCg4mM3Y/s/c/4aR1AQRfGtzwtni/ebt/9vi/tri/tXd+9Tc+O3x + /vz9/wAAAAAAAAAAAAAAAAAAAAAAAPn6/87V+FVftkRPrFlnvSEqjQoUfmJvwWFvvg0TfQQIcxEchwAD + cy89n19rvVVitQwZgwAAaiMrkT9NqTVBoiw3mhQihig1mNLX+fv8/wAAAAAAAAAAAAAAAAAAAAAAAPb5 + /52l4EFLqoCK03yF0VBctGhyw52o5GVrvQAAaneBzsHM+jA3mhYgiTtIpJOf3ouW2AAAbmh0wbbA8bS+ + 7qiz5pCb16+56e/z//3+/wAAAAAAAAAAAAAAAAAAAAAAAPv8//H1/+vw/+zx/+nv/7/J9YqP3MbP/8LM + +hwqkFZftaCp5EhRrcTQ+9jj/8rW/UJMqn6J0ebt//X3//f5//b4//X3//f5//z9/wAAAAAAAAAAAAAA + AAAAAAAAAP7+//z9//3+/wAAAAAAAP3+/+7z/6at64iP3aWs7XN8zRIfhyUykp2o5MHM+oKM0xonjY6X + 2+jv//v8/wAAAP7+//n7//b5//r7//7//wAAAAAAAAAAAAAAAP7+//f5/+rw/9Pa9fL0/v7//wAAAAAA + APv8//H1/+Tr/7i/91liu0NPq0VQrS06m0NNqDdCoYqU1+nv//v8/wAAAAAAAPn7/9zi/qSt59ri/fL1 + //v8//7//wAAAPz9//D0/8rT+h0sjkVQrPD0/wAAAAAAAAAAAAAAAAAAAPz9/+7z/8LL9Jqk4aGq6LW/ + 8c3W9+Xs/vH1//v8/wAAAAAAAAAAAPf5/6at5gAAbxIfh6u16+Po/fr7/wAAAPb5/6ev5gAIeAAPernC + 8fX4/wAAAAAAAP3+//v8//z9/wAAAP3+//j6//P3//P2//b4//r8//7+//7+//v8//r8//3+/wAAAPv8 + /+Xr/nuIzwAAbBseg5Sb2fb5/wAAAPf5/8DF8pWe3d/n/vT3//39/wAAAPv8/+zx/87V9+3x/v3+/wAA + AP3+//j6//X4//v8/wAAAAAAAPn7/+Dm/snR9fD0//39//z8/fv8/+3y/8LK9aGq4dfd9/n7/wAAAPz9 + //b5//X4//v8/wAAAAAAAP7+/+7z/4aP1gEPet7k/f39/wAAAPf5/83U+ZCZ2u3x/v7+/wAAAPP3/215 + wgAJd7fB8/L1//7+/wAAAP3+//j6//f5//r8//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAPj6/87W/AAA + X2duue3y//7+/wAAAPD0/05asBQfidzj/P39/wAAAPX4/6Su6AAAXBccgtff/vv8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP3/3F8xhYli9Xe/fn6/wAAAAAAAO3y/1pltQAJd9be + /fv8/wAAAPz9/+rw/36I0Bknjs/W+vv8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAPf5/8HI7tnf+/X4//7+/wAAAAAAAO/0/3R7xgAAb9ng/Pz9/wAAAAAAAPn7/+Ln/dLY+fP2//3+ + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//r7//v8//7+/wAAAAAAAAAA + APb4/7/F84eP0e/0//7+/wAAAAAAAP7+//z9//v8//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz9//b5//X4//v8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////w////4 + P///+D////g8//D4MH/geCB/4Dggf+A4IH/wOCD/+DAB//hgAf//gAP//wAAB/AAAAPwAAAD8AAAA/AA + AAfjAAEHgYADAQPgBwEDEAEBAghgAQwIIEH8CCB//Bggf/wYMH/8ODD///h/////////////KAAAABAA + AAAgAAAAAQAYAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+vv/fL1/v///wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///4+Vx7/F5v///wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAP///4CHtrS62////////////////////wAAAAAAAAAAAP////H0/vf6/v// + /////////4yTwrrB4f///+zw+7rA6P39/////wAAAAAAAAAAAP///56l2BkcguXr/P///////42Uw8jO + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2OL+NjZ7AAArX2Ok + 4uz/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 2eP/LjJ1DAxKfYTE4Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//f7//f7//v7//v// + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/gILIR0eVeoHC3eb/8fX/+/z/AAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+Pr/ + +Pr/+Pr/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+vv/+vv/+/z//f3//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/2eP9ZWeqHx1obnOz4Or/8fX/+/z/AAAAAAAAAAAAAAAA/v7/ + +/z/9fj/8vb/8PX/7vT/8fb/9fj/+fr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/9fj/9fj/9Pj/9Pf/9vn/+/z//v7/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP9ODp9AAA5jZDQ5O7/8PX/+/z/AAAA + AAAAAAAA/v7/+/z/9Pf/7fP/5u//wsz6j5XfuMDx7fL/9vn//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+Pr/8/b/5+3/2eH/2uP/ + 5u3/7fP/8/b/+vv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3ef/U1ebBgVKio/O + 4uz/8fX/+/z/AAAAAAAA/v///P3/9fj/7fP/4uv/hIzZHSWPAABmU1i14ub/9/r/+/z/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9Pf/ + 7/X/09z/TlSzNzWYj5bh5O7/6/L/8vb/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fX/ + 2eP/QUWIEhBZbnSz3uj/8fb/+/z/AAAAAAAA/f7/+Pr/7/T/6PH/iI7cAABvAABqAABncXjK6O//9fj/ + +/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+/z/8/f/2uD/Z27EAABnAABiBgl4jJTd5vD/6O//8vX/+fv//f7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8fb/2OP/Mjd6AQE6ZGup4er/8fX/+/z/AAAAAAAA+vz/8fX/6/T/xM/8ExyJAABwAABu + GySRxc387fT/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vz/8/f/1Nr/MzqhAABhAxOBAARyBgp5jpLg5Oz/7PP/9Pf/+vz//v7/ + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP/KCtvBwZOjJHS4Or/8fX/+/z/AAAA/f7/9/n/7fP/3+j/ + UFq3AABtAAZ3BAh6mZ/n5vD/7vP/+Pr//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/6e//sbb1KzWcAABwBhaBAAFyAgp6fITR + 1d777/T/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3+j/WF2hBglTnaTj5O3/8PX/+/z/AAAA + /P3/9Pf/6vL/k5riAAByAAR0AABrY2vE4ur/6vH/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/7fL/5O3/ytX/RU6w + AABpAA5+AABuAABnhord6e7/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/7/T/3+j/k5jbT1KdgYjJ + 3uf+8fX/+/z/AAAA+/z/9fn/4ef/NDqhAABnAABrJjCU0Nn/5/D/8fX/+vv//v7/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + 9vn/7vP/6vP/ztb/O0CmAABpAABrQkuoxMn57PH/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/ + 2+X/en/CUFGak5nY3+j/8fX//P3/AAAA/P3/9fj/4en/i5DbNT2hIyuTpqzv4uz/7vP/9/n//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/9vn/7/P/6vL/ytH/X2i9XWi7wsf/6e//8/f/+Pr//v7/AAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/WF2hW1ylvMD+3uf/8PX/+/z/AAAA/f7/9vn/7fP/4uj/j5Pgf4LV3+X/6fD/ + 9Pf//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/8vX/7fP/5+//5u7/6vD/8PT/9vn//P3//v7/ + AAAAAAAAAAAAAAAAAAAA/f7/9/n/7fP/0tz9LDJzNjh/nqTk2uT/7fL/9/n//f7//f7/+fv/8/b/7PL/ + 3eX/zM//5ev/9fj/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f3/+vv/9/n/9vn/9fj/9vn/ + +fr//P3//v7/AAAAAAAAAAAA/v///f7/+vv/9vn/7/T/5vD/2Ob/VFubERNdoajk4u//5O7/7vP/9vj/ + +fr/+vv/+Pr/9fj/9Pj/9fj/9fj/+Pr//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///v7/ + /f7//P3//P3//f3//v7//v//AAAAAAAAAAAA/f7/+vz/9vn/8fX/7vT/5O3/3eb/z9n/cHjICxN5d37L + z9n/2eP/5O3/6/L/8PT/9Pf/9/n/+vv/+vv/+/z//P3//f3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+Pr/8/b/7vT/6vL/z9r+jZjeQUeq + IiuQCBN3AAFrBRB8Nj2iUViym6XlydH/4+z/6/L/8PT/9/n/+/z//f7//v//AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/8fX/6/L/3uf/ + mKTkLzibAABoAAB0Fx+HDBh7FSGDAg16AABYAABlCBB/Ji2UhYza1+D/6PL/7fL/9Pf/+vv//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/9/n/ + 8PT/7PT/z9j/XmO+AABtAABcMDSXoajsu8X7VV+5hYzblZ/fTVSxFSKMAABkAABnAAN2Qkmpsbrz5e3/ + 6vH/8fX/+Pr//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/P3/9/n/8PX/7PT/vcn3LTOZAABaAgR1ZWzD0Nf/5vL/1OP/l53lzs3/6fP/4+7/sLzwZ23CBxSD + AABnAABlHiaSmqHo3+j/5+//7/T/9vn//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/ + /v7//v7//v7//f7/+/z/9vj/7vP/7PX/tcLzEBeGAABkPEWlqLPt2eX/4e7/3On/uMX1gofVe3vPhYzY + z93+5/X/4e3/lJ3gHiOPAABtAABqChiEbHLIytD/5/D/7PL/8/f/+Pr/+fr/+Pr/+Pr/+Pr/+Pr/+Pr/ + +Pr/+fv/+vv/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+fv/9/n/9vj/9fj/9Pf/8fX/7PL/4uv/l6HgDhF7AAN4iZDe0d7/3uz/4vD/w83/VVm3 + ICiSAAFyAABlAABwaHTD1N//2un/3er/w838ZW3BEyOJJzKVAQ16NDmfwsn75fD/5u7/7PL/7vP/7fP/ + 7fP/7fL/7fP/7vP/7/T/8fb/9Pj/9vn/+fr//f3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/+Pr/9Pf/8fX/7vT/7PL/6/L/6fH/5u7/6vX/tsD0CQx4AAFwkZvi7ff/4vD/ + 4fD/z9j/OkGlAABiAABwBxWAAAt7BBN+P0uofYLUztb/4O7/6fb/6fP/qa7xQkyoBg56AABqMjugx8/+ + 5fH/4Ov/4On/3uj/3eb/3+j/3uj/1+L/0d3/1d7/3+f/7fL/9vj/+vz//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+fr/8/f/6/L/2d//v8j6vcf5ucP1wMv8wM3+vMj6PkqoAABo + UF25usP7tsPyvsr6sLrwQ0utAABqAAV1OUameIDRKDWZAAd2GyeOLDecmaHntsL0pbLom6riq7LzUlu0 + AANzBhR/AAZ0NT+ja3bBY2i/XGG6UViyWl65XGG7XGC6TVWvQU6pPkalODygqK7p8vb/+vz//v7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/7/T/wcj2R0ysExeFERmGDxuIFB6K + FBqICxSEAABsAAByDBiDCRSBBRCADhaFCRODAAh4AxF/AAl4CxeDHSaPAAp6AAN0AA19AAd3CBOBEBqH + BhGBAAh5AABwAAByAAh5BhSCAxWCAABsAABvAABlAABnAABxAABjAABmAABhAABdAABYAABhCAt/q7Lr + 8/f/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+fv/3uT/SE2vAABn + CBB/GiCMLzmfLTWcGByJFRyKGCOOMj2gHymRDxiGGyOPLDCXBRF/AAh3BhaCEyKMICqTKC2WNDqfIzCV + Awx6Eh+JHiaPAAR3AAZ5CxSDICWQX2q7Q1CqAA1+AAFxDxuHiZTbVGC4dHnQnabrTVqzY23EUV62Slau + LjaZXWm9sLjz5ez/9vn/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +Pv/4+n+e4LPfoPVpqv2vsf/zNX/zdb/xtH/v8v8pK7spKfysLb3vcr4ws784ej/hI/YAAZ1AAJzVF25 + yM//3Of/5+//i5LcAABpMzyfp6vxoKznlqHhqbbtx9H/8fz/kpvfAABiAABph4zc5PD/2OP/193/3un/ + 1+D/2OH/1+D/0Nr/zNL/3+j/6/L/7/T/9vn//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+Pr/9Pf/6vD/5u3/3+b/4uv/6PD/5+//5O3/5/P/sL3sXmS7mZzoz9f/3+z/4e// + mKLiEiKKCBF/KTWZr7T06/f/3ev/VF2zChSBipPcz9v+4u7/3ur/3ev/5/X/qrPrISmSDRJ2Xmq/3ur/ + 4uv/6vH/7fP/7fL/7/T/7vP/7fP/7fP/8PX/8fX/9Pf/+Pr/+/z//v7/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+Pr/9vn/9Pf/8vb/8vb/8/b/9Pf/7/T/6/L/tL/ubXLH + en/Ti43gqavy0t3/nafjMj6fJzaaAAV1GyeOYmW7Nz6fAABgNj6i1N//3uz/2uX/3Oj/5PH/wcj7FR2J + AAN0gong0tr/6fH/7/P/9vj/+Pr/+fv/+fv/+Pr/+Pr/+Pr/+fv/+vv//P3//f7//v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+/z/+/z/+/z//f3//f7/ + +fv/8fX/5Oz/jpbfc3jObnXLcXfOk5rks7b4iY3dR1KvDhuEAABoAABlEBV9U12ytcD13Or/3en/3ej/ + 1eL/q7fvGR+MKDKZbnnNxc/76PD/8fX/+fr//f7//v//AAAA/v7//f7//f3//P3//f3//f7//v//AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//f7//v7/AAAA + AAAAAAAAAAAAAAAA/f7/9vn/7/T/yNH5lJrleoDVmZ3pmpzpc3nPfoTWf4bYVFy3HSaLZ3PGsrb8v8r8 + y9n9q7jre4LRf4fUgIvXAwZ1AABrhYjb0NX/6PH/8PX/+Pr//f7/AAAAAAAA/v///f3/+vv/+Pr/9/r/ + 9/n/+Pr/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f7/+/z/+fr/9vj/9/n/ + +vz/+vv/+/z//v7/AAAAAAAAAAAAAAAA/v7/+vz/8/f/7PL/2uT/t8H1srP6vcH+nKTnSlOxV2C7TVaz + WGS8QUqmSlSuSFOtR1GtbXTKVl23ARB5AAh2AABnd33P3eP/4ur/7/T/9/n//P3/AAAAAAAAAAAA/P3/ + 9/n/8vb/7PH/6fD/7PL/7vP/8vb/9vn/+/z//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/+Pr/ + 8/b/7/T/8Pb/6vH/3eP97vL++fr//P3/AAAAAAAAAAAAAAAAAAAA/f7/+vv/9fj/7/T/5+//z9f+t7v4 + uLn9Z2zFLzucFCGIMz6gGCCMAAd4AAl2Dx2EER+GXWK8c3XLKzKXd4LP4er/6/L/8PX/9/n//P3//v// + AAAAAAAA/v7/+fv/8/b/7PP/y9H/i4/erLbt4er/5e3/7fP/8/b/+fv//f3//v7/AAAAAAAAAAAAAAAA + /v7/+/z/9vj/8PT/6/L/3+n/x9H9aHTAZGvG3+b9+Pr/+/z/AAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + +Pr/8vb/6/H/3OX+wMn4maDmdHrPWGG6T1a1eoHWcHfOTlayUlq1SlKubHjAxMj/0dn/4+v/7PL/8vb/ + +Pr//P3//v7/AAAAAAAAAAAA/f7/+fr/7vP/xsv5YGXAHymRKjKYYWS9rbLz4u3/6/P/8vb/+fr//f7/ + AAAAAAAAAAAA/v//+/z/9vj/7fL/5e3/xs7/Y23BIiiSAABeLTab3+b/9/r/+/z/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAA/f7/+vz/9vj/8PX/6vH/3eb/ydL8xM/6uMPyt733w8j/zNb/1Nz/3OT/4uz/5u7/ + 7fP/8vb/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAA/f7/+fv/7vP/jpHiAAJ1CxaBER6GAABoFRmGbXbH + 0Nf/7PL/9fj//P3/AAAAAAAAAAAA/v7/+fv/8/f/4Of/hYvbKDGZAABuAABdAAZyi5La5+7/9vn/+/z/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/9ff/8vb/7/X/7fP/6/L/5u3/5ez/6fD/ + 7PP/7/T/8fX/9Pf/9/n/+vv//P3//v7//v//AAAAAAAAAAAAAAAAAAAA/v7/+fv/8fb/2eH9fIbQExqH + AABrAAp6AAFyAABwS0+uztX39vn/+vz/AAAAAAAAAAAA/f7/+Pr/8ff/qbLpAABrAABhAABwDBWAfobX + 5e3/8PX/9vn//f3/AAAAAAAA/v///f7/+/z/+vv/+vv/+vz//P3//v7//v///v7//P3/+vz/+Pr/9/n/ + 9vj/9vj/9vj/9vj/9/n/+fr/+/z//P3//f7//v7//f7//P3/+/z/+vz/+/z//P3//v7/AAAA/v7/+/z/ + 9fj/7/T/5/H/uML1U1e1AAh5AABuAABvMjmdv8bz9vr/+vv/AAAAAAAAAAAA/f7/+fv/7/T/iY7aDxSA + GiONa3XHsr7w4Oj/6/H/9Pf/+vz//v7/AAAA/v///P3/+Pr/9Pf/8/f/9fj/9fj/9vn/+/z//v7/AAAA + AAAAAAAA/v7//f7//P3/+/z/+/z//P3//f7//v//AAAAAAAAAAAA/v7/+/z/9/n/9vn/9vn/9Pj/9vn/ + +/z//v7/AAAA/f7/+vz/9fj/7/T/6vL/3ef/i5PbGRqJBQl5jJbZ6vH/9Pj/+/z/AAAAAAAAAAAA/f7/ + +fv/8fT/1Nn9t7/0wcr54er/7fT/8fX/9fj/+vv//f7/AAAAAAAA/f3/+Pr/8PT/6/L/3uX/ztb/5Or/ + 8/f/+Pr//f7/AAAAAAAAAAAA/f7/+vz/+Pr/+fv/+fv/+vv//f3//v//AAAAAAAAAAAA/P3/9/n/7vL/ + 193/ztf/5u3/7vP/9Pf/+/z//v7/AAAA/v7//P3/+Pr/8fX/7PP/5/D/sLfxoKnk4+r/8vf/9/n//f3/ + AAAAAAAAAAAA/v7/+/z/9vn/9Pf/8vb/8fb/8fX/9Pf/+Pr//P3//v7/AAAAAAAA/v7/+vv/8vb/5+7/ + y9H/WWO9KSmSkZXj6vD/+Pv//P3/AAAAAAAA/f7/+Pr/9fj/8vb/6O7/7vP/9fj/+Pr//f7/AAAAAAAA + /v//+vv/8vb/7PP/hYraKiqKlp7i6PD/7fP/9ff/+/z//v7/AAAAAAAA/f7/+vv/9ff/8fX/8PX/8vb/ + 8/f/9vn/+/z//v7/AAAAAAAAAAAAAAAA/f7/+/z/+vv/+fr/+fr/+vv//P3//v7/AAAAAAAAAAAAAAAA + /P3/9fj/7PL/1d7/RUysAABhAABlg4ja6/D/+Pr//P3/AAAAAAAA+/z/9fj/6e7/2eD/h4/bnaXg7PH/ + 9fj/+/z/AAAAAAAA/v7/+Pr/8PX/y9X1JDGVAABaERWDoKnp6PH/7vP/9/n//P3/AAAAAAAAAAAA/v7/ + /P3/+vv/+fv/+fv/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//v7//v7//v//AAAAAAAA + AAAAAAAAAAAA/v7/+fv/8PX/7PX/ipPdAABsAABlQ1Cp3Ob/7vP/9/n//f7/AAAAAAAA+fv/9Pj/yNH5 + Ule2DBJ8Ljie0df+8fb/+fv//v7/AAAA/v7/+Pr/7/X/hY3YAABxAAl7AABuEBaEs7nz6fH/8fX/+vv/ + /v7/AAAAAAAAAAAAAAAA/v///v7//v7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9vn/7PL/0tn/LzidAQFsAAB0iZHb6vP/8PT/+fv//v//AAAA + /v7/+Pr/8vf/r7rqAAV4AABdPUen1N//7PL/9vn//f7/AAAA/v7/+fr/7/T/yc75S1G0AABrARKAAABp + Qker0df/7fP/9/n//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/5+7/cXXNAAd2AABuMDebzdT97PL/ + 9vj//P3/AAAAAAAA/v7/9/n/7/X/tL/uFCCLAABqHSqRvcf46fD/9Pf//f3/AAAAAAAA+vv/8vX/6vH/ + yM3+JC2XAABtAAV2Agx9q7Ly7vT/9vn//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/4uj/WWO1AAVx + KTaYu8T07fT/8vb/+vv//v7/AAAAAAAA/v7/9/n/7vX/vsn1Iy2SAABrAQ99mp/o6PD/9Pf//P3/AAAA + AAAA/P3/9/n/7vP/6fL/s7z2DBB/AABeQ0uttrr56e7/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +fv/4ef6g4zNbXfFw8v27fT/8vb/+Pr//f3/AAAAAAAAAAAA/v7/9/n/7vT/yNL7MjucAABtBxF/nKLo + 6fH/9Pf//P3/AAAAAAAA/v7/+/z/9fj/7fL/6/T/jZXbLzScrrP14en/7fL/+fv//v7/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+vz/8PP91dr34+f/8vb/8/f/9/r//P3//v//AAAAAAAAAAAA/v7/+Pr/8PX/1N3/ + QUqmAQRxBQ98m6Dm7PL/9fj//P3/AAAAAAAAAAAA/v7/+/z/9ff/8PX/5ez/ytH94ej/8vb/9vj/+/z/ + /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA + /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ + 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA + AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file diff --git a/Project/Panels/EditAudioZonePanel.Designer.cs b/Project/Panels/EditAudioZonePanel.Designer.cs new file mode 100644 index 0000000..e4eb021 --- /dev/null +++ b/Project/Panels/EditAudioZonePanel.Designer.cs @@ -0,0 +1,77 @@ +namespace CodeWalker.Project.Panels +{ + partial class EditAudioZonePanel + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditAudioZonePanel)); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.tabControl1.SuspendLayout(); + this.SuspendLayout(); + // + // tabControl1 + // + this.tabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Location = new System.Drawing.Point(2, 3); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(559, 447); + this.tabControl1.TabIndex = 17; + // + // tabPage1 + // + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(551, 421); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "Ambient Emitter"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // EditAudioZonePanel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(562, 450); + this.Controls.Add(this.tabControl1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "EditAudioZonePanel"; + this.Text = "Edit Audio Zone"; + this.tabControl1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage1; + } +} \ No newline at end of file diff --git a/Project/Panels/EditAudioZonePanel.cs b/Project/Panels/EditAudioZonePanel.cs new file mode 100644 index 0000000..642dc65 --- /dev/null +++ b/Project/Panels/EditAudioZonePanel.cs @@ -0,0 +1,38 @@ +using CodeWalker.World; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CodeWalker.Project.Panels +{ + public partial class EditAudioZonePanel : ProjectPanel + { + public ProjectForm ProjectForm; + public AudioPlacement CurrentZone { get; set; } + + public EditAudioZonePanel(ProjectForm owner) + { + ProjectForm = owner; + InitializeComponent(); + } + + public void SetZone(AudioPlacement zone) + { + CurrentZone = zone; + UpdateFormTitle(); + } + + private void UpdateFormTitle() + { + Text = CurrentZone?.NameHash.ToString() ?? ""; + } + + + } +} diff --git a/Project/Panels/EditAudioZonePanel.resx b/Project/Panels/EditAudioZonePanel.resx new file mode 100644 index 0000000..1431f6b --- /dev/null +++ b/Project/Panels/EditAudioZonePanel.resx @@ -0,0 +1,409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAMAICAAAAAAGACoDAAANgAAABAQAAAAABgAaAMAAN4MAABAQAAAAAAYACgyAABGEAAAKAAAACAA + AABAAAAAAQAYAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/u3v+Pn6//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7+/vX3/rzA3OHl9fz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7//+zv+3Z6qcLI5Pr7/wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP7+/+br+15in6+33vf5/wAAAAAAAAAAAAAAAP7+//7+/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//v8//v8//3+/wAAAAAAAAAAAAAAAAAAAP7+/+Ho+1dana20 + 4/b4/wAAAAAAAPz9//P2/+Tp/ezw/vz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///X4 + /9Pa+tPa+/H1//z9/wAAAAAAAAAAAAAAAP7+/93k+SsscaSr3PX3/wAAAP7+//L1/7W98AcWgrvC8Pj6 + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/+bs/xohiAEJdrvF9+7y//z9/wAAAAAAAAAA + AP7+/9rh+CEkapmh0/T3/wAAAPj6/9HZ/AEHcgEEb9LZ+/r7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP7//+/z/3F+zAAAXwQLcZai3fb4/wAAAAAAAAAAAP3+/97l/E9Tmaau4fT3/wAAAO/0/1dd + sAAAV7a/8/H1//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPr8/+jv/46Y3QUUf6Ot + 5PX4/wAAAAAAAAAAAP3+/9zj+3Z6wLe/7fX4/wAAAPD0/212xnaAzerw//z9/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/+/z/+Dm+/D0//z9/wAAAAAAAP7+//j6/9Pd+UhLjb/H + 9/D0//3+//n7/+nt/+jt//n7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7///7+//7+//7+/wAAAAAAAPr8/+7z/83W+ImU2A0UdFNarr/K9env//X4//z9//3+//7//wAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///j6/+Pq/255 + xhckjE5XsVVftUlTqwAKeTA9nr3H8+7z//v8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+//b4/9Tc+Sc0mRonj8rV/crX/ZSb48rX/brG8wwWgQAEdJei + 4efu//n7//7+//z9//z9//z9//z9//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//f5/+3y/+nv/+ft + /8vV+io2mImU2M7c/7vG9yIvlQAOfCg4mM3Y/s/c/4aR1AQRfGtzwtni/ebt/9vi/tri/tXd+9Tc+O3x + /vz9/wAAAAAAAAAAAAAAAAAAAAAAAPn6/87V+FVftkRPrFlnvSEqjQoUfmJvwWFvvg0TfQQIcxEchwAD + cy89n19rvVVitQwZgwAAaiMrkT9NqTVBoiw3mhQihig1mNLX+fv8/wAAAAAAAAAAAAAAAAAAAAAAAPb5 + /52l4EFLqoCK03yF0VBctGhyw52o5GVrvQAAaneBzsHM+jA3mhYgiTtIpJOf3ouW2AAAbmh0wbbA8bS+ + 7qiz5pCb16+56e/z//3+/wAAAAAAAAAAAAAAAAAAAAAAAPv8//H1/+vw/+zx/+nv/7/J9YqP3MbP/8LM + +hwqkFZftaCp5EhRrcTQ+9jj/8rW/UJMqn6J0ebt//X3//f5//b4//X3//f5//z9/wAAAAAAAAAAAAAA + AAAAAAAAAP7+//z9//3+/wAAAAAAAP3+/+7z/6at64iP3aWs7XN8zRIfhyUykp2o5MHM+oKM0xonjY6X + 2+jv//v8/wAAAP7+//n7//b5//r7//7//wAAAAAAAAAAAAAAAP7+//f5/+rw/9Pa9fL0/v7//wAAAAAA + APv8//H1/+Tr/7i/91liu0NPq0VQrS06m0NNqDdCoYqU1+nv//v8/wAAAAAAAPn7/9zi/qSt59ri/fL1 + //v8//7//wAAAPz9//D0/8rT+h0sjkVQrPD0/wAAAAAAAAAAAAAAAAAAAPz9/+7z/8LL9Jqk4aGq6LW/ + 8c3W9+Xs/vH1//v8/wAAAAAAAAAAAPf5/6at5gAAbxIfh6u16+Po/fr7/wAAAPb5/6ev5gAIeAAPernC + 8fX4/wAAAAAAAP3+//v8//z9/wAAAP3+//j6//P3//P2//b4//r8//7+//7+//v8//r8//3+/wAAAPv8 + /+Xr/nuIzwAAbBseg5Sb2fb5/wAAAPf5/8DF8pWe3d/n/vT3//39/wAAAPv8/+zx/87V9+3x/v3+/wAA + AP3+//j6//X4//v8/wAAAAAAAPn7/+Dm/snR9fD0//39//z8/fv8/+3y/8LK9aGq4dfd9/n7/wAAAPz9 + //b5//X4//v8/wAAAAAAAP7+/+7z/4aP1gEPet7k/f39/wAAAPf5/83U+ZCZ2u3x/v7+/wAAAPP3/215 + wgAJd7fB8/L1//7+/wAAAP3+//j6//f5//r8//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAPj6/87W/AAA + X2duue3y//7+/wAAAPD0/05asBQfidzj/P39/wAAAPX4/6Su6AAAXBccgtff/vv8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP3/3F8xhYli9Xe/fn6/wAAAAAAAO3y/1pltQAJd9be + /fv8/wAAAPz9/+rw/36I0Bknjs/W+vv8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAPf5/8HI7tnf+/X4//7+/wAAAAAAAO/0/3R7xgAAb9ng/Pz9/wAAAAAAAPn7/+Ln/dLY+fP2//3+ + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//r7//v8//7+/wAAAAAAAAAA + APb4/7/F84eP0e/0//7+/wAAAAAAAP7+//z9//v8//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz9//b5//X4//v8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////w////4 + P///+D////g8//D4MH/geCB/4Dggf+A4IH/wOCD/+DAB//hgAf//gAP//wAAB/AAAAPwAAAD8AAAA/AA + AAfjAAEHgYADAQPgBwEDEAEBAghgAQwIIEH8CCB//Bggf/wYMH/8ODD///h/////////////KAAAABAA + AAAgAAAAAQAYAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+vv/fL1/v///wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///4+Vx7/F5v///wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAP///4CHtrS62////////////////////wAAAAAAAAAAAP////H0/vf6/v// + /////////4yTwrrB4f///+zw+7rA6P39/////wAAAAAAAAAAAP///56l2BkcguXr/P///////42Uw8jO + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2OL+NjZ7AAArX2Ok + 4uz/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 2eP/LjJ1DAxKfYTE4Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//f7//f7//v7//v// + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/gILIR0eVeoHC3eb/8fX/+/z/AAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+Pr/ + +Pr/+Pr/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+vv/+vv/+/z//f3//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/2eP9ZWeqHx1obnOz4Or/8fX/+/z/AAAAAAAAAAAAAAAA/v7/ + +/z/9fj/8vb/8PX/7vT/8fb/9fj/+fr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/9fj/9fj/9Pj/9Pf/9vn/+/z//v7/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP9ODp9AAA5jZDQ5O7/8PX/+/z/AAAA + AAAAAAAA/v7/+/z/9Pf/7fP/5u//wsz6j5XfuMDx7fL/9vn//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+Pr/8/b/5+3/2eH/2uP/ + 5u3/7fP/8/b/+vv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3ef/U1ebBgVKio/O + 4uz/8fX/+/z/AAAAAAAA/v///P3/9fj/7fP/4uv/hIzZHSWPAABmU1i14ub/9/r/+/z/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9Pf/ + 7/X/09z/TlSzNzWYj5bh5O7/6/L/8vb/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fX/ + 2eP/QUWIEhBZbnSz3uj/8fb/+/z/AAAAAAAA/f7/+Pr/7/T/6PH/iI7cAABvAABqAABncXjK6O//9fj/ + +/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+/z/8/f/2uD/Z27EAABnAABiBgl4jJTd5vD/6O//8vX/+fv//f7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8fb/2OP/Mjd6AQE6ZGup4er/8fX/+/z/AAAAAAAA+vz/8fX/6/T/xM/8ExyJAABwAABu + GySRxc387fT/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vz/8/f/1Nr/MzqhAABhAxOBAARyBgp5jpLg5Oz/7PP/9Pf/+vz//v7/ + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP/KCtvBwZOjJHS4Or/8fX/+/z/AAAA/f7/9/n/7fP/3+j/ + UFq3AABtAAZ3BAh6mZ/n5vD/7vP/+Pr//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/6e//sbb1KzWcAABwBhaBAAFyAgp6fITR + 1d777/T/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3+j/WF2hBglTnaTj5O3/8PX/+/z/AAAA + /P3/9Pf/6vL/k5riAAByAAR0AABrY2vE4ur/6vH/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/7fL/5O3/ytX/RU6w + AABpAA5+AABuAABnhord6e7/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/7/T/3+j/k5jbT1KdgYjJ + 3uf+8fX/+/z/AAAA+/z/9fn/4ef/NDqhAABnAABrJjCU0Nn/5/D/8fX/+vv//v7/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + 9vn/7vP/6vP/ztb/O0CmAABpAABrQkuoxMn57PH/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/ + 2+X/en/CUFGak5nY3+j/8fX//P3/AAAA/P3/9fj/4en/i5DbNT2hIyuTpqzv4uz/7vP/9/n//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/9vn/7/P/6vL/ytH/X2i9XWi7wsf/6e//8/f/+Pr//v7/AAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/WF2hW1ylvMD+3uf/8PX/+/z/AAAA/f7/9vn/7fP/4uj/j5Pgf4LV3+X/6fD/ + 9Pf//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/8vX/7fP/5+//5u7/6vD/8PT/9vn//P3//v7/ + AAAAAAAAAAAAAAAAAAAA/f7/9/n/7fP/0tz9LDJzNjh/nqTk2uT/7fL/9/n//f7//f7/+fv/8/b/7PL/ + 3eX/zM//5ev/9fj/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f3/+vv/9/n/9vn/9fj/9vn/ + +fr//P3//v7/AAAAAAAAAAAA/v///f7/+vv/9vn/7/T/5vD/2Ob/VFubERNdoajk4u//5O7/7vP/9vj/ + +fr/+vv/+Pr/9fj/9Pj/9fj/9fj/+Pr//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///v7/ + /f7//P3//P3//f3//v7//v//AAAAAAAAAAAA/f7/+vz/9vn/8fX/7vT/5O3/3eb/z9n/cHjICxN5d37L + z9n/2eP/5O3/6/L/8PT/9Pf/9/n/+vv/+vv/+/z//P3//f3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+Pr/8/b/7vT/6vL/z9r+jZjeQUeq + IiuQCBN3AAFrBRB8Nj2iUViym6XlydH/4+z/6/L/8PT/9/n/+/z//f7//v//AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/8fX/6/L/3uf/ + mKTkLzibAABoAAB0Fx+HDBh7FSGDAg16AABYAABlCBB/Ji2UhYza1+D/6PL/7fL/9Pf/+vv//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/9/n/ + 8PT/7PT/z9j/XmO+AABtAABcMDSXoajsu8X7VV+5hYzblZ/fTVSxFSKMAABkAABnAAN2Qkmpsbrz5e3/ + 6vH/8fX/+Pr//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/P3/9/n/8PX/7PT/vcn3LTOZAABaAgR1ZWzD0Nf/5vL/1OP/l53lzs3/6fP/4+7/sLzwZ23CBxSD + AABnAABlHiaSmqHo3+j/5+//7/T/9vn//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/ + /v7//v7//v7//f7/+/z/9vj/7vP/7PX/tcLzEBeGAABkPEWlqLPt2eX/4e7/3On/uMX1gofVe3vPhYzY + z93+5/X/4e3/lJ3gHiOPAABtAABqChiEbHLIytD/5/D/7PL/8/f/+Pr/+fr/+Pr/+Pr/+Pr/+Pr/+Pr/ + +Pr/+fv/+vv/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+fv/9/n/9vj/9fj/9Pf/8fX/7PL/4uv/l6HgDhF7AAN4iZDe0d7/3uz/4vD/w83/VVm3 + ICiSAAFyAABlAABwaHTD1N//2un/3er/w838ZW3BEyOJJzKVAQ16NDmfwsn75fD/5u7/7PL/7vP/7fP/ + 7fP/7fL/7fP/7vP/7/T/8fb/9Pj/9vn/+fr//f3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/+Pr/9Pf/8fX/7vT/7PL/6/L/6fH/5u7/6vX/tsD0CQx4AAFwkZvi7ff/4vD/ + 4fD/z9j/OkGlAABiAABwBxWAAAt7BBN+P0uofYLUztb/4O7/6fb/6fP/qa7xQkyoBg56AABqMjugx8/+ + 5fH/4Ov/4On/3uj/3eb/3+j/3uj/1+L/0d3/1d7/3+f/7fL/9vj/+vz//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+fr/8/f/6/L/2d//v8j6vcf5ucP1wMv8wM3+vMj6PkqoAABo + UF25usP7tsPyvsr6sLrwQ0utAABqAAV1OUameIDRKDWZAAd2GyeOLDecmaHntsL0pbLom6riq7LzUlu0 + AANzBhR/AAZ0NT+ja3bBY2i/XGG6UViyWl65XGG7XGC6TVWvQU6pPkalODygqK7p8vb/+vz//v7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/7/T/wcj2R0ysExeFERmGDxuIFB6K + FBqICxSEAABsAAByDBiDCRSBBRCADhaFCRODAAh4AxF/AAl4CxeDHSaPAAp6AAN0AA19AAd3CBOBEBqH + BhGBAAh5AABwAAByAAh5BhSCAxWCAABsAABvAABlAABnAABxAABjAABmAABhAABdAABYAABhCAt/q7Lr + 8/f/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+fv/3uT/SE2vAABn + CBB/GiCMLzmfLTWcGByJFRyKGCOOMj2gHymRDxiGGyOPLDCXBRF/AAh3BhaCEyKMICqTKC2WNDqfIzCV + Awx6Eh+JHiaPAAR3AAZ5CxSDICWQX2q7Q1CqAA1+AAFxDxuHiZTbVGC4dHnQnabrTVqzY23EUV62Slau + LjaZXWm9sLjz5ez/9vn/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +Pv/4+n+e4LPfoPVpqv2vsf/zNX/zdb/xtH/v8v8pK7spKfysLb3vcr4ws784ej/hI/YAAZ1AAJzVF25 + yM//3Of/5+//i5LcAABpMzyfp6vxoKznlqHhqbbtx9H/8fz/kpvfAABiAABph4zc5PD/2OP/193/3un/ + 1+D/2OH/1+D/0Nr/zNL/3+j/6/L/7/T/9vn//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+Pr/9Pf/6vD/5u3/3+b/4uv/6PD/5+//5O3/5/P/sL3sXmS7mZzoz9f/3+z/4e// + mKLiEiKKCBF/KTWZr7T06/f/3ev/VF2zChSBipPcz9v+4u7/3ur/3ev/5/X/qrPrISmSDRJ2Xmq/3ur/ + 4uv/6vH/7fP/7fL/7/T/7vP/7fP/7fP/8PX/8fX/9Pf/+Pr/+/z//v7/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+Pr/9vn/9Pf/8vb/8vb/8/b/9Pf/7/T/6/L/tL/ubXLH + en/Ti43gqavy0t3/nafjMj6fJzaaAAV1GyeOYmW7Nz6fAABgNj6i1N//3uz/2uX/3Oj/5PH/wcj7FR2J + AAN0gong0tr/6fH/7/P/9vj/+Pr/+fv/+fv/+Pr/+Pr/+Pr/+fv/+vv//P3//f7//v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+/z/+/z/+/z//f3//f7/ + +fv/8fX/5Oz/jpbfc3jObnXLcXfOk5rks7b4iY3dR1KvDhuEAABoAABlEBV9U12ytcD13Or/3en/3ej/ + 1eL/q7fvGR+MKDKZbnnNxc/76PD/8fX/+fr//f7//v//AAAA/v7//f7//f3//P3//f3//f7//v//AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//f7//v7/AAAA + AAAAAAAAAAAAAAAA/f7/9vn/7/T/yNH5lJrleoDVmZ3pmpzpc3nPfoTWf4bYVFy3HSaLZ3PGsrb8v8r8 + y9n9q7jre4LRf4fUgIvXAwZ1AABrhYjb0NX/6PH/8PX/+Pr//f7/AAAAAAAA/v///f3/+vv/+Pr/9/r/ + 9/n/+Pr/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f7/+/z/+fr/9vj/9/n/ + +vz/+vv/+/z//v7/AAAAAAAAAAAAAAAA/v7/+vz/8/f/7PL/2uT/t8H1srP6vcH+nKTnSlOxV2C7TVaz + WGS8QUqmSlSuSFOtR1GtbXTKVl23ARB5AAh2AABnd33P3eP/4ur/7/T/9/n//P3/AAAAAAAAAAAA/P3/ + 9/n/8vb/7PH/6fD/7PL/7vP/8vb/9vn/+/z//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/+Pr/ + 8/b/7/T/8Pb/6vH/3eP97vL++fr//P3/AAAAAAAAAAAAAAAAAAAA/f7/+vv/9fj/7/T/5+//z9f+t7v4 + uLn9Z2zFLzucFCGIMz6gGCCMAAd4AAl2Dx2EER+GXWK8c3XLKzKXd4LP4er/6/L/8PX/9/n//P3//v// + AAAAAAAA/v7/+fv/8/b/7PP/y9H/i4/erLbt4er/5e3/7fP/8/b/+fv//f3//v7/AAAAAAAAAAAAAAAA + /v7/+/z/9vj/8PT/6/L/3+n/x9H9aHTAZGvG3+b9+Pr/+/z/AAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + +Pr/8vb/6/H/3OX+wMn4maDmdHrPWGG6T1a1eoHWcHfOTlayUlq1SlKubHjAxMj/0dn/4+v/7PL/8vb/ + +Pr//P3//v7/AAAAAAAAAAAA/f7/+fr/7vP/xsv5YGXAHymRKjKYYWS9rbLz4u3/6/P/8vb/+fr//f7/ + AAAAAAAAAAAA/v//+/z/9vj/7fL/5e3/xs7/Y23BIiiSAABeLTab3+b/9/r/+/z/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAA/f7/+vz/9vj/8PX/6vH/3eb/ydL8xM/6uMPyt733w8j/zNb/1Nz/3OT/4uz/5u7/ + 7fP/8vb/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAA/f7/+fv/7vP/jpHiAAJ1CxaBER6GAABoFRmGbXbH + 0Nf/7PL/9fj//P3/AAAAAAAAAAAA/v7/+fv/8/f/4Of/hYvbKDGZAABuAABdAAZyi5La5+7/9vn/+/z/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/9ff/8vb/7/X/7fP/6/L/5u3/5ez/6fD/ + 7PP/7/T/8fX/9Pf/9/n/+vv//P3//v7//v//AAAAAAAAAAAAAAAAAAAA/v7/+fv/8fb/2eH9fIbQExqH + AABrAAp6AAFyAABwS0+uztX39vn/+vz/AAAAAAAAAAAA/f7/+Pr/8ff/qbLpAABrAABhAABwDBWAfobX + 5e3/8PX/9vn//f3/AAAAAAAA/v///f7/+/z/+vv/+vv/+vz//P3//v7//v///v7//P3/+vz/+Pr/9/n/ + 9vj/9vj/9vj/9vj/9/n/+fr/+/z//P3//f7//v7//f7//P3/+/z/+vz/+/z//P3//v7/AAAA/v7/+/z/ + 9fj/7/T/5/H/uML1U1e1AAh5AABuAABvMjmdv8bz9vr/+vv/AAAAAAAAAAAA/f7/+fv/7/T/iY7aDxSA + GiONa3XHsr7w4Oj/6/H/9Pf/+vz//v7/AAAA/v///P3/+Pr/9Pf/8/f/9fj/9fj/9vn/+/z//v7/AAAA + AAAAAAAA/v7//f7//P3/+/z/+/z//P3//f7//v//AAAAAAAAAAAA/v7/+/z/9/n/9vn/9vn/9Pj/9vn/ + +/z//v7/AAAA/f7/+vz/9fj/7/T/6vL/3ef/i5PbGRqJBQl5jJbZ6vH/9Pj/+/z/AAAAAAAAAAAA/f7/ + +fv/8fT/1Nn9t7/0wcr54er/7fT/8fX/9fj/+vv//f7/AAAAAAAA/f3/+Pr/8PT/6/L/3uX/ztb/5Or/ + 8/f/+Pr//f7/AAAAAAAAAAAA/f7/+vz/+Pr/+fv/+fv/+vv//f3//v//AAAAAAAAAAAA/P3/9/n/7vL/ + 193/ztf/5u3/7vP/9Pf/+/z//v7/AAAA/v7//P3/+Pr/8fX/7PP/5/D/sLfxoKnk4+r/8vf/9/n//f3/ + AAAAAAAAAAAA/v7/+/z/9vn/9Pf/8vb/8fb/8fX/9Pf/+Pr//P3//v7/AAAAAAAA/v7/+vv/8vb/5+7/ + y9H/WWO9KSmSkZXj6vD/+Pv//P3/AAAAAAAA/f7/+Pr/9fj/8vb/6O7/7vP/9fj/+Pr//f7/AAAAAAAA + /v//+vv/8vb/7PP/hYraKiqKlp7i6PD/7fP/9ff/+/z//v7/AAAAAAAA/f7/+vv/9ff/8fX/8PX/8vb/ + 8/f/9vn/+/z//v7/AAAAAAAAAAAAAAAA/f7/+/z/+vv/+fr/+fr/+vv//P3//v7/AAAAAAAAAAAAAAAA + /P3/9fj/7PL/1d7/RUysAABhAABlg4ja6/D/+Pr//P3/AAAAAAAA+/z/9fj/6e7/2eD/h4/bnaXg7PH/ + 9fj/+/z/AAAAAAAA/v7/+Pr/8PX/y9X1JDGVAABaERWDoKnp6PH/7vP/9/n//P3/AAAAAAAAAAAA/v7/ + /P3/+vv/+fv/+fv/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//v7//v7//v//AAAAAAAA + AAAAAAAAAAAA/v7/+fv/8PX/7PX/ipPdAABsAABlQ1Cp3Ob/7vP/9/n//f7/AAAAAAAA+fv/9Pj/yNH5 + Ule2DBJ8Ljie0df+8fb/+fv//v7/AAAA/v7/+Pr/7/X/hY3YAABxAAl7AABuEBaEs7nz6fH/8fX/+vv/ + /v7/AAAAAAAAAAAAAAAA/v///v7//v7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9vn/7PL/0tn/LzidAQFsAAB0iZHb6vP/8PT/+fv//v//AAAA + /v7/+Pr/8vf/r7rqAAV4AABdPUen1N//7PL/9vn//f7/AAAA/v7/+fr/7/T/yc75S1G0AABrARKAAABp + Qker0df/7fP/9/n//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/5+7/cXXNAAd2AABuMDebzdT97PL/ + 9vj//P3/AAAAAAAA/v7/9/n/7/X/tL/uFCCLAABqHSqRvcf46fD/9Pf//f3/AAAAAAAA+vv/8vX/6vH/ + yM3+JC2XAABtAAV2Agx9q7Ly7vT/9vn//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/4uj/WWO1AAVx + KTaYu8T07fT/8vb/+vv//v7/AAAAAAAA/v7/9/n/7vX/vsn1Iy2SAABrAQ99mp/o6PD/9Pf//P3/AAAA + AAAA/P3/9/n/7vP/6fL/s7z2DBB/AABeQ0uttrr56e7/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +fv/4ef6g4zNbXfFw8v27fT/8vb/+Pr//f3/AAAAAAAAAAAA/v7/9/n/7vT/yNL7MjucAABtBxF/nKLo + 6fH/9Pf//P3/AAAAAAAA/v7/+/z/9fj/7fL/6/T/jZXbLzScrrP14en/7fL/+fv//v7/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+vz/8PP91dr34+f/8vb/8/f/9/r//P3//v//AAAAAAAAAAAA/v7/+Pr/8PX/1N3/ + QUqmAQRxBQ98m6Dm7PL/9fj//P3/AAAAAAAAAAAA/v7/+/z/9ff/8PX/5ez/ytH94ej/8vb/9vj/+/z/ + /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA + /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ + 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA + AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file diff --git a/Project/Panels/ProjectExplorerPanel.cs b/Project/Panels/ProjectExplorerPanel.cs index 9fff95b..4a9ed99 100644 --- a/Project/Panels/ProjectExplorerPanel.cs +++ b/Project/Panels/ProjectExplorerPanel.cs @@ -486,7 +486,7 @@ namespace CodeWalker.Project.Panels for (int i = 0; i < zonelists.Count; i++) { var zonelist = zonelists[i]; - var tnode = zonelistsnode.Nodes.Add(zonelist.ToString()); + var tnode = zonelistsnode.Nodes.Add(zonelist.NameHash.ToString()); tnode.Tag = zonelist; } } @@ -499,7 +499,7 @@ namespace CodeWalker.Project.Panels for (int i = 0; i < emitterlists.Count; i++) { var emitterlist = emitterlists[i]; - var tnode = emitterlistsnode.Nodes.Add(emitterlist.ToString()); + var tnode = emitterlistsnode.Nodes.Add(emitterlist.NameHash.ToString()); tnode.Tag = emitterlist; } } @@ -1447,7 +1447,7 @@ namespace CodeWalker.Project.Panels var tn = FindAudioZoneListTreeNode(list); if (tn != null) { - tn.Text = list.ToString(); + tn.Text = list.NameHash.ToString(); } } public void UpdateAudioEmitterListTreeNode(Dat151AmbientEmitterList list) @@ -1455,7 +1455,7 @@ namespace CodeWalker.Project.Panels var tn = FindAudioEmitterListTreeNode(list); if (tn != null) { - tn.Text = list.ToString(); + tn.Text = list.NameHash.ToString(); } } diff --git a/Project/ProjectForm.Designer.cs b/Project/ProjectForm.Designer.cs index 695abbb..c935b08 100644 --- a/Project/ProjectForm.Designer.cs +++ b/Project/ProjectForm.Designer.cs @@ -86,6 +86,8 @@ this.YtypNameMenu = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator13 = new System.Windows.Forms.ToolStripSeparator(); this.YtypNewArchetypeMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.YtypMloToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.YtypMloNewEntityToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator15 = new System.Windows.Forms.ToolStripSeparator(); this.YtypAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); this.YtypRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); @@ -156,8 +158,16 @@ this.ToolbarSaveButton = new System.Windows.Forms.ToolStripButton(); this.ToolbarSaveAllButton = new System.Windows.Forms.ToolStripButton(); this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); - this.YtypMloToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.YtypMloNewEntityToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.AudioMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.AudioNameMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator23 = new System.Windows.Forms.ToolStripSeparator(); + this.AudioNewAmbientEmitterMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.AudioNewAmbientZoneMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.AudioNewAmbientEmitterListMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.AudioNewAmbientZoneListMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator24 = new System.Windows.Forms.ToolStripSeparator(); + this.AudioAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.AudioRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); this.MainMenu.SuspendLayout(); this.MainToolbar.SuspendLayout(); this.SuspendLayout(); @@ -174,6 +184,7 @@ this.YnvMenu, this.TrainsMenu, this.ScenarioMenu, + this.AudioMenu, this.ToolsMenu, this.RenderMenu}); this.MainMenu.Location = new System.Drawing.Point(0, 0); @@ -285,54 +296,54 @@ // FileOpenProjectMenu // this.FileOpenProjectMenu.Name = "FileOpenProjectMenu"; - this.FileOpenProjectMenu.Size = new System.Drawing.Size(152, 22); + this.FileOpenProjectMenu.Size = new System.Drawing.Size(149, 22); this.FileOpenProjectMenu.Text = "Project..."; this.FileOpenProjectMenu.Click += new System.EventHandler(this.FileOpenProjectMenu_Click); // // toolStripSeparator9 // this.toolStripSeparator9.Name = "toolStripSeparator9"; - this.toolStripSeparator9.Size = new System.Drawing.Size(149, 6); + this.toolStripSeparator9.Size = new System.Drawing.Size(146, 6); // // FileOpenYmapMenu // this.FileOpenYmapMenu.Name = "FileOpenYmapMenu"; - this.FileOpenYmapMenu.Size = new System.Drawing.Size(152, 22); + this.FileOpenYmapMenu.Size = new System.Drawing.Size(149, 22); this.FileOpenYmapMenu.Text = "Ymap File..."; this.FileOpenYmapMenu.Click += new System.EventHandler(this.FileOpenYmapMenu_Click); // // FileOpenYtypMenu // this.FileOpenYtypMenu.Name = "FileOpenYtypMenu"; - this.FileOpenYtypMenu.Size = new System.Drawing.Size(152, 22); + this.FileOpenYtypMenu.Size = new System.Drawing.Size(149, 22); this.FileOpenYtypMenu.Text = "Ytyp File..."; this.FileOpenYtypMenu.Click += new System.EventHandler(this.FileOpenYtypMenu_Click); // // FileOpenYndMenu // this.FileOpenYndMenu.Name = "FileOpenYndMenu"; - this.FileOpenYndMenu.Size = new System.Drawing.Size(152, 22); + this.FileOpenYndMenu.Size = new System.Drawing.Size(149, 22); this.FileOpenYndMenu.Text = "Ynd File..."; this.FileOpenYndMenu.Click += new System.EventHandler(this.FileOpenYndMenu_Click); // // FileOpenYnvMenu // this.FileOpenYnvMenu.Name = "FileOpenYnvMenu"; - this.FileOpenYnvMenu.Size = new System.Drawing.Size(152, 22); + this.FileOpenYnvMenu.Size = new System.Drawing.Size(149, 22); this.FileOpenYnvMenu.Text = "Ynv File..."; this.FileOpenYnvMenu.Click += new System.EventHandler(this.FileOpenYnvMenu_Click); // // FileOpenTrainsMenu // this.FileOpenTrainsMenu.Name = "FileOpenTrainsMenu"; - this.FileOpenTrainsMenu.Size = new System.Drawing.Size(152, 22); + this.FileOpenTrainsMenu.Size = new System.Drawing.Size(149, 22); this.FileOpenTrainsMenu.Text = "Trains File..."; this.FileOpenTrainsMenu.Click += new System.EventHandler(this.FileOpenTrainsMenu_Click); // // FileOpenScenarioMenu // this.FileOpenScenarioMenu.Name = "FileOpenScenarioMenu"; - this.FileOpenScenarioMenu.Size = new System.Drawing.Size(152, 22); + this.FileOpenScenarioMenu.Size = new System.Drawing.Size(149, 22); this.FileOpenScenarioMenu.Text = "Scenario File..."; this.FileOpenScenarioMenu.Click += new System.EventHandler(this.FileOpenScenarioMenu_Click); // @@ -626,6 +637,22 @@ this.YtypNewArchetypeMenu.Text = "New Archetype"; this.YtypNewArchetypeMenu.Click += new System.EventHandler(this.YtypNewArchetypeMenu_Click); // + // YtypMloToolStripMenuItem + // + this.YtypMloToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.YtypMloNewEntityToolStripMenuItem}); + this.YtypMloToolStripMenuItem.Enabled = false; + this.YtypMloToolStripMenuItem.Name = "YtypMloToolStripMenuItem"; + this.YtypMloToolStripMenuItem.Size = new System.Drawing.Size(192, 22); + this.YtypMloToolStripMenuItem.Text = "Mlo"; + // + // YtypMloNewEntityToolStripMenuItem + // + this.YtypMloNewEntityToolStripMenuItem.Name = "YtypMloNewEntityToolStripMenuItem"; + this.YtypMloNewEntityToolStripMenuItem.Size = new System.Drawing.Size(131, 22); + this.YtypMloNewEntityToolStripMenuItem.Text = "New Entity"; + this.YtypMloNewEntityToolStripMenuItem.Click += new System.EventHandler(this.YtypMloNewEntityToolStripMenuItem_Click); + // // toolStripSeparator15 // this.toolStripSeparator15.Name = "toolStripSeparator15"; @@ -1187,21 +1214,87 @@ this.toolStripSeparator5.Name = "toolStripSeparator5"; this.toolStripSeparator5.Size = new System.Drawing.Size(6, 25); // - // YtypMloToolStripMenuItem + // AudioMenu // - this.YtypMloToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.YtypMloNewEntityToolStripMenuItem}); - this.YtypMloToolStripMenuItem.Enabled = false; - this.YtypMloToolStripMenuItem.Name = "YtypMloToolStripMenuItem"; - this.YtypMloToolStripMenuItem.Size = new System.Drawing.Size(192, 22); - this.YtypMloToolStripMenuItem.Text = "Mlo"; + this.AudioMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.AudioNameMenu, + this.toolStripSeparator23, + this.AudioNewAmbientEmitterMenu, + this.AudioNewAmbientEmitterListMenu, + this.AudioNewAmbientZoneMenu, + this.AudioNewAmbientZoneListMenu, + this.toolStripSeparator24, + this.AudioAddToProjectMenu, + this.AudioRemoveFromProjectMenu}); + this.AudioMenu.Name = "AudioMenu"; + this.AudioMenu.Size = new System.Drawing.Size(51, 20); + this.AudioMenu.Text = "Audio"; + this.AudioMenu.Visible = false; // - // YtypMloNewEntityToolStripMenuItem + // AudioNameMenu // - this.YtypMloNewEntityToolStripMenuItem.Name = "YtypMloNewEntityToolStripMenuItem"; - this.YtypMloNewEntityToolStripMenuItem.Size = new System.Drawing.Size(152, 22); - this.YtypMloNewEntityToolStripMenuItem.Text = "New Entity"; - this.YtypMloNewEntityToolStripMenuItem.Click += new System.EventHandler(this.YtypMloNewEntityToolStripMenuItem_Click); + this.AudioNameMenu.Enabled = false; + this.AudioNameMenu.Name = "AudioNameMenu"; + this.AudioNameMenu.Size = new System.Drawing.Size(216, 22); + this.AudioNameMenu.Text = "(No audio dat file selected)"; + // + // toolStripSeparator23 + // + this.toolStripSeparator23.Name = "toolStripSeparator23"; + this.toolStripSeparator23.Size = new System.Drawing.Size(213, 6); + // + // AudioNewAmbientEmitterMenu + // + this.AudioNewAmbientEmitterMenu.Enabled = false; + this.AudioNewAmbientEmitterMenu.Name = "AudioNewAmbientEmitterMenu"; + this.AudioNewAmbientEmitterMenu.Size = new System.Drawing.Size(216, 22); + this.AudioNewAmbientEmitterMenu.Text = "New Ambient Emitter"; + this.AudioNewAmbientEmitterMenu.Click += new System.EventHandler(this.AudioNewAmbientEmitterMenu_Click); + // + // AudioNewAmbientZoneMenu + // + this.AudioNewAmbientZoneMenu.Enabled = false; + this.AudioNewAmbientZoneMenu.Name = "AudioNewAmbientZoneMenu"; + this.AudioNewAmbientZoneMenu.Size = new System.Drawing.Size(216, 22); + this.AudioNewAmbientZoneMenu.Text = "New Ambient Zone"; + this.AudioNewAmbientZoneMenu.Click += new System.EventHandler(this.AudioNewAmbientZoneMenu_Click); + // + // AudioNewAmbientEmitterListMenu + // + this.AudioNewAmbientEmitterListMenu.Enabled = false; + this.AudioNewAmbientEmitterListMenu.Name = "AudioNewAmbientEmitterListMenu"; + this.AudioNewAmbientEmitterListMenu.Size = new System.Drawing.Size(216, 22); + this.AudioNewAmbientEmitterListMenu.Text = "New Ambient Emitter List"; + this.AudioNewAmbientEmitterListMenu.Click += new System.EventHandler(this.AudioNewAmbientEmitterListMenu_Click); + // + // AudioNewAmbientZoneListMenu + // + this.AudioNewAmbientZoneListMenu.Enabled = false; + this.AudioNewAmbientZoneListMenu.Name = "AudioNewAmbientZoneListMenu"; + this.AudioNewAmbientZoneListMenu.Size = new System.Drawing.Size(216, 22); + this.AudioNewAmbientZoneListMenu.Text = "New Ambient Zone List"; + this.AudioNewAmbientZoneListMenu.Click += new System.EventHandler(this.AudioNewAmbientZoneListMenu_Click); + // + // toolStripSeparator24 + // + this.toolStripSeparator24.Name = "toolStripSeparator24"; + this.toolStripSeparator24.Size = new System.Drawing.Size(213, 6); + // + // AudioAddToProjectMenu + // + this.AudioAddToProjectMenu.Enabled = false; + this.AudioAddToProjectMenu.Name = "AudioAddToProjectMenu"; + this.AudioAddToProjectMenu.Size = new System.Drawing.Size(216, 22); + this.AudioAddToProjectMenu.Text = "Add to Project"; + this.AudioAddToProjectMenu.Click += new System.EventHandler(this.AudioAddToProjectMenu_Click); + // + // AudioRemoveFromProjectMenu + // + this.AudioRemoveFromProjectMenu.Enabled = false; + this.AudioRemoveFromProjectMenu.Name = "AudioRemoveFromProjectMenu"; + this.AudioRemoveFromProjectMenu.Size = new System.Drawing.Size(216, 22); + this.AudioRemoveFromProjectMenu.Text = "Remove from Project"; + this.AudioRemoveFromProjectMenu.Click += new System.EventHandler(this.AudioRemoveFromProjectMenu_Click); // // ProjectForm // @@ -1357,5 +1450,15 @@ private System.Windows.Forms.ToolStripMenuItem YtypMloToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem YtypMloNewEntityToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem ToolsNavMeshGeneratorMenu; + private System.Windows.Forms.ToolStripMenuItem AudioMenu; + private System.Windows.Forms.ToolStripMenuItem AudioNameMenu; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator23; + private System.Windows.Forms.ToolStripMenuItem AudioNewAmbientEmitterMenu; + private System.Windows.Forms.ToolStripMenuItem AudioNewAmbientEmitterListMenu; + private System.Windows.Forms.ToolStripMenuItem AudioNewAmbientZoneMenu; + private System.Windows.Forms.ToolStripMenuItem AudioNewAmbientZoneListMenu; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator24; + private System.Windows.Forms.ToolStripMenuItem AudioAddToProjectMenu; + private System.Windows.Forms.ToolStripMenuItem AudioRemoveFromProjectMenu; } } \ No newline at end of file diff --git a/Project/ProjectForm.cs b/Project/ProjectForm.cs index d10334b..614835c 100644 --- a/Project/ProjectForm.cs +++ b/Project/ProjectForm.cs @@ -450,20 +450,40 @@ namespace CodeWalker.Project (panel) => { panel.SetRoom(CurrentMloRoom); }, //updateFunc (panel) => { return panel.CurrentRoom == CurrentMloRoom; }); //findFunc } - public void ShowEditAudioFilePanel(bool promote) //TODO + public void ShowEditAudioFilePanel(bool promote) { + ShowPanel(promote, + () => { return new EditAudioFilePanel(this); }, //createFunc + (panel) => { panel.SetFile(CurrentAudioFile); }, //updateFunc + (panel) => { return panel.CurrentFile == CurrentAudioFile; }); //findFunc } - public void ShowEditAudioZonePanel(bool promote) //TODO + public void ShowEditAudioZonePanel(bool promote) { + ShowPanel(promote, + () => { return new EditAudioZonePanel(this); }, //createFunc + (panel) => { panel.SetZone(CurrentAudioZone); }, //updateFunc + (panel) => { return panel.CurrentZone == CurrentAudioZone; }); //findFunc } - public void ShowEditAudioEmitterPanel(bool promote) //TODO + public void ShowEditAudioEmitterPanel(bool promote) { + ShowPanel(promote, + () => { return new EditAudioEmitterPanel(this); }, //createFunc + (panel) => { panel.SetEmitter(CurrentAudioEmitter); }, //updateFunc + (panel) => { return panel.CurrentEmitter == CurrentAudioEmitter; }); //findFunc } - public void ShowEditAudioZoneListPanel(bool promote) //TODO + public void ShowEditAudioZoneListPanel(bool promote) { + ShowPanel(promote, + () => { return new EditAudioZoneListPanel(this); }, //createFunc + (panel) => { panel.SetZoneList(CurrentAudioZoneList); }, //updateFunc + (panel) => { return panel.CurrentZoneList == CurrentAudioZoneList; }); //findFunc } - public void ShowEditAudioEmitterListPanel(bool promote) //TODO + public void ShowEditAudioEmitterListPanel(bool promote) { + ShowPanel(promote, + () => { return new EditAudioEmitterListPanel(this); }, //createFunc + (panel) => { panel.SetEmitterList(CurrentAudioEmitterList); }, //updateFunc + (panel) => { return panel.CurrentEmitterList == CurrentAudioEmitterList; }); //findFunc } private void ShowCurrentProjectItem(bool promote) @@ -931,6 +951,23 @@ namespace CodeWalker.Project } } + foreach (var datrel in CurrentProjectFile.AudioRelFiles) + { + string filename = datrel.FilePath; + if (!File.Exists(filename)) + { + filename = cpath + "\\" + filename; + } + if (File.Exists(filename)) + { + LoadAudioRelFromFile(datrel, filename); + } + else + { + MessageBox.Show("Couldn't find file: " + filename); + } + } + LoadProjectUI(); } @@ -1016,6 +1053,19 @@ namespace CodeWalker.Project } } + foreach (var datrel in CurrentProjectFile.AudioRelFiles) + { + if ((datrel != null) && (datrel.HasChanged)) + { + //save the current scenario file first? + if (MessageBox.Show("Would you like to save " + datrel.Name + " before closing?", "Save scenario file before closing?", MessageBoxButtons.YesNo) == DialogResult.Yes) + { + CurrentAudioFile = datrel; + SaveAudioFile(); + } + } + } + if (CurrentProjectFile.HasChanged) { @@ -4276,14 +4326,131 @@ namespace CodeWalker.Project - public void NewAudioFile() //TODO + public void NewAudioFile() { + if (CurrentProjectFile == null) + { + NewProject(); + } + if (CurrentProjectFile == null) return; + + int testi = 1; + string fname = string.Empty; + bool filenameok = false; + while (!filenameok) + { + fname = "dlc" + testi.ToString() + "_game.dat151.rel"; + filenameok = !CurrentProjectFile.ContainsAudioRel(fname); + testi++; + } + + lock (projectsyncroot) + { + RelFile rel = CurrentProjectFile.AddAudioRelFile(fname); + if (rel != null) + { + //init stuff.. //TODO + } + } + + CurrentProjectFile.HasChanged = true; + + LoadProjectTree(); } - public void OpenAudioFile() //TODO + public void OpenAudioFile() { + string[] files = ShowOpenDialogMulti("DatRel files|*.rel", string.Empty); //TODO: better filter? + if (files == null) + { + return; + } + + if (CurrentProjectFile == null) + { + NewProject(); + } + + foreach (string file in files) + { + if (!File.Exists(file)) continue; + + var rel = CurrentProjectFile.AddAudioRelFile(file); + + if (rel != null) + { + SetProjectHasChanged(true); + + LoadAudioRelFromFile(rel, file); + + LoadProjectTree(); + } + else + { + MessageBox.Show("Couldn't add\n" + file + "\n - the file already exists in the project."); + } + + } } - public void SaveAudioFile(bool saveas = false) //TODO + public void SaveAudioFile(bool saveas = false) { + if (CurrentAudioFile == null) return; + string relname = CurrentAudioFile.Name; + string filepath = CurrentAudioFile.FilePath; + if (string.IsNullOrEmpty(filepath)) + { + filepath = relname; + } + string origfile = filepath; + if (!File.Exists(filepath)) + { + saveas = true; + } + + + byte[] data; + lock (projectsyncroot) //need to sync writes to scenario... + { + saveas = saveas || string.IsNullOrEmpty(filepath); + if (saveas) + { + filepath = ShowSaveDialog("DatRel files|*.rel", filepath); + if (string.IsNullOrEmpty(filepath)) + { + return; + } + + string newname = Path.GetFileNameWithoutExtension(filepath); + JenkIndex.Ensure(newname); + CurrentAudioFile.FilePath = filepath; + CurrentAudioFile.RpfFileEntry.Name = new FileInfo(filepath).Name; + CurrentAudioFile.Name = CurrentAudioFile.RpfFileEntry.Name; + } + + data = CurrentAudioFile.Save(); + } + + if (data != null) + { + File.WriteAllBytes(filepath, data); + } + + SetAudioFileHasChanged(false); + + if (saveas) + { + //ShowEditAudioFilePanel(false); + if (CurrentProjectFile != null) + { + string origpath = CurrentProjectFile.GetRelativePath(origfile); + string newpath = CurrentProjectFile.GetRelativePath(CurrentAudioFile.FilePath); + if (!CurrentProjectFile.RenameAudioRel(origpath, newpath)) + { //couldn't rename it in the project? happens when project not saved yet... + //MessageBox.Show("Couldn't rename audio rel in project! This shouldn't happen - check the project file XML."); + } + } + SetProjectHasChanged(true); + SetCurrentSaveItem(); + } } public void AddAudioFileToProject(RelFile rel) { @@ -4328,6 +4495,7 @@ namespace CodeWalker.Project public void NewAudioZone(AudioPlacement copy = null, bool copyPosition = false) //TODO { + MessageBox.Show("NewAudioZone TODO!"); } public bool DeleteAudioZone() //TODO { @@ -4340,6 +4508,7 @@ namespace CodeWalker.Project public void NewAudioEmitter(AudioPlacement copy = null, bool copyPosition = false) //TODO { + MessageBox.Show("NewAudioEmitter TODO!"); } public bool DeleteAudioEmitter() //TODO { @@ -4352,6 +4521,7 @@ namespace CodeWalker.Project public void NewAudioZoneList() //TODO { + MessageBox.Show("NewAudioZoneList TODO!"); } public bool DeleteAudioZoneList() //TODO { @@ -4364,6 +4534,7 @@ namespace CodeWalker.Project public void NewAudioEmitterList() //TODO { + MessageBox.Show("NewAudioEmitterList TODO!"); } public bool DeleteAudioEmitterList() //TODO { @@ -4575,6 +4746,31 @@ namespace CodeWalker.Project } } + } + public void GetVisibleAudioPlacements(Camera camera, List placements) + { + if (hidegtavmap) + { + placements.Clear(); + } + + if (CurrentProjectFile == null) return; + + lock (projectsyncroot) + { + + for (int i = 0; i < CurrentProjectFile.AudioRelFiles.Count; i++) + { + var auddat = CurrentProjectFile.AudioRelFiles[i]; + if (auddat.Loaded) + { + //TODO: create AudioPlacement objects for project audio files! + } + } + + } + + } public MloInstanceData TryGetMloInstance(MloArchetype arch) @@ -5417,8 +5613,11 @@ namespace CodeWalker.Project ymt.Load(data); } - private void LoadAudioRelFromFile(RelFile rel, string filename) //TODO + private void LoadAudioRelFromFile(RelFile rel, string filename) { + byte[] data = File.ReadAllBytes(filename); + + rel.Load(data, rel?.RpfFileEntry); } @@ -5665,8 +5864,33 @@ namespace CodeWalker.Project WorldForm.EnableScenarioUI(enable, CurrentScenario?.Name ?? ""); } } - private void RefreshAudioUI() //TODO + private void RefreshAudioUI() { + bool enable = (CurrentAudioFile != null); + bool inproj = AudioFileExistsInProject(CurrentAudioFile); + + AudioNewAmbientEmitterMenu.Enabled = enable && inproj; + AudioNewAmbientEmitterListMenu.Enabled = enable && inproj; + AudioNewAmbientZoneMenu.Enabled = enable && inproj; + AudioNewAmbientZoneListMenu.Enabled = enable && inproj; + + if (CurrentAudioFile != null) + { + AudioNameMenu.Text = "(" + CurrentAudioFile.Name + ")"; + } + else + { + AudioNameMenu.Text = "(No audio dat file selected)"; + } + + AudioAddToProjectMenu.Enabled = enable && !inproj; + AudioRemoveFromProjectMenu.Enabled = inproj; + AudioMenu.Visible = enable; + + if (WorldForm != null) + { + WorldForm.EnableAudioUI(enable, CurrentAudioFile?.Name ?? ""); + } } @@ -6028,6 +6252,31 @@ namespace CodeWalker.Project RemoveScenarioFromProject(); } + private void AudioNewAmbientEmitterMenu_Click(object sender, EventArgs e) + { + NewAudioEmitter(); + } + private void AudioNewAmbientEmitterListMenu_Click(object sender, EventArgs e) + { + NewAudioEmitterList(); + } + private void AudioNewAmbientZoneMenu_Click(object sender, EventArgs e) + { + NewAudioZone(); + } + private void AudioNewAmbientZoneListMenu_Click(object sender, EventArgs e) + { + NewAudioZoneList(); + } + private void AudioAddToProjectMenu_Click(object sender, EventArgs e) + { + AddAudioFileToProject(CurrentAudioFile); + } + private void AudioRemoveFromProjectMenu_Click(object sender, EventArgs e) + { + RemoveAudioFileFromProject(); + } + private void ToolsManifestGeneratorMenu_Click(object sender, EventArgs e) { ShowEditProjectManifestPanel(false); @@ -6138,5 +6387,6 @@ namespace CodeWalker.Project { SaveAll(); } + } } diff --git a/WorldForm.cs b/WorldForm.cs index 2b1e2d5..60ba99e 100644 --- a/WorldForm.cs +++ b/WorldForm.cs @@ -138,7 +138,7 @@ namespace CodeWalker bool renderaudiozones = false; bool renderaudioouterbounds = true; - + List renderaudzonelist = new List(); bool MapViewEnabled = false; int MapViewDragX = 0; @@ -850,12 +850,15 @@ namespace CodeWalker { if (!audiozones.Inited) return; - //renderaudzonelist.Clear(); - //renderaudzonelist.AddRange(audzones.Zones.Values); + renderaudzonelist.Clear(); + for (int i = 0; i < audiozones.AllItems.Count; i++) + { + renderaudzonelist.Add(audiozones.AllItems[i]); + } if (ProjectForm != null) { - //ProjectForm.GetVisibleAudioZones(camera, renderaudzonelist); + ProjectForm.GetVisibleAudioPlacements(camera, renderaudzonelist); } @@ -878,9 +881,9 @@ namespace CodeWalker MapBox mb = new MapBox(); MapSphere ms = new MapSphere(); - for (int i = 0; i < audiozones.AllItems.Count; i++) + for (int i = 0; i < renderaudzonelist.Count; i++) { - var placement = audiozones.AllItems[i]; + var placement = renderaudzonelist[i]; switch (placement.Shape) { case Dat151ZoneShape.Box: From 77d9c4e4c8bada0991e299634ad9007bfa689cdd Mon Sep 17 00:00:00 2001 From: dexy Date: Thu, 27 Dec 2018 00:20:39 +1100 Subject: [PATCH 058/158] Dat151 progress --- .../GameFiles/FileTypes/RelFile.cs | 190 ++++-- CodeWalker.Core/World/AudioZones.cs | 130 +++- Forms/RelForm.Designer.cs | 126 +++- Forms/RelForm.cs | 80 +++ Project/Panels/EditAudioEmitterListPanel.cs | 1 + Project/Panels/EditAudioEmitterPanel.cs | 1 + Project/Panels/EditAudioFilePanel.cs | 1 + .../Panels/EditAudioZoneListPanel.Designer.cs | 63 ++ Project/Panels/EditAudioZoneListPanel.cs | 80 +++ Project/Panels/EditAudioZonePanel.Designer.cs | 632 +++++++++++++++++- Project/Panels/EditAudioZonePanel.cs | 538 ++++++++++++++- Project/ProjectFile.cs | 1 + Project/ProjectForm.Designer.cs | 250 +++---- Project/ProjectForm.cs | 305 ++++++++- Utils/MapUtils.cs | 2 +- WorldForm.cs | 24 +- 16 files changed, 2177 insertions(+), 247 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index fd9ea52..3f85fc5 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -239,6 +239,8 @@ namespace CodeWalker.GameFiles //BuildWavesMaps(); + + Loaded = true; } @@ -637,6 +639,29 @@ namespace CodeWalker.GameFiles { //TODO! //need to do this before building the data block since nametable offsets are in there! + + + + + + + if (NameTable != null) + { + NameTableCount = (uint)NameTable.Length; + uint ntlength = 4 + (4 * NameTableCount); + foreach (var name in NameTable) + { + ntlength += (uint)name.Length + 1; + } + NameTableLength = ntlength; + } + else + { + NameTableCount = 0; + NameTableLength = 4; + } + + } private void BuildDataBlock() { @@ -671,13 +696,13 @@ namespace CodeWalker.GameFiles var rd = RelDatasSorted[i]; - switch ((Dat151RelType)rd.TypeID) + switch ((Dat151RelType)rd.TypeID)//must be a better way of doing this! { case Dat151RelType.AmbientEmitter: case Dat151RelType.AmbientZone: case Dat151RelType.Unk101: case Dat151RelType.Unk35: - while ((ms.Position & 0xF) != 0) bw.Write((byte)0); //pad up to nearest 16 bytes + while ((ms.Position & 0xF) != 0) bw.Write((byte)0); //align to nearest 16 bytes break; case Dat151RelType.Mood: case Dat151RelType.Unk70: @@ -717,6 +742,7 @@ namespace CodeWalker.GameFiles DataBlock = buf; + DataLength = (uint)(DataBlock?.Length ?? 0); } private void BuildIndex() { @@ -750,7 +776,16 @@ namespace CodeWalker.GameFiles //{ } IndexHashes = hashes; + //IndexCount = (uint)hashes.Length; + if ((RelType == RelDatFileType.Dat4) && (NameTableLength == 4)) + { + IndexCount = (uint)(IndexStrings?.Length ?? 0); + } + else + { + IndexCount = (uint)(IndexHashes?.Length ?? 0); + } } private void BuildHashTable() { @@ -787,13 +822,18 @@ namespace CodeWalker.GameFiles { HashTableOffsets = null; } + + HashTableCount = (uint)(HashTableOffsets?.Length ?? 0); } private void BuildPackTable() { //TODO + + PackTableCount = (uint)(PackTableOffsets?.Length ?? 0); } + private void BuildHashMaps() { //for discovering "HashTable" offsets @@ -881,7 +921,6 @@ namespace CodeWalker.GameFiles } - public struct HashesMapKey { public RelDatFileType FileType { get; set; } @@ -947,50 +986,13 @@ namespace CodeWalker.GameFiles public byte[] Save() { - - //build DataBlock - //update DataLength - //update NameTableCount - //update NameTableLength - //update IndexStrings/IndexHashes - //update IndexCount - //update HashTableOffsets (and hashes?) - //update HashTableCount - //update PackTableOffsets - //update PackTableCount - + BuildNameTable(); BuildDataBlock(); BuildIndex(); BuildHashTable(); BuildPackTable(); - DataLength = (uint)(DataBlock?.Length ?? 0); - if (NameTable != null) - { - NameTableCount = (uint)NameTable.Length; - uint ntlength = 4 + (4 * NameTableCount); - foreach (var name in NameTable) - { - ntlength += (uint)name.Length + 1; - } - NameTableLength = ntlength; - } - else - { - NameTableCount = 0; - NameTableLength = 4; - } - if ((RelType == RelDatFileType.Dat4) && (NameTableLength == 4)) - { - IndexCount = (uint)(IndexStrings?.Length ?? 0); - } - else - { - IndexCount = (uint)(IndexHashes?.Length ?? 0); - } - HashTableCount = (uint)(HashTableOffsets?.Length ?? 0); - PackTableCount = (uint)(PackTableOffsets?.Length ?? 0); @@ -1089,11 +1091,49 @@ namespace CodeWalker.GameFiles - public void AddRelData(RelData d) //TODO!!! + public void AddRelData(RelData d) { + var newRelDatas = new List(); + var newRelDatasSorted = new List(); + + newRelDatas.AddRange(RelDatas); + newRelDatasSorted.AddRange(RelDatasSorted); + + newRelDatas.Add(d); + newRelDatasSorted.Add(d); + + RelDatas = newRelDatas.ToArray(); + RelDatasSorted = newRelDatasSorted.ToArray(); + //RelDataDict[d.NameHash] = d; } - public bool RemoveRelData(RelData d) //TODO!!! + public bool RemoveRelData(RelData d) { + var newRelDatas = new List(); + var newRelDatasSorted = new List(); + + foreach (var relData in RelDatas) + { + if (relData != d) + { + newRelDatas.Add(relData); + } + } + foreach (var relData in RelDatasSorted) + { + if (relData != d) + { + newRelDatasSorted.Add(relData); + } + } + + if (newRelDatas.Count < RelDatas.Length) + { + RelDatas = newRelDatas.ToArray(); + RelDatasSorted = newRelDatasSorted.ToArray(); + RelDataDict.Remove(d.NameHash); + return true; + } + return false; } @@ -2594,9 +2634,9 @@ namespace CodeWalker.GameFiles } [TC(typeof(EXP))] public class Dat151AmbientZone : Dat151RelData { - public FlagsUint Flags00 { get; set; } + public FlagsUint Flags0 { get; set; } public Dat151ZoneShape Shape { get; set; } - public FlagsUint Flags02 { get; set; } + public FlagsUint Flags1 { get; set; } public Vector3 OuterPos { get; set; } public float Unused01 { get; set; } public Vector3 OuterSize { get; set; } @@ -2613,11 +2653,10 @@ namespace CodeWalker.GameFiles public Vector4 InnerVec2 { get; set; } public uint InnerAngle { get; set; } public Vector3 InnerVec3 { get; set; } - public Vector4 Vec11 { get; set; } - public Vector4 Vec12 { get; set; } - public Vector4 Vec13 { get; set; } - - public FlagsUint Flags05 { get; set; } + public Vector4 UnkVec1 { get; set; } + public Vector4 UnkVec2 { get; set; } + public Vector4 UnkVec3 { get; set; } + public FlagsUint Flags2 { get; set; } public byte Unk14 { get; set; } public byte Unk15 { get; set; } public byte HashesCount { get; set; } @@ -2648,11 +2687,16 @@ namespace CodeWalker.GameFiles + public Dat151AmbientZone(RelFile rel) : base(rel) + { + Type = Dat151RelType.AmbientZone; + TypeID = (byte)Type; + } public Dat151AmbientZone(RelData d, BinaryReader br) : base(d, br) { - Flags00 = br.ReadUInt32(); + Flags0 = br.ReadUInt32(); Shape = (Dat151ZoneShape)br.ReadUInt32(); - Flags02 = br.ReadUInt32(); + Flags1 = br.ReadUInt32(); OuterPos = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); Unused01 = br.ReadSingle(); OuterSize = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); @@ -2669,11 +2713,11 @@ namespace CodeWalker.GameFiles InnerVec2 = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); InnerAngle = br.ReadUInt32();//### InnerVec3 = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); - Vec11 = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); - Vec12 = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); - Vec13 = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); + UnkVec1 = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); + UnkVec2 = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); + UnkVec3 = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); - Flags05 = br.ReadUInt32(); + Flags2 = br.ReadUInt32(); Unk14 = br.ReadByte(); Unk15 = br.ReadByte(); HashesCount = br.ReadByte(); @@ -2725,13 +2769,13 @@ namespace CodeWalker.GameFiles { }//no hit if (Shape != 0) { }//eg 1, 2 - if (Flags02.Value != 0) + if (Flags1.Value != 0) { }//no hit if (OuterAngle > 360) { }//no hit if (InnerAngle > 360) { }//no hit - if (Flags05.Value != 0) + if (Flags2.Value != 0) { }//eg 0xAE64583B, 0x61083310, 0xCAE96294, 0x1C376176 #endregion @@ -2742,9 +2786,9 @@ namespace CodeWalker.GameFiles //base.Write(bw); WriteTypeAndOffset(bw); - bw.Write(Flags00.Value); + bw.Write(Flags0.Value); bw.Write((uint)Shape); - bw.Write(Flags02.Value); + bw.Write(Flags1.Value); bw.Write(OuterPos.X); bw.Write(OuterPos.Y); bw.Write(OuterPos.Z); @@ -2785,20 +2829,20 @@ namespace CodeWalker.GameFiles bw.Write(InnerVec3.X); bw.Write(InnerVec3.Y); bw.Write(InnerVec3.Z); - bw.Write(Vec11.X); - bw.Write(Vec11.Y); - bw.Write(Vec11.Z); - bw.Write(Vec11.W); - bw.Write(Vec12.X); - bw.Write(Vec12.Y); - bw.Write(Vec12.Z); - bw.Write(Vec12.W); - bw.Write(Vec13.X); - bw.Write(Vec13.Y); - bw.Write(Vec13.Z); - bw.Write(Vec13.W); + bw.Write(UnkVec1.X); + bw.Write(UnkVec1.Y); + bw.Write(UnkVec1.Z); + bw.Write(UnkVec1.W); + bw.Write(UnkVec2.X); + bw.Write(UnkVec2.Y); + bw.Write(UnkVec2.Z); + bw.Write(UnkVec2.W); + bw.Write(UnkVec3.X); + bw.Write(UnkVec3.Y); + bw.Write(UnkVec3.Z); + bw.Write(UnkVec3.W); - bw.Write(Flags05.Value); + bw.Write(Flags2.Value); bw.Write(Unk14); bw.Write(Unk15); bw.Write(HashesCount); diff --git a/CodeWalker.Core/World/AudioZones.cs b/CodeWalker.Core/World/AudioZones.cs index 3adcc84..1494869 100644 --- a/CodeWalker.Core/World/AudioZones.cs +++ b/CodeWalker.Core/World/AudioZones.cs @@ -31,6 +31,8 @@ namespace CodeWalker.World public List Emitters = new List(); public List AllItems = new List(); + public List AllFiles = new List(); + public Dictionary PlacementsDict = new Dictionary(); public void Init(GameFileCache gameFileCache, Action updateStatus) @@ -67,23 +69,20 @@ namespace CodeWalker.World } } + List placements = new List(); foreach (var dat151entry in datrelentries.Values) { var relfile = rpfman.GetFile(dat151entry); if (relfile != null) { - foreach (var reldata in relfile.RelDatas) - { - if (reldata is Dat151AmbientZone) - { - Zones.Add(new AudioPlacement(relfile, reldata as Dat151AmbientZone)); - } - else if (reldata is Dat151AmbientEmitter) - { - Emitters.Add(new AudioPlacement(relfile, reldata as Dat151AmbientEmitter)); - } - } + AllFiles.Add(relfile); + + placements.Clear(); + + CreatePlacements(relfile, placements, true); + + PlacementsDict[relfile] = placements.ToArray(); } } @@ -119,6 +118,49 @@ namespace CodeWalker.World } } + private void CreatePlacements(RelFile relfile, List placements, bool addtoLists = false) + { + foreach (var reldata in relfile.RelDatas) + { + AudioPlacement placement = null; + if (reldata is Dat151AmbientZone) + { + placement = new AudioPlacement(relfile, reldata as Dat151AmbientZone); + if (addtoLists) Zones.Add(placement); + } + else if (reldata is Dat151AmbientEmitter) + { + placement = new AudioPlacement(relfile, reldata as Dat151AmbientEmitter); + if (addtoLists) Emitters.Add(placement); + } + if (placement != null) + { + placements.Add(placement); + } + } + } + + + public void GetPlacements(List relfiles, List placements) + { + + foreach (var relfile in relfiles) + { + AudioPlacement[] fileplacements = null; + if (!PlacementsDict.TryGetValue(relfile, out fileplacements)) + { + List newplacements = new List(); + CreatePlacements(relfile, newplacements); + fileplacements = newplacements.ToArray(); + PlacementsDict[relfile] = fileplacements; + } + if (fileplacements != null) + { + placements.AddRange(fileplacements); + } + } + + } } @@ -157,11 +199,30 @@ namespace CodeWalker.World { RelFile = rel; AudioZone = zone; - Shape = zone.Shape; ShortTypeName = "AudioZone"; FullTypeName = "Audio Zone"; + + UpdateFromZone(); + } + public AudioPlacement(RelFile rel, Dat151AmbientEmitter emitter) + { + RelFile = rel; + AudioEmitter = emitter; + ShortTypeName = "AudioEmitter"; + FullTypeName = "Audio Emitter"; + + UpdateFromEmitter(); + } + + + public void UpdateFromZone() + { + if (AudioZone == null) return; + var zone = AudioZone; + Name = zone.Name; NameHash = zone.NameHash; + Shape = zone.Shape; float deg2rad = (float)(Math.PI / 180.0); @@ -205,16 +266,17 @@ namespace CodeWalker.World { Position = InnerPos; } + } - public AudioPlacement(RelFile rel, Dat151AmbientEmitter emitter) + + public void UpdateFromEmitter() { - RelFile = rel; - AudioEmitter = emitter; - Shape = Dat151ZoneShape.Sphere; - ShortTypeName = "AudioEmitter"; - FullTypeName = "Audio Emitter"; + if (AudioEmitter == null) return; + var emitter = AudioEmitter; + Name = emitter.Name; NameHash = emitter.NameHash; + Shape = Dat151ZoneShape.Sphere; Orientation = Quaternion.Identity; OrientationInv = Quaternion.Identity; @@ -230,6 +292,7 @@ namespace CodeWalker.World } Position = InnerPos; HitSphereRad = InnerRad;// useouter ? OuterRad : InnerRad; + } @@ -240,16 +303,39 @@ namespace CodeWalker.World InnerPos = pos; OuterPos += delta; Position = useouter ? OuterPos : InnerPos; + + if (AudioZone != null) + { + AudioZone.InnerPos = InnerPos; + AudioZone.OuterPos = OuterPos; + } + if (AudioEmitter != null) + { + AudioEmitter.Position = InnerPos; + } } public void SetOrientation(Quaternion ori) { Orientation = ori; OrientationInv = Quaternion.Invert(ori); + Vector3 t = ori.Multiply(Vector3.UnitX); + float angl = (float)Math.Atan2(t.Y, t.X); + while (angl < 0) angl += ((float)Math.PI * 2.0f); + float rad2deg = (float)(180.0 / Math.PI); + float dangl = angl * rad2deg; + uint uangl = (uint)dangl; + + if (InnerOri == OuterOri) { InnerOri = Orientation; OuterOri = Orientation; + if (AudioZone != null) + { + AudioZone.InnerAngle = uangl; + AudioZone.OuterAngle = uangl; + } } else { @@ -259,10 +345,18 @@ namespace CodeWalker.World if (useouter) { OuterOri = Orientation; + if (AudioZone != null) + { + AudioZone.OuterAngle = uangl; + } } else { InnerOri = Orientation; + if (AudioZone != null) + { + AudioZone.InnerAngle = uangl; + } } } } diff --git a/Forms/RelForm.Designer.cs b/Forms/RelForm.Designer.cs index abf7ee6..3121662 100644 --- a/Forms/RelForm.Designer.cs +++ b/Forms/RelForm.Designer.cs @@ -31,13 +31,21 @@ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RelForm)); this.RelPropertyGrid = new CodeWalker.WinForms.PropertyGridFix(); this.MainTabControl = new System.Windows.Forms.TabControl(); + this.DetailsTabPage = new System.Windows.Forms.TabPage(); this.NameTableTabPage = new System.Windows.Forms.TabPage(); this.MainTextBox = new CodeWalker.WinForms.TextBoxFix(); - this.DetailsTabPage = new System.Windows.Forms.TabPage(); this.CloseButton = new System.Windows.Forms.Button(); + this.SearchTabPage = new System.Windows.Forms.TabPage(); + this.SearchResultsGrid = new CodeWalker.WinForms.PropertyGridFix(); + this.label12 = new System.Windows.Forms.Label(); + this.SearchTextBox = new System.Windows.Forms.TextBox(); + this.SearchButton = new System.Windows.Forms.Button(); + this.SearchHashRadio = new System.Windows.Forms.RadioButton(); + this.SearchTextRadio = new System.Windows.Forms.RadioButton(); this.MainTabControl.SuspendLayout(); - this.NameTableTabPage.SuspendLayout(); this.DetailsTabPage.SuspendLayout(); + this.NameTableTabPage.SuspendLayout(); + this.SearchTabPage.SuspendLayout(); this.SuspendLayout(); // // RelPropertyGrid @@ -58,6 +66,7 @@ | System.Windows.Forms.AnchorStyles.Right))); this.MainTabControl.Controls.Add(this.DetailsTabPage); this.MainTabControl.Controls.Add(this.NameTableTabPage); + this.MainTabControl.Controls.Add(this.SearchTabPage); this.MainTabControl.Location = new System.Drawing.Point(5, 5); this.MainTabControl.Margin = new System.Windows.Forms.Padding(0); this.MainTabControl.Name = "MainTabControl"; @@ -65,6 +74,17 @@ this.MainTabControl.Size = new System.Drawing.Size(664, 394); this.MainTabControl.TabIndex = 1; // + // DetailsTabPage + // + this.DetailsTabPage.Controls.Add(this.RelPropertyGrid); + this.DetailsTabPage.Location = new System.Drawing.Point(4, 22); + this.DetailsTabPage.Name = "DetailsTabPage"; + this.DetailsTabPage.Padding = new System.Windows.Forms.Padding(3); + this.DetailsTabPage.Size = new System.Drawing.Size(656, 368); + this.DetailsTabPage.TabIndex = 1; + this.DetailsTabPage.Text = "Details"; + this.DetailsTabPage.UseVisualStyleBackColor = true; + // // NameTableTabPage // this.NameTableTabPage.Controls.Add(this.MainTextBox); @@ -91,17 +111,6 @@ this.MainTextBox.TabIndex = 1; this.MainTextBox.WordWrap = false; // - // DetailsTabPage - // - this.DetailsTabPage.Controls.Add(this.RelPropertyGrid); - this.DetailsTabPage.Location = new System.Drawing.Point(4, 22); - this.DetailsTabPage.Name = "DetailsTabPage"; - this.DetailsTabPage.Padding = new System.Windows.Forms.Padding(3); - this.DetailsTabPage.Size = new System.Drawing.Size(656, 368); - this.DetailsTabPage.TabIndex = 1; - this.DetailsTabPage.Text = "Details"; - this.DetailsTabPage.UseVisualStyleBackColor = true; - // // CloseButton // this.CloseButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); @@ -113,6 +122,86 @@ this.CloseButton.UseVisualStyleBackColor = true; this.CloseButton.Click += new System.EventHandler(this.CloseButton_Click); // + // SearchTabPage + // + this.SearchTabPage.Controls.Add(this.SearchTextRadio); + this.SearchTabPage.Controls.Add(this.SearchHashRadio); + this.SearchTabPage.Controls.Add(this.label12); + this.SearchTabPage.Controls.Add(this.SearchTextBox); + this.SearchTabPage.Controls.Add(this.SearchButton); + this.SearchTabPage.Controls.Add(this.SearchResultsGrid); + this.SearchTabPage.Location = new System.Drawing.Point(4, 22); + this.SearchTabPage.Name = "SearchTabPage"; + this.SearchTabPage.Size = new System.Drawing.Size(656, 368); + this.SearchTabPage.TabIndex = 2; + this.SearchTabPage.Text = "Search"; + this.SearchTabPage.UseVisualStyleBackColor = true; + // + // SearchResultsGrid + // + this.SearchResultsGrid.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.SearchResultsGrid.HelpVisible = false; + this.SearchResultsGrid.Location = new System.Drawing.Point(3, 31); + this.SearchResultsGrid.Name = "SearchResultsGrid"; + this.SearchResultsGrid.Size = new System.Drawing.Size(647, 331); + this.SearchResultsGrid.TabIndex = 1; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(8, 6); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(30, 13); + this.label12.TabIndex = 32; + this.label12.Text = "Find:"; + // + // SearchTextBox + // + this.SearchTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.SearchTextBox.Location = new System.Drawing.Point(44, 3); + this.SearchTextBox.Name = "SearchTextBox"; + this.SearchTextBox.Size = new System.Drawing.Size(237, 20); + this.SearchTextBox.TabIndex = 33; + this.SearchTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.SearchTextBox_KeyDown); + // + // SearchButton + // + this.SearchButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.SearchButton.Location = new System.Drawing.Point(395, 2); + this.SearchButton.Name = "SearchButton"; + this.SearchButton.Size = new System.Drawing.Size(68, 23); + this.SearchButton.TabIndex = 34; + this.SearchButton.Text = "Search"; + this.SearchButton.UseVisualStyleBackColor = true; + this.SearchButton.Click += new System.EventHandler(this.SearchButton_Click); + // + // SearchHashRadio + // + this.SearchHashRadio.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.SearchHashRadio.AutoSize = true; + this.SearchHashRadio.Checked = true; + this.SearchHashRadio.Location = new System.Drawing.Point(287, 4); + this.SearchHashRadio.Name = "SearchHashRadio"; + this.SearchHashRadio.Size = new System.Drawing.Size(50, 17); + this.SearchHashRadio.TabIndex = 35; + this.SearchHashRadio.TabStop = true; + this.SearchHashRadio.Text = "Hash"; + this.SearchHashRadio.UseVisualStyleBackColor = true; + // + // SearchTextRadio + // + this.SearchTextRadio.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.SearchTextRadio.AutoSize = true; + this.SearchTextRadio.Location = new System.Drawing.Point(343, 4); + this.SearchTextRadio.Name = "SearchTextRadio"; + this.SearchTextRadio.Size = new System.Drawing.Size(46, 17); + this.SearchTextRadio.TabIndex = 36; + this.SearchTextRadio.Text = "Text"; + this.SearchTextRadio.UseVisualStyleBackColor = true; + // // RelForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -124,9 +213,11 @@ this.Name = "RelForm"; this.Text = "REL Viewer - CodeWalker by dexyfex"; this.MainTabControl.ResumeLayout(false); + this.DetailsTabPage.ResumeLayout(false); this.NameTableTabPage.ResumeLayout(false); this.NameTableTabPage.PerformLayout(); - this.DetailsTabPage.ResumeLayout(false); + this.SearchTabPage.ResumeLayout(false); + this.SearchTabPage.PerformLayout(); this.ResumeLayout(false); } @@ -139,5 +230,12 @@ private System.Windows.Forms.TabPage DetailsTabPage; private WinForms.TextBoxFix MainTextBox; private System.Windows.Forms.Button CloseButton; + private System.Windows.Forms.TabPage SearchTabPage; + private WinForms.PropertyGridFix SearchResultsGrid; + private System.Windows.Forms.RadioButton SearchTextRadio; + private System.Windows.Forms.RadioButton SearchHashRadio; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.TextBox SearchTextBox; + private System.Windows.Forms.Button SearchButton; } } \ No newline at end of file diff --git a/Forms/RelForm.cs b/Forms/RelForm.cs index 7947ba4..4c3e884 100644 --- a/Forms/RelForm.cs +++ b/Forms/RelForm.cs @@ -27,6 +27,8 @@ namespace CodeWalker.Forms } public string FilePath { get; set; } + private RelFile CurrentFile { get; set; } + public RelForm() @@ -55,6 +57,8 @@ namespace CodeWalker.Forms RelPropertyGrid.SelectedObject = rel; + CurrentFile = rel; + StringBuilder sb = new StringBuilder(); if (rel != null) @@ -100,9 +104,85 @@ namespace CodeWalker.Forms } + + private void Search() + { + SearchResultsGrid.SelectedObject = null; + + if (CurrentFile?.RelDatasSorted == null) return; + + + bool textsearch = SearchTextRadio.Checked; + var text = SearchTextBox.Text; + var textl = text.ToLowerInvariant(); + + uint hash = 0; + uint hashl = 0; + if (!uint.TryParse(text, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(text); + JenkIndex.Ensure(text); + hashl = JenkHash.GenHash(textl); + JenkIndex.Ensure(textl); + } + else + { + hashl = hash; + } + + + var results = new List(); + + foreach (var rd in CurrentFile.RelDatasSorted) + { + if (textsearch) + { + if (((rd.Name?.ToLowerInvariant().Contains(textl))??false) || (rd.NameHash == hash) || (rd.NameHash == hashl) || + (rd.NameHash.ToString().ToLowerInvariant().Contains(textl))) + { + results.Add(rd); + } + } + else + { + if ((rd.NameHash == hash)||(rd.NameHash == hashl)) + { + SearchResultsGrid.SelectedObject = rd; + return; + } + } + } + + if (textsearch && (results.Count > 0)) + { + SearchResultsGrid.SelectedObject = results.ToArray(); + } + else + { + SearchResultsGrid.SelectedObject = null; + } + + + + } + + private void CloseButton_Click(object sender, EventArgs e) { Close(); } + + private void SearchButton_Click(object sender, EventArgs e) + { + Search(); + } + + private void SearchTextBox_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter) + { + Search(); + } + } } } diff --git a/Project/Panels/EditAudioEmitterListPanel.cs b/Project/Panels/EditAudioEmitterListPanel.cs index 1e3e114..df1183d 100644 --- a/Project/Panels/EditAudioEmitterListPanel.cs +++ b/Project/Panels/EditAudioEmitterListPanel.cs @@ -25,6 +25,7 @@ namespace CodeWalker.Project.Panels public void SetEmitterList(Dat151AmbientEmitterList list) { CurrentEmitterList = list; + Tag = list; UpdateFormTitle(); } diff --git a/Project/Panels/EditAudioEmitterPanel.cs b/Project/Panels/EditAudioEmitterPanel.cs index 23cc32d..d206cf3 100644 --- a/Project/Panels/EditAudioEmitterPanel.cs +++ b/Project/Panels/EditAudioEmitterPanel.cs @@ -25,6 +25,7 @@ namespace CodeWalker.Project.Panels public void SetEmitter(AudioPlacement emitter) { CurrentEmitter = emitter; + Tag = emitter; UpdateFormTitle(); } diff --git a/Project/Panels/EditAudioFilePanel.cs b/Project/Panels/EditAudioFilePanel.cs index 8a988c3..cf48386 100644 --- a/Project/Panels/EditAudioFilePanel.cs +++ b/Project/Panels/EditAudioFilePanel.cs @@ -25,6 +25,7 @@ namespace CodeWalker.Project.Panels public void SetFile(RelFile file) { CurrentFile = file; + Tag = file; UpdateFormTitle(); } diff --git a/Project/Panels/EditAudioZoneListPanel.Designer.cs b/Project/Panels/EditAudioZoneListPanel.Designer.cs index 13696ee..826ca65 100644 --- a/Project/Panels/EditAudioZoneListPanel.Designer.cs +++ b/Project/Panels/EditAudioZoneListPanel.Designer.cs @@ -29,20 +29,83 @@ private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditAudioZoneListPanel)); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.label19 = new System.Windows.Forms.Label(); + this.HashesTextBox = new CodeWalker.WinForms.TextBoxFix(); + this.tabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); this.SuspendLayout(); // + // tabControl1 + // + this.tabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Location = new System.Drawing.Point(2, 3); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(559, 446); + this.tabControl1.TabIndex = 0; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.label19); + this.tabPage1.Controls.Add(this.HashesTextBox); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(551, 420); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "Ambient Zone List"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // label19 + // + this.label19.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label19.AutoSize = true; + this.label19.Location = new System.Drawing.Point(11, 11); + this.label19.Name = "label19"; + this.label19.Size = new System.Drawing.Size(72, 13); + this.label19.TabIndex = 72; + this.label19.Text = "Zone hashes:"; + // + // HashesTextBox + // + this.HashesTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.HashesTextBox.Location = new System.Drawing.Point(6, 28); + this.HashesTextBox.Multiline = true; + this.HashesTextBox.Name = "HashesTextBox"; + this.HashesTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.HashesTextBox.Size = new System.Drawing.Size(428, 330); + this.HashesTextBox.TabIndex = 73; + this.HashesTextBox.WordWrap = false; + this.HashesTextBox.TextChanged += new System.EventHandler(this.HashesTextBox_TextChanged); + // // EditAudioZoneListPanel // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(562, 450); + this.Controls.Add(this.tabControl1); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Name = "EditAudioZoneListPanel"; this.Text = "Edit Audio Zone List"; + this.tabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.tabPage1.PerformLayout(); this.ResumeLayout(false); } #endregion + + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.Label label19; + private WinForms.TextBoxFix HashesTextBox; } } \ No newline at end of file diff --git a/Project/Panels/EditAudioZoneListPanel.cs b/Project/Panels/EditAudioZoneListPanel.cs index 5f9a953..3ff8828 100644 --- a/Project/Panels/EditAudioZoneListPanel.cs +++ b/Project/Panels/EditAudioZoneListPanel.cs @@ -16,6 +16,9 @@ namespace CodeWalker.Project.Panels public ProjectForm ProjectForm; public Dat151AmbientZoneList CurrentZoneList { get; set; } + private bool populatingui = false; + + public EditAudioZoneListPanel(ProjectForm owner) { ProjectForm = owner; @@ -25,7 +28,9 @@ namespace CodeWalker.Project.Panels public void SetZoneList(Dat151AmbientZoneList list) { CurrentZoneList = list; + Tag = list; UpdateFormTitle(); + UpdateUI(); } private void UpdateFormTitle() @@ -33,5 +38,80 @@ namespace CodeWalker.Project.Panels Text = CurrentZoneList?.NameHash.ToString() ?? ""; } + private void UpdateUI() + { + + if (CurrentZoneList == null) + { + //AddToProjectButton.Enabled = false; + //DeleteButton.Enabled = false; + + populatingui = true; + HashesTextBox.Text = string.Empty; + populatingui = false; + } + else + { + //AddToProjectButton.Enabled = CurrentZoneList?.Rel != null ? !ProjectForm.AudioFileExistsInProject(CurrentZoneList.Rel) : false; + //DeleteButton.Enabled = !AddToProjectButton.Enabled; + + populatingui = true; + var zl = CurrentZoneList; + + StringBuilder sb = new StringBuilder(); + if (zl.ZoneHashes != null) + { + foreach (var hash in zl.ZoneHashes) + { + sb.AppendLine(hash.ToString()); + } + } + HashesTextBox.Text = sb.ToString(); + + + populatingui = false; + + + } + + } + + + private void ProjectItemChanged() + { + if (CurrentZoneList?.Rel != null) + { + ProjectForm.SetAudioFileHasChanged(true); + } + } + + + + private void HashesTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentZoneList == null) return; + + var hashstrs = HashesTextBox.Text.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + if (hashstrs?.Length > 0) + { + var hashlist = new List(); + foreach (var hashstr in hashstrs) + { + uint hash = 0; + if (!uint.TryParse(hashstr, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(hashstr); + JenkIndex.Ensure(hashstr); + } + hashlist.Add(hash); + } + + CurrentZoneList.ZoneHashes = hashlist.ToArray(); + CurrentZoneList.ZoneCount = (byte)hashlist.Count; + + ProjectItemChanged(); + } + } } } diff --git a/Project/Panels/EditAudioZonePanel.Designer.cs b/Project/Panels/EditAudioZonePanel.Designer.cs index e4eb021..d00308e 100644 --- a/Project/Panels/EditAudioZonePanel.Designer.cs +++ b/Project/Panels/EditAudioZonePanel.Designer.cs @@ -31,7 +31,57 @@ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditAudioZonePanel)); this.tabControl1 = new System.Windows.Forms.TabControl(); this.tabPage1 = new System.Windows.Forms.TabPage(); + this.DeleteButton = new System.Windows.Forms.Button(); + this.AddToProjectButton = new System.Windows.Forms.Button(); + this.label21 = new System.Windows.Forms.Label(); + this.Flags2TextBox = new System.Windows.Forms.TextBox(); + this.label20 = new System.Windows.Forms.Label(); + this.ExtParamsTextBox = new CodeWalker.WinForms.TextBoxFix(); + this.label19 = new System.Windows.Forms.Label(); + this.label15 = new System.Windows.Forms.Label(); + this.UnkVec3TextBox = new System.Windows.Forms.TextBox(); + this.label17 = new System.Windows.Forms.Label(); + this.UnkVec2TextBox = new System.Windows.Forms.TextBox(); + this.label18 = new System.Windows.Forms.Label(); + this.UnkVec1TextBox = new System.Windows.Forms.TextBox(); + this.HashesTextBox = new CodeWalker.WinForms.TextBoxFix(); + this.label14 = new System.Windows.Forms.Label(); + this.Flags1TextBox = new System.Windows.Forms.TextBox(); + this.label13 = new System.Windows.Forms.Label(); + this.Flags0TextBox = new System.Windows.Forms.TextBox(); + this.ShapeComboBox = new System.Windows.Forms.ComboBox(); + this.label23 = new System.Windows.Forms.Label(); + this.label12 = new System.Windows.Forms.Label(); + this.NameTextBox = new System.Windows.Forms.TextBox(); + this.label6 = new System.Windows.Forms.Label(); + this.OuterVec3TextBox = new System.Windows.Forms.TextBox(); + this.label7 = new System.Windows.Forms.Label(); + this.OuterVec2TextBox = new System.Windows.Forms.TextBox(); + this.label8 = new System.Windows.Forms.Label(); + this.OuterVec1TextBox = new System.Windows.Forms.TextBox(); + this.label9 = new System.Windows.Forms.Label(); + this.OuterAngleTextBox = new System.Windows.Forms.TextBox(); + this.label10 = new System.Windows.Forms.Label(); + this.OuterSizeTextBox = new System.Windows.Forms.TextBox(); + this.label11 = new System.Windows.Forms.Label(); + this.OuterPosTextBox = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.InnerVec3TextBox = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.InnerVec2TextBox = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.InnerVec1TextBox = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.InnerAngleTextBox = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.InnerSizeTextBox = new System.Windows.Forms.TextBox(); + this.label16 = new System.Windows.Forms.Label(); + this.InnerPosTextBox = new System.Windows.Forms.TextBox(); + this.GoToButton = new System.Windows.Forms.Button(); + this.label22 = new System.Windows.Forms.Label(); + this.UnkBytesTextBox = new System.Windows.Forms.TextBox(); this.tabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); this.SuspendLayout(); // // tabControl1 @@ -48,24 +98,555 @@ // // tabPage1 // + this.tabPage1.Controls.Add(this.label22); + this.tabPage1.Controls.Add(this.UnkBytesTextBox); + this.tabPage1.Controls.Add(this.DeleteButton); + this.tabPage1.Controls.Add(this.AddToProjectButton); + this.tabPage1.Controls.Add(this.label21); + this.tabPage1.Controls.Add(this.Flags2TextBox); + this.tabPage1.Controls.Add(this.label20); + this.tabPage1.Controls.Add(this.ExtParamsTextBox); + this.tabPage1.Controls.Add(this.label19); + this.tabPage1.Controls.Add(this.label15); + this.tabPage1.Controls.Add(this.UnkVec3TextBox); + this.tabPage1.Controls.Add(this.label17); + this.tabPage1.Controls.Add(this.UnkVec2TextBox); + this.tabPage1.Controls.Add(this.label18); + this.tabPage1.Controls.Add(this.UnkVec1TextBox); + this.tabPage1.Controls.Add(this.HashesTextBox); + this.tabPage1.Controls.Add(this.label14); + this.tabPage1.Controls.Add(this.Flags1TextBox); + this.tabPage1.Controls.Add(this.label13); + this.tabPage1.Controls.Add(this.Flags0TextBox); + this.tabPage1.Controls.Add(this.ShapeComboBox); + this.tabPage1.Controls.Add(this.label23); + this.tabPage1.Controls.Add(this.label12); + this.tabPage1.Controls.Add(this.NameTextBox); + this.tabPage1.Controls.Add(this.label6); + this.tabPage1.Controls.Add(this.OuterVec3TextBox); + this.tabPage1.Controls.Add(this.label7); + this.tabPage1.Controls.Add(this.OuterVec2TextBox); + this.tabPage1.Controls.Add(this.label8); + this.tabPage1.Controls.Add(this.OuterVec1TextBox); + this.tabPage1.Controls.Add(this.label9); + this.tabPage1.Controls.Add(this.OuterAngleTextBox); + this.tabPage1.Controls.Add(this.label10); + this.tabPage1.Controls.Add(this.OuterSizeTextBox); + this.tabPage1.Controls.Add(this.label11); + this.tabPage1.Controls.Add(this.OuterPosTextBox); + this.tabPage1.Controls.Add(this.label5); + this.tabPage1.Controls.Add(this.InnerVec3TextBox); + this.tabPage1.Controls.Add(this.label4); + this.tabPage1.Controls.Add(this.InnerVec2TextBox); + this.tabPage1.Controls.Add(this.label3); + this.tabPage1.Controls.Add(this.InnerVec1TextBox); + this.tabPage1.Controls.Add(this.label2); + this.tabPage1.Controls.Add(this.InnerAngleTextBox); + this.tabPage1.Controls.Add(this.label1); + this.tabPage1.Controls.Add(this.InnerSizeTextBox); + this.tabPage1.Controls.Add(this.label16); + this.tabPage1.Controls.Add(this.InnerPosTextBox); this.tabPage1.Location = new System.Drawing.Point(4, 22); this.tabPage1.Name = "tabPage1"; this.tabPage1.Padding = new System.Windows.Forms.Padding(3); this.tabPage1.Size = new System.Drawing.Size(551, 421); this.tabPage1.TabIndex = 0; - this.tabPage1.Text = "Ambient Emitter"; + this.tabPage1.Text = "Ambient Zone"; this.tabPage1.UseVisualStyleBackColor = true; // + // DeleteButton + // + this.DeleteButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.DeleteButton.Location = new System.Drawing.Point(343, 3); + this.DeleteButton.Name = "DeleteButton"; + this.DeleteButton.Size = new System.Drawing.Size(93, 23); + this.DeleteButton.TabIndex = 75; + this.DeleteButton.Text = "Delete zone"; + this.DeleteButton.UseVisualStyleBackColor = true; + this.DeleteButton.Click += new System.EventHandler(this.DeleteButton_Click); + // + // AddToProjectButton + // + this.AddToProjectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.AddToProjectButton.Location = new System.Drawing.Point(452, 3); + this.AddToProjectButton.Name = "AddToProjectButton"; + this.AddToProjectButton.Size = new System.Drawing.Size(93, 23); + this.AddToProjectButton.TabIndex = 74; + this.AddToProjectButton.Text = "Add to project"; + this.AddToProjectButton.UseVisualStyleBackColor = true; + this.AddToProjectButton.Click += new System.EventHandler(this.AddToProjectButton_Click); + // + // label21 + // + this.label21.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label21.AutoSize = true; + this.label21.Location = new System.Drawing.Point(340, 106); + this.label21.Name = "label21"; + this.label21.Size = new System.Drawing.Size(44, 13); + this.label21.TabIndex = 68; + this.label21.Text = "Flags 2:"; + // + // Flags2TextBox + // + this.Flags2TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.Flags2TextBox.Location = new System.Drawing.Point(390, 103); + this.Flags2TextBox.Name = "Flags2TextBox"; + this.Flags2TextBox.Size = new System.Drawing.Size(155, 20); + this.Flags2TextBox.TabIndex = 69; + this.Flags2TextBox.TextChanged += new System.EventHandler(this.Flags2TextBox_TextChanged); + // + // label20 + // + this.label20.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label20.AutoSize = true; + this.label20.Location = new System.Drawing.Point(340, 278); + this.label20.Name = "label20"; + this.label20.Size = new System.Drawing.Size(193, 13); + this.label20.TabIndex = 72; + this.label20.Text = "Ext params: Name (hash), Value (float)"; + // + // ExtParamsTextBox + // + this.ExtParamsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ExtParamsTextBox.Location = new System.Drawing.Point(335, 295); + this.ExtParamsTextBox.Multiline = true; + this.ExtParamsTextBox.Name = "ExtParamsTextBox"; + this.ExtParamsTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.ExtParamsTextBox.Size = new System.Drawing.Size(209, 116); + this.ExtParamsTextBox.TabIndex = 73; + this.ExtParamsTextBox.WordWrap = false; + this.ExtParamsTextBox.TextChanged += new System.EventHandler(this.ExtParamsTextBox_TextChanged); + // + // label19 + // + this.label19.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label19.AutoSize = true; + this.label19.Location = new System.Drawing.Point(340, 134); + this.label19.Name = "label19"; + this.label19.Size = new System.Drawing.Size(46, 13); + this.label19.TabIndex = 70; + this.label19.Text = "Hashes:"; + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Location = new System.Drawing.Point(7, 394); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(60, 13); + this.label15.TabIndex = 62; + this.label15.Text = "Unk vec 3:"; + // + // UnkVec3TextBox + // + this.UnkVec3TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.UnkVec3TextBox.Location = new System.Drawing.Point(84, 391); + this.UnkVec3TextBox.Name = "UnkVec3TextBox"; + this.UnkVec3TextBox.Size = new System.Drawing.Size(237, 20); + this.UnkVec3TextBox.TabIndex = 63; + this.UnkVec3TextBox.TextChanged += new System.EventHandler(this.UnkVec3TextBox_TextChanged); + // + // label17 + // + this.label17.AutoSize = true; + this.label17.Location = new System.Drawing.Point(7, 370); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(60, 13); + this.label17.TabIndex = 60; + this.label17.Text = "Unk vec 2:"; + // + // UnkVec2TextBox + // + this.UnkVec2TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.UnkVec2TextBox.Location = new System.Drawing.Point(84, 367); + this.UnkVec2TextBox.Name = "UnkVec2TextBox"; + this.UnkVec2TextBox.Size = new System.Drawing.Size(237, 20); + this.UnkVec2TextBox.TabIndex = 61; + this.UnkVec2TextBox.TextChanged += new System.EventHandler(this.UnkVec2TextBox_TextChanged); + // + // label18 + // + this.label18.AutoSize = true; + this.label18.Location = new System.Drawing.Point(7, 346); + this.label18.Name = "label18"; + this.label18.Size = new System.Drawing.Size(60, 13); + this.label18.TabIndex = 58; + this.label18.Text = "Unk vec 1:"; + // + // UnkVec1TextBox + // + this.UnkVec1TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.UnkVec1TextBox.Location = new System.Drawing.Point(84, 343); + this.UnkVec1TextBox.Name = "UnkVec1TextBox"; + this.UnkVec1TextBox.Size = new System.Drawing.Size(237, 20); + this.UnkVec1TextBox.TabIndex = 59; + this.UnkVec1TextBox.TextChanged += new System.EventHandler(this.UnkVec1TextBox_TextChanged); + // + // HashesTextBox + // + this.HashesTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.HashesTextBox.Location = new System.Drawing.Point(335, 151); + this.HashesTextBox.Multiline = true; + this.HashesTextBox.Name = "HashesTextBox"; + this.HashesTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.HashesTextBox.Size = new System.Drawing.Size(209, 116); + this.HashesTextBox.TabIndex = 71; + this.HashesTextBox.WordWrap = false; + this.HashesTextBox.TextChanged += new System.EventHandler(this.HashesTextBox_TextChanged); + // + // label14 + // + this.label14.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(340, 82); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(44, 13); + this.label14.TabIndex = 66; + this.label14.Text = "Flags 1:"; + // + // Flags1TextBox + // + this.Flags1TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.Flags1TextBox.Location = new System.Drawing.Point(390, 79); + this.Flags1TextBox.Name = "Flags1TextBox"; + this.Flags1TextBox.Size = new System.Drawing.Size(155, 20); + this.Flags1TextBox.TabIndex = 67; + this.Flags1TextBox.TextChanged += new System.EventHandler(this.Flags1TextBox_TextChanged); + // + // label13 + // + this.label13.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(340, 58); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(44, 13); + this.label13.TabIndex = 64; + this.label13.Text = "Flags 0:"; + // + // Flags0TextBox + // + this.Flags0TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.Flags0TextBox.Location = new System.Drawing.Point(390, 55); + this.Flags0TextBox.Name = "Flags0TextBox"; + this.Flags0TextBox.Size = new System.Drawing.Size(155, 20); + this.Flags0TextBox.TabIndex = 65; + this.Flags0TextBox.TextChanged += new System.EventHandler(this.Flags0TextBox_TextChanged); + // + // ShapeComboBox + // + this.ShapeComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ShapeComboBox.FormattingEnabled = true; + this.ShapeComboBox.Items.AddRange(new object[] { + "Box", + "Line", + "Sphere"}); + this.ShapeComboBox.Location = new System.Drawing.Point(84, 30); + this.ShapeComboBox.Name = "ShapeComboBox"; + this.ShapeComboBox.Size = new System.Drawing.Size(151, 21); + this.ShapeComboBox.TabIndex = 33; + this.ShapeComboBox.SelectedIndexChanged += new System.EventHandler(this.ShapeComboBox_SelectedIndexChanged); + // + // label23 + // + this.label23.AutoSize = true; + this.label23.Location = new System.Drawing.Point(7, 33); + this.label23.Name = "label23"; + this.label23.Size = new System.Drawing.Size(41, 13); + this.label23.TabIndex = 32; + this.label23.Text = "Shape:"; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(7, 9); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(64, 13); + this.label12.TabIndex = 29; + this.label12.Text = "Name hash:"; + // + // NameTextBox + // + this.NameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.NameTextBox.Location = new System.Drawing.Point(84, 6); + this.NameTextBox.Name = "NameTextBox"; + this.NameTextBox.Size = new System.Drawing.Size(237, 20); + this.NameTextBox.TabIndex = 30; + this.NameTextBox.TextChanged += new System.EventHandler(this.NameTextBox_TextChanged); + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(7, 322); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(66, 13); + this.label6.TabIndex = 56; + this.label6.Text = "Outer vec 3:"; + // + // OuterVec3TextBox + // + this.OuterVec3TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.OuterVec3TextBox.Location = new System.Drawing.Point(84, 319); + this.OuterVec3TextBox.Name = "OuterVec3TextBox"; + this.OuterVec3TextBox.Size = new System.Drawing.Size(237, 20); + this.OuterVec3TextBox.TabIndex = 57; + this.OuterVec3TextBox.TextChanged += new System.EventHandler(this.OuterVec3TextBox_TextChanged); + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(7, 298); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(66, 13); + this.label7.TabIndex = 54; + this.label7.Text = "Outer vec 2:"; + // + // OuterVec2TextBox + // + this.OuterVec2TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.OuterVec2TextBox.Location = new System.Drawing.Point(84, 295); + this.OuterVec2TextBox.Name = "OuterVec2TextBox"; + this.OuterVec2TextBox.Size = new System.Drawing.Size(237, 20); + this.OuterVec2TextBox.TabIndex = 55; + this.OuterVec2TextBox.TextChanged += new System.EventHandler(this.OuterVec2TextBox_TextChanged); + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(7, 274); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(66, 13); + this.label8.TabIndex = 52; + this.label8.Text = "Outer vec 1:"; + // + // OuterVec1TextBox + // + this.OuterVec1TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.OuterVec1TextBox.Location = new System.Drawing.Point(84, 271); + this.OuterVec1TextBox.Name = "OuterVec1TextBox"; + this.OuterVec1TextBox.Size = new System.Drawing.Size(237, 20); + this.OuterVec1TextBox.TabIndex = 53; + this.OuterVec1TextBox.TextChanged += new System.EventHandler(this.OuterVec1TextBox_TextChanged); + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(7, 250); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(65, 13); + this.label9.TabIndex = 50; + this.label9.Text = "Outer angle:"; + // + // OuterAngleTextBox + // + this.OuterAngleTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.OuterAngleTextBox.Location = new System.Drawing.Point(84, 247); + this.OuterAngleTextBox.Name = "OuterAngleTextBox"; + this.OuterAngleTextBox.Size = new System.Drawing.Size(237, 20); + this.OuterAngleTextBox.TabIndex = 51; + this.OuterAngleTextBox.TextChanged += new System.EventHandler(this.OuterAngleTextBox_TextChanged); + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(7, 226); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(57, 13); + this.label10.TabIndex = 48; + this.label10.Text = "Outer size:"; + // + // OuterSizeTextBox + // + this.OuterSizeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.OuterSizeTextBox.Location = new System.Drawing.Point(84, 223); + this.OuterSizeTextBox.Name = "OuterSizeTextBox"; + this.OuterSizeTextBox.Size = new System.Drawing.Size(237, 20); + this.OuterSizeTextBox.TabIndex = 49; + this.OuterSizeTextBox.TextChanged += new System.EventHandler(this.OuterSizeTextBox_TextChanged); + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(7, 202); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(75, 13); + this.label11.TabIndex = 46; + this.label11.Text = "Outer position:"; + // + // OuterPosTextBox + // + this.OuterPosTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.OuterPosTextBox.Location = new System.Drawing.Point(84, 199); + this.OuterPosTextBox.Name = "OuterPosTextBox"; + this.OuterPosTextBox.Size = new System.Drawing.Size(237, 20); + this.OuterPosTextBox.TabIndex = 47; + this.OuterPosTextBox.TextChanged += new System.EventHandler(this.OuterPosTextBox_TextChanged); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(7, 178); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(64, 13); + this.label5.TabIndex = 44; + this.label5.Text = "Inner vec 3:"; + // + // InnerVec3TextBox + // + this.InnerVec3TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.InnerVec3TextBox.Location = new System.Drawing.Point(84, 175); + this.InnerVec3TextBox.Name = "InnerVec3TextBox"; + this.InnerVec3TextBox.Size = new System.Drawing.Size(237, 20); + this.InnerVec3TextBox.TabIndex = 45; + this.InnerVec3TextBox.TextChanged += new System.EventHandler(this.InnerVec3TextBox_TextChanged); + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(7, 154); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(64, 13); + this.label4.TabIndex = 42; + this.label4.Text = "Inner vec 2:"; + // + // InnerVec2TextBox + // + this.InnerVec2TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.InnerVec2TextBox.Location = new System.Drawing.Point(84, 151); + this.InnerVec2TextBox.Name = "InnerVec2TextBox"; + this.InnerVec2TextBox.Size = new System.Drawing.Size(237, 20); + this.InnerVec2TextBox.TabIndex = 43; + this.InnerVec2TextBox.TextChanged += new System.EventHandler(this.InnerVec2TextBox_TextChanged); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(7, 130); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(64, 13); + this.label3.TabIndex = 40; + this.label3.Text = "Inner vec 1:"; + // + // InnerVec1TextBox + // + this.InnerVec1TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.InnerVec1TextBox.Location = new System.Drawing.Point(84, 127); + this.InnerVec1TextBox.Name = "InnerVec1TextBox"; + this.InnerVec1TextBox.Size = new System.Drawing.Size(237, 20); + this.InnerVec1TextBox.TabIndex = 41; + this.InnerVec1TextBox.TextChanged += new System.EventHandler(this.InnerVec1TextBox_TextChanged); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(7, 106); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(63, 13); + this.label2.TabIndex = 38; + this.label2.Text = "Inner angle:"; + // + // InnerAngleTextBox + // + this.InnerAngleTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.InnerAngleTextBox.Location = new System.Drawing.Point(84, 103); + this.InnerAngleTextBox.Name = "InnerAngleTextBox"; + this.InnerAngleTextBox.Size = new System.Drawing.Size(237, 20); + this.InnerAngleTextBox.TabIndex = 39; + this.InnerAngleTextBox.TextChanged += new System.EventHandler(this.InnerAngleTextBox_TextChanged); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(7, 82); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(55, 13); + this.label1.TabIndex = 36; + this.label1.Text = "Inner size:"; + // + // InnerSizeTextBox + // + this.InnerSizeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.InnerSizeTextBox.Location = new System.Drawing.Point(84, 79); + this.InnerSizeTextBox.Name = "InnerSizeTextBox"; + this.InnerSizeTextBox.Size = new System.Drawing.Size(237, 20); + this.InnerSizeTextBox.TabIndex = 37; + this.InnerSizeTextBox.TextChanged += new System.EventHandler(this.InnerSizeTextBox_TextChanged); + // + // label16 + // + this.label16.AutoSize = true; + this.label16.Location = new System.Drawing.Point(7, 58); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(73, 13); + this.label16.TabIndex = 34; + this.label16.Text = "Inner position:"; + // + // InnerPosTextBox + // + this.InnerPosTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.InnerPosTextBox.Location = new System.Drawing.Point(84, 55); + this.InnerPosTextBox.Name = "InnerPosTextBox"; + this.InnerPosTextBox.Size = new System.Drawing.Size(237, 20); + this.InnerPosTextBox.TabIndex = 35; + this.InnerPosTextBox.TextChanged += new System.EventHandler(this.InnerPosTextBox_TextChanged); + // + // GoToButton + // + this.GoToButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.GoToButton.Location = new System.Drawing.Point(483, 0); + this.GoToButton.Name = "GoToButton"; + this.GoToButton.Size = new System.Drawing.Size(68, 23); + this.GoToButton.TabIndex = 31; + this.GoToButton.Text = "Go to"; + this.GoToButton.UseVisualStyleBackColor = true; + this.GoToButton.Click += new System.EventHandler(this.GoToButton_Click); + // + // label22 + // + this.label22.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label22.AutoSize = true; + this.label22.Location = new System.Drawing.Point(327, 34); + this.label22.Name = "label22"; + this.label22.Size = new System.Drawing.Size(58, 13); + this.label22.TabIndex = 76; + this.label22.Text = "Unk bytes:"; + // + // UnkBytesTextBox + // + this.UnkBytesTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.UnkBytesTextBox.Location = new System.Drawing.Point(390, 31); + this.UnkBytesTextBox.Name = "UnkBytesTextBox"; + this.UnkBytesTextBox.Size = new System.Drawing.Size(155, 20); + this.UnkBytesTextBox.TabIndex = 77; + this.UnkBytesTextBox.TextChanged += new System.EventHandler(this.UnkBytesTextBox_TextChanged); + // // EditAudioZonePanel // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(562, 450); + this.Controls.Add(this.GoToButton); this.Controls.Add(this.tabControl1); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Name = "EditAudioZonePanel"; this.Text = "Edit Audio Zone"; this.tabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.tabPage1.PerformLayout(); this.ResumeLayout(false); } @@ -73,5 +654,54 @@ #endregion private System.Windows.Forms.TabControl tabControl1; private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.TextBox InnerPosTextBox; + private System.Windows.Forms.Button GoToButton; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox InnerSizeTextBox; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TextBox InnerVec2TextBox; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox InnerVec1TextBox; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox InnerAngleTextBox; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TextBox InnerVec3TextBox; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.TextBox NameTextBox; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TextBox OuterVec3TextBox; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.TextBox OuterVec2TextBox; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.TextBox OuterVec1TextBox; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.TextBox OuterAngleTextBox; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.TextBox OuterSizeTextBox; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.TextBox OuterPosTextBox; + private System.Windows.Forms.ComboBox ShapeComboBox; + private System.Windows.Forms.Label label23; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.TextBox Flags1TextBox; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.TextBox Flags0TextBox; + private WinForms.TextBoxFix HashesTextBox; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.TextBox UnkVec3TextBox; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.TextBox UnkVec2TextBox; + private System.Windows.Forms.Label label18; + private System.Windows.Forms.TextBox UnkVec1TextBox; + private System.Windows.Forms.Label label20; + private WinForms.TextBoxFix ExtParamsTextBox; + private System.Windows.Forms.Label label19; + private System.Windows.Forms.Label label21; + private System.Windows.Forms.TextBox Flags2TextBox; + private System.Windows.Forms.Button AddToProjectButton; + private System.Windows.Forms.Button DeleteButton; + private System.Windows.Forms.Label label22; + private System.Windows.Forms.TextBox UnkBytesTextBox; } } \ No newline at end of file diff --git a/Project/Panels/EditAudioZonePanel.cs b/Project/Panels/EditAudioZonePanel.cs index 642dc65..dae06cd 100644 --- a/Project/Panels/EditAudioZonePanel.cs +++ b/Project/Panels/EditAudioZonePanel.cs @@ -1,9 +1,12 @@ -using CodeWalker.World; +using CodeWalker.GameFiles; +using CodeWalker.World; +using SharpDX; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; +using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -16,6 +19,9 @@ namespace CodeWalker.Project.Panels public ProjectForm ProjectForm; public AudioPlacement CurrentZone { get; set; } + private bool populatingui = false; + + public EditAudioZonePanel(ProjectForm owner) { ProjectForm = owner; @@ -25,7 +31,9 @@ namespace CodeWalker.Project.Panels public void SetZone(AudioPlacement zone) { CurrentZone = zone; + Tag = zone; UpdateFormTitle(); + UpdateUI(); } private void UpdateFormTitle() @@ -34,5 +42,533 @@ namespace CodeWalker.Project.Panels } + private void UpdateUI() + { + + if (CurrentZone?.AudioZone == null) + { + AddToProjectButton.Enabled = false; + DeleteButton.Enabled = false; + + populatingui = true; + NameTextBox.Text = string.Empty; + ShapeComboBox.Text = string.Empty; + InnerPosTextBox.Text = string.Empty; + InnerSizeTextBox.Text = string.Empty; + InnerAngleTextBox.Text = string.Empty; + InnerVec1TextBox.Text = string.Empty; + InnerVec2TextBox.Text = string.Empty; + InnerVec3TextBox.Text = string.Empty; + OuterPosTextBox.Text = string.Empty; + OuterSizeTextBox.Text = string.Empty; + OuterAngleTextBox.Text = string.Empty; + OuterVec1TextBox.Text = string.Empty; + OuterVec2TextBox.Text = string.Empty; + OuterVec3TextBox.Text = string.Empty; + UnkVec1TextBox.Text = string.Empty; + UnkVec2TextBox.Text = string.Empty; + UnkVec3TextBox.Text = string.Empty; + UnkBytesTextBox.Text = string.Empty; + Flags0TextBox.Text = string.Empty; + Flags1TextBox.Text = string.Empty; + Flags2TextBox.Text = string.Empty; + HashesTextBox.Text = string.Empty; + ExtParamsTextBox.Text = string.Empty; + populatingui = false; + } + else + { + AddToProjectButton.Enabled = CurrentZone?.RelFile != null ? !ProjectForm.AudioFileExistsInProject(CurrentZone.RelFile) : false; + DeleteButton.Enabled = !AddToProjectButton.Enabled; + + populatingui = true; + var z = CurrentZone.AudioZone; + NameTextBox.Text = z.NameHash.ToString(); + ShapeComboBox.Text = z.Shape.ToString(); + InnerPosTextBox.Text = FloatUtil.GetVector3String(z.InnerPos); + InnerSizeTextBox.Text = FloatUtil.GetVector3String(z.InnerSize); + InnerAngleTextBox.Text = z.InnerAngle.ToString(); + InnerVec1TextBox.Text = FloatUtil.GetVector4String(z.InnerVec1); + InnerVec2TextBox.Text = FloatUtil.GetVector4String(z.InnerVec2); + InnerVec3TextBox.Text = FloatUtil.GetVector3String(z.InnerVec3); + OuterPosTextBox.Text = FloatUtil.GetVector3String(z.OuterPos); + OuterSizeTextBox.Text = FloatUtil.GetVector3String(z.OuterSize); + OuterAngleTextBox.Text = z.OuterAngle.ToString(); + OuterVec1TextBox.Text = FloatUtil.GetVector4String(z.OuterVec1); + OuterVec2TextBox.Text = FloatUtil.GetVector4String(z.OuterVec2); + OuterVec3TextBox.Text = FloatUtil.GetVector3String(z.OuterVec3); + UnkVec1TextBox.Text = FloatUtil.GetVector4String(z.UnkVec1); + UnkVec2TextBox.Text = FloatUtil.GetVector4String(z.UnkVec2); + UnkVec3TextBox.Text = FloatUtil.GetVector4String(z.UnkVec3); + UnkBytesTextBox.Text = string.Format("{0}, {1}, {2}", z.Unk14, z.Unk15, z.Unk16); + Flags0TextBox.Text = z.Flags0.Hex; + Flags1TextBox.Text = z.Flags1.Hex; + Flags2TextBox.Text = z.Flags2.Hex; + + StringBuilder sb = new StringBuilder(); + if (z.Hashes != null) + { + foreach (var hash in z.Hashes) + { + sb.AppendLine(hash.ToString()); + } + } + HashesTextBox.Text = sb.ToString(); + + sb.Clear(); + if (z.ExtParams != null) + { + foreach (var extparam in z.ExtParams) + { + sb.Append(extparam.Hash.ToString()); + sb.Append(", "); + sb.Append(FloatUtil.ToString(extparam.Value)); + sb.AppendLine(); + } + } + ExtParamsTextBox.Text = sb.ToString(); + + populatingui = false; + + if (ProjectForm.WorldForm != null) + { + ProjectForm.WorldForm.SelectAudio(CurrentZone); + } + + } + + } + + + private void ProjectItemChanged() + { + CurrentZone?.UpdateFromZone();//also update the placement wrapper + + if (CurrentZone?.RelFile != null) + { + ProjectForm.SetAudioFileHasChanged(true); + } + } + + + private void NameTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentZone?.AudioZone == null) return; + + uint hash = 0; + string name = NameTextBox.Text; + if (!uint.TryParse(name, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(name); + JenkIndex.Ensure(name); + } + //NameHashLabel.Text = "Hash: " + hash.ToString(); + + if (CurrentZone.AudioZone.NameHash != hash) + { + CurrentZone.AudioZone.Name = NameTextBox.Text; + CurrentZone.AudioZone.NameHash = hash; + + ProjectItemChanged(); + } + + } + + private void ShapeComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentZone?.AudioZone == null) return; + + Dat151ZoneShape shape = Dat151ZoneShape.Box; + if (Enum.TryParse(ShapeComboBox.Text, out shape)) + { + if (CurrentZone.AudioZone.Shape != shape) + { + CurrentZone.AudioZone.Shape = shape; + + ProjectItemChanged(); + } + } + + } + + private void InnerPosTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentZone?.AudioZone == null) return; + + var vec = FloatUtil.ParseVector3String(InnerPosTextBox.Text); + if (CurrentZone.AudioZone.InnerPos != vec) + { + CurrentZone.AudioZone.InnerPos = vec; + + ProjectItemChanged(); + + //var wf = ProjectForm.WorldForm; + //if (wf != null) + //{ + // wf.BeginInvoke(new Action(() => + // { + // wf.SetWidgetPosition(CurrentZone.Position, true); + // })); + //} + } + } + + private void InnerSizeTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentZone?.AudioZone == null) return; + + var vec = FloatUtil.ParseVector3String(InnerSizeTextBox.Text); + if (CurrentZone.AudioZone.InnerSize != vec) + { + CurrentZone.AudioZone.InnerSize = vec; + + ProjectItemChanged(); + } + } + + private void InnerAngleTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentZone?.AudioZone == null) return; + + uint ang = 0; + if (uint.TryParse(InnerAngleTextBox.Text, out ang)) + { + if (CurrentZone.AudioZone.InnerAngle != ang) + { + CurrentZone.AudioZone.InnerAngle = ang; + + ProjectItemChanged(); + } + } + } + + private void InnerVec1TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentZone?.AudioZone == null) return; + + var vec = FloatUtil.ParseVector4String(InnerVec1TextBox.Text); + if (CurrentZone.AudioZone.InnerVec1 != vec) + { + CurrentZone.AudioZone.InnerVec1 = vec; + + ProjectItemChanged(); + } + } + + private void InnerVec2TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentZone?.AudioZone == null) return; + + var vec = FloatUtil.ParseVector4String(InnerVec2TextBox.Text); + if (CurrentZone.AudioZone.InnerVec2 != vec) + { + CurrentZone.AudioZone.InnerVec2 = vec; + + ProjectItemChanged(); + } + } + + private void InnerVec3TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentZone?.AudioZone == null) return; + + var vec = FloatUtil.ParseVector3String(InnerVec3TextBox.Text); + if (CurrentZone.AudioZone.InnerVec3 != vec) + { + CurrentZone.AudioZone.InnerVec3 = vec; + + ProjectItemChanged(); + } + } + + private void OuterPosTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentZone?.AudioZone == null) return; + + var vec = FloatUtil.ParseVector3String(OuterPosTextBox.Text); + if (CurrentZone.AudioZone.OuterPos != vec) + { + CurrentZone.AudioZone.OuterPos = vec; + + ProjectItemChanged(); + } + } + + private void OuterSizeTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentZone?.AudioZone == null) return; + + var vec = FloatUtil.ParseVector3String(OuterSizeTextBox.Text); + if (CurrentZone.AudioZone.OuterSize != vec) + { + CurrentZone.AudioZone.OuterSize = vec; + + ProjectItemChanged(); + } + } + + private void OuterAngleTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentZone?.AudioZone == null) return; + + uint ang = 0; + if (uint.TryParse(OuterAngleTextBox.Text, out ang)) + { + if (CurrentZone.AudioZone.OuterAngle != ang) + { + CurrentZone.AudioZone.OuterAngle = ang; + + ProjectItemChanged(); + } + } + } + + private void OuterVec1TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentZone?.AudioZone == null) return; + + var vec = FloatUtil.ParseVector4String(OuterVec1TextBox.Text); + if (CurrentZone.AudioZone.OuterVec1 != vec) + { + CurrentZone.AudioZone.OuterVec1 = vec; + + ProjectItemChanged(); + } + } + + private void OuterVec2TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentZone?.AudioZone == null) return; + + var vec = FloatUtil.ParseVector4String(OuterVec2TextBox.Text); + if (CurrentZone.AudioZone.OuterVec2 != vec) + { + CurrentZone.AudioZone.OuterVec2 = vec; + + ProjectItemChanged(); + } + } + + private void OuterVec3TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentZone?.AudioZone == null) return; + + var vec = FloatUtil.ParseVector3String(OuterVec3TextBox.Text); + if (CurrentZone.AudioZone.OuterVec3 != vec) + { + CurrentZone.AudioZone.OuterVec3 = vec; + + ProjectItemChanged(); + } + } + + private void UnkVec1TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentZone?.AudioZone == null) return; + + var vec = FloatUtil.ParseVector4String(UnkVec1TextBox.Text); + if (CurrentZone.AudioZone.UnkVec1 != vec) + { + CurrentZone.AudioZone.UnkVec1 = vec; + + ProjectItemChanged(); + } + } + + private void UnkVec2TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentZone?.AudioZone == null) return; + + var vec = FloatUtil.ParseVector4String(UnkVec2TextBox.Text); + if (CurrentZone.AudioZone.UnkVec2 != vec) + { + CurrentZone.AudioZone.UnkVec2 = vec; + + ProjectItemChanged(); + } + } + + private void UnkVec3TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentZone?.AudioZone == null) return; + + var vec = FloatUtil.ParseVector4String(UnkVec3TextBox.Text); + if (CurrentZone.AudioZone.UnkVec3 != vec) + { + CurrentZone.AudioZone.UnkVec3 = vec; + + ProjectItemChanged(); + } + } + + private void UnkBytesTextBox_TextChanged(object sender, EventArgs e) + { + var vals = UnkBytesTextBox.Text.Split(','); + if (vals?.Length == 3) + { + byte val0 = 0, val1 = 0, val2 = 0; + byte.TryParse(vals[0].Trim(), out val0); + byte.TryParse(vals[1].Trim(), out val1); + byte.TryParse(vals[2].Trim(), out val2); + + CurrentZone.AudioZone.Unk14 = val0; + CurrentZone.AudioZone.Unk15 = val1; + CurrentZone.AudioZone.Unk16 = val2; + + ProjectItemChanged(); + } + } + + private void Flags0TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentZone?.AudioZone == null) return; + + uint flags = 0; + if (uint.TryParse(Flags0TextBox.Text, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out flags)) + { + if (CurrentZone.AudioZone.Flags0.Value != flags) + { + CurrentZone.AudioZone.Flags0 = flags; + + ProjectItemChanged(); + } + } + + } + + private void Flags1TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentZone?.AudioZone == null) return; + + uint flags = 0; + if (uint.TryParse(Flags1TextBox.Text, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out flags)) + { + if (CurrentZone.AudioZone.Flags1.Value != flags) + { + CurrentZone.AudioZone.Flags1 = flags; + + ProjectItemChanged(); + } + } + } + + private void Flags2TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentZone?.AudioZone == null) return; + + uint flags = 0; + if (uint.TryParse(Flags2TextBox.Text, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out flags)) + { + if (CurrentZone.AudioZone.Flags2.Value != flags) + { + CurrentZone.AudioZone.Flags2 = flags; + + ProjectItemChanged(); + } + } + } + + private void HashesTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentZone?.AudioZone == null) return; + + var hashstrs = HashesTextBox.Text.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + if (hashstrs?.Length > 0) + { + var hashlist = new List(); + foreach (var hashstr in hashstrs) + { + uint hash = 0; + if (!uint.TryParse(hashstr, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(hashstr); + JenkIndex.Ensure(hashstr); + } + hashlist.Add(hash); + } + + CurrentZone.AudioZone.Hashes = hashlist.ToArray(); + CurrentZone.AudioZone.HashesCount = (byte)hashlist.Count; + + ProjectItemChanged(); + } + } + + private void ExtParamsTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentZone?.AudioZone == null) return; + + var paramstrs = ExtParamsTextBox.Text.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + if (paramstrs?.Length > 0) + { + var paramlist = new List(); + foreach (var paramstr in paramstrs) + { + var paramvals = paramstr.Split(','); + if (paramvals?.Length == 2) + { + var param = new Dat151AmbientZone.ExtParam(); + var hashstr = paramvals[0].Trim(); + var valstr = paramvals[1].Trim(); + uint hash = 0; + if (!uint.TryParse(hashstr, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(hashstr); + JenkIndex.Ensure(hashstr); + } + param.Hash = hash; + param.Value = FloatUtil.Parse(valstr); + paramlist.Add(param); + } + } + + CurrentZone.AudioZone.ExtParams = paramlist.ToArray(); + CurrentZone.AudioZone.ExtParamsCount = (uint)paramlist.Count; + + ProjectItemChanged(); + } + } + + private void GoToButton_Click(object sender, EventArgs e) + { + if (CurrentZone == null) return; + if (ProjectForm.WorldForm == null) return; + ProjectForm.WorldForm.GoToPosition(CurrentZone.Position, CurrentZone.AudioZone.InnerSize); + } + + private void AddToProjectButton_Click(object sender, EventArgs e) + { + ProjectForm.SetProjectItem(CurrentZone); + ProjectForm.AddAudioFileToProject(CurrentZone.RelFile); + } + + private void DeleteButton_Click(object sender, EventArgs e) + { + ProjectForm.SetProjectItem(CurrentZone); + ProjectForm.DeleteAudioZone(); + } + } } diff --git a/Project/ProjectFile.cs b/Project/ProjectFile.cs index 7589ba0..c6a6f2e 100644 --- a/Project/ProjectFile.cs +++ b/Project/ProjectFile.cs @@ -731,6 +731,7 @@ namespace CodeWalker.Project RelFile relfile = new RelFile(); relfile.RpfFileEntry = new RpfResourceFileEntry(); relfile.RpfFileEntry.Name = Path.GetFileName(filename); + relfile.RpfFileEntry.NameHash = JenkHash.GenHash(relfile.RpfFileEntry.Name); relfile.FilePath = GetFullFilePath(filename); relfile.Name = relfile.RpfFileEntry.Name; if (!AddAudioRelFile(relfile)) return null; diff --git a/Project/ProjectForm.Designer.cs b/Project/ProjectForm.Designer.cs index c935b08..81e1b4b 100644 --- a/Project/ProjectForm.Designer.cs +++ b/Project/ProjectForm.Designer.cs @@ -124,6 +124,16 @@ this.toolStripSeparator22 = new System.Windows.Forms.ToolStripSeparator(); this.ScenarioAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); this.ScenarioRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.AudioMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.AudioNameMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator23 = new System.Windows.Forms.ToolStripSeparator(); + this.AudioNewAmbientEmitterMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.AudioNewAmbientEmitterListMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.AudioNewAmbientZoneMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.AudioNewAmbientZoneListMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator24 = new System.Windows.Forms.ToolStripSeparator(); + this.AudioAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.AudioRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); this.ToolsMenu = new System.Windows.Forms.ToolStripMenuItem(); this.ToolsManifestGeneratorMenu = new System.Windows.Forms.ToolStripMenuItem(); this.ToolsNavMeshGeneratorMenu = new System.Windows.Forms.ToolStripMenuItem(); @@ -158,16 +168,8 @@ this.ToolbarSaveButton = new System.Windows.Forms.ToolStripButton(); this.ToolbarSaveAllButton = new System.Windows.Forms.ToolStripButton(); this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); - this.AudioMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.AudioNameMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator23 = new System.Windows.Forms.ToolStripSeparator(); - this.AudioNewAmbientEmitterMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.AudioNewAmbientZoneMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.AudioNewAmbientEmitterListMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.AudioNewAmbientZoneListMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator24 = new System.Windows.Forms.ToolStripSeparator(); - this.AudioAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.AudioRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.FileNewAudioDatMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.FileOpenAudioDatMenu = new System.Windows.Forms.ToolStripMenuItem(); this.MainMenu.SuspendLayout(); this.MainToolbar.SuspendLayout(); this.SuspendLayout(); @@ -219,62 +221,63 @@ this.FileNewYndMenu, this.FileNewYnvMenu, this.FileNewTrainsMenu, - this.FileNewScenarioMenu}); + this.FileNewScenarioMenu, + this.FileNewAudioDatMenu}); this.FileNewMenu.Name = "FileNewMenu"; - this.FileNewMenu.Size = new System.Drawing.Size(163, 22); + this.FileNewMenu.Size = new System.Drawing.Size(180, 22); this.FileNewMenu.Text = "New"; // // FileNewProjectMenu // this.FileNewProjectMenu.Name = "FileNewProjectMenu"; - this.FileNewProjectMenu.Size = new System.Drawing.Size(140, 22); + this.FileNewProjectMenu.Size = new System.Drawing.Size(180, 22); this.FileNewProjectMenu.Text = "Project"; this.FileNewProjectMenu.Click += new System.EventHandler(this.FileNewProjectMenu_Click); // // toolStripSeparator8 // this.toolStripSeparator8.Name = "toolStripSeparator8"; - this.toolStripSeparator8.Size = new System.Drawing.Size(137, 6); + this.toolStripSeparator8.Size = new System.Drawing.Size(177, 6); // // FileNewYmapMenu // this.FileNewYmapMenu.Name = "FileNewYmapMenu"; - this.FileNewYmapMenu.Size = new System.Drawing.Size(140, 22); + this.FileNewYmapMenu.Size = new System.Drawing.Size(180, 22); this.FileNewYmapMenu.Text = "Ymap File"; this.FileNewYmapMenu.Click += new System.EventHandler(this.FileNewYmapMenu_Click); // // FileNewYtypMenu // this.FileNewYtypMenu.Name = "FileNewYtypMenu"; - this.FileNewYtypMenu.Size = new System.Drawing.Size(140, 22); + this.FileNewYtypMenu.Size = new System.Drawing.Size(180, 22); this.FileNewYtypMenu.Text = "Ytyp File"; this.FileNewYtypMenu.Click += new System.EventHandler(this.FileNewYtypMenu_Click); // // FileNewYndMenu // this.FileNewYndMenu.Name = "FileNewYndMenu"; - this.FileNewYndMenu.Size = new System.Drawing.Size(140, 22); + this.FileNewYndMenu.Size = new System.Drawing.Size(180, 22); this.FileNewYndMenu.Text = "Ynd File"; this.FileNewYndMenu.Click += new System.EventHandler(this.FileNewYndMenu_Click); // // FileNewYnvMenu // this.FileNewYnvMenu.Name = "FileNewYnvMenu"; - this.FileNewYnvMenu.Size = new System.Drawing.Size(140, 22); + this.FileNewYnvMenu.Size = new System.Drawing.Size(180, 22); this.FileNewYnvMenu.Text = "Ynv File"; this.FileNewYnvMenu.Click += new System.EventHandler(this.FileNewYnvMenu_Click); // // FileNewTrainsMenu // this.FileNewTrainsMenu.Name = "FileNewTrainsMenu"; - this.FileNewTrainsMenu.Size = new System.Drawing.Size(140, 22); + this.FileNewTrainsMenu.Size = new System.Drawing.Size(180, 22); this.FileNewTrainsMenu.Text = "Trains File"; this.FileNewTrainsMenu.Click += new System.EventHandler(this.FileNewTrainsMenu_Click); // // FileNewScenarioMenu // this.FileNewScenarioMenu.Name = "FileNewScenarioMenu"; - this.FileNewScenarioMenu.Size = new System.Drawing.Size(140, 22); + this.FileNewScenarioMenu.Size = new System.Drawing.Size(180, 22); this.FileNewScenarioMenu.Text = "Scenario File"; this.FileNewScenarioMenu.Click += new System.EventHandler(this.FileNewScenarioMenu_Click); // @@ -288,88 +291,89 @@ this.FileOpenYndMenu, this.FileOpenYnvMenu, this.FileOpenTrainsMenu, - this.FileOpenScenarioMenu}); + this.FileOpenScenarioMenu, + this.FileOpenAudioDatMenu}); this.FileOpenMenu.Name = "FileOpenMenu"; - this.FileOpenMenu.Size = new System.Drawing.Size(163, 22); + this.FileOpenMenu.Size = new System.Drawing.Size(180, 22); this.FileOpenMenu.Text = "Open"; // // FileOpenProjectMenu // this.FileOpenProjectMenu.Name = "FileOpenProjectMenu"; - this.FileOpenProjectMenu.Size = new System.Drawing.Size(149, 22); + this.FileOpenProjectMenu.Size = new System.Drawing.Size(180, 22); this.FileOpenProjectMenu.Text = "Project..."; this.FileOpenProjectMenu.Click += new System.EventHandler(this.FileOpenProjectMenu_Click); // // toolStripSeparator9 // this.toolStripSeparator9.Name = "toolStripSeparator9"; - this.toolStripSeparator9.Size = new System.Drawing.Size(146, 6); + this.toolStripSeparator9.Size = new System.Drawing.Size(177, 6); // // FileOpenYmapMenu // this.FileOpenYmapMenu.Name = "FileOpenYmapMenu"; - this.FileOpenYmapMenu.Size = new System.Drawing.Size(149, 22); + this.FileOpenYmapMenu.Size = new System.Drawing.Size(180, 22); this.FileOpenYmapMenu.Text = "Ymap File..."; this.FileOpenYmapMenu.Click += new System.EventHandler(this.FileOpenYmapMenu_Click); // // FileOpenYtypMenu // this.FileOpenYtypMenu.Name = "FileOpenYtypMenu"; - this.FileOpenYtypMenu.Size = new System.Drawing.Size(149, 22); + this.FileOpenYtypMenu.Size = new System.Drawing.Size(180, 22); this.FileOpenYtypMenu.Text = "Ytyp File..."; this.FileOpenYtypMenu.Click += new System.EventHandler(this.FileOpenYtypMenu_Click); // // FileOpenYndMenu // this.FileOpenYndMenu.Name = "FileOpenYndMenu"; - this.FileOpenYndMenu.Size = new System.Drawing.Size(149, 22); + this.FileOpenYndMenu.Size = new System.Drawing.Size(180, 22); this.FileOpenYndMenu.Text = "Ynd File..."; this.FileOpenYndMenu.Click += new System.EventHandler(this.FileOpenYndMenu_Click); // // FileOpenYnvMenu // this.FileOpenYnvMenu.Name = "FileOpenYnvMenu"; - this.FileOpenYnvMenu.Size = new System.Drawing.Size(149, 22); + this.FileOpenYnvMenu.Size = new System.Drawing.Size(180, 22); this.FileOpenYnvMenu.Text = "Ynv File..."; this.FileOpenYnvMenu.Click += new System.EventHandler(this.FileOpenYnvMenu_Click); // // FileOpenTrainsMenu // this.FileOpenTrainsMenu.Name = "FileOpenTrainsMenu"; - this.FileOpenTrainsMenu.Size = new System.Drawing.Size(149, 22); + this.FileOpenTrainsMenu.Size = new System.Drawing.Size(180, 22); this.FileOpenTrainsMenu.Text = "Trains File..."; this.FileOpenTrainsMenu.Click += new System.EventHandler(this.FileOpenTrainsMenu_Click); // // FileOpenScenarioMenu // this.FileOpenScenarioMenu.Name = "FileOpenScenarioMenu"; - this.FileOpenScenarioMenu.Size = new System.Drawing.Size(149, 22); + this.FileOpenScenarioMenu.Size = new System.Drawing.Size(180, 22); this.FileOpenScenarioMenu.Text = "Scenario File..."; this.FileOpenScenarioMenu.Click += new System.EventHandler(this.FileOpenScenarioMenu_Click); // // toolStripSeparator3 // this.toolStripSeparator3.Name = "toolStripSeparator3"; - this.toolStripSeparator3.Size = new System.Drawing.Size(160, 6); + this.toolStripSeparator3.Size = new System.Drawing.Size(177, 6); // // FileCloseProjectMenu // this.FileCloseProjectMenu.Enabled = false; this.FileCloseProjectMenu.Name = "FileCloseProjectMenu"; - this.FileCloseProjectMenu.Size = new System.Drawing.Size(163, 22); + this.FileCloseProjectMenu.Size = new System.Drawing.Size(180, 22); this.FileCloseProjectMenu.Text = "Close Project"; this.FileCloseProjectMenu.Click += new System.EventHandler(this.FileCloseProjectMenu_Click); // // toolStripSeparator4 // this.toolStripSeparator4.Name = "toolStripSeparator4"; - this.toolStripSeparator4.Size = new System.Drawing.Size(160, 6); + this.toolStripSeparator4.Size = new System.Drawing.Size(177, 6); // // FileSaveProjectMenu // this.FileSaveProjectMenu.Enabled = false; this.FileSaveProjectMenu.Name = "FileSaveProjectMenu"; - this.FileSaveProjectMenu.Size = new System.Drawing.Size(163, 22); + this.FileSaveProjectMenu.Size = new System.Drawing.Size(180, 22); this.FileSaveProjectMenu.Text = "Save Project"; this.FileSaveProjectMenu.Click += new System.EventHandler(this.FileSaveProjectMenu_Click); // @@ -377,7 +381,7 @@ // this.FileSaveProjectAsMenu.Enabled = false; this.FileSaveProjectAsMenu.Name = "FileSaveProjectAsMenu"; - this.FileSaveProjectAsMenu.Size = new System.Drawing.Size(163, 22); + this.FileSaveProjectAsMenu.Size = new System.Drawing.Size(180, 22); this.FileSaveProjectAsMenu.Text = "Save Project As..."; this.FileSaveProjectAsMenu.Click += new System.EventHandler(this.FileSaveProjectAsMenu_Click); // @@ -385,7 +389,7 @@ // this.FileSaveItemMenu.Enabled = false; this.FileSaveItemMenu.Name = "FileSaveItemMenu"; - this.FileSaveItemMenu.Size = new System.Drawing.Size(163, 22); + this.FileSaveItemMenu.Size = new System.Drawing.Size(180, 22); this.FileSaveItemMenu.Text = "Save Item"; this.FileSaveItemMenu.Visible = false; this.FileSaveItemMenu.Click += new System.EventHandler(this.FileSaveItemMenu_Click); @@ -394,7 +398,7 @@ // this.FileSaveItemAsMenu.Enabled = false; this.FileSaveItemAsMenu.Name = "FileSaveItemAsMenu"; - this.FileSaveItemAsMenu.Size = new System.Drawing.Size(163, 22); + this.FileSaveItemAsMenu.Size = new System.Drawing.Size(180, 22); this.FileSaveItemAsMenu.Text = "Save Item As..."; this.FileSaveItemAsMenu.Visible = false; this.FileSaveItemAsMenu.Click += new System.EventHandler(this.FileSaveItemAsMenu_Click); @@ -939,6 +943,88 @@ this.ScenarioRemoveFromProjectMenu.Text = "Remove from Project"; this.ScenarioRemoveFromProjectMenu.Click += new System.EventHandler(this.ScenarioRemoveFromProjectMenu_Click); // + // AudioMenu + // + this.AudioMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.AudioNameMenu, + this.toolStripSeparator23, + this.AudioNewAmbientEmitterMenu, + this.AudioNewAmbientEmitterListMenu, + this.AudioNewAmbientZoneMenu, + this.AudioNewAmbientZoneListMenu, + this.toolStripSeparator24, + this.AudioAddToProjectMenu, + this.AudioRemoveFromProjectMenu}); + this.AudioMenu.Name = "AudioMenu"; + this.AudioMenu.Size = new System.Drawing.Size(51, 20); + this.AudioMenu.Text = "Audio"; + this.AudioMenu.Visible = false; + // + // AudioNameMenu + // + this.AudioNameMenu.Enabled = false; + this.AudioNameMenu.Name = "AudioNameMenu"; + this.AudioNameMenu.Size = new System.Drawing.Size(216, 22); + this.AudioNameMenu.Text = "(No audio dat file selected)"; + // + // toolStripSeparator23 + // + this.toolStripSeparator23.Name = "toolStripSeparator23"; + this.toolStripSeparator23.Size = new System.Drawing.Size(213, 6); + // + // AudioNewAmbientEmitterMenu + // + this.AudioNewAmbientEmitterMenu.Enabled = false; + this.AudioNewAmbientEmitterMenu.Name = "AudioNewAmbientEmitterMenu"; + this.AudioNewAmbientEmitterMenu.Size = new System.Drawing.Size(216, 22); + this.AudioNewAmbientEmitterMenu.Text = "New Ambient Emitter"; + this.AudioNewAmbientEmitterMenu.Click += new System.EventHandler(this.AudioNewAmbientEmitterMenu_Click); + // + // AudioNewAmbientEmitterListMenu + // + this.AudioNewAmbientEmitterListMenu.Enabled = false; + this.AudioNewAmbientEmitterListMenu.Name = "AudioNewAmbientEmitterListMenu"; + this.AudioNewAmbientEmitterListMenu.Size = new System.Drawing.Size(216, 22); + this.AudioNewAmbientEmitterListMenu.Text = "New Ambient Emitter List"; + this.AudioNewAmbientEmitterListMenu.Click += new System.EventHandler(this.AudioNewAmbientEmitterListMenu_Click); + // + // AudioNewAmbientZoneMenu + // + this.AudioNewAmbientZoneMenu.Enabled = false; + this.AudioNewAmbientZoneMenu.Name = "AudioNewAmbientZoneMenu"; + this.AudioNewAmbientZoneMenu.Size = new System.Drawing.Size(216, 22); + this.AudioNewAmbientZoneMenu.Text = "New Ambient Zone"; + this.AudioNewAmbientZoneMenu.Click += new System.EventHandler(this.AudioNewAmbientZoneMenu_Click); + // + // AudioNewAmbientZoneListMenu + // + this.AudioNewAmbientZoneListMenu.Enabled = false; + this.AudioNewAmbientZoneListMenu.Name = "AudioNewAmbientZoneListMenu"; + this.AudioNewAmbientZoneListMenu.Size = new System.Drawing.Size(216, 22); + this.AudioNewAmbientZoneListMenu.Text = "New Ambient Zone List"; + this.AudioNewAmbientZoneListMenu.Click += new System.EventHandler(this.AudioNewAmbientZoneListMenu_Click); + // + // toolStripSeparator24 + // + this.toolStripSeparator24.Name = "toolStripSeparator24"; + this.toolStripSeparator24.Size = new System.Drawing.Size(213, 6); + // + // AudioAddToProjectMenu + // + this.AudioAddToProjectMenu.Enabled = false; + this.AudioAddToProjectMenu.Name = "AudioAddToProjectMenu"; + this.AudioAddToProjectMenu.Size = new System.Drawing.Size(216, 22); + this.AudioAddToProjectMenu.Text = "Add to Project"; + this.AudioAddToProjectMenu.Click += new System.EventHandler(this.AudioAddToProjectMenu_Click); + // + // AudioRemoveFromProjectMenu + // + this.AudioRemoveFromProjectMenu.Enabled = false; + this.AudioRemoveFromProjectMenu.Name = "AudioRemoveFromProjectMenu"; + this.AudioRemoveFromProjectMenu.Size = new System.Drawing.Size(216, 22); + this.AudioRemoveFromProjectMenu.Text = "Remove from Project"; + this.AudioRemoveFromProjectMenu.Click += new System.EventHandler(this.AudioRemoveFromProjectMenu_Click); + // // ToolsMenu // this.ToolsMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -1214,87 +1300,19 @@ this.toolStripSeparator5.Name = "toolStripSeparator5"; this.toolStripSeparator5.Size = new System.Drawing.Size(6, 25); // - // AudioMenu + // FileNewAudioDatMenu // - this.AudioMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.AudioNameMenu, - this.toolStripSeparator23, - this.AudioNewAmbientEmitterMenu, - this.AudioNewAmbientEmitterListMenu, - this.AudioNewAmbientZoneMenu, - this.AudioNewAmbientZoneListMenu, - this.toolStripSeparator24, - this.AudioAddToProjectMenu, - this.AudioRemoveFromProjectMenu}); - this.AudioMenu.Name = "AudioMenu"; - this.AudioMenu.Size = new System.Drawing.Size(51, 20); - this.AudioMenu.Text = "Audio"; - this.AudioMenu.Visible = false; + this.FileNewAudioDatMenu.Name = "FileNewAudioDatMenu"; + this.FileNewAudioDatMenu.Size = new System.Drawing.Size(180, 22); + this.FileNewAudioDatMenu.Text = "Audio Dat File"; + this.FileNewAudioDatMenu.Click += new System.EventHandler(this.FileNewAudioDatMenu_Click); // - // AudioNameMenu + // FileOpenAudioDatMenu // - this.AudioNameMenu.Enabled = false; - this.AudioNameMenu.Name = "AudioNameMenu"; - this.AudioNameMenu.Size = new System.Drawing.Size(216, 22); - this.AudioNameMenu.Text = "(No audio dat file selected)"; - // - // toolStripSeparator23 - // - this.toolStripSeparator23.Name = "toolStripSeparator23"; - this.toolStripSeparator23.Size = new System.Drawing.Size(213, 6); - // - // AudioNewAmbientEmitterMenu - // - this.AudioNewAmbientEmitterMenu.Enabled = false; - this.AudioNewAmbientEmitterMenu.Name = "AudioNewAmbientEmitterMenu"; - this.AudioNewAmbientEmitterMenu.Size = new System.Drawing.Size(216, 22); - this.AudioNewAmbientEmitterMenu.Text = "New Ambient Emitter"; - this.AudioNewAmbientEmitterMenu.Click += new System.EventHandler(this.AudioNewAmbientEmitterMenu_Click); - // - // AudioNewAmbientZoneMenu - // - this.AudioNewAmbientZoneMenu.Enabled = false; - this.AudioNewAmbientZoneMenu.Name = "AudioNewAmbientZoneMenu"; - this.AudioNewAmbientZoneMenu.Size = new System.Drawing.Size(216, 22); - this.AudioNewAmbientZoneMenu.Text = "New Ambient Zone"; - this.AudioNewAmbientZoneMenu.Click += new System.EventHandler(this.AudioNewAmbientZoneMenu_Click); - // - // AudioNewAmbientEmitterListMenu - // - this.AudioNewAmbientEmitterListMenu.Enabled = false; - this.AudioNewAmbientEmitterListMenu.Name = "AudioNewAmbientEmitterListMenu"; - this.AudioNewAmbientEmitterListMenu.Size = new System.Drawing.Size(216, 22); - this.AudioNewAmbientEmitterListMenu.Text = "New Ambient Emitter List"; - this.AudioNewAmbientEmitterListMenu.Click += new System.EventHandler(this.AudioNewAmbientEmitterListMenu_Click); - // - // AudioNewAmbientZoneListMenu - // - this.AudioNewAmbientZoneListMenu.Enabled = false; - this.AudioNewAmbientZoneListMenu.Name = "AudioNewAmbientZoneListMenu"; - this.AudioNewAmbientZoneListMenu.Size = new System.Drawing.Size(216, 22); - this.AudioNewAmbientZoneListMenu.Text = "New Ambient Zone List"; - this.AudioNewAmbientZoneListMenu.Click += new System.EventHandler(this.AudioNewAmbientZoneListMenu_Click); - // - // toolStripSeparator24 - // - this.toolStripSeparator24.Name = "toolStripSeparator24"; - this.toolStripSeparator24.Size = new System.Drawing.Size(213, 6); - // - // AudioAddToProjectMenu - // - this.AudioAddToProjectMenu.Enabled = false; - this.AudioAddToProjectMenu.Name = "AudioAddToProjectMenu"; - this.AudioAddToProjectMenu.Size = new System.Drawing.Size(216, 22); - this.AudioAddToProjectMenu.Text = "Add to Project"; - this.AudioAddToProjectMenu.Click += new System.EventHandler(this.AudioAddToProjectMenu_Click); - // - // AudioRemoveFromProjectMenu - // - this.AudioRemoveFromProjectMenu.Enabled = false; - this.AudioRemoveFromProjectMenu.Name = "AudioRemoveFromProjectMenu"; - this.AudioRemoveFromProjectMenu.Size = new System.Drawing.Size(216, 22); - this.AudioRemoveFromProjectMenu.Text = "Remove from Project"; - this.AudioRemoveFromProjectMenu.Click += new System.EventHandler(this.AudioRemoveFromProjectMenu_Click); + this.FileOpenAudioDatMenu.Name = "FileOpenAudioDatMenu"; + this.FileOpenAudioDatMenu.Size = new System.Drawing.Size(180, 22); + this.FileOpenAudioDatMenu.Text = "Audio Dat File..."; + this.FileOpenAudioDatMenu.Click += new System.EventHandler(this.FileOpenAudioDatMenu_Click); // // ProjectForm // @@ -1460,5 +1478,7 @@ private System.Windows.Forms.ToolStripSeparator toolStripSeparator24; private System.Windows.Forms.ToolStripMenuItem AudioAddToProjectMenu; private System.Windows.Forms.ToolStripMenuItem AudioRemoveFromProjectMenu; + private System.Windows.Forms.ToolStripMenuItem FileNewAudioDatMenu; + private System.Windows.Forms.ToolStripMenuItem FileOpenAudioDatMenu; } } \ No newline at end of file diff --git a/Project/ProjectForm.cs b/Project/ProjectForm.cs index 614835c..dd06f32 100644 --- a/Project/ProjectForm.cs +++ b/Project/ProjectForm.cs @@ -79,6 +79,7 @@ namespace CodeWalker.Project private Dictionary visibletrains = new Dictionary(); private Dictionary visiblescenarios = new Dictionary(); private Dictionary visiblemloentities = new Dictionary(); + private Dictionary visibleaudiofiles = new Dictionary(); private bool ShowProjectItemInProcess = false; @@ -1140,6 +1141,10 @@ namespace CodeWalker.Project { SaveScenario(); } + else if (CurrentAudioFile != null) + { + SaveAudioFile(); + } else if (CurrentProjectFile != null) { SaveProject(); @@ -1221,6 +1226,18 @@ namespace CodeWalker.Project //ShowEditScenarioPanel(false); } + if (CurrentProjectFile.AudioRelFiles != null) + { + var caudf = CurrentAudioFile; + foreach (var audf in CurrentProjectFile.AudioRelFiles) + { + CurrentAudioFile = audf; + SaveAudioFile(); + } + CurrentAudioFile = caudf; + //ShowEditAudioFilePanel(false); + } + SaveProject(); } @@ -1251,6 +1268,10 @@ namespace CodeWalker.Project { SaveScenario(saveas); } + else if (CurrentAudioFile != null) + { + SaveAudioFile(saveas); + } } @@ -4493,13 +4514,124 @@ namespace CodeWalker.Project return CurrentProjectFile.ContainsAudioRel(rel); } - public void NewAudioZone(AudioPlacement copy = null, bool copyPosition = false) //TODO + public void NewAudioZone(AudioPlacement copy = null, bool copyPosition = false) { - MessageBox.Show("NewAudioZone TODO!"); + if (CurrentAudioFile == null) return; + + if (copy == null) + { + copy = CurrentAudioZone; + } + + + var zone = new Dat151AmbientZone(CurrentAudioFile); + var ap = new AudioPlacement(CurrentAudioFile, zone); + + bool cp = copyPosition && (copy != null); + Vector3 pos = cp ? copy.Position : GetSpawnPos(20.0f); + Quaternion ori = cp ? copy.Orientation : Quaternion.Identity; + ap.SetPosition(pos); + ap.SetOrientation(ori); + + //AA800424 box, line + //AA800420 sphere + zone.Flags0 = cp ? copy.AudioZone.Flags0 : 0xAA800424; + zone.Flags1 = cp ? copy.AudioZone.Flags1 : 0; + zone.Flags2 = cp ? copy.AudioZone.Flags2 : 0; + zone.Shape = cp ? copy.AudioZone.Shape : Dat151ZoneShape.Box; + zone.InnerSize = cp ? copy.AudioZone.InnerSize : Vector3.One * 10.0f; + zone.InnerAngle = cp ? copy.AudioZone.InnerAngle : 0; + zone.InnerVec1 = cp ? copy.AudioZone.InnerVec1 : Vector4.Zero; + zone.InnerVec2 = cp ? copy.AudioZone.InnerVec2 : new Vector4(1, 1, 1, 0); + zone.InnerVec3 = cp ? copy.AudioZone.InnerVec3 : Vector3.Zero; + zone.OuterSize = cp ? copy.AudioZone.OuterSize : Vector3.One * 15.0f; + zone.OuterAngle = cp ? copy.AudioZone.OuterAngle : 0; + zone.OuterVec1 = cp ? copy.AudioZone.OuterVec1 : Vector4.Zero; + zone.OuterVec2 = cp ? copy.AudioZone.OuterVec2 : new Vector4(1, 1, 1, 0); + zone.OuterVec3 = cp ? copy.AudioZone.OuterVec3 : Vector3.Zero; + zone.UnkVec1 = cp ? copy.AudioZone.UnkVec1 : new Vector4(0, 0, 1, 0); + zone.UnkVec2 = cp ? copy.AudioZone.UnkVec2 : new Vector4(1, -1, -1, 0); + zone.UnkVec3 = cp ? copy.AudioZone.UnkVec3 : new Vector4(0, 0, -1, 0); + zone.Unk14 = cp ? copy.AudioZone.Unk14 : (byte)0; + zone.Unk15 = cp ? copy.AudioZone.Unk15 : (byte)0; + zone.Unk16 = cp ? copy.AudioZone.Unk16 : (byte)0; + zone.HashesCount = cp ? copy.AudioZone.HashesCount: (byte)0; + zone.Hashes = cp ? copy.AudioZone.Hashes : null; + zone.ExtParamsCount = cp ? copy.AudioZone.ExtParamsCount : 0; + zone.ExtParams = cp ? copy.AudioZone.ExtParams : null; + zone.Name = "zone1"; + zone.NameHash = JenkHash.GenHash(zone.Name); + ap.Name = zone.Name; + ap.NameHash = zone.NameHash; + + + + CurrentAudioFile.AddRelData(zone); + + LoadProjectTree(); + + ProjectExplorer?.TrySelectAudioZoneTreeNode(ap); + CurrentAudioZone = ap; + + ShowEditAudioZonePanel(false); + + + if (WorldForm != null) + { + WorldForm.UpdateAudioPlacementGraphics(CurrentAudioFile); + } } - public bool DeleteAudioZone() //TODO + public bool DeleteAudioZone() { - return false; + if (CurrentAudioZone?.RelFile != CurrentAudioFile) return false; + if (CurrentAudioFile?.RelDatas == null) return false; //nothing to delete.. + if (CurrentAudioFile?.RelDatasSorted == null) return false; //nothing to delete.. + if (CurrentAudioZone?.AudioZone == null) return false; + + + if (MessageBox.Show("Are you sure you want to delete this audio zone?\n" + CurrentAudioZone.GetNameString() + "\n" + CurrentAudioZone.Position.ToString() + "\n\nThis operation cannot be undone. Continue?", "Confirm delete", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return true; + } + + bool res = false; + if (WorldForm != null) + { + lock (WorldForm.RenderSyncRoot) //don't try to do this while rendering... + { + res = CurrentAudioFile.RemoveRelData(CurrentAudioZone.AudioZone); + + WorldForm.UpdateAudioPlacementGraphics(CurrentAudioFile); + } + } + else + { + res = CurrentAudioFile.RemoveRelData(CurrentAudioZone.AudioZone); + } + if (!res) + { + MessageBox.Show("Unspecified error occurred when removing the audio zone from the file!"); + } + + var delzone = CurrentAudioZone; + var delrel = CurrentAudioFile; + + //ProjectExplorer?.RemoveAudioZoneTreeNode(delzone); + ProjectExplorer?.SetAudioRelHasChanged(delrel, true); + + ClosePanel((EditAudioZonePanel p) => { return p.Tag == delzone; }); + + CurrentAudioZone = null; + + if (WorldForm != null) + { + lock (WorldForm.RenderSyncRoot) + { + WorldForm.SelectItem(null); + } + } + + return true; } public bool IsCurrentAudioZone(AudioPlacement zone) { @@ -4510,9 +4642,57 @@ namespace CodeWalker.Project { MessageBox.Show("NewAudioEmitter TODO!"); } - public bool DeleteAudioEmitter() //TODO + public bool DeleteAudioEmitter() { - return false; + if (CurrentAudioEmitter?.RelFile != CurrentAudioFile) return false; + if (CurrentAudioFile?.RelDatas == null) return false; //nothing to delete.. + if (CurrentAudioFile?.RelDatasSorted == null) return false; //nothing to delete.. + if (CurrentAudioEmitter?.AudioEmitter == null) return false; + + + if (MessageBox.Show("Are you sure you want to delete this audio emitter?\n" + CurrentAudioEmitter.GetNameString() + "\n" + CurrentAudioEmitter.Position.ToString() + "\n\nThis operation cannot be undone. Continue?", "Confirm delete", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return true; + } + + bool res = false; + if (WorldForm != null) + { + lock (WorldForm.RenderSyncRoot) //don't try to do this while rendering... + { + res = CurrentAudioFile.RemoveRelData(CurrentAudioEmitter.AudioEmitter); + + WorldForm.UpdateAudioPlacementGraphics(CurrentAudioFile); + } + } + else + { + res = CurrentAudioFile.RemoveRelData(CurrentAudioEmitter.AudioEmitter); + } + if (!res) + { + MessageBox.Show("Unspecified error occurred when removing the audio emitter from the file!"); + } + + var delem = CurrentAudioEmitter; + var delrel = CurrentAudioFile; + + //ProjectExplorer?.RemoveAudioEmitterTreeNode(delem); + ProjectExplorer?.SetAudioRelHasChanged(delrel, true); + + ClosePanel((EditAudioEmitterPanel p) => { return p.Tag == delem; }); + + CurrentAudioEmitter = null; + + if (WorldForm != null) + { + lock (WorldForm.RenderSyncRoot) + { + WorldForm.SelectItem(null); + } + } + + return true; } public bool IsCurrentAudioEmitter(AudioPlacement emitter) { @@ -4523,9 +4703,47 @@ namespace CodeWalker.Project { MessageBox.Show("NewAudioZoneList TODO!"); } - public bool DeleteAudioZoneList() //TODO + public bool DeleteAudioZoneList() { - return false; + if (CurrentAudioZoneList?.Rel != CurrentAudioFile) return false; + if (CurrentAudioFile?.RelDatas == null) return false; //nothing to delete.. + if (CurrentAudioFile?.RelDatasSorted == null) return false; //nothing to delete.. + + + if (MessageBox.Show("Are you sure you want to delete this audio zone list?\n" + CurrentAudioZoneList.GetNameString() + "\n\nThis operation cannot be undone. Continue?", "Confirm delete", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return true; + } + + bool res = false; + if (WorldForm != null) + { + lock (WorldForm.RenderSyncRoot) //don't try to do this while rendering... + { + res = CurrentAudioFile.RemoveRelData(CurrentAudioZoneList); + //WorldForm.SelectItem(null, null, null); + } + } + else + { + res = CurrentAudioFile.RemoveRelData(CurrentAudioZoneList); + } + if (!res) + { + MessageBox.Show("Unspecified error occurred when removing the audio zone list from the file!"); + } + + var delzl = CurrentAudioZoneList; + var delrel = CurrentAudioFile; + + ProjectExplorer?.RemoveAudioZoneListTreeNode(delzl); + ProjectExplorer?.SetAudioRelHasChanged(delrel, true); + + ClosePanel((EditAudioZoneListPanel p) => { return p.Tag == delzl; }); + + CurrentAudioZoneList = null; + + return true; } public bool IsCurrentAudioZoneList(Dat151AmbientZoneList list) { @@ -4536,9 +4754,47 @@ namespace CodeWalker.Project { MessageBox.Show("NewAudioEmitterList TODO!"); } - public bool DeleteAudioEmitterList() //TODO + public bool DeleteAudioEmitterList() { - return false; + if (CurrentAudioEmitterList?.Rel != CurrentAudioFile) return false; + if (CurrentAudioFile?.RelDatas == null) return false; //nothing to delete.. + if (CurrentAudioFile?.RelDatasSorted == null) return false; //nothing to delete.. + + + if (MessageBox.Show("Are you sure you want to delete this audio emitter list?\n" + CurrentAudioEmitterList.GetNameString() + "\n\nThis operation cannot be undone. Continue?", "Confirm delete", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return true; + } + + bool res = false; + if (WorldForm != null) + { + lock (WorldForm.RenderSyncRoot) //don't try to do this while rendering... + { + res = CurrentAudioFile.RemoveRelData(CurrentAudioEmitterList); + //WorldForm.SelectItem(null, null, null); + } + } + else + { + res = CurrentAudioFile.RemoveRelData(CurrentAudioEmitterList); + } + if (!res) + { + MessageBox.Show("Unspecified error occurred when removing the audio emitter list from the file!"); + } + + var delel = CurrentAudioEmitterList; + var delrel = CurrentAudioFile; + + ProjectExplorer?.RemoveAudioEmitterListTreeNode(delel); + ProjectExplorer?.SetAudioRelHasChanged(delrel, true); + + ClosePanel((EditAudioEmitterListPanel p) => { return p.Tag == delel; }); + + CurrentAudioEmitterList = null; + + return true; } public bool IsCurrentAudioEmitterList(Dat151AmbientEmitterList list) { @@ -4747,27 +5003,38 @@ namespace CodeWalker.Project } } - public void GetVisibleAudioPlacements(Camera camera, List placements) + public void GetVisibleAudioFiles(Camera camera, List rels) { if (hidegtavmap) { - placements.Clear(); + rels.Clear(); } if (CurrentProjectFile == null) return; lock (projectsyncroot) { + visibleaudiofiles.Clear(); + for (int i = 0; i < rels.Count; i++) + { + var rel = rels[i]; + visibleaudiofiles[rel.RpfFileEntry.NameHash] = rel; + } for (int i = 0; i < CurrentProjectFile.AudioRelFiles.Count; i++) { - var auddat = CurrentProjectFile.AudioRelFiles[i]; - if (auddat.Loaded) + var rel = CurrentProjectFile.AudioRelFiles[i]; + if (rel.Loaded) { - //TODO: create AudioPlacement objects for project audio files! + visibleaudiofiles[rel.RpfFileEntry.NameHash] = rel; } } + rels.Clear(); + foreach (var rel in visibleaudiofiles.Values) + { + rels.Add(rel); + } } @@ -6075,6 +6342,10 @@ namespace CodeWalker.Project { NewScenario(); } + private void FileNewAudioDatMenu_Click(object sender, EventArgs e) + { + NewAudioFile(); + } private void FileOpenProjectMenu_Click(object sender, EventArgs e) { OpenProject(); @@ -6103,6 +6374,10 @@ namespace CodeWalker.Project { OpenScenario(); } + private void FileOpenAudioDatMenu_Click(object sender, EventArgs e) + { + OpenAudioFile(); + } private void FileCloseProjectMenu_Click(object sender, EventArgs e) { CloseProject(); diff --git a/Utils/MapUtils.cs b/Utils/MapUtils.cs index 3b36cc9..6b1e0fd 100644 --- a/Utils/MapUtils.cs +++ b/Utils/MapUtils.cs @@ -688,7 +688,7 @@ namespace CodeWalker } else if (Audio != null) { - return WidgetAxis.XYZ; + return WidgetAxis.Z; } return WidgetAxis.None; } diff --git a/WorldForm.cs b/WorldForm.cs index 60ba99e..6d28357 100644 --- a/WorldForm.cs +++ b/WorldForm.cs @@ -138,7 +138,8 @@ namespace CodeWalker bool renderaudiozones = false; bool renderaudioouterbounds = true; - List renderaudzonelist = new List(); + List renderaudfilelist = new List(); + List renderaudplacementslist = new List(); bool MapViewEnabled = false; int MapViewDragX = 0; @@ -850,17 +851,17 @@ namespace CodeWalker { if (!audiozones.Inited) return; - renderaudzonelist.Clear(); - for (int i = 0; i < audiozones.AllItems.Count; i++) - { - renderaudzonelist.Add(audiozones.AllItems[i]); - } + renderaudfilelist.Clear(); + renderaudfilelist.AddRange(audiozones.AllFiles); if (ProjectForm != null) { - ProjectForm.GetVisibleAudioPlacements(camera, renderaudzonelist); + ProjectForm.GetVisibleAudioFiles(camera, renderaudfilelist); } + renderaudplacementslist.Clear(); + audiozones.GetPlacements(renderaudfilelist, renderaudplacementslist); + //RenderablePathBatch rnd = renderableCache.GetRenderablePathBatch(audiozones); //if ((rnd != null) && (rnd.IsLoaded)) @@ -881,9 +882,9 @@ namespace CodeWalker MapBox mb = new MapBox(); MapSphere ms = new MapSphere(); - for (int i = 0; i < renderaudzonelist.Count; i++) + for (int i = 0; i < renderaudplacementslist.Count; i++) { - var placement = renderaudzonelist[i]; + var placement = renderaudplacementslist[i]; switch (placement.Shape) { case Dat151ZoneShape.Box: @@ -1869,6 +1870,11 @@ namespace CodeWalker } } + public void UpdateAudioPlacementGraphics(RelFile rel) + { + audiozones.PlacementsDict.Remove(rel); //should cause a rebuild to add/remove items + } + public Vector3 GetCameraPosition() { From 2d77d76e0c82ecc29ea2e38432a0e76cdd59358c Mon Sep 17 00:00:00 2001 From: dexy Date: Thu, 27 Dec 2018 11:53:53 +1100 Subject: [PATCH 059/158] Dat151 progress --- CodeWalker.Core/GameFiles/FileTypes/RelFile.cs | 15 +++++++++++++-- CodeWalker.Core/GameFiles/GameFileCache.cs | 12 +++++++++++- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index 3f85fc5..9ac398c 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -762,9 +762,20 @@ namespace CodeWalker.GameFiles } - //var sorted = RelDatasSorted.ToList(); + //for the correct index ordering, needs to be in order of hashes, but with bits rotated right by 8 (why!?) + var sorted = RelDatasSorted.ToList(); //sorted.Sort((a, b) => { return ((uint)a.NameHash).CompareTo((uint)b.NameHash); }); - //RelDatas = sorted.ToArray(); + sorted.Sort((a, b) => + { + var ah = (uint)a.NameHash; + var bh = (uint)b.NameHash; + var av = (ah >> 8) | (ah << 24); + var bv = (bh >> 8) | (bh << 24); + return av.CompareTo(bv); + }); + RelDatas = sorted.ToArray(); + + var hashes = new RelIndexHash[RelDatas.Length]; for (int i = 0; i < RelDatas.Length; i++) diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index 93586b4..baaef08 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -2121,6 +2121,7 @@ namespace CodeWalker.GameFiles StringBuilder sb = new StringBuilder(); StringBuilder sbh = new StringBuilder(); + StringBuilder sbi = new StringBuilder(); foreach (RpfFile rpf in RpfMan.AllRpfs) { @@ -2222,7 +2223,7 @@ namespace CodeWalker.GameFiles { for (int i = 0; i < data.Length; i++) //raw file test if (data[i] != rel.RawFileData[i]) - { } + { break; } } } @@ -2235,6 +2236,15 @@ namespace CodeWalker.GameFiles if (rel2.RelDatas == null) { } + + + //sbi.Clear(); + //foreach (var rd in rel.RelDatas) + //{ + // sbi.AppendLine(new FlagsUint(rd.NameHash).Bin); + //} + //string indexbinstr = sbi.ToString(); + } } From a4ca5f812d17d1e924cbd3c5483c2058dcc9f35c Mon Sep 17 00:00:00 2001 From: dexy Date: Thu, 27 Dec 2018 21:37:44 +1100 Subject: [PATCH 060/158] Dat151 progress --- .../GameFiles/FileTypes/RelFile.cs | 376 +++++++--- CodeWalker.Core/GameFiles/GameFileCache.cs | 2 +- .../EditAudioEmitterListPanel.Designer.cs | 87 +++ Project/Panels/EditAudioEmitterListPanel.cs | 107 +++ .../Panels/EditAudioEmitterPanel.Designer.cs | 704 ++++++++++++++++++ Project/Panels/EditAudioEmitterPanel.cs | 576 +++++++++++++- Project/Panels/EditAudioFilePanel.Designer.cs | 117 +++ Project/Panels/EditAudioFilePanel.cs | 65 ++ .../Panels/EditAudioZoneListPanel.Designer.cs | 34 +- Project/Panels/EditAudioZoneListPanel.cs | 27 + Project/Panels/EditAudioZonePanel.Designer.cs | 66 +- Project/Panels/EditAudioZonePanel.cs | 1 + Project/Panels/ProjectExplorerPanel.cs | 121 ++- Project/ProjectForm.cs | 172 ++++- 14 files changed, 2264 insertions(+), 191 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index 9ac398c..1b867c3 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -58,7 +58,7 @@ namespace CodeWalker.GameFiles Dat54DataEntries = 54, Dat149 = 149, Dat150 = 150, - Dat151Parameters = 151 + Dat151 = 151 } [TC(typeof(EXP))] public class RelFile : GameFile, PackedFile @@ -417,7 +417,7 @@ namespace CodeWalker.GameFiles return ReadData149(d, dbr); case RelDatFileType.Dat150: //game.dat150.rel return ReadData150(d, dbr); - case RelDatFileType.Dat151Parameters: //game.dat151.rel + case RelDatFileType.Dat151: //game.dat151.rel return ReadData151(d, dbr); default: return d; //shouldn't get here... @@ -673,7 +673,7 @@ namespace CodeWalker.GameFiles { case RelDatFileType.Dat149: case RelDatFileType.Dat150: - case RelDatFileType.Dat151Parameters: + case RelDatFileType.Dat151: break; case RelDatFileType.Dat4://TODO! case RelDatFileType.Dat54DataEntries://TODO! @@ -753,7 +753,7 @@ namespace CodeWalker.GameFiles { case RelDatFileType.Dat149: case RelDatFileType.Dat150: - case RelDatFileType.Dat151Parameters: + case RelDatFileType.Dat151: break; case RelDatFileType.Dat4://TODO! case RelDatFileType.Dat54DataEntries://TODO! @@ -806,7 +806,7 @@ namespace CodeWalker.GameFiles { case RelDatFileType.Dat149: case RelDatFileType.Dat150: - case RelDatFileType.Dat151Parameters: + case RelDatFileType.Dat151: break; case RelDatFileType.Dat4://TODO! case RelDatFileType.Dat54DataEntries://TODO! @@ -854,8 +854,8 @@ namespace CodeWalker.GameFiles { case RelDatFileType.Dat149: case RelDatFileType.Dat150://treat these same as 151 - case RelDatFileType.Dat151Parameters: - relType = RelDatFileType.Dat151Parameters; + case RelDatFileType.Dat151: + relType = RelDatFileType.Dat151; break; case RelDatFileType.Dat54DataEntries: break; @@ -948,7 +948,7 @@ namespace CodeWalker.GameFiles return fcstr + ((Dat54SoundType)ItemType).ToString(); case RelDatFileType.Dat149: case RelDatFileType.Dat150: - case RelDatFileType.Dat151Parameters: + case RelDatFileType.Dat151: return fcstr + ((Dat151RelType)ItemType).ToString(); } @@ -1107,8 +1107,8 @@ namespace CodeWalker.GameFiles var newRelDatas = new List(); var newRelDatasSorted = new List(); - newRelDatas.AddRange(RelDatas); - newRelDatasSorted.AddRange(RelDatasSorted); + if (RelDatas != null) newRelDatas.AddRange(RelDatas); + if (RelDatasSorted != null) newRelDatasSorted.AddRange(RelDatasSorted); newRelDatas.Add(d); newRelDatasSorted.Add(d); @@ -1122,18 +1122,24 @@ namespace CodeWalker.GameFiles var newRelDatas = new List(); var newRelDatasSorted = new List(); - foreach (var relData in RelDatas) + if (RelDatas != null) { - if (relData != d) + foreach (var relData in RelDatas) { - newRelDatas.Add(relData); + if (relData != d) + { + newRelDatas.Add(relData); + } } } - foreach (var relData in RelDatasSorted) + if (RelDatasSorted != null) { - if (relData != d) + foreach (var relData in RelDatasSorted) { - newRelDatasSorted.Add(relData); + if (relData != d) + { + newRelDatasSorted.Add(relData); + } } } @@ -2615,6 +2621,11 @@ namespace CodeWalker.GameFiles public uint EmitterCount { get; set; } public MetaHash[] EmitterHashes { get; set; } + public Dat151AmbientEmitterList(RelFile rel) : base(rel) + { + Type = Dat151RelType.AmbientEmitterList; + TypeID = (byte)Type; + } public Dat151AmbientEmitterList(RelData d, BinaryReader br) : base(d, br) { EmitterCount = br.ReadUInt32(); @@ -2878,31 +2889,31 @@ namespace CodeWalker.GameFiles } [TC(typeof(EXP))] public class Dat151AmbientEmitter : Dat151RelData { - public FlagsUint Unk00 { get; set; } - public FlagsUint Unk01 { get; set; } - public FlagsUint Unk02 { get; set; } + public FlagsUint Flags0 { get; set; } + public FlagsUint Flags1 { get; set; } + public FlagsUint Flags2 { get; set; } public Vector3 Position { get; set; } - public FlagsUint Unk03 { get; set; } //0 - public MetaHash Unk04 { get; set; } - public MetaHash Unk05 { get; set; } - public FlagsUint Unk06 { get; set; } //0 - public FlagsUint Unk07 { get; set; } //0xFFFFFFFF - public FlagsUint Unk08 { get; set; } //0 - public float Unk09 { get; set; } //1, 5, 100, ... + public FlagsUint Flags3 { get; set; } //0 + public MetaHash Hash1 { get; set; } + public MetaHash Hash2 { get; set; } + public FlagsUint Flags4 { get; set; } //0 + public FlagsUint Flags5 { get; set; } //0xFFFFFFFF + public FlagsUint Flags6 { get; set; } //0 + public float Unk01 { get; set; } //1, 5, 100, ... public float InnerRad { get; set; } //0, 4, ... 100 ... min value? public float OuterRad { get; set; } //15, 16, 12, 10, 20, 300 ... max value? - public FlagsByte Unk12 { get; set; } - public FlagsByte Unk13 { get; set; } //0,1,2,3,4,5 - public FlagsByte Unk14 { get; set; } - public FlagsByte Unk15 { get; set; } //0,1,2,3,4,5 - public FlagsUshort Unk16 { get; set; } //0..600 - public FlagsUshort Unk17 { get; set; } //0..150 - public FlagsByte Unk18 { get; set; } //0,1,2 - public FlagsByte Unk19 { get; set; } //0,1,2 - public FlagsByte Unk20 { get; set; } //1,2,3,4,8,255 - public FlagsByte Unk21 { get; set; } //1,2,3,4,5,6,8,10,255 - public FlagsByte Unk22 { get; set; } //0, 50, 80, 100 - public FlagsByte Unk23 { get; set; } //1,2,3,5 + public FlagsByte Unk02 { get; set; } + public FlagsByte Unk03 { get; set; } //0,1,2,3,4,5 + public FlagsByte Unk04 { get; set; } + public FlagsByte Unk05 { get; set; } //0,1,2,3,4,5 + public FlagsUshort Unk06 { get; set; } //0..600 + public FlagsUshort Unk07 { get; set; } //0..150 + public FlagsByte Unk08 { get; set; } //0,1,2 + public FlagsByte Unk09 { get; set; } //0,1,2 + public FlagsByte Unk10 { get; set; } //1,2,3,4,8,255 + public FlagsByte Unk11 { get; set; } //1,2,3,4,5,6,8,10,255 + public FlagsByte Unk12 { get; set; } //0, 50, 80, 100 + public FlagsByte Unk13 { get; set; } //1,2,3,5 public ushort ExtParamCount { get; set; } //0,1,2,4 public ExtParam[] ExtParams { get; set; } @@ -2930,33 +2941,38 @@ namespace CodeWalker.GameFiles } + public Dat151AmbientEmitter(RelFile rel) : base(rel) + { + Type = Dat151RelType.AmbientEmitter; + TypeID = (byte)Type; + } public Dat151AmbientEmitter(RelData d, BinaryReader br) : base(d, br) { - Unk00 = br.ReadUInt32(); - Unk01 = br.ReadUInt32(); - Unk02 = br.ReadUInt32(); + Flags0 = br.ReadUInt32(); + Flags1 = br.ReadUInt32(); + Flags2 = br.ReadUInt32(); Position = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); - Unk03 = br.ReadUInt32(); //0 - Unk04 = br.ReadUInt32(); - Unk05 = br.ReadUInt32(); - Unk06 = br.ReadUInt32(); //0 - Unk07 = br.ReadUInt32(); //0xFFFFFFFF - Unk08 = br.ReadUInt32(); //0 - Unk09 = br.ReadSingle(); //1, 5, 100, ... + Flags3 = br.ReadUInt32(); //0 + Hash1 = br.ReadUInt32(); + Hash2 = br.ReadUInt32(); + Flags4 = br.ReadUInt32(); //0 + Flags5 = br.ReadUInt32(); //0xFFFFFFFF + Flags6 = br.ReadUInt32(); //0 + Unk01 = br.ReadSingle(); //1, 5, 100, ... InnerRad = br.ReadSingle(); //0, 4, ... 100 ... min value? OuterRad = br.ReadSingle(); //15, 16, 12, 10, 20, 300 ... max value? - Unk12 = br.ReadByte(); - Unk13 = br.ReadByte(); //0,1,2,3,4,5 - Unk14 = br.ReadByte(); - Unk15 = br.ReadByte(); //0,1,2,3,4,5 - Unk16 = br.ReadUInt16(); //0..600 - Unk17 = br.ReadUInt16(); //0..150 - Unk18 = br.ReadByte(); //0,1,2 - Unk19 = br.ReadByte(); //0,1,2 - Unk20 = br.ReadByte(); //1,2,3,4,8,255 - Unk21 = br.ReadByte(); //1,2,3,4,5,6,8,10,255 - Unk22 = br.ReadByte(); //0, 50, 80, 100 - Unk23 = br.ReadByte(); //1,2,3,5 + Unk02 = br.ReadByte(); + Unk03 = br.ReadByte(); //0,1,2,3,4,5 + Unk04 = br.ReadByte(); + Unk05 = br.ReadByte(); //0,1,2,3,4,5 + Unk06 = br.ReadUInt16(); //0..600 + Unk07 = br.ReadUInt16(); //0..150 + Unk08 = br.ReadByte(); //0,1,2 + Unk09 = br.ReadByte(); //0,1,2 + Unk10 = br.ReadByte(); //1,2,3,4,8,255 + Unk11 = br.ReadByte(); //1,2,3,4,5,6,8,10,255 + Unk12 = br.ReadByte(); //0, 50, 80, 100 + Unk13 = br.ReadByte(); //1,2,3,5 ExtParamCount = br.ReadUInt16(); //0,1,2,4 if (ExtParamCount > 0) @@ -2970,7 +2986,7 @@ namespace CodeWalker.GameFiles int brem = (16 - ((ExtParamCount * 12) % 16)) % 16; if (brem > 0) { - byte[] brema = br.ReadBytes(brem); + //byte[] brema = br.ReadBytes(brem); //for (int i = 0; i < brem; i++) //{ // if (brema[i] != 0) @@ -2982,12 +2998,12 @@ namespace CodeWalker.GameFiles #region testing - switch (Unk12.Value)//no pattern? + switch (Unk02.Value)//no pattern? { default: break; } - switch (Unk13.Value) + switch (Unk03.Value) { case 0: case 1: @@ -2999,12 +3015,12 @@ namespace CodeWalker.GameFiles default: break; } - switch (Unk14.Value)//no pattern? + switch (Unk04.Value)//no pattern? { default: break; } - switch (Unk15.Value) + switch (Unk05.Value) { case 0: case 1: @@ -3016,7 +3032,7 @@ namespace CodeWalker.GameFiles default: break; } - switch (Unk16.Value) + switch (Unk06.Value) { case 0: case 1: @@ -3088,7 +3104,7 @@ namespace CodeWalker.GameFiles default: break; } - switch (Unk17.Value) + switch (Unk07.Value) { case 0: case 1: @@ -3121,7 +3137,7 @@ namespace CodeWalker.GameFiles default: break; } - switch (Unk18.Value) + switch (Unk08.Value) { case 0: case 1: @@ -3130,7 +3146,7 @@ namespace CodeWalker.GameFiles default: break; } - switch (Unk19.Value) + switch (Unk09.Value) { case 0: case 1: @@ -3139,7 +3155,7 @@ namespace CodeWalker.GameFiles default: break; } - switch (Unk20.Value) + switch (Unk10.Value) { case 1: case 2: @@ -3151,7 +3167,7 @@ namespace CodeWalker.GameFiles default: break; } - switch (Unk21.Value) + switch (Unk11.Value) { case 1: case 2: @@ -3166,7 +3182,7 @@ namespace CodeWalker.GameFiles default: break; } - switch (Unk22.Value) + switch (Unk12.Value) { case 0: case 50: @@ -3176,7 +3192,7 @@ namespace CodeWalker.GameFiles default: break; } - switch (Unk23.Value) + switch (Unk13.Value) { case 1: case 2: @@ -3218,33 +3234,33 @@ namespace CodeWalker.GameFiles //base.Write(bw); WriteTypeAndOffset(bw); - bw.Write(Unk00.Value); - bw.Write(Unk01.Value); - bw.Write(Unk02.Value); + bw.Write(Flags0.Value); + bw.Write(Flags1.Value); + bw.Write(Flags2.Value); bw.Write(Position.X); bw.Write(Position.Y); bw.Write(Position.Z); + bw.Write(Flags3.Value); + bw.Write(Hash1); + bw.Write(Hash2); + bw.Write(Flags4.Value); + bw.Write(Flags5.Value); + bw.Write(Flags6.Value); + bw.Write(Unk01); + bw.Write(InnerRad); + bw.Write(OuterRad); + bw.Write(Unk02.Value); bw.Write(Unk03.Value); - bw.Write(Unk04); - bw.Write(Unk05); + bw.Write(Unk04.Value); + bw.Write(Unk05.Value); bw.Write(Unk06.Value); bw.Write(Unk07.Value); bw.Write(Unk08.Value); - bw.Write(Unk09); - bw.Write(InnerRad); - bw.Write(OuterRad); + bw.Write(Unk09.Value); + bw.Write(Unk10.Value); + bw.Write(Unk11.Value); bw.Write(Unk12.Value); bw.Write(Unk13.Value); - bw.Write(Unk14.Value); - bw.Write(Unk15.Value); - bw.Write(Unk16.Value); - bw.Write(Unk17.Value); - bw.Write(Unk18.Value); - bw.Write(Unk19.Value); - bw.Write(Unk20.Value); - bw.Write(Unk21.Value); - bw.Write(Unk22.Value); - bw.Write(Unk23.Value); bw.Write(ExtParamCount); if (ExtParamCount > 0) @@ -3266,6 +3282,11 @@ namespace CodeWalker.GameFiles public uint ZoneCount { get; set; } public MetaHash[] ZoneHashes { get; set; } + public Dat151AmbientZoneList(RelFile rel) : base(rel) + { + Type = Dat151RelType.AmbientZoneList; + TypeID = (byte)Type; + } public Dat151AmbientZoneList(RelData d, BinaryReader br) : base(d, br) { ZoneCount = br.ReadUInt32(); @@ -3301,6 +3322,11 @@ namespace CodeWalker.GameFiles public uint AudioItemCount { get; set; } public Dat151HashPair[] AudioItems { get; set; } + public Dat151WeaponAudioItem(RelFile rel) : base(rel) + { + Type = Dat151RelType.WeaponAudioItem; + TypeID = (byte)Type; + } public Dat151WeaponAudioItem(RelData d, BinaryReader br) : base(d, br) { AudioTrack0 = br.ReadUInt32(); @@ -3358,6 +3384,11 @@ namespace CodeWalker.GameFiles public Dat151HashPair[] Items { get; set; } + public Dat151StartTrackAction(RelFile rel) : base(rel) + { + Type = Dat151RelType.StartTrackAction; + TypeID = (byte)Type; + } public Dat151StartTrackAction(RelData d, BinaryReader br) : base(d, br) { Unk0 = br.ReadUInt32(); @@ -3428,6 +3459,11 @@ namespace CodeWalker.GameFiles public int Unk3 { get; set; } public int Unk4 { get; set; } + public Dat151StopTrackAction(RelFile rel) : base(rel) + { + Type = Dat151RelType.StopTrackAction; + TypeID = (byte)Type; + } public Dat151StopTrackAction(RelData d, BinaryReader br) : base(d, br) { Unk0 = br.ReadUInt32(); @@ -3476,6 +3512,9 @@ namespace CodeWalker.GameFiles return AudioTrack0.ToString(); } + public Dat151MoodItem() + { + } public Dat151MoodItem(BinaryReader br) { AudioTrack0 = br.ReadUInt32(); @@ -3507,6 +3546,11 @@ namespace CodeWalker.GameFiles public uint MoodItemCount { get; set; } public Dat151MoodItem[] MoodItems { get; set; } + public Dat151Mood(RelFile rel) : base(rel) + { + Type = Dat151RelType.Mood; + TypeID = (byte)Type; + } public Dat151Mood(RelData d, BinaryReader br) : base(d, br) { Unk0 = br.ReadUInt32(); @@ -3565,6 +3609,11 @@ namespace CodeWalker.GameFiles public uint Unk5 { get; set; } public uint Unk6 { get; set; } + public Dat151SetMoodAction(RelFile rel) : base(rel) + { + Type = Dat151RelType.SetMoodAction; + TypeID = (byte)Type; + } public Dat151SetMoodAction(RelData d, BinaryReader br) : base(d, br) { Unk0 = br.ReadUInt32(); @@ -3607,6 +3656,11 @@ namespace CodeWalker.GameFiles public uint AudioTrackCount { get; set; } public MetaHash[] AudioTracks { get; set; } + public Dat151PlayerAction(RelFile rel) : base(rel) + { + Type = Dat151RelType.PlayerAction; + TypeID = (byte)Type; + } public Dat151PlayerAction(RelData d, BinaryReader br) : base(d, br) { AudioTrackCount = br.ReadUInt32(); @@ -3658,6 +3712,11 @@ namespace CodeWalker.GameFiles public int Unk7 { get; set; } public int Unk8 { get; set; } + public Dat151StartOneShotAction(RelFile rel) : base(rel) + { + Type = Dat151RelType.StartOneShotAction; + TypeID = (byte)Type; + } public Dat151StartOneShotAction(RelData d, BinaryReader br) : base(d, br) { Unk0 = br.ReadUInt32(); @@ -3706,6 +3765,11 @@ namespace CodeWalker.GameFiles public MetaHash AudioTrack1 { get; set; } public uint Unk3 { get; set; } + public Dat151StopOneShotAction(RelFile rel) : base(rel) + { + Type = Dat151RelType.StopOneShotAction; + TypeID = (byte)Type; + } public Dat151StopOneShotAction(RelData d, BinaryReader br) : base(d, br) { Unk0 = br.ReadUInt32(); @@ -3748,6 +3812,11 @@ namespace CodeWalker.GameFiles public float Unk3 { get; set; } public float Unk4 { get; set; } + public Dat151FadeInRadioAction(RelFile rel) : base(rel) + { + Type = Dat151RelType.FadeInRadioAction; + TypeID = (byte)Type; + } public Dat151FadeInRadioAction(RelData d, BinaryReader br) : base(d, br) { Unk0 = br.ReadUInt32(); @@ -3789,6 +3858,11 @@ namespace CodeWalker.GameFiles public float Unk3 { get; set; } public float Unk4 { get; set; } + public Dat151FadeOutRadioAction(RelFile rel) : base(rel) + { + Type = Dat151RelType.FadeOutRadioAction; + TypeID = (byte)Type; + } public Dat151FadeOutRadioAction(RelData d, BinaryReader br) : base(d, br) { Unk0 = br.ReadUInt32(); @@ -3844,6 +3918,11 @@ namespace CodeWalker.GameFiles public MetaHash[] AudioTracks2 { get; set; } + public Dat151Mod(RelFile rel) : base(rel) + { + Type = Dat151RelType.Mod; + TypeID = (byte)Type; + } public Dat151Mod(RelData d, BinaryReader br) : base(d, br) { Unk00 = br.ReadUInt32(); @@ -3991,6 +4070,11 @@ namespace CodeWalker.GameFiles public uint RoomsCount { get; set; } public MetaHash[] Rooms { get; set; } + public Dat151Interior(RelFile rel) : base(rel) + { + Type = Dat151RelType.Interior; + TypeID = (byte)Type; + } public Dat151Interior(RelData d, BinaryReader br) : base(d, br) { Unk0 = br.ReadUInt32(); @@ -4050,6 +4134,11 @@ namespace CodeWalker.GameFiles public MetaHash Unk13 { get; set; } public MetaHash Unk14 { get; set; } + public Dat151InteriorRoom(RelFile rel) : base(rel) + { + Type = Dat151RelType.InteriorRoom; + TypeID = (byte)Type; + } public Dat151InteriorRoom(RelData d, BinaryReader br) : base(d, br) { Unk00 = br.ReadUInt32(); @@ -4103,6 +4192,11 @@ namespace CodeWalker.GameFiles { public MetaHash AudioTrack0 { get; set; } + public Dat151Unk117(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk117; + TypeID = (byte)Type; + } public Dat151Unk117(RelData d, BinaryReader br) : base(d, br) { AudioTrack0 = br.ReadUInt32(); @@ -4218,6 +4312,11 @@ namespace CodeWalker.GameFiles public uint Unk88 { get; set; } public uint Unk89 { get; set; } + public Dat151Entity(RelFile rel) : base(rel) + { + Type = Dat151RelType.Entity; + TypeID = (byte)Type; + } public Dat151Entity(RelData d, BinaryReader br) : base(d, br) { Unk00 = br.ReadUInt32(); @@ -4478,6 +4577,11 @@ namespace CodeWalker.GameFiles public MetaHash AudioTrack0 { get; set; } public MetaHash AudioTrack1 { get; set; } + public Dat151Collision(RelFile rel) : base(rel) + { + Type = Dat151RelType.Collision; + TypeID = (byte)Type; + } public Dat151Collision(RelData d, BinaryReader br) : base(d, br) { Unk00 = br.ReadUInt32(); @@ -4614,6 +4718,11 @@ namespace CodeWalker.GameFiles public MetaHash AudioTrack0 { get; set; } public float Unk1 { get; set; } + public Dat151Unk47(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk47; + TypeID = (byte)Type; + } public Dat151Unk47(RelData d, BinaryReader br) : base(d, br) { Unk0 = br.ReadUInt32(); @@ -4642,6 +4751,11 @@ namespace CodeWalker.GameFiles public uint AudioItemCount { get; set; } public Dat151HashPair[] AudioItems { get; set; } + public Dat151Unk83(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk83; + TypeID = (byte)Type; + } public Dat151Unk83(RelData d, BinaryReader br) : base(d, br) { AudioItemCount = br.ReadUInt32(); @@ -4690,6 +4804,11 @@ namespace CodeWalker.GameFiles public uint AudioTracksCount { get; set; } public MetaHash[] AudioTracks { get; set; } + public Dat151ForceRadioTrackAction(RelFile rel) : base(rel) + { + Type = Dat151RelType.ForceRadioTrackAction; + TypeID = (byte)Type; + } public Dat151ForceRadioTrackAction(RelData d, BinaryReader br) : base(d, br) { Unk0 = br.ReadUInt32(); @@ -4753,6 +4872,11 @@ namespace CodeWalker.GameFiles public uint Unk4 { get; set; } public uint Unk5 { get; set; } + public Dat151RadioDjSpeechAction(RelFile rel) : base(rel) + { + Type = Dat151RelType.RadioDjSpeechAction; + TypeID = (byte)Type; + } public Dat151RadioDjSpeechAction(RelData d, BinaryReader br) : base(d, br) { Unk0 = br.ReadUInt32(); @@ -4791,6 +4915,11 @@ namespace CodeWalker.GameFiles public uint AudioItemCount { get; set; } public Dat151HashPair[] AudioItems { get; set; } + public Dat151Unk78(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk78; + TypeID = (byte)Type; + } public Dat151Unk78(RelData d, BinaryReader br) : base(d, br) { AudioItemCount = br.ReadUInt32(); @@ -4831,6 +4960,11 @@ namespace CodeWalker.GameFiles public uint AudioTracksCount { get; set; } public MetaHash[] AudioTracks { get; set; } + public Dat151RadioStationsDLC(RelFile rel) : base(rel) + { + Type = Dat151RelType.RadioStationsDLC; + TypeID = (byte)Type; + } public Dat151RadioStationsDLC(RelData d, BinaryReader br) : base(d, br) { AudioTracksCount = br.ReadUInt32(); @@ -4882,6 +5016,11 @@ namespace CodeWalker.GameFiles public uint AudioTracksCount { get; set; } public MetaHash[] AudioTracks { get; set; } + public Dat151RadioDLC(RelFile rel) : base(rel) + { + Type = Dat151RelType.RadioDLC; + TypeID = (byte)Type; + } public Dat151RadioDLC(RelData d, BinaryReader br) : base(d, br) { Unk00 = br.ReadUInt32(); @@ -4945,6 +5084,11 @@ namespace CodeWalker.GameFiles public uint AudioItemCount { get; set; } public Dat151HashPair[] AudioItems { get; set; } + public Dat151Unk49(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk49; + TypeID = (byte)Type; + } public Dat151Unk49(RelData d, BinaryReader br) : base(d, br) { AudioItemCount = br.ReadUInt32(); @@ -4985,6 +5129,11 @@ namespace CodeWalker.GameFiles public uint AudioItemCount { get; set; } public Dat151HashPair[] AudioItems { get; set; } + public Dat151Unk84(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk84; + TypeID = (byte)Type; + } public Dat151Unk84(RelData d, BinaryReader br) : base(d, br) { AudioItemCount = br.ReadUInt32(); @@ -5025,6 +5174,11 @@ namespace CodeWalker.GameFiles public uint AudioItemCount { get; set; } public Dat151HashPair[] AudioItems { get; set; } + public Dat151Unk86(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk86; + TypeID = (byte)Type; + } public Dat151Unk86(RelData d, BinaryReader br) : base(d, br) { AudioItemCount = br.ReadUInt32(); @@ -5065,6 +5219,11 @@ namespace CodeWalker.GameFiles public uint AudioItemCount { get; set; } public Dat151HashPair[] AudioItems { get; set; } + public Dat151Unk81(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk81; + TypeID = (byte)Type; + } public Dat151Unk81(RelData d, BinaryReader br) : base(d, br) { AudioItemCount = br.ReadUInt32(); @@ -5105,6 +5264,11 @@ namespace CodeWalker.GameFiles public uint AudioItemCount { get; set; } public Dat151HashPair[] AudioItems { get; set; } + public Dat151Unk55(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk55; + TypeID = (byte)Type; + } public Dat151Unk55(RelData d, BinaryReader br) : base(d, br) { AudioItemCount = br.ReadUInt32(); @@ -5159,6 +5323,11 @@ namespace CodeWalker.GameFiles public Vector2[] Points { get; set; } + public Dat151ShoreLinePool(RelFile rel) : base(rel) + { + Type = Dat151RelType.ShoreLinePool; + TypeID = (byte)Type; + } public Dat151ShoreLinePool(RelData d, BinaryReader br) : base(d, br) { Unk01 = br.ReadUInt32(); @@ -5224,6 +5393,11 @@ namespace CodeWalker.GameFiles public int PointsCount { get; set; } public Vector2[] Points { get; set; } + public Dat151ShoreLineLake(RelFile rel) : base(rel) + { + Type = Dat151RelType.ShoreLineLake; + TypeID = (byte)Type; + } public Dat151ShoreLineLake(RelData d, BinaryReader br) : base(d, br) { Unk01 = br.ReadUInt32(); @@ -5282,6 +5456,11 @@ namespace CodeWalker.GameFiles public uint PointsCount { get; set; } public Vector3[] Points { get; set; } + public Dat151ShoreLineRiver(RelFile rel) : base(rel) + { + Type = Dat151RelType.ShoreLineRiver; + TypeID = (byte)Type; + } public Dat151ShoreLineRiver(RelData d, BinaryReader br) : base(d, br) { Unk01 = br.ReadUInt32(); @@ -5343,6 +5522,11 @@ namespace CodeWalker.GameFiles public uint PointsCount { get; set; } public Vector2[] Points { get; set; } + public Dat151ShoreLineOcean(RelFile rel) : base(rel) + { + Type = Dat151RelType.ShoreLineOcean; + TypeID = (byte)Type; + } public Dat151ShoreLineOcean(RelData d, BinaryReader br) : base(d, br) { Unk01 = br.ReadUInt32(); @@ -5405,6 +5589,11 @@ namespace CodeWalker.GameFiles public uint ShoreLineCount { get; set; } public MetaHash[] ShoreLines { get; set; } + public Dat151ShoreLineList(RelFile rel) : base(rel) + { + Type = Dat151RelType.ShoreLineList; + TypeID = (byte)Type; + } public Dat151ShoreLineList(RelData d, BinaryReader br) : base(d, br) { ShoreLineCount = br.ReadUInt32(); @@ -5437,6 +5626,11 @@ namespace CodeWalker.GameFiles //[TC(typeof(EXP))] public class Dat151BlankTemplateItem : Dat151RelData //{ + // public Dat151BlankTemplateItem(RelFile rel) : base(rel) + // { + // Type = Dat151RelType.RELTYPE; + // TypeID = (byte)Type; + // } // public Dat151BlankTemplateItem(RelData d, BinaryReader br) : base(d, br) // { // var bytesleft = br.BaseStream.Length - br.BaseStream.Position; diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index baaef08..2e38f4e 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -2270,7 +2270,7 @@ namespace CodeWalker.GameFiles var sb2 = new StringBuilder(); foreach (var kvp in wavesmap) { - if (kvp.Key.FileType == RelDatFileType.Dat151Parameters) + if (kvp.Key.FileType == RelDatFileType.Dat151) { sb2.Append(((Dat151RelType)kvp.Key.ItemType).ToString()); sb2.Append(" "); diff --git a/Project/Panels/EditAudioEmitterListPanel.Designer.cs b/Project/Panels/EditAudioEmitterListPanel.Designer.cs index 33f21ff..27af500 100644 --- a/Project/Panels/EditAudioEmitterListPanel.Designer.cs +++ b/Project/Panels/EditAudioEmitterListPanel.Designer.cs @@ -29,20 +29,107 @@ private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditAudioEmitterListPanel)); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.label12 = new System.Windows.Forms.Label(); + this.NameTextBox = new System.Windows.Forms.TextBox(); + this.label19 = new System.Windows.Forms.Label(); + this.HashesTextBox = new CodeWalker.WinForms.TextBoxFix(); + this.tabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); this.SuspendLayout(); // + // tabControl1 + // + this.tabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Location = new System.Drawing.Point(2, 3); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(559, 446); + this.tabControl1.TabIndex = 1; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.label12); + this.tabPage1.Controls.Add(this.NameTextBox); + this.tabPage1.Controls.Add(this.label19); + this.tabPage1.Controls.Add(this.HashesTextBox); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(551, 420); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "Ambient Emitter List"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(26, 9); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(64, 13); + this.label12.TabIndex = 3; + this.label12.Text = "Name hash:"; + // + // NameTextBox + // + this.NameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.NameTextBox.Location = new System.Drawing.Point(103, 6); + this.NameTextBox.Name = "NameTextBox"; + this.NameTextBox.Size = new System.Drawing.Size(428, 20); + this.NameTextBox.TabIndex = 4; + this.NameTextBox.TextChanged += new System.EventHandler(this.NameTextBox_TextChanged); + // + // label19 + // + this.label19.AutoSize = true; + this.label19.Location = new System.Drawing.Point(11, 35); + this.label19.Name = "label19"; + this.label19.Size = new System.Drawing.Size(79, 13); + this.label19.TabIndex = 5; + this.label19.Text = "Emitter hashes:"; + // + // HashesTextBox + // + this.HashesTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.HashesTextBox.Location = new System.Drawing.Point(103, 32); + this.HashesTextBox.Multiline = true; + this.HashesTextBox.Name = "HashesTextBox"; + this.HashesTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.HashesTextBox.Size = new System.Drawing.Size(428, 330); + this.HashesTextBox.TabIndex = 6; + this.HashesTextBox.WordWrap = false; + this.HashesTextBox.TextChanged += new System.EventHandler(this.HashesTextBox_TextChanged); + // // EditAudioEmitterListPanel // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(562, 450); + this.Controls.Add(this.tabControl1); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Name = "EditAudioEmitterListPanel"; this.Text = "Edit Audio Emitter List"; + this.tabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.tabPage1.PerformLayout(); this.ResumeLayout(false); } #endregion + + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.Label label19; + private WinForms.TextBoxFix HashesTextBox; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.TextBox NameTextBox; } } \ No newline at end of file diff --git a/Project/Panels/EditAudioEmitterListPanel.cs b/Project/Panels/EditAudioEmitterListPanel.cs index df1183d..f0e9446 100644 --- a/Project/Panels/EditAudioEmitterListPanel.cs +++ b/Project/Panels/EditAudioEmitterListPanel.cs @@ -16,6 +16,9 @@ namespace CodeWalker.Project.Panels public ProjectForm ProjectForm; public Dat151AmbientEmitterList CurrentEmitterList { get; set; } + private bool populatingui = false; + + public EditAudioEmitterListPanel(ProjectForm owner) { ProjectForm = owner; @@ -27,11 +30,115 @@ namespace CodeWalker.Project.Panels CurrentEmitterList = list; Tag = list; UpdateFormTitle(); + UpdateUI(); } private void UpdateFormTitle() { Text = CurrentEmitterList?.NameHash.ToString() ?? ""; } + + private void UpdateUI() + { + + if (CurrentEmitterList == null) + { + //AddToProjectButton.Enabled = false; + //DeleteButton.Enabled = false; + + populatingui = true; + NameTextBox.Text = string.Empty; + HashesTextBox.Text = string.Empty; + populatingui = false; + } + else + { + //AddToProjectButton.Enabled = CurrentZoneList?.Rel != null ? !ProjectForm.AudioFileExistsInProject(CurrentZoneList.Rel) : false; + //DeleteButton.Enabled = !AddToProjectButton.Enabled; + + populatingui = true; + var el = CurrentEmitterList; + + NameTextBox.Text = el.NameHash.ToString(); + + StringBuilder sb = new StringBuilder(); + if (el.EmitterHashes != null) + { + foreach (var hash in el.EmitterHashes) + { + sb.AppendLine(hash.ToString()); + } + } + HashesTextBox.Text = sb.ToString(); + + + populatingui = false; + + + } + + } + + + private void ProjectItemChanged() + { + if (CurrentEmitterList?.Rel != null) + { + ProjectForm.SetAudioFileHasChanged(true); + } + } + + + + private void NameTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEmitterList == null) return; + + uint hash = 0; + string name = NameTextBox.Text; + if (!uint.TryParse(name, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(name); + JenkIndex.Ensure(name); + } + //NameHashLabel.Text = "Hash: " + hash.ToString(); + + if (CurrentEmitterList.NameHash != hash) + { + CurrentEmitterList.Name = NameTextBox.Text; + CurrentEmitterList.NameHash = hash; + + ProjectItemChanged(); + UpdateFormTitle(); + } + } + + private void HashesTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEmitterList == null) return; + + var hashstrs = HashesTextBox.Text.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + if (hashstrs?.Length > 0) + { + var hashlist = new List(); + foreach (var hashstr in hashstrs) + { + uint hash = 0; + if (!uint.TryParse(hashstr, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(hashstr); + JenkIndex.Ensure(hashstr); + } + hashlist.Add(hash); + } + + CurrentEmitterList.EmitterHashes = hashlist.ToArray(); + CurrentEmitterList.EmitterCount = (byte)hashlist.Count; + + ProjectItemChanged(); + } + } } } diff --git a/Project/Panels/EditAudioEmitterPanel.Designer.cs b/Project/Panels/EditAudioEmitterPanel.Designer.cs index 5d1229e..38e18e2 100644 --- a/Project/Panels/EditAudioEmitterPanel.Designer.cs +++ b/Project/Panels/EditAudioEmitterPanel.Designer.cs @@ -29,20 +29,724 @@ private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditAudioEmitterPanel)); + this.GoToButton = new System.Windows.Forms.Button(); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.DeleteButton = new System.Windows.Forms.Button(); + this.AddToProjectButton = new System.Windows.Forms.Button(); + this.label21 = new System.Windows.Forms.Label(); + this.Flags2TextBox = new System.Windows.Forms.TextBox(); + this.label20 = new System.Windows.Forms.Label(); + this.ExtParamsTextBox = new CodeWalker.WinForms.TextBoxFix(); + this.label15 = new System.Windows.Forms.Label(); + this.label17 = new System.Windows.Forms.Label(); + this.label18 = new System.Windows.Forms.Label(); + this.label14 = new System.Windows.Forms.Label(); + this.Flags1TextBox = new System.Windows.Forms.TextBox(); + this.label13 = new System.Windows.Forms.Label(); + this.Flags0TextBox = new System.Windows.Forms.TextBox(); + this.label12 = new System.Windows.Forms.Label(); + this.NameTextBox = new System.Windows.Forms.TextBox(); + this.label6 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.OuterRadTextBox = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.Unk01TextBox = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.Hash2TextBox = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.Hash1TextBox = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.InnerRadTextBox = new System.Windows.Forms.TextBox(); + this.label16 = new System.Windows.Forms.Label(); + this.PositionTextBox = new System.Windows.Forms.TextBox(); + this.label19 = new System.Windows.Forms.Label(); + this.Flags3TextBox = new System.Windows.Forms.TextBox(); + this.label22 = new System.Windows.Forms.Label(); + this.Flags4TextBox = new System.Windows.Forms.TextBox(); + this.label23 = new System.Windows.Forms.Label(); + this.Flags5TextBox = new System.Windows.Forms.TextBox(); + this.Unk02UpDown = new System.Windows.Forms.NumericUpDown(); + this.Unk03UpDown = new System.Windows.Forms.NumericUpDown(); + this.Unk04UpDown = new System.Windows.Forms.NumericUpDown(); + this.Unk05UpDown = new System.Windows.Forms.NumericUpDown(); + this.Unk06UpDown = new System.Windows.Forms.NumericUpDown(); + this.Unk08UpDown = new System.Windows.Forms.NumericUpDown(); + this.Unk07UpDown = new System.Windows.Forms.NumericUpDown(); + this.Unk09UpDown = new System.Windows.Forms.NumericUpDown(); + this.Unk10UpDown = new System.Windows.Forms.NumericUpDown(); + this.Unk11UpDown = new System.Windows.Forms.NumericUpDown(); + this.Unk12UpDown = new System.Windows.Forms.NumericUpDown(); + this.Unk13UpDown = new System.Windows.Forms.NumericUpDown(); + this.tabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.Unk02UpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.Unk03UpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.Unk04UpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.Unk05UpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.Unk06UpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.Unk08UpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.Unk07UpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.Unk09UpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.Unk10UpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.Unk11UpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.Unk12UpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.Unk13UpDown)).BeginInit(); this.SuspendLayout(); // + // GoToButton + // + this.GoToButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.GoToButton.Location = new System.Drawing.Point(483, 0); + this.GoToButton.Name = "GoToButton"; + this.GoToButton.Size = new System.Drawing.Size(68, 23); + this.GoToButton.TabIndex = 10; + this.GoToButton.Text = "Go to"; + this.GoToButton.UseVisualStyleBackColor = true; + this.GoToButton.Click += new System.EventHandler(this.GoToButton_Click); + // + // tabControl1 + // + this.tabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Location = new System.Drawing.Point(2, 3); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(559, 447); + this.tabControl1.TabIndex = 20; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.Unk13UpDown); + this.tabPage1.Controls.Add(this.Unk12UpDown); + this.tabPage1.Controls.Add(this.Unk11UpDown); + this.tabPage1.Controls.Add(this.Unk10UpDown); + this.tabPage1.Controls.Add(this.Unk09UpDown); + this.tabPage1.Controls.Add(this.Unk07UpDown); + this.tabPage1.Controls.Add(this.Unk08UpDown); + this.tabPage1.Controls.Add(this.Unk06UpDown); + this.tabPage1.Controls.Add(this.Unk05UpDown); + this.tabPage1.Controls.Add(this.Unk04UpDown); + this.tabPage1.Controls.Add(this.Unk03UpDown); + this.tabPage1.Controls.Add(this.Unk02UpDown); + this.tabPage1.Controls.Add(this.label23); + this.tabPage1.Controls.Add(this.Flags5TextBox); + this.tabPage1.Controls.Add(this.label22); + this.tabPage1.Controls.Add(this.Flags4TextBox); + this.tabPage1.Controls.Add(this.label19); + this.tabPage1.Controls.Add(this.Flags3TextBox); + this.tabPage1.Controls.Add(this.DeleteButton); + this.tabPage1.Controls.Add(this.AddToProjectButton); + this.tabPage1.Controls.Add(this.label21); + this.tabPage1.Controls.Add(this.Flags2TextBox); + this.tabPage1.Controls.Add(this.label20); + this.tabPage1.Controls.Add(this.ExtParamsTextBox); + this.tabPage1.Controls.Add(this.label15); + this.tabPage1.Controls.Add(this.label17); + this.tabPage1.Controls.Add(this.label18); + this.tabPage1.Controls.Add(this.label14); + this.tabPage1.Controls.Add(this.Flags1TextBox); + this.tabPage1.Controls.Add(this.label13); + this.tabPage1.Controls.Add(this.Flags0TextBox); + this.tabPage1.Controls.Add(this.label12); + this.tabPage1.Controls.Add(this.NameTextBox); + this.tabPage1.Controls.Add(this.label6); + this.tabPage1.Controls.Add(this.label7); + this.tabPage1.Controls.Add(this.label10); + this.tabPage1.Controls.Add(this.OuterRadTextBox); + this.tabPage1.Controls.Add(this.label4); + this.tabPage1.Controls.Add(this.Unk01TextBox); + this.tabPage1.Controls.Add(this.label3); + this.tabPage1.Controls.Add(this.Hash2TextBox); + this.tabPage1.Controls.Add(this.label2); + this.tabPage1.Controls.Add(this.Hash1TextBox); + this.tabPage1.Controls.Add(this.label1); + this.tabPage1.Controls.Add(this.InnerRadTextBox); + this.tabPage1.Controls.Add(this.label16); + this.tabPage1.Controls.Add(this.PositionTextBox); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(551, 421); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "Ambient Emitter"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // DeleteButton + // + this.DeleteButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.DeleteButton.Location = new System.Drawing.Point(343, 3); + this.DeleteButton.Name = "DeleteButton"; + this.DeleteButton.Size = new System.Drawing.Size(93, 23); + this.DeleteButton.TabIndex = 75; + this.DeleteButton.Text = "Delete emitter"; + this.DeleteButton.UseVisualStyleBackColor = true; + this.DeleteButton.Click += new System.EventHandler(this.DeleteButton_Click); + // + // AddToProjectButton + // + this.AddToProjectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.AddToProjectButton.Location = new System.Drawing.Point(452, 3); + this.AddToProjectButton.Name = "AddToProjectButton"; + this.AddToProjectButton.Size = new System.Drawing.Size(93, 23); + this.AddToProjectButton.TabIndex = 74; + this.AddToProjectButton.Text = "Add to project"; + this.AddToProjectButton.UseVisualStyleBackColor = true; + this.AddToProjectButton.Click += new System.EventHandler(this.AddToProjectButton_Click); + // + // label21 + // + this.label21.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label21.AutoSize = true; + this.label21.Location = new System.Drawing.Point(340, 106); + this.label21.Name = "label21"; + this.label21.Size = new System.Drawing.Size(44, 13); + this.label21.TabIndex = 64; + this.label21.Text = "Flags 2:"; + // + // Flags2TextBox + // + this.Flags2TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.Flags2TextBox.Location = new System.Drawing.Point(390, 103); + this.Flags2TextBox.Name = "Flags2TextBox"; + this.Flags2TextBox.Size = new System.Drawing.Size(155, 20); + this.Flags2TextBox.TabIndex = 65; + this.Flags2TextBox.TextChanged += new System.EventHandler(this.Flags2TextBox_TextChanged); + // + // label20 + // + this.label20.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label20.AutoSize = true; + this.label20.Location = new System.Drawing.Point(305, 241); + this.label20.Name = "label20"; + this.label20.Size = new System.Drawing.Size(160, 26); + this.label20.TabIndex = 72; + this.label20.Text = "Ext params:\r\nName (hash), Value (float), Flags"; + // + // ExtParamsTextBox + // + this.ExtParamsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ExtParamsTextBox.Location = new System.Drawing.Point(282, 271); + this.ExtParamsTextBox.Multiline = true; + this.ExtParamsTextBox.Name = "ExtParamsTextBox"; + this.ExtParamsTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.ExtParamsTextBox.Size = new System.Drawing.Size(262, 140); + this.ExtParamsTextBox.TabIndex = 73; + this.ExtParamsTextBox.WordWrap = false; + this.ExtParamsTextBox.TextChanged += new System.EventHandler(this.ExtParamsTextBox_TextChanged); + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Location = new System.Drawing.Point(7, 274); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(63, 13); + this.label15.TabIndex = 57; + this.label15.Text = "Unk 12, 13:"; + // + // label17 + // + this.label17.AutoSize = true; + this.label17.Location = new System.Drawing.Point(7, 250); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(63, 13); + this.label17.TabIndex = 54; + this.label17.Text = "Unk 10, 11:"; + // + // label18 + // + this.label18.AutoSize = true; + this.label18.Location = new System.Drawing.Point(7, 226); + this.label18.Name = "label18"; + this.label18.Size = new System.Drawing.Size(51, 13); + this.label18.TabIndex = 51; + this.label18.Text = "Unk 8, 9:"; + // + // label14 + // + this.label14.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(340, 82); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(44, 13); + this.label14.TabIndex = 62; + this.label14.Text = "Flags 1:"; + // + // Flags1TextBox + // + this.Flags1TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.Flags1TextBox.Location = new System.Drawing.Point(390, 79); + this.Flags1TextBox.Name = "Flags1TextBox"; + this.Flags1TextBox.Size = new System.Drawing.Size(155, 20); + this.Flags1TextBox.TabIndex = 63; + this.Flags1TextBox.TextChanged += new System.EventHandler(this.Flags1TextBox_TextChanged); + // + // label13 + // + this.label13.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(340, 58); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(44, 13); + this.label13.TabIndex = 60; + this.label13.Text = "Flags 0:"; + // + // Flags0TextBox + // + this.Flags0TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.Flags0TextBox.Location = new System.Drawing.Point(390, 55); + this.Flags0TextBox.Name = "Flags0TextBox"; + this.Flags0TextBox.Size = new System.Drawing.Size(155, 20); + this.Flags0TextBox.TabIndex = 61; + this.Flags0TextBox.TextChanged += new System.EventHandler(this.Flags0TextBox_TextChanged); + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(7, 9); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(64, 13); + this.label12.TabIndex = 29; + this.label12.Text = "Name hash:"; + // + // NameTextBox + // + this.NameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.NameTextBox.Location = new System.Drawing.Point(84, 6); + this.NameTextBox.Name = "NameTextBox"; + this.NameTextBox.Size = new System.Drawing.Size(237, 20); + this.NameTextBox.TabIndex = 30; + this.NameTextBox.TextChanged += new System.EventHandler(this.NameTextBox_TextChanged); + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(7, 202); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(51, 13); + this.label6.TabIndex = 48; + this.label6.Text = "Unk 6, 7:"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(7, 178); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(75, 13); + this.label7.TabIndex = 43; + this.label7.Text = "Unk 2, 3, 4, 5:"; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(7, 81); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(67, 13); + this.label10.TabIndex = 35; + this.label10.Text = "Outer radius:"; + // + // OuterRadTextBox + // + this.OuterRadTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.OuterRadTextBox.Location = new System.Drawing.Point(84, 78); + this.OuterRadTextBox.Name = "OuterRadTextBox"; + this.OuterRadTextBox.Size = new System.Drawing.Size(237, 20); + this.OuterRadTextBox.TabIndex = 36; + this.OuterRadTextBox.TextChanged += new System.EventHandler(this.OuterRadTextBox_TextChanged); + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(7, 154); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(39, 13); + this.label4.TabIndex = 41; + this.label4.Text = "Unk 1:"; + // + // Unk01TextBox + // + this.Unk01TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.Unk01TextBox.Location = new System.Drawing.Point(84, 151); + this.Unk01TextBox.Name = "Unk01TextBox"; + this.Unk01TextBox.Size = new System.Drawing.Size(237, 20); + this.Unk01TextBox.TabIndex = 42; + this.Unk01TextBox.TextChanged += new System.EventHandler(this.Unk01TextBox_TextChanged); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(7, 130); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(44, 13); + this.label3.TabIndex = 39; + this.label3.Text = "Hash 2:"; + // + // Hash2TextBox + // + this.Hash2TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.Hash2TextBox.Location = new System.Drawing.Point(84, 127); + this.Hash2TextBox.Name = "Hash2TextBox"; + this.Hash2TextBox.Size = new System.Drawing.Size(237, 20); + this.Hash2TextBox.TabIndex = 40; + this.Hash2TextBox.TextChanged += new System.EventHandler(this.Hash2TextBox_TextChanged); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(7, 106); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(44, 13); + this.label2.TabIndex = 37; + this.label2.Text = "Hash 1:"; + // + // Hash1TextBox + // + this.Hash1TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.Hash1TextBox.Location = new System.Drawing.Point(84, 103); + this.Hash1TextBox.Name = "Hash1TextBox"; + this.Hash1TextBox.Size = new System.Drawing.Size(237, 20); + this.Hash1TextBox.TabIndex = 38; + this.Hash1TextBox.TextChanged += new System.EventHandler(this.Hash1TextBox_TextChanged); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(7, 57); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(65, 13); + this.label1.TabIndex = 33; + this.label1.Text = "Inner radius:"; + // + // InnerRadTextBox + // + this.InnerRadTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.InnerRadTextBox.Location = new System.Drawing.Point(84, 54); + this.InnerRadTextBox.Name = "InnerRadTextBox"; + this.InnerRadTextBox.Size = new System.Drawing.Size(237, 20); + this.InnerRadTextBox.TabIndex = 34; + this.InnerRadTextBox.TextChanged += new System.EventHandler(this.InnerRadTextBox_TextChanged); + // + // label16 + // + this.label16.AutoSize = true; + this.label16.Location = new System.Drawing.Point(7, 33); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(47, 13); + this.label16.TabIndex = 31; + this.label16.Text = "Position:"; + // + // PositionTextBox + // + this.PositionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.PositionTextBox.Location = new System.Drawing.Point(84, 30); + this.PositionTextBox.Name = "PositionTextBox"; + this.PositionTextBox.Size = new System.Drawing.Size(237, 20); + this.PositionTextBox.TabIndex = 32; + this.PositionTextBox.TextChanged += new System.EventHandler(this.PositionTextBox_TextChanged); + // + // label19 + // + this.label19.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label19.AutoSize = true; + this.label19.Location = new System.Drawing.Point(340, 130); + this.label19.Name = "label19"; + this.label19.Size = new System.Drawing.Size(44, 13); + this.label19.TabIndex = 66; + this.label19.Text = "Flags 3:"; + // + // Flags3TextBox + // + this.Flags3TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.Flags3TextBox.Location = new System.Drawing.Point(390, 127); + this.Flags3TextBox.Name = "Flags3TextBox"; + this.Flags3TextBox.Size = new System.Drawing.Size(155, 20); + this.Flags3TextBox.TabIndex = 67; + this.Flags3TextBox.TextChanged += new System.EventHandler(this.Flags3TextBox_TextChanged); + // + // label22 + // + this.label22.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label22.AutoSize = true; + this.label22.Location = new System.Drawing.Point(340, 154); + this.label22.Name = "label22"; + this.label22.Size = new System.Drawing.Size(44, 13); + this.label22.TabIndex = 68; + this.label22.Text = "Flags 4:"; + // + // Flags4TextBox + // + this.Flags4TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.Flags4TextBox.Location = new System.Drawing.Point(390, 151); + this.Flags4TextBox.Name = "Flags4TextBox"; + this.Flags4TextBox.Size = new System.Drawing.Size(155, 20); + this.Flags4TextBox.TabIndex = 69; + this.Flags4TextBox.TextChanged += new System.EventHandler(this.Flags4TextBox_TextChanged); + // + // label23 + // + this.label23.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label23.AutoSize = true; + this.label23.Location = new System.Drawing.Point(340, 178); + this.label23.Name = "label23"; + this.label23.Size = new System.Drawing.Size(44, 13); + this.label23.TabIndex = 70; + this.label23.Text = "Flags 5:"; + // + // Flags5TextBox + // + this.Flags5TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.Flags5TextBox.Location = new System.Drawing.Point(390, 175); + this.Flags5TextBox.Name = "Flags5TextBox"; + this.Flags5TextBox.Size = new System.Drawing.Size(155, 20); + this.Flags5TextBox.TabIndex = 71; + this.Flags5TextBox.TextChanged += new System.EventHandler(this.Flags5TextBox_TextChanged); + // + // Unk02UpDown + // + this.Unk02UpDown.Location = new System.Drawing.Point(84, 175); + this.Unk02UpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Unk02UpDown.Name = "Unk02UpDown"; + this.Unk02UpDown.Size = new System.Drawing.Size(48, 20); + this.Unk02UpDown.TabIndex = 44; + this.Unk02UpDown.ValueChanged += new System.EventHandler(this.Unk02UpDown_ValueChanged); + // + // Unk03UpDown + // + this.Unk03UpDown.Location = new System.Drawing.Point(138, 175); + this.Unk03UpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Unk03UpDown.Name = "Unk03UpDown"; + this.Unk03UpDown.Size = new System.Drawing.Size(48, 20); + this.Unk03UpDown.TabIndex = 45; + this.Unk03UpDown.ValueChanged += new System.EventHandler(this.Unk03UpDown_ValueChanged); + // + // Unk04UpDown + // + this.Unk04UpDown.Location = new System.Drawing.Point(192, 175); + this.Unk04UpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Unk04UpDown.Name = "Unk04UpDown"; + this.Unk04UpDown.Size = new System.Drawing.Size(48, 20); + this.Unk04UpDown.TabIndex = 46; + this.Unk04UpDown.ValueChanged += new System.EventHandler(this.Unk04UpDown_ValueChanged); + // + // Unk05UpDown + // + this.Unk05UpDown.Location = new System.Drawing.Point(246, 175); + this.Unk05UpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Unk05UpDown.Name = "Unk05UpDown"; + this.Unk05UpDown.Size = new System.Drawing.Size(48, 20); + this.Unk05UpDown.TabIndex = 47; + this.Unk05UpDown.ValueChanged += new System.EventHandler(this.Unk05UpDown_ValueChanged); + // + // Unk06UpDown + // + this.Unk06UpDown.Location = new System.Drawing.Point(84, 199); + this.Unk06UpDown.Maximum = new decimal(new int[] { + 65535, + 0, + 0, + 0}); + this.Unk06UpDown.Name = "Unk06UpDown"; + this.Unk06UpDown.Size = new System.Drawing.Size(102, 20); + this.Unk06UpDown.TabIndex = 49; + this.Unk06UpDown.ValueChanged += new System.EventHandler(this.Unk06UpDown_ValueChanged); + // + // Unk08UpDown + // + this.Unk08UpDown.Location = new System.Drawing.Point(84, 223); + this.Unk08UpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Unk08UpDown.Name = "Unk08UpDown"; + this.Unk08UpDown.Size = new System.Drawing.Size(48, 20); + this.Unk08UpDown.TabIndex = 52; + this.Unk08UpDown.ValueChanged += new System.EventHandler(this.Unk08UpDown_ValueChanged); + // + // Unk07UpDown + // + this.Unk07UpDown.Location = new System.Drawing.Point(192, 199); + this.Unk07UpDown.Maximum = new decimal(new int[] { + 65535, + 0, + 0, + 0}); + this.Unk07UpDown.Name = "Unk07UpDown"; + this.Unk07UpDown.Size = new System.Drawing.Size(102, 20); + this.Unk07UpDown.TabIndex = 50; + this.Unk07UpDown.ValueChanged += new System.EventHandler(this.Unk07UpDown_ValueChanged); + // + // Unk09UpDown + // + this.Unk09UpDown.Location = new System.Drawing.Point(138, 223); + this.Unk09UpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Unk09UpDown.Name = "Unk09UpDown"; + this.Unk09UpDown.Size = new System.Drawing.Size(48, 20); + this.Unk09UpDown.TabIndex = 53; + this.Unk09UpDown.ValueChanged += new System.EventHandler(this.Unk09UpDown_ValueChanged); + // + // Unk10UpDown + // + this.Unk10UpDown.Location = new System.Drawing.Point(84, 247); + this.Unk10UpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Unk10UpDown.Name = "Unk10UpDown"; + this.Unk10UpDown.Size = new System.Drawing.Size(48, 20); + this.Unk10UpDown.TabIndex = 55; + this.Unk10UpDown.ValueChanged += new System.EventHandler(this.Unk10UpDown_ValueChanged); + // + // Unk11UpDown + // + this.Unk11UpDown.Location = new System.Drawing.Point(138, 247); + this.Unk11UpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Unk11UpDown.Name = "Unk11UpDown"; + this.Unk11UpDown.Size = new System.Drawing.Size(48, 20); + this.Unk11UpDown.TabIndex = 56; + this.Unk11UpDown.ValueChanged += new System.EventHandler(this.Unk11UpDown_ValueChanged); + // + // Unk12UpDown + // + this.Unk12UpDown.Location = new System.Drawing.Point(84, 271); + this.Unk12UpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Unk12UpDown.Name = "Unk12UpDown"; + this.Unk12UpDown.Size = new System.Drawing.Size(48, 20); + this.Unk12UpDown.TabIndex = 58; + this.Unk12UpDown.ValueChanged += new System.EventHandler(this.Unk12UpDown_ValueChanged); + // + // Unk13UpDown + // + this.Unk13UpDown.Location = new System.Drawing.Point(138, 271); + this.Unk13UpDown.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.Unk13UpDown.Name = "Unk13UpDown"; + this.Unk13UpDown.Size = new System.Drawing.Size(48, 20); + this.Unk13UpDown.TabIndex = 59; + this.Unk13UpDown.ValueChanged += new System.EventHandler(this.Unk13UpDown_ValueChanged); + // // EditAudioEmitterPanel // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(562, 450); + this.Controls.Add(this.GoToButton); + this.Controls.Add(this.tabControl1); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Name = "EditAudioEmitterPanel"; this.Text = "Edit Audio Emitter"; + this.tabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.tabPage1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.Unk02UpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.Unk03UpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.Unk04UpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.Unk05UpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.Unk06UpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.Unk08UpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.Unk07UpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.Unk09UpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.Unk10UpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.Unk11UpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.Unk12UpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.Unk13UpDown)).EndInit(); this.ResumeLayout(false); } #endregion + + private System.Windows.Forms.Button GoToButton; + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.Button DeleteButton; + private System.Windows.Forms.Button AddToProjectButton; + private System.Windows.Forms.Label label21; + private System.Windows.Forms.TextBox Flags2TextBox; + private System.Windows.Forms.Label label20; + private WinForms.TextBoxFix ExtParamsTextBox; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.Label label18; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.TextBox Flags1TextBox; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.TextBox Flags0TextBox; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.TextBox NameTextBox; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.TextBox OuterRadTextBox; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TextBox Unk01TextBox; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox Hash2TextBox; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox Hash1TextBox; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox InnerRadTextBox; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.TextBox PositionTextBox; + private System.Windows.Forms.Label label23; + private System.Windows.Forms.TextBox Flags5TextBox; + private System.Windows.Forms.Label label22; + private System.Windows.Forms.TextBox Flags4TextBox; + private System.Windows.Forms.Label label19; + private System.Windows.Forms.TextBox Flags3TextBox; + private System.Windows.Forms.NumericUpDown Unk06UpDown; + private System.Windows.Forms.NumericUpDown Unk05UpDown; + private System.Windows.Forms.NumericUpDown Unk04UpDown; + private System.Windows.Forms.NumericUpDown Unk03UpDown; + private System.Windows.Forms.NumericUpDown Unk02UpDown; + private System.Windows.Forms.NumericUpDown Unk07UpDown; + private System.Windows.Forms.NumericUpDown Unk08UpDown; + private System.Windows.Forms.NumericUpDown Unk13UpDown; + private System.Windows.Forms.NumericUpDown Unk12UpDown; + private System.Windows.Forms.NumericUpDown Unk11UpDown; + private System.Windows.Forms.NumericUpDown Unk10UpDown; + private System.Windows.Forms.NumericUpDown Unk09UpDown; } } \ No newline at end of file diff --git a/Project/Panels/EditAudioEmitterPanel.cs b/Project/Panels/EditAudioEmitterPanel.cs index d206cf3..532746f 100644 --- a/Project/Panels/EditAudioEmitterPanel.cs +++ b/Project/Panels/EditAudioEmitterPanel.cs @@ -1,9 +1,11 @@ -using CodeWalker.World; +using CodeWalker.GameFiles; +using CodeWalker.World; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; +using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -16,6 +18,9 @@ namespace CodeWalker.Project.Panels public ProjectForm ProjectForm; public AudioPlacement CurrentEmitter { get; set; } + private bool populatingui = false; + + public EditAudioEmitterPanel(ProjectForm owner) { ProjectForm = owner; @@ -27,6 +32,7 @@ namespace CodeWalker.Project.Panels CurrentEmitter = emitter; Tag = emitter; UpdateFormTitle(); + UpdateUI(); } private void UpdateFormTitle() @@ -34,5 +40,573 @@ namespace CodeWalker.Project.Panels Text = CurrentEmitter?.NameHash.ToString() ?? ""; } + + private void UpdateUI() + { + if (CurrentEmitter?.AudioEmitter == null) + { + AddToProjectButton.Enabled = false; + DeleteButton.Enabled = false; + + populatingui = true; + NameTextBox.Text = string.Empty; + PositionTextBox.Text = string.Empty; + InnerRadTextBox.Text = string.Empty; + OuterRadTextBox.Text = string.Empty; + Hash1TextBox.Text = string.Empty; + Hash2TextBox.Text = string.Empty; + Unk01TextBox.Text = string.Empty; + Unk02UpDown.Value = 0; + Unk03UpDown.Value = 0; + Unk04UpDown.Value = 0; + Unk05UpDown.Value = 0; + Unk06UpDown.Value = 0; + Unk07UpDown.Value = 0; + Unk08UpDown.Value = 0; + Unk09UpDown.Value = 0; + Unk10UpDown.Value = 0; + Unk11UpDown.Value = 0; + Unk12UpDown.Value = 0; + Unk13UpDown.Value = 0; + Flags0TextBox.Text = string.Empty; + Flags1TextBox.Text = string.Empty; + Flags2TextBox.Text = string.Empty; + Flags3TextBox.Text = string.Empty; + Flags4TextBox.Text = string.Empty; + Flags5TextBox.Text = string.Empty; + ExtParamsTextBox.Text = string.Empty; + populatingui = false; + } + else + { + AddToProjectButton.Enabled = CurrentEmitter?.RelFile != null ? !ProjectForm.AudioFileExistsInProject(CurrentEmitter.RelFile) : false; + DeleteButton.Enabled = !AddToProjectButton.Enabled; + + populatingui = true; + var e = CurrentEmitter.AudioEmitter; + NameTextBox.Text = e.NameHash.ToString(); + PositionTextBox.Text = FloatUtil.GetVector3String(e.Position); + InnerRadTextBox.Text = FloatUtil.ToString(e.InnerRad); + OuterRadTextBox.Text = FloatUtil.ToString(e.OuterRad); + Hash1TextBox.Text = e.Hash1.ToString(); + Hash2TextBox.Text = e.Hash2.ToString(); + Unk01TextBox.Text = FloatUtil.ToString(e.Unk01); + Unk02UpDown.Value = e.Unk02.Value; + Unk03UpDown.Value = e.Unk03.Value; + Unk04UpDown.Value = e.Unk04.Value; + Unk05UpDown.Value = e.Unk05.Value; + Unk06UpDown.Value = e.Unk06.Value; + Unk07UpDown.Value = e.Unk07.Value; + Unk08UpDown.Value = e.Unk08.Value; + Unk09UpDown.Value = e.Unk09.Value; + Unk10UpDown.Value = e.Unk10.Value; + Unk11UpDown.Value = e.Unk11.Value; + Unk12UpDown.Value = e.Unk12.Value; + Unk13UpDown.Value = e.Unk13.Value; + Flags0TextBox.Text = e.Flags0.Hex; + Flags1TextBox.Text = e.Flags1.Hex; + Flags2TextBox.Text = e.Flags2.Hex; + Flags3TextBox.Text = e.Flags3.Hex; + Flags4TextBox.Text = e.Flags4.Hex; + Flags5TextBox.Text = e.Flags5.Hex; + + StringBuilder sb = new StringBuilder(); + if (e.ExtParams != null) + { + foreach (var extparam in e.ExtParams) + { + sb.Append(extparam.Hash.ToString()); + sb.Append(", "); + sb.Append(FloatUtil.ToString(extparam.Value)); + sb.Append(", "); + sb.Append(extparam.Flags.ToString()); + sb.AppendLine(); + } + } + ExtParamsTextBox.Text = sb.ToString(); + + populatingui = false; + + if (ProjectForm.WorldForm != null) + { + ProjectForm.WorldForm.SelectAudio(CurrentEmitter); + } + + } + } + + private void ProjectItemChanged() + { + CurrentEmitter?.UpdateFromEmitter();//also update the placement wrapper + + if (CurrentEmitter?.RelFile != null) + { + ProjectForm.SetAudioFileHasChanged(true); + } + } + + + private void NameTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEmitter?.AudioEmitter == null) return; + + uint hash = 0; + string name = NameTextBox.Text; + if (!uint.TryParse(name, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(name); + JenkIndex.Ensure(name); + } + //NameHashLabel.Text = "Hash: " + hash.ToString(); + + if (CurrentEmitter.AudioEmitter.NameHash != hash) + { + CurrentEmitter.AudioEmitter.Name = NameTextBox.Text; + CurrentEmitter.AudioEmitter.NameHash = hash; + + ProjectItemChanged(); + UpdateFormTitle(); + } + } + + private void PositionTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEmitter?.AudioEmitter == null) return; + + var vec = FloatUtil.ParseVector3String(PositionTextBox.Text); + if (CurrentEmitter.AudioEmitter.Position != vec) + { + CurrentEmitter.AudioEmitter.Position = vec; + + ProjectItemChanged(); + + //var wf = ProjectForm.WorldForm; + //if (wf != null) + //{ + // wf.BeginInvoke(new Action(() => + // { + // wf.SetWidgetPosition(CurrentEmitter.Position, true); + // })); + //} + } + } + + private void InnerRadTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEmitter?.AudioEmitter == null) return; + + float rad = FloatUtil.Parse(InnerRadTextBox.Text); + if (CurrentEmitter.AudioEmitter.InnerRad != rad) + { + CurrentEmitter.AudioEmitter.InnerRad = rad; + + ProjectItemChanged(); + } + } + + private void OuterRadTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEmitter?.AudioEmitter == null) return; + + float rad = FloatUtil.Parse(OuterRadTextBox.Text); + if (CurrentEmitter.AudioEmitter.OuterRad != rad) + { + CurrentEmitter.AudioEmitter.OuterRad = rad; + + ProjectItemChanged(); + } + } + + private void Hash1TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEmitter?.AudioEmitter == null) return; + + uint hash = 0; + string name = Hash1TextBox.Text; + if (!uint.TryParse(name, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(name); + JenkIndex.Ensure(name); + } + //HashLabel.Text = "Hash: " + hash.ToString(); + + if (CurrentEmitter.AudioEmitter.Hash1 != hash) + { + CurrentEmitter.AudioEmitter.Hash1 = hash; + + ProjectItemChanged(); + } + } + + private void Hash2TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEmitter?.AudioEmitter == null) return; + + uint hash = 0; + string name = Hash2TextBox.Text; + if (!uint.TryParse(name, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(name); + JenkIndex.Ensure(name); + } + //HashLabel.Text = "Hash: " + hash.ToString(); + + if (CurrentEmitter.AudioEmitter.Hash2 != hash) + { + CurrentEmitter.AudioEmitter.Hash2 = hash; + + ProjectItemChanged(); + } + } + + private void Unk01TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEmitter?.AudioEmitter == null) return; + + float unk = FloatUtil.Parse(Unk01TextBox.Text); + if (CurrentEmitter.AudioEmitter.Unk01 != unk) + { + CurrentEmitter.AudioEmitter.Unk01 = unk; + + ProjectItemChanged(); + } + } + + private void Unk02UpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEmitter?.AudioEmitter == null) return; + + byte unk = (byte)Unk02UpDown.Value; + if (CurrentEmitter.AudioEmitter.Unk02.Value != unk) + { + CurrentEmitter.AudioEmitter.Unk02 = unk; + + ProjectItemChanged(); + } + } + + private void Unk03UpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEmitter?.AudioEmitter == null) return; + + byte unk = (byte)Unk03UpDown.Value; + if (CurrentEmitter.AudioEmitter.Unk03.Value != unk) + { + CurrentEmitter.AudioEmitter.Unk03 = unk; + + ProjectItemChanged(); + } + } + + private void Unk04UpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEmitter?.AudioEmitter == null) return; + + byte unk = (byte)Unk04UpDown.Value; + if (CurrentEmitter.AudioEmitter.Unk04.Value != unk) + { + CurrentEmitter.AudioEmitter.Unk04 = unk; + + ProjectItemChanged(); + } + } + + private void Unk05UpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEmitter?.AudioEmitter == null) return; + + byte unk = (byte)Unk05UpDown.Value; + if (CurrentEmitter.AudioEmitter.Unk05.Value != unk) + { + CurrentEmitter.AudioEmitter.Unk05 = unk; + + ProjectItemChanged(); + } + } + + private void Unk06UpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEmitter?.AudioEmitter == null) return; + + ushort unk = (ushort)Unk06UpDown.Value; + if (CurrentEmitter.AudioEmitter.Unk06.Value != unk) + { + CurrentEmitter.AudioEmitter.Unk06 = unk; + + ProjectItemChanged(); + } + } + + private void Unk07UpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEmitter?.AudioEmitter == null) return; + + ushort unk = (ushort)Unk07UpDown.Value; + if (CurrentEmitter.AudioEmitter.Unk07.Value != unk) + { + CurrentEmitter.AudioEmitter.Unk07 = unk; + + ProjectItemChanged(); + } + } + + private void Unk08UpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEmitter?.AudioEmitter == null) return; + + byte unk = (byte)Unk08UpDown.Value; + if (CurrentEmitter.AudioEmitter.Unk08.Value != unk) + { + CurrentEmitter.AudioEmitter.Unk08 = unk; + + ProjectItemChanged(); + } + } + + private void Unk09UpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEmitter?.AudioEmitter == null) return; + + byte unk = (byte)Unk09UpDown.Value; + if (CurrentEmitter.AudioEmitter.Unk09.Value != unk) + { + CurrentEmitter.AudioEmitter.Unk09 = unk; + + ProjectItemChanged(); + } + } + + private void Unk10UpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEmitter?.AudioEmitter == null) return; + + byte unk = (byte)Unk10UpDown.Value; + if (CurrentEmitter.AudioEmitter.Unk10.Value != unk) + { + CurrentEmitter.AudioEmitter.Unk10 = unk; + + ProjectItemChanged(); + } + } + + private void Unk11UpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEmitter?.AudioEmitter == null) return; + + byte unk = (byte)Unk11UpDown.Value; + if (CurrentEmitter.AudioEmitter.Unk11.Value != unk) + { + CurrentEmitter.AudioEmitter.Unk11 = unk; + + ProjectItemChanged(); + } + } + + private void Unk12UpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEmitter?.AudioEmitter == null) return; + + byte unk = (byte)Unk12UpDown.Value; + if (CurrentEmitter.AudioEmitter.Unk12.Value != unk) + { + CurrentEmitter.AudioEmitter.Unk12 = unk; + + ProjectItemChanged(); + } + } + + private void Unk13UpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEmitter?.AudioEmitter == null) return; + + byte unk = (byte)Unk13UpDown.Value; + if (CurrentEmitter.AudioEmitter.Unk13.Value != unk) + { + CurrentEmitter.AudioEmitter.Unk13 = unk; + + ProjectItemChanged(); + } + } + + private void Flags0TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEmitter?.AudioEmitter == null) return; + + uint flags = 0; + if (uint.TryParse(Flags0TextBox.Text, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out flags)) + { + if (CurrentEmitter.AudioEmitter.Flags0.Value != flags) + { + CurrentEmitter.AudioEmitter.Flags0 = flags; + + ProjectItemChanged(); + } + } + } + + private void Flags1TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEmitter?.AudioEmitter == null) return; + + uint flags = 0; + if (uint.TryParse(Flags1TextBox.Text, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out flags)) + { + if (CurrentEmitter.AudioEmitter.Flags1.Value != flags) + { + CurrentEmitter.AudioEmitter.Flags1 = flags; + + ProjectItemChanged(); + } + } + } + + private void Flags2TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEmitter?.AudioEmitter == null) return; + + uint flags = 0; + if (uint.TryParse(Flags2TextBox.Text, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out flags)) + { + if (CurrentEmitter.AudioEmitter.Flags2.Value != flags) + { + CurrentEmitter.AudioEmitter.Flags2 = flags; + + ProjectItemChanged(); + } + } + } + + private void Flags3TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEmitter?.AudioEmitter == null) return; + + uint flags = 0; + if (uint.TryParse(Flags3TextBox.Text, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out flags)) + { + if (CurrentEmitter.AudioEmitter.Flags3.Value != flags) + { + CurrentEmitter.AudioEmitter.Flags3 = flags; + + ProjectItemChanged(); + } + } + } + + private void Flags4TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEmitter?.AudioEmitter == null) return; + + uint flags = 0; + if (uint.TryParse(Flags4TextBox.Text, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out flags)) + { + if (CurrentEmitter.AudioEmitter.Flags4.Value != flags) + { + CurrentEmitter.AudioEmitter.Flags4 = flags; + + ProjectItemChanged(); + } + } + } + + private void Flags5TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEmitter?.AudioEmitter == null) return; + + uint flags = 0; + if (uint.TryParse(Flags5TextBox.Text, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out flags)) + { + if (CurrentEmitter.AudioEmitter.Flags5.Value != flags) + { + CurrentEmitter.AudioEmitter.Flags5 = flags; + + ProjectItemChanged(); + } + } + } + + private void ExtParamsTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentEmitter?.AudioEmitter == null) return; + + var paramstrs = ExtParamsTextBox.Text.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + if (paramstrs?.Length > 0) + { + var paramlist = new List(); + foreach (var paramstr in paramstrs) + { + var paramvals = paramstr.Split(','); + if (paramvals?.Length == 3) + { + var param = new Dat151AmbientEmitter.ExtParam(); + var hashstr = paramvals[0].Trim(); + var valstr = paramvals[1].Trim(); + var flgstr = paramvals[2].Trim(); + uint hash = 0; + if (!uint.TryParse(hashstr, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(hashstr); + JenkIndex.Ensure(hashstr); + } + uint flags = 0; + uint.TryParse(flgstr, out flags); + param.Hash = hash; + param.Value = FloatUtil.Parse(valstr); + param.Flags = flags; + paramlist.Add(param); + } + } + + CurrentEmitter.AudioEmitter.ExtParams = paramlist.ToArray(); + CurrentEmitter.AudioEmitter.ExtParamCount = (ushort)paramlist.Count; + + ProjectItemChanged(); + } + } + + private void GoToButton_Click(object sender, EventArgs e) + { + if (CurrentEmitter == null) return; + if (ProjectForm.WorldForm == null) return; + ProjectForm.WorldForm.GoToPosition(CurrentEmitter.Position, CurrentEmitter.AudioZone.InnerSize); + } + + private void AddToProjectButton_Click(object sender, EventArgs e) + { + ProjectForm.SetProjectItem(CurrentEmitter); + ProjectForm.AddAudioFileToProject(CurrentEmitter.RelFile); + } + + private void DeleteButton_Click(object sender, EventArgs e) + { + ProjectForm.SetProjectItem(CurrentEmitter); + ProjectForm.DeleteAudioEmitter(); + } + } } diff --git a/Project/Panels/EditAudioFilePanel.Designer.cs b/Project/Panels/EditAudioFilePanel.Designer.cs index fef616e..7d9934a 100644 --- a/Project/Panels/EditAudioFilePanel.Designer.cs +++ b/Project/Panels/EditAudioFilePanel.Designer.cs @@ -29,20 +29,137 @@ private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditAudioFilePanel)); + this.ProjectPathTextBox = new System.Windows.Forms.TextBox(); + this.label30 = new System.Windows.Forms.Label(); + this.FileLocationTextBox = new System.Windows.Forms.TextBox(); + this.label29 = new System.Windows.Forms.Label(); + this.UnkVersionUpDown = new System.Windows.Forms.NumericUpDown(); + this.label6 = new System.Windows.Forms.Label(); + this.FileTypeComboBox = new System.Windows.Forms.ComboBox(); + this.label23 = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.UnkVersionUpDown)).BeginInit(); this.SuspendLayout(); // + // ProjectPathTextBox + // + this.ProjectPathTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ProjectPathTextBox.Location = new System.Drawing.Point(93, 127); + this.ProjectPathTextBox.Name = "ProjectPathTextBox"; + this.ProjectPathTextBox.ReadOnly = true; + this.ProjectPathTextBox.Size = new System.Drawing.Size(414, 20); + this.ProjectPathTextBox.TabIndex = 66; + // + // label30 + // + this.label30.AutoSize = true; + this.label30.Location = new System.Drawing.Point(14, 130); + this.label30.Name = "label30"; + this.label30.Size = new System.Drawing.Size(67, 13); + this.label30.TabIndex = 65; + this.label30.Text = "Project path:"; + // + // FileLocationTextBox + // + this.FileLocationTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.FileLocationTextBox.Location = new System.Drawing.Point(93, 101); + this.FileLocationTextBox.Name = "FileLocationTextBox"; + this.FileLocationTextBox.ReadOnly = true; + this.FileLocationTextBox.Size = new System.Drawing.Size(414, 20); + this.FileLocationTextBox.TabIndex = 64; + // + // label29 + // + this.label29.AutoSize = true; + this.label29.Location = new System.Drawing.Point(14, 104); + this.label29.Name = "label29"; + this.label29.Size = new System.Drawing.Size(66, 13); + this.label29.TabIndex = 63; + this.label29.Text = "File location:"; + // + // UnkVersionUpDown + // + this.UnkVersionUpDown.Location = new System.Drawing.Point(93, 54); + this.UnkVersionUpDown.Maximum = new decimal(new int[] { + -1, + 0, + 0, + 0}); + this.UnkVersionUpDown.Name = "UnkVersionUpDown"; + this.UnkVersionUpDown.Size = new System.Drawing.Size(124, 20); + this.UnkVersionUpDown.TabIndex = 68; + this.UnkVersionUpDown.ValueChanged += new System.EventHandler(this.UnkVersionUpDown_ValueChanged); + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(14, 56); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(67, 13); + this.label6.TabIndex = 67; + this.label6.Text = "Unk version:"; + // + // FileTypeComboBox + // + this.FileTypeComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.FileTypeComboBox.FormattingEnabled = true; + this.FileTypeComboBox.Items.AddRange(new object[] { + "Dat4", + "Dat10ModularSynth", + "Dat15DynamicMixer", + "Dat16Curves", + "Dat22Categories", + "Dat54DataEntries", + "Dat149", + "Dat150", + "Dat151"}); + this.FileTypeComboBox.Location = new System.Drawing.Point(93, 27); + this.FileTypeComboBox.Name = "FileTypeComboBox"; + this.FileTypeComboBox.Size = new System.Drawing.Size(151, 21); + this.FileTypeComboBox.TabIndex = 70; + this.FileTypeComboBox.SelectedIndexChanged += new System.EventHandler(this.FileTypeComboBox_SelectedIndexChanged); + // + // label23 + // + this.label23.AutoSize = true; + this.label23.Location = new System.Drawing.Point(16, 30); + this.label23.Name = "label23"; + this.label23.Size = new System.Drawing.Size(49, 13); + this.label23.TabIndex = 69; + this.label23.Text = "File type:"; + // // EditAudioFilePanel // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(562, 450); + this.Controls.Add(this.FileTypeComboBox); + this.Controls.Add(this.label23); + this.Controls.Add(this.UnkVersionUpDown); + this.Controls.Add(this.label6); + this.Controls.Add(this.ProjectPathTextBox); + this.Controls.Add(this.label30); + this.Controls.Add(this.FileLocationTextBox); + this.Controls.Add(this.label29); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Name = "EditAudioFilePanel"; this.Text = "Edit Audio File"; + ((System.ComponentModel.ISupportInitialize)(this.UnkVersionUpDown)).EndInit(); this.ResumeLayout(false); + this.PerformLayout(); } #endregion + + private System.Windows.Forms.TextBox ProjectPathTextBox; + private System.Windows.Forms.Label label30; + private System.Windows.Forms.TextBox FileLocationTextBox; + private System.Windows.Forms.Label label29; + private System.Windows.Forms.NumericUpDown UnkVersionUpDown; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.ComboBox FileTypeComboBox; + private System.Windows.Forms.Label label23; } } \ No newline at end of file diff --git a/Project/Panels/EditAudioFilePanel.cs b/Project/Panels/EditAudioFilePanel.cs index cf48386..58fcb47 100644 --- a/Project/Panels/EditAudioFilePanel.cs +++ b/Project/Panels/EditAudioFilePanel.cs @@ -16,6 +16,9 @@ namespace CodeWalker.Project.Panels public ProjectForm ProjectForm; public RelFile CurrentFile { get; set; } + private bool populatingui = false; + + public EditAudioFilePanel(ProjectForm owner) { ProjectForm = owner; @@ -27,6 +30,7 @@ namespace CodeWalker.Project.Panels CurrentFile = file; Tag = file; UpdateFormTitle(); + UpdateUI(); } private void UpdateFormTitle() @@ -34,5 +38,66 @@ namespace CodeWalker.Project.Panels Text = CurrentFile?.Name ?? ""; } + private void UpdateUI() + { + if (CurrentFile == null) + { + populatingui = true; + FileTypeComboBox.Text = string.Empty; + UnkVersionUpDown.Value = 0; + FileLocationTextBox.Text = string.Empty; + ProjectPathTextBox.Text = string.Empty; + populatingui = false; + } + else + { + populatingui = true; + FileTypeComboBox.Text = CurrentFile.RelType.ToString(); + UnkVersionUpDown.Value = CurrentFile.DataUnkVal; + var project = ProjectForm?.CurrentProjectFile; + FileLocationTextBox.Text = CurrentFile.RpfFileEntry?.Path ?? CurrentFile.FilePath; + ProjectPathTextBox.Text = (project != null) ? project.GetRelativePath(CurrentFile.FilePath) : CurrentFile.FilePath; + populatingui = false; + } + } + + private void ProjectItemChanged() + { + if (CurrentFile != null) + { + ProjectForm.SetAudioFileHasChanged(true); + } + } + + private void FileTypeComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentFile == null) return; + + var type = RelDatFileType.Dat151; + if (Enum.TryParse(FileTypeComboBox.Text, out type)) + { + if (CurrentFile.RelType != type) + { + CurrentFile.RelType = type; + + ProjectItemChanged(); + } + } + } + + private void UnkVersionUpDown_ValueChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentFile == null) return; + + byte unk = (byte)UnkVersionUpDown.Value; + if (CurrentFile.DataUnkVal != unk) + { + CurrentFile.DataUnkVal = unk; + + ProjectItemChanged(); + } + } } } diff --git a/Project/Panels/EditAudioZoneListPanel.Designer.cs b/Project/Panels/EditAudioZoneListPanel.Designer.cs index 826ca65..f16ce1b 100644 --- a/Project/Panels/EditAudioZoneListPanel.Designer.cs +++ b/Project/Panels/EditAudioZoneListPanel.Designer.cs @@ -31,6 +31,8 @@ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditAudioZoneListPanel)); this.tabControl1 = new System.Windows.Forms.TabControl(); this.tabPage1 = new System.Windows.Forms.TabPage(); + this.label12 = new System.Windows.Forms.Label(); + this.NameTextBox = new System.Windows.Forms.TextBox(); this.label19 = new System.Windows.Forms.Label(); this.HashesTextBox = new CodeWalker.WinForms.TextBoxFix(); this.tabControl1.SuspendLayout(); @@ -51,6 +53,8 @@ // // tabPage1 // + this.tabPage1.Controls.Add(this.label12); + this.tabPage1.Controls.Add(this.NameTextBox); this.tabPage1.Controls.Add(this.label19); this.tabPage1.Controls.Add(this.HashesTextBox); this.tabPage1.Location = new System.Drawing.Point(4, 22); @@ -61,14 +65,32 @@ this.tabPage1.Text = "Ambient Zone List"; this.tabPage1.UseVisualStyleBackColor = true; // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(26, 9); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(64, 13); + this.label12.TabIndex = 3; + this.label12.Text = "Name hash:"; + // + // NameTextBox + // + this.NameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.NameTextBox.Location = new System.Drawing.Point(103, 6); + this.NameTextBox.Name = "NameTextBox"; + this.NameTextBox.Size = new System.Drawing.Size(428, 20); + this.NameTextBox.TabIndex = 4; + this.NameTextBox.TextChanged += new System.EventHandler(this.NameTextBox_TextChanged); + // // label19 // - this.label19.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.label19.AutoSize = true; - this.label19.Location = new System.Drawing.Point(11, 11); + this.label19.Location = new System.Drawing.Point(18, 35); this.label19.Name = "label19"; this.label19.Size = new System.Drawing.Size(72, 13); - this.label19.TabIndex = 72; + this.label19.TabIndex = 5; this.label19.Text = "Zone hashes:"; // // HashesTextBox @@ -76,12 +98,12 @@ this.HashesTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.HashesTextBox.Location = new System.Drawing.Point(6, 28); + this.HashesTextBox.Location = new System.Drawing.Point(103, 32); this.HashesTextBox.Multiline = true; this.HashesTextBox.Name = "HashesTextBox"; this.HashesTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; this.HashesTextBox.Size = new System.Drawing.Size(428, 330); - this.HashesTextBox.TabIndex = 73; + this.HashesTextBox.TabIndex = 6; this.HashesTextBox.WordWrap = false; this.HashesTextBox.TextChanged += new System.EventHandler(this.HashesTextBox_TextChanged); // @@ -107,5 +129,7 @@ private System.Windows.Forms.TabPage tabPage1; private System.Windows.Forms.Label label19; private WinForms.TextBoxFix HashesTextBox; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.TextBox NameTextBox; } } \ No newline at end of file diff --git a/Project/Panels/EditAudioZoneListPanel.cs b/Project/Panels/EditAudioZoneListPanel.cs index 3ff8828..43aeeb8 100644 --- a/Project/Panels/EditAudioZoneListPanel.cs +++ b/Project/Panels/EditAudioZoneListPanel.cs @@ -47,6 +47,7 @@ namespace CodeWalker.Project.Panels //DeleteButton.Enabled = false; populatingui = true; + NameTextBox.Text = string.Empty; HashesTextBox.Text = string.Empty; populatingui = false; } @@ -58,6 +59,8 @@ namespace CodeWalker.Project.Panels populatingui = true; var zl = CurrentZoneList; + NameTextBox.Text = zl.NameHash.ToString(); + StringBuilder sb = new StringBuilder(); if (zl.ZoneHashes != null) { @@ -87,6 +90,30 @@ namespace CodeWalker.Project.Panels + private void NameTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentZoneList == null) return; + + uint hash = 0; + string name = NameTextBox.Text; + if (!uint.TryParse(name, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(name); + JenkIndex.Ensure(name); + } + //NameHashLabel.Text = "Hash: " + hash.ToString(); + + if (CurrentZoneList.NameHash != hash) + { + CurrentZoneList.Name = NameTextBox.Text; + CurrentZoneList.NameHash = hash; + + ProjectItemChanged(); + UpdateFormTitle(); + } + } + private void HashesTextBox_TextChanged(object sender, EventArgs e) { if (populatingui) return; diff --git a/Project/Panels/EditAudioZonePanel.Designer.cs b/Project/Panels/EditAudioZonePanel.Designer.cs index d00308e..778d243 100644 --- a/Project/Panels/EditAudioZonePanel.Designer.cs +++ b/Project/Panels/EditAudioZonePanel.Designer.cs @@ -31,6 +31,8 @@ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditAudioZonePanel)); this.tabControl1 = new System.Windows.Forms.TabControl(); this.tabPage1 = new System.Windows.Forms.TabPage(); + this.label22 = new System.Windows.Forms.Label(); + this.UnkBytesTextBox = new System.Windows.Forms.TextBox(); this.DeleteButton = new System.Windows.Forms.Button(); this.AddToProjectButton = new System.Windows.Forms.Button(); this.label21 = new System.Windows.Forms.Label(); @@ -78,8 +80,6 @@ this.label16 = new System.Windows.Forms.Label(); this.InnerPosTextBox = new System.Windows.Forms.TextBox(); this.GoToButton = new System.Windows.Forms.Button(); - this.label22 = new System.Windows.Forms.Label(); - this.UnkBytesTextBox = new System.Windows.Forms.TextBox(); this.tabControl1.SuspendLayout(); this.tabPage1.SuspendLayout(); this.SuspendLayout(); @@ -154,13 +154,32 @@ this.tabPage1.Text = "Ambient Zone"; this.tabPage1.UseVisualStyleBackColor = true; // + // label22 + // + this.label22.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label22.AutoSize = true; + this.label22.Location = new System.Drawing.Point(327, 34); + this.label22.Name = "label22"; + this.label22.Size = new System.Drawing.Size(58, 13); + this.label22.TabIndex = 64; + this.label22.Text = "Unk bytes:"; + // + // UnkBytesTextBox + // + this.UnkBytesTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.UnkBytesTextBox.Location = new System.Drawing.Point(390, 31); + this.UnkBytesTextBox.Name = "UnkBytesTextBox"; + this.UnkBytesTextBox.Size = new System.Drawing.Size(155, 20); + this.UnkBytesTextBox.TabIndex = 65; + this.UnkBytesTextBox.TextChanged += new System.EventHandler(this.UnkBytesTextBox_TextChanged); + // // DeleteButton // this.DeleteButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.DeleteButton.Location = new System.Drawing.Point(343, 3); this.DeleteButton.Name = "DeleteButton"; this.DeleteButton.Size = new System.Drawing.Size(93, 23); - this.DeleteButton.TabIndex = 75; + this.DeleteButton.TabIndex = 77; this.DeleteButton.Text = "Delete zone"; this.DeleteButton.UseVisualStyleBackColor = true; this.DeleteButton.Click += new System.EventHandler(this.DeleteButton_Click); @@ -171,7 +190,7 @@ this.AddToProjectButton.Location = new System.Drawing.Point(452, 3); this.AddToProjectButton.Name = "AddToProjectButton"; this.AddToProjectButton.Size = new System.Drawing.Size(93, 23); - this.AddToProjectButton.TabIndex = 74; + this.AddToProjectButton.TabIndex = 76; this.AddToProjectButton.Text = "Add to project"; this.AddToProjectButton.UseVisualStyleBackColor = true; this.AddToProjectButton.Click += new System.EventHandler(this.AddToProjectButton_Click); @@ -183,7 +202,7 @@ this.label21.Location = new System.Drawing.Point(340, 106); this.label21.Name = "label21"; this.label21.Size = new System.Drawing.Size(44, 13); - this.label21.TabIndex = 68; + this.label21.TabIndex = 70; this.label21.Text = "Flags 2:"; // // Flags2TextBox @@ -192,7 +211,7 @@ this.Flags2TextBox.Location = new System.Drawing.Point(390, 103); this.Flags2TextBox.Name = "Flags2TextBox"; this.Flags2TextBox.Size = new System.Drawing.Size(155, 20); - this.Flags2TextBox.TabIndex = 69; + this.Flags2TextBox.TabIndex = 71; this.Flags2TextBox.TextChanged += new System.EventHandler(this.Flags2TextBox_TextChanged); // // label20 @@ -202,7 +221,7 @@ this.label20.Location = new System.Drawing.Point(340, 278); this.label20.Name = "label20"; this.label20.Size = new System.Drawing.Size(193, 13); - this.label20.TabIndex = 72; + this.label20.TabIndex = 74; this.label20.Text = "Ext params: Name (hash), Value (float)"; // // ExtParamsTextBox @@ -213,7 +232,7 @@ this.ExtParamsTextBox.Name = "ExtParamsTextBox"; this.ExtParamsTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; this.ExtParamsTextBox.Size = new System.Drawing.Size(209, 116); - this.ExtParamsTextBox.TabIndex = 73; + this.ExtParamsTextBox.TabIndex = 75; this.ExtParamsTextBox.WordWrap = false; this.ExtParamsTextBox.TextChanged += new System.EventHandler(this.ExtParamsTextBox_TextChanged); // @@ -224,7 +243,7 @@ this.label19.Location = new System.Drawing.Point(340, 134); this.label19.Name = "label19"; this.label19.Size = new System.Drawing.Size(46, 13); - this.label19.TabIndex = 70; + this.label19.TabIndex = 72; this.label19.Text = "Hashes:"; // // label15 @@ -292,7 +311,7 @@ this.HashesTextBox.Name = "HashesTextBox"; this.HashesTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; this.HashesTextBox.Size = new System.Drawing.Size(209, 116); - this.HashesTextBox.TabIndex = 71; + this.HashesTextBox.TabIndex = 73; this.HashesTextBox.WordWrap = false; this.HashesTextBox.TextChanged += new System.EventHandler(this.HashesTextBox_TextChanged); // @@ -303,7 +322,7 @@ this.label14.Location = new System.Drawing.Point(340, 82); this.label14.Name = "label14"; this.label14.Size = new System.Drawing.Size(44, 13); - this.label14.TabIndex = 66; + this.label14.TabIndex = 68; this.label14.Text = "Flags 1:"; // // Flags1TextBox @@ -312,7 +331,7 @@ this.Flags1TextBox.Location = new System.Drawing.Point(390, 79); this.Flags1TextBox.Name = "Flags1TextBox"; this.Flags1TextBox.Size = new System.Drawing.Size(155, 20); - this.Flags1TextBox.TabIndex = 67; + this.Flags1TextBox.TabIndex = 69; this.Flags1TextBox.TextChanged += new System.EventHandler(this.Flags1TextBox_TextChanged); // // label13 @@ -322,7 +341,7 @@ this.label13.Location = new System.Drawing.Point(340, 58); this.label13.Name = "label13"; this.label13.Size = new System.Drawing.Size(44, 13); - this.label13.TabIndex = 64; + this.label13.TabIndex = 66; this.label13.Text = "Flags 0:"; // // Flags0TextBox @@ -331,7 +350,7 @@ this.Flags0TextBox.Location = new System.Drawing.Point(390, 55); this.Flags0TextBox.Name = "Flags0TextBox"; this.Flags0TextBox.Size = new System.Drawing.Size(155, 20); - this.Flags0TextBox.TabIndex = 65; + this.Flags0TextBox.TabIndex = 67; this.Flags0TextBox.TextChanged += new System.EventHandler(this.Flags0TextBox_TextChanged); // // ShapeComboBox @@ -615,25 +634,6 @@ this.GoToButton.UseVisualStyleBackColor = true; this.GoToButton.Click += new System.EventHandler(this.GoToButton_Click); // - // label22 - // - this.label22.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.label22.AutoSize = true; - this.label22.Location = new System.Drawing.Point(327, 34); - this.label22.Name = "label22"; - this.label22.Size = new System.Drawing.Size(58, 13); - this.label22.TabIndex = 76; - this.label22.Text = "Unk bytes:"; - // - // UnkBytesTextBox - // - this.UnkBytesTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.UnkBytesTextBox.Location = new System.Drawing.Point(390, 31); - this.UnkBytesTextBox.Name = "UnkBytesTextBox"; - this.UnkBytesTextBox.Size = new System.Drawing.Size(155, 20); - this.UnkBytesTextBox.TabIndex = 77; - this.UnkBytesTextBox.TextChanged += new System.EventHandler(this.UnkBytesTextBox_TextChanged); - // // EditAudioZonePanel // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); diff --git a/Project/Panels/EditAudioZonePanel.cs b/Project/Panels/EditAudioZonePanel.cs index dae06cd..dada2ac 100644 --- a/Project/Panels/EditAudioZonePanel.cs +++ b/Project/Panels/EditAudioZonePanel.cs @@ -171,6 +171,7 @@ namespace CodeWalker.Project.Panels CurrentZone.AudioZone.NameHash = hash; ProjectItemChanged(); + UpdateFormTitle(); } } diff --git a/Project/Panels/ProjectExplorerPanel.cs b/Project/Panels/ProjectExplorerPanel.cs index 4a9ed99..dd09739 100644 --- a/Project/Panels/ProjectExplorerPanel.cs +++ b/Project/Panels/ProjectExplorerPanel.cs @@ -450,22 +450,24 @@ namespace CodeWalker.Project.Panels node.Nodes.Clear(); - TreeNode n; - n = node.Nodes.Add("Edit Zone"); - n.Name = "EditZone"; - n.Tag = rel; //this tag should get updated with the selected zone! - - n = node.Nodes.Add("Edit Emitter"); - n.Name = "EditEmitter"; - n.Tag = rel; //this tag should get updated with the selected emitter! - + if (rel.RelDatasSorted == null) return; //nothing to see here + var zones = new List(); + var emitters = new List(); var zonelists = new List(); var emitterlists = new List(); - foreach (var reldata in rel.RelDatas) + foreach (var reldata in rel.RelDatasSorted) { + if (reldata is Dat151AmbientZone) + { + zones.Add(reldata as Dat151AmbientZone); + } + if (reldata is Dat151AmbientEmitter) + { + emitters.Add(reldata as Dat151AmbientEmitter); + } if (reldata is Dat151AmbientZoneList) { zonelists.Add(reldata as Dat151AmbientZoneList); @@ -478,10 +480,41 @@ namespace CodeWalker.Project.Panels + if (zones.Count > 0) + { + var n = node.Nodes.Add("Ambient Zones (" + zones.Count.ToString() + ")"); + n.Name = "AmbientZones"; + n.Tag = rel; + + for (int i = 0; i < zones.Count; i++) + { + var zone = zones[i]; + var tnode = n.Nodes.Add(zone.NameHash.ToString()); + tnode.Tag = zone; + } + } + + + if (emitters.Count > 0) + { + var n = node.Nodes.Add("Ambient Emitters (" + emitters.Count.ToString() + ")"); + n.Name = "AmbientEmitters"; + n.Tag = rel; + + for (int i = 0; i < emitters.Count; i++) + { + var emitter = emitters[i]; + var tnode = n.Nodes.Add(emitter.NameHash.ToString()); + tnode.Tag = emitter; + } + } + + + if (zonelists.Count > 0) { - var zonelistsnode = node.Nodes.Add("Zone Lists (" + zonelists.Count.ToString() + ")"); - zonelistsnode.Name = "ZoneLists"; + var zonelistsnode = node.Nodes.Add("Ambient Zone Lists (" + zonelists.Count.ToString() + ")"); + zonelistsnode.Name = "AmbientZoneLists"; zonelistsnode.Tag = rel; for (int i = 0; i < zonelists.Count; i++) { @@ -493,8 +526,8 @@ namespace CodeWalker.Project.Panels if (emitterlists.Count > 0) { - var emitterlistsnode = node.Nodes.Add("Emitter Lists (" + emitterlists.Count.ToString() + ")"); - emitterlistsnode.Name = "EmitterLists"; + var emitterlistsnode = node.Nodes.Add("Ambient Emitter Lists (" + emitterlists.Count.ToString() + ")"); + emitterlistsnode.Name = "AmbientEmitterLists"; emitterlistsnode.Tag = rel; for (int i = 0; i < emitterlists.Count; i++) { @@ -1019,18 +1052,28 @@ namespace CodeWalker.Project.Panels { if (zone == null) return null; TreeNode relnode = FindAudioRelTreeNode(zone.RelFile); - var zonenode = GetChildTreeNode(relnode, "EditZone"); + var zonenode = GetChildTreeNode(relnode, "AmbientZones"); if (zonenode == null) return null; - zonenode.Tag = zone; + //zonenode.Tag = zone; + for (int i = 0; i < zonenode.Nodes.Count; i++) + { + TreeNode znode = zonenode.Nodes[i]; + if (znode.Tag == zone.AudioZone) return znode; + } return zonenode; } public TreeNode FindAudioEmitterTreeNode(AudioPlacement emitter) { if (emitter == null) return null; TreeNode relnode = FindAudioRelTreeNode(emitter.RelFile); - var zonenode = GetChildTreeNode(relnode, "EditEmitter"); + var zonenode = GetChildTreeNode(relnode, "AmbientEmitters"); if (zonenode == null) return null; - zonenode.Tag = emitter; + //zonenode.Tag = emitter; + for (int i = 0; i < zonenode.Nodes.Count; i++) + { + TreeNode znode = zonenode.Nodes[i]; + if (znode.Tag == emitter.AudioEmitter) return znode; + } return zonenode; } public TreeNode FindAudioZoneListTreeNode(Dat151AmbientZoneList list) @@ -1050,7 +1093,7 @@ namespace CodeWalker.Project.Panels { if (list == null) return null; TreeNode relnode = FindAudioRelTreeNode(list.Rel); - var emitterlistsnode = GetChildTreeNode(relnode, "EmitterLists"); + var emitterlistsnode = GetChildTreeNode(relnode, "AmbientEmitterLists"); if (emitterlistsnode == null) return null; for (int i = 0; i < emitterlistsnode.Nodes.Count; i++) { @@ -1539,6 +1582,42 @@ namespace CodeWalker.Project.Panels tn.Parent.Nodes.Remove(tn); } } + public void RemoveAudioZoneTreeNode(AudioPlacement zone) + { + var tn = FindAudioZoneTreeNode(zone); + if ((tn != null) && (tn.Parent != null)) + { + var zones = new List(); + foreach (var reldata in zone.RelFile.RelDatas) + { + if (reldata is Dat151AmbientZone) + { + zones.Add(reldata as Dat151AmbientZone); + } + } + + tn.Parent.Text = "Ambient Zones (" + zones.Count.ToString() + ")"; + tn.Parent.Nodes.Remove(tn); + } + } + public void RemoveAudioEmitterTreeNode(AudioPlacement emitter) + { + var tn = FindAudioEmitterTreeNode(emitter); + if ((tn != null) && (tn.Parent != null)) + { + var emitters = new List(); + foreach (var reldata in emitter.RelFile.RelDatas) + { + if (reldata is Dat151AmbientEmitter) + { + emitters.Add(reldata as Dat151AmbientEmitter); + } + } + + tn.Parent.Text = "Ambient Emitters (" + emitters.Count.ToString() + ")"; + tn.Parent.Nodes.Remove(tn); + } + } public void RemoveAudioZoneListTreeNode(Dat151AmbientZoneList list) { var tn = FindAudioZoneListTreeNode(list); @@ -1553,7 +1632,7 @@ namespace CodeWalker.Project.Panels } } - tn.Parent.Text = "Zone Lists (" + zonelists.Count.ToString() + ")"; + tn.Parent.Text = "Ambient Zone Lists (" + zonelists.Count.ToString() + ")"; tn.Parent.Nodes.Remove(tn); } } @@ -1571,7 +1650,7 @@ namespace CodeWalker.Project.Panels } } - tn.Parent.Text = "Emitter Lists (" + emitterlists.Count.ToString() + ")"; + tn.Parent.Text = "Ambient Emitter Lists (" + emitterlists.Count.ToString() + ")"; tn.Parent.Nodes.Remove(tn); } } diff --git a/Project/ProjectForm.cs b/Project/ProjectForm.cs index dd06f32..c744b53 100644 --- a/Project/ProjectForm.cs +++ b/Project/ProjectForm.cs @@ -463,14 +463,14 @@ namespace CodeWalker.Project ShowPanel(promote, () => { return new EditAudioZonePanel(this); }, //createFunc (panel) => { panel.SetZone(CurrentAudioZone); }, //updateFunc - (panel) => { return panel.CurrentZone == CurrentAudioZone; }); //findFunc + (panel) => { return panel.CurrentZone?.AudioZone == CurrentAudioZone?.AudioZone; }); //findFunc } public void ShowEditAudioEmitterPanel(bool promote) { ShowPanel(promote, () => { return new EditAudioEmitterPanel(this); }, //createFunc (panel) => { panel.SetEmitter(CurrentAudioEmitter); }, //updateFunc - (panel) => { return panel.CurrentEmitter == CurrentAudioEmitter; }); //findFunc + (panel) => { return panel.CurrentEmitter?.AudioEmitter == CurrentAudioEmitter?.AudioEmitter; }); //findFunc } public void ShowEditAudioZoneListPanel(bool promote) { @@ -621,12 +621,23 @@ namespace CodeWalker.Project CurrentScenarioNode = item as ScenarioNode; CurrentScenarioChainEdge = item as MCScenarioChainingEdge; CurrentAudioFile = item as RelFile; - CurrentAudioZone = item as AudioPlacement; if (CurrentAudioZone?.AudioZone == null) CurrentAudioZone = null; - CurrentAudioEmitter = item as AudioPlacement; if (CurrentAudioEmitter?.AudioEmitter == null) CurrentAudioEmitter = null; + CurrentAudioZone = item as AudioPlacement; + CurrentAudioEmitter = item as AudioPlacement; CurrentAudioZoneList = item as Dat151AmbientZoneList; CurrentAudioEmitterList = item as Dat151AmbientEmitterList; CurrentMloRoom = item as MCMloRoomDef; + if (CurrentAudioZone?.AudioZone == null) CurrentAudioZone = null; + if (CurrentAudioEmitter?.AudioEmitter == null) CurrentAudioEmitter = null; + + //need to create a temporary AudioPlacement wrapper for these, since AudioPlacements usually come from WorldForm + var daz = item as Dat151AmbientZone; + var dae = item as Dat151AmbientEmitter; + if (daz != null) CurrentAudioZone = new AudioPlacement(daz.Rel, daz); + if (dae != null) CurrentAudioEmitter = new AudioPlacement(dae.Rel, dae); + + + if (CurrentMloEntity != null) { MloInstanceData instance = TryGetMloInstance(CurrentMloEntity.Archetype); @@ -4370,7 +4381,8 @@ namespace CodeWalker.Project RelFile rel = CurrentProjectFile.AddAudioRelFile(fname); if (rel != null) { - //init stuff.. //TODO + rel.RelType = RelDatFileType.Dat151; //TODO: different types + } } @@ -4523,15 +4535,9 @@ namespace CodeWalker.Project copy = CurrentAudioZone; } + bool cp = copyPosition && (copy != null); var zone = new Dat151AmbientZone(CurrentAudioFile); - var ap = new AudioPlacement(CurrentAudioFile, zone); - - bool cp = copyPosition && (copy != null); - Vector3 pos = cp ? copy.Position : GetSpawnPos(20.0f); - Quaternion ori = cp ? copy.Orientation : Quaternion.Identity; - ap.SetPosition(pos); - ap.SetOrientation(ori); //AA800424 box, line //AA800420 sphere @@ -4552,8 +4558,8 @@ namespace CodeWalker.Project zone.UnkVec1 = cp ? copy.AudioZone.UnkVec1 : new Vector4(0, 0, 1, 0); zone.UnkVec2 = cp ? copy.AudioZone.UnkVec2 : new Vector4(1, -1, -1, 0); zone.UnkVec3 = cp ? copy.AudioZone.UnkVec3 : new Vector4(0, 0, -1, 0); - zone.Unk14 = cp ? copy.AudioZone.Unk14 : (byte)0; - zone.Unk15 = cp ? copy.AudioZone.Unk15 : (byte)0; + zone.Unk14 = cp ? copy.AudioZone.Unk14 : (byte)4; + zone.Unk15 = cp ? copy.AudioZone.Unk15 : (byte)1; zone.Unk16 = cp ? copy.AudioZone.Unk16 : (byte)0; zone.HashesCount = cp ? copy.AudioZone.HashesCount: (byte)0; zone.Hashes = cp ? copy.AudioZone.Hashes : null; @@ -4561,9 +4567,15 @@ namespace CodeWalker.Project zone.ExtParams = cp ? copy.AudioZone.ExtParams : null; zone.Name = "zone1"; zone.NameHash = JenkHash.GenHash(zone.Name); + + var ap = new AudioPlacement(CurrentAudioFile, zone); ap.Name = zone.Name; ap.NameHash = zone.NameHash; + Vector3 pos = cp ? copy.Position : GetSpawnPos(20.0f); + Quaternion ori = cp ? copy.Orientation : Quaternion.Identity; + ap.SetPosition(pos); + ap.SetOrientation(ori); CurrentAudioFile.AddRelData(zone); @@ -4616,20 +4628,20 @@ namespace CodeWalker.Project var delzone = CurrentAudioZone; var delrel = CurrentAudioFile; - //ProjectExplorer?.RemoveAudioZoneTreeNode(delzone); + ProjectExplorer?.RemoveAudioZoneTreeNode(delzone); ProjectExplorer?.SetAudioRelHasChanged(delrel, true); - ClosePanel((EditAudioZonePanel p) => { return p.Tag == delzone; }); + ClosePanel((EditAudioZonePanel p) => { return p.CurrentZone.AudioZone == delzone.AudioZone; }); CurrentAudioZone = null; - if (WorldForm != null) - { - lock (WorldForm.RenderSyncRoot) - { - WorldForm.SelectItem(null); - } - } + //if (WorldForm != null) + //{ + // lock (WorldForm.RenderSyncRoot) + // { + // WorldForm.SelectItem(null); + // } + //} return true; } @@ -4638,9 +4650,65 @@ namespace CodeWalker.Project return zone == CurrentAudioZone; } - public void NewAudioEmitter(AudioPlacement copy = null, bool copyPosition = false) //TODO + public void NewAudioEmitter(AudioPlacement copy = null, bool copyPosition = false) { - MessageBox.Show("NewAudioEmitter TODO!"); + if (CurrentAudioFile == null) return; + + if (copy == null) + { + copy = CurrentAudioEmitter; + } + + bool cp = copyPosition && (copy != null); + + var emitter = new Dat151AmbientEmitter(CurrentAudioFile); + + emitter.Flags0 = cp ? copy.AudioEmitter.Flags0 : 0xAA001100; + emitter.Flags5 = cp ? copy.AudioEmitter.Flags5 : 0xFFFFFFFF; + emitter.InnerRad = cp ? copy.AudioEmitter.InnerRad : 0.0f; + emitter.OuterRad = cp ? copy.AudioEmitter.OuterRad : 20.0f; + emitter.Unk01 = cp ? copy.AudioEmitter.Unk01 : 1.0f; + emitter.Unk02 = cp ? copy.AudioEmitter.Unk02 : 0; + emitter.Unk03 = cp ? copy.AudioEmitter.Unk03 : 0; + emitter.Unk04 = cp ? copy.AudioEmitter.Unk04 : 160; + emitter.Unk05 = cp ? copy.AudioEmitter.Unk05 : 5; + emitter.Unk06 = cp ? copy.AudioEmitter.Unk06 : 0; + emitter.Unk07 = cp ? copy.AudioEmitter.Unk07 : 0; + emitter.Unk08 = cp ? copy.AudioEmitter.Unk08 : 0; + emitter.Unk09 = cp ? copy.AudioEmitter.Unk09 : 1; + emitter.Unk10 = cp ? copy.AudioEmitter.Unk10 : 1; + emitter.Unk11 = cp ? copy.AudioEmitter.Unk11 : 1; + emitter.Unk12 = cp ? copy.AudioEmitter.Unk12 : 100; + emitter.Unk13 = cp ? copy.AudioEmitter.Unk13 : 3; + + + emitter.Name = "emitter1"; + emitter.NameHash = JenkHash.GenHash(emitter.Name); + + var ap = new AudioPlacement(CurrentAudioFile, emitter); + ap.Name = emitter.Name; + ap.NameHash = emitter.NameHash; + + Vector3 pos = cp ? copy.Position : GetSpawnPos(20.0f); + Quaternion ori = cp ? copy.Orientation : Quaternion.Identity; + ap.SetPosition(pos); + ap.SetOrientation(ori); + + + CurrentAudioFile.AddRelData(emitter); + + LoadProjectTree(); + + ProjectExplorer?.TrySelectAudioEmitterTreeNode(ap); + CurrentAudioEmitter = ap; + + ShowEditAudioEmitterPanel(false); + + + if (WorldForm != null) + { + WorldForm.UpdateAudioPlacementGraphics(CurrentAudioFile); + } } public bool DeleteAudioEmitter() { @@ -4677,20 +4745,20 @@ namespace CodeWalker.Project var delem = CurrentAudioEmitter; var delrel = CurrentAudioFile; - //ProjectExplorer?.RemoveAudioEmitterTreeNode(delem); + ProjectExplorer?.RemoveAudioEmitterTreeNode(delem); ProjectExplorer?.SetAudioRelHasChanged(delrel, true); - ClosePanel((EditAudioEmitterPanel p) => { return p.Tag == delem; }); - CurrentAudioEmitter = null; - if (WorldForm != null) - { - lock (WorldForm.RenderSyncRoot) - { - WorldForm.SelectItem(null); - } - } + ClosePanel((EditAudioEmitterPanel p) => { return p.CurrentEmitter.AudioEmitter == delem.AudioEmitter; }); + + //if (WorldForm != null) + //{ + // lock (WorldForm.RenderSyncRoot) + // { + // WorldForm.SelectItem(null); + // } + //} return true; } @@ -4699,9 +4767,22 @@ namespace CodeWalker.Project return emitter == CurrentAudioEmitter; } - public void NewAudioZoneList() //TODO + public void NewAudioZoneList() { - MessageBox.Show("NewAudioZoneList TODO!"); + if (CurrentAudioFile == null) return; + + + var zonelist = new Dat151AmbientZoneList(CurrentAudioFile); + + + CurrentAudioFile.AddRelData(zonelist); + + LoadProjectTree(); + + ProjectExplorer?.TrySelectAudioZoneListTreeNode(zonelist); + CurrentAudioZoneList = zonelist; + + ShowEditAudioZonePanel(false); } public bool DeleteAudioZoneList() { @@ -4750,9 +4831,22 @@ namespace CodeWalker.Project return list == CurrentAudioZoneList; } - public void NewAudioEmitterList() //TODO + public void NewAudioEmitterList() { - MessageBox.Show("NewAudioEmitterList TODO!"); + if (CurrentAudioFile == null) return; + + + var emlist = new Dat151AmbientEmitterList(CurrentAudioFile); + + + CurrentAudioFile.AddRelData(emlist); + + LoadProjectTree(); + + ProjectExplorer?.TrySelectAudioEmitterListTreeNode(emlist); + CurrentAudioEmitterList = emlist; + + ShowEditAudioZonePanel(false); } public bool DeleteAudioEmitterList() { From 1d1295c29d37577d1e54b8305ec10e8c05dad115 Mon Sep 17 00:00:00 2001 From: dexy Date: Fri, 28 Dec 2018 19:02:21 +1100 Subject: [PATCH 061/158] Dat151 progress --- .../GameFiles/FileTypes/RelFile.cs | 502 +++++++++--------- CodeWalker.csproj | 18 + .../Panels/EditAudioInteriorPanel.Designer.cs | 187 +++++++ Project/Panels/EditAudioInteriorPanel.cs | 207 ++++++++ Project/Panels/EditAudioInteriorPanel.resx | 409 ++++++++++++++ .../EditAudioInteriorRoomPanel.Designer.cs | 489 +++++++++++++++++ Project/Panels/EditAudioInteriorRoomPanel.cs | 436 +++++++++++++++ .../Panels/EditAudioInteriorRoomPanel.resx | 409 ++++++++++++++ Project/Panels/ProjectExplorerPanel.cs | 153 ++++++ Project/ProjectForm.Designer.cs | 96 ++-- Project/ProjectForm.cs | 188 +++++++ 11 files changed, 2806 insertions(+), 288 deletions(-) create mode 100644 Project/Panels/EditAudioInteriorPanel.Designer.cs create mode 100644 Project/Panels/EditAudioInteriorPanel.cs create mode 100644 Project/Panels/EditAudioInteriorPanel.resx create mode 100644 Project/Panels/EditAudioInteriorRoomPanel.Designer.cs create mode 100644 Project/Panels/EditAudioInteriorRoomPanel.cs create mode 100644 Project/Panels/EditAudioInteriorRoomPanel.resx diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index 1b867c3..8d2d3bb 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -2986,7 +2986,7 @@ namespace CodeWalker.GameFiles int brem = (16 - ((ExtParamCount * 12) % 16)) % 16; if (brem > 0) { - //byte[] brema = br.ReadBytes(brem); + byte[] brema = br.ReadBytes(brem); //for (int i = 0; i < brem; i++) //{ // if (brema[i] != 0) @@ -3315,6 +3315,256 @@ namespace CodeWalker.GameFiles } } + [TC(typeof(EXP))] public class Dat151Interior : Dat151RelData + { + public FlagsUint Unk0 { get; set; } + public FlagsUint Unk1 { get; set; } + public FlagsUint Unk2 { get; set; } + public uint RoomsCount { get; set; } + public MetaHash[] Rooms { get; set; } + + public Dat151Interior(RelFile rel) : base(rel) + { + Type = Dat151RelType.Interior; + TypeID = (byte)Type; + } + public Dat151Interior(RelData d, BinaryReader br) : base(d, br) + { + Unk0 = br.ReadUInt32(); + Unk1 = br.ReadUInt32(); + Unk2 = br.ReadUInt32(); + RoomsCount = br.ReadUInt32(); + var rooms = new MetaHash[RoomsCount]; + for (int i = 0; i < RoomsCount; i++) + { + rooms[i] = br.ReadUInt32(); + } + Rooms = rooms; + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk0.Value); + bw.Write(Unk1.Value); + bw.Write(Unk2.Value); + bw.Write(RoomsCount); + for (int i = 0; i < RoomsCount; i++) + { + bw.Write(Rooms[i]); + } + } + public override uint[] GetHashTableOffsets() + { + var offsets = new List(); + for (uint i = 0; i < RoomsCount; i++) + { + offsets.Add(16 + i * 4); + } + return offsets.ToArray(); + } + } + [TC(typeof(EXP))] public class Dat151InteriorRoom : Dat151RelData + { + public FlagsUint Flags0 { get; set; } + public MetaHash Unk00 { get; set; } + public MetaHash Hash1 { get; set; } + public uint Unk02 { get; set; } + public float Unk03 { get; set; } + public float Unk04 { get; set; } + public float Unk05 { get; set; } + public MetaHash Unk06 { get; set; } + public float Unk07 { get; set; } + public float Unk08 { get; set; } + public float Unk09 { get; set; } + public float Unk10 { get; set; } + public float Unk11 { get; set; } + public float Unk12 { get; set; } + public MetaHash Unk13 { get; set; } + public MetaHash Unk14 { get; set; } + + public Dat151InteriorRoom(RelFile rel) : base(rel) + { + Type = Dat151RelType.InteriorRoom; + TypeID = (byte)Type; + } + public Dat151InteriorRoom(RelData d, BinaryReader br) : base(d, br) + { + Flags0 = br.ReadUInt32(); + Unk00 = br.ReadUInt32(); + Hash1 = br.ReadUInt32(); + Unk02 = br.ReadUInt32(); + Unk03 = br.ReadSingle(); + Unk04 = br.ReadSingle(); + Unk05 = br.ReadSingle(); + Unk06 = br.ReadUInt32(); + Unk07 = br.ReadSingle(); + Unk08 = br.ReadSingle(); + Unk09 = br.ReadSingle(); + Unk10 = br.ReadSingle(); + Unk11 = br.ReadSingle(); + Unk12 = br.ReadSingle(); + Unk13 = br.ReadUInt32(); + Unk14 = br.ReadUInt32(); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Flags0.Value); + bw.Write(Unk00); + bw.Write(Hash1); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); + bw.Write(Unk14); + } + public override uint[] GetHashTableOffsets() + { + return new uint[] { 8 }; + } + } + [TC(typeof(EXP))] public class Dat151RadioStationsDLC : Dat151RelData + { + public uint AudioTracksCount { get; set; } + public MetaHash[] AudioTracks { get; set; } + + public Dat151RadioStationsDLC(RelFile rel) : base(rel) + { + Type = Dat151RelType.RadioStationsDLC; + TypeID = (byte)Type; + } + public Dat151RadioStationsDLC(RelData d, BinaryReader br) : base(d, br) + { + AudioTracksCount = br.ReadUInt32(); + var tracks = new MetaHash[AudioTracksCount]; + for (int i = 0; i < AudioTracksCount; i++) + { + tracks[i] = br.ReadUInt32(); + } + AudioTracks = tracks; + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(AudioTracksCount); + for (int i = 0; i < AudioTracksCount; i++) + { + bw.Write(AudioTracks[i]); + } + } + public override uint[] GetHashTableOffsets() + { + var offsets = new List(); + for (uint i = 0; i < AudioTracksCount; i++) + { + offsets.Add(4 + i * 4); + } + return offsets.ToArray(); + } + } + [TC(typeof(EXP))] public class Dat151RadioDLC : Dat151RelData + { + public uint Unk00 { get; set; } + public uint Unk01 { get; set; } + public uint Unk02 { get; set; } + public uint Unk03 { get; set; } + public uint Unk04 { get; set; } + public uint Unk05 { get; set; } + public uint Unk06 { get; set; } + public uint Unk07 { get; set; } + public uint Unk08 { get; set; } + public uint Unk09 { get; set; } + public uint Unk10 { get; set; } + public uint Unk11 { get; set; } + public uint AudioTracksCount { get; set; } + public MetaHash[] AudioTracks { get; set; } + + public Dat151RadioDLC(RelFile rel) : base(rel) + { + Type = Dat151RelType.RadioDLC; + TypeID = (byte)Type; + } + public Dat151RadioDLC(RelData d, BinaryReader br) : base(d, br) + { + Unk00 = br.ReadUInt32(); + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadUInt32(); + Unk03 = br.ReadUInt32(); + Unk04 = br.ReadUInt32(); + Unk05 = br.ReadUInt32(); + Unk06 = br.ReadUInt32(); + Unk07 = br.ReadUInt32(); + Unk08 = br.ReadUInt32(); + Unk09 = br.ReadUInt32(); + Unk10 = br.ReadUInt32(); + Unk11 = br.ReadUInt32(); + AudioTracksCount = br.ReadUInt32(); + var tracks = new MetaHash[AudioTracksCount]; + for (int i = 0; i < AudioTracksCount; i++) + { + tracks[i] = br.ReadUInt32(); + } + AudioTracks = tracks; + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk00); + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(AudioTracksCount); + for (int i = 0; i < AudioTracksCount; i++) + { + bw.Write(AudioTracks[i]); + } + } + public override uint[] GetHashTableOffsets() + { + var offsets = new List(); + for (uint i = 0; i < AudioTracksCount; i++) + { + offsets.Add(52 + i * 4); + } + return offsets.ToArray(); + } + } [TC(typeof(EXP))] public class Dat151WeaponAudioItem : Dat151RelData { @@ -4062,132 +4312,6 @@ namespace CodeWalker.GameFiles } } - [TC(typeof(EXP))] public class Dat151Interior : Dat151RelData - { - public uint Unk0 { get; set; } - public uint Unk1 { get; set; } - public uint Unk2 { get; set; } - public uint RoomsCount { get; set; } - public MetaHash[] Rooms { get; set; } - - public Dat151Interior(RelFile rel) : base(rel) - { - Type = Dat151RelType.Interior; - TypeID = (byte)Type; - } - public Dat151Interior(RelData d, BinaryReader br) : base(d, br) - { - Unk0 = br.ReadUInt32(); - Unk1 = br.ReadUInt32(); - Unk2 = br.ReadUInt32(); - RoomsCount = br.ReadUInt32(); - var rooms = new MetaHash[RoomsCount]; - for (int i = 0; i < RoomsCount; i++) - { - rooms[i] = br.ReadUInt32(); - } - Rooms = rooms; - - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - WriteTypeAndOffset(bw); - - bw.Write(Unk0); - bw.Write(Unk1); - bw.Write(Unk2); - bw.Write(RoomsCount); - for (int i = 0; i < RoomsCount; i++) - { - bw.Write(Rooms[i]); - } - } - public override uint[] GetHashTableOffsets() - { - var offsets = new List(); - for (uint i = 0; i < RoomsCount; i++) - { - offsets.Add(16 + i * 4); - } - return offsets.ToArray(); - } - } - [TC(typeof(EXP))] public class Dat151InteriorRoom : Dat151RelData - { - public uint Unk00 { get; set; } - public MetaHash Unk01 { get; set; } - public MetaHash AudioTrack0 { get; set; } - public uint Unk02 { get; set; } - public float Unk03 { get; set; } - public float Unk04 { get; set; } - public float Unk05 { get; set; } - public MetaHash Unk06 { get; set; } - public float Unk07 { get; set; } - public float Unk08 { get; set; } - public float Unk09 { get; set; } - public float Unk10 { get; set; } - public float Unk11 { get; set; } - public float Unk12 { get; set; } - public MetaHash Unk13 { get; set; } - public MetaHash Unk14 { get; set; } - - public Dat151InteriorRoom(RelFile rel) : base(rel) - { - Type = Dat151RelType.InteriorRoom; - TypeID = (byte)Type; - } - public Dat151InteriorRoom(RelData d, BinaryReader br) : base(d, br) - { - Unk00 = br.ReadUInt32(); - Unk01 = br.ReadUInt32(); - AudioTrack0 = br.ReadUInt32(); - Unk02 = br.ReadUInt32(); - Unk03 = br.ReadSingle(); - Unk04 = br.ReadSingle(); - Unk05 = br.ReadSingle(); - Unk06 = br.ReadUInt32(); - Unk07 = br.ReadSingle(); - Unk08 = br.ReadSingle(); - Unk09 = br.ReadSingle(); - Unk10 = br.ReadSingle(); - Unk11 = br.ReadSingle(); - Unk12 = br.ReadSingle(); - Unk13 = br.ReadUInt32(); - Unk14 = br.ReadUInt32(); - - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - WriteTypeAndOffset(bw); - - bw.Write(Unk00); - bw.Write(Unk01); - bw.Write(AudioTrack0); - bw.Write(Unk02); - bw.Write(Unk03); - bw.Write(Unk04); - bw.Write(Unk05); - bw.Write(Unk06); - bw.Write(Unk07); - bw.Write(Unk08); - bw.Write(Unk09); - bw.Write(Unk10); - bw.Write(Unk11); - bw.Write(Unk12); - bw.Write(Unk13); - bw.Write(Unk14); - } - public override uint[] GetHashTableOffsets() - { - return new uint[] { 8 }; - } - } [TC(typeof(EXP))] public class Dat151Unk117 : Dat151RelData { public MetaHash AudioTrack0 { get; set; } @@ -4955,130 +5079,6 @@ namespace CodeWalker.GameFiles return offsets.ToArray(); } } - [TC(typeof(EXP))] public class Dat151RadioStationsDLC : Dat151RelData - { - public uint AudioTracksCount { get; set; } - public MetaHash[] AudioTracks { get; set; } - - public Dat151RadioStationsDLC(RelFile rel) : base(rel) - { - Type = Dat151RelType.RadioStationsDLC; - TypeID = (byte)Type; - } - public Dat151RadioStationsDLC(RelData d, BinaryReader br) : base(d, br) - { - AudioTracksCount = br.ReadUInt32(); - var tracks = new MetaHash[AudioTracksCount]; - for (int i = 0; i < AudioTracksCount; i++) - { - tracks[i] = br.ReadUInt32(); - } - AudioTracks = tracks; - - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - WriteTypeAndOffset(bw); - - bw.Write(AudioTracksCount); - for (int i = 0; i < AudioTracksCount; i++) - { - bw.Write(AudioTracks[i]); - } - } - public override uint[] GetHashTableOffsets() - { - var offsets = new List(); - for (uint i = 0; i < AudioTracksCount; i++) - { - offsets.Add(4 + i * 4); - } - return offsets.ToArray(); - } - } - [TC(typeof(EXP))] public class Dat151RadioDLC : Dat151RelData - { - public uint Unk00 { get; set; } - public uint Unk01 { get; set; } - public uint Unk02 { get; set; } - public uint Unk03 { get; set; } - public uint Unk04 { get; set; } - public uint Unk05 { get; set; } - public uint Unk06 { get; set; } - public uint Unk07 { get; set; } - public uint Unk08 { get; set; } - public uint Unk09 { get; set; } - public uint Unk10 { get; set; } - public uint Unk11 { get; set; } - public uint AudioTracksCount { get; set; } - public MetaHash[] AudioTracks { get; set; } - - public Dat151RadioDLC(RelFile rel) : base(rel) - { - Type = Dat151RelType.RadioDLC; - TypeID = (byte)Type; - } - public Dat151RadioDLC(RelData d, BinaryReader br) : base(d, br) - { - Unk00 = br.ReadUInt32(); - Unk01 = br.ReadUInt32(); - Unk02 = br.ReadUInt32(); - Unk03 = br.ReadUInt32(); - Unk04 = br.ReadUInt32(); - Unk05 = br.ReadUInt32(); - Unk06 = br.ReadUInt32(); - Unk07 = br.ReadUInt32(); - Unk08 = br.ReadUInt32(); - Unk09 = br.ReadUInt32(); - Unk10 = br.ReadUInt32(); - Unk11 = br.ReadUInt32(); - AudioTracksCount = br.ReadUInt32(); - var tracks = new MetaHash[AudioTracksCount]; - for (int i = 0; i < AudioTracksCount; i++) - { - tracks[i] = br.ReadUInt32(); - } - AudioTracks = tracks; - - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - WriteTypeAndOffset(bw); - - bw.Write(Unk00); - bw.Write(Unk01); - bw.Write(Unk02); - bw.Write(Unk03); - bw.Write(Unk04); - bw.Write(Unk05); - bw.Write(Unk06); - bw.Write(Unk07); - bw.Write(Unk08); - bw.Write(Unk09); - bw.Write(Unk10); - bw.Write(Unk11); - bw.Write(AudioTracksCount); - for (int i = 0; i < AudioTracksCount; i++) - { - bw.Write(AudioTracks[i]); - } - } - public override uint[] GetHashTableOffsets() - { - var offsets = new List(); - for (uint i = 0; i < AudioTracksCount; i++) - { - offsets.Add(52 + i * 4); - } - return offsets.ToArray(); - } - } [TC(typeof(EXP))] public class Dat151Unk49 : Dat151RelData //doors/gates? { public uint AudioItemCount { get; set; } diff --git a/CodeWalker.csproj b/CodeWalker.csproj index 459f698..3d32cc9 100644 --- a/CodeWalker.csproj +++ b/CodeWalker.csproj @@ -309,6 +309,18 @@ EditAudioFilePanel.cs + + Form + + + EditAudioInteriorPanel.cs + + + Form + + + EditAudioInteriorRoomPanel.cs + Form @@ -634,6 +646,12 @@ EditAudioFilePanel.cs + + EditAudioInteriorPanel.cs + + + EditAudioInteriorRoomPanel.cs + EditAudioZoneListPanel.cs diff --git a/Project/Panels/EditAudioInteriorPanel.Designer.cs b/Project/Panels/EditAudioInteriorPanel.Designer.cs new file mode 100644 index 0000000..24050de --- /dev/null +++ b/Project/Panels/EditAudioInteriorPanel.Designer.cs @@ -0,0 +1,187 @@ +namespace CodeWalker.Project.Panels +{ + partial class EditAudioInteriorPanel + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditAudioInteriorPanel)); + this.label12 = new System.Windows.Forms.Label(); + this.NameTextBox = new System.Windows.Forms.TextBox(); + this.label19 = new System.Windows.Forms.Label(); + this.HashesTextBox = new CodeWalker.WinForms.TextBoxFix(); + this.DeleteButton = new System.Windows.Forms.Button(); + this.label21 = new System.Windows.Forms.Label(); + this.Flags2TextBox = new System.Windows.Forms.TextBox(); + this.label14 = new System.Windows.Forms.Label(); + this.Flags1TextBox = new System.Windows.Forms.TextBox(); + this.label13 = new System.Windows.Forms.Label(); + this.Flags0TextBox = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(31, 15); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(64, 13); + this.label12.TabIndex = 7; + this.label12.Text = "Name hash:"; + // + // NameTextBox + // + this.NameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.NameTextBox.Location = new System.Drawing.Point(108, 12); + this.NameTextBox.Name = "NameTextBox"; + this.NameTextBox.Size = new System.Drawing.Size(428, 20); + this.NameTextBox.TabIndex = 8; + this.NameTextBox.TextChanged += new System.EventHandler(this.NameTextBox_TextChanged); + // + // label19 + // + this.label19.AutoSize = true; + this.label19.Location = new System.Drawing.Point(23, 111); + this.label19.Name = "label19"; + this.label19.Size = new System.Drawing.Size(75, 13); + this.label19.TabIndex = 15; + this.label19.Text = "Room hashes:"; + // + // HashesTextBox + // + this.HashesTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.HashesTextBox.Location = new System.Drawing.Point(108, 108); + this.HashesTextBox.Multiline = true; + this.HashesTextBox.Name = "HashesTextBox"; + this.HashesTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.HashesTextBox.Size = new System.Drawing.Size(428, 330); + this.HashesTextBox.TabIndex = 16; + this.HashesTextBox.WordWrap = false; + this.HashesTextBox.TextChanged += new System.EventHandler(this.HashesTextBox_TextChanged); + // + // DeleteButton + // + this.DeleteButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.DeleteButton.Location = new System.Drawing.Point(443, 55); + this.DeleteButton.Name = "DeleteButton"; + this.DeleteButton.Size = new System.Drawing.Size(93, 23); + this.DeleteButton.TabIndex = 17; + this.DeleteButton.Text = "Delete interior"; + this.DeleteButton.UseVisualStyleBackColor = true; + this.DeleteButton.Click += new System.EventHandler(this.DeleteButton_Click); + // + // label21 + // + this.label21.AutoSize = true; + this.label21.Location = new System.Drawing.Point(58, 87); + this.label21.Name = "label21"; + this.label21.Size = new System.Drawing.Size(44, 13); + this.label21.TabIndex = 13; + this.label21.Text = "Flags 2:"; + // + // Flags2TextBox + // + this.Flags2TextBox.Location = new System.Drawing.Point(108, 84); + this.Flags2TextBox.Name = "Flags2TextBox"; + this.Flags2TextBox.Size = new System.Drawing.Size(155, 20); + this.Flags2TextBox.TabIndex = 14; + this.Flags2TextBox.TextChanged += new System.EventHandler(this.Flags2TextBox_TextChanged); + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(58, 63); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(44, 13); + this.label14.TabIndex = 11; + this.label14.Text = "Flags 1:"; + // + // Flags1TextBox + // + this.Flags1TextBox.Location = new System.Drawing.Point(108, 60); + this.Flags1TextBox.Name = "Flags1TextBox"; + this.Flags1TextBox.Size = new System.Drawing.Size(155, 20); + this.Flags1TextBox.TabIndex = 12; + this.Flags1TextBox.TextChanged += new System.EventHandler(this.Flags1TextBox_TextChanged); + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(58, 39); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(44, 13); + this.label13.TabIndex = 9; + this.label13.Text = "Flags 0:"; + // + // Flags0TextBox + // + this.Flags0TextBox.Location = new System.Drawing.Point(108, 36); + this.Flags0TextBox.Name = "Flags0TextBox"; + this.Flags0TextBox.Size = new System.Drawing.Size(155, 20); + this.Flags0TextBox.TabIndex = 10; + this.Flags0TextBox.TextChanged += new System.EventHandler(this.Flags0TextBox_TextChanged); + // + // EditAudioInteriorPanel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(562, 450); + this.Controls.Add(this.DeleteButton); + this.Controls.Add(this.label21); + this.Controls.Add(this.Flags2TextBox); + this.Controls.Add(this.label14); + this.Controls.Add(this.Flags1TextBox); + this.Controls.Add(this.label13); + this.Controls.Add(this.Flags0TextBox); + this.Controls.Add(this.label12); + this.Controls.Add(this.NameTextBox); + this.Controls.Add(this.label19); + this.Controls.Add(this.HashesTextBox); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "EditAudioInteriorPanel"; + this.Text = "EditAudioInteriorPanel"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label12; + private System.Windows.Forms.TextBox NameTextBox; + private System.Windows.Forms.Label label19; + private WinForms.TextBoxFix HashesTextBox; + private System.Windows.Forms.Button DeleteButton; + private System.Windows.Forms.Label label21; + private System.Windows.Forms.TextBox Flags2TextBox; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.TextBox Flags1TextBox; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.TextBox Flags0TextBox; + } +} \ No newline at end of file diff --git a/Project/Panels/EditAudioInteriorPanel.cs b/Project/Panels/EditAudioInteriorPanel.cs new file mode 100644 index 0000000..7c4f855 --- /dev/null +++ b/Project/Panels/EditAudioInteriorPanel.cs @@ -0,0 +1,207 @@ +using CodeWalker.GameFiles; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CodeWalker.Project.Panels +{ + public partial class EditAudioInteriorPanel : ProjectPanel + { + public ProjectForm ProjectForm; + public Dat151Interior CurrentInterior { get; set; } + + private bool populatingui = false; + + + public EditAudioInteriorPanel(ProjectForm owner) + { + ProjectForm = owner; + InitializeComponent(); + } + + + public void SetInterior(Dat151Interior interior) + { + CurrentInterior = interior; + Tag = interior; + UpdateFormTitle(); + UpdateUI(); + } + + private void UpdateFormTitle() + { + Text = CurrentInterior?.NameHash.ToString() ?? ""; + } + + private void UpdateUI() + { + if (CurrentInterior == null) + { + //AddToProjectButton.Enabled = false; + DeleteButton.Enabled = false; + + populatingui = true; + NameTextBox.Text = string.Empty; + Flags0TextBox.Text = string.Empty; + Flags1TextBox.Text = string.Empty; + Flags2TextBox.Text = string.Empty; + HashesTextBox.Text = string.Empty; + populatingui = false; + } + else + { + //AddToProjectButton.Enabled = CurrentZoneList?.Rel != null ? !ProjectForm.AudioFileExistsInProject(CurrentZoneList.Rel) : false; + //DeleteButton.Enabled = !AddToProjectButton.Enabled; + + populatingui = true; + var ci = CurrentInterior; + + NameTextBox.Text = ci.NameHash.ToString(); + + Flags0TextBox.Text = ci.Unk0.Hex; + Flags1TextBox.Text = ci.Unk1.Hex; + Flags2TextBox.Text = ci.Unk2.Hex; + + StringBuilder sb = new StringBuilder(); + if (ci.Rooms != null) + { + foreach (var hash in ci.Rooms) + { + sb.AppendLine(hash.ToString()); + } + } + HashesTextBox.Text = sb.ToString(); + + + populatingui = false; + + + } + + } + + private void ProjectItemChanged() + { + if (CurrentInterior?.Rel != null) + { + ProjectForm.SetAudioFileHasChanged(true); + } + } + + + private void NameTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentInterior == null) return; + + uint hash = 0; + string name = NameTextBox.Text; + if (!uint.TryParse(name, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(name); + JenkIndex.Ensure(name); + } + //NameHashLabel.Text = "Hash: " + hash.ToString(); + + if (CurrentInterior.NameHash != hash) + { + CurrentInterior.Name = NameTextBox.Text; + CurrentInterior.NameHash = hash; + + ProjectItemChanged(); + UpdateFormTitle(); + } + } + + private void Flags0TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentInterior == null) return; + + uint flags = 0; + if (uint.TryParse(Flags0TextBox.Text, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out flags)) + { + if (CurrentInterior.Unk0.Value != flags) + { + CurrentInterior.Unk0 = flags; + + ProjectItemChanged(); + } + } + } + + private void Flags1TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentInterior == null) return; + + uint flags = 0; + if (uint.TryParse(Flags1TextBox.Text, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out flags)) + { + if (CurrentInterior.Unk1.Value != flags) + { + CurrentInterior.Unk1 = flags; + + ProjectItemChanged(); + } + } + } + + private void Flags2TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentInterior == null) return; + + uint flags = 0; + if (uint.TryParse(Flags2TextBox.Text, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out flags)) + { + if (CurrentInterior.Unk2.Value != flags) + { + CurrentInterior.Unk2 = flags; + + ProjectItemChanged(); + } + } + } + + private void HashesTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentInterior == null) return; + + var hashstrs = HashesTextBox.Text.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); + if (hashstrs?.Length > 0) + { + var hashlist = new List(); + foreach (var hashstr in hashstrs) + { + uint hash = 0; + if (!uint.TryParse(hashstr, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(hashstr); + JenkIndex.Ensure(hashstr); + } + hashlist.Add(hash); + } + + CurrentInterior.Rooms = hashlist.ToArray(); + CurrentInterior.RoomsCount = (byte)hashlist.Count; + + ProjectItemChanged(); + } + } + + private void DeleteButton_Click(object sender, EventArgs e) + { + ProjectForm.SetProjectItem(CurrentInterior); + ProjectForm.DeleteAudioInterior(); + } + } +} diff --git a/Project/Panels/EditAudioInteriorPanel.resx b/Project/Panels/EditAudioInteriorPanel.resx new file mode 100644 index 0000000..1431f6b --- /dev/null +++ b/Project/Panels/EditAudioInteriorPanel.resx @@ -0,0 +1,409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAMAICAAAAAAGACoDAAANgAAABAQAAAAABgAaAMAAN4MAABAQAAAAAAYACgyAABGEAAAKAAAACAA + AABAAAAAAQAYAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/u3v+Pn6//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7+/vX3/rzA3OHl9fz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7//+zv+3Z6qcLI5Pr7/wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP7+/+br+15in6+33vf5/wAAAAAAAAAAAAAAAP7+//7+/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//v8//v8//3+/wAAAAAAAAAAAAAAAAAAAP7+/+Ho+1dana20 + 4/b4/wAAAAAAAPz9//P2/+Tp/ezw/vz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///X4 + /9Pa+tPa+/H1//z9/wAAAAAAAAAAAAAAAP7+/93k+SsscaSr3PX3/wAAAP7+//L1/7W98AcWgrvC8Pj6 + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/+bs/xohiAEJdrvF9+7y//z9/wAAAAAAAAAA + AP7+/9rh+CEkapmh0/T3/wAAAPj6/9HZ/AEHcgEEb9LZ+/r7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP7//+/z/3F+zAAAXwQLcZai3fb4/wAAAAAAAAAAAP3+/97l/E9Tmaau4fT3/wAAAO/0/1dd + sAAAV7a/8/H1//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPr8/+jv/46Y3QUUf6Ot + 5PX4/wAAAAAAAAAAAP3+/9zj+3Z6wLe/7fX4/wAAAPD0/212xnaAzerw//z9/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/+/z/+Dm+/D0//z9/wAAAAAAAP7+//j6/9Pd+UhLjb/H + 9/D0//3+//n7/+nt/+jt//n7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7///7+//7+//7+/wAAAAAAAPr8/+7z/83W+ImU2A0UdFNarr/K9env//X4//z9//3+//7//wAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///j6/+Pq/255 + xhckjE5XsVVftUlTqwAKeTA9nr3H8+7z//v8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+//b4/9Tc+Sc0mRonj8rV/crX/ZSb48rX/brG8wwWgQAEdJei + 4efu//n7//7+//z9//z9//z9//z9//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//f5/+3y/+nv/+ft + /8vV+io2mImU2M7c/7vG9yIvlQAOfCg4mM3Y/s/c/4aR1AQRfGtzwtni/ebt/9vi/tri/tXd+9Tc+O3x + /vz9/wAAAAAAAAAAAAAAAAAAAAAAAPn6/87V+FVftkRPrFlnvSEqjQoUfmJvwWFvvg0TfQQIcxEchwAD + cy89n19rvVVitQwZgwAAaiMrkT9NqTVBoiw3mhQihig1mNLX+fv8/wAAAAAAAAAAAAAAAAAAAAAAAPb5 + /52l4EFLqoCK03yF0VBctGhyw52o5GVrvQAAaneBzsHM+jA3mhYgiTtIpJOf3ouW2AAAbmh0wbbA8bS+ + 7qiz5pCb16+56e/z//3+/wAAAAAAAAAAAAAAAAAAAAAAAPv8//H1/+vw/+zx/+nv/7/J9YqP3MbP/8LM + +hwqkFZftaCp5EhRrcTQ+9jj/8rW/UJMqn6J0ebt//X3//f5//b4//X3//f5//z9/wAAAAAAAAAAAAAA + AAAAAAAAAP7+//z9//3+/wAAAAAAAP3+/+7z/6at64iP3aWs7XN8zRIfhyUykp2o5MHM+oKM0xonjY6X + 2+jv//v8/wAAAP7+//n7//b5//r7//7//wAAAAAAAAAAAAAAAP7+//f5/+rw/9Pa9fL0/v7//wAAAAAA + APv8//H1/+Tr/7i/91liu0NPq0VQrS06m0NNqDdCoYqU1+nv//v8/wAAAAAAAPn7/9zi/qSt59ri/fL1 + //v8//7//wAAAPz9//D0/8rT+h0sjkVQrPD0/wAAAAAAAAAAAAAAAAAAAPz9/+7z/8LL9Jqk4aGq6LW/ + 8c3W9+Xs/vH1//v8/wAAAAAAAAAAAPf5/6at5gAAbxIfh6u16+Po/fr7/wAAAPb5/6ev5gAIeAAPernC + 8fX4/wAAAAAAAP3+//v8//z9/wAAAP3+//j6//P3//P2//b4//r8//7+//7+//v8//r8//3+/wAAAPv8 + /+Xr/nuIzwAAbBseg5Sb2fb5/wAAAPf5/8DF8pWe3d/n/vT3//39/wAAAPv8/+zx/87V9+3x/v3+/wAA + AP3+//j6//X4//v8/wAAAAAAAPn7/+Dm/snR9fD0//39//z8/fv8/+3y/8LK9aGq4dfd9/n7/wAAAPz9 + //b5//X4//v8/wAAAAAAAP7+/+7z/4aP1gEPet7k/f39/wAAAPf5/83U+ZCZ2u3x/v7+/wAAAPP3/215 + wgAJd7fB8/L1//7+/wAAAP3+//j6//f5//r8//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAPj6/87W/AAA + X2duue3y//7+/wAAAPD0/05asBQfidzj/P39/wAAAPX4/6Su6AAAXBccgtff/vv8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP3/3F8xhYli9Xe/fn6/wAAAAAAAO3y/1pltQAJd9be + /fv8/wAAAPz9/+rw/36I0Bknjs/W+vv8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAPf5/8HI7tnf+/X4//7+/wAAAAAAAO/0/3R7xgAAb9ng/Pz9/wAAAAAAAPn7/+Ln/dLY+fP2//3+ + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//r7//v8//7+/wAAAAAAAAAA + APb4/7/F84eP0e/0//7+/wAAAAAAAP7+//z9//v8//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz9//b5//X4//v8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////w////4 + P///+D////g8//D4MH/geCB/4Dggf+A4IH/wOCD/+DAB//hgAf//gAP//wAAB/AAAAPwAAAD8AAAA/AA + AAfjAAEHgYADAQPgBwEDEAEBAghgAQwIIEH8CCB//Bggf/wYMH/8ODD///h/////////////KAAAABAA + AAAgAAAAAQAYAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+vv/fL1/v///wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///4+Vx7/F5v///wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAP///4CHtrS62////////////////////wAAAAAAAAAAAP////H0/vf6/v// + /////////4yTwrrB4f///+zw+7rA6P39/////wAAAAAAAAAAAP///56l2BkcguXr/P///////42Uw8jO + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2OL+NjZ7AAArX2Ok + 4uz/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 2eP/LjJ1DAxKfYTE4Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//f7//f7//v7//v// + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/gILIR0eVeoHC3eb/8fX/+/z/AAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+Pr/ + +Pr/+Pr/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+vv/+vv/+/z//f3//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/2eP9ZWeqHx1obnOz4Or/8fX/+/z/AAAAAAAAAAAAAAAA/v7/ + +/z/9fj/8vb/8PX/7vT/8fb/9fj/+fr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/9fj/9fj/9Pj/9Pf/9vn/+/z//v7/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP9ODp9AAA5jZDQ5O7/8PX/+/z/AAAA + AAAAAAAA/v7/+/z/9Pf/7fP/5u//wsz6j5XfuMDx7fL/9vn//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+Pr/8/b/5+3/2eH/2uP/ + 5u3/7fP/8/b/+vv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3ef/U1ebBgVKio/O + 4uz/8fX/+/z/AAAAAAAA/v///P3/9fj/7fP/4uv/hIzZHSWPAABmU1i14ub/9/r/+/z/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9Pf/ + 7/X/09z/TlSzNzWYj5bh5O7/6/L/8vb/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fX/ + 2eP/QUWIEhBZbnSz3uj/8fb/+/z/AAAAAAAA/f7/+Pr/7/T/6PH/iI7cAABvAABqAABncXjK6O//9fj/ + +/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+/z/8/f/2uD/Z27EAABnAABiBgl4jJTd5vD/6O//8vX/+fv//f7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8fb/2OP/Mjd6AQE6ZGup4er/8fX/+/z/AAAAAAAA+vz/8fX/6/T/xM/8ExyJAABwAABu + GySRxc387fT/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vz/8/f/1Nr/MzqhAABhAxOBAARyBgp5jpLg5Oz/7PP/9Pf/+vz//v7/ + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP/KCtvBwZOjJHS4Or/8fX/+/z/AAAA/f7/9/n/7fP/3+j/ + UFq3AABtAAZ3BAh6mZ/n5vD/7vP/+Pr//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/6e//sbb1KzWcAABwBhaBAAFyAgp6fITR + 1d777/T/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3+j/WF2hBglTnaTj5O3/8PX/+/z/AAAA + /P3/9Pf/6vL/k5riAAByAAR0AABrY2vE4ur/6vH/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/7fL/5O3/ytX/RU6w + AABpAA5+AABuAABnhord6e7/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/7/T/3+j/k5jbT1KdgYjJ + 3uf+8fX/+/z/AAAA+/z/9fn/4ef/NDqhAABnAABrJjCU0Nn/5/D/8fX/+vv//v7/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + 9vn/7vP/6vP/ztb/O0CmAABpAABrQkuoxMn57PH/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/ + 2+X/en/CUFGak5nY3+j/8fX//P3/AAAA/P3/9fj/4en/i5DbNT2hIyuTpqzv4uz/7vP/9/n//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/9vn/7/P/6vL/ytH/X2i9XWi7wsf/6e//8/f/+Pr//v7/AAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/WF2hW1ylvMD+3uf/8PX/+/z/AAAA/f7/9vn/7fP/4uj/j5Pgf4LV3+X/6fD/ + 9Pf//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/8vX/7fP/5+//5u7/6vD/8PT/9vn//P3//v7/ + AAAAAAAAAAAAAAAAAAAA/f7/9/n/7fP/0tz9LDJzNjh/nqTk2uT/7fL/9/n//f7//f7/+fv/8/b/7PL/ + 3eX/zM//5ev/9fj/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f3/+vv/9/n/9vn/9fj/9vn/ + +fr//P3//v7/AAAAAAAAAAAA/v///f7/+vv/9vn/7/T/5vD/2Ob/VFubERNdoajk4u//5O7/7vP/9vj/ + +fr/+vv/+Pr/9fj/9Pj/9fj/9fj/+Pr//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///v7/ + /f7//P3//P3//f3//v7//v//AAAAAAAAAAAA/f7/+vz/9vn/8fX/7vT/5O3/3eb/z9n/cHjICxN5d37L + z9n/2eP/5O3/6/L/8PT/9Pf/9/n/+vv/+vv/+/z//P3//f3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+Pr/8/b/7vT/6vL/z9r+jZjeQUeq + IiuQCBN3AAFrBRB8Nj2iUViym6XlydH/4+z/6/L/8PT/9/n/+/z//f7//v//AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/8fX/6/L/3uf/ + mKTkLzibAABoAAB0Fx+HDBh7FSGDAg16AABYAABlCBB/Ji2UhYza1+D/6PL/7fL/9Pf/+vv//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/9/n/ + 8PT/7PT/z9j/XmO+AABtAABcMDSXoajsu8X7VV+5hYzblZ/fTVSxFSKMAABkAABnAAN2Qkmpsbrz5e3/ + 6vH/8fX/+Pr//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/P3/9/n/8PX/7PT/vcn3LTOZAABaAgR1ZWzD0Nf/5vL/1OP/l53lzs3/6fP/4+7/sLzwZ23CBxSD + AABnAABlHiaSmqHo3+j/5+//7/T/9vn//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/ + /v7//v7//v7//f7/+/z/9vj/7vP/7PX/tcLzEBeGAABkPEWlqLPt2eX/4e7/3On/uMX1gofVe3vPhYzY + z93+5/X/4e3/lJ3gHiOPAABtAABqChiEbHLIytD/5/D/7PL/8/f/+Pr/+fr/+Pr/+Pr/+Pr/+Pr/+Pr/ + +Pr/+fv/+vv/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+fv/9/n/9vj/9fj/9Pf/8fX/7PL/4uv/l6HgDhF7AAN4iZDe0d7/3uz/4vD/w83/VVm3 + ICiSAAFyAABlAABwaHTD1N//2un/3er/w838ZW3BEyOJJzKVAQ16NDmfwsn75fD/5u7/7PL/7vP/7fP/ + 7fP/7fL/7fP/7vP/7/T/8fb/9Pj/9vn/+fr//f3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/+Pr/9Pf/8fX/7vT/7PL/6/L/6fH/5u7/6vX/tsD0CQx4AAFwkZvi7ff/4vD/ + 4fD/z9j/OkGlAABiAABwBxWAAAt7BBN+P0uofYLUztb/4O7/6fb/6fP/qa7xQkyoBg56AABqMjugx8/+ + 5fH/4Ov/4On/3uj/3eb/3+j/3uj/1+L/0d3/1d7/3+f/7fL/9vj/+vz//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+fr/8/f/6/L/2d//v8j6vcf5ucP1wMv8wM3+vMj6PkqoAABo + UF25usP7tsPyvsr6sLrwQ0utAABqAAV1OUameIDRKDWZAAd2GyeOLDecmaHntsL0pbLom6riq7LzUlu0 + AANzBhR/AAZ0NT+ja3bBY2i/XGG6UViyWl65XGG7XGC6TVWvQU6pPkalODygqK7p8vb/+vz//v7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/7/T/wcj2R0ysExeFERmGDxuIFB6K + FBqICxSEAABsAAByDBiDCRSBBRCADhaFCRODAAh4AxF/AAl4CxeDHSaPAAp6AAN0AA19AAd3CBOBEBqH + BhGBAAh5AABwAAByAAh5BhSCAxWCAABsAABvAABlAABnAABxAABjAABmAABhAABdAABYAABhCAt/q7Lr + 8/f/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+fv/3uT/SE2vAABn + CBB/GiCMLzmfLTWcGByJFRyKGCOOMj2gHymRDxiGGyOPLDCXBRF/AAh3BhaCEyKMICqTKC2WNDqfIzCV + Awx6Eh+JHiaPAAR3AAZ5CxSDICWQX2q7Q1CqAA1+AAFxDxuHiZTbVGC4dHnQnabrTVqzY23EUV62Slau + LjaZXWm9sLjz5ez/9vn/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +Pv/4+n+e4LPfoPVpqv2vsf/zNX/zdb/xtH/v8v8pK7spKfysLb3vcr4ws784ej/hI/YAAZ1AAJzVF25 + yM//3Of/5+//i5LcAABpMzyfp6vxoKznlqHhqbbtx9H/8fz/kpvfAABiAABph4zc5PD/2OP/193/3un/ + 1+D/2OH/1+D/0Nr/zNL/3+j/6/L/7/T/9vn//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+Pr/9Pf/6vD/5u3/3+b/4uv/6PD/5+//5O3/5/P/sL3sXmS7mZzoz9f/3+z/4e// + mKLiEiKKCBF/KTWZr7T06/f/3ev/VF2zChSBipPcz9v+4u7/3ur/3ev/5/X/qrPrISmSDRJ2Xmq/3ur/ + 4uv/6vH/7fP/7fL/7/T/7vP/7fP/7fP/8PX/8fX/9Pf/+Pr/+/z//v7/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+Pr/9vn/9Pf/8vb/8vb/8/b/9Pf/7/T/6/L/tL/ubXLH + en/Ti43gqavy0t3/nafjMj6fJzaaAAV1GyeOYmW7Nz6fAABgNj6i1N//3uz/2uX/3Oj/5PH/wcj7FR2J + AAN0gong0tr/6fH/7/P/9vj/+Pr/+fv/+fv/+Pr/+Pr/+Pr/+fv/+vv//P3//f7//v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+/z/+/z/+/z//f3//f7/ + +fv/8fX/5Oz/jpbfc3jObnXLcXfOk5rks7b4iY3dR1KvDhuEAABoAABlEBV9U12ytcD13Or/3en/3ej/ + 1eL/q7fvGR+MKDKZbnnNxc/76PD/8fX/+fr//f7//v//AAAA/v7//f7//f3//P3//f3//f7//v//AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//f7//v7/AAAA + AAAAAAAAAAAAAAAA/f7/9vn/7/T/yNH5lJrleoDVmZ3pmpzpc3nPfoTWf4bYVFy3HSaLZ3PGsrb8v8r8 + y9n9q7jre4LRf4fUgIvXAwZ1AABrhYjb0NX/6PH/8PX/+Pr//f7/AAAAAAAA/v///f3/+vv/+Pr/9/r/ + 9/n/+Pr/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f7/+/z/+fr/9vj/9/n/ + +vz/+vv/+/z//v7/AAAAAAAAAAAAAAAA/v7/+vz/8/f/7PL/2uT/t8H1srP6vcH+nKTnSlOxV2C7TVaz + WGS8QUqmSlSuSFOtR1GtbXTKVl23ARB5AAh2AABnd33P3eP/4ur/7/T/9/n//P3/AAAAAAAAAAAA/P3/ + 9/n/8vb/7PH/6fD/7PL/7vP/8vb/9vn/+/z//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/+Pr/ + 8/b/7/T/8Pb/6vH/3eP97vL++fr//P3/AAAAAAAAAAAAAAAAAAAA/f7/+vv/9fj/7/T/5+//z9f+t7v4 + uLn9Z2zFLzucFCGIMz6gGCCMAAd4AAl2Dx2EER+GXWK8c3XLKzKXd4LP4er/6/L/8PX/9/n//P3//v// + AAAAAAAA/v7/+fv/8/b/7PP/y9H/i4/erLbt4er/5e3/7fP/8/b/+fv//f3//v7/AAAAAAAAAAAAAAAA + /v7/+/z/9vj/8PT/6/L/3+n/x9H9aHTAZGvG3+b9+Pr/+/z/AAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + +Pr/8vb/6/H/3OX+wMn4maDmdHrPWGG6T1a1eoHWcHfOTlayUlq1SlKubHjAxMj/0dn/4+v/7PL/8vb/ + +Pr//P3//v7/AAAAAAAAAAAA/f7/+fr/7vP/xsv5YGXAHymRKjKYYWS9rbLz4u3/6/P/8vb/+fr//f7/ + AAAAAAAAAAAA/v//+/z/9vj/7fL/5e3/xs7/Y23BIiiSAABeLTab3+b/9/r/+/z/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAA/f7/+vz/9vj/8PX/6vH/3eb/ydL8xM/6uMPyt733w8j/zNb/1Nz/3OT/4uz/5u7/ + 7fP/8vb/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAA/f7/+fv/7vP/jpHiAAJ1CxaBER6GAABoFRmGbXbH + 0Nf/7PL/9fj//P3/AAAAAAAAAAAA/v7/+fv/8/f/4Of/hYvbKDGZAABuAABdAAZyi5La5+7/9vn/+/z/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/9ff/8vb/7/X/7fP/6/L/5u3/5ez/6fD/ + 7PP/7/T/8fX/9Pf/9/n/+vv//P3//v7//v//AAAAAAAAAAAAAAAAAAAA/v7/+fv/8fb/2eH9fIbQExqH + AABrAAp6AAFyAABwS0+uztX39vn/+vz/AAAAAAAAAAAA/f7/+Pr/8ff/qbLpAABrAABhAABwDBWAfobX + 5e3/8PX/9vn//f3/AAAAAAAA/v///f7/+/z/+vv/+vv/+vz//P3//v7//v///v7//P3/+vz/+Pr/9/n/ + 9vj/9vj/9vj/9vj/9/n/+fr/+/z//P3//f7//v7//f7//P3/+/z/+vz/+/z//P3//v7/AAAA/v7/+/z/ + 9fj/7/T/5/H/uML1U1e1AAh5AABuAABvMjmdv8bz9vr/+vv/AAAAAAAAAAAA/f7/+fv/7/T/iY7aDxSA + GiONa3XHsr7w4Oj/6/H/9Pf/+vz//v7/AAAA/v///P3/+Pr/9Pf/8/f/9fj/9fj/9vn/+/z//v7/AAAA + AAAAAAAA/v7//f7//P3/+/z/+/z//P3//f7//v//AAAAAAAAAAAA/v7/+/z/9/n/9vn/9vn/9Pj/9vn/ + +/z//v7/AAAA/f7/+vz/9fj/7/T/6vL/3ef/i5PbGRqJBQl5jJbZ6vH/9Pj/+/z/AAAAAAAAAAAA/f7/ + +fv/8fT/1Nn9t7/0wcr54er/7fT/8fX/9fj/+vv//f7/AAAAAAAA/f3/+Pr/8PT/6/L/3uX/ztb/5Or/ + 8/f/+Pr//f7/AAAAAAAAAAAA/f7/+vz/+Pr/+fv/+fv/+vv//f3//v//AAAAAAAAAAAA/P3/9/n/7vL/ + 193/ztf/5u3/7vP/9Pf/+/z//v7/AAAA/v7//P3/+Pr/8fX/7PP/5/D/sLfxoKnk4+r/8vf/9/n//f3/ + AAAAAAAAAAAA/v7/+/z/9vn/9Pf/8vb/8fb/8fX/9Pf/+Pr//P3//v7/AAAAAAAA/v7/+vv/8vb/5+7/ + y9H/WWO9KSmSkZXj6vD/+Pv//P3/AAAAAAAA/f7/+Pr/9fj/8vb/6O7/7vP/9fj/+Pr//f7/AAAAAAAA + /v//+vv/8vb/7PP/hYraKiqKlp7i6PD/7fP/9ff/+/z//v7/AAAAAAAA/f7/+vv/9ff/8fX/8PX/8vb/ + 8/f/9vn/+/z//v7/AAAAAAAAAAAAAAAA/f7/+/z/+vv/+fr/+fr/+vv//P3//v7/AAAAAAAAAAAAAAAA + /P3/9fj/7PL/1d7/RUysAABhAABlg4ja6/D/+Pr//P3/AAAAAAAA+/z/9fj/6e7/2eD/h4/bnaXg7PH/ + 9fj/+/z/AAAAAAAA/v7/+Pr/8PX/y9X1JDGVAABaERWDoKnp6PH/7vP/9/n//P3/AAAAAAAAAAAA/v7/ + /P3/+vv/+fv/+fv/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//v7//v7//v//AAAAAAAA + AAAAAAAAAAAA/v7/+fv/8PX/7PX/ipPdAABsAABlQ1Cp3Ob/7vP/9/n//f7/AAAAAAAA+fv/9Pj/yNH5 + Ule2DBJ8Ljie0df+8fb/+fv//v7/AAAA/v7/+Pr/7/X/hY3YAABxAAl7AABuEBaEs7nz6fH/8fX/+vv/ + /v7/AAAAAAAAAAAAAAAA/v///v7//v7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9vn/7PL/0tn/LzidAQFsAAB0iZHb6vP/8PT/+fv//v//AAAA + /v7/+Pr/8vf/r7rqAAV4AABdPUen1N//7PL/9vn//f7/AAAA/v7/+fr/7/T/yc75S1G0AABrARKAAABp + Qker0df/7fP/9/n//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/5+7/cXXNAAd2AABuMDebzdT97PL/ + 9vj//P3/AAAAAAAA/v7/9/n/7/X/tL/uFCCLAABqHSqRvcf46fD/9Pf//f3/AAAAAAAA+vv/8vX/6vH/ + yM3+JC2XAABtAAV2Agx9q7Ly7vT/9vn//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/4uj/WWO1AAVx + KTaYu8T07fT/8vb/+vv//v7/AAAAAAAA/v7/9/n/7vX/vsn1Iy2SAABrAQ99mp/o6PD/9Pf//P3/AAAA + AAAA/P3/9/n/7vP/6fL/s7z2DBB/AABeQ0uttrr56e7/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +fv/4ef6g4zNbXfFw8v27fT/8vb/+Pr//f3/AAAAAAAAAAAA/v7/9/n/7vT/yNL7MjucAABtBxF/nKLo + 6fH/9Pf//P3/AAAAAAAA/v7/+/z/9fj/7fL/6/T/jZXbLzScrrP14en/7fL/+fv//v7/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+vz/8PP91dr34+f/8vb/8/f/9/r//P3//v//AAAAAAAAAAAA/v7/+Pr/8PX/1N3/ + QUqmAQRxBQ98m6Dm7PL/9fj//P3/AAAAAAAAAAAA/v7/+/z/9ff/8PX/5ez/ytH94ej/8vb/9vj/+/z/ + /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA + /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ + 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA + AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file diff --git a/Project/Panels/EditAudioInteriorRoomPanel.Designer.cs b/Project/Panels/EditAudioInteriorRoomPanel.Designer.cs new file mode 100644 index 0000000..1a1e10a --- /dev/null +++ b/Project/Panels/EditAudioInteriorRoomPanel.Designer.cs @@ -0,0 +1,489 @@ +namespace CodeWalker.Project.Panels +{ + partial class EditAudioInteriorRoomPanel + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditAudioInteriorRoomPanel)); + this.label12 = new System.Windows.Forms.Label(); + this.NameTextBox = new System.Windows.Forms.TextBox(); + this.DeleteButton = new System.Windows.Forms.Button(); + this.label13 = new System.Windows.Forms.Label(); + this.Flags0TextBox = new System.Windows.Forms.TextBox(); + this.label16 = new System.Windows.Forms.Label(); + this.Unk00TextBox = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.Hash1TextBox = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.Unk02TextBox = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.Unk03TextBox = new System.Windows.Forms.TextBox(); + this.label4 = new System.Windows.Forms.Label(); + this.Unk04TextBox = new System.Windows.Forms.TextBox(); + this.label5 = new System.Windows.Forms.Label(); + this.Unk05TextBox = new System.Windows.Forms.TextBox(); + this.label6 = new System.Windows.Forms.Label(); + this.Unk06TextBox = new System.Windows.Forms.TextBox(); + this.label7 = new System.Windows.Forms.Label(); + this.Unk07TextBox = new System.Windows.Forms.TextBox(); + this.label8 = new System.Windows.Forms.Label(); + this.Unk08TextBox = new System.Windows.Forms.TextBox(); + this.label9 = new System.Windows.Forms.Label(); + this.Unk09TextBox = new System.Windows.Forms.TextBox(); + this.label10 = new System.Windows.Forms.Label(); + this.Unk10TextBox = new System.Windows.Forms.TextBox(); + this.label11 = new System.Windows.Forms.Label(); + this.Unk11TextBox = new System.Windows.Forms.TextBox(); + this.label14 = new System.Windows.Forms.Label(); + this.Unk12TextBox = new System.Windows.Forms.TextBox(); + this.label15 = new System.Windows.Forms.Label(); + this.Unk13TextBox = new System.Windows.Forms.TextBox(); + this.label17 = new System.Windows.Forms.Label(); + this.Unk14TextBox = new System.Windows.Forms.TextBox(); + this.SuspendLayout(); + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(9, 15); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(64, 13); + this.label12.TabIndex = 9; + this.label12.Text = "Name hash:"; + // + // NameTextBox + // + this.NameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.NameTextBox.Location = new System.Drawing.Point(86, 12); + this.NameTextBox.Name = "NameTextBox"; + this.NameTextBox.Size = new System.Drawing.Size(237, 20); + this.NameTextBox.TabIndex = 10; + this.NameTextBox.TextChanged += new System.EventHandler(this.NameTextBox_TextChanged); + // + // DeleteButton + // + this.DeleteButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.DeleteButton.Location = new System.Drawing.Point(457, 10); + this.DeleteButton.Name = "DeleteButton"; + this.DeleteButton.Size = new System.Drawing.Size(93, 23); + this.DeleteButton.TabIndex = 18; + this.DeleteButton.Text = "Delete room"; + this.DeleteButton.UseVisualStyleBackColor = true; + this.DeleteButton.Click += new System.EventHandler(this.DeleteButton_Click); + // + // label13 + // + this.label13.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(345, 63); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(44, 13); + this.label13.TabIndex = 62; + this.label13.Text = "Flags 0:"; + // + // Flags0TextBox + // + this.Flags0TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.Flags0TextBox.Location = new System.Drawing.Point(395, 60); + this.Flags0TextBox.Name = "Flags0TextBox"; + this.Flags0TextBox.Size = new System.Drawing.Size(155, 20); + this.Flags0TextBox.TabIndex = 63; + this.Flags0TextBox.TextChanged += new System.EventHandler(this.Flags0TextBox_TextChanged); + // + // label16 + // + this.label16.AutoSize = true; + this.label16.Location = new System.Drawing.Point(9, 39); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(68, 13); + this.label16.TabIndex = 64; + this.label16.Text = "Unk00 hash:"; + // + // Unk00TextBox + // + this.Unk00TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.Unk00TextBox.Location = new System.Drawing.Point(86, 36); + this.Unk00TextBox.Name = "Unk00TextBox"; + this.Unk00TextBox.Size = new System.Drawing.Size(237, 20); + this.Unk00TextBox.TabIndex = 65; + this.Unk00TextBox.TextChanged += new System.EventHandler(this.Unk00TextBox_TextChanged); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(9, 63); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(64, 13); + this.label1.TabIndex = 66; + this.label1.Text = "Ref Hash 1:"; + // + // Hash1TextBox + // + this.Hash1TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.Hash1TextBox.Location = new System.Drawing.Point(86, 60); + this.Hash1TextBox.Name = "Hash1TextBox"; + this.Hash1TextBox.Size = new System.Drawing.Size(237, 20); + this.Hash1TextBox.TabIndex = 67; + this.Hash1TextBox.TextChanged += new System.EventHandler(this.Hash1TextBox_TextChanged); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(9, 87); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(42, 13); + this.label2.TabIndex = 68; + this.label2.Text = "Unk02:"; + // + // Unk02TextBox + // + this.Unk02TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.Unk02TextBox.Location = new System.Drawing.Point(86, 84); + this.Unk02TextBox.Name = "Unk02TextBox"; + this.Unk02TextBox.Size = new System.Drawing.Size(237, 20); + this.Unk02TextBox.TabIndex = 69; + this.Unk02TextBox.TextChanged += new System.EventHandler(this.Unk02TextBox_TextChanged); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(9, 111); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(42, 13); + this.label3.TabIndex = 70; + this.label3.Text = "Unk03:"; + // + // Unk03TextBox + // + this.Unk03TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.Unk03TextBox.Location = new System.Drawing.Point(86, 108); + this.Unk03TextBox.Name = "Unk03TextBox"; + this.Unk03TextBox.Size = new System.Drawing.Size(237, 20); + this.Unk03TextBox.TabIndex = 71; + this.Unk03TextBox.TextChanged += new System.EventHandler(this.Unk03TextBox_TextChanged); + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(9, 135); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(42, 13); + this.label4.TabIndex = 72; + this.label4.Text = "Unk04:"; + // + // Unk04TextBox + // + this.Unk04TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.Unk04TextBox.Location = new System.Drawing.Point(86, 132); + this.Unk04TextBox.Name = "Unk04TextBox"; + this.Unk04TextBox.Size = new System.Drawing.Size(237, 20); + this.Unk04TextBox.TabIndex = 73; + this.Unk04TextBox.TextChanged += new System.EventHandler(this.Unk04TextBox_TextChanged); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(9, 159); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(42, 13); + this.label5.TabIndex = 74; + this.label5.Text = "Unk05:"; + // + // Unk05TextBox + // + this.Unk05TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.Unk05TextBox.Location = new System.Drawing.Point(86, 156); + this.Unk05TextBox.Name = "Unk05TextBox"; + this.Unk05TextBox.Size = new System.Drawing.Size(237, 20); + this.Unk05TextBox.TabIndex = 75; + this.Unk05TextBox.TextChanged += new System.EventHandler(this.Unk05TextBox_TextChanged); + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(9, 183); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(68, 13); + this.label6.TabIndex = 76; + this.label6.Text = "Unk06 hash:"; + // + // Unk06TextBox + // + this.Unk06TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.Unk06TextBox.Location = new System.Drawing.Point(86, 180); + this.Unk06TextBox.Name = "Unk06TextBox"; + this.Unk06TextBox.Size = new System.Drawing.Size(237, 20); + this.Unk06TextBox.TabIndex = 77; + this.Unk06TextBox.TextChanged += new System.EventHandler(this.Unk06TextBox_TextChanged); + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(9, 207); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(42, 13); + this.label7.TabIndex = 78; + this.label7.Text = "Unk07:"; + // + // Unk07TextBox + // + this.Unk07TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.Unk07TextBox.Location = new System.Drawing.Point(86, 204); + this.Unk07TextBox.Name = "Unk07TextBox"; + this.Unk07TextBox.Size = new System.Drawing.Size(237, 20); + this.Unk07TextBox.TabIndex = 79; + this.Unk07TextBox.TextChanged += new System.EventHandler(this.Unk07TextBox_TextChanged); + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(9, 231); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(42, 13); + this.label8.TabIndex = 80; + this.label8.Text = "Unk08:"; + // + // Unk08TextBox + // + this.Unk08TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.Unk08TextBox.Location = new System.Drawing.Point(86, 228); + this.Unk08TextBox.Name = "Unk08TextBox"; + this.Unk08TextBox.Size = new System.Drawing.Size(237, 20); + this.Unk08TextBox.TabIndex = 81; + this.Unk08TextBox.TextChanged += new System.EventHandler(this.Unk08TextBox_TextChanged); + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(9, 255); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(42, 13); + this.label9.TabIndex = 82; + this.label9.Text = "Unk09:"; + // + // Unk09TextBox + // + this.Unk09TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.Unk09TextBox.Location = new System.Drawing.Point(86, 252); + this.Unk09TextBox.Name = "Unk09TextBox"; + this.Unk09TextBox.Size = new System.Drawing.Size(237, 20); + this.Unk09TextBox.TabIndex = 83; + this.Unk09TextBox.TextChanged += new System.EventHandler(this.Unk09TextBox_TextChanged); + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(9, 279); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(42, 13); + this.label10.TabIndex = 84; + this.label10.Text = "Unk10:"; + // + // Unk10TextBox + // + this.Unk10TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.Unk10TextBox.Location = new System.Drawing.Point(86, 276); + this.Unk10TextBox.Name = "Unk10TextBox"; + this.Unk10TextBox.Size = new System.Drawing.Size(237, 20); + this.Unk10TextBox.TabIndex = 85; + this.Unk10TextBox.TextChanged += new System.EventHandler(this.Unk10TextBox_TextChanged); + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(9, 303); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(42, 13); + this.label11.TabIndex = 86; + this.label11.Text = "Unk11:"; + // + // Unk11TextBox + // + this.Unk11TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.Unk11TextBox.Location = new System.Drawing.Point(86, 300); + this.Unk11TextBox.Name = "Unk11TextBox"; + this.Unk11TextBox.Size = new System.Drawing.Size(237, 20); + this.Unk11TextBox.TabIndex = 87; + this.Unk11TextBox.TextChanged += new System.EventHandler(this.Unk11TextBox_TextChanged); + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(9, 327); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(42, 13); + this.label14.TabIndex = 88; + this.label14.Text = "Unk12:"; + // + // Unk12TextBox + // + this.Unk12TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.Unk12TextBox.Location = new System.Drawing.Point(86, 324); + this.Unk12TextBox.Name = "Unk12TextBox"; + this.Unk12TextBox.Size = new System.Drawing.Size(237, 20); + this.Unk12TextBox.TabIndex = 89; + this.Unk12TextBox.TextChanged += new System.EventHandler(this.Unk12TextBox_TextChanged); + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Location = new System.Drawing.Point(9, 351); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(68, 13); + this.label15.TabIndex = 90; + this.label15.Text = "Unk13 hash:"; + // + // Unk13TextBox + // + this.Unk13TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.Unk13TextBox.Location = new System.Drawing.Point(86, 348); + this.Unk13TextBox.Name = "Unk13TextBox"; + this.Unk13TextBox.Size = new System.Drawing.Size(237, 20); + this.Unk13TextBox.TabIndex = 91; + this.Unk13TextBox.TextChanged += new System.EventHandler(this.Unk13TextBox_TextChanged); + // + // label17 + // + this.label17.AutoSize = true; + this.label17.Location = new System.Drawing.Point(9, 375); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(68, 13); + this.label17.TabIndex = 92; + this.label17.Text = "Unk14 hash:"; + // + // Unk14TextBox + // + this.Unk14TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.Unk14TextBox.Location = new System.Drawing.Point(86, 372); + this.Unk14TextBox.Name = "Unk14TextBox"; + this.Unk14TextBox.Size = new System.Drawing.Size(237, 20); + this.Unk14TextBox.TabIndex = 93; + this.Unk14TextBox.TextChanged += new System.EventHandler(this.Unk14TextBox_TextChanged); + // + // EditAudioInteriorRoomPanel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(562, 450); + this.Controls.Add(this.label17); + this.Controls.Add(this.Unk14TextBox); + this.Controls.Add(this.label15); + this.Controls.Add(this.Unk13TextBox); + this.Controls.Add(this.label14); + this.Controls.Add(this.Unk12TextBox); + this.Controls.Add(this.label11); + this.Controls.Add(this.Unk11TextBox); + this.Controls.Add(this.label10); + this.Controls.Add(this.Unk10TextBox); + this.Controls.Add(this.label9); + this.Controls.Add(this.Unk09TextBox); + this.Controls.Add(this.label8); + this.Controls.Add(this.Unk08TextBox); + this.Controls.Add(this.label7); + this.Controls.Add(this.Unk07TextBox); + this.Controls.Add(this.label6); + this.Controls.Add(this.Unk06TextBox); + this.Controls.Add(this.label5); + this.Controls.Add(this.Unk05TextBox); + this.Controls.Add(this.label4); + this.Controls.Add(this.Unk04TextBox); + this.Controls.Add(this.label3); + this.Controls.Add(this.Unk03TextBox); + this.Controls.Add(this.label2); + this.Controls.Add(this.Unk02TextBox); + this.Controls.Add(this.label1); + this.Controls.Add(this.Hash1TextBox); + this.Controls.Add(this.label16); + this.Controls.Add(this.Unk00TextBox); + this.Controls.Add(this.label13); + this.Controls.Add(this.Flags0TextBox); + this.Controls.Add(this.DeleteButton); + this.Controls.Add(this.label12); + this.Controls.Add(this.NameTextBox); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "EditAudioInteriorRoomPanel"; + this.Text = "EditAudioInteriorRoomPanel"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label12; + private System.Windows.Forms.TextBox NameTextBox; + private System.Windows.Forms.Button DeleteButton; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.TextBox Flags0TextBox; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.TextBox Unk00TextBox; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox Hash1TextBox; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox Unk02TextBox; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox Unk03TextBox; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TextBox Unk04TextBox; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TextBox Unk05TextBox; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.TextBox Unk06TextBox; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.TextBox Unk07TextBox; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.TextBox Unk08TextBox; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.TextBox Unk09TextBox; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.TextBox Unk10TextBox; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.TextBox Unk11TextBox; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.TextBox Unk12TextBox; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.TextBox Unk13TextBox; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.TextBox Unk14TextBox; + } +} \ No newline at end of file diff --git a/Project/Panels/EditAudioInteriorRoomPanel.cs b/Project/Panels/EditAudioInteriorRoomPanel.cs new file mode 100644 index 0000000..bf16143 --- /dev/null +++ b/Project/Panels/EditAudioInteriorRoomPanel.cs @@ -0,0 +1,436 @@ +using CodeWalker.GameFiles; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CodeWalker.Project.Panels +{ + public partial class EditAudioInteriorRoomPanel : ProjectPanel + { + public ProjectForm ProjectForm; + public Dat151InteriorRoom CurrentRoom { get; set; } + + private bool populatingui = false; + + + public EditAudioInteriorRoomPanel(ProjectForm owner) + { + ProjectForm = owner; + InitializeComponent(); + } + + public void SetRoom(Dat151InteriorRoom room) + { + CurrentRoom = room; + Tag = room; + UpdateFormTitle(); + UpdateUI(); + } + + private void UpdateFormTitle() + { + Text = CurrentRoom?.NameHash.ToString() ?? ""; + } + + private void UpdateUI() + { + if (CurrentRoom == null) + { + //AddToProjectButton.Enabled = false; + DeleteButton.Enabled = false; + + populatingui = true; + NameTextBox.Text = string.Empty; + Unk00TextBox.Text = string.Empty; + Hash1TextBox.Text = string.Empty; + Unk02TextBox.Text = string.Empty; + Unk03TextBox.Text = string.Empty; + Unk04TextBox.Text = string.Empty; + Unk05TextBox.Text = string.Empty; + Unk06TextBox.Text = string.Empty; + Unk07TextBox.Text = string.Empty; + Unk08TextBox.Text = string.Empty; + Unk09TextBox.Text = string.Empty; + Unk10TextBox.Text = string.Empty; + Unk11TextBox.Text = string.Empty; + Unk12TextBox.Text = string.Empty; + Unk13TextBox.Text = string.Empty; + Unk14TextBox.Text = string.Empty; + Flags0TextBox.Text = string.Empty; + populatingui = false; + } + else + { + //AddToProjectButton.Enabled = CurrentZoneList?.Rel != null ? !ProjectForm.AudioFileExistsInProject(CurrentZoneList.Rel) : false; + DeleteButton.Enabled = !(CurrentRoom?.Rel != null ? !ProjectForm.AudioFileExistsInProject(CurrentRoom.Rel) : false);// AddToProjectButton.Enabled; + + populatingui = true; + var cr = CurrentRoom; + + NameTextBox.Text = cr.NameHash.ToString(); + Unk00TextBox.Text = cr.Unk00.ToString(); + Hash1TextBox.Text = cr.Hash1.ToString(); + Unk02TextBox.Text = cr.Unk02.ToString(); + Unk03TextBox.Text = FloatUtil.ToString(cr.Unk03); + Unk04TextBox.Text = FloatUtil.ToString(cr.Unk04); + Unk05TextBox.Text = FloatUtil.ToString(cr.Unk05); + Unk06TextBox.Text = cr.Unk06.ToString(); + Unk07TextBox.Text = FloatUtil.ToString(cr.Unk07); + Unk08TextBox.Text = FloatUtil.ToString(cr.Unk08); + Unk09TextBox.Text = FloatUtil.ToString(cr.Unk09); + Unk10TextBox.Text = FloatUtil.ToString(cr.Unk10); + Unk11TextBox.Text = FloatUtil.ToString(cr.Unk11); + Unk12TextBox.Text = FloatUtil.ToString(cr.Unk12); + Unk13TextBox.Text = cr.Unk13.ToString(); + Unk14TextBox.Text = cr.Unk14.ToString(); + Flags0TextBox.Text = cr.Flags0.Hex; + populatingui = false; + + + } + + } + + private void ProjectItemChanged() + { + if (CurrentRoom?.Rel != null) + { + ProjectForm.SetAudioFileHasChanged(true); + } + } + + private void NameTextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentRoom == null) return; + + uint hash = 0; + string name = NameTextBox.Text; + if (!uint.TryParse(name, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(name); + JenkIndex.Ensure(name); + } + //NameHashLabel.Text = "Hash: " + hash.ToString(); + + if (CurrentRoom.NameHash != hash) + { + CurrentRoom.Name = NameTextBox.Text; + CurrentRoom.NameHash = hash; + + ProjectItemChanged(); + UpdateFormTitle(); + } + } + + private void Unk00TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentRoom == null) return; + + uint hash = 0; + string name = Unk00TextBox.Text; + if (!uint.TryParse(name, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(name); + JenkIndex.Ensure(name); + } + //NameHashLabel.Text = "Hash: " + hash.ToString(); + + if (CurrentRoom.Unk00 != hash) + { + CurrentRoom.Unk00 = hash; + + ProjectItemChanged(); + } + } + + private void Hash1TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentRoom == null) return; + + uint hash = 0; + string name = Hash1TextBox.Text; + if (!uint.TryParse(name, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(name); + JenkIndex.Ensure(name); + } + //NameHashLabel.Text = "Hash: " + hash.ToString(); + + if (CurrentRoom.Hash1 != hash) + { + CurrentRoom.Hash1 = hash; + + ProjectItemChanged(); + } + } + + private void Unk02TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentRoom == null) return; + + uint val = 0; + if (uint.TryParse(Unk02TextBox.Text, out val)) + { + if (CurrentRoom.Unk02 != val) + { + CurrentRoom.Unk02 = val; + + ProjectItemChanged(); + } + } + } + + private void Unk03TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentRoom == null) return; + + float val = 0; + if (FloatUtil.TryParse(Unk03TextBox.Text, out val)) + { + if (CurrentRoom.Unk03 != val) + { + CurrentRoom.Unk03 = val; + + ProjectItemChanged(); + } + } + } + + private void Unk04TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentRoom == null) return; + + float val = 0; + if (FloatUtil.TryParse(Unk04TextBox.Text, out val)) + { + if (CurrentRoom.Unk04 != val) + { + CurrentRoom.Unk04 = val; + + ProjectItemChanged(); + } + } + } + + private void Unk05TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentRoom == null) return; + + float val = 0; + if (FloatUtil.TryParse(Unk05TextBox.Text, out val)) + { + if (CurrentRoom.Unk05 != val) + { + CurrentRoom.Unk05 = val; + + ProjectItemChanged(); + } + } + } + + private void Unk06TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentRoom == null) return; + + uint hash = 0; + string name = Unk06TextBox.Text; + if (!uint.TryParse(name, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(name); + JenkIndex.Ensure(name); + } + //NameHashLabel.Text = "Hash: " + hash.ToString(); + + if (CurrentRoom.Unk06 != hash) + { + CurrentRoom.Unk06 = hash; + + ProjectItemChanged(); + } + } + + private void Unk07TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentRoom == null) return; + + float val = 0; + if (FloatUtil.TryParse(Unk07TextBox.Text, out val)) + { + if (CurrentRoom.Unk07 != val) + { + CurrentRoom.Unk07 = val; + + ProjectItemChanged(); + } + } + } + + private void Unk08TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentRoom == null) return; + + float val = 0; + if (FloatUtil.TryParse(Unk08TextBox.Text, out val)) + { + if (CurrentRoom.Unk08 != val) + { + CurrentRoom.Unk08 = val; + + ProjectItemChanged(); + } + } + } + + private void Unk09TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentRoom == null) return; + + float val = 0; + if (FloatUtil.TryParse(Unk09TextBox.Text, out val)) + { + if (CurrentRoom.Unk09 != val) + { + CurrentRoom.Unk09 = val; + + ProjectItemChanged(); + } + } + } + + private void Unk10TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentRoom == null) return; + + float val = 0; + if (FloatUtil.TryParse(Unk10TextBox.Text, out val)) + { + if (CurrentRoom.Unk10 != val) + { + CurrentRoom.Unk10 = val; + + ProjectItemChanged(); + } + } + } + + private void Unk11TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentRoom == null) return; + + float val = 0; + if (FloatUtil.TryParse(Unk11TextBox.Text, out val)) + { + if (CurrentRoom.Unk11 != val) + { + CurrentRoom.Unk11 = val; + + ProjectItemChanged(); + } + } + } + + private void Unk12TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentRoom == null) return; + + float val = 0; + if (FloatUtil.TryParse(Unk12TextBox.Text, out val)) + { + if (CurrentRoom.Unk12 != val) + { + CurrentRoom.Unk12 = val; + + ProjectItemChanged(); + } + } + } + + private void Unk13TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentRoom == null) return; + + uint hash = 0; + string name = Unk13TextBox.Text; + if (!uint.TryParse(name, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(name); + JenkIndex.Ensure(name); + } + //NameHashLabel.Text = "Hash: " + hash.ToString(); + + if (CurrentRoom.Unk13 != hash) + { + CurrentRoom.Unk13 = hash; + + ProjectItemChanged(); + } + } + + private void Unk14TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentRoom == null) return; + + uint hash = 0; + string name = Unk14TextBox.Text; + if (!uint.TryParse(name, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(name); + JenkIndex.Ensure(name); + } + //NameHashLabel.Text = "Hash: " + hash.ToString(); + + if (CurrentRoom.Unk14 != hash) + { + CurrentRoom.Unk14 = hash; + + ProjectItemChanged(); + } + } + + private void Flags0TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentRoom == null) return; + + uint flags = 0; + if (uint.TryParse(Flags0TextBox.Text, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out flags)) + { + if (CurrentRoom.Flags0.Value != flags) + { + CurrentRoom.Flags0 = flags; + + ProjectItemChanged(); + } + } + } + + private void DeleteButton_Click(object sender, EventArgs e) + { + ProjectForm.SetProjectItem(CurrentRoom); + ProjectForm.DeleteAudioInteriorRoom(); + } + } +} diff --git a/Project/Panels/EditAudioInteriorRoomPanel.resx b/Project/Panels/EditAudioInteriorRoomPanel.resx new file mode 100644 index 0000000..1431f6b --- /dev/null +++ b/Project/Panels/EditAudioInteriorRoomPanel.resx @@ -0,0 +1,409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAMAICAAAAAAGACoDAAANgAAABAQAAAAABgAaAMAAN4MAABAQAAAAAAYACgyAABGEAAAKAAAACAA + AABAAAAAAQAYAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/u3v+Pn6//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7+/vX3/rzA3OHl9fz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7//+zv+3Z6qcLI5Pr7/wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP7+/+br+15in6+33vf5/wAAAAAAAAAAAAAAAP7+//7+/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//v8//v8//3+/wAAAAAAAAAAAAAAAAAAAP7+/+Ho+1dana20 + 4/b4/wAAAAAAAPz9//P2/+Tp/ezw/vz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///X4 + /9Pa+tPa+/H1//z9/wAAAAAAAAAAAAAAAP7+/93k+SsscaSr3PX3/wAAAP7+//L1/7W98AcWgrvC8Pj6 + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/+bs/xohiAEJdrvF9+7y//z9/wAAAAAAAAAA + AP7+/9rh+CEkapmh0/T3/wAAAPj6/9HZ/AEHcgEEb9LZ+/r7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP7//+/z/3F+zAAAXwQLcZai3fb4/wAAAAAAAAAAAP3+/97l/E9Tmaau4fT3/wAAAO/0/1dd + sAAAV7a/8/H1//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPr8/+jv/46Y3QUUf6Ot + 5PX4/wAAAAAAAAAAAP3+/9zj+3Z6wLe/7fX4/wAAAPD0/212xnaAzerw//z9/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/+/z/+Dm+/D0//z9/wAAAAAAAP7+//j6/9Pd+UhLjb/H + 9/D0//3+//n7/+nt/+jt//n7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7///7+//7+//7+/wAAAAAAAPr8/+7z/83W+ImU2A0UdFNarr/K9env//X4//z9//3+//7//wAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///j6/+Pq/255 + xhckjE5XsVVftUlTqwAKeTA9nr3H8+7z//v8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+//b4/9Tc+Sc0mRonj8rV/crX/ZSb48rX/brG8wwWgQAEdJei + 4efu//n7//7+//z9//z9//z9//z9//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//f5/+3y/+nv/+ft + /8vV+io2mImU2M7c/7vG9yIvlQAOfCg4mM3Y/s/c/4aR1AQRfGtzwtni/ebt/9vi/tri/tXd+9Tc+O3x + /vz9/wAAAAAAAAAAAAAAAAAAAAAAAPn6/87V+FVftkRPrFlnvSEqjQoUfmJvwWFvvg0TfQQIcxEchwAD + cy89n19rvVVitQwZgwAAaiMrkT9NqTVBoiw3mhQihig1mNLX+fv8/wAAAAAAAAAAAAAAAAAAAAAAAPb5 + /52l4EFLqoCK03yF0VBctGhyw52o5GVrvQAAaneBzsHM+jA3mhYgiTtIpJOf3ouW2AAAbmh0wbbA8bS+ + 7qiz5pCb16+56e/z//3+/wAAAAAAAAAAAAAAAAAAAAAAAPv8//H1/+vw/+zx/+nv/7/J9YqP3MbP/8LM + +hwqkFZftaCp5EhRrcTQ+9jj/8rW/UJMqn6J0ebt//X3//f5//b4//X3//f5//z9/wAAAAAAAAAAAAAA + AAAAAAAAAP7+//z9//3+/wAAAAAAAP3+/+7z/6at64iP3aWs7XN8zRIfhyUykp2o5MHM+oKM0xonjY6X + 2+jv//v8/wAAAP7+//n7//b5//r7//7//wAAAAAAAAAAAAAAAP7+//f5/+rw/9Pa9fL0/v7//wAAAAAA + APv8//H1/+Tr/7i/91liu0NPq0VQrS06m0NNqDdCoYqU1+nv//v8/wAAAAAAAPn7/9zi/qSt59ri/fL1 + //v8//7//wAAAPz9//D0/8rT+h0sjkVQrPD0/wAAAAAAAAAAAAAAAAAAAPz9/+7z/8LL9Jqk4aGq6LW/ + 8c3W9+Xs/vH1//v8/wAAAAAAAAAAAPf5/6at5gAAbxIfh6u16+Po/fr7/wAAAPb5/6ev5gAIeAAPernC + 8fX4/wAAAAAAAP3+//v8//z9/wAAAP3+//j6//P3//P2//b4//r8//7+//7+//v8//r8//3+/wAAAPv8 + /+Xr/nuIzwAAbBseg5Sb2fb5/wAAAPf5/8DF8pWe3d/n/vT3//39/wAAAPv8/+zx/87V9+3x/v3+/wAA + AP3+//j6//X4//v8/wAAAAAAAPn7/+Dm/snR9fD0//39//z8/fv8/+3y/8LK9aGq4dfd9/n7/wAAAPz9 + //b5//X4//v8/wAAAAAAAP7+/+7z/4aP1gEPet7k/f39/wAAAPf5/83U+ZCZ2u3x/v7+/wAAAPP3/215 + wgAJd7fB8/L1//7+/wAAAP3+//j6//f5//r8//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAPj6/87W/AAA + X2duue3y//7+/wAAAPD0/05asBQfidzj/P39/wAAAPX4/6Su6AAAXBccgtff/vv8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP3/3F8xhYli9Xe/fn6/wAAAAAAAO3y/1pltQAJd9be + /fv8/wAAAPz9/+rw/36I0Bknjs/W+vv8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAPf5/8HI7tnf+/X4//7+/wAAAAAAAO/0/3R7xgAAb9ng/Pz9/wAAAAAAAPn7/+Ln/dLY+fP2//3+ + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//r7//v8//7+/wAAAAAAAAAA + APb4/7/F84eP0e/0//7+/wAAAAAAAP7+//z9//v8//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz9//b5//X4//v8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////w////4 + P///+D////g8//D4MH/geCB/4Dggf+A4IH/wOCD/+DAB//hgAf//gAP//wAAB/AAAAPwAAAD8AAAA/AA + AAfjAAEHgYADAQPgBwEDEAEBAghgAQwIIEH8CCB//Bggf/wYMH/8ODD///h/////////////KAAAABAA + AAAgAAAAAQAYAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+vv/fL1/v///wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///4+Vx7/F5v///wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAP///4CHtrS62////////////////////wAAAAAAAAAAAP////H0/vf6/v// + /////////4yTwrrB4f///+zw+7rA6P39/////wAAAAAAAAAAAP///56l2BkcguXr/P///////42Uw8jO + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2OL+NjZ7AAArX2Ok + 4uz/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 2eP/LjJ1DAxKfYTE4Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//f7//f7//v7//v// + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/gILIR0eVeoHC3eb/8fX/+/z/AAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+Pr/ + +Pr/+Pr/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+vv/+vv/+/z//f3//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/2eP9ZWeqHx1obnOz4Or/8fX/+/z/AAAAAAAAAAAAAAAA/v7/ + +/z/9fj/8vb/8PX/7vT/8fb/9fj/+fr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/9fj/9fj/9Pj/9Pf/9vn/+/z//v7/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP9ODp9AAA5jZDQ5O7/8PX/+/z/AAAA + AAAAAAAA/v7/+/z/9Pf/7fP/5u//wsz6j5XfuMDx7fL/9vn//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+Pr/8/b/5+3/2eH/2uP/ + 5u3/7fP/8/b/+vv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3ef/U1ebBgVKio/O + 4uz/8fX/+/z/AAAAAAAA/v///P3/9fj/7fP/4uv/hIzZHSWPAABmU1i14ub/9/r/+/z/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9Pf/ + 7/X/09z/TlSzNzWYj5bh5O7/6/L/8vb/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fX/ + 2eP/QUWIEhBZbnSz3uj/8fb/+/z/AAAAAAAA/f7/+Pr/7/T/6PH/iI7cAABvAABqAABncXjK6O//9fj/ + +/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+/z/8/f/2uD/Z27EAABnAABiBgl4jJTd5vD/6O//8vX/+fv//f7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8fb/2OP/Mjd6AQE6ZGup4er/8fX/+/z/AAAAAAAA+vz/8fX/6/T/xM/8ExyJAABwAABu + GySRxc387fT/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vz/8/f/1Nr/MzqhAABhAxOBAARyBgp5jpLg5Oz/7PP/9Pf/+vz//v7/ + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP/KCtvBwZOjJHS4Or/8fX/+/z/AAAA/f7/9/n/7fP/3+j/ + UFq3AABtAAZ3BAh6mZ/n5vD/7vP/+Pr//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/6e//sbb1KzWcAABwBhaBAAFyAgp6fITR + 1d777/T/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3+j/WF2hBglTnaTj5O3/8PX/+/z/AAAA + /P3/9Pf/6vL/k5riAAByAAR0AABrY2vE4ur/6vH/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/7fL/5O3/ytX/RU6w + AABpAA5+AABuAABnhord6e7/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/7/T/3+j/k5jbT1KdgYjJ + 3uf+8fX/+/z/AAAA+/z/9fn/4ef/NDqhAABnAABrJjCU0Nn/5/D/8fX/+vv//v7/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + 9vn/7vP/6vP/ztb/O0CmAABpAABrQkuoxMn57PH/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/ + 2+X/en/CUFGak5nY3+j/8fX//P3/AAAA/P3/9fj/4en/i5DbNT2hIyuTpqzv4uz/7vP/9/n//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/9vn/7/P/6vL/ytH/X2i9XWi7wsf/6e//8/f/+Pr//v7/AAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/WF2hW1ylvMD+3uf/8PX/+/z/AAAA/f7/9vn/7fP/4uj/j5Pgf4LV3+X/6fD/ + 9Pf//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/8vX/7fP/5+//5u7/6vD/8PT/9vn//P3//v7/ + AAAAAAAAAAAAAAAAAAAA/f7/9/n/7fP/0tz9LDJzNjh/nqTk2uT/7fL/9/n//f7//f7/+fv/8/b/7PL/ + 3eX/zM//5ev/9fj/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f3/+vv/9/n/9vn/9fj/9vn/ + +fr//P3//v7/AAAAAAAAAAAA/v///f7/+vv/9vn/7/T/5vD/2Ob/VFubERNdoajk4u//5O7/7vP/9vj/ + +fr/+vv/+Pr/9fj/9Pj/9fj/9fj/+Pr//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///v7/ + /f7//P3//P3//f3//v7//v//AAAAAAAAAAAA/f7/+vz/9vn/8fX/7vT/5O3/3eb/z9n/cHjICxN5d37L + z9n/2eP/5O3/6/L/8PT/9Pf/9/n/+vv/+vv/+/z//P3//f3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+Pr/8/b/7vT/6vL/z9r+jZjeQUeq + IiuQCBN3AAFrBRB8Nj2iUViym6XlydH/4+z/6/L/8PT/9/n/+/z//f7//v//AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/8fX/6/L/3uf/ + mKTkLzibAABoAAB0Fx+HDBh7FSGDAg16AABYAABlCBB/Ji2UhYza1+D/6PL/7fL/9Pf/+vv//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/9/n/ + 8PT/7PT/z9j/XmO+AABtAABcMDSXoajsu8X7VV+5hYzblZ/fTVSxFSKMAABkAABnAAN2Qkmpsbrz5e3/ + 6vH/8fX/+Pr//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/P3/9/n/8PX/7PT/vcn3LTOZAABaAgR1ZWzD0Nf/5vL/1OP/l53lzs3/6fP/4+7/sLzwZ23CBxSD + AABnAABlHiaSmqHo3+j/5+//7/T/9vn//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/ + /v7//v7//v7//f7/+/z/9vj/7vP/7PX/tcLzEBeGAABkPEWlqLPt2eX/4e7/3On/uMX1gofVe3vPhYzY + z93+5/X/4e3/lJ3gHiOPAABtAABqChiEbHLIytD/5/D/7PL/8/f/+Pr/+fr/+Pr/+Pr/+Pr/+Pr/+Pr/ + +Pr/+fv/+vv/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+fv/9/n/9vj/9fj/9Pf/8fX/7PL/4uv/l6HgDhF7AAN4iZDe0d7/3uz/4vD/w83/VVm3 + ICiSAAFyAABlAABwaHTD1N//2un/3er/w838ZW3BEyOJJzKVAQ16NDmfwsn75fD/5u7/7PL/7vP/7fP/ + 7fP/7fL/7fP/7vP/7/T/8fb/9Pj/9vn/+fr//f3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/+Pr/9Pf/8fX/7vT/7PL/6/L/6fH/5u7/6vX/tsD0CQx4AAFwkZvi7ff/4vD/ + 4fD/z9j/OkGlAABiAABwBxWAAAt7BBN+P0uofYLUztb/4O7/6fb/6fP/qa7xQkyoBg56AABqMjugx8/+ + 5fH/4Ov/4On/3uj/3eb/3+j/3uj/1+L/0d3/1d7/3+f/7fL/9vj/+vz//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+fr/8/f/6/L/2d//v8j6vcf5ucP1wMv8wM3+vMj6PkqoAABo + UF25usP7tsPyvsr6sLrwQ0utAABqAAV1OUameIDRKDWZAAd2GyeOLDecmaHntsL0pbLom6riq7LzUlu0 + AANzBhR/AAZ0NT+ja3bBY2i/XGG6UViyWl65XGG7XGC6TVWvQU6pPkalODygqK7p8vb/+vz//v7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/7/T/wcj2R0ysExeFERmGDxuIFB6K + FBqICxSEAABsAAByDBiDCRSBBRCADhaFCRODAAh4AxF/AAl4CxeDHSaPAAp6AAN0AA19AAd3CBOBEBqH + BhGBAAh5AABwAAByAAh5BhSCAxWCAABsAABvAABlAABnAABxAABjAABmAABhAABdAABYAABhCAt/q7Lr + 8/f/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+fv/3uT/SE2vAABn + CBB/GiCMLzmfLTWcGByJFRyKGCOOMj2gHymRDxiGGyOPLDCXBRF/AAh3BhaCEyKMICqTKC2WNDqfIzCV + Awx6Eh+JHiaPAAR3AAZ5CxSDICWQX2q7Q1CqAA1+AAFxDxuHiZTbVGC4dHnQnabrTVqzY23EUV62Slau + LjaZXWm9sLjz5ez/9vn/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +Pv/4+n+e4LPfoPVpqv2vsf/zNX/zdb/xtH/v8v8pK7spKfysLb3vcr4ws784ej/hI/YAAZ1AAJzVF25 + yM//3Of/5+//i5LcAABpMzyfp6vxoKznlqHhqbbtx9H/8fz/kpvfAABiAABph4zc5PD/2OP/193/3un/ + 1+D/2OH/1+D/0Nr/zNL/3+j/6/L/7/T/9vn//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+Pr/9Pf/6vD/5u3/3+b/4uv/6PD/5+//5O3/5/P/sL3sXmS7mZzoz9f/3+z/4e// + mKLiEiKKCBF/KTWZr7T06/f/3ev/VF2zChSBipPcz9v+4u7/3ur/3ev/5/X/qrPrISmSDRJ2Xmq/3ur/ + 4uv/6vH/7fP/7fL/7/T/7vP/7fP/7fP/8PX/8fX/9Pf/+Pr/+/z//v7/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+Pr/9vn/9Pf/8vb/8vb/8/b/9Pf/7/T/6/L/tL/ubXLH + en/Ti43gqavy0t3/nafjMj6fJzaaAAV1GyeOYmW7Nz6fAABgNj6i1N//3uz/2uX/3Oj/5PH/wcj7FR2J + AAN0gong0tr/6fH/7/P/9vj/+Pr/+fv/+fv/+Pr/+Pr/+Pr/+fv/+vv//P3//f7//v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+/z/+/z/+/z//f3//f7/ + +fv/8fX/5Oz/jpbfc3jObnXLcXfOk5rks7b4iY3dR1KvDhuEAABoAABlEBV9U12ytcD13Or/3en/3ej/ + 1eL/q7fvGR+MKDKZbnnNxc/76PD/8fX/+fr//f7//v//AAAA/v7//f7//f3//P3//f3//f7//v//AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//f7//v7/AAAA + AAAAAAAAAAAAAAAA/f7/9vn/7/T/yNH5lJrleoDVmZ3pmpzpc3nPfoTWf4bYVFy3HSaLZ3PGsrb8v8r8 + y9n9q7jre4LRf4fUgIvXAwZ1AABrhYjb0NX/6PH/8PX/+Pr//f7/AAAAAAAA/v///f3/+vv/+Pr/9/r/ + 9/n/+Pr/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f7/+/z/+fr/9vj/9/n/ + +vz/+vv/+/z//v7/AAAAAAAAAAAAAAAA/v7/+vz/8/f/7PL/2uT/t8H1srP6vcH+nKTnSlOxV2C7TVaz + WGS8QUqmSlSuSFOtR1GtbXTKVl23ARB5AAh2AABnd33P3eP/4ur/7/T/9/n//P3/AAAAAAAAAAAA/P3/ + 9/n/8vb/7PH/6fD/7PL/7vP/8vb/9vn/+/z//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/+Pr/ + 8/b/7/T/8Pb/6vH/3eP97vL++fr//P3/AAAAAAAAAAAAAAAAAAAA/f7/+vv/9fj/7/T/5+//z9f+t7v4 + uLn9Z2zFLzucFCGIMz6gGCCMAAd4AAl2Dx2EER+GXWK8c3XLKzKXd4LP4er/6/L/8PX/9/n//P3//v// + AAAAAAAA/v7/+fv/8/b/7PP/y9H/i4/erLbt4er/5e3/7fP/8/b/+fv//f3//v7/AAAAAAAAAAAAAAAA + /v7/+/z/9vj/8PT/6/L/3+n/x9H9aHTAZGvG3+b9+Pr/+/z/AAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + +Pr/8vb/6/H/3OX+wMn4maDmdHrPWGG6T1a1eoHWcHfOTlayUlq1SlKubHjAxMj/0dn/4+v/7PL/8vb/ + +Pr//P3//v7/AAAAAAAAAAAA/f7/+fr/7vP/xsv5YGXAHymRKjKYYWS9rbLz4u3/6/P/8vb/+fr//f7/ + AAAAAAAAAAAA/v//+/z/9vj/7fL/5e3/xs7/Y23BIiiSAABeLTab3+b/9/r/+/z/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAA/f7/+vz/9vj/8PX/6vH/3eb/ydL8xM/6uMPyt733w8j/zNb/1Nz/3OT/4uz/5u7/ + 7fP/8vb/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAA/f7/+fv/7vP/jpHiAAJ1CxaBER6GAABoFRmGbXbH + 0Nf/7PL/9fj//P3/AAAAAAAAAAAA/v7/+fv/8/f/4Of/hYvbKDGZAABuAABdAAZyi5La5+7/9vn/+/z/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/9ff/8vb/7/X/7fP/6/L/5u3/5ez/6fD/ + 7PP/7/T/8fX/9Pf/9/n/+vv//P3//v7//v//AAAAAAAAAAAAAAAAAAAA/v7/+fv/8fb/2eH9fIbQExqH + AABrAAp6AAFyAABwS0+uztX39vn/+vz/AAAAAAAAAAAA/f7/+Pr/8ff/qbLpAABrAABhAABwDBWAfobX + 5e3/8PX/9vn//f3/AAAAAAAA/v///f7/+/z/+vv/+vv/+vz//P3//v7//v///v7//P3/+vz/+Pr/9/n/ + 9vj/9vj/9vj/9vj/9/n/+fr/+/z//P3//f7//v7//f7//P3/+/z/+vz/+/z//P3//v7/AAAA/v7/+/z/ + 9fj/7/T/5/H/uML1U1e1AAh5AABuAABvMjmdv8bz9vr/+vv/AAAAAAAAAAAA/f7/+fv/7/T/iY7aDxSA + GiONa3XHsr7w4Oj/6/H/9Pf/+vz//v7/AAAA/v///P3/+Pr/9Pf/8/f/9fj/9fj/9vn/+/z//v7/AAAA + AAAAAAAA/v7//f7//P3/+/z/+/z//P3//f7//v//AAAAAAAAAAAA/v7/+/z/9/n/9vn/9vn/9Pj/9vn/ + +/z//v7/AAAA/f7/+vz/9fj/7/T/6vL/3ef/i5PbGRqJBQl5jJbZ6vH/9Pj/+/z/AAAAAAAAAAAA/f7/ + +fv/8fT/1Nn9t7/0wcr54er/7fT/8fX/9fj/+vv//f7/AAAAAAAA/f3/+Pr/8PT/6/L/3uX/ztb/5Or/ + 8/f/+Pr//f7/AAAAAAAAAAAA/f7/+vz/+Pr/+fv/+fv/+vv//f3//v//AAAAAAAAAAAA/P3/9/n/7vL/ + 193/ztf/5u3/7vP/9Pf/+/z//v7/AAAA/v7//P3/+Pr/8fX/7PP/5/D/sLfxoKnk4+r/8vf/9/n//f3/ + AAAAAAAAAAAA/v7/+/z/9vn/9Pf/8vb/8fb/8fX/9Pf/+Pr//P3//v7/AAAAAAAA/v7/+vv/8vb/5+7/ + y9H/WWO9KSmSkZXj6vD/+Pv//P3/AAAAAAAA/f7/+Pr/9fj/8vb/6O7/7vP/9fj/+Pr//f7/AAAAAAAA + /v//+vv/8vb/7PP/hYraKiqKlp7i6PD/7fP/9ff/+/z//v7/AAAAAAAA/f7/+vv/9ff/8fX/8PX/8vb/ + 8/f/9vn/+/z//v7/AAAAAAAAAAAAAAAA/f7/+/z/+vv/+fr/+fr/+vv//P3//v7/AAAAAAAAAAAAAAAA + /P3/9fj/7PL/1d7/RUysAABhAABlg4ja6/D/+Pr//P3/AAAAAAAA+/z/9fj/6e7/2eD/h4/bnaXg7PH/ + 9fj/+/z/AAAAAAAA/v7/+Pr/8PX/y9X1JDGVAABaERWDoKnp6PH/7vP/9/n//P3/AAAAAAAAAAAA/v7/ + /P3/+vv/+fv/+fv/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//v7//v7//v//AAAAAAAA + AAAAAAAAAAAA/v7/+fv/8PX/7PX/ipPdAABsAABlQ1Cp3Ob/7vP/9/n//f7/AAAAAAAA+fv/9Pj/yNH5 + Ule2DBJ8Ljie0df+8fb/+fv//v7/AAAA/v7/+Pr/7/X/hY3YAABxAAl7AABuEBaEs7nz6fH/8fX/+vv/ + /v7/AAAAAAAAAAAAAAAA/v///v7//v7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9vn/7PL/0tn/LzidAQFsAAB0iZHb6vP/8PT/+fv//v//AAAA + /v7/+Pr/8vf/r7rqAAV4AABdPUen1N//7PL/9vn//f7/AAAA/v7/+fr/7/T/yc75S1G0AABrARKAAABp + Qker0df/7fP/9/n//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/5+7/cXXNAAd2AABuMDebzdT97PL/ + 9vj//P3/AAAAAAAA/v7/9/n/7/X/tL/uFCCLAABqHSqRvcf46fD/9Pf//f3/AAAAAAAA+vv/8vX/6vH/ + yM3+JC2XAABtAAV2Agx9q7Ly7vT/9vn//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/4uj/WWO1AAVx + KTaYu8T07fT/8vb/+vv//v7/AAAAAAAA/v7/9/n/7vX/vsn1Iy2SAABrAQ99mp/o6PD/9Pf//P3/AAAA + AAAA/P3/9/n/7vP/6fL/s7z2DBB/AABeQ0uttrr56e7/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +fv/4ef6g4zNbXfFw8v27fT/8vb/+Pr//f3/AAAAAAAAAAAA/v7/9/n/7vT/yNL7MjucAABtBxF/nKLo + 6fH/9Pf//P3/AAAAAAAA/v7/+/z/9fj/7fL/6/T/jZXbLzScrrP14en/7fL/+fv//v7/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+vz/8PP91dr34+f/8vb/8/f/9/r//P3//v//AAAAAAAAAAAA/v7/+Pr/8PX/1N3/ + QUqmAQRxBQ98m6Dm7PL/9fj//P3/AAAAAAAAAAAA/v7/+/z/9ff/8PX/5ez/ytH94ej/8vb/9vj/+/z/ + /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA + /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ + 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA + AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file diff --git a/Project/Panels/ProjectExplorerPanel.cs b/Project/Panels/ProjectExplorerPanel.cs index dd09739..80e85d1 100644 --- a/Project/Panels/ProjectExplorerPanel.cs +++ b/Project/Panels/ProjectExplorerPanel.cs @@ -457,6 +457,8 @@ namespace CodeWalker.Project.Panels var emitters = new List(); var zonelists = new List(); var emitterlists = new List(); + var interiors = new List(); + var interiorrooms = new List(); foreach (var reldata in rel.RelDatasSorted) { @@ -476,6 +478,14 @@ namespace CodeWalker.Project.Panels { emitterlists.Add(reldata as Dat151AmbientEmitterList); } + if (reldata is Dat151Interior) + { + interiors.Add(reldata as Dat151Interior); + } + if (reldata is Dat151InteriorRoom) + { + interiorrooms.Add(reldata as Dat151InteriorRoom); + } } @@ -537,6 +547,32 @@ namespace CodeWalker.Project.Panels } } + if (interiors.Count > 0) + { + var n = node.Nodes.Add("Interiors (" + interiors.Count.ToString() + ")"); + n.Name = "Interiors"; + n.Tag = rel; + for (int i = 0; i < interiors.Count; i++) + { + var interior = interiors[i]; + var tnode = n.Nodes.Add(interior.NameHash.ToString()); + tnode.Tag = interior; + } + } + + if (interiorrooms.Count > 0) + { + var n = node.Nodes.Add("Interior Rooms (" + interiorrooms.Count.ToString() + ")"); + n.Name = "InteriorRooms"; + n.Tag = rel; + for (int i = 0; i < interiorrooms.Count; i++) + { + var room = interiorrooms[i]; + var tnode = n.Nodes.Add(room.NameHash.ToString()); + tnode.Tag = room; + } + } + } @@ -1102,6 +1138,32 @@ namespace CodeWalker.Project.Panels } return null; } + public TreeNode FindAudioInteriorTreeNode(Dat151Interior interior) + { + if (interior == null) return null; + TreeNode relnode = FindAudioRelTreeNode(interior.Rel); + var interiorsnode = GetChildTreeNode(relnode, "Interiors"); + if (interiorsnode == null) return null; + for (int i = 0; i < interiorsnode.Nodes.Count; i++) + { + TreeNode enode = interiorsnode.Nodes[i]; + if (enode.Tag == interior) return enode; + } + return null; + } + public TreeNode FindAudioInteriorRoomTreeNode(Dat151InteriorRoom room) + { + if (room == null) return null; + TreeNode relnode = FindAudioRelTreeNode(room.Rel); + var roomsnode = GetChildTreeNode(relnode, "InteriorRooms"); + if (roomsnode == null) return null; + for (int i = 0; i < roomsnode.Nodes.Count; i++) + { + TreeNode enode = roomsnode.Nodes[i]; + if (enode.Tag == room) return enode; + } + return null; + } @@ -1421,6 +1483,45 @@ namespace CodeWalker.Project.Panels } } } + public void TrySelectAudioInteriorTreeNode(Dat151Interior interior) + { + TreeNode tnode = FindAudioInteriorTreeNode(interior); + if (tnode == null) + { + tnode = FindAudioRelTreeNode(interior?.Rel); + } + if (tnode != null) + { + if (ProjectTreeView.SelectedNode == tnode) + { + OnItemSelected?.Invoke(interior); + } + else + { + ProjectTreeView.SelectedNode = tnode; + } + } + } + public void TrySelectAudioInteriorRoomTreeNode(Dat151InteriorRoom room) + { + TreeNode tnode = FindAudioInteriorRoomTreeNode(room); + if (tnode == null) + { + tnode = FindAudioRelTreeNode(room?.Rel); + } + if (tnode != null) + { + if (ProjectTreeView.SelectedNode == tnode) + { + OnItemSelected?.Invoke(room); + } + else + { + ProjectTreeView.SelectedNode = tnode; + } + } + } + @@ -1501,6 +1602,22 @@ namespace CodeWalker.Project.Panels tn.Text = list.NameHash.ToString(); } } + public void UpdateAudioInteriorTreeNode(Dat151Interior interior) + { + var tn = FindAudioInteriorTreeNode(interior); + if (tn != null) + { + tn.Text = interior.NameHash.ToString(); + } + } + public void UpdateAudioInteriorRoomTreeNode(Dat151InteriorRoom room) + { + var tn = FindAudioInteriorRoomTreeNode(room); + if (tn != null) + { + tn.Text = room.NameHash.ToString(); + } + } @@ -1654,6 +1771,42 @@ namespace CodeWalker.Project.Panels tn.Parent.Nodes.Remove(tn); } } + public void RemoveAudioInteriorTreeNode(Dat151Interior interior) + { + var tn = FindAudioInteriorTreeNode(interior); + if ((tn != null) && (tn.Parent != null)) + { + var interiors = new List(); + foreach (var reldata in interior.Rel.RelDatas) + { + if (reldata is Dat151Interior) + { + interiors.Add(reldata as Dat151Interior); + } + } + + tn.Parent.Text = "Interiors (" + interiors.Count.ToString() + ")"; + tn.Parent.Nodes.Remove(tn); + } + } + public void RemoveAudioInteriorRoomTreeNode(Dat151InteriorRoom room) + { + var tn = FindAudioInteriorRoomTreeNode(room); + if ((tn != null) && (tn.Parent != null)) + { + var interiors = new List(); + foreach (var reldata in room.Rel.RelDatas) + { + if (reldata is Dat151InteriorRoom) + { + interiors.Add(reldata as Dat151InteriorRoom); + } + } + + tn.Parent.Text = "Interior Rooms (" + interiors.Count.ToString() + ")"; + tn.Parent.Nodes.Remove(tn); + } + } diff --git a/Project/ProjectForm.Designer.cs b/Project/ProjectForm.Designer.cs index 81e1b4b..5e87ad8 100644 --- a/Project/ProjectForm.Designer.cs +++ b/Project/ProjectForm.Designer.cs @@ -41,6 +41,7 @@ this.FileNewYnvMenu = new System.Windows.Forms.ToolStripMenuItem(); this.FileNewTrainsMenu = new System.Windows.Forms.ToolStripMenuItem(); this.FileNewScenarioMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.FileNewAudioDatMenu = new System.Windows.Forms.ToolStripMenuItem(); this.FileOpenMenu = new System.Windows.Forms.ToolStripMenuItem(); this.FileOpenProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator9 = new System.Windows.Forms.ToolStripSeparator(); @@ -50,6 +51,7 @@ this.FileOpenYnvMenu = new System.Windows.Forms.ToolStripMenuItem(); this.FileOpenTrainsMenu = new System.Windows.Forms.ToolStripMenuItem(); this.FileOpenScenarioMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.FileOpenAudioDatMenu = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); this.FileCloseProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); @@ -168,8 +170,8 @@ this.ToolbarSaveButton = new System.Windows.Forms.ToolStripButton(); this.ToolbarSaveAllButton = new System.Windows.Forms.ToolStripButton(); this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); - this.FileNewAudioDatMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.FileOpenAudioDatMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.AudioNewInteriorMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.AudioNewInteriorRoomMenu = new System.Windows.Forms.ToolStripMenuItem(); this.MainMenu.SuspendLayout(); this.MainToolbar.SuspendLayout(); this.SuspendLayout(); @@ -224,63 +226,70 @@ this.FileNewScenarioMenu, this.FileNewAudioDatMenu}); this.FileNewMenu.Name = "FileNewMenu"; - this.FileNewMenu.Size = new System.Drawing.Size(180, 22); + this.FileNewMenu.Size = new System.Drawing.Size(163, 22); this.FileNewMenu.Text = "New"; // // FileNewProjectMenu // this.FileNewProjectMenu.Name = "FileNewProjectMenu"; - this.FileNewProjectMenu.Size = new System.Drawing.Size(180, 22); + this.FileNewProjectMenu.Size = new System.Drawing.Size(148, 22); this.FileNewProjectMenu.Text = "Project"; this.FileNewProjectMenu.Click += new System.EventHandler(this.FileNewProjectMenu_Click); // // toolStripSeparator8 // this.toolStripSeparator8.Name = "toolStripSeparator8"; - this.toolStripSeparator8.Size = new System.Drawing.Size(177, 6); + this.toolStripSeparator8.Size = new System.Drawing.Size(145, 6); // // FileNewYmapMenu // this.FileNewYmapMenu.Name = "FileNewYmapMenu"; - this.FileNewYmapMenu.Size = new System.Drawing.Size(180, 22); + this.FileNewYmapMenu.Size = new System.Drawing.Size(148, 22); this.FileNewYmapMenu.Text = "Ymap File"; this.FileNewYmapMenu.Click += new System.EventHandler(this.FileNewYmapMenu_Click); // // FileNewYtypMenu // this.FileNewYtypMenu.Name = "FileNewYtypMenu"; - this.FileNewYtypMenu.Size = new System.Drawing.Size(180, 22); + this.FileNewYtypMenu.Size = new System.Drawing.Size(148, 22); this.FileNewYtypMenu.Text = "Ytyp File"; this.FileNewYtypMenu.Click += new System.EventHandler(this.FileNewYtypMenu_Click); // // FileNewYndMenu // this.FileNewYndMenu.Name = "FileNewYndMenu"; - this.FileNewYndMenu.Size = new System.Drawing.Size(180, 22); + this.FileNewYndMenu.Size = new System.Drawing.Size(148, 22); this.FileNewYndMenu.Text = "Ynd File"; this.FileNewYndMenu.Click += new System.EventHandler(this.FileNewYndMenu_Click); // // FileNewYnvMenu // this.FileNewYnvMenu.Name = "FileNewYnvMenu"; - this.FileNewYnvMenu.Size = new System.Drawing.Size(180, 22); + this.FileNewYnvMenu.Size = new System.Drawing.Size(148, 22); this.FileNewYnvMenu.Text = "Ynv File"; this.FileNewYnvMenu.Click += new System.EventHandler(this.FileNewYnvMenu_Click); // // FileNewTrainsMenu // this.FileNewTrainsMenu.Name = "FileNewTrainsMenu"; - this.FileNewTrainsMenu.Size = new System.Drawing.Size(180, 22); + this.FileNewTrainsMenu.Size = new System.Drawing.Size(148, 22); this.FileNewTrainsMenu.Text = "Trains File"; this.FileNewTrainsMenu.Click += new System.EventHandler(this.FileNewTrainsMenu_Click); // // FileNewScenarioMenu // this.FileNewScenarioMenu.Name = "FileNewScenarioMenu"; - this.FileNewScenarioMenu.Size = new System.Drawing.Size(180, 22); + this.FileNewScenarioMenu.Size = new System.Drawing.Size(148, 22); this.FileNewScenarioMenu.Text = "Scenario File"; this.FileNewScenarioMenu.Click += new System.EventHandler(this.FileNewScenarioMenu_Click); // + // FileNewAudioDatMenu + // + this.FileNewAudioDatMenu.Name = "FileNewAudioDatMenu"; + this.FileNewAudioDatMenu.Size = new System.Drawing.Size(148, 22); + this.FileNewAudioDatMenu.Text = "Audio Dat File"; + this.FileNewAudioDatMenu.Click += new System.EventHandler(this.FileNewAudioDatMenu_Click); + // // FileOpenMenu // this.FileOpenMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -294,86 +303,93 @@ this.FileOpenScenarioMenu, this.FileOpenAudioDatMenu}); this.FileOpenMenu.Name = "FileOpenMenu"; - this.FileOpenMenu.Size = new System.Drawing.Size(180, 22); + this.FileOpenMenu.Size = new System.Drawing.Size(163, 22); this.FileOpenMenu.Text = "Open"; // // FileOpenProjectMenu // this.FileOpenProjectMenu.Name = "FileOpenProjectMenu"; - this.FileOpenProjectMenu.Size = new System.Drawing.Size(180, 22); + this.FileOpenProjectMenu.Size = new System.Drawing.Size(157, 22); this.FileOpenProjectMenu.Text = "Project..."; this.FileOpenProjectMenu.Click += new System.EventHandler(this.FileOpenProjectMenu_Click); // // toolStripSeparator9 // this.toolStripSeparator9.Name = "toolStripSeparator9"; - this.toolStripSeparator9.Size = new System.Drawing.Size(177, 6); + this.toolStripSeparator9.Size = new System.Drawing.Size(154, 6); // // FileOpenYmapMenu // this.FileOpenYmapMenu.Name = "FileOpenYmapMenu"; - this.FileOpenYmapMenu.Size = new System.Drawing.Size(180, 22); + this.FileOpenYmapMenu.Size = new System.Drawing.Size(157, 22); this.FileOpenYmapMenu.Text = "Ymap File..."; this.FileOpenYmapMenu.Click += new System.EventHandler(this.FileOpenYmapMenu_Click); // // FileOpenYtypMenu // this.FileOpenYtypMenu.Name = "FileOpenYtypMenu"; - this.FileOpenYtypMenu.Size = new System.Drawing.Size(180, 22); + this.FileOpenYtypMenu.Size = new System.Drawing.Size(157, 22); this.FileOpenYtypMenu.Text = "Ytyp File..."; this.FileOpenYtypMenu.Click += new System.EventHandler(this.FileOpenYtypMenu_Click); // // FileOpenYndMenu // this.FileOpenYndMenu.Name = "FileOpenYndMenu"; - this.FileOpenYndMenu.Size = new System.Drawing.Size(180, 22); + this.FileOpenYndMenu.Size = new System.Drawing.Size(157, 22); this.FileOpenYndMenu.Text = "Ynd File..."; this.FileOpenYndMenu.Click += new System.EventHandler(this.FileOpenYndMenu_Click); // // FileOpenYnvMenu // this.FileOpenYnvMenu.Name = "FileOpenYnvMenu"; - this.FileOpenYnvMenu.Size = new System.Drawing.Size(180, 22); + this.FileOpenYnvMenu.Size = new System.Drawing.Size(157, 22); this.FileOpenYnvMenu.Text = "Ynv File..."; this.FileOpenYnvMenu.Click += new System.EventHandler(this.FileOpenYnvMenu_Click); // // FileOpenTrainsMenu // this.FileOpenTrainsMenu.Name = "FileOpenTrainsMenu"; - this.FileOpenTrainsMenu.Size = new System.Drawing.Size(180, 22); + this.FileOpenTrainsMenu.Size = new System.Drawing.Size(157, 22); this.FileOpenTrainsMenu.Text = "Trains File..."; this.FileOpenTrainsMenu.Click += new System.EventHandler(this.FileOpenTrainsMenu_Click); // // FileOpenScenarioMenu // this.FileOpenScenarioMenu.Name = "FileOpenScenarioMenu"; - this.FileOpenScenarioMenu.Size = new System.Drawing.Size(180, 22); + this.FileOpenScenarioMenu.Size = new System.Drawing.Size(157, 22); this.FileOpenScenarioMenu.Text = "Scenario File..."; this.FileOpenScenarioMenu.Click += new System.EventHandler(this.FileOpenScenarioMenu_Click); // + // FileOpenAudioDatMenu + // + this.FileOpenAudioDatMenu.Name = "FileOpenAudioDatMenu"; + this.FileOpenAudioDatMenu.Size = new System.Drawing.Size(157, 22); + this.FileOpenAudioDatMenu.Text = "Audio Dat File..."; + this.FileOpenAudioDatMenu.Click += new System.EventHandler(this.FileOpenAudioDatMenu_Click); + // // toolStripSeparator3 // this.toolStripSeparator3.Name = "toolStripSeparator3"; - this.toolStripSeparator3.Size = new System.Drawing.Size(177, 6); + this.toolStripSeparator3.Size = new System.Drawing.Size(160, 6); // // FileCloseProjectMenu // this.FileCloseProjectMenu.Enabled = false; this.FileCloseProjectMenu.Name = "FileCloseProjectMenu"; - this.FileCloseProjectMenu.Size = new System.Drawing.Size(180, 22); + this.FileCloseProjectMenu.Size = new System.Drawing.Size(163, 22); this.FileCloseProjectMenu.Text = "Close Project"; this.FileCloseProjectMenu.Click += new System.EventHandler(this.FileCloseProjectMenu_Click); // // toolStripSeparator4 // this.toolStripSeparator4.Name = "toolStripSeparator4"; - this.toolStripSeparator4.Size = new System.Drawing.Size(177, 6); + this.toolStripSeparator4.Size = new System.Drawing.Size(160, 6); // // FileSaveProjectMenu // this.FileSaveProjectMenu.Enabled = false; this.FileSaveProjectMenu.Name = "FileSaveProjectMenu"; - this.FileSaveProjectMenu.Size = new System.Drawing.Size(180, 22); + this.FileSaveProjectMenu.Size = new System.Drawing.Size(163, 22); this.FileSaveProjectMenu.Text = "Save Project"; this.FileSaveProjectMenu.Click += new System.EventHandler(this.FileSaveProjectMenu_Click); // @@ -381,7 +397,7 @@ // this.FileSaveProjectAsMenu.Enabled = false; this.FileSaveProjectAsMenu.Name = "FileSaveProjectAsMenu"; - this.FileSaveProjectAsMenu.Size = new System.Drawing.Size(180, 22); + this.FileSaveProjectAsMenu.Size = new System.Drawing.Size(163, 22); this.FileSaveProjectAsMenu.Text = "Save Project As..."; this.FileSaveProjectAsMenu.Click += new System.EventHandler(this.FileSaveProjectAsMenu_Click); // @@ -389,7 +405,7 @@ // this.FileSaveItemMenu.Enabled = false; this.FileSaveItemMenu.Name = "FileSaveItemMenu"; - this.FileSaveItemMenu.Size = new System.Drawing.Size(180, 22); + this.FileSaveItemMenu.Size = new System.Drawing.Size(163, 22); this.FileSaveItemMenu.Text = "Save Item"; this.FileSaveItemMenu.Visible = false; this.FileSaveItemMenu.Click += new System.EventHandler(this.FileSaveItemMenu_Click); @@ -398,7 +414,7 @@ // this.FileSaveItemAsMenu.Enabled = false; this.FileSaveItemAsMenu.Name = "FileSaveItemAsMenu"; - this.FileSaveItemAsMenu.Size = new System.Drawing.Size(180, 22); + this.FileSaveItemAsMenu.Size = new System.Drawing.Size(163, 22); this.FileSaveItemAsMenu.Text = "Save Item As..."; this.FileSaveItemAsMenu.Visible = false; this.FileSaveItemAsMenu.Click += new System.EventHandler(this.FileSaveItemAsMenu_Click); @@ -952,6 +968,8 @@ this.AudioNewAmbientEmitterListMenu, this.AudioNewAmbientZoneMenu, this.AudioNewAmbientZoneListMenu, + this.AudioNewInteriorMenu, + this.AudioNewInteriorRoomMenu, this.toolStripSeparator24, this.AudioAddToProjectMenu, this.AudioRemoveFromProjectMenu}); @@ -1300,19 +1318,21 @@ this.toolStripSeparator5.Name = "toolStripSeparator5"; this.toolStripSeparator5.Size = new System.Drawing.Size(6, 25); // - // FileNewAudioDatMenu + // AudioNewInteriorMenu // - this.FileNewAudioDatMenu.Name = "FileNewAudioDatMenu"; - this.FileNewAudioDatMenu.Size = new System.Drawing.Size(180, 22); - this.FileNewAudioDatMenu.Text = "Audio Dat File"; - this.FileNewAudioDatMenu.Click += new System.EventHandler(this.FileNewAudioDatMenu_Click); + this.AudioNewInteriorMenu.Enabled = false; + this.AudioNewInteriorMenu.Name = "AudioNewInteriorMenu"; + this.AudioNewInteriorMenu.Size = new System.Drawing.Size(216, 22); + this.AudioNewInteriorMenu.Text = "New Interior"; + this.AudioNewInteriorMenu.Click += new System.EventHandler(this.AudioNewInteriorMenu_Click); // - // FileOpenAudioDatMenu + // AudioNewInteriorRoomMenu // - this.FileOpenAudioDatMenu.Name = "FileOpenAudioDatMenu"; - this.FileOpenAudioDatMenu.Size = new System.Drawing.Size(180, 22); - this.FileOpenAudioDatMenu.Text = "Audio Dat File..."; - this.FileOpenAudioDatMenu.Click += new System.EventHandler(this.FileOpenAudioDatMenu_Click); + this.AudioNewInteriorRoomMenu.Enabled = false; + this.AudioNewInteriorRoomMenu.Name = "AudioNewInteriorRoomMenu"; + this.AudioNewInteriorRoomMenu.Size = new System.Drawing.Size(216, 22); + this.AudioNewInteriorRoomMenu.Text = "New Interior Room"; + this.AudioNewInteriorRoomMenu.Click += new System.EventHandler(this.AudioNewInteriorRoomMenu_Click); // // ProjectForm // @@ -1480,5 +1500,7 @@ private System.Windows.Forms.ToolStripMenuItem AudioRemoveFromProjectMenu; private System.Windows.Forms.ToolStripMenuItem FileNewAudioDatMenu; private System.Windows.Forms.ToolStripMenuItem FileOpenAudioDatMenu; + private System.Windows.Forms.ToolStripMenuItem AudioNewInteriorMenu; + private System.Windows.Forms.ToolStripMenuItem AudioNewInteriorRoomMenu; } } \ No newline at end of file diff --git a/Project/ProjectForm.cs b/Project/ProjectForm.cs index c744b53..c6f05df 100644 --- a/Project/ProjectForm.cs +++ b/Project/ProjectForm.cs @@ -67,6 +67,8 @@ namespace CodeWalker.Project private AudioPlacement CurrentAudioEmitter; private Dat151AmbientZoneList CurrentAudioZoneList; private Dat151AmbientEmitterList CurrentAudioEmitterList; + private Dat151Interior CurrentAudioInterior; + private Dat151InteriorRoom CurrentAudioInteriorRoom; private bool renderitems = true; private bool hidegtavmap = false; @@ -486,6 +488,20 @@ namespace CodeWalker.Project (panel) => { panel.SetEmitterList(CurrentAudioEmitterList); }, //updateFunc (panel) => { return panel.CurrentEmitterList == CurrentAudioEmitterList; }); //findFunc } + public void ShowEditAudioInteriorPanel(bool promote) + { + ShowPanel(promote, + () => { return new EditAudioInteriorPanel(this); }, //createFunc + (panel) => { panel.SetInterior(CurrentAudioInterior); }, //updateFunc + (panel) => { return panel.CurrentInterior == CurrentAudioInterior; }); //findFunc + } + public void ShowEditAudioInteriorRoomPanel(bool promote) + { + ShowPanel(promote, + () => { return new EditAudioInteriorRoomPanel(this); }, //createFunc + (panel) => { panel.SetRoom(CurrentAudioInteriorRoom); }, //updateFunc + (panel) => { return panel.CurrentRoom == CurrentAudioInteriorRoom; }); //findFunc + } private void ShowCurrentProjectItem(bool promote) { @@ -577,6 +593,14 @@ namespace CodeWalker.Project { ShowEditAudioEmitterListPanel(promote); } + else if (CurrentAudioInterior != null) + { + ShowEditAudioInteriorPanel(promote); + } + else if (CurrentAudioInteriorRoom != null) + { + ShowEditAudioInteriorRoomPanel(promote); + } else if (CurrentAudioFile != null) { ShowEditAudioFilePanel(promote); @@ -625,6 +649,8 @@ namespace CodeWalker.Project CurrentAudioEmitter = item as AudioPlacement; CurrentAudioZoneList = item as Dat151AmbientZoneList; CurrentAudioEmitterList = item as Dat151AmbientEmitterList; + CurrentAudioInterior = item as Dat151Interior; + CurrentAudioInteriorRoom = item as Dat151InteriorRoom; CurrentMloRoom = item as MCMloRoomDef; if (CurrentAudioZone?.AudioZone == null) CurrentAudioZone = null; @@ -724,6 +750,14 @@ namespace CodeWalker.Project { CurrentAudioFile = CurrentAudioEmitterList.Rel; } + if (CurrentAudioInterior != null) + { + CurrentAudioFile = CurrentAudioInterior.Rel; + } + if (CurrentAudioInteriorRoom != null) + { + CurrentAudioFile = CurrentAudioInteriorRoom.Rel; + } RefreshUI(); @@ -4774,6 +4808,8 @@ namespace CodeWalker.Project var zonelist = new Dat151AmbientZoneList(CurrentAudioFile); + zonelist.Name = "zonelist1"; + zonelist.NameHash = JenkHash.GenHash(zonelist.Name); CurrentAudioFile.AddRelData(zonelist); @@ -4838,6 +4874,9 @@ namespace CodeWalker.Project var emlist = new Dat151AmbientEmitterList(CurrentAudioFile); + emlist.Name = "emitterlist1"; + emlist.NameHash = JenkHash.GenHash(emlist.Name); + CurrentAudioFile.AddRelData(emlist); @@ -4895,6 +4934,145 @@ namespace CodeWalker.Project return list == CurrentAudioEmitterList; } + public void NewAudioInterior() + { + if (CurrentAudioFile == null) return; + + + var interior = new Dat151Interior(CurrentAudioFile); + + interior.Name = "interior1"; + interior.NameHash = JenkHash.GenHash(interior.Name); + interior.Unk0 = 0xAAAAA844; + interior.Unk1 = 0xD4855127; + + CurrentAudioFile.AddRelData(interior); + + LoadProjectTree(); + + ProjectExplorer?.TrySelectAudioInteriorTreeNode(interior); + CurrentAudioInterior = interior; + + ShowEditAudioInteriorPanel(false); + } + public bool DeleteAudioInterior() + { + if (CurrentAudioInterior?.Rel != CurrentAudioFile) return false; + if (CurrentAudioFile?.RelDatas == null) return false; //nothing to delete.. + if (CurrentAudioFile?.RelDatasSorted == null) return false; //nothing to delete.. + + + if (MessageBox.Show("Are you sure you want to delete this audio interior?\n" + CurrentAudioInterior.GetNameString() + "\n\nThis operation cannot be undone. Continue?", "Confirm delete", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return true; + } + + bool res = false; + if (WorldForm != null) + { + lock (WorldForm.RenderSyncRoot) //don't try to do this while rendering... + { + res = CurrentAudioFile.RemoveRelData(CurrentAudioInterior); + //WorldForm.SelectItem(null, null, null); + } + } + else + { + res = CurrentAudioFile.RemoveRelData(CurrentAudioInterior); + } + if (!res) + { + MessageBox.Show("Unspecified error occurred when removing the audio interior from the file!"); + } + + var delel = CurrentAudioInterior; + var delrel = CurrentAudioFile; + + ProjectExplorer?.RemoveAudioInteriorTreeNode(delel); + ProjectExplorer?.SetAudioRelHasChanged(delrel, true); + + ClosePanel((EditAudioInteriorPanel p) => { return p.Tag == delel; }); + + CurrentAudioInterior = null; + + return true; + } + public bool IsCurrentAudioInterior(Dat151Interior interior) + { + return interior == CurrentAudioInterior; + } + + public void NewAudioInteriorRoom() + { + if (CurrentAudioFile == null) return; + + + var room = new Dat151InteriorRoom(CurrentAudioFile); + + room.Name = "room1"; + room.NameHash = JenkHash.GenHash(room.Name); + + room.Flags0 = 0xAAAAAAAA; + room.Unk06 = 3817852694;//?? + room.Unk14 = 3565506855;//? + + + CurrentAudioFile.AddRelData(room); + + LoadProjectTree(); + + ProjectExplorer?.TrySelectAudioInteriorRoomTreeNode(room); + CurrentAudioInteriorRoom = room; + + ShowEditAudioInteriorRoomPanel(false); + } + public bool DeleteAudioInteriorRoom() + { + if (CurrentAudioInteriorRoom?.Rel != CurrentAudioFile) return false; + if (CurrentAudioFile?.RelDatas == null) return false; //nothing to delete.. + if (CurrentAudioFile?.RelDatasSorted == null) return false; //nothing to delete.. + + + if (MessageBox.Show("Are you sure you want to delete this audio interior room?\n" + CurrentAudioInteriorRoom.GetNameString() + "\n\nThis operation cannot be undone. Continue?", "Confirm delete", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return true; + } + + bool res = false; + if (WorldForm != null) + { + lock (WorldForm.RenderSyncRoot) //don't try to do this while rendering... + { + res = CurrentAudioFile.RemoveRelData(CurrentAudioInteriorRoom); + //WorldForm.SelectItem(null, null, null); + } + } + else + { + res = CurrentAudioFile.RemoveRelData(CurrentAudioInteriorRoom); + } + if (!res) + { + MessageBox.Show("Unspecified error occurred when removing the audio interior from the file!"); + } + + var delel = CurrentAudioInteriorRoom; + var delrel = CurrentAudioFile; + + ProjectExplorer?.RemoveAudioInteriorRoomTreeNode(delel); + ProjectExplorer?.SetAudioRelHasChanged(delrel, true); + + ClosePanel((EditAudioInteriorRoomPanel p) => { return p.Tag == delel; }); + + CurrentAudioInteriorRoom = null; + + return true; + } + public bool IsCurrentAudioInteriorRoom(Dat151InteriorRoom room) + { + return room == CurrentAudioInteriorRoom; + } + @@ -6234,6 +6412,8 @@ namespace CodeWalker.Project AudioNewAmbientEmitterListMenu.Enabled = enable && inproj; AudioNewAmbientZoneMenu.Enabled = enable && inproj; AudioNewAmbientZoneListMenu.Enabled = enable && inproj; + AudioNewInteriorMenu.Enabled = enable && inproj; + AudioNewInteriorRoomMenu.Enabled = enable && inproj; if (CurrentAudioFile != null) { @@ -6637,6 +6817,14 @@ namespace CodeWalker.Project { NewAudioZoneList(); } + private void AudioNewInteriorMenu_Click(object sender, EventArgs e) + { + NewAudioInterior(); + } + private void AudioNewInteriorRoomMenu_Click(object sender, EventArgs e) + { + NewAudioInteriorRoom(); + } private void AudioAddToProjectMenu_Click(object sender, EventArgs e) { AddAudioFileToProject(CurrentAudioFile); From a64b52899d4b1136dcfcabc3ff34b1723fda4807 Mon Sep 17 00:00:00 2001 From: dexy Date: Fri, 28 Dec 2018 19:31:52 +1100 Subject: [PATCH 062/158] Fixed UI bug with New Emitter/Zone list --- Project/ProjectForm.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Project/ProjectForm.cs b/Project/ProjectForm.cs index c6f05df..6aeb955 100644 --- a/Project/ProjectForm.cs +++ b/Project/ProjectForm.cs @@ -4818,7 +4818,7 @@ namespace CodeWalker.Project ProjectExplorer?.TrySelectAudioZoneListTreeNode(zonelist); CurrentAudioZoneList = zonelist; - ShowEditAudioZonePanel(false); + ShowEditAudioZoneListPanel(false); } public bool DeleteAudioZoneList() { @@ -4885,7 +4885,7 @@ namespace CodeWalker.Project ProjectExplorer?.TrySelectAudioEmitterListTreeNode(emlist); CurrentAudioEmitterList = emlist; - ShowEditAudioZonePanel(false); + ShowEditAudioEmitterListPanel(false); } public bool DeleteAudioEmitterList() { From c5cac4c4077a3574d855211d94a3fecce91b374a Mon Sep 17 00:00:00 2001 From: dexy Date: Fri, 28 Dec 2018 19:40:39 +1100 Subject: [PATCH 063/158] Fixed UI bug with New Zone list, added delete buttons --- .../Panels/EditAudioEmitterListPanel.Designer.cs | 14 ++++++++++++++ Project/Panels/EditAudioEmitterListPanel.cs | 6 ++++++ Project/Panels/EditAudioZoneListPanel.Designer.cs | 14 ++++++++++++++ Project/Panels/EditAudioZoneListPanel.cs | 6 ++++++ Project/Panels/ProjectExplorerPanel.cs | 2 +- 5 files changed, 41 insertions(+), 1 deletion(-) diff --git a/Project/Panels/EditAudioEmitterListPanel.Designer.cs b/Project/Panels/EditAudioEmitterListPanel.Designer.cs index 27af500..3b99fc3 100644 --- a/Project/Panels/EditAudioEmitterListPanel.Designer.cs +++ b/Project/Panels/EditAudioEmitterListPanel.Designer.cs @@ -35,6 +35,7 @@ this.NameTextBox = new System.Windows.Forms.TextBox(); this.label19 = new System.Windows.Forms.Label(); this.HashesTextBox = new CodeWalker.WinForms.TextBoxFix(); + this.DeleteButton = new System.Windows.Forms.Button(); this.tabControl1.SuspendLayout(); this.tabPage1.SuspendLayout(); this.SuspendLayout(); @@ -53,6 +54,7 @@ // // tabPage1 // + this.tabPage1.Controls.Add(this.DeleteButton); this.tabPage1.Controls.Add(this.label12); this.tabPage1.Controls.Add(this.NameTextBox); this.tabPage1.Controls.Add(this.label19); @@ -107,6 +109,17 @@ this.HashesTextBox.WordWrap = false; this.HashesTextBox.TextChanged += new System.EventHandler(this.HashesTextBox_TextChanged); // + // DeleteButton + // + this.DeleteButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.DeleteButton.Location = new System.Drawing.Point(438, 381); + this.DeleteButton.Name = "DeleteButton"; + this.DeleteButton.Size = new System.Drawing.Size(93, 23); + this.DeleteButton.TabIndex = 76; + this.DeleteButton.Text = "Delete list"; + this.DeleteButton.UseVisualStyleBackColor = true; + this.DeleteButton.Click += new System.EventHandler(this.DeleteButton_Click); + // // EditAudioEmitterListPanel // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -131,5 +144,6 @@ private WinForms.TextBoxFix HashesTextBox; private System.Windows.Forms.Label label12; private System.Windows.Forms.TextBox NameTextBox; + private System.Windows.Forms.Button DeleteButton; } } \ No newline at end of file diff --git a/Project/Panels/EditAudioEmitterListPanel.cs b/Project/Panels/EditAudioEmitterListPanel.cs index f0e9446..b6e8a96 100644 --- a/Project/Panels/EditAudioEmitterListPanel.cs +++ b/Project/Panels/EditAudioEmitterListPanel.cs @@ -140,5 +140,11 @@ namespace CodeWalker.Project.Panels ProjectItemChanged(); } } + + private void DeleteButton_Click(object sender, EventArgs e) + { + ProjectForm.SetProjectItem(CurrentEmitterList); + ProjectForm.DeleteAudioEmitterList(); + } } } diff --git a/Project/Panels/EditAudioZoneListPanel.Designer.cs b/Project/Panels/EditAudioZoneListPanel.Designer.cs index f16ce1b..6182e22 100644 --- a/Project/Panels/EditAudioZoneListPanel.Designer.cs +++ b/Project/Panels/EditAudioZoneListPanel.Designer.cs @@ -35,6 +35,7 @@ this.NameTextBox = new System.Windows.Forms.TextBox(); this.label19 = new System.Windows.Forms.Label(); this.HashesTextBox = new CodeWalker.WinForms.TextBoxFix(); + this.DeleteButton = new System.Windows.Forms.Button(); this.tabControl1.SuspendLayout(); this.tabPage1.SuspendLayout(); this.SuspendLayout(); @@ -53,6 +54,7 @@ // // tabPage1 // + this.tabPage1.Controls.Add(this.DeleteButton); this.tabPage1.Controls.Add(this.label12); this.tabPage1.Controls.Add(this.NameTextBox); this.tabPage1.Controls.Add(this.label19); @@ -107,6 +109,17 @@ this.HashesTextBox.WordWrap = false; this.HashesTextBox.TextChanged += new System.EventHandler(this.HashesTextBox_TextChanged); // + // DeleteButton + // + this.DeleteButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.DeleteButton.Location = new System.Drawing.Point(438, 381); + this.DeleteButton.Name = "DeleteButton"; + this.DeleteButton.Size = new System.Drawing.Size(93, 23); + this.DeleteButton.TabIndex = 77; + this.DeleteButton.Text = "Delete list"; + this.DeleteButton.UseVisualStyleBackColor = true; + this.DeleteButton.Click += new System.EventHandler(this.DeleteButton_Click); + // // EditAudioZoneListPanel // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -131,5 +144,6 @@ private WinForms.TextBoxFix HashesTextBox; private System.Windows.Forms.Label label12; private System.Windows.Forms.TextBox NameTextBox; + private System.Windows.Forms.Button DeleteButton; } } \ No newline at end of file diff --git a/Project/Panels/EditAudioZoneListPanel.cs b/Project/Panels/EditAudioZoneListPanel.cs index 43aeeb8..e673c51 100644 --- a/Project/Panels/EditAudioZoneListPanel.cs +++ b/Project/Panels/EditAudioZoneListPanel.cs @@ -140,5 +140,11 @@ namespace CodeWalker.Project.Panels ProjectItemChanged(); } } + + private void DeleteButton_Click(object sender, EventArgs e) + { + ProjectForm.SetProjectItem(CurrentZoneList); + ProjectForm.DeleteAudioZoneList(); + } } } diff --git a/Project/Panels/ProjectExplorerPanel.cs b/Project/Panels/ProjectExplorerPanel.cs index 80e85d1..41d4992 100644 --- a/Project/Panels/ProjectExplorerPanel.cs +++ b/Project/Panels/ProjectExplorerPanel.cs @@ -1116,7 +1116,7 @@ namespace CodeWalker.Project.Panels { if (list == null) return null; TreeNode relnode = FindAudioRelTreeNode(list.Rel); - var zonelistsnode = GetChildTreeNode(relnode, "ZoneLists"); + var zonelistsnode = GetChildTreeNode(relnode, "AmbientZoneLists"); if (zonelistsnode == null) return null; for (int i = 0; i < zonelistsnode.Nodes.Count; i++) { From 9191a3da5e171eccdbe3d41203c83cc58253a691 Mon Sep 17 00:00:00 2001 From: dexy Date: Fri, 28 Dec 2018 20:34:16 +1100 Subject: [PATCH 064/158] Renamed audio interior room Unk00 to MLO room --- .../GameFiles/FileTypes/RelFile.cs | 6 ++--- .../EditAudioInteriorRoomPanel.Designer.cs | 24 +++++++++---------- Project/Panels/EditAudioInteriorRoomPanel.cs | 10 ++++---- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index 8d2d3bb..8689020 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -3371,7 +3371,7 @@ namespace CodeWalker.GameFiles [TC(typeof(EXP))] public class Dat151InteriorRoom : Dat151RelData { public FlagsUint Flags0 { get; set; } - public MetaHash Unk00 { get; set; } + public MetaHash MloRoom { get; set; } public MetaHash Hash1 { get; set; } public uint Unk02 { get; set; } public float Unk03 { get; set; } @@ -3395,7 +3395,7 @@ namespace CodeWalker.GameFiles public Dat151InteriorRoom(RelData d, BinaryReader br) : base(d, br) { Flags0 = br.ReadUInt32(); - Unk00 = br.ReadUInt32(); + MloRoom = br.ReadUInt32(); Hash1 = br.ReadUInt32(); Unk02 = br.ReadUInt32(); Unk03 = br.ReadSingle(); @@ -3420,7 +3420,7 @@ namespace CodeWalker.GameFiles WriteTypeAndOffset(bw); bw.Write(Flags0.Value); - bw.Write(Unk00); + bw.Write(MloRoom); bw.Write(Hash1); bw.Write(Unk02); bw.Write(Unk03); diff --git a/Project/Panels/EditAudioInteriorRoomPanel.Designer.cs b/Project/Panels/EditAudioInteriorRoomPanel.Designer.cs index 1a1e10a..696281c 100644 --- a/Project/Panels/EditAudioInteriorRoomPanel.Designer.cs +++ b/Project/Panels/EditAudioInteriorRoomPanel.Designer.cs @@ -35,7 +35,7 @@ this.label13 = new System.Windows.Forms.Label(); this.Flags0TextBox = new System.Windows.Forms.TextBox(); this.label16 = new System.Windows.Forms.Label(); - this.Unk00TextBox = new System.Windows.Forms.TextBox(); + this.MloRoomTextBox = new System.Windows.Forms.TextBox(); this.label1 = new System.Windows.Forms.Label(); this.Hash1TextBox = new System.Windows.Forms.TextBox(); this.label2 = new System.Windows.Forms.Label(); @@ -120,19 +120,19 @@ this.label16.AutoSize = true; this.label16.Location = new System.Drawing.Point(9, 39); this.label16.Name = "label16"; - this.label16.Size = new System.Drawing.Size(68, 13); + this.label16.Size = new System.Drawing.Size(59, 13); this.label16.TabIndex = 64; - this.label16.Text = "Unk00 hash:"; + this.label16.Text = "MLO room:"; // - // Unk00TextBox + // MloRoomTextBox // - this.Unk00TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this.MloRoomTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.Unk00TextBox.Location = new System.Drawing.Point(86, 36); - this.Unk00TextBox.Name = "Unk00TextBox"; - this.Unk00TextBox.Size = new System.Drawing.Size(237, 20); - this.Unk00TextBox.TabIndex = 65; - this.Unk00TextBox.TextChanged += new System.EventHandler(this.Unk00TextBox_TextChanged); + this.MloRoomTextBox.Location = new System.Drawing.Point(86, 36); + this.MloRoomTextBox.Name = "MloRoomTextBox"; + this.MloRoomTextBox.Size = new System.Drawing.Size(237, 20); + this.MloRoomTextBox.TabIndex = 65; + this.MloRoomTextBox.TextChanged += new System.EventHandler(this.Unk00TextBox_TextChanged); // // label1 // @@ -434,7 +434,7 @@ this.Controls.Add(this.label1); this.Controls.Add(this.Hash1TextBox); this.Controls.Add(this.label16); - this.Controls.Add(this.Unk00TextBox); + this.Controls.Add(this.MloRoomTextBox); this.Controls.Add(this.label13); this.Controls.Add(this.Flags0TextBox); this.Controls.Add(this.DeleteButton); @@ -456,7 +456,7 @@ private System.Windows.Forms.Label label13; private System.Windows.Forms.TextBox Flags0TextBox; private System.Windows.Forms.Label label16; - private System.Windows.Forms.TextBox Unk00TextBox; + private System.Windows.Forms.TextBox MloRoomTextBox; private System.Windows.Forms.Label label1; private System.Windows.Forms.TextBox Hash1TextBox; private System.Windows.Forms.Label label2; diff --git a/Project/Panels/EditAudioInteriorRoomPanel.cs b/Project/Panels/EditAudioInteriorRoomPanel.cs index bf16143..c940e6c 100644 --- a/Project/Panels/EditAudioInteriorRoomPanel.cs +++ b/Project/Panels/EditAudioInteriorRoomPanel.cs @@ -48,7 +48,7 @@ namespace CodeWalker.Project.Panels populatingui = true; NameTextBox.Text = string.Empty; - Unk00TextBox.Text = string.Empty; + MloRoomTextBox.Text = string.Empty; Hash1TextBox.Text = string.Empty; Unk02TextBox.Text = string.Empty; Unk03TextBox.Text = string.Empty; @@ -75,7 +75,7 @@ namespace CodeWalker.Project.Panels var cr = CurrentRoom; NameTextBox.Text = cr.NameHash.ToString(); - Unk00TextBox.Text = cr.Unk00.ToString(); + MloRoomTextBox.Text = cr.MloRoom.ToString(); Hash1TextBox.Text = cr.Hash1.ToString(); Unk02TextBox.Text = cr.Unk02.ToString(); Unk03TextBox.Text = FloatUtil.ToString(cr.Unk03); @@ -136,7 +136,7 @@ namespace CodeWalker.Project.Panels if (CurrentRoom == null) return; uint hash = 0; - string name = Unk00TextBox.Text; + string name = MloRoomTextBox.Text; if (!uint.TryParse(name, out hash))//don't re-hash hashes { hash = JenkHash.GenHash(name); @@ -144,9 +144,9 @@ namespace CodeWalker.Project.Panels } //NameHashLabel.Text = "Hash: " + hash.ToString(); - if (CurrentRoom.Unk00 != hash) + if (CurrentRoom.MloRoom != hash) { - CurrentRoom.Unk00 = hash; + CurrentRoom.MloRoom = hash; ProjectItemChanged(); } From e4c2dddf103444ce1044fb3901a233a70c6ecb8f Mon Sep 17 00:00:00 2001 From: dexy Date: Sat, 29 Dec 2018 11:10:49 +1100 Subject: [PATCH 065/158] Updated MetaNames --- .../GameFiles/FileTypes/YmapFile.cs | 4 +- .../GameFiles/MetaTypes/MetaNames.cs | 31 +++++ .../GameFiles/MetaTypes/MetaTypes.cs | 130 +++++++++--------- .../GameFiles/MetaTypes/PsoTypes.cs | 6 +- CodeWalker.Core/World/Scenarios.cs | 20 +-- 5 files changed, 111 insertions(+), 80 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs index 8d2a6b4..ed35b44 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs @@ -191,7 +191,7 @@ namespace CodeWalker.GameFiles // { // if ((unk5.verts.Ptr > 0) && (unk5.verts.Ptr <= (ulong)Meta.DataBlocks.Length)) // { - // var indicesoffset = unk5.Unk_853977995; + // var indicesoffset = unk5.numVertsInBytes; // var datablock = Meta.DataBlocks[((int)unk5.verts.Ptr) - 1]; // if (datablock != null) // { }//vertex data... occlusion mesh? @@ -2248,7 +2248,7 @@ namespace CodeWalker.GameFiles { var vptr = _OccludeModel.verts; var dataSize = _OccludeModel.dataSize; - var indicesOffset = _OccludeModel.Unk_853977995; + var indicesOffset = _OccludeModel.numVertsInBytes; var vertexCount = indicesOffset / 12; var indexCount = (int)(dataSize - indicesOffset);// / 4; Data = MetaTypes.GetByteArray(meta, vptr, dataSize); diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs index b62df9e..f9c25a3 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs @@ -3611,6 +3611,37 @@ namespace CodeWalker.GameFiles IsDoor = 474556907, IsGlass = 1060358829, + CellDimX = 2690909759, + CellDimY = 3691675019, + //METAL_SOLID_LADDER = 1101797524, + MaxCellX = 3824598937, + MaxCellY = 3374647798, + MinCellX = 860552138, + MinCellY = 496029782, + //ZoomTransformInformations = 3304563391, //this one doesn't make sense + aSelectionSets = 2131007641, + creatureMetadataName = 2766477159, + expressionDictionaryName = 1095612811, + fadeDistanceEnd = 475013030, + fadeDistanceStart = 40301253, + fadeInTimeEnd = 120454521, + fadeInTimeStart = 1616789093, + fadeOutTimeEnd = 75548206, + fadeOutTimeStart = 1297365553, + initialiseOnCollision = 1562817888, + maxScaleZ = 147400493, + maxZOffset = 3889902555, + minScaleZ = 3913056845, + minZOffset = 2591582364, + numTris = 2337695078, + numVertsInBytes = 853977995, + //rage__spdAABB = 4084721864, + scaleBySunIntensity = 59101696, + + + + + //from rubidium / dav90 PSO XML / zonebind mpName = 2031203854, diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaTypes.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaTypes.cs index 0939b17..117605a 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaTypes.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaTypes.cs @@ -317,12 +317,12 @@ namespace CodeWalker.GameFiles ); case MetaName.rage__spdGrid2D: return new MetaStructureInfo(MetaName.rage__spdGrid2D, 894636096, 768, 64, - new MetaStructureEntryInfo_s((MetaName)860552138, 12, MetaStructureEntryDataType.SignedInt, 0, 0, 0), - new MetaStructureEntryInfo_s((MetaName)3824598937, 16, MetaStructureEntryDataType.SignedInt, 0, 0, 0), - new MetaStructureEntryInfo_s((MetaName)496029782, 20, MetaStructureEntryDataType.SignedInt, 0, 0, 0), - new MetaStructureEntryInfo_s((MetaName)3374647798, 24, MetaStructureEntryDataType.SignedInt, 0, 0, 0), - new MetaStructureEntryInfo_s((MetaName)2690909759, 44, MetaStructureEntryDataType.Float, 0, 0, 0), - new MetaStructureEntryInfo_s((MetaName)3691675019, 48, MetaStructureEntryDataType.Float, 0, 0, 0) + new MetaStructureEntryInfo_s(MetaName.MinCellX, 12, MetaStructureEntryDataType.SignedInt, 0, 0, 0), + new MetaStructureEntryInfo_s(MetaName.MaxCellX, 16, MetaStructureEntryDataType.SignedInt, 0, 0, 0), + new MetaStructureEntryInfo_s(MetaName.MinCellY, 20, MetaStructureEntryDataType.SignedInt, 0, 0, 0), + new MetaStructureEntryInfo_s(MetaName.MaxCellY, 24, MetaStructureEntryDataType.SignedInt, 0, 0, 0), + new MetaStructureEntryInfo_s(MetaName.CellDimX, 44, MetaStructureEntryDataType.Float, 0, 0, 0), + new MetaStructureEntryInfo_s(MetaName.CellDimY, 48, MetaStructureEntryDataType.Float, 0, 0, 0) ); case MetaName.CScenarioPointLookUps: return new MetaStructureInfo(MetaName.CScenarioPointLookUps, 2669361587, 768, 96, @@ -794,8 +794,8 @@ namespace CodeWalker.GameFiles new MetaStructureEntryInfo_s(MetaName.dataSize, 32, MetaStructureEntryDataType.UnsignedInt, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.verts, 40, MetaStructureEntryDataType.DataBlockPointer, 4, 3, (MetaName)2), - new MetaStructureEntryInfo_s((MetaName)853977995, 48, MetaStructureEntryDataType.UnsignedShort, 0, 0, 0), - new MetaStructureEntryInfo_s((MetaName)2337695078, 50, MetaStructureEntryDataType.UnsignedShort, 0, 0, 0), + new MetaStructureEntryInfo_s(MetaName.numVertsInBytes, 48, MetaStructureEntryDataType.UnsignedShort, 0, 0, 0), + new MetaStructureEntryInfo_s(MetaName.numTris, 50, MetaStructureEntryDataType.UnsignedShort, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.flags, 52, MetaStructureEntryDataType.UnsignedInt, 0, 0, 0) ); case MetaName.CMloArchetypeDef: @@ -970,10 +970,10 @@ namespace CodeWalker.GameFiles return new MetaStructureInfo(MetaName.CExtensionDefExpression, 24441706, 1024, 48, new MetaStructureEntryInfo_s(MetaName.name, 8, MetaStructureEntryDataType.Hash, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.offsetPosition, 16, MetaStructureEntryDataType.Float_XYZ, 0, 0, 0), - new MetaStructureEntryInfo_s((MetaName)1095612811, 32, MetaStructureEntryDataType.Hash, 0, 0, 0), + new MetaStructureEntryInfo_s(MetaName.expressionDictionaryName, 32, MetaStructureEntryDataType.Hash, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.expressionName, 36, MetaStructureEntryDataType.Hash, 0, 0, 0), - new MetaStructureEntryInfo_s((MetaName)2766477159, 40, MetaStructureEntryDataType.Hash, 0, 0, 0), - new MetaStructureEntryInfo_s((MetaName)1562817888, 44, MetaStructureEntryDataType.Boolean, 0, 0, 0) + new MetaStructureEntryInfo_s(MetaName.creatureMetadataName, 40, MetaStructureEntryDataType.Hash, 0, 0, 0), + new MetaStructureEntryInfo_s(MetaName.initialiseOnCollision, 44, MetaStructureEntryDataType.Boolean, 0, 0, 0) ); case MetaName.CExtensionDefLightShaft: return new MetaStructureInfo(MetaName.CExtensionDefLightShaft, 2526429398, 1024, 176, @@ -986,12 +986,12 @@ namespace CodeWalker.GameFiles new MetaStructureEntryInfo_s(MetaName.direction, 96, MetaStructureEntryDataType.Float_XYZ, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.directionAmount, 112, MetaStructureEntryDataType.Float, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.length, 116, MetaStructureEntryDataType.Float, 0, 0, 0), - new MetaStructureEntryInfo_s((MetaName)1616789093, 120, MetaStructureEntryDataType.Float, 0, 0, 0), - new MetaStructureEntryInfo_s((MetaName)120454521, 124, MetaStructureEntryDataType.Float, 0, 0, 0), - new MetaStructureEntryInfo_s((MetaName)1297365553, 128, MetaStructureEntryDataType.Float, 0, 0, 0), - new MetaStructureEntryInfo_s((MetaName)75548206, 132, MetaStructureEntryDataType.Float, 0, 0, 0), - new MetaStructureEntryInfo_s((MetaName)40301253, 136, MetaStructureEntryDataType.Float, 0, 0, 0), - new MetaStructureEntryInfo_s((MetaName)475013030, 140, MetaStructureEntryDataType.Float, 0, 0, 0), + new MetaStructureEntryInfo_s(MetaName.fadeInTimeStart, 120, MetaStructureEntryDataType.Float, 0, 0, 0), + new MetaStructureEntryInfo_s(MetaName.fadeInTimeEnd, 124, MetaStructureEntryDataType.Float, 0, 0, 0), + new MetaStructureEntryInfo_s(MetaName.fadeOutTimeStart, 128, MetaStructureEntryDataType.Float, 0, 0, 0), + new MetaStructureEntryInfo_s(MetaName.fadeOutTimeEnd, 132, MetaStructureEntryDataType.Float, 0, 0, 0), + new MetaStructureEntryInfo_s(MetaName.fadeDistanceStart, 136, MetaStructureEntryDataType.Float, 0, 0, 0), + new MetaStructureEntryInfo_s(MetaName.fadeDistanceEnd, 140, MetaStructureEntryDataType.Float, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.color, 144, MetaStructureEntryDataType.UnsignedInt, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.intensity, 148, MetaStructureEntryDataType.Float, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.flashiness, 152, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0), @@ -999,7 +999,7 @@ namespace CodeWalker.GameFiles new MetaStructureEntryInfo_s(MetaName.densityType, 160, MetaStructureEntryDataType.IntEnum, 0, 0, (MetaName)1931949281), new MetaStructureEntryInfo_s(MetaName.volumeType, 164, MetaStructureEntryDataType.IntEnum, 0, 0, (MetaName)2266515059), new MetaStructureEntryInfo_s(MetaName.softness, 168, MetaStructureEntryDataType.Float, 0, 0, 0), - new MetaStructureEntryInfo_s((MetaName)59101696, 172, MetaStructureEntryDataType.Boolean, 0, 0, 0) + new MetaStructureEntryInfo_s(MetaName.scaleBySunIntensity, 172, MetaStructureEntryDataType.Boolean, 0, 0, 0) ); case MetaName.VECTOR3: return new MetaStructureInfo(MetaName.VECTOR3, 2751397072, 512, 12, @@ -1026,7 +1026,7 @@ namespace CodeWalker.GameFiles new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, (MetaName)3538495220), new MetaStructureEntryInfo_s((MetaName)3796409423, 16, MetaStructureEntryDataType.Array, 0, 6, 0), new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, (MetaName)253191135), - new MetaStructureEntryInfo_s((MetaName)2131007641, 32, MetaStructureEntryDataType.Array, 0, 8, 0), + new MetaStructureEntryInfo_s(MetaName.aSelectionSets, 32, MetaStructureEntryDataType.Array, 0, 8, 0), new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, MetaName.CComponentInfo), new MetaStructureEntryInfo_s(MetaName.compInfos, 48, MetaStructureEntryDataType.Array, 0, 10, 0), new MetaStructureEntryInfo_s(MetaName.propInfo, 64, MetaStructureEntryDataType.Structure, 0, 0, (MetaName)2858946626), @@ -1210,10 +1210,10 @@ namespace CodeWalker.GameFiles new MetaStructureEntryInfo_s(MetaName.spacing, 40, MetaStructureEntryDataType.Float, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.minScale, 44, MetaStructureEntryDataType.Float, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.maxScale, 48, MetaStructureEntryDataType.Float, 0, 0, 0), - new MetaStructureEntryInfo_s((MetaName)3913056845, 52, MetaStructureEntryDataType.Float, 0, 0, 0), - new MetaStructureEntryInfo_s((MetaName)147400493, 56, MetaStructureEntryDataType.Float, 0, 0, 0), - new MetaStructureEntryInfo_s((MetaName)2591582364, 60, MetaStructureEntryDataType.Float, 0, 0, 0), - new MetaStructureEntryInfo_s((MetaName)3889902555, 64, MetaStructureEntryDataType.Float, 0, 0, 0), + new MetaStructureEntryInfo_s(MetaName.minScaleZ, 52, MetaStructureEntryDataType.Float, 0, 0, 0), + new MetaStructureEntryInfo_s(MetaName.maxScaleZ, 56, MetaStructureEntryDataType.Float, 0, 0, 0), + new MetaStructureEntryInfo_s(MetaName.minZOffset, 60, MetaStructureEntryDataType.Float, 0, 0, 0), + new MetaStructureEntryInfo_s(MetaName.maxZOffset, 64, MetaStructureEntryDataType.Float, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.objectHash, 68, MetaStructureEntryDataType.UnsignedInt, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.flags, 72, MetaStructureEntryDataType.UnsignedInt, 0, 0, 0) ); @@ -2848,8 +2848,8 @@ namespace CodeWalker.GameFiles public uint dataSize { get; set; } //32 32: UnsignedInt: 0: dataSize//2442753371 public uint Unused2 { get; set; }//36 public DataBlockPointer verts { get; set; } //40 40: DataBlockPointer: 2: verts - public ushort Unk_853977995 { get; set; } //48 48: UnsignedShort: 0: 853977995 - public ushort Unk_2337695078 { get; set; } //50 50: UnsignedShort: 0: 2337695078 + public ushort numVertsInBytes { get; set; } //48 48: UnsignedShort: 0: numVertsInBytes + public ushort numTris { get; set; } //50 50: UnsignedShort: 0: numTris public uint flags { get; set; } //52 52: UnsignedInt: 0: flags public uint Unused3 { get; set; }//56 public uint Unused4 { get; set; }//60 @@ -3429,10 +3429,10 @@ namespace CodeWalker.GameFiles public uint Unused2 { get; set; }//12 public Vector3 offsetPosition { get; set; } //16 16: Float_XYZ: 0: offsetPosition public float Unused3 { get; set; }//28 - public MetaHash Unk_1095612811 { get; set; } //32 32: Hash: 0: 1095612811 + public MetaHash expressionDictionaryName { get; set; } //32 32: Hash: 0: expressionDictionaryName public MetaHash expressionName { get; set; } //36 36: Hash: 0: expressionName - public MetaHash Unk_2766477159 { get; set; } //40 40: Hash: 0: 2766477159 - public byte Unk_1562817888 { get; set; } //44 44: Boolean: 0: 1562817888 + public MetaHash creatureMetadataName { get; set; } //40 40: Hash: 0: creatureMetadataName + public byte initialiseOnCollision { get; set; } //44 44: Boolean: 0: initialiseOnCollision public byte Unused4 { get; set; }//45 public ushort Unused5 { get; set; }//46 @@ -3491,12 +3491,12 @@ namespace CodeWalker.GameFiles public float Unused08 { get; set; }//108 public float directionAmount { get; set; } //112 112: Float: 0: 1441249296 public float length { get; set; } //116 116: Float: 0: length - public float Unk_1616789093 { get; set; } //120 120: Float: 0: 1616789093 - public float Unk_120454521 { get; set; } //124 124: Float: 0: 120454521 - public float Unk_1297365553 { get; set; } //128 128: Float: 0: 1297365553 - public float Unk_75548206 { get; set; } //132 132: Float: 0: 75548206 - public float Unk_40301253 { get; set; } //136 136: Float: 0: 40301253 - public float Unk_475013030 { get; set; } //140 140: Float: 0: 475013030 + public float fadeInTimeStart { get; set; } //120 120: Float: 0: fadeInTimeStart + public float fadeInTimeEnd { get; set; } //124 124: Float: 0: fadeInTimeEnd + public float fadeOutTimeStart { get; set; } //128 128: Float: 0: fadeOutTimeStart + public float fadeOutTimeEnd { get; set; } //132 132: Float: 0: fadeOutTimeEnd + public float fadeDistanceStart { get; set; } //136 136: Float: 0: fadeDistanceStart + public float fadeDistanceEnd { get; set; } //140 140: Float: 0: fadeDistanceEnd public uint color { get; set; } //144 144: UnsignedInt: 0: color public float intensity { get; set; } //148 148: Float: 0: intensity public byte flashiness { get; set; } //152 152: UnsignedByte: 0: 3829693202 @@ -3506,7 +3506,7 @@ namespace CodeWalker.GameFiles public Unk_1931949281 densityType { get; set; } //160 160: IntEnum: 1931949281: densityType//235100599 public Unk_2266515059 volumeType { get; set; } //164 164: IntEnum: 2266515059: volumeType//4021175589 public float softness { get; set; } //168 168: Float: 0: softness//187712958 - public byte Unk_59101696 { get; set; } //172 172: Boolean: 0: 59101696 + public byte scaleBySunIntensity { get; set; } //172 172: Boolean: 0: scaleBySunIntensity public byte Unused11 { get; set; }//173 public ushort Unused12 { get; set; }//174 @@ -3824,16 +3824,16 @@ namespace CodeWalker.GameFiles public uint Unused2 { get; set; }//12 public Vector3 offsetPosition { get; set; } //16 16: Float_XYZ: 0: offsetPosition public float Unused3 { get; set; }//28 - public float radiusInner { get; set; } //32 32: Float: 0: radiusInner//406390660 - public float radiusOuter { get; set; } //36 36: Float: 0: radiusOuter//1814053978 + public float radiusInner { get; set; } //32 32: Float: 0: radiusInner + public float radiusOuter { get; set; } //36 36: Float: 0: radiusOuter public float spacing { get; set; } //40 40: Float: 0: spacing - public float minScale { get; set; } //44 44: Float: 0: minScale//3662913353 - public float maxScale { get; set; } //48 48: Float: 0: maxScale//803384552 - public float Unk_3913056845 { get; set; } //52 52: Float: 0: 3913056845 - public float Unk_147400493 { get; set; } //56 56: Float: 0: 147400493 - public float Unk_2591582364 { get; set; } //60 60: Float: 0: 2591582364 - public float Unk_3889902555 { get; set; } //64 64: Float: 0: 3889902555 - public uint objectHash { get; set; } //68 68: UnsignedInt: 0: objectHash//1951307499 + public float minScale { get; set; } //44 44: Float: 0: minScale + public float maxScale { get; set; } //48 48: Float: 0: maxScale + public float minScaleZ { get; set; } //52 52: Float: 0: minScaleZ + public float maxScaleZ { get; set; } //56 56: Float: 0: maxScaleZ + public float minZOffset { get; set; } //60 60: Float: 0: minZOffset + public float maxZOffset { get; set; } //64 64: Float: 0: maxZOffset + public uint objectHash { get; set; } //68 68: UnsignedInt: 0: objectHash public uint flags { get; set; } //72 72: UnsignedInt: 0: flags public uint Unused4 { get; set; }//76 @@ -3987,16 +3987,16 @@ namespace CodeWalker.GameFiles public uint Unused0 { get; set; }//0 public uint Unused1 { get; set; }//4 public uint Unused2 { get; set; }//8 - public int Unk_MinX_860552138 { get; set; } //12 12: SignedInt: 0: 860552138 //MIN X - public int Unk_MaxX_3824598937 { get; set; } //16 16: SignedInt: 0: 3824598937 //MAX X - public int Unk_MinY_496029782 { get; set; } //20 20: SignedInt: 0: 496029782 //MIN Y - public int Unk_MaxY_3374647798 { get; set; } //24 24: SignedInt: 0: 3374647798 //MAX Y + public int MinCellX { get; set; } //12 12: SignedInt: 0: MinCellX //MIN X + public int MaxCellX { get; set; } //16 16: SignedInt: 0: MaxCellX //MAX X + public int MinCellY { get; set; } //20 20: SignedInt: 0: MinCellY //MIN Y + public int MaxCellY { get; set; } //24 24: SignedInt: 0: MaxCellY //MAX Y public uint Unused3 { get; set; }//28 public uint Unused4 { get; set; }//32 public uint Unused5 { get; set; }//36 public uint Unused6 { get; set; }//40 - public float Unk_X_2690909759 { get; set; } //44 44: Float: 0: 2690909759 //grid scale X (cell size) - public float Unk_Y_3691675019 { get; set; } //48 48: Float: 0: 3691675019 //grid scale Y (cell size) + public float CellDimX { get; set; } //44 44: Float: 0: CellDimX //grid scale X (cell size) + public float CellDimY { get; set; } //48 48: Float: 0: CellDimY //grid scale Y (cell size) public uint Unused7 { get; set; }//52 public uint Unused8 { get; set; }//56 public uint Unused9 { get; set; }//60 @@ -4006,45 +4006,45 @@ namespace CodeWalker.GameFiles { get { - return new Vector2I((Unk_MaxX_3824598937 - Unk_MinX_860552138)+1, (Unk_MaxY_3374647798 - Unk_MinY_496029782)+1); + return new Vector2I((MaxCellX - MinCellX)+1, (MaxCellY - MinCellY)+1); } } public Vector2 Scale { get { - return new Vector2(Unk_X_2690909759, Unk_Y_3691675019); + return new Vector2(CellDimX, CellDimY); } set { - Unk_X_2690909759 = value.X; - Unk_Y_3691675019 = value.Y; + CellDimX = value.X; + CellDimY = value.Y; } } public Vector2 Min { get { - return new Vector2(Unk_MinX_860552138, Unk_MinY_496029782) * Scale; + return new Vector2(MinCellX, MinCellY) * Scale; } set { var gv = value / Scale; - Unk_MinX_860552138 = (int)Math.Floor(gv.X); - Unk_MinY_496029782 = (int)Math.Floor(gv.Y); + MinCellX = (int)Math.Floor(gv.X); + MinCellY = (int)Math.Floor(gv.Y); } } public Vector2 Max { get { - return new Vector2(Unk_MaxX_3824598937, Unk_MaxY_3374647798) * Scale; + return new Vector2(MaxCellX, MaxCellY) * Scale; } set { var gv = value / Scale; - Unk_MaxX_3824598937 = (int)Math.Floor(gv.X); - Unk_MaxY_3374647798 = (int)Math.Floor(gv.Y); + MaxCellX = (int)Math.Floor(gv.X); + MaxCellY = (int)Math.Floor(gv.Y); } } } @@ -4162,10 +4162,10 @@ namespace CodeWalker.GameFiles //if (Unk_3844724227 != null) //{ // var grid = _Data.AccelGrid; - // var minx = grid.Unk_MinX_860552138; - // var maxx = grid.Unk_MaxX_3824598937; - // var miny = grid.Unk_MinY_496029782; - // var maxy = grid.Unk_MaxY_3374647798; + // var minx = grid.MinCellX; + // var maxx = grid.MaxCellX; + // var miny = grid.MinCellY; + // var maxy = grid.MaxCellY; // var len = Unk_3844724227.Length; // var calclen = ((maxx - minx) + 1) * ((maxy - miny) + 1); // if (len != calclen) @@ -5976,7 +5976,7 @@ namespace CodeWalker.GameFiles public byte Unk_315291935 { get; set; } //3 3: Boolean: 0: 315291935 public ArrayOfBytes12 Unk_2996560424 { get; set; } //4 4: ArrayOfBytes: 12: 2996560424 public Array_Structure Unk_3796409423 { get; set; } //16 16: Array: 0: 3796409423 {0: Structure: 3538495220: 256} - public Array_Structure Unk_2131007641 { get; set; } //32 32: Array: 0: 2131007641 {0: Structure: 253191135: 256} + public Array_Structure aSelectionSets { get; set; } //32 32: Array: 0: aSelectionSets {0: Structure: 253191135: 256} public Array_Structure compInfos { get; set; } //48 48: Array: 0: compInfos//592652859 {0: Structure: CComponentInfo//1866571721: 256} public Unk_2858946626 propInfo { get; set; } //64 64: Structure: 2858946626: propInfo//2240851416 public MetaHash dlcName { get; set; } //104 104: Hash: 0: dlcName diff --git a/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs b/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs index 8716747..c31cf4b 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs @@ -13213,7 +13213,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3538495220), new PsoStructureEntryInfo((MetaName)3796409423, PsoDataType.Array, 16, 0, (MetaName)6), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)253191135), - new PsoStructureEntryInfo((MetaName)2131007641, PsoDataType.Array, 32, 0, (MetaName)8), + new PsoStructureEntryInfo(MetaName.aSelectionSets, PsoDataType.Array, 32, 0, (MetaName)8), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CComponentInfo), new PsoStructureEntryInfo(MetaName.compInfos, PsoDataType.Array, 48, 0, (MetaName)10), new PsoStructureEntryInfo(MetaName.propInfo, PsoDataType.Structure, 64, 0, (MetaName)2858946626), @@ -14063,8 +14063,8 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.dataSize, PsoDataType.UInt, 32, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UByte, 0, 0, 0), new PsoStructureEntryInfo(MetaName.verts, PsoDataType.Array, 40, 6, (MetaName)2097155), - new PsoStructureEntryInfo((MetaName)853977995, PsoDataType.UShort, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2337695078, PsoDataType.UShort, 50, 0, 0) + new PsoStructureEntryInfo(MetaName.numVertsInBytes, PsoDataType.UShort, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.numTris, PsoDataType.UShort, 50, 0, 0) ); case MetaName.CTimeCycleModifier: return new PsoStructureInfo(MetaName.CTimeCycleModifier, 0, 0, 64, diff --git a/CodeWalker.Core/World/Scenarios.cs b/CodeWalker.Core/World/Scenarios.cs index 86be53b..b5e8825 100644 --- a/CodeWalker.Core/World/Scenarios.cs +++ b/CodeWalker.Core/World/Scenarios.cs @@ -491,10 +491,10 @@ namespace CodeWalker.World //if (r.Unk_3844724227 != null) //visualise AccelGrid... //{ // var grid = r._Data.AccelGrid; - // var minx = grid.Unk_MinX_860552138; - // var maxx = grid.Unk_MaxX_3824598937; - // var miny = grid.Unk_MinY_496029782; - // var maxy = grid.Unk_MaxY_3374647798; + // var minx = grid.MinCellX; + // var maxx = grid.MaxCellX; + // var miny = grid.MinCellY; + // var maxy = grid.MaxCellY; // var cntx = (maxx - minx) + 1; // var cnty = (maxy - miny) + 1; // var calclen = cntx * cnty; //==r.Unk_3844724227.Length; @@ -1016,12 +1016,12 @@ namespace CodeWalker.World rage__spdGrid2D grid = new rage__spdGrid2D(); - grid.Unk_X_2690909759 = cellsize; - grid.Unk_Y_3691675019 = cellsize; - grid.Unk_MinX_860552138 = imin.X; - grid.Unk_MinY_496029782 = imin.Y; - grid.Unk_MaxX_3824598937 = imax.X; - grid.Unk_MaxY_3374647798 = imax.Y; + grid.CellDimX = cellsize; + grid.CellDimY = cellsize; + grid.MinCellX = imin.X; + grid.MinCellY = imin.Y; + grid.MaxCellX = imax.X; + grid.MaxCellY = imax.Y; Region._Data.AccelGrid = grid; //store the reordered points. From 9dde38c930fc064a6e0ceed2d622ba253400e9b1 Mon Sep 17 00:00:00 2001 From: dexy Date: Sun, 6 Jan 2019 05:04:33 +1100 Subject: [PATCH 066/158] HD textures (WIP), vehicles.meta gtxd loading --- CodeWalker.Core/CodeWalker.Core.csproj | 1 + .../GameFiles/FileTypes/GtxdFile.cs | 22 +- .../GameFiles/FileTypes/VehiclesFile.cs | 91 +++++ CodeWalker.Core/GameFiles/GameFile.cs | 1 + CodeWalker.Core/GameFiles/GameFileCache.cs | 136 +++---- .../GameFiles/Resources/Texture.cs | 33 +- Forms/ModelForm.cs | 9 +- Rendering/Renderable.cs | 81 ++-- Rendering/Renderer.cs | 352 +++++++++++------- Rendering/Shaders/BasicShader.cs | 8 + Rendering/Shaders/TerrainShader.cs | 8 + WorldForm.Designer.cs | 36 +- WorldForm.cs | 5 + WorldForm.resx | 48 +-- 14 files changed, 515 insertions(+), 316 deletions(-) create mode 100644 CodeWalker.Core/GameFiles/FileTypes/VehiclesFile.cs diff --git a/CodeWalker.Core/CodeWalker.Core.csproj b/CodeWalker.Core/CodeWalker.Core.csproj index e1ee816..c0142de 100644 --- a/CodeWalker.Core/CodeWalker.Core.csproj +++ b/CodeWalker.Core/CodeWalker.Core.csproj @@ -60,6 +60,7 @@ + diff --git a/CodeWalker.Core/GameFiles/FileTypes/GtxdFile.cs b/CodeWalker.Core/GameFiles/FileTypes/GtxdFile.cs index 53dcaf3..4c47102 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/GtxdFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/GtxdFile.cs @@ -15,7 +15,7 @@ namespace CodeWalker.GameFiles public RbfFile Rbf { get; set; } - public Dictionary CMapParentTxds { get; set; } + public Dictionary TxdRelationships { get; set; } @@ -46,7 +46,7 @@ namespace CodeWalker.GameFiles if (rbfstruct.Name == "CMapParentTxds") { - LoadMapParentTxds(rbfstruct); + LoadTxdRelationships(rbfstruct); } Loaded = true; @@ -68,7 +68,7 @@ namespace CodeWalker.GameFiles xml = xml.Remove(0, bom.Length); } - LoadMapParentTxds(xml); + LoadTxdRelationships(xml); Loaded = true; } @@ -76,10 +76,10 @@ namespace CodeWalker.GameFiles } - private void LoadMapParentTxds(RbfStructure rbfstruct) + private void LoadTxdRelationships(RbfStructure rbfstruct) { - CMapParentTxds = new Dictionary(); + TxdRelationships = new Dictionary(); //StringBuilder sblist = new StringBuilder(); foreach (var child in rbfstruct.Children) { @@ -118,9 +118,9 @@ namespace CodeWalker.GameFiles } if ((!string.IsNullOrEmpty(parentstr)) && (!string.IsNullOrEmpty(childstr))) { - if (!CMapParentTxds.ContainsKey(childstr)) + if (!TxdRelationships.ContainsKey(childstr)) { - CMapParentTxds.Add(childstr, parentstr); + TxdRelationships.Add(childstr, parentstr); } else { @@ -140,13 +140,13 @@ namespace CodeWalker.GameFiles - private void LoadMapParentTxds(string xml) + private void LoadTxdRelationships(string xml) { XmlDocument xmldoc = new XmlDocument(); xmldoc.LoadXml(xml); //maybe better load xml.ToLower() and use "cmapparenttxds/txdrelationships/item" as xpath? XmlNodeList items = xmldoc.SelectNodes("CMapParentTxds/txdRelationships/Item | CMapParentTxds/txdRelationships/item"); - CMapParentTxds = new Dictionary(); + TxdRelationships = new Dictionary(); for (int i = 0; i < items.Count; i++) { string parentstr = Xml.GetChildInnerText(items[i], "parent"); @@ -154,9 +154,9 @@ namespace CodeWalker.GameFiles if ((!string.IsNullOrEmpty(parentstr)) && (!string.IsNullOrEmpty(childstr))) { - if (!CMapParentTxds.ContainsKey(childstr)) + if (!TxdRelationships.ContainsKey(childstr)) { - CMapParentTxds.Add(childstr, parentstr); + TxdRelationships.Add(childstr, parentstr); } } } diff --git a/CodeWalker.Core/GameFiles/FileTypes/VehiclesFile.cs b/CodeWalker.Core/GameFiles/FileTypes/VehiclesFile.cs new file mode 100644 index 0000000..8b3ad01 --- /dev/null +++ b/CodeWalker.Core/GameFiles/FileTypes/VehiclesFile.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml; + +namespace CodeWalker.GameFiles +{ + public class VehiclesFile : GameFile, PackedFile + { + + public RbfFile Rbf { get; set; } + + + public Dictionary TxdRelationships { get; set; } + + + + + public VehiclesFile() : base(null, GameFileType.Vehicles) + { + } + public VehiclesFile(RpfFileEntry entry) : base(entry, GameFileType.Vehicles) + { + } + + + + public void Load(byte[] data, RpfFileEntry entry) + { + RpfFileEntry = entry; + Name = entry.Name; + FilePath = Name; + + + if (entry.NameLower.EndsWith(".meta")) + { + //required for update\x64\dlcpacks\mpheist\dlc.rpf\common\data\gtxd.meta and update\x64\dlcpacks\mpluxe\dlc.rpf\common\data\gtxd.meta + string bom = Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble()); + string xml = Encoding.UTF8.GetString(data); + + if (xml.StartsWith(bom, StringComparison.Ordinal)) + { + xml = xml.Remove(0, bom.Length); + } + + XmlDocument xmldoc = new XmlDocument(); + xmldoc.LoadXml(xml); + + LoadVehicles(xmldoc); + + LoadTxdRelationships(xmldoc); + + Loaded = true; + } + } + + + private void LoadVehicles(XmlDocument xmldoc) + { + XmlNodeList items = xmldoc.SelectNodes("CVehicleModelInfo__InitDataList/InitDatas/Item | CVehicleModelInfo__InitDataList/InitDatas/item"); + for (int i = 0; i < items.Count; i++) + { + //TODO... + } + } + + private void LoadTxdRelationships(XmlDocument xmldoc) + { + XmlNodeList items = xmldoc.SelectNodes("CVehicleModelInfo__InitDataList/txdRelationships/Item | CVehicleModelInfo__InitDataList/txdRelationships/item"); + + TxdRelationships = new Dictionary(); + for (int i = 0; i < items.Count; i++) + { + string parentstr = Xml.GetChildInnerText(items[i], "parent"); + string childstr = Xml.GetChildInnerText(items[i], "child"); + + if ((!string.IsNullOrEmpty(parentstr)) && (!string.IsNullOrEmpty(childstr))) + { + if (!TxdRelationships.ContainsKey(childstr)) + { + TxdRelationships.Add(childstr, parentstr); + } + } + } + } + + + } +} diff --git a/CodeWalker.Core/GameFiles/GameFile.cs b/CodeWalker.Core/GameFiles/GameFile.cs index 0a82198..44806f1 100644 --- a/CodeWalker.Core/GameFiles/GameFile.cs +++ b/CodeWalker.Core/GameFiles/GameFile.cs @@ -70,6 +70,7 @@ namespace CodeWalker.GameFiles Ywr = 14, Yvr = 15, Gtxd = 16, + Vehicles = 17, } diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index 2e38f4e..95a87c8 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -27,7 +27,8 @@ namespace CodeWalker.GameFiles private volatile bool archetypesLoaded = false; private Dictionary archetypeDict = new Dictionary(); private Dictionary textureLookup = new Dictionary(); - private Dictionary textureParents; + private Dictionary textureParents; + private Dictionary hdtexturelookup; private object updateSyncRoot = new object(); private object requestSyncRoot = new object(); @@ -132,6 +133,7 @@ namespace CodeWalker.GameFiles mainCache.Clear(); textureLookup.Clear(); + GameFile queueclear; while (requestQueue.TryPop(out queueclear)) { } //empty the old queue out... @@ -958,6 +960,7 @@ namespace CodeWalker.GameFiles private void InitManifestDicts() { AllManifests = new List(); + hdtexturelookup = new Dictionary(); foreach (RpfFile file in ActiveMapRpfFiles.Values) //RpfMan.BaseRpfs) { if (file.AllEntries == null) continue; @@ -985,6 +988,19 @@ namespace CodeWalker.GameFiles { } else { } + + + if (ymffile.HDTxdAssetBindings != null) + { + for (int i = 0; i < ymffile.HDTxdAssetBindings.Length; i++) + { + var b = ymffile.HDTxdAssetBindings[i]; + var targetasset = JenkHash.GenHash(b.targetAsset.ToString().ToLowerInvariant()); + var hdtxd = JenkHash.GenHash(b.HDTxd.ToString().ToLowerInvariant()); + hdtexturelookup[targetasset] = hdtxd; + } + } + } } @@ -996,70 +1012,49 @@ namespace CodeWalker.GameFiles private void InitGtxds() { - Dictionary parentTxds = new Dictionary(); + var parentTxds = new Dictionary(); IEnumerable rpfs = PreloadedMode ? AllRpfs : (IEnumerable)ActiveMapRpfFiles.Values; - foreach (RpfFile file in rpfs) + var addTxdRelationships = new Action>((from) => { - if (file.AllEntries == null) continue; - foreach (RpfEntry entry in file.AllEntries) + foreach (var kvp in from) { - try + uint chash = JenkHash.GenHash(kvp.Key.ToLowerInvariant()); + uint phash = JenkHash.GenHash(kvp.Value.ToLowerInvariant()); + if (!parentTxds.ContainsKey(chash)) { - if ((entry.NameLower == "gtxd.ymt") || (entry.NameLower == "gtxd.meta")) - { - GtxdFile ymt = RpfMan.GetFile(entry); - if (ymt.CMapParentTxds != null) - { - foreach (var kvp in ymt.CMapParentTxds) - { - uint chash = JenkHash.GenHash(kvp.Key.ToLowerInvariant()); - uint phash = JenkHash.GenHash(kvp.Value.ToLowerInvariant()); - if (!parentTxds.ContainsKey(chash)) - { - parentTxds.Add(chash, phash); - } - else - { - } - } - } - } + parentTxds.Add(chash, phash); } - catch (Exception ex) + else { - string errstr = entry.Path + "\n" + ex.ToString(); - ErrorLog(errstr); } } - } + }); - if (EnableDlc) + var addRpfTxdRelationships = new Action>((from) => { - foreach (var dlcfile in DlcActiveRpfs) + foreach (RpfFile file in from) { - foreach (RpfEntry entry in dlcfile.AllEntries) + if (file.AllEntries == null) continue; + foreach (RpfEntry entry in file.AllEntries) { try { - if (entry.NameLower == "gtxd.meta") + if ((entry.NameLower == "gtxd.ymt") || (entry.NameLower == "gtxd.meta")) { GtxdFile ymt = RpfMan.GetFile(entry); - if (ymt.CMapParentTxds != null) + if (ymt.TxdRelationships != null) { - foreach (var kvp in ymt.CMapParentTxds) - { - uint chash = JenkHash.GenHash(kvp.Key.ToLowerInvariant()); - uint phash = JenkHash.GenHash(kvp.Value.ToLowerInvariant()); - if (!parentTxds.ContainsKey(chash)) - { - parentTxds.Add(chash, phash); - } - else - { - } - } + addTxdRelationships(ymt.TxdRelationships); + } + } + else if (entry.NameLower == "vehicles.meta") + { + VehiclesFile vf = RpfMan.GetFile(entry); + if (vf.TxdRelationships != null) + { + addTxdRelationships(vf.TxdRelationships); } } } @@ -1070,6 +1065,16 @@ namespace CodeWalker.GameFiles } } } + + }); + + + addRpfTxdRelationships(rpfs); + + + if (EnableDlc) + { + addRpfTxdRelationships(DlcActiveRpfs); } @@ -1078,7 +1083,7 @@ namespace CodeWalker.GameFiles - //ensure global texture dicts: + //ensure resident global texture dicts: YtdFile ytd1 = new YtdFile(GetYtdEntry(JenkHash.GenHash("mapdetail"))); LoadFile(ytd1); AddTextureLookups(ytd1); @@ -1087,17 +1092,6 @@ namespace CodeWalker.GameFiles LoadFile(ytd2); AddTextureLookups(ytd2); - YtdFile ytd3 = new YtdFile(GetYtdEntry(JenkHash.GenHash("vehshare_worn"))); - LoadFile(ytd3); - AddTextureLookups(ytd3); - - YtdFile ytd4 = new YtdFile(GetYtdEntry(JenkHash.GenHash("vehshare_army"))); - LoadFile(ytd4); - AddTextureLookups(ytd4); - - YtdFile ytd5 = new YtdFile(GetYtdEntry(JenkHash.GenHash("vehshare_truck"))); - LoadFile(ytd5); - AddTextureLookups(ytd5); } @@ -1435,7 +1429,7 @@ namespace CodeWalker.GameFiles { lock (updateSyncRoot) { - lock (textureSyncRoot) + //lock (textureSyncRoot) { SelectedDlc = dlc; EnableDlc = enable; @@ -1459,7 +1453,7 @@ namespace CodeWalker.GameFiles { lock (updateSyncRoot) { - lock (textureSyncRoot) + //lock (textureSyncRoot) { EnableMods = enable; RpfMan.EnableMods = enable; @@ -1901,7 +1895,7 @@ namespace CodeWalker.GameFiles break; case GameFileType.Ytd: req.Loaded = LoadFile(req as YtdFile); - if (req.Loaded) AddTextureLookups(req as YtdFile); + //if (req.Loaded) AddTextureLookups(req as YtdFile); break; case GameFileType.Ymap: YmapFile y = req as YmapFile; @@ -1983,7 +1977,7 @@ namespace CodeWalker.GameFiles } public YtdFile TryGetParentYtd(uint hash) { - uint phash; + MetaHash phash; if(textureParents.TryGetValue(hash, out phash)) { return GetYtd(phash); @@ -1992,19 +1986,31 @@ namespace CodeWalker.GameFiles } public uint TryGetParentYtdHash(uint hash) { - uint phash = 0; + MetaHash phash = 0; textureParents.TryGetValue(hash, out phash); return phash; } + public uint TryGetHDTextureHash(uint txdhash) + { + MetaHash hdhash = 0; + if (hdtexturelookup?.TryGetValue(txdhash, out hdhash) ?? false) + { + return hdhash; + } + return txdhash; + } public Texture TryFindTextureInParent(uint texhash, uint txdhash) { Texture tex = null; var ytd = TryGetParentYtd(txdhash); - while ((ytd != null) && (ytd.Loaded) && (ytd.TextureDict != null) && (tex == null)) + while ((ytd != null) && (tex == null)) { - tex = ytd.TextureDict.Lookup(texhash); + if (ytd.Loaded && (ytd.TextureDict != null)) + { + tex = ytd.TextureDict.Lookup(texhash); + } if (tex == null) { ytd = TryGetParentYtd(ytd.Key.Hash); diff --git a/CodeWalker.Core/GameFiles/Resources/Texture.cs b/CodeWalker.Core/GameFiles/Resources/Texture.cs index fba5a30..60b12aa 100644 --- a/CodeWalker.Core/GameFiles/Resources/Texture.cs +++ b/CodeWalker.Core/GameFiles/Resources/Texture.cs @@ -29,6 +29,7 @@ namespace CodeWalker.GameFiles public ResourcePointerList64 Textures { get; set; } public Dictionary Dict { get; set; } + public long MemoryUsage { get @@ -81,7 +82,7 @@ namespace CodeWalker.GameFiles dict[hash] = tex; } } - Dict = new Dictionary(dict); + Dict = dict;// new Dictionary(dict); } /// @@ -108,21 +109,6 @@ namespace CodeWalker.GameFiles }; } - public Dictionary GetDictionary() - { - Dictionary td = new Dictionary(); - if ((Textures != null) && (Textures.data_items != null)) - { - var texs = Textures.data_items; - var hashes = TextureNameHashes; - for (int i = 0; (i < texs.Length) && (i < hashes.Length); i++) - { - td.Add(hashes[i], texs[i]); - } - } - return td; - } - public Texture Lookup(uint hash) { Texture tex = null; @@ -132,6 +118,21 @@ namespace CodeWalker.GameFiles } return tex; } + + //public Dictionary GetDictionary() + //{ + // Dictionary td = new Dictionary(); + // if ((Textures != null) && (Textures.data_items != null)) + // { + // var texs = Textures.data_items; + // var hashes = TextureNameHashes; + // for (int i = 0; (i < texs.Length) && (i < hashes.Length); i++) + // { + // td.Add(hashes[i], texs[i]); + // } + // } + // return td; + //} } [TypeConverter(typeof(ExpandableObjectConverter))] public class TextureBase : ResourceSystemBlock diff --git a/Forms/ModelForm.cs b/Forms/ModelForm.cs index d95e9d4..8ee1146 100644 --- a/Forms/ModelForm.cs +++ b/Forms/ModelForm.cs @@ -519,7 +519,14 @@ namespace CodeWalker.Forms { var f = Yft.Fragment; - hash = Yft?.RpfFileEntry?.ShortNameHash ?? 0; + hash = Yft.RpfFileEntry?.ShortNameHash ?? 0; + + var namelower = Yft.RpfFileEntry?.GetShortNameLower(); + if (namelower?.EndsWith("_hi") ?? false) + { + hash = JenkHash.GenHash(namelower.Substring(0, namelower.Length - 3)); + } + arch = TryGetArchetype(hash); Renderer.RenderFragment(arch, null, f, hash); diff --git a/Rendering/Renderable.cs b/Rendering/Renderable.cs index 4112796..d23e69e 100644 --- a/Rendering/Renderable.cs +++ b/Rendering/Renderable.cs @@ -59,6 +59,9 @@ namespace CodeWalker.Rendering public bool AllTexturesLoaded = false; public RenderableModel[] HDModels; + public RenderableModel[] MedModels; + public RenderableModel[] LowModels; + public RenderableModel[] VlowModels; public RenderableModel[] AllModels; //public Dictionary TextureDict { get; private set; } //public long EmbeddedTextureSize { get; private set; } @@ -88,25 +91,31 @@ namespace CodeWalker.Rendering } if (med != null) { + MedModels = new RenderableModel[med.Length]; for (int i = 0; i < med.Length; i++) { - AllModels[curmodel + i] = InitModel(med[i]); + MedModels[i] = InitModel(med[i]); + AllModels[curmodel + i] = MedModels[i]; } curmodel += med.Length; } if (low != null) { + LowModels = new RenderableModel[low.Length]; for (int i = 0; i < low.Length; i++) { - AllModels[curmodel + i] = InitModel(low[i]); + LowModels[i] = InitModel(low[i]); + AllModels[curmodel + i] = LowModels[i]; } curmodel += low.Length; } if (vlow != null) { + VlowModels = new RenderableModel[vlow.Length]; for (int i = 0; i < vlow.Length; i++) { - AllModels[curmodel + i] = InitModel(vlow[i]); + VlowModels[i] = InitModel(vlow[i]); + AllModels[curmodel + i] = VlowModels[i]; } curmodel += vlow.Length; } @@ -364,7 +373,9 @@ namespace CodeWalker.Rendering public uint IndexDataSize { get; set; } public uint TotalDataSize { get; set; } public TextureBase[] Textures; + public Texture[] TexturesHD; public RenderableTexture[] RenderableTextures; + public RenderableTexture[] RenderableTexturesHD; public MetaName[] TextureParamHashes; public PrimitiveTopology Topology { get; set; } public bool IsFragment = false; @@ -392,6 +403,7 @@ namespace CodeWalker.Rendering public float WaterHeight { get; set; } = 0; //for terrainfoam public float WaveMovement { get; set; } = 0; //for terrainfoam public float HeightOpacity { get; set; } = 0; //for terrainfoam + public bool HDTextureEnable = true; public static MetaName[] GetTextureSamplerList() @@ -595,60 +607,9 @@ namespace CodeWalker.Rendering { TextureParamHashes = phashes.ToArray(); Textures = texs.ToArray(); + TexturesHD = new Texture[texs.Count]; RenderableTextures = new RenderableTexture[texs.Count]; //these will get populated at render time. - //Textures = new RenderableTexture[texs.Count]; - for (int i = 0; i < texs.Count; i++) - { - //RenderableTexture tex = new RenderableTexture(); - //tex.Init(texs[i]); - //Textures[i] = tex; - - - ////testing texture usage - //MetaName thash = phashes[i]; - //switch (thash) - //{ - // case MetaName.DiffuseSampler: //base diffuse - // case MetaName.SpecSampler: //base specular - // case MetaName.BumpSampler: //base normal - // case MetaName.TintPaletteSampler: // _pal - // case MetaName.DetailSampler: // ENV_ - // case MetaName.FlowSampler: //river _flow - // case MetaName.FogSampler: //river _fog , water slod - // case MetaName.TextureSampler_layer0: //CS_RSN_SL_Road_0007 - // case MetaName.BumpSampler_layer0: //CS_RSN_SL_Road_0007_n - // case MetaName.heightMapSamplerLayer0: //nxg_cs_rsn_sl_road_0007_h - // case MetaName.TextureSampler_layer1: //IM_Road_009b - // case MetaName.BumpSampler_layer1: //IM_Road_010b_N - // case MetaName.heightMapSamplerLayer1: //nxg_im_road_010b_h - // case MetaName.TextureSampler_layer2: //IM_Concrete10 - // case MetaName.BumpSampler_layer2: //IM_Concrete13_N - // case MetaName.heightMapSamplerLayer2: //nxg_im_concrete13_h - // case MetaName.TextureSampler_layer3: //SC1_RSN_NS_ground_0009 - // case MetaName.BumpSampler_layer3: //sc1_rsn_ns_ground_0010_n - // case MetaName.heightMapSamplerLayer3: //nxg_sc1_rsn_ns_ground_0010_b_h - // case MetaName.lookupSampler: //TF_RSN_Msk_CS1_DesHill1, bh1_43_golf_blendmap_04_LOD - // case MetaName.heightSampler: //nxg_prop_tree_palm2_displ_l - // case MetaName.FoamSampler: //bj_beachfoam01_lod, CS_RSN_SL_RiverFoam_01_A_lodCS_RSN_SL_RiverFoam_01_A - // case MetaName.textureSamp://cable... - // break; - // //not yet implemented: - // case MetaName.DiffuseSampler2: - // case MetaName.DiffuseHfSampler: - // case MetaName.ComboHeightSamplerFur01: - // case MetaName.ComboHeightSamplerFur23: - // case MetaName.ComboHeightSamplerFur45: - // case MetaName.ComboHeightSamplerFur67: - // case MetaName.StippleSampler: - // case MetaName.FurMaskSampler: - // case MetaName.EnvironmentSampler: - // case MetaName.distanceMapSampler: - // break; - // default: - // break; - //} - - } + RenderableTexturesHD = new RenderableTexture[texs.Count]; //these will get populated at render time. } } @@ -771,6 +732,14 @@ namespace CodeWalker.Rendering } RenderableTextures = null; } + if (RenderableTexturesHD != null) + { + for (int i = 0; i < RenderableTexturesHD.Length; i++) + { + RenderableTexturesHD[i] = null; + } + RenderableTexturesHD = null; + } } diff --git a/Rendering/Renderer.cs b/Rendering/Renderer.cs index 1bca21f..27717a6 100644 --- a/Rendering/Renderer.cs +++ b/Rendering/Renderer.cs @@ -111,6 +111,9 @@ namespace CodeWalker.Rendering private List renderskeletonlist = new List(); private List skeletonLineVerts = new List(); + public bool renderhdtextures = true; + + public MapSelectionMode SelectionMode = MapSelectionMode.Entity; //to assist in rendering embedded collisions properly... @@ -146,6 +149,7 @@ namespace CodeWalker.Rendering public bool RenderedBoundCompsListEnable = false; //whether or not to add rendered bound comps to the list + private List tryGetRenderableHDtxds = new List(); @@ -1578,38 +1582,31 @@ namespace CodeWalker.Rendering } - //go through the render list, and try ensure renderables and textures for all. - //if an entity is not fully loaded, set a flag for its parent, then traverse to root - //until found an entity that is fully loaded. - //on a second loop, build a final render list based on the flags. - - for (int i = 0; i < renderworldentities.Count; i++) + if (renderentities) { - var ent = renderworldentities[i]; - var arch = ent.Archetype; - var pent = ent.Parent; - var drawable = gameFileCache.TryGetDrawable(arch); - Renderable rndbl = TryGetRenderable(arch, drawable); - if ((rndbl != null) && rndbl.IsLoaded && (rndbl.AllTexturesLoaded || !waitforchildrentoload)) + //go through the render list, and try ensure renderables and textures for all. + //if an entity is not fully loaded, set a flag for its parent, then traverse to root + //until found an entity that is fully loaded. + //on a second loop, build a final render list based on the flags. + for (int i = 0; i < renderworldentities.Count; i++) { - RenderableEntity rent = new RenderableEntity(); - rent.Entity = ent; - rent.Renderable = rndbl; - renderworldrenderables.Add(rent); + var ent = renderworldentities[i]; + var arch = ent.Archetype; + var pent = ent.Parent; + var drawable = gameFileCache.TryGetDrawable(arch); + Renderable rndbl = TryGetRenderable(arch, drawable); + if ((rndbl != null) && rndbl.IsLoaded && (rndbl.AllTexturesLoaded || !waitforchildrentoload)) + { + RenderableEntity rent = new RenderableEntity(); + rent.Entity = ent; + rent.Renderable = rndbl; + renderworldrenderables.Add(rent); + } + else if (waitforchildrentoload) + { + //todo: render parent if children loading....... + } } - else if (waitforchildrentoload) - { - //todo: render parent if children loading....... - } - - if ((rendercollisionmeshes || (SelectionMode == MapSelectionMode.Collision)) && renderinteriors) - { - RenderInteriorCollisionMesh(ent); - } - } - - if(renderentities) - { for (int i = 0; i < renderworldrenderables.Count; i++) { var rent = renderworldrenderables[i]; @@ -1621,6 +1618,21 @@ namespace CodeWalker.Rendering } + + if (renderinteriors && (rendercollisionmeshes || (SelectionMode == MapSelectionMode.Collision))) + { + for (int i = 0; i < renderworldentities.Count; i++) + { + var ent = renderworldentities[i]; + if (ent.IsMlo) + { + RenderInteriorCollisionMesh(ent); + } + } + } + + + if (rendercars) { for (int y = 0; y < VisibleYmaps.Count; y++) @@ -1766,59 +1778,9 @@ namespace CodeWalker.Rendering renderworldentities.Add(ent); - if (renderinteriors && ent.IsMlo) //render Mlo child entities... + if (renderinteriors && ent.IsMlo && (ent.MloInstance != null)) //render Mlo child entities... { - if ((ent.MloInstance != null)) - { - if (ent.MloInstance.Entities != null) - { - for (int j = 0; j < ent.MloInstance.Entities.Length; j++) - { - var intent = ent.MloInstance.Entities[j]; - if (intent.Archetype == null) continue; //missing archetype... - if (!RenderIsEntityFinalRender(intent)) continue; //proxy or something.. - - intent.IsVisible = true; - - var iebscent = intent.Position + intent.BSCenter - camera.Position; - float iebsrad = intent.BSRadius; - if (!camera.ViewFrustum.ContainsSphereNoClipNoOpt(ref iebscent, iebsrad)) - { - continue; //frustum cull interior ents - } - - renderworldentities.Add(intent); - } - } - if (ent.MloInstance.EntitySets != null) - { - foreach (var entitysets in ent.MloInstance.EntitySets) - { - var entityset = entitysets.Value; - if (!entityset.Visible) continue; - - var entities = entityset.Entities; - for (int i = 0; i < entities.Count; i++) - { - var intent = entities[i]; - if (intent.Archetype == null) continue; //missing archetype... - if (!RenderIsEntityFinalRender(intent)) continue; //proxy or something.. - - intent.IsVisible = true; - - var iebscent = intent.Position + intent.BSCenter - camera.Position; - float iebsrad = intent.BSRadius; - if (!camera.ViewFrustum.ContainsSphereNoClipNoOpt(ref iebscent, iebsrad)) - { - continue; //frustum cull interior ents - } - - renderworldentities.Add(intent); - - } - } - } - } + RenderWorldAddInteriorEntities(ent); } } @@ -1835,7 +1797,57 @@ namespace CodeWalker.Rendering } } } + private void RenderWorldAddInteriorEntities(YmapEntityDef ent) + { + if (ent.MloInstance.Entities != null) + { + for (int j = 0; j < ent.MloInstance.Entities.Length; j++) + { + var intent = ent.MloInstance.Entities[j]; + if (intent.Archetype == null) continue; //missing archetype... + if (!RenderIsEntityFinalRender(intent)) continue; //proxy or something.. + intent.IsVisible = true; + + var iebscent = intent.Position + intent.BSCenter - camera.Position; + float iebsrad = intent.BSRadius; + if (!camera.ViewFrustum.ContainsSphereNoClipNoOpt(ref iebscent, iebsrad)) + { + continue; //frustum cull interior ents + } + + renderworldentities.Add(intent); + } + } + if (ent.MloInstance.EntitySets != null) + { + foreach (var entitysets in ent.MloInstance.EntitySets) + { + var entityset = entitysets.Value; + if (!entityset.Visible) continue; + + var entities = entityset.Entities; + for (int i = 0; i < entities.Count; i++) + { + var intent = entities[i]; + if (intent.Archetype == null) continue; //missing archetype... + if (!RenderIsEntityFinalRender(intent)) continue; //proxy or something.. + + intent.IsVisible = true; + + var iebscent = intent.Position + intent.BSCenter - camera.Position; + float iebsrad = intent.BSRadius; + if (!camera.ViewFrustum.ContainsSphereNoClipNoOpt(ref iebscent, iebsrad)) + { + continue; //frustum cull interior ents + } + + renderworldentities.Add(intent); + + } + } + } + } @@ -2381,6 +2393,16 @@ namespace CodeWalker.Rendering float distance = (camrel + bscen).Length(); + + //bool usehdtxd = renderhdtextures && ((dist - bsrad) <= arche._BaseArchetypeDef.hdTextureDist); + //var usehdtxd = false; + //if ((arch != null) && (renderhdtextures)) + //{ + // usehdtxd = ((ent.Distance - arch.BSRadius) <= arch._BaseArchetypeDef.hdTextureDist); + //} + + + if ((rendercollisionmeshes || (SelectionMode == MapSelectionMode.Collision)) && rendercollisionmeshlayerdrawable) { Drawable sdrawable = rndbl.Key as Drawable; @@ -2581,14 +2603,27 @@ namespace CodeWalker.Rendering - private Renderable TryGetRenderable(Archetype arche, DrawableBase drawable, uint txdHash = 0) { if (drawable == null) return null; //BUG: only last texdict used!! needs to cache textures per archetype........ //(but is it possible to have the same drawable with different archetypes?) - uint texDict = (arche != null) ? arche.TextureDict.Hash : txdHash; - uint clipDict = (arche != null) ? arche.ClipDict.Hash : 0; + MetaHash texDict = txdHash; + //uint texDictOrig = txdHash; + uint clipDict = 0; + + if (arche != null) + { + texDict = arche.TextureDict.Hash; + clipDict = arche.ClipDict.Hash; + + //texDictOrig = texDict; + //if (hdtxd) + //{ + // texDict = gameFileCache.TryGetHDTextureHash(texDict); + //} + } + Renderable rndbl = renderableCache.GetRenderable(drawable); if (rndbl == null) return null; @@ -2624,11 +2659,61 @@ namespace CodeWalker.Rendering var yptTexDict = (drawable.Owner as YptFile)?.PtfxList?.TextureDictionary; + + tryGetRenderableHDtxds.Clear(); + if (renderhdtextures) + { + if (arche != null) //try get HD txd for the asset + { + MetaHash hdtxd = gameFileCache.TryGetHDTextureHash(arche._BaseArchetypeDef.assetName); + if (hdtxd != arche._BaseArchetypeDef.assetName) + { + var asshdytd = gameFileCache.GetYtd(hdtxd); + if ((asshdytd != null) && (asshdytd.Loaded)) + { + tryGetRenderableHDtxds.Add(asshdytd); + } + } + } + if (texDict != 0) //try get HD txd for the current txd + { + MetaHash hdtxd = gameFileCache.TryGetHDTextureHash(texDict); + if (hdtxd != texDict) + { + var txdhdytd = gameFileCache.GetYtd(hdtxd); + if ((txdhdytd != null) && (txdhdytd.Loaded)) + { + tryGetRenderableHDtxds.Add(txdhdytd); + } + } + + MetaHash ptxdname = gameFileCache.TryGetParentYtdHash(texDict); + while (ptxdname != 0) //look for parent HD txds + { + MetaHash phdtxdname = gameFileCache.TryGetHDTextureHash(ptxdname); + if (phdtxdname != ptxdname) + { + var phdytd = gameFileCache.GetYtd(phdtxdname); + if ((phdytd != null) && (phdytd.Loaded)) + { + tryGetRenderableHDtxds.Add(phdytd); + } + } + ptxdname = gameFileCache.TryGetParentYtdHash(ptxdname); + } + } + if (tryGetRenderableHDtxds.Count > 0) + { } + } + + YtdFile ytd = (texDict != 0) ? gameFileCache.GetYtd(texDict) : null; + + bool alltexsloaded = true; int missingtexcount = 0; - for (int mi = 0; mi < rndbl.HDModels.Length; mi++) + for (int mi = 0; mi < rndbl.AllModels.Length; mi++) { - var model = rndbl.HDModels[mi]; + var model = rndbl.AllModels[mi]; //if (!RenderIsModelFinalRender(model) && !renderproxies) //{ @@ -2644,56 +2729,32 @@ namespace CodeWalker.Rendering { var tex = geom.Textures[i]; var ttex = tex as Texture; + Texture dtex = null; RenderableTexture rdtex = null; - if ((ttex == null) && (tex != null)) + if ((tex != null) && (ttex == null)) { //TextureRef means this RenderableTexture needs to be loaded from texture dict... if (yptTexDict != null) //for ypt files, first try the embedded tex dict.. { - var dtex = yptTexDict.Lookup(tex.NameHash); - rdtex = renderableCache.GetRenderableTexture(dtex); + dtex = yptTexDict.Lookup(tex.NameHash); } else if (texDict != 0) { - YtdFile ytd = gameFileCache.GetYtd(texDict); if ((ytd != null) && (ytd.Loaded) && (ytd.TextureDict != null)) { - var dtex = ytd.TextureDict.Lookup(tex.NameHash); + dtex = ytd.TextureDict.Lookup(tex.NameHash); if (dtex == null) { - //not present in dictionary... check already loaded texture dicts... - var ytd2 = gameFileCache.TryGetTextureDictForTexture(tex.NameHash); - if ((ytd2 != null) && (ytd2.Loaded) && (ytd2.TextureDict != null)) - { - dtex = ytd2.TextureDict.Lookup(tex.NameHash); - } - else - { - //couldn't find texture dict? - //first try going through ytd hierarchy... - dtex = gameFileCache.TryFindTextureInParent(tex.NameHash, texDict); - - - //if (dtex == null) - //{ //try for a texture dict with the same hash as the archetype? - // dtex = gameFileCache.TryFindTextureInParent(tex.TextureRef.NameHash, arche.Hash); - // if (dtex != null) - // { } - //} - } - } - if (dtex != null) - { - geom.Textures[i] = dtex; //cache it for next time to avoid the lookup... - rdtex = renderableCache.GetRenderableTexture(dtex); + //couldn't find texture in specified dict + //first try going through ytd hierarchy... + dtex = gameFileCache.TryFindTextureInParent(tex.NameHash, texDict); } if (rdtex == null) { } //nothing to see here :( } - else if ((ytd == null)) + else if ((ytd == null))//ytd not found { - Texture dtex = null; - if (drawable.ShaderGroup.TextureDictionary != null) + if (drawable.ShaderGroup.TextureDictionary != null)//check any embedded texdict { dtex = drawable.ShaderGroup.TextureDictionary.Lookup(tex.NameHash); if (dtex == null) @@ -2703,19 +2764,8 @@ namespace CodeWalker.Rendering } if (dtex == null) { - var ytd2 = gameFileCache.TryGetTextureDictForTexture(tex.NameHash); - if ((ytd2 != null) && (ytd2.Loaded) && (ytd2.TextureDict != null)) - { - dtex = ytd2.TextureDict.Lookup(tex.NameHash); - } - if (dtex == null) - { - dtex = gameFileCache.TryFindTextureInParent(tex.NameHash, texDict); - } + dtex = gameFileCache.TryFindTextureInParent(tex.NameHash, texDict); } - rdtex = renderableCache.GetRenderableTexture(dtex); - if (rdtex == null) - { missingtexcount -= 2; } //(give extra chance..) couldn't find the texture! :( } else if (ytd != null) { @@ -2724,13 +2774,26 @@ namespace CodeWalker.Rendering } } else //no texdict specified, nothing to see here.. + { } + if (dtex == null) { + //not present in dictionary... check already loaded texture dicts... (maybe resident?) var ytd2 = gameFileCache.TryGetTextureDictForTexture(tex.NameHash); if ((ytd2 != null) && (ytd2.Loaded) && (ytd2.TextureDict != null)) { - var dtex = ytd2.TextureDict.Lookup(tex.NameHash); - rdtex = renderableCache.GetRenderableTexture(dtex); + dtex = ytd2.TextureDict.Lookup(tex.NameHash); } + //else + //{ + // //couldn't find texture dict? + //} + } + + if (dtex != null) + { + geom.Textures[i] = dtex; //cache it for next time to avoid the lookup... + ttex = dtex; + rdtex = renderableCache.GetRenderableTexture(dtex); } } else if (ttex != null) //ensure embedded renderable texture @@ -2757,6 +2820,29 @@ namespace CodeWalker.Rendering } + RenderableTexture rhdtex = null; + if (renderhdtextures) + { + Texture hdtex = geom.TexturesHD[i]; + if (hdtex == null) + { + for (int j = 0; j < tryGetRenderableHDtxds.Count; j++) + { + hdtex = tryGetRenderableHDtxds[j].TextureDict?.Lookup(tex.NameHash); + if (hdtex != null) break; + } + if (hdtex != null) + { + geom.TexturesHD[i] = hdtex; + } + } + if (hdtex != null) + { + rhdtex = renderableCache.GetRenderableTexture(hdtex); + } + } + geom.RenderableTexturesHD[i] = rhdtex; + } } } diff --git a/Rendering/Shaders/BasicShader.cs b/Rendering/Shaders/BasicShader.cs index b586e77..9cc5f52 100644 --- a/Rendering/Shaders/BasicShader.cs +++ b/Rendering/Shaders/BasicShader.cs @@ -529,6 +529,14 @@ namespace CodeWalker.Rendering for (int i = 0; i < geom.RenderableTextures.Length; i++) { var itex = geom.RenderableTextures[i]; + if (geom.HDTextureEnable) + { + var hdtex = geom.RenderableTexturesHD[i]; + if ((hdtex != null) && (hdtex.IsLoaded)) + { + itex = hdtex; + } + } var ihash = geom.TextureParamHashes[i]; if (itex == null) continue; if (itex.Key?.NameHash == 1678728908 /*"blank"*/) continue; diff --git a/Rendering/Shaders/TerrainShader.cs b/Rendering/Shaders/TerrainShader.cs index 446015b..6f5c151 100644 --- a/Rendering/Shaders/TerrainShader.cs +++ b/Rendering/Shaders/TerrainShader.cs @@ -376,6 +376,14 @@ namespace CodeWalker.Rendering for (int i = 0; i < geom.RenderableTextures.Length; i++) { var itex = geom.RenderableTextures[i]; + if (geom.HDTextureEnable) + { + var hdtex = geom.RenderableTexturesHD[i]; + if ((hdtex != null) && (hdtex.IsLoaded)) + { + itex = hdtex; + } + } var ihash = geom.TextureParamHashes[i]; switch (ihash) { diff --git a/WorldForm.Designer.cs b/WorldForm.Designer.cs index 38132cf..23b5394 100644 --- a/WorldForm.Designer.cs +++ b/WorldForm.Designer.cs @@ -109,6 +109,7 @@ namespace CodeWalker this.tabPage4 = new System.Windows.Forms.TabPage(); this.OptionsTabControl = new System.Windows.Forms.TabControl(); this.tabPage8 = new System.Windows.Forms.TabPage(); + this.CarGeneratorsCheckBox = new System.Windows.Forms.CheckBox(); this.RenderEntitiesCheckBox = new System.Windows.Forms.CheckBox(); this.AdvancedSettingsButton = new System.Windows.Forms.Button(); this.ControlSettingsButton = new System.Windows.Forms.Button(); @@ -286,7 +287,7 @@ namespace CodeWalker this.ToolbarCameraMapViewButton = new System.Windows.Forms.ToolStripMenuItem(); this.ToolbarCameraOrthographicButton = new System.Windows.Forms.ToolStripMenuItem(); this.ToolbarPanel = new System.Windows.Forms.Panel(); - this.CarGeneratorsCheckBox = new System.Windows.Forms.CheckBox(); + this.HDTexturesCheckBox = new System.Windows.Forms.CheckBox(); this.StatusStrip.SuspendLayout(); this.ToolsPanel.SuspendLayout(); this.ToolsTabControl.SuspendLayout(); @@ -1335,6 +1336,17 @@ namespace CodeWalker this.tabPage8.Text = "General"; this.tabPage8.UseVisualStyleBackColor = true; // + // CarGeneratorsCheckBox + // + this.CarGeneratorsCheckBox.AutoSize = true; + this.CarGeneratorsCheckBox.Location = new System.Drawing.Point(10, 72); + this.CarGeneratorsCheckBox.Name = "CarGeneratorsCheckBox"; + this.CarGeneratorsCheckBox.Size = new System.Drawing.Size(124, 17); + this.CarGeneratorsCheckBox.TabIndex = 31; + this.CarGeneratorsCheckBox.Text = "Show car generators"; + this.CarGeneratorsCheckBox.UseVisualStyleBackColor = true; + this.CarGeneratorsCheckBox.CheckedChanged += new System.EventHandler(this.CarGeneratorsCheckBox_CheckedChanged); + // // RenderEntitiesCheckBox // this.RenderEntitiesCheckBox.AutoSize = true; @@ -1633,6 +1645,7 @@ namespace CodeWalker // // tabPage14 // + this.tabPage14.Controls.Add(this.HDTexturesCheckBox); this.tabPage14.Controls.Add(this.WireframeCheckBox); this.tabPage14.Controls.Add(this.RenderModeComboBox); this.tabPage14.Controls.Add(this.label11); @@ -3270,16 +3283,18 @@ namespace CodeWalker this.ToolbarPanel.TabIndex = 7; this.ToolbarPanel.Visible = false; // - // CarGeneratorsCheckBox + // HDTexturesCheckBox // - this.CarGeneratorsCheckBox.AutoSize = true; - this.CarGeneratorsCheckBox.Location = new System.Drawing.Point(10, 72); - this.CarGeneratorsCheckBox.Name = "CarGeneratorsCheckBox"; - this.CarGeneratorsCheckBox.Size = new System.Drawing.Size(124, 17); - this.CarGeneratorsCheckBox.TabIndex = 31; - this.CarGeneratorsCheckBox.Text = "Show car generators"; - this.CarGeneratorsCheckBox.UseVisualStyleBackColor = true; - this.CarGeneratorsCheckBox.CheckedChanged += new System.EventHandler(this.CarGeneratorsCheckBox_CheckedChanged); + this.HDTexturesCheckBox.AutoSize = true; + this.HDTexturesCheckBox.Checked = true; + this.HDTexturesCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; + this.HDTexturesCheckBox.Location = new System.Drawing.Point(10, 231); + this.HDTexturesCheckBox.Name = "HDTexturesCheckBox"; + this.HDTexturesCheckBox.Size = new System.Drawing.Size(82, 17); + this.HDTexturesCheckBox.TabIndex = 57; + this.HDTexturesCheckBox.Text = "HD textures"; + this.HDTexturesCheckBox.UseVisualStyleBackColor = true; + this.HDTexturesCheckBox.CheckedChanged += new System.EventHandler(this.HDTexturesCheckBox_CheckedChanged); // // WorldForm // @@ -3624,5 +3639,6 @@ namespace CodeWalker private System.Windows.Forms.CheckBox RenderEntitiesCheckBox; private System.Windows.Forms.ToolStripMenuItem ToolbarSelectOcclusionButton; private System.Windows.Forms.CheckBox CarGeneratorsCheckBox; + private System.Windows.Forms.CheckBox HDTexturesCheckBox; } } \ No newline at end of file diff --git a/WorldForm.cs b/WorldForm.cs index 6d28357..459e56d 100644 --- a/WorldForm.cs +++ b/WorldForm.cs @@ -6634,6 +6634,11 @@ namespace CodeWalker Renderer.renderproxies = ProxiesCheckBox.Checked; } + private void HDTexturesCheckBox_CheckedChanged(object sender, EventArgs e) + { + Renderer.renderhdtextures = HDTexturesCheckBox.Checked; + } + private void PathsCheckBox_CheckedChanged(object sender, EventArgs e) { renderpaths = PathsCheckBox.Checked; diff --git a/WorldForm.resx b/WorldForm.resx index 8689d72..fe93ed0 100644 --- a/WorldForm.resx +++ b/WorldForm.resx @@ -240,14 +240,6 @@ ufo YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAB4SURBVDhP3ZC7DcAgDEQZKTMwHOvSIFriS7BlEB+HMic9 QJbvFThLUkpXzjkSpaeuzMPlEELx3jdsBauyCHBY6UWYPQI93KEljQD3jL6EGzN6x0bASyNYwkKU8Udm gd6TMnIikDJyIqjVNz8T7FgKrAwFX6lVinM3aJ05lWDPRRcAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAB0SURBVDhP7ZNBCoAgEEXnSJ3BqxmetNpaMLhVv5DNRJS2 - CxIeuvA9XSjtg5mHEILPxB6U7JyLxphmSkDK1o5x9dst87SUfTXwRsYsA+paT0BGDGsVOJ92hdz3Bz4f - wGPC48uu7w5IGd+gBlpRMgYCnRwyESUj3CsQkYNFDwAAAABJRU5ErkJggg== @@ -269,13 +261,12 @@ ufo WBXYx9R1nV75RuyHKrrnzCcGjE1u9ZyD4BugoZigQ9xrngAAAABJRU5ErkJggg== - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACtSURBVDhPrZBBEsIgEAR5Gy/wFV55T/wHr+KgHuCKNsVY - ZI2JiU7VVIVlp7OL+1mllIr7cb8Ie++PQwQYITnnM24NWxoBgsQYm/l+gk699bMsRA4h1JTSPsg0Xert - em/mGwh3vW1Z7MvIABSWqXG3+iZHAEw1m4wD49oVANgVOL/VeSgeDAiX1mpWeKy9BIQiI+OxWQF77tG5 - 2Fc729BmeElf/3lNhORe+oecewDObEqX49RqCgAAAABJRU5ErkJggg== + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAB0SURBVDhP7ZNBCoAgEEXnSJ3BqxmetNpaMLhVv5DNRJS2 + CxIeuvA9XSjtg5mHEILPxB6U7JyLxphmSkDK1o5x9dst87SUfTXwRsYsA+paT0BGDGsVOJ92hdz3Bz4f + wGPC48uu7w5IGd+gBlpRMgYCnRwyESUj3CsQkYNFDwAAAABJRU5ErkJggg== @@ -304,6 +295,15 @@ ufo EcMw2DzPDMEke9AsYBrHs10vN4I1QqImwwDcFyMjQGaBHr5Bo8nEoYCnCQTGzVeI4oj6fIi+KHgoPBhC 4knCjTww9vxfbIUQNDEyiGIZ8t6tW/k0vC/AOpuiueNOLwVkUeylvju9FJCg8E1vM/2PlTv5UoervVTJ uQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACtSURBVDhPrZBBEsIgEAR5Gy/wFV55T/wHr+KgHuCKNsVY + ZI2JiU7VVIVlp7OL+1mllIr7cb8Ie++PQwQYITnnM24NWxoBgsQYm/l+gk699bMsRA4h1JTSPsg0Xert + em/mGwh3vW1Z7MvIABSWqXG3+iZHAEw1m4wD49oVANgVOL/VeSgeDAiX1mpWeKy9BIQiI+OxWQF77tG5 + 2Fc729BmeElf/3lNhORe+oecewDObEqX49RqCgAAAABJRU5ErkJggg== @@ -389,17 +389,6 @@ ufo 4BJN+IjGo5O8ZJndGVhKxpjWWts551aih0fre+0BLaVchRAezPB2NXSSV/gVwXGYPJiVUt6ns1ghCDjn UQG86w3FToVgDcWCWS9Fvi/Ao0RVAcwUjwpyhzmf4n8BFApS5HZRwRuONGMbrIJ1JIN8O2QAAAAASUVO RK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEvSURBVDhP3dK/K0dRGMfxKxRJopCSEkLya/guUhQRmQwG - WfwIkYySgYUSKUKJlOK/MBoMFMofYLUIsfJ+f3NuF3+A8tRree5zP/fcc070f6oHT/jAPTqQj6WvXvCM - TZQgG3H58gFGcYVLtGIN15jBNDbwiGNUIg4pQx8GsQuHhrCDW8yjHyns4Q0DcCXpykM5bFzgHGPYxw1G - UIVMtMHfWUUj4nIg/KurGIYrSAZYOXDGlbhXcZlegUO8Yxzb+BlQAwNW0G0jVAYK0AwHtnCEOyQDZvGC - ObTbKIIvLMA9WIYDizhFMsDjfsAZptCA9JcdfoVBvryOSbgCe4HPTuCz+BQMKEUvJmCy96ET1ehCuAf2 - 5ZF+uwdZKEYtmuBGFSIXhtejBe5PHX7dxL+qKPoEppRHcXOtiDsAAAAASUVORK5CYII= @@ -435,6 +424,17 @@ ufo rp3fhGJScIRLzKMLFTC9cMIu3nCDVUyjB6WkYA93mEWbAyH9cMImPuA+rWMA31YwBU82kF6BS32Er/aO M8zAh+OEghpcwQ2bg3uwBW8ewFd7xQkm0IA4oaAS7bh2KHjBIZbhV/D6GJkFphrdcIP8lFrAGPwPOjCO QdQiTqrAWNICd7gPnUj+xBKaU9dxfhTkjwV/FxU+AbsiGnc46OYIAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEvSURBVDhP3dK/K0dRGMfxKxRJopCSEkLya/guUhQRmQwG + WfwIkYySgYUSKUKJlOK/MBoMFMofYLUIsfJ+f3NuF3+A8tRree5zP/fcc070f6oHT/jAPTqQj6WvXvCM + TZQgG3H58gFGcYVLtGIN15jBNDbwiGNUIg4pQx8GsQuHhrCDW8yjHyns4Q0DcCXpykM5bFzgHGPYxw1G + UIVMtMHfWUUj4nIg/KurGIYrSAZYOXDGlbhXcZlegUO8Yxzb+BlQAwNW0G0jVAYK0AwHtnCEOyQDZvGC + ObTbKIIvLMA9WIYDizhFMsDjfsAZptCA9JcdfoVBvryOSbgCe4HPTuCz+BQMKEUvJmCy96ET1ehCuAf2 + 5ZF+uwdZKEYtmuBGFSIXhtejBe5PHX7dxL+qKPoEppRHcXOtiDsAAAAASUVORK5CYII= From 2d8305c7a10541bc656218c7977a60e4f4d4b19b Mon Sep 17 00:00:00 2001 From: dexy Date: Sun, 6 Jan 2019 15:51:58 +1100 Subject: [PATCH 067/158] Added renderable texture dict hierarchy caching --- Rendering/Renderable.cs | 2 + Rendering/Renderer.cs | 140 +++++++++++++++++++++------------------- 2 files changed, 76 insertions(+), 66 deletions(-) diff --git a/Rendering/Renderable.cs b/Rendering/Renderable.cs index d23e69e..e06a128 100644 --- a/Rendering/Renderable.cs +++ b/Rendering/Renderable.cs @@ -56,6 +56,8 @@ namespace CodeWalker.Rendering public class Renderable : RenderableCacheItem { + public YtdFile[] SDtxds; + public YtdFile[] HDtxds; public bool AllTexturesLoaded = false; public RenderableModel[] HDModels; diff --git a/Rendering/Renderer.cs b/Rendering/Renderer.cs index 27717a6..95b350f 100644 --- a/Rendering/Renderer.cs +++ b/Rendering/Renderer.cs @@ -149,6 +149,7 @@ namespace CodeWalker.Rendering public bool RenderedBoundCompsListEnable = false; //whether or not to add rendered bound comps to the list + private List tryGetRenderableSDtxds = new List(); private List tryGetRenderableHDtxds = new List(); @@ -2660,41 +2661,52 @@ namespace CodeWalker.Rendering var yptTexDict = (drawable.Owner as YptFile)?.PtfxList?.TextureDictionary; - tryGetRenderableHDtxds.Clear(); - if (renderhdtextures) + if (rndbl.SDtxds == null) { + //cache the txd hierarchies for this renderable + tryGetRenderableSDtxds.Clear(); + tryGetRenderableHDtxds.Clear(); if (arche != null) //try get HD txd for the asset { MetaHash hdtxd = gameFileCache.TryGetHDTextureHash(arche._BaseArchetypeDef.assetName); if (hdtxd != arche._BaseArchetypeDef.assetName) { var asshdytd = gameFileCache.GetYtd(hdtxd); - if ((asshdytd != null) && (asshdytd.Loaded)) + if (asshdytd != null) { tryGetRenderableHDtxds.Add(asshdytd); } } } - if (texDict != 0) //try get HD txd for the current txd + if (texDict != 0) { + var txdytd = gameFileCache.GetYtd(texDict); + if (txdytd != null) + { + tryGetRenderableSDtxds.Add(txdytd); + } MetaHash hdtxd = gameFileCache.TryGetHDTextureHash(texDict); if (hdtxd != texDict) { var txdhdytd = gameFileCache.GetYtd(hdtxd); - if ((txdhdytd != null) && (txdhdytd.Loaded)) + if (txdhdytd != null) { tryGetRenderableHDtxds.Add(txdhdytd); } } - MetaHash ptxdname = gameFileCache.TryGetParentYtdHash(texDict); while (ptxdname != 0) //look for parent HD txds { + var pytd = gameFileCache.GetYtd(ptxdname); + if (pytd != null) + { + tryGetRenderableSDtxds.Add(pytd); + } MetaHash phdtxdname = gameFileCache.TryGetHDTextureHash(ptxdname); if (phdtxdname != ptxdname) { var phdytd = gameFileCache.GetYtd(phdtxdname); - if ((phdytd != null) && (phdytd.Loaded)) + if (phdytd != null) { tryGetRenderableHDtxds.Add(phdytd); } @@ -2702,15 +2714,17 @@ namespace CodeWalker.Rendering ptxdname = gameFileCache.TryGetParentYtdHash(ptxdname); } } - if (tryGetRenderableHDtxds.Count > 0) - { } + rndbl.SDtxds = tryGetRenderableSDtxds.ToArray(); + rndbl.HDtxds = tryGetRenderableHDtxds.ToArray(); } - YtdFile ytd = (texDict != 0) ? gameFileCache.GetYtd(texDict) : null; - bool alltexsloaded = true; - int missingtexcount = 0; + + + + + for (int mi = 0; mi < rndbl.AllModels.Length; mi++) { var model = rndbl.AllModels[mi]; @@ -2738,43 +2752,41 @@ namespace CodeWalker.Rendering { dtex = yptTexDict.Lookup(tex.NameHash); } - else if (texDict != 0) + + else //if (texDict != 0) { - if ((ytd != null) && (ytd.Loaded) && (ytd.TextureDict != null)) + + if (rndbl.SDtxds != null) { - dtex = ytd.TextureDict.Lookup(tex.NameHash); - if (dtex == null) + //check the SD texture hierarchy + for (int j = 0; j < rndbl.SDtxds.Length; j++) { - //couldn't find texture in specified dict - //first try going through ytd hierarchy... - dtex = gameFileCache.TryFindTextureInParent(tex.NameHash, texDict); - } - if (rdtex == null) - { } //nothing to see here :( - } - else if ((ytd == null))//ytd not found - { - if (drawable.ShaderGroup.TextureDictionary != null)//check any embedded texdict - { - dtex = drawable.ShaderGroup.TextureDictionary.Lookup(tex.NameHash); - if (dtex == null) + var txd = rndbl.SDtxds[j]; + if (txd.Loaded) { - //dtex = drawable.ShaderGroup.TextureDictionary.Textures.data_items[0]; + dtex = txd.TextureDict?.Lookup(tex.NameHash); + } + else + { + txd = gameFileCache.GetYtd(txd.Key.Hash);//keep trying to load it - sometimes resuests can get lost (!) + } + if (dtex != null) break; + } + if (dtex == null)// rndbl.SDtxds.Length == 0)//ytd not found.. + { + if (drawable.ShaderGroup.TextureDictionary != null)//check any embedded texdict + { + dtex = drawable.ShaderGroup.TextureDictionary.Lookup(tex.NameHash); + if (dtex != null) + { } } } - if (dtex == null) - { - dtex = gameFileCache.TryFindTextureInParent(tex.NameHash, texDict); - } - } - else if (ytd != null) - { - alltexsloaded = false;//ytd not loaded yet - //missingtexcount++; } + + } - else //no texdict specified, nothing to see here.. - { } + //else //no texdict specified, nothing to see here.. + //{ } if (dtex == null) { //not present in dictionary... check already loaded texture dicts... (maybe resident?) @@ -2783,41 +2795,25 @@ namespace CodeWalker.Rendering { dtex = ytd2.TextureDict.Lookup(tex.NameHash); } - //else - //{ - // //couldn't find texture dict? - //} + //else { } //couldn't find texture dict? } if (dtex != null) { geom.Textures[i] = dtex; //cache it for next time to avoid the lookup... ttex = dtex; - rdtex = renderableCache.GetRenderableTexture(dtex); } } - else if (ttex != null) //ensure embedded renderable texture + + + if (ttex != null) //ensure embedded renderable texture { rdtex = renderableCache.GetRenderableTexture(ttex); } - else if (tex == null) - { } //tex wasn't loaded? shouldn't happen.. geom.RenderableTextures[i] = rdtex; - if (rdtex != null) - { - if (!rdtex.IsLoaded) - { - alltexsloaded = false; - missingtexcount++; - } - } - else - { - //alltexsloaded = false; - missingtexcount++; - } + RenderableTexture rhdtex = null; @@ -2826,10 +2822,22 @@ namespace CodeWalker.Rendering Texture hdtex = geom.TexturesHD[i]; if (hdtex == null) { - for (int j = 0; j < tryGetRenderableHDtxds.Count; j++) + //look for a replacement HD texture... + if (rndbl.HDtxds != null) { - hdtex = tryGetRenderableHDtxds[j].TextureDict?.Lookup(tex.NameHash); - if (hdtex != null) break; + for (int j = 0; j < rndbl.HDtxds.Length; j++) + { + var txd = rndbl.HDtxds[j]; + if (txd.Loaded) + { + hdtex = txd.TextureDict?.Lookup(tex.NameHash); + } + else + { + txd = gameFileCache.GetYtd(txd.Key.Hash);//keep trying to load it - sometimes resuests can get lost (!) + } + if (hdtex != null) break; + } } if (hdtex != null) { @@ -2848,7 +2856,7 @@ namespace CodeWalker.Rendering } } - rndbl.AllTexturesLoaded = alltexsloaded || (missingtexcount < 2); + rndbl.AllTexturesLoaded = true;// alltexsloaded || (missingtexcount < 2); return rndbl; } From 1af436b4036d56c4126183e1865611e9496336c4 Mon Sep 17 00:00:00 2001 From: dexy Date: Tue, 8 Jan 2019 18:57:24 +1100 Subject: [PATCH 068/158] Stopped HD ytd's getting loaded when HD texture not enabled, changed cache stacks to queues, added distance property to entity --- .../GameFiles/FileTypes/YmapFile.cs | 1 + CodeWalker.Core/GameFiles/GameFileCache.cs | 10 +- Rendering/RenderableCache.cs | 32 ++--- Rendering/Renderer.cs | 120 ++++++++++++------ 4 files changed, 105 insertions(+), 58 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs index ed35b44..116d377 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs @@ -1248,6 +1248,7 @@ namespace CodeWalker.GameFiles public MetaWrapper[] Extensions { get; set; } public int Index { get; set; } + public float Distance { get; set; } //used for rendering public bool IsVisible; //used for rendering public bool ChildrenVisible; //used for rendering public bool ChildrenRendered; //used when rendering ymap mode to reduce LOD flashing... diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index 95a87c8..1b95d71 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -18,7 +18,7 @@ namespace CodeWalker.GameFiles private Action ErrorLog; public int MaxItemsPerLoop = 1; //to keep things flowing... - private ConcurrentStack requestQueue = new ConcurrentStack(); + private ConcurrentQueue requestQueue = new ConcurrentQueue(); ////dynamic cache private Cache mainCache; @@ -135,7 +135,7 @@ namespace CodeWalker.GameFiles textureLookup.Clear(); GameFile queueclear; - while (requestQueue.TryPop(out queueclear)) + while (requestQueue.TryDequeue(out queueclear)) { } //empty the old queue out... } @@ -1486,9 +1486,9 @@ namespace CodeWalker.GameFiles private void TryLoadEnqueue(GameFile gf) { - if (((!gf.Loaded)) && (requestQueue.Count < 5))//(!gf.LoadQueued) && + if (((!gf.Loaded)) && (requestQueue.Count < 10))// && (!gf.LoadQueued) { - requestQueue.Push(gf); + requestQueue.Enqueue(gf); gf.LoadQueued = true; } } @@ -1870,7 +1870,7 @@ namespace CodeWalker.GameFiles int itemcount = 0; - while (requestQueue.TryPop(out req) && (itemcount < MaxItemsPerLoop)) + while (requestQueue.TryDequeue(out req) && (itemcount < MaxItemsPerLoop)) { //process content requests. if (req.Loaded) diff --git a/Rendering/RenderableCache.cs b/Rendering/RenderableCache.cs index e109b33..d05194a 100644 --- a/Rendering/RenderableCache.cs +++ b/Rendering/RenderableCache.cs @@ -253,10 +253,10 @@ namespace CodeWalker.Rendering public class RenderableCacheLookup where TVal: RenderableCacheItem, new() { - private ConcurrentStack itemsToLoad = new ConcurrentStack(); - private ConcurrentStack itemsToUnload = new ConcurrentStack(); - private ConcurrentStack itemsToInvalidate = new ConcurrentStack(); - private ConcurrentStack keysToInvalidate = new ConcurrentStack(); + private ConcurrentQueue itemsToLoad = new ConcurrentQueue(); + private ConcurrentQueue itemsToUnload = new ConcurrentQueue(); + private ConcurrentQueue itemsToInvalidate = new ConcurrentQueue(); + private ConcurrentQueue keysToInvalidate = new ConcurrentQueue(); private LinkedList loadeditems = new LinkedList();//only use from content thread! private Dictionary cacheitems = new Dictionary();//only use from render thread! public long CacheLimit; @@ -296,16 +296,16 @@ namespace CodeWalker.Rendering public void Clear() { - itemsToLoad.Clear(); + itemsToLoad = new ConcurrentQueue(); foreach (TVal rnd in loadeditems) { rnd.Unload(); } loadeditems.Clear(); cacheitems.Clear(); - itemsToUnload.Clear(); - itemsToInvalidate.Clear(); - keysToInvalidate.Clear(); + itemsToUnload = new ConcurrentQueue(); + itemsToInvalidate = new ConcurrentQueue(); + keysToInvalidate = new ConcurrentQueue(); } @@ -313,7 +313,7 @@ namespace CodeWalker.Rendering { TVal item; LoadedCount = 0; - while (itemsToLoad.TryPop(out item)) + while (itemsToLoad.TryDequeue(out item)) { if (item.IsLoaded) continue; //don't load it again... LoadedCount++; @@ -337,7 +337,7 @@ namespace CodeWalker.Rendering } if (LoadedCount >= maxitemsperloop) break; } - while (itemsToInvalidate.TryPop(out item)) + while (itemsToInvalidate.TryDequeue(out item)) { try { @@ -363,7 +363,7 @@ namespace CodeWalker.Rendering if ((now - lu).TotalSeconds > CacheTime) { var nextnode = rnode.Next; - itemsToUnload.Push(rnode.Value); + itemsToUnload.Enqueue(rnode.Value); loadeditems.Remove(rnode); rnode = nextnode; } @@ -380,18 +380,18 @@ namespace CodeWalker.Rendering LastFrameTime = DateTime.UtcNow.ToBinary(); TVal item; TKey key; - while (keysToInvalidate.TryPop(out key)) + while (keysToInvalidate.TryDequeue(out key)) { if (cacheitems.TryGetValue(key, out item)) { item.Unload(); item.Init(key); item.LoadQueued = true; - itemsToInvalidate.Push(item); + itemsToInvalidate.Enqueue(item); Interlocked.Add(ref CacheUse, -item.DataSize); } } - while (itemsToUnload.TryPop(out item)) + while (itemsToUnload.TryDequeue(out item)) { if ((item.Key != null) && (cacheitems.ContainsKey(item.Key))) { @@ -418,7 +418,7 @@ namespace CodeWalker.Rendering if ((!item.IsLoaded) && (!item.LoadQueued))// || { item.LoadQueued = true; - itemsToLoad.Push(item); + itemsToLoad.Enqueue(item); } return item; } @@ -428,7 +428,7 @@ namespace CodeWalker.Rendering { if (key == null) return; - keysToInvalidate.Push(key); + keysToInvalidate.Enqueue(key); } diff --git a/Rendering/Renderer.cs b/Rendering/Renderer.cs index 95b350f..6c23c86 100644 --- a/Rendering/Renderer.cs +++ b/Rendering/Renderer.cs @@ -1721,6 +1721,7 @@ namespace CodeWalker.Rendering } + ent.Distance = dist; ent.IsVisible = (dist <= loddist); ent.ChildrenVisible = (dist <= cloddist) && (ent.CEntityDef.numChildren > 0); @@ -2009,6 +2010,7 @@ namespace CodeWalker.Rendering bool usechild = false; Vector3 camrel = entity.Position - camera.Position; float dist = (camrel + entity.BSCenter).Length(); + entity.Distance = dist; float rad = arch.BSRadius; float loddist = entity.CEntityDef.lodDist; if (loddist < 1.0f) @@ -2380,6 +2382,7 @@ namespace CodeWalker.Rendering Vector3 bbmax = (arche != null) ? arche.BBMax : rndbl.Key.BoundingBoxMax.XYZ(); Vector3 bscen = (arche != null) ? arche.BSCenter : rndbl.Key.BoundingCenter; float radius = (arche != null) ? arche.BSRadius : rndbl.Key.BoundingSphereRadius; + float distance = 0;// (camrel + bscen).Length(); if (entity != null) { position = entity.Position; @@ -2390,9 +2393,12 @@ namespace CodeWalker.Rendering bbmax = entity.BBMax; bscen = entity.BSCenter; camrel += position; + distance = entity.Distance; + } + else + { + distance = (camrel + bscen).Length(); } - float distance = (camrel + bscen).Length(); - //bool usehdtxd = renderhdtextures && ((dist - bsrad) <= arche._BaseArchetypeDef.hdTextureDist); @@ -2660,13 +2666,14 @@ namespace CodeWalker.Rendering var yptTexDict = (drawable.Owner as YptFile)?.PtfxList?.TextureDictionary; - - if (rndbl.SDtxds == null) + bool cacheSD = (rndbl.SDtxds == null); + bool cacheHD = (renderhdtextures && (rndbl.HDtxds == null)); + if (cacheSD || cacheHD) { //cache the txd hierarchies for this renderable tryGetRenderableSDtxds.Clear(); tryGetRenderableHDtxds.Clear(); - if (arche != null) //try get HD txd for the asset + if (cacheHD && (arche != null)) //try get HD txd for the asset { MetaHash hdtxd = gameFileCache.TryGetHDTextureHash(arche._BaseArchetypeDef.assetName); if (hdtxd != arche._BaseArchetypeDef.assetName) @@ -2680,59 +2687,71 @@ namespace CodeWalker.Rendering } if (texDict != 0) { - var txdytd = gameFileCache.GetYtd(texDict); - if (txdytd != null) + if (cacheSD) { - tryGetRenderableSDtxds.Add(txdytd); - } - MetaHash hdtxd = gameFileCache.TryGetHDTextureHash(texDict); - if (hdtxd != texDict) - { - var txdhdytd = gameFileCache.GetYtd(hdtxd); - if (txdhdytd != null) + var txdytd = gameFileCache.GetYtd(texDict); + if (txdytd != null) { - tryGetRenderableHDtxds.Add(txdhdytd); + tryGetRenderableSDtxds.Add(txdytd); + } + } + if (cacheHD) + { + MetaHash hdtxd = gameFileCache.TryGetHDTextureHash(texDict); + if (hdtxd != texDict) + { + var txdhdytd = gameFileCache.GetYtd(hdtxd); + if (txdhdytd != null) + { + tryGetRenderableHDtxds.Add(txdhdytd); + } } } MetaHash ptxdname = gameFileCache.TryGetParentYtdHash(texDict); while (ptxdname != 0) //look for parent HD txds { - var pytd = gameFileCache.GetYtd(ptxdname); - if (pytd != null) + if (cacheSD) { - tryGetRenderableSDtxds.Add(pytd); - } - MetaHash phdtxdname = gameFileCache.TryGetHDTextureHash(ptxdname); - if (phdtxdname != ptxdname) - { - var phdytd = gameFileCache.GetYtd(phdtxdname); - if (phdytd != null) + var pytd = gameFileCache.GetYtd(ptxdname); + if (pytd != null) { - tryGetRenderableHDtxds.Add(phdytd); + tryGetRenderableSDtxds.Add(pytd); + } + } + if (cacheHD) + { + MetaHash phdtxdname = gameFileCache.TryGetHDTextureHash(ptxdname); + if (phdtxdname != ptxdname) + { + var phdytd = gameFileCache.GetYtd(phdtxdname); + if (phdytd != null) + { + tryGetRenderableHDtxds.Add(phdytd); + } } } ptxdname = gameFileCache.TryGetParentYtdHash(ptxdname); } } - rndbl.SDtxds = tryGetRenderableSDtxds.ToArray(); - rndbl.HDtxds = tryGetRenderableHDtxds.ToArray(); + if (cacheSD) rndbl.SDtxds = tryGetRenderableSDtxds.ToArray(); + if (cacheHD) rndbl.HDtxds = tryGetRenderableHDtxds.ToArray(); } - + //bool alltexsloaded = true; for (int mi = 0; mi < rndbl.AllModels.Length; mi++) { var model = rndbl.AllModels[mi]; - //if (!RenderIsModelFinalRender(model) && !renderproxies) - //{ - // continue; //filter out reflection proxy models... - //} + if (!RenderIsModelFinalRender(model) && !renderproxies) + { + continue; //filter out reflection proxy models... + } foreach (var geom in model.Geometries) @@ -2753,7 +2772,7 @@ namespace CodeWalker.Rendering dtex = yptTexDict.Lookup(tex.NameHash); } - else //if (texDict != 0) + if (dtex == null) //else //if (texDict != 0) { if (rndbl.SDtxds != null) @@ -2772,13 +2791,13 @@ namespace CodeWalker.Rendering } if (dtex != null) break; } - if (dtex == null)// rndbl.SDtxds.Length == 0)//ytd not found.. + if (dtex == null)// rndbl.SDtxds.Length == 0)//texture not found.. { if (drawable.ShaderGroup.TextureDictionary != null)//check any embedded texdict { dtex = drawable.ShaderGroup.TextureDictionary.Lookup(tex.NameHash); if (dtex != null) - { } + { } //this shouldn't really happen as embedded textures should already be loaded! (not as TextureRef) } } } @@ -2806,11 +2825,16 @@ namespace CodeWalker.Rendering } - if (ttex != null) //ensure embedded renderable texture + if (ttex != null) //ensure renderable texture { rdtex = renderableCache.GetRenderableTexture(ttex); } + //if ((rdtex != null) && (rdtex.IsLoaded == false)) + //{ + // alltexsloaded = false; + //} + geom.RenderableTextures[i] = rdtex; @@ -2856,7 +2880,29 @@ namespace CodeWalker.Rendering } } - rndbl.AllTexturesLoaded = true;// alltexsloaded || (missingtexcount < 2); + //if (rndbl.SDtxds != null) + //{ + // for (int i = 0; i < rndbl.SDtxds.Length; i++) + // { + // if (!rndbl.SDtxds[i].Loaded) + // { + // alltexsloaded = false; + // } + // } + //} + //if (rndbl.HDtxds != null) + //{ + // for (int i = 0; i < rndbl.HDtxds.Length; i++) + // { + // if (!rndbl.HDtxds[i].Loaded) + // { + // rndbl.AllTexturesLoaded = false; + // } + // } + //} + + rndbl.AllTexturesLoaded = true;// alltexsloaded;// || (missingtexcount < 2); + return rndbl; } From da7a9e106ff28c2b33f2632018bf38b4e7a315c7 Mon Sep 17 00:00:00 2001 From: dexy Date: Wed, 9 Jan 2019 12:15:38 +1100 Subject: [PATCH 069/158] HD textures option in model viewer --- .../GameFiles/FileTypes/YmfFile.cs | 2 + CodeWalker.Core/GameFiles/GameFileCache.cs | 9 +- Forms/ModelForm.Designer.cs | 90 +++++++++++-------- Forms/ModelForm.cs | 5 ++ Rendering/Renderer.cs | 31 ++++--- 5 files changed, 83 insertions(+), 54 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/YmfFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YmfFile.cs index 1083bd7..db900d7 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YmfFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YmfFile.cs @@ -60,6 +60,8 @@ namespace CodeWalker.GameFiles } return; } + else + { }//doesn't get here diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index 1b95d71..5113671 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -204,10 +204,16 @@ namespace CodeWalker.GameFiles BaseRpfs = allRpfs; DlcRpfs = new List(); + UpdateStatus("Building global dictionaries..."); InitGlobalDicts(); + UpdateStatus("Loading manifests..."); + InitManifestDicts(); + + UpdateStatus("Loading global texture list..."); InitGtxds(); + UpdateStatus("Loading archetypes..."); InitArchetypeDicts(); IsInited = true; @@ -961,7 +967,8 @@ namespace CodeWalker.GameFiles { AllManifests = new List(); hdtexturelookup = new Dictionary(); - foreach (RpfFile file in ActiveMapRpfFiles.Values) //RpfMan.BaseRpfs) + IEnumerable rpfs = PreloadedMode ? AllRpfs : (IEnumerable)ActiveMapRpfFiles.Values; + foreach (RpfFile file in rpfs) { if (file.AllEntries == null) continue; //manifest and meta parsing.. diff --git a/Forms/ModelForm.Designer.cs b/Forms/ModelForm.Designer.cs index 40e2d81..c774c8a 100644 --- a/Forms/ModelForm.Designer.cs +++ b/Forms/ModelForm.Designer.cs @@ -42,6 +42,7 @@ this.ToolsModelsTabPage = new System.Windows.Forms.TabPage(); this.ModelsTreeView = new CodeWalker.WinForms.TreeViewFix(); this.ToolsTexturesTabPage = new System.Windows.Forms.TabPage(); + this.TextureViewerButton = new System.Windows.Forms.Button(); this.TexturesTreeView = new CodeWalker.WinForms.TreeViewFix(); this.ToolsDetailsTabPage = new System.Windows.Forms.TabPage(); this.DetailsPropertyGrid = new CodeWalker.WinForms.ReadOnlyPropertyGrid(); @@ -73,7 +74,7 @@ this.ToolsPanelHideButton = new System.Windows.Forms.Button(); this.ToolsDragPanel = new System.Windows.Forms.Panel(); this.ToolsPanelShowButton = new System.Windows.Forms.Button(); - this.TextureViewerButton = new System.Windows.Forms.Button(); + this.HDTexturesCheckBox = new System.Windows.Forms.CheckBox(); this.StatusStrip.SuspendLayout(); this.ConsolePanel.SuspendLayout(); this.ToolsPanel.SuspendLayout(); @@ -218,6 +219,16 @@ this.ToolsTexturesTabPage.Text = "Textures"; this.ToolsTexturesTabPage.UseVisualStyleBackColor = true; // + // TextureViewerButton + // + this.TextureViewerButton.Location = new System.Drawing.Point(6, 6); + this.TextureViewerButton.Name = "TextureViewerButton"; + this.TextureViewerButton.Size = new System.Drawing.Size(113, 23); + this.TextureViewerButton.TabIndex = 2; + this.TextureViewerButton.Text = "Open texture viewer"; + this.TextureViewerButton.UseVisualStyleBackColor = true; + this.TextureViewerButton.Click += new System.EventHandler(this.TextureViewerButton_Click); + // // TexturesTreeView // this.TexturesTreeView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) @@ -255,6 +266,7 @@ // // ToolsOptionsTabPage // + this.ToolsOptionsTabPage.Controls.Add(this.HDTexturesCheckBox); this.ToolsOptionsTabPage.Controls.Add(this.SkeletonsCheckBox); this.ToolsOptionsTabPage.Controls.Add(this.TimeOfDayLabel); this.ToolsOptionsTabPage.Controls.Add(this.label19); @@ -292,7 +304,7 @@ this.SkeletonsCheckBox.Location = new System.Drawing.Point(19, 444); this.SkeletonsCheckBox.Name = "SkeletonsCheckBox"; this.SkeletonsCheckBox.Size = new System.Drawing.Size(103, 17); - this.SkeletonsCheckBox.TabIndex = 21; + this.SkeletonsCheckBox.TabIndex = 22; this.SkeletonsCheckBox.Text = "Show Skeletons"; this.SkeletonsCheckBox.UseVisualStyleBackColor = true; this.SkeletonsCheckBox.CheckedChanged += new System.EventHandler(this.SkeletonsCheckBox_CheckedChanged); @@ -344,7 +356,7 @@ // ShowCollisionMeshesCheckBox // this.ShowCollisionMeshesCheckBox.AutoSize = true; - this.ShowCollisionMeshesCheckBox.Location = new System.Drawing.Point(19, 176); + this.ShowCollisionMeshesCheckBox.Location = new System.Drawing.Point(19, 173); this.ShowCollisionMeshesCheckBox.Name = "ShowCollisionMeshesCheckBox"; this.ShowCollisionMeshesCheckBox.Size = new System.Drawing.Size(132, 17); this.ShowCollisionMeshesCheckBox.TabIndex = 7; @@ -355,10 +367,10 @@ // GridCheckBox // this.GridCheckBox.AutoSize = true; - this.GridCheckBox.Location = new System.Drawing.Point(19, 353); + this.GridCheckBox.Location = new System.Drawing.Point(19, 364); this.GridCheckBox.Name = "GridCheckBox"; this.GridCheckBox.Size = new System.Drawing.Size(45, 17); - this.GridCheckBox.TabIndex = 16; + this.GridCheckBox.TabIndex = 17; this.GridCheckBox.Text = "Grid"; this.GridCheckBox.UseVisualStyleBackColor = true; this.GridCheckBox.CheckedChanged += new System.EventHandler(this.GridCheckBox_CheckedChanged); @@ -372,19 +384,19 @@ "40", "60", "100"}); - this.GridCountComboBox.Location = new System.Drawing.Point(83, 403); + this.GridCountComboBox.Location = new System.Drawing.Point(83, 411); this.GridCountComboBox.Name = "GridCountComboBox"; this.GridCountComboBox.Size = new System.Drawing.Size(114, 21); - this.GridCountComboBox.TabIndex = 20; + this.GridCountComboBox.TabIndex = 21; this.GridCountComboBox.SelectedIndexChanged += new System.EventHandler(this.GridCountComboBox_SelectedIndexChanged); // // label2 // this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(7, 406); + this.label2.Location = new System.Drawing.Point(7, 414); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(59, 13); - this.label2.TabIndex = 19; + this.label2.TabIndex = 20; this.label2.Text = "Grid count:"; // // GridSizeComboBox @@ -396,19 +408,19 @@ "1.0", "10", "100"}); - this.GridSizeComboBox.Location = new System.Drawing.Point(83, 376); + this.GridSizeComboBox.Location = new System.Drawing.Point(83, 384); this.GridSizeComboBox.Name = "GridSizeComboBox"; this.GridSizeComboBox.Size = new System.Drawing.Size(114, 21); - this.GridSizeComboBox.TabIndex = 18; + this.GridSizeComboBox.TabIndex = 19; this.GridSizeComboBox.SelectedIndexChanged += new System.EventHandler(this.GridSizeComboBox_SelectedIndexChanged); // // label1 // this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(7, 379); + this.label1.Location = new System.Drawing.Point(7, 387); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(70, 13); - this.label1.TabIndex = 17; + this.label1.TabIndex = 18; this.label1.Text = "Grid unit size:"; // // StatusBarCheckBox @@ -419,7 +431,7 @@ this.StatusBarCheckBox.Location = new System.Drawing.Point(19, 480); this.StatusBarCheckBox.Name = "StatusBarCheckBox"; this.StatusBarCheckBox.Size = new System.Drawing.Size(74, 17); - this.StatusBarCheckBox.TabIndex = 22; + this.StatusBarCheckBox.TabIndex = 23; this.StatusBarCheckBox.Text = "Status bar"; this.StatusBarCheckBox.UseVisualStyleBackColor = true; this.StatusBarCheckBox.CheckedChanged += new System.EventHandler(this.StatusBarCheckBox_CheckedChanged); @@ -430,7 +442,7 @@ this.ErrorConsoleCheckBox.Location = new System.Drawing.Point(105, 480); this.ErrorConsoleCheckBox.Name = "ErrorConsoleCheckBox"; this.ErrorConsoleCheckBox.Size = new System.Drawing.Size(88, 17); - this.ErrorConsoleCheckBox.TabIndex = 23; + this.ErrorConsoleCheckBox.TabIndex = 24; this.ErrorConsoleCheckBox.Text = "Error console"; this.ErrorConsoleCheckBox.UseVisualStyleBackColor = true; this.ErrorConsoleCheckBox.CheckedChanged += new System.EventHandler(this.ErrorConsoleCheckBox_CheckedChanged); @@ -475,7 +487,7 @@ // WireframeCheckBox // this.WireframeCheckBox.AutoSize = true; - this.WireframeCheckBox.Location = new System.Drawing.Point(19, 199); + this.WireframeCheckBox.Location = new System.Drawing.Point(19, 196); this.WireframeCheckBox.Name = "WireframeCheckBox"; this.WireframeCheckBox.Size = new System.Drawing.Size(74, 17); this.WireframeCheckBox.TabIndex = 8; @@ -497,19 +509,19 @@ "Texture coord 1", "Texture coord 2", "Texture coord 3"}); - this.RenderModeComboBox.Location = new System.Drawing.Point(83, 255); + this.RenderModeComboBox.Location = new System.Drawing.Point(83, 274); this.RenderModeComboBox.Name = "RenderModeComboBox"; this.RenderModeComboBox.Size = new System.Drawing.Size(114, 21); - this.RenderModeComboBox.TabIndex = 11; + this.RenderModeComboBox.TabIndex = 12; this.RenderModeComboBox.SelectedIndexChanged += new System.EventHandler(this.RenderModeComboBox_SelectedIndexChanged); // // label11 // this.label11.AutoSize = true; - this.label11.Location = new System.Drawing.Point(7, 285); + this.label11.Location = new System.Drawing.Point(7, 304); this.label11.Name = "label11"; this.label11.Size = new System.Drawing.Size(67, 13); - this.label11.TabIndex = 12; + this.label11.TabIndex = 13; this.label11.Text = "Tex sampler:"; // // TextureSamplerComboBox @@ -517,10 +529,10 @@ this.TextureSamplerComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.TextureSamplerComboBox.Enabled = false; this.TextureSamplerComboBox.FormattingEnabled = true; - this.TextureSamplerComboBox.Location = new System.Drawing.Point(83, 282); + this.TextureSamplerComboBox.Location = new System.Drawing.Point(83, 301); this.TextureSamplerComboBox.Name = "TextureSamplerComboBox"; this.TextureSamplerComboBox.Size = new System.Drawing.Size(114, 21); - this.TextureSamplerComboBox.TabIndex = 13; + this.TextureSamplerComboBox.TabIndex = 14; this.TextureSamplerComboBox.SelectedIndexChanged += new System.EventHandler(this.TextureSamplerComboBox_SelectedIndexChanged); // // TextureCoordsComboBox @@ -532,19 +544,19 @@ "Texture coord 1", "Texture coord 2", "Texture coord 3"}); - this.TextureCoordsComboBox.Location = new System.Drawing.Point(83, 309); + this.TextureCoordsComboBox.Location = new System.Drawing.Point(83, 328); this.TextureCoordsComboBox.Name = "TextureCoordsComboBox"; this.TextureCoordsComboBox.Size = new System.Drawing.Size(114, 21); - this.TextureCoordsComboBox.TabIndex = 15; + this.TextureCoordsComboBox.TabIndex = 16; this.TextureCoordsComboBox.SelectedIndexChanged += new System.EventHandler(this.TextureCoordsComboBox_SelectedIndexChanged); // // label10 // this.label10.AutoSize = true; - this.label10.Location = new System.Drawing.Point(7, 258); + this.label10.Location = new System.Drawing.Point(7, 277); this.label10.Name = "label10"; this.label10.Size = new System.Drawing.Size(74, 13); - this.label10.TabIndex = 10; + this.label10.TabIndex = 11; this.label10.Text = "Render mode:"; // // AnisotropicFilteringCheckBox @@ -552,7 +564,7 @@ this.AnisotropicFilteringCheckBox.AutoSize = true; this.AnisotropicFilteringCheckBox.Checked = true; this.AnisotropicFilteringCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; - this.AnisotropicFilteringCheckBox.Location = new System.Drawing.Point(19, 222); + this.AnisotropicFilteringCheckBox.Location = new System.Drawing.Point(19, 219); this.AnisotropicFilteringCheckBox.Name = "AnisotropicFilteringCheckBox"; this.AnisotropicFilteringCheckBox.Size = new System.Drawing.Size(114, 17); this.AnisotropicFilteringCheckBox.TabIndex = 9; @@ -563,10 +575,10 @@ // label14 // this.label14.AutoSize = true; - this.label14.Location = new System.Drawing.Point(7, 312); + this.label14.Location = new System.Drawing.Point(7, 331); this.label14.Name = "label14"; this.label14.Size = new System.Drawing.Size(63, 13); - this.label14.TabIndex = 14; + this.label14.TabIndex = 15; this.label14.Text = "Tex coords:"; // // ToolsPanelHideButton @@ -602,15 +614,18 @@ this.ToolsPanelShowButton.UseVisualStyleBackColor = true; this.ToolsPanelShowButton.Click += new System.EventHandler(this.ToolsPanelShowButton_Click); // - // TextureViewerButton + // HDTexturesCheckBox // - this.TextureViewerButton.Location = new System.Drawing.Point(6, 6); - this.TextureViewerButton.Name = "TextureViewerButton"; - this.TextureViewerButton.Size = new System.Drawing.Size(113, 23); - this.TextureViewerButton.TabIndex = 2; - this.TextureViewerButton.Text = "Open texture viewer"; - this.TextureViewerButton.UseVisualStyleBackColor = true; - this.TextureViewerButton.Click += new System.EventHandler(this.TextureViewerButton_Click); + this.HDTexturesCheckBox.AutoSize = true; + this.HDTexturesCheckBox.Checked = true; + this.HDTexturesCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; + this.HDTexturesCheckBox.Location = new System.Drawing.Point(19, 242); + this.HDTexturesCheckBox.Name = "HDTexturesCheckBox"; + this.HDTexturesCheckBox.Size = new System.Drawing.Size(82, 17); + this.HDTexturesCheckBox.TabIndex = 10; + this.HDTexturesCheckBox.Text = "HD textures"; + this.HDTexturesCheckBox.UseVisualStyleBackColor = true; + this.HDTexturesCheckBox.CheckedChanged += new System.EventHandler(this.HDTexturesCheckBox_CheckedChanged); // // ModelForm // @@ -696,5 +711,6 @@ private System.Windows.Forms.TrackBar TimeOfDayTrackBar; private System.Windows.Forms.CheckBox SkeletonsCheckBox; private System.Windows.Forms.Button TextureViewerButton; + private System.Windows.Forms.CheckBox HDTexturesCheckBox; } } \ No newline at end of file diff --git a/Forms/ModelForm.cs b/Forms/ModelForm.cs index 8ee1146..d2aa184 100644 --- a/Forms/ModelForm.cs +++ b/Forms/ModelForm.cs @@ -1399,6 +1399,11 @@ namespace CodeWalker.Forms Renderer.shaders.AnisotropicFiltering = AnisotropicFilteringCheckBox.Checked; } + private void HDTexturesCheckBox_CheckedChanged(object sender, EventArgs e) + { + Renderer.renderhdtextures = HDTexturesCheckBox.Checked; + } + private void RenderModeComboBox_SelectedIndexChanged(object sender, EventArgs e) { TextureSamplerComboBox.Enabled = false; diff --git a/Rendering/Renderer.cs b/Rendering/Renderer.cs index 6c23c86..144164a 100644 --- a/Rendering/Renderer.cs +++ b/Rendering/Renderer.cs @@ -2774,7 +2774,7 @@ namespace CodeWalker.Rendering if (dtex == null) //else //if (texDict != 0) { - + var waitingforload = false; if (rndbl.SDtxds != null) { //check the SD texture hierarchy @@ -2788,10 +2788,23 @@ namespace CodeWalker.Rendering else { txd = gameFileCache.GetYtd(txd.Key.Hash);//keep trying to load it - sometimes resuests can get lost (!) + waitingforload = true; } if (dtex != null) break; } - if (dtex == null)// rndbl.SDtxds.Length == 0)//texture not found.. + } + + if ((dtex == null) && (!waitingforload)) + { + //not present in dictionary... check already loaded texture dicts... (maybe resident?) + var ytd2 = gameFileCache.TryGetTextureDictForTexture(tex.NameHash); + if ((ytd2 != null) && (ytd2.Loaded) && (ytd2.TextureDict != null)) + { + dtex = ytd2.TextureDict.Lookup(tex.NameHash); + } + //else { } //couldn't find texture dict? + + if ((dtex == null) && (ytd2 == null))// rndbl.SDtxds.Length == 0)//texture not found.. { if (drawable.ShaderGroup.TextureDictionary != null)//check any embedded texdict { @@ -2801,20 +2814,6 @@ namespace CodeWalker.Rendering } } } - - - } - //else //no texdict specified, nothing to see here.. - //{ } - if (dtex == null) - { - //not present in dictionary... check already loaded texture dicts... (maybe resident?) - var ytd2 = gameFileCache.TryGetTextureDictForTexture(tex.NameHash); - if ((ytd2 != null) && (ytd2.Loaded) && (ytd2.TextureDict != null)) - { - dtex = ytd2.TextureDict.Lookup(tex.NameHash); - } - //else { } //couldn't find texture dict? } if (dtex != null) From f74fde1c67594a8013d7f7dcf4ed5607dca6bd55 Mon Sep 17 00:00:00 2001 From: dexy Date: Wed, 9 Jan 2019 12:47:03 +1100 Subject: [PATCH 070/158] RPF explorer now loading all archetypes for better texturing in model viewer (for eg DLC drawables) --- CodeWalker.Core/GameFiles/GameFileCache.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index 5113671..a222877 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -195,7 +195,7 @@ namespace CodeWalker.GameFiles Clear(); PreloadedMode = true; - EnableDlc = false; + EnableDlc = true;//just so everything (mainly archetypes) will load.. EnableMods = false; RpfMan = new RpfManager(); //try not to use this in this mode... RpfMan.Init(allRpfs); From 55ae14f1b089dff383a8ab10fe0bffe427e8aea1 Mon Sep 17 00:00:00 2001 From: dexy Date: Wed, 9 Jan 2019 13:25:23 +1100 Subject: [PATCH 071/158] Moved renderable cache to its own thread so GameFileCache doesn't interfere - better loading performance? --- WorldForm.cs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/WorldForm.cs b/WorldForm.cs index 459e56d..c8a53d9 100644 --- a/WorldForm.cs +++ b/WorldForm.cs @@ -4238,13 +4238,23 @@ namespace CodeWalker EnableDLCModsUI(); + Task.Run(() => { + while (formopen && !IsDisposed) //renderer content loop + { + bool rcItemsPending = Renderer.ContentThreadProc(); + + if (!rcItemsPending) + { + Thread.Sleep(1); //sleep if there's nothing to do + } + } + }); + while (formopen && !IsDisposed) //main asset loop { bool fcItemsPending = gameFileCache.ContentThreadProc(); - bool rcItemsPending = Renderer.ContentThreadProc(); - - if (!(fcItemsPending || rcItemsPending)) + if (!fcItemsPending) { Thread.Sleep(1); //sleep if there's nothing to do } From dd3b8bdab4b5e73b1f2cecc0e3ed734c0dccb348 Mon Sep 17 00:00:00 2001 From: dexy Date: Wed, 9 Jan 2019 16:55:11 +1100 Subject: [PATCH 072/158] Waiting for textures to load before rendering --- App.config | 5 ++-- Properties/Settings.Designer.cs | 4 +-- Properties/Settings.settings | 2 +- Rendering/Renderer.cs | 50 ++++++++++++++------------------- 4 files changed, 27 insertions(+), 34 deletions(-) diff --git a/App.config b/App.config index 11bc587..b4b2dcc 100644 --- a/App.config +++ b/App.config @@ -92,7 +92,7 @@ True - False + True 2147483648 @@ -153,7 +153,8 @@ - + Move Forwards: W Move Backwards: S Move Left: A diff --git a/Properties/Settings.Designer.cs b/Properties/Settings.Designer.cs index 96d1489..17a998e 100644 --- a/Properties/Settings.Designer.cs +++ b/Properties/Settings.Designer.cs @@ -12,7 +12,7 @@ namespace CodeWalker.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.5.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.9.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); @@ -349,7 +349,7 @@ namespace CodeWalker.Properties { [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("False")] + [global::System.Configuration.DefaultSettingValueAttribute("True")] public bool WaitForChildren { get { return ((bool)(this["WaitForChildren"])); diff --git a/Properties/Settings.settings b/Properties/Settings.settings index 8ce42d8..0e1a98f 100644 --- a/Properties/Settings.settings +++ b/Properties/Settings.settings @@ -84,7 +84,7 @@ True - False + True 2147483648 diff --git a/Rendering/Renderer.cs b/Rendering/Renderer.cs index 144164a..011fc59 100644 --- a/Rendering/Renderer.cs +++ b/Rendering/Renderer.cs @@ -1585,10 +1585,6 @@ namespace CodeWalker.Rendering if (renderentities) { - //go through the render list, and try ensure renderables and textures for all. - //if an entity is not fully loaded, set a flag for its parent, then traverse to root - //until found an entity that is fully loaded. - //on a second loop, build a final render list based on the flags. for (int i = 0; i < renderworldentities.Count; i++) { var ent = renderworldentities[i]; @@ -2741,7 +2737,7 @@ namespace CodeWalker.Rendering - //bool alltexsloaded = true; + bool alltexsloaded = true; for (int mi = 0; mi < rndbl.AllModels.Length; mi++) @@ -2774,7 +2770,7 @@ namespace CodeWalker.Rendering if (dtex == null) //else //if (texDict != 0) { - var waitingforload = false; + bool waitingforload = false; if (rndbl.SDtxds != null) { //check the SD texture hierarchy @@ -2792,16 +2788,32 @@ namespace CodeWalker.Rendering } if (dtex != null) break; } + + if (waitingforload) + { + alltexsloaded = false; + } } if ((dtex == null) && (!waitingforload)) { //not present in dictionary... check already loaded texture dicts... (maybe resident?) var ytd2 = gameFileCache.TryGetTextureDictForTexture(tex.NameHash); - if ((ytd2 != null) && (ytd2.Loaded) && (ytd2.TextureDict != null)) + if (ytd2 != null) { - dtex = ytd2.TextureDict.Lookup(tex.NameHash); + if (ytd2.Loaded) + { + if (ytd2.TextureDict != null) + { + dtex = ytd2.TextureDict.Lookup(tex.NameHash); + } + } + else + { + alltexsloaded = false; + } } + //else { } //couldn't find texture dict? if ((dtex == null) && (ytd2 == null))// rndbl.SDtxds.Length == 0)//texture not found.. @@ -2879,28 +2891,8 @@ namespace CodeWalker.Rendering } } - //if (rndbl.SDtxds != null) - //{ - // for (int i = 0; i < rndbl.SDtxds.Length; i++) - // { - // if (!rndbl.SDtxds[i].Loaded) - // { - // alltexsloaded = false; - // } - // } - //} - //if (rndbl.HDtxds != null) - //{ - // for (int i = 0; i < rndbl.HDtxds.Length; i++) - // { - // if (!rndbl.HDtxds[i].Loaded) - // { - // rndbl.AllTexturesLoaded = false; - // } - // } - //} - rndbl.AllTexturesLoaded = true;// alltexsloaded;// || (missingtexcount < 2); + rndbl.AllTexturesLoaded = alltexsloaded; return rndbl; From 6c244c6406175e5bee1933271e88a4126304bf21 Mon Sep 17 00:00:00 2001 From: dexy Date: Wed, 9 Jan 2019 18:09:12 +1100 Subject: [PATCH 073/158] Replaced CMapData and CEntityDef property gets with field gets for performance --- .../GameFiles/FileTypes/YmapFile.cs | 69 +++++++++---------- .../GameFiles/MetaTypes/Archetype.cs | 4 +- CodeWalker.Core/World/Space.cs | 2 +- Rendering/Renderer.cs | 24 +++---- Utils/MapUtils.cs | 4 +- 5 files changed, 51 insertions(+), 52 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs index 116d377..56098ac 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs @@ -109,7 +109,7 @@ namespace CodeWalker.GameFiles } } - physicsDictionaries = MetaTypes.GetHashArray(Meta, CMapData.physicsDictionaries); + physicsDictionaries = MetaTypes.GetHashArray(Meta, _CMapData.physicsDictionaries); EnsureEntities(Meta); //load all the entity data and create the YmapEntityDefs @@ -254,7 +254,7 @@ namespace CodeWalker.GameFiles if (CMloInstanceDefs != null) { } - var eptrs = MetaTypes.GetPointerArray(Meta, CMapData.entities); + var eptrs = MetaTypes.GetPointerArray(Meta, _CMapData.entities); //CEntityDefs = MetaTypes.ConvertDataArray(Meta, MetaName.CEntityDef, CMapData.entities); CEntityDefs = MetaTypes.GetTypedDataArray(Meta, MetaName.CEntityDef); if (CEntityDefs != null) @@ -303,7 +303,7 @@ namespace CodeWalker.GameFiles for (int i = 0; i < alldefs.Count; i++) { YmapEntityDef d = alldefs[i]; - int pind = d.CEntityDef.parentIndex; + int pind = d._CEntityDef.parentIndex; bool isroot = false; if ((pind < 0) || (pind >= alldefs.Count) || (pind >= i)) //index check? might be a problem { @@ -312,9 +312,9 @@ namespace CodeWalker.GameFiles else { YmapEntityDef p = alldefs[pind]; - if ((p.CEntityDef.lodLevel <= d.CEntityDef.lodLevel) || - ((p.CEntityDef.lodLevel == Unk_1264241711.LODTYPES_DEPTH_ORPHANHD) && - (d.CEntityDef.lodLevel != Unk_1264241711.LODTYPES_DEPTH_ORPHANHD))) + if ((p._CEntityDef.lodLevel <= d._CEntityDef.lodLevel) || + ((p._CEntityDef.lodLevel == Unk_1264241711.LODTYPES_DEPTH_ORPHANHD) && + (d._CEntityDef.lodLevel != Unk_1264241711.LODTYPES_DEPTH_ORPHANHD))) { isroot = true; p = null; @@ -346,7 +346,7 @@ namespace CodeWalker.GameFiles foreach (var ent in AllEntities) { - ent.Extensions = MetaTypes.GetExtensions(Meta, ent.CEntityDef.extensions); + ent.Extensions = MetaTypes.GetExtensions(Meta, ent._CEntityDef.extensions); } } @@ -354,9 +354,9 @@ namespace CodeWalker.GameFiles private void EnsureInstances(Meta Meta) { - if (CMapData.instancedData.GrassInstanceList.Count1 != 0) + if (_CMapData.instancedData.GrassInstanceList.Count1 != 0) { - rage__fwGrassInstanceListDef[] batches = MetaTypes.ConvertDataArray(Meta, MetaName.rage__fwGrassInstanceListDef, CMapData.instancedData.GrassInstanceList); + rage__fwGrassInstanceListDef[] batches = MetaTypes.ConvertDataArray(Meta, MetaName.rage__fwGrassInstanceListDef, _CMapData.instancedData.GrassInstanceList); YmapGrassInstanceBatch[] gbatches = new YmapGrassInstanceBatch[batches.Length]; for (int i = 0; i < batches.Length; i++) { @@ -374,7 +374,7 @@ namespace CodeWalker.GameFiles } GrassInstanceBatches = gbatches; } - if (CMapData.instancedData.PropInstanceList.Count1 != 0) + if (_CMapData.instancedData.PropInstanceList.Count1 != 0) { } } @@ -382,27 +382,27 @@ namespace CodeWalker.GameFiles private void EnsureLodLights(Meta Meta) { //TODO! - if (CMapData.LODLightsSOA.direction.Count1 != 0) + if (_CMapData.LODLightsSOA.direction.Count1 != 0) { } } private void EnsureDistantLODLights(Meta Meta) { - if (CMapData.DistantLODLightsSOA.position.Count1 != 0) + if (_CMapData.DistantLODLightsSOA.position.Count1 != 0) { DistantLODLights = new YmapDistantLODLights(); DistantLODLights.Ymap = this; - DistantLODLights.CDistantLODLight = CMapData.DistantLODLightsSOA; - DistantLODLights.colours = MetaTypes.GetUintArray(Meta, CMapData.DistantLODLightsSOA.RGBI); - DistantLODLights.positions = MetaTypes.ConvertDataArray(Meta, MetaName.VECTOR3, CMapData.DistantLODLightsSOA.position); + DistantLODLights.CDistantLODLight = _CMapData.DistantLODLightsSOA; + DistantLODLights.colours = MetaTypes.GetUintArray(Meta, _CMapData.DistantLODLightsSOA.RGBI); + DistantLODLights.positions = MetaTypes.ConvertDataArray(Meta, MetaName.VECTOR3, _CMapData.DistantLODLightsSOA.position); DistantLODLights.CalcBB(); } } private void EnsureTimeCycleModifiers(Meta Meta) { - CTimeCycleModifiers = MetaTypes.ConvertDataArray(Meta, MetaName.CTimeCycleModifier, CMapData.timeCycleModifiers); + CTimeCycleModifiers = MetaTypes.ConvertDataArray(Meta, MetaName.CTimeCycleModifier, _CMapData.timeCycleModifiers); if (CTimeCycleModifiers != null) { TimeCycleModifiers = new YmapTimeCycleModifier[CTimeCycleModifiers.Length]; @@ -421,7 +421,7 @@ namespace CodeWalker.GameFiles private void EnsureCarGens(Meta Meta) { - CCarGens = MetaTypes.ConvertDataArray(Meta, MetaName.CCarGen, CMapData.carGenerators); + CCarGens = MetaTypes.ConvertDataArray(Meta, MetaName.CCarGen, _CMapData.carGenerators); if (CCarGens != null) { //string str = MetaTypes.GetTypesInitString(resentry, Meta); //to generate structinfos and enuminfos @@ -435,7 +435,7 @@ namespace CodeWalker.GameFiles private void EnsureBoxOccluders(Meta meta) { - CBoxOccluders = MetaTypes.ConvertDataArray(Meta, MetaName.BoxOccluder, CMapData.boxOccluders); + CBoxOccluders = MetaTypes.ConvertDataArray(Meta, MetaName.BoxOccluder, _CMapData.boxOccluders); if (CBoxOccluders != null) { BoxOccluders = new YmapBoxOccluder[CBoxOccluders.Length]; @@ -449,7 +449,7 @@ namespace CodeWalker.GameFiles private void EnsureOccludeModels(Meta meta) { - COccludeModels = MetaTypes.ConvertDataArray(Meta, MetaName.OccludeModel, CMapData.occludeModels); + COccludeModels = MetaTypes.ConvertDataArray(Meta, MetaName.OccludeModel, _CMapData.occludeModels); if (COccludeModels != null) { OccludeModels = new YmapOccludeModel[COccludeModels.Length]; @@ -467,7 +467,7 @@ namespace CodeWalker.GameFiles { //TODO: containerLods - if (CMapData.containerLods.Count1 > 0) + if (_CMapData.containerLods.Count1 > 0) { //string str = MetaTypes.GetTypesInitString(Meta); //to generate structinfos and enuminfos @@ -500,7 +500,7 @@ namespace CodeWalker.GameFiles } else { - centdefs.Add(ent.CEntityDef); + centdefs.Add(ent._CEntityDef); } } @@ -779,10 +779,10 @@ namespace CodeWalker.GameFiles { foreach (var rcent in cmap.RootEntities) { - int pind = rcent.CEntityDef.parentIndex; + int pind = rcent._CEntityDef.parentIndex; if (pind < 0) { - if (rcent.CEntityDef.lodLevel != Unk_1264241711.LODTYPES_DEPTH_ORPHANHD) + if (rcent._CEntityDef.lodLevel != Unk_1264241711.LODTYPES_DEPTH_ORPHANHD) { } //pind = 0; @@ -985,8 +985,7 @@ namespace CodeWalker.GameFiles { foreach (var yent in AllEntities) { - var cent = yent.CEntityDef; - switch (cent.lodLevel) + switch (yent._CEntityDef.lodLevel) { case Unk_1264241711.LODTYPES_DEPTH_ORPHANHD: case Unk_1264241711.LODTYPES_DEPTH_HD: @@ -1185,7 +1184,7 @@ namespace CodeWalker.GameFiles for (int i = 0; i < AllEntities.Length; i++) { var ent = AllEntities[i]; - var arch = gfc.GetArchetype(ent.CEntityDef.archetypeName); + var arch = gfc.GetArchetype(ent._CEntityDef.archetypeName); ent.SetArchetype(arch); if (ent.IsMlo) ent.MloInstance.InitYmapEntityArchetypes(gfc); } @@ -1283,9 +1282,9 @@ namespace CodeWalker.GameFiles Ymap = ymap; Index = index; CEntityDef = def; - Scale = new Vector3(new Vector2(CEntityDef.scaleXY), CEntityDef.scaleZ); - Position = CEntityDef.position; - Orientation = new Quaternion(CEntityDef.rotation); + Scale = new Vector3(new Vector2(_CEntityDef.scaleXY), _CEntityDef.scaleZ); + Position = _CEntityDef.position; + Orientation = new Quaternion(_CEntityDef.rotation); if (Orientation != Quaternion.Identity) { Orientation = Quaternion.Invert(Orientation); @@ -1301,9 +1300,9 @@ namespace CodeWalker.GameFiles Ymap = ymap; Index = index; CEntityDef = mlo.CEntityDef; - Scale = new Vector3(new Vector2(CEntityDef.scaleXY), CEntityDef.scaleZ); - Position = CEntityDef.position; - Orientation = new Quaternion(CEntityDef.rotation); + Scale = new Vector3(new Vector2(_CEntityDef.scaleXY), _CEntityDef.scaleZ); + Position = _CEntityDef.position; + Orientation = new Quaternion(_CEntityDef.rotation); //if (Orientation != Quaternion.Identity) //{ // Orientation = Quaternion.Invert(Orientation); @@ -1363,7 +1362,7 @@ namespace CodeWalker.GameFiles if (BSRadius == 0.0f) { - BSRadius = CEntityDef.lodDist;//need something so it doesn't get culled... + BSRadius = _CEntityDef.lodDist;//need something so it doesn't get culled... } } else if (IsMlo) // archetype is no longer an mlo @@ -1551,7 +1550,7 @@ namespace CodeWalker.GameFiles ChildList = new List(); } c.Parent = this; - c.ParentName = CEntityDef.archetypeName; + c.ParentName = _CEntityDef.archetypeName; ChildList.Add(c); } @@ -1594,7 +1593,7 @@ namespace CodeWalker.GameFiles public override string ToString() { - return CEntityDef.ToString() + ((ChildList != null) ? (" (" + ChildList.Count.ToString() + " children) ") : " ") + CEntityDef.lodLevel.ToString(); + return _CEntityDef.ToString() + ((ChildList != null) ? (" (" + ChildList.Count.ToString() + " children) ") : " ") + _CEntityDef.lodLevel.ToString(); } } diff --git a/CodeWalker.Core/GameFiles/MetaTypes/Archetype.cs b/CodeWalker.Core/GameFiles/MetaTypes/Archetype.cs index d5279b8..03cb437 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/Archetype.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/Archetype.cs @@ -433,7 +433,7 @@ namespace CodeWalker.GameFiles for (int j = 0; j < Entities.Length; j++) { var ient = Entities[j]; - var iarch = gfc.GetArchetype(ient.CEntityDef.archetypeName); + var iarch = gfc.GetArchetype(ient._CEntityDef.archetypeName); ient.SetArchetype(iarch); if (iarch == null) @@ -453,7 +453,7 @@ namespace CodeWalker.GameFiles for (int i = 0; i < entities.Count; i++) { var ient = entities[i]; - var iarch = gfc.GetArchetype(ient.CEntityDef.archetypeName); + var iarch = gfc.GetArchetype(ient._CEntityDef.archetypeName); ient.SetArchetype(iarch); if (iarch == null) diff --git a/CodeWalker.Core/World/Space.cs b/CodeWalker.Core/World/Space.cs index 5e95911..c34eada 100644 --- a/CodeWalker.Core/World/Space.cs +++ b/CodeWalker.Core/World/Space.cs @@ -1063,7 +1063,7 @@ namespace CodeWalker.World { if (!IsYmapAvailable(hash, hour, weather)) break; ymaps[hash] = ymap; - hash = ymap.CMapData.parent; + hash = ymap._CMapData.parent; if (ymaps.ContainsKey(hash)) break; ymap = (hash > 0) ? GameFileCache.GetYmap(hash) : null; } diff --git a/Rendering/Renderer.cs b/Rendering/Renderer.cs index 011fc59..1eebd58 100644 --- a/Rendering/Renderer.cs +++ b/Rendering/Renderer.cs @@ -1544,11 +1544,11 @@ namespace CodeWalker.Rendering if (ymap.RootEntities != null) { YmapFile pymap; - renderworldVisibleYmapDict.TryGetValue(ymap.CMapData.parent, out pymap); + renderworldVisibleYmapDict.TryGetValue(ymap._CMapData.parent, out pymap); for (int i = 0; i < ymap.RootEntities.Length; i++) { var ent = ymap.RootEntities[i]; - int pind = ent.CEntityDef.parentIndex; + int pind = ent._CEntityDef.parentIndex; if (pind >= 0) //connect root entities to parents if they have them.. { YmapEntityDef p = null; @@ -1558,7 +1558,7 @@ namespace CodeWalker.Rendering { p = pymap.AllEntities[pind]; ent.Parent = p; - ent.ParentName = p.CEntityDef.archetypeName; + ent.ParentName = p._CEntityDef.archetypeName; } } else @@ -1684,8 +1684,8 @@ namespace CodeWalker.Rendering } - var loddist = ent.CEntityDef.lodDist; - var cloddist = ent.CEntityDef.childLodDist; + var loddist = ent._CEntityDef.lodDist; + var cloddist = ent._CEntityDef.childLodDist; if (loddist <= 0.0f)//usually -1 or -2 { @@ -1694,7 +1694,7 @@ namespace CodeWalker.Rendering loddist = ent.Archetype.LodDist * renderworldLodDistMult; } } - else if (ent.CEntityDef.lodLevel == Unk_1264241711.LODTYPES_DEPTH_ORPHANHD) + else if (ent._CEntityDef.lodLevel == Unk_1264241711.LODTYPES_DEPTH_ORPHANHD) { loddist *= renderworldDetailDistMult * 1.5f; //orphan view dist adjustment... } @@ -1719,19 +1719,19 @@ namespace CodeWalker.Rendering ent.Distance = dist; ent.IsVisible = (dist <= loddist); - ent.ChildrenVisible = (dist <= cloddist) && (ent.CEntityDef.numChildren > 0); + ent.ChildrenVisible = (dist <= cloddist) && (ent._CEntityDef.numChildren > 0); if (renderworldMaxLOD != Unk_1264241711.LODTYPES_DEPTH_ORPHANHD) { - if ((ent.CEntityDef.lodLevel == Unk_1264241711.LODTYPES_DEPTH_ORPHANHD) || - (ent.CEntityDef.lodLevel < renderworldMaxLOD)) + if ((ent._CEntityDef.lodLevel == Unk_1264241711.LODTYPES_DEPTH_ORPHANHD) || + (ent._CEntityDef.lodLevel < renderworldMaxLOD)) { ent.IsVisible = false; ent.ChildrenVisible = false; } - if (ent.CEntityDef.lodLevel == renderworldMaxLOD) + if (ent._CEntityDef.lodLevel == renderworldMaxLOD) { ent.ChildrenVisible = false; } @@ -2008,7 +2008,7 @@ namespace CodeWalker.Rendering float dist = (camrel + entity.BSCenter).Length(); entity.Distance = dist; float rad = arch.BSRadius; - float loddist = entity.CEntityDef.lodDist; + float loddist = entity._CEntityDef.lodDist; if (loddist < 1.0f) { loddist = 200.0f; @@ -2384,7 +2384,7 @@ namespace CodeWalker.Rendering position = entity.Position; scale = entity.Scale; orientation = entity.Orientation; - tintPaletteIndex = entity.CEntityDef.tintValue; + tintPaletteIndex = entity._CEntityDef.tintValue; bbmin = entity.BBMin; bbmax = entity.BBMax; bscen = entity.BSCenter; diff --git a/Utils/MapUtils.cs b/Utils/MapUtils.cs index 6b1e0fd..e320884 100644 --- a/Utils/MapUtils.cs +++ b/Utils/MapUtils.cs @@ -338,7 +338,7 @@ namespace CodeWalker } else if (EntityDef != null) { - name = EntityDef.CEntityDef.archetypeName.ToString(); + name = EntityDef._CEntityDef.archetypeName.ToString(); } else if (Archetype != null) { @@ -424,7 +424,7 @@ namespace CodeWalker } else if (EntityDef != null) { - name = EntityDef.CEntityDef.archetypeName.ToString(); + name = EntityDef._CEntityDef.archetypeName.ToString(); } else if (Archetype != null) { From d7623c32438430f1acd5d2afd7ea25d3fbd42b55 Mon Sep 17 00:00:00 2001 From: dexy Date: Thu, 10 Jan 2019 12:47:59 +1100 Subject: [PATCH 074/158] Moved tools forms into Tools folder, removed unused Materials.txt --- CodeWalker.csproj | 61 +++-- Materials.txt | 215 ------------------ .../BinarySearchForm.Designer.cs | 0 .../BinarySearchForm.cs | 0 .../BinarySearchForm.resx | 0 .../BrowseForm.Designer.cs | 0 BrowseForm.cs => Tools/BrowseForm.cs | 0 BrowseForm.resx => Tools/BrowseForm.resx | 0 .../ExtractKeysForm.Designer.cs | 0 .../ExtractKeysForm.cs | 0 .../ExtractKeysForm.resx | 0 .../ExtractRawForm.Designer.cs | 0 ExtractRawForm.cs => Tools/ExtractRawForm.cs | 0 .../ExtractRawForm.resx | 0 .../ExtractScriptsForm.Designer.cs | 0 .../ExtractScriptsForm.cs | 0 .../ExtractScriptsForm.resx | 0 .../ExtractShadersForm.Designer.cs | 0 .../ExtractShadersForm.cs | 0 .../ExtractShadersForm.resx | 0 .../ExtractTexForm.Designer.cs | 0 ExtractTexForm.cs => Tools/ExtractTexForm.cs | 0 .../ExtractTexForm.resx | 0 .../JenkGenForm.Designer.cs | 0 JenkGenForm.cs => Tools/JenkGenForm.cs | 0 JenkGenForm.resx => Tools/JenkGenForm.resx | 0 .../JenkIndForm.Designer.cs | 0 JenkIndForm.cs => Tools/JenkIndForm.cs | 0 JenkIndForm.resx => Tools/JenkIndForm.resx | 0 .../TextInputForm.Designer.cs | 0 TextInputForm.cs => Utils/TextInputForm.cs | 0 .../TextInputForm.resx | 0 32 files changed, 30 insertions(+), 246 deletions(-) delete mode 100644 Materials.txt rename BinarySearchForm.Designer.cs => Tools/BinarySearchForm.Designer.cs (100%) rename BinarySearchForm.cs => Tools/BinarySearchForm.cs (100%) rename BinarySearchForm.resx => Tools/BinarySearchForm.resx (100%) rename BrowseForm.Designer.cs => Tools/BrowseForm.Designer.cs (100%) rename BrowseForm.cs => Tools/BrowseForm.cs (100%) rename BrowseForm.resx => Tools/BrowseForm.resx (100%) rename ExtractKeysForm.Designer.cs => Tools/ExtractKeysForm.Designer.cs (100%) rename ExtractKeysForm.cs => Tools/ExtractKeysForm.cs (100%) rename ExtractKeysForm.resx => Tools/ExtractKeysForm.resx (100%) rename ExtractRawForm.Designer.cs => Tools/ExtractRawForm.Designer.cs (100%) rename ExtractRawForm.cs => Tools/ExtractRawForm.cs (100%) rename ExtractRawForm.resx => Tools/ExtractRawForm.resx (100%) rename ExtractScriptsForm.Designer.cs => Tools/ExtractScriptsForm.Designer.cs (100%) rename ExtractScriptsForm.cs => Tools/ExtractScriptsForm.cs (100%) rename ExtractScriptsForm.resx => Tools/ExtractScriptsForm.resx (100%) rename ExtractShadersForm.Designer.cs => Tools/ExtractShadersForm.Designer.cs (100%) rename ExtractShadersForm.cs => Tools/ExtractShadersForm.cs (100%) rename ExtractShadersForm.resx => Tools/ExtractShadersForm.resx (100%) rename ExtractTexForm.Designer.cs => Tools/ExtractTexForm.Designer.cs (100%) rename ExtractTexForm.cs => Tools/ExtractTexForm.cs (100%) rename ExtractTexForm.resx => Tools/ExtractTexForm.resx (100%) rename JenkGenForm.Designer.cs => Tools/JenkGenForm.Designer.cs (100%) rename JenkGenForm.cs => Tools/JenkGenForm.cs (100%) rename JenkGenForm.resx => Tools/JenkGenForm.resx (100%) rename JenkIndForm.Designer.cs => Tools/JenkIndForm.Designer.cs (100%) rename JenkIndForm.cs => Tools/JenkIndForm.cs (100%) rename JenkIndForm.resx => Tools/JenkIndForm.resx (100%) rename TextInputForm.Designer.cs => Utils/TextInputForm.Designer.cs (100%) rename TextInputForm.cs => Utils/TextInputForm.cs (100%) rename TextInputForm.resx => Utils/TextInputForm.resx (100%) diff --git a/CodeWalker.csproj b/CodeWalker.csproj index 3d32cc9..b6dc6a5 100644 --- a/CodeWalker.csproj +++ b/CodeWalker.csproj @@ -143,10 +143,10 @@ AboutForm.cs - + Form - + BrowseForm.cs @@ -155,34 +155,34 @@ ExploreForm.cs - + Form - + ExtractKeysForm.cs - + Form - + ExtractScriptsForm.cs - + Form - + ExtractRawForm.cs - + Form - + ExtractShadersForm.cs - + Form - + ExtractTexForm.cs @@ -265,16 +265,16 @@ - + Form - + JenkGenForm.cs - + Form - + JenkIndForm.cs @@ -522,10 +522,10 @@ StatisticsForm.cs - + Form - + TextInputForm.cs @@ -549,10 +549,10 @@ - + Form - + BinarySearchForm.cs @@ -565,25 +565,25 @@ AboutForm.cs - + BrowseForm.cs ExploreForm.cs - + ExtractKeysForm.cs - + ExtractScriptsForm.cs - + ExtractRawForm.cs - + ExtractShadersForm.cs - + ExtractTexForm.cs @@ -625,10 +625,10 @@ YwrForm.cs - + JenkGenForm.cs - + JenkIndForm.cs @@ -737,7 +737,7 @@ Resources.resx True - + BinarySearchForm.cs @@ -749,7 +749,7 @@ StatisticsForm.cs - + TextInputForm.cs @@ -780,7 +780,6 @@ - diff --git a/Materials.txt b/Materials.txt deleted file mode 100644 index cf51616..0000000 --- a/Materials.txt +++ /dev/null @@ -1,215 +0,0 @@ -# CodeWalker Collision Material Colours File -# Material Name ABGR (hex) - -DEFAULT FFCCCCCC -CONCRETE FFDDDDDD -CONCRETE_POTHOLE FFDDDDDD -CONCRETE_DUSTY FFDDDDDD -TARMAC FF333333 -TARMAC_PAINTED FF333355 -TARMAC_POTHOLE FF303030 -RUMBLE_STRIP FF444444 -BREEZE_BLOCK FF555555 -ROCK FF228899 -ROCK_MOSSY FF22CC88 -STONE FFAAAAAA -COBBLESTONE FFAAAAAA -BRICK FF332299 -MARBLE FF666699 -PAVING_SLAB FFCCCCCC -SANDSTONE_SOLID FF48EFEF -SANDSTONE_BRITTLE FF47ECEC -SAND_LOOSE FF46F0F0 -SAND_COMPACT FF44EEEE -SAND_WET FF22CCCC -SAND_TRACK FF40E0E0 -SAND_UNDERWATER FF30D0D0 -SAND_DRY_DEEP FF46F0F0 -SAND_WET_DEEP FF22CCCC -ICE FFEEDDCC -ICE_TARMAC FFBBAFAF -SNOW_LOOSE FFFFFCFC -SNOW_COMPACT FFFFF0F0 -SNOW_DEEP FFFFFAFA -SNOW_TARMAC FFFAF0F0 -GRAVEL_SMALL FF99CCDD -GRAVEL_LARGE FF9BDFDF -GRAVEL_DEEP FF95D9D9 -GRAVEL_TRAIN_TRACK FF9A9A9A -DIRT_TRACK FF36479C -MUD_HARD FF334499 -MUD_POTHOLE FF27388D -MUD_SOFT FF223388 -MUD_UNDERWATER FF1F3085 -MUD_DEEP FF1D2883 -MARSH FF20DD80 -MARSH_DEEP FF1CD97C -SOIL FF112266 -CLAY_HARD FF334477 -CLAY_SOFT FF304174 -GRASS_LONG FF0FA81F -GRASS FF11AA11 -GRASS_SHORT FF22AA22 -HAY FF40F5F5 -BUSHES FF009900 -TWIGS FF00CC44 -LEAVES FF22CC22 -WOODCHIPS FF33AACC -TREE_BARK FF1199BB -METAL_SOLID_SMALL FFDDDDDD -METAL_SOLID_MEDIUM FFDDDDDD -METAL_SOLID_LARGE FFDDDDDD -METAL_HOLLOW_SMALL FFDDDDDD -METAL_HOLLOW_MEDIUM FFDDDDDD -METAL_HOLLOW_LARGE FFDDDDDD -METAL_CHAINLINK_SMALL FFDDDDDD -METAL_CHAINLINK_LARGE FFDDDDDD -METAL_CORRUGATED_IRON FFDDDDDD -METAL_GRILLE FFDDDDDD -METAL_RAILING FFDDDDDD -METAL_DUCT FFDDDDDD -METAL_GARAGE_DOOR FFDDDDDD -METAL_MANHOLE FFDDDDDD -WOOD_SOLID_SMALL FF117799 -WOOD_SOLID_MEDIUM FF117799 -WOOD_SOLID_LARGE FF117799 -WOOD_SOLID_POLISHED FF117799 -WOOD_FLOOR_DUSTY FF117799 -WOOD_HOLLOW_SMALL FF117799 -WOOD_HOLLOW_MEDIUM FF117799 -WOOD_HOLLOW_LARGE FF117799 -WOOD_CHIPBOARD FF117799 -WOOD_OLD_CREAKY FF117799 -WOOD_HIGH_DENSITY FF117799 -WOOD_LATTICE FF117799 -CERAMIC FFEEEEEE -ROOF_TILE FF111177 -ROOF_FELT FF666666 -FIBREGLASS FF99BBDD -TARPAULIN FFEE4411 -PLASTIC FFEE5522 -PLASTIC_HOLLOW FFEE5522 -PLASTIC_HIGH_DENSITY FFEE5533 -PLASTIC_CLEAR FFFE6543 -PLASTIC_HOLLOW_CLEAR FFFE6543 -PLASTIC_HIGH_DENSITY_CLEAR FFFE5543 -FIBREGLASS_HOLLOW FF9ABCDE -RUBBER FF111111 -RUBBER_HOLLOW FF111111 -LINOLEUM FFAAAAAA -LAMINATE FFBBBBBB -CARPET_SOLID FFDDDDDD -CARPET_SOLID_DUSTY FFDEDEDE -CARPET_FLOORBOARD FFD0D0D0 -CLOTH FFEEEEEE -PLASTER_SOLID FFEEEEEE -PLASTER_BRITTLE FFEEEEEE -CARDBOARD_SHEET FF11AACC -CARDBOARD_BOX FF11AACC -PAPER FFF4F4F4 -FOAM FFEFEFEF -FEATHER_PILLOW FFEEEEEE -POLYSTYRENE FFFFFFFF -LEATHER FF111122 -TVSCREEN FF111111 -SLATTED_BLINDS FFCCCCCC -GLASS_SHOOT_THROUGH 77EECCCC -GLASS_BULLETPROOF 77EFCDCD -GLASS_OPAQUE DDEECCCC -PERSPEX 66EEDDDD -CAR_METAL FFDDDDDD -CAR_PLASTIC FFEE5522 -CAR_SOFTTOP FF333333 -CAR_SOFTTOP_CLEAR 55DDDDDD -CAR_GLASS_WEAK 77EECCCC -CAR_GLASS_MEDIUM 77EECCCC -CAR_GLASS_STRONG 77EECCCC -CAR_GLASS_BULLETPROOF 77EECCCC -CAR_GLASS_OPAQUE 77EECCCC -WATER 77EECCAA -BLOOD FF0000CC -OIL EE112233 -PETROL 77CCDDEE -FRESH_MEAT FFCCDDEE -DRIED_MEAT FFDDEEFF -EMISSIVE_GLASS EEEEDDDD -EMISSIVE_PLASTIC FFEE7744 -VFX_METAL_ELECTRIFIED FFFFEEEE -VFX_METAL_WATER_TOWER FFCCCCCC -VFX_METAL_STEAM FFBBBBBB -VFX_METAL_FLAME FFBBBBFF -PHYS_NO_FRICTION FF00DD00 -PHYS_GOLF_BALL FFFFFFFF -PHYS_TENNIS_BALL FFCCFFCC -PHYS_CASTER FF050505 -PHYS_CASTER_RUSTY FF050535 -PHYS_CAR_VOID FF000000 -PHYS_PED_CAPSULE FFDDDDDD -PHYS_ELECTRIC_FENCE FFFFDDCC -PHYS_ELECTRIC_METAL FFFFEEDD -PHYS_BARBED_WIRE FFCCCCDC -PHYS_POOLTABLE_SURFACE FF116611 -PHYS_POOLTABLE_CUSHION FF156815 -PHYS_POOLTABLE_BALL FFCCCCCC -BUTTOCKS FFFFFFFF -THIGH_LEFT FFFFFFFF -SHIN_LEFT FFFFFFFF -FOOT_LEFT FFFFFFFF -THIGH_RIGHT FFFFFFFF -SHIN_RIGHT FFFFFFFF -FOOT_RIGHT FFFFFFFF -SPINE0 FFFFFFFF -SPINE1 FFFFFFFF -SPINE2 FFFFFFFF -SPINE3 FFFFFFFF -CLAVICLE_LEFT FFFFFFFF -UPPER_ARM_LEFT FFFFFFFF -LOWER_ARM_LEFT FFFFFFFF -HAND_LEFT FFFFFFFF -CLAVICLE_RIGHT FFFFFFFF -UPPER_ARM_RIGHT FFFFFFFF -LOWER_ARM_RIGHT FFFFFFFF -HAND_RIGHT FFFFFFFF -NECK FFFFFFFF -HEAD FFFFFFFF -ANIMAL_DEFAULT FFFFFFFF -CAR_ENGINE FFFFFFFF -PUDDLE CCFFDDDD -CONCRETE_PAVEMENT FFDEDEDE -BRICK_PAVEMENT FF332299 -PHYS_DYNAMIC_COVER_BOUND FFFFFFFF -VFX_WOOD_BEER_BARREL FF117799 -WOOD_HIGH_FRICTION FF117799 -ROCK_NOINST FF228899 -BUSHES_NOINST FF009900 -METAL_SOLID_ROAD_SURFACE FF444455 -TEMP_01 FFFFFFFF -TEMP_02 FFFFFFFF -TEMP_03 FFFFFFFF -TEMP_04 FFFFFFFF -TEMP_05 FFFFFFFF -TEMP_06 FFFFFFFF -TEMP_07 FFFFFFFF -TEMP_08 FFFFFFFF -TEMP_09 FFFFFFFF -TEMP_10 FFFFFFFF -TEMP_11 FFFFFFFF -TEMP_12 FFFFFFFF -TEMP_13 FFFFFFFF -TEMP_14 FFFFFFFF -TEMP_15 FFFFFFFF -TEMP_16 FFFFFFFF -TEMP_17 FFFFFFFF -TEMP_18 FFFFFFFF -TEMP_19 FFFFFFFF -TEMP_20 FFFFFFFF -TEMP_21 FFFFFFFF -TEMP_22 FFFFFFFF -TEMP_23 FFFFFFFF -TEMP_24 FFFFFFFF -TEMP_25 FFFFFFFF -TEMP_26 FFFFFFFF -TEMP_27 FFFFFFFF -TEMP_28 FFFFFFFF -TEMP_29 FFFFFFFF -TEMP_30 FFFFFFFF diff --git a/BinarySearchForm.Designer.cs b/Tools/BinarySearchForm.Designer.cs similarity index 100% rename from BinarySearchForm.Designer.cs rename to Tools/BinarySearchForm.Designer.cs diff --git a/BinarySearchForm.cs b/Tools/BinarySearchForm.cs similarity index 100% rename from BinarySearchForm.cs rename to Tools/BinarySearchForm.cs diff --git a/BinarySearchForm.resx b/Tools/BinarySearchForm.resx similarity index 100% rename from BinarySearchForm.resx rename to Tools/BinarySearchForm.resx diff --git a/BrowseForm.Designer.cs b/Tools/BrowseForm.Designer.cs similarity index 100% rename from BrowseForm.Designer.cs rename to Tools/BrowseForm.Designer.cs diff --git a/BrowseForm.cs b/Tools/BrowseForm.cs similarity index 100% rename from BrowseForm.cs rename to Tools/BrowseForm.cs diff --git a/BrowseForm.resx b/Tools/BrowseForm.resx similarity index 100% rename from BrowseForm.resx rename to Tools/BrowseForm.resx diff --git a/ExtractKeysForm.Designer.cs b/Tools/ExtractKeysForm.Designer.cs similarity index 100% rename from ExtractKeysForm.Designer.cs rename to Tools/ExtractKeysForm.Designer.cs diff --git a/ExtractKeysForm.cs b/Tools/ExtractKeysForm.cs similarity index 100% rename from ExtractKeysForm.cs rename to Tools/ExtractKeysForm.cs diff --git a/ExtractKeysForm.resx b/Tools/ExtractKeysForm.resx similarity index 100% rename from ExtractKeysForm.resx rename to Tools/ExtractKeysForm.resx diff --git a/ExtractRawForm.Designer.cs b/Tools/ExtractRawForm.Designer.cs similarity index 100% rename from ExtractRawForm.Designer.cs rename to Tools/ExtractRawForm.Designer.cs diff --git a/ExtractRawForm.cs b/Tools/ExtractRawForm.cs similarity index 100% rename from ExtractRawForm.cs rename to Tools/ExtractRawForm.cs diff --git a/ExtractRawForm.resx b/Tools/ExtractRawForm.resx similarity index 100% rename from ExtractRawForm.resx rename to Tools/ExtractRawForm.resx diff --git a/ExtractScriptsForm.Designer.cs b/Tools/ExtractScriptsForm.Designer.cs similarity index 100% rename from ExtractScriptsForm.Designer.cs rename to Tools/ExtractScriptsForm.Designer.cs diff --git a/ExtractScriptsForm.cs b/Tools/ExtractScriptsForm.cs similarity index 100% rename from ExtractScriptsForm.cs rename to Tools/ExtractScriptsForm.cs diff --git a/ExtractScriptsForm.resx b/Tools/ExtractScriptsForm.resx similarity index 100% rename from ExtractScriptsForm.resx rename to Tools/ExtractScriptsForm.resx diff --git a/ExtractShadersForm.Designer.cs b/Tools/ExtractShadersForm.Designer.cs similarity index 100% rename from ExtractShadersForm.Designer.cs rename to Tools/ExtractShadersForm.Designer.cs diff --git a/ExtractShadersForm.cs b/Tools/ExtractShadersForm.cs similarity index 100% rename from ExtractShadersForm.cs rename to Tools/ExtractShadersForm.cs diff --git a/ExtractShadersForm.resx b/Tools/ExtractShadersForm.resx similarity index 100% rename from ExtractShadersForm.resx rename to Tools/ExtractShadersForm.resx diff --git a/ExtractTexForm.Designer.cs b/Tools/ExtractTexForm.Designer.cs similarity index 100% rename from ExtractTexForm.Designer.cs rename to Tools/ExtractTexForm.Designer.cs diff --git a/ExtractTexForm.cs b/Tools/ExtractTexForm.cs similarity index 100% rename from ExtractTexForm.cs rename to Tools/ExtractTexForm.cs diff --git a/ExtractTexForm.resx b/Tools/ExtractTexForm.resx similarity index 100% rename from ExtractTexForm.resx rename to Tools/ExtractTexForm.resx diff --git a/JenkGenForm.Designer.cs b/Tools/JenkGenForm.Designer.cs similarity index 100% rename from JenkGenForm.Designer.cs rename to Tools/JenkGenForm.Designer.cs diff --git a/JenkGenForm.cs b/Tools/JenkGenForm.cs similarity index 100% rename from JenkGenForm.cs rename to Tools/JenkGenForm.cs diff --git a/JenkGenForm.resx b/Tools/JenkGenForm.resx similarity index 100% rename from JenkGenForm.resx rename to Tools/JenkGenForm.resx diff --git a/JenkIndForm.Designer.cs b/Tools/JenkIndForm.Designer.cs similarity index 100% rename from JenkIndForm.Designer.cs rename to Tools/JenkIndForm.Designer.cs diff --git a/JenkIndForm.cs b/Tools/JenkIndForm.cs similarity index 100% rename from JenkIndForm.cs rename to Tools/JenkIndForm.cs diff --git a/JenkIndForm.resx b/Tools/JenkIndForm.resx similarity index 100% rename from JenkIndForm.resx rename to Tools/JenkIndForm.resx diff --git a/TextInputForm.Designer.cs b/Utils/TextInputForm.Designer.cs similarity index 100% rename from TextInputForm.Designer.cs rename to Utils/TextInputForm.Designer.cs diff --git a/TextInputForm.cs b/Utils/TextInputForm.cs similarity index 100% rename from TextInputForm.cs rename to Utils/TextInputForm.cs diff --git a/TextInputForm.resx b/Utils/TextInputForm.resx similarity index 100% rename from TextInputForm.resx rename to Utils/TextInputForm.resx From 3bd78d848da961a5ef3de67c067a139435c85947 Mon Sep 17 00:00:00 2001 From: dexy Date: Fri, 11 Jan 2019 14:24:50 +1100 Subject: [PATCH 075/158] Vehicle files progress --- CodeWalker.Core/CodeWalker.Core.csproj | 4 + .../GameFiles/FileTypes/CarColsFile.cs | 616 ++++++++++++++++++ .../GameFiles/FileTypes/CarModColsFile.cs | 33 + .../GameFiles/FileTypes/CarVariationsFile.cs | 33 + .../GameFiles/FileTypes/VehicleLayoutsFile.cs | 33 + .../GameFiles/FileTypes/VehiclesFile.cs | 329 +++++++++- CodeWalker.Core/GameFiles/GameFile.cs | 4 + CodeWalker.Core/GameFiles/GameFileCache.cs | 123 +++- .../GameFiles/MetaTypes/MetaNames.cs | 46 +- .../GameFiles/MetaTypes/MetaXml.cs | 4 +- .../GameFiles/MetaTypes/PsoTypes.cs | 232 +++---- CodeWalker.Core/GameFiles/MetaTypes/XmlPso.cs | 12 +- CodeWalker.Core/GameFiles/RpfManager.cs | 156 ++--- CodeWalker.csproj | 9 + Program.cs | 9 + Vehicles/VehicleForm.Designer.cs | 115 ++++ Vehicles/VehicleForm.cs | 609 +++++++++++++++++ Vehicles/VehicleForm.resx | 415 ++++++++++++ 18 files changed, 2571 insertions(+), 211 deletions(-) create mode 100644 CodeWalker.Core/GameFiles/FileTypes/CarColsFile.cs create mode 100644 CodeWalker.Core/GameFiles/FileTypes/CarModColsFile.cs create mode 100644 CodeWalker.Core/GameFiles/FileTypes/CarVariationsFile.cs create mode 100644 CodeWalker.Core/GameFiles/FileTypes/VehicleLayoutsFile.cs create mode 100644 Vehicles/VehicleForm.Designer.cs create mode 100644 Vehicles/VehicleForm.cs create mode 100644 Vehicles/VehicleForm.resx diff --git a/CodeWalker.Core/CodeWalker.Core.csproj b/CodeWalker.Core/CodeWalker.Core.csproj index c0142de..85c1a62 100644 --- a/CodeWalker.Core/CodeWalker.Core.csproj +++ b/CodeWalker.Core/CodeWalker.Core.csproj @@ -51,6 +51,9 @@ + + + @@ -60,6 +63,7 @@ + diff --git a/CodeWalker.Core/GameFiles/FileTypes/CarColsFile.cs b/CodeWalker.Core/GameFiles/FileTypes/CarColsFile.cs new file mode 100644 index 0000000..6679055 --- /dev/null +++ b/CodeWalker.Core/GameFiles/FileTypes/CarColsFile.cs @@ -0,0 +1,616 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using TC = System.ComponentModel.TypeConverterAttribute; +using EXP = System.ComponentModel.ExpandableObjectConverter; +using SharpDX; + +namespace CodeWalker.GameFiles +{ + [TC(typeof(EXP))] public class CarColsFile : GameFile, PackedFile + { + public CarColsFile() : base(null, GameFileType.CarCols) + { } + public CarColsFile(RpfFileEntry entry) : base(entry, GameFileType.CarCols) + { + } + + public void Load(byte[] data, RpfFileEntry entry) + { + RpfFileEntry = entry; + Name = entry.Name; + FilePath = Name; + + + + //TODO + + //can be PSO .ymt or XML .meta + + + + + //for carcols wheels: + //< Item /> < !--VWT_SPORT-- > + //< Item /> < !--VWT_MUSCLE-- > + //< Item /> < !--VWT_LOWRIDER-- > + //< Item /> < !--VWT_SUV-- > + //< Item /> < !--VWT_OFFROAD-- > + //< Item /> < !--VWT_TUNER-- > + //< Item /> < !--VWT_BIKE-- > + //< Item /> < !--VWT_HIEND-- > + //< Item /> < !--VWT_SUPERMOD1-- > + //< Item > < !--VWT_SUPERMOD2-- > + + + + + Loaded = true; + } + } + + + [TC(typeof(EXP))] public class CVehicleModelInfoVarGlobal + { + public CVehicleModelInfoVarGlobal_465922034 VehiclePlates { get; set; } + public CVehicleModelColor[] Colors { get; set; } + public CVehicleMetallicSetting[] MetallicSettings { get; set; } + public CVehicleWindowColor[] WindowColors { get; set; } + public vehicleLightSettings[] Lights { get; set; } + public sirenSettings[] Sirens { get; set; } + public CVehicleKit[] Kits { get; set; } + public CVehicleWheel[][] Wheels { get; set; } + public CVehicleModelInfoVarGlobal_3062246906 GlobalVariationData { get; set; } + public CVehicleModelInfoVarGlobal_2807227399[] XenonLightColors { get; set; } + } + [TC(typeof(EXP))] public class CVehicleModelInfoVarGlobal_465922034 //VehiclePlates + { + public CVehicleModelInfoVarGlobal_3027500557[] Textures { get; set; } + public int DefaultTexureIndex { get; set; } + public byte NumericOffset { get; set; } + public byte AlphabeticOffset { get; set; } + public byte SpaceOffset { get; set; } + public byte RandomCharOffset { get; set; } + public byte NumRandomChar { get; set; } + } + [TC(typeof(EXP))] public class CVehicleModelInfoVarGlobal_3027500557 //VehiclePlates Texture + { + public MetaHash TextureSetName { get; set; } + public MetaHash DiffuseMapName { get; set; } + public MetaHash NormalMapName { get; set; } + public Vector4 FontExtents { get; set; } + public Vector2 MaxLettersOnPlate { get; set; } + public uint FontColor { get; set; } + public uint FontOutlineColor { get; set; } + public bool IsFontOutlineEnabled { get; set; } + public Vector2 FontOutlineMinMaxDepth { get; set; } + } + [TC(typeof(EXP))] public class CVehicleModelColor + { + public uint Color { get; set; } + public CVehicleModelColor_360458334 metallicID { get; set; } + public CVehicleModelColor_544262540 audioColor { get; set; } + public CVehicleModelColor_2065815796 audioPrefix { get; set; } + public MetaHash audioColorHash { get; set; } + public MetaHash audioPrefixHash { get; set; } + public string colorName { get; set; } + } + [TC(typeof(EXP))] public class CVehicleMetallicSetting + { + public float specInt { get; set; } + public float specFalloff { get; set; } + public float specFresnel { get; set; } + } + [TC(typeof(EXP))] public class CVehicleWindowColor + { + public uint color { get; set; } + public MetaHash name { get; set; } + } + [TC(typeof(EXP))] public class vehicleLightSettings + { + public byte id { get; set; } + public vehicleLight indicator { get; set; } + public vehicleCorona rearIndicatorCorona { get; set; } + public vehicleCorona frontIndicatorCorona { get; set; } + public vehicleLight tailLight { get; set; } + public vehicleCorona tailLightCorona { get; set; } + public vehicleCorona tailLightMiddleCorona { get; set; } + public vehicleLight headLight { get; set; } + public vehicleCorona headLightCorona { get; set; } + public vehicleLight reversingLight { get; set; } + public vehicleCorona reversingLightCorona { get; set; } + public string name { get; set; } + } + [TC(typeof(EXP))] public class vehicleLight + { + public float intensity { get; set; } + public float falloffMax { get; set; } + public float falloffExponent { get; set; } + public float innerConeAngle { get; set; } + public float outerConeAngle { get; set; } + public bool emmissiveBoost { get; set; } + public uint color { get; set; } + public MetaHash textureName { get; set; } + public bool mirrorTexture { get; set; } + } + [TC(typeof(EXP))] public class vehicleCorona + { + public float size { get; set; } + public float size_far { get; set; } + public float intensity { get; set; } + public float intensity_far { get; set; } + public uint color { get; set; } + public byte numCoronas { get; set; } + public byte distBetweenCoronas { get; set; } + public byte distBetweenCoronas_far { get; set; } + public float xRotation { get; set; } + public float yRotation { get; set; } + public float zRotation { get; set; } + public float zBias { get; set; } + public bool pullCoronaIn { get; set; } + } + [TC(typeof(EXP))] public class sirenSettings + { + public byte id { get; set; } + public string name { get; set; } + public float timeMultiplier { get; set; } + public float lightFalloffMax { get; set; } + public float lightFalloffExponent { get; set; } + public float lightInnerConeAngle { get; set; } + public float lightOuterConeAngle { get; set; } + public float lightOffset { get; set; } + public MetaHash textureName { get; set; } + public uint sequencerBpm { get; set; } + public sirenSettings_188820339 leftHeadLight { get; set; } + public sirenSettings_188820339 rightHeadLight { get; set; } + public sirenSettings_188820339 leftTailLight { get; set; } + public sirenSettings_188820339 rightTailLight { get; set; } + public byte leftHeadLightMultiples { get; set; } + public byte rightHeadLightMultiples { get; set; } + public byte leftTailLightMultiples { get; set; } + public byte rightTailLightMultiples { get; set; } + public bool useRealLights { get; set; } + public sirenLight[] sirens { get; set; } + } + [TC(typeof(EXP))] public class sirenSettings_188820339 + { + public uint sequencer { get; set; } + } + [TC(typeof(EXP))] public class sirenLight + { + public sirenLight_1356743507 rotation { get; set; } + public sirenLight_1356743507 flashiness { get; set; } + public sirenCorona corona { get; set; } + public uint color { get; set; } + public float intensity { get; set; } + public byte lightGroup { get; set; } + public bool rotate { get; set; } + public bool scale { get; set; } + public byte scaleFactor { get; set; } + public bool flash { get; set; } + public bool light { get; set; } + public bool spotLight { get; set; } + public bool castShadows { get; set; } + } + [TC(typeof(EXP))] public class sirenLight_1356743507 + { + public float delta { get; set; } + public float start { get; set; } + public float speed { get; set; } + public uint sequencer { get; set; } + public byte multiples { get; set; } + public bool direction { get; set; } + public bool syncToBpm { get; set; } + } + [TC(typeof(EXP))] public class sirenCorona + { + public float intensity { get; set; } + public float size { get; set; } + public float pull { get; set; } + public bool faceCamera { get; set; } + } + [TC(typeof(EXP))] public class CVehicleKit + { + public MetaHash kitName { get; set; } + public ushort id { get; set; } + public CVehicleKit_3865430600 kitType { get; set; } + public CVehicleModVisible[] visibleMods { get; set; } + public CVehicleModLink[] linkMods { get; set; } + public CVehicleModStat[] statMods { get; set; } + public CVehicleKit_427606548[] slotNames { get; set; } + public MetaHash[] liveryNames { get; set; } + public MetaHash[] livery2Names { get; set; } + } + [TC(typeof(EXP))] public class CVehicleModVisible + { + public MetaHash modelName { get; set; } + public string modShopLabel { get; set; } + public MetaHash[] linkedModels { get; set; } + public CVehicleMod_3635907608[] turnOffBones { get; set; } + public CVehicleMod_2363989491 type { get; set; } + public CVehicleMod_3635907608 bone { get; set; } + public CVehicleMod_3635907608 collisionBone { get; set; } + public CVehicleMod_3413962745 cameraPos { get; set; } + public float audioApply { get; set; } + public byte weight { get; set; } + public bool turnOffExtra { get; set; } + public bool disableBonnetCamera { get; set; } + public bool allowBonnetSlide { get; set; } + public byte weaponSlot { get; set; } //SByte? + public byte Unk_2656206330 { get; set; } //SByte? + public bool disableProjectileDriveby { get; set; } + public bool disableDriveby { get; set; } + public int Unk_161724223 { get; set; } + public int Unk_484538291 { get; set; } + } + [TC(typeof(EXP))] public class CVehicleModLink + { + public MetaHash modelName { get; set; } + public CVehicleMod_3635907608 bone { get; set; } + public bool turnOffExtra { get; set; } + } + [TC(typeof(EXP))] public class CVehicleModStat + { + public MetaHash identifier { get; set; } + public uint modifier { get; set; } + public float audioApply { get; set; } + public byte weight { get; set; } + public CVehicleMod_2363989491 type { get; set; } + } + [TC(typeof(EXP))] public class CVehicleKit_427606548 + { + public CVehicleMod_2363989491 slot { get; set; } + public string name { get; set; } + } + [TC(typeof(EXP))] public class CVehicleWheel + { + public MetaHash wheelName { get; set; } + public MetaHash wheelVariation { get; set; } + public string modShopLabel { get; set; } + public float rimRadius { get; set; } + public bool rear { get; set; } + } + [TC(typeof(EXP))] public class CVehicleModelInfoVarGlobal_3062246906 //GlobalVariationData + { + public uint xenonLightColor { get; set; } + public uint xenonCoronaColor { get; set; } + public float xenonLightIntensityModifier { get; set; } + public float xenonCoronaIntensityModifier { get; set; } + } + [TC(typeof(EXP))] public class CVehicleModelInfoVarGlobal_2807227399 //XenonLightColors + { + public uint lightColor { get; set; } + public uint coronaColor { get; set; } + public float lightIntensityModifier { get; set; } + public float coronaIntensityModifier { get; set; } + } + + + public enum CVehicleModelColor_360458334 //vehicle mod color metallic id + { + none = -1, + Unk_815563434 = 0, + Unk_969376721 = 1, + Unk_731244402 = 2, + Unk_3537679873 = 3, + Unk_3183119293 = 4, + Unk_4039766491 = 5, + Unk_3777516184 = 6, + Unk_229878718 = 7, + Unk_4285337393 = 8, + Unk_847803751 = 9 + } + public enum CVehicleModelColor_544262540 //vehicle mod color audio color + { + Unk_52583446 = 0, + Unk_2253400966 = 1, + Unk_4012089111 = 2, + Unk_2477037232 = 3, + Unk_437487559 = 4, + Unk_730308174 = 5, + Unk_3129410619 = 6, + Unk_1762671403 = 7, + Unk_2615326998 = 8, + Unk_4157715503 = 9, + Unk_2969646890 = 10, + Unk_1645071976 = 11, + Unk_1358390657 = 12 + } + public enum CVehicleModelColor_2065815796 //vehicle mod color audio prefix + { + none = 0, + Unk_2318284788 = 1, + Unk_840729009 = 2, + Unk_3921902053 = 3 + } + + public enum CVehicleKit_3865430600 //vehicle mod kit type + { + MKT_STANDARD = 0, + MKT_SPORT = 1, + MKT_SUV = 2, + MKT_SPECIAL = 3 + } + public enum CVehicleMod_3635907608 //vehicle mod bone + { + none = -1, + chassis = 0, + Unk_1970334199 = 48, + bumper_f = 49, + bumper_r = 50, + wing_rf = 51, + wing_lf = 52, + bonnet = 53, + boot = 54, + exhaust = 56, + exhaust_2 = 57, + exhaust_3 = 58, + exhaust_4 = 59, + Unk_1666652977 = 60, + Unk_1972682668 = 61, + Unk_3204862618 = 62, + Unk_3503093287 = 63, + Unk_442599751 = 64, + Unk_2600343066 = 65, + Unk_3598945568 = 66, + Unk_3896619164 = 67, + Unk_2989016171 = 68, + Unk_3320572913 = 69, + Unk_529211190 = 70, + Unk_823345734 = 71, + extra_1 = 401, + extra_2 = 402, + extra_3 = 403, + extra_4 = 404, + extra_5 = 405, + Unk_3145755371 = 406, + Unk_2360446286 = 407, + Unk_2661527858 = 408, + Unk_1913477126 = 409, + Unk_2125833567 = 410, + Unk_2431830489 = 411, + Unk_2720558148 = 412, + Unk_903844796 = 413, + Unk_1202337617 = 414, + Unk_2190258525 = 417, + Unk_1950749904 = 418, + Unk_1709504522 = 419, + Unk_1480285367 = 420, + Unk_1213709552 = 421, + Unk_848662892 = 422, + Unk_3990325233 = 423, + Unk_367056899 = 424, + Unk_3413787451 = 425, + Unk_2734584581 = 426, + mod_col_1 = 427, + mod_col_2 = 428, + mod_col_3 = 429, + mod_col_4 = 430, + mod_col_5 = 431, + Unk_1547719720 = 432, + Unk_580018373 = 433, + Unk_4191162177 = 434, + Unk_3257212908 = 435, + Unk_3033709986 = 436, + Unk_2249285664 = 437, + Unk_1498318491 = 438, + Unk_1787603223 = 439, + Unk_1573326728 = 440, + Unk_1862676998 = 441, + Unk_1044598917 = 442, + misc_a = 369, + misc_b = 370, + misc_c = 371, + misc_d = 372, + misc_e = 373, + misc_f = 374, + misc_g = 375, + misc_h = 376, + misc_i = 377, + misc_j = 378, + misc_k = 379, + misc_l = 380, + misc_m = 381, + misc_n = 382, + misc_o = 383, + misc_p = 384, + misc_q = 385, + misc_r = 386, + misc_s = 387, + misc_t = 388, + misc_u = 389, + misc_v = 390, + misc_w = 391, + misc_x = 392, + misc_y = 393, + misc_z = 394, + Unk_2690009945 = 395, + Unk_1385115596 = 396, + Unk_2921986035 = 79, + steeringwheel = 80, + Unk_3929033220 = 29, + Unk_837923007 = 21, + Unk_991413023 = 22, + headlight_l = 91, + headlight_r = 92, + Unk_3979005071 = 97, + indicator_lf = 95, + Unk_112742354 = 98, + indicator_rf = 96, + Unk_3008822349 = 93, + Unk_914195096 = 94, + window_lf = 42, + window_rf = 43, + Unk_2355575415 = 45, + Unk_2639884295 = 44, + Unk_2675373130 = 46, + Unk_3523659197 = 47, + hub_lf = 30, + hub_rf = 31, + windscreen_r = 41, + Unk_4084563217 = 104, + Unk_556062831 = 105, + Unk_3850133799 = 106, + Unk_728001778 = 107, + door_dside_f = 3, + door_dside_r = 4, + door_pside_f = 5, + door_pside_r = 6, + bobble_head = 361, + bobble_base = 362, + Unk_785162942 = 363, + engineblock = 364, + Unk_3654959273 = 474, + Unk_808381781 = 475, + Unk_4268165574 = 476, + Unk_3579951032 = 477, + Unk_2733953759 = 478, + Unk_4123490435 = 479, + Unk_3342441320 = 480, + Unk_1726175929 = 481, + Unk_1947366679 = 482, + Unk_2065498928 = 483, + Unk_2572238744 = 484, + Unk_730555402 = 485, + Unk_4194074861 = 486, + Unk_1343696161 = 487, + Unk_506677594 = 488, + Unk_4167728581 = 489, + Unk_3326122354 = 490, + Unk_217851628 = 491, + Unk_3666821647 = 492, + Unk_2168885119 = 493, + Unk_2399611648 = 494, + Unk_3519328378 = 495, + Unk_2958716326 = 496, + Unk_3292501248 = 497, + Unk_2651277456 = 498, + Unk_3888995355 = 499, + Unk_3843353624 = 500, + Unk_3135215534 = 501, + Unk_3364434689 = 502, + Unk_2723112578 = 503, + Unk_2970026993 = 504, + Unk_2245832093 = 505, + Unk_2492156666 = 506, + Unk_1765012564 = 507, + Unk_2014155263 = 508, + Unk_1286290243 = 509, + Unk_1535367412 = 510, + Unk_3992710274 = 511, + Unk_1077448950 = 512, + Unk_1382757723 = 513, + Unk_614062521 = 514, + Unk_3783807571 = 524, + Unk_2839830988 = 525, + Unk_3138651499 = 526, + Unk_2400824695 = 527, + Unk_4141162370 = 560, + Unk_451472348 = 561, + Unk_1768767594 = 562, + Unk_3599310922 = 563, + Unk_1496111458 = 564, + Unk_3929521030 = 565, + Unk_1157497495 = 566, + Unk_1032498025 = 567, + Unk_2573434709 = 568, + Unk_930609265 = 569, + Unk_879315983 = 570, + Unk_411536741 = 571, + Unk_1086719913 = 572, + Unk_3237490897 = 573, + Unk_3375838140 = 574, + Unk_2381840182 = 575, + Unk_3607058940 = 576, + Unk_3607058940_again = 577, + Unk_1208798824 = 578, + Unk_303656220 = 579, + Unk_660207018 = 580, + Unk_2796607005 = 581, + Unk_3045655218 = 582, + Unk_2017296145 = 583, + Unk_3978311755 = 584, + Unk_1122332083 = 585, + Unk_1123212214 = 586, + Unk_4063416457 = 587, + Unk_4011591561 = 588, + Unk_2320654166 = 589, + Unk_2292220415 = 590, + Unk_2166816405 = 591, + Unk_2486991428 = 592 + } + public enum CVehicleMod_2363989491 //vehicle mod type + { + VMT_SPOILER = 0, + VMT_BUMPER_F = 1, + VMT_BUMPER_R = 2, + VMT_SKIRT = 3, + VMT_EXHAUST = 4, + VMT_CHASSIS = 5, + VMT_GRILL = 6, + VMT_BONNET = 7, + VMT_WING_L = 8, + VMT_WING_R = 9, + VMT_ROOF = 10, + VMT_PLTHOLDER = 11, + VMT_PLTVANITY = 12, + VMT_INTERIOR1 = 13, + VMT_INTERIOR2 = 14, + VMT_INTERIOR3 = 15, + VMT_INTERIOR4 = 16, + VMT_INTERIOR5 = 17, + VMT_SEATS = 18, + VMT_STEERING = 19, + VMT_KNOB = 20, + VMT_PLAQUE = 21, + VMT_ICE = 22, + VMT_TRUNK = 23, + VMT_HYDRO = 24, + VMT_ENGINEBAY1 = 25, + VMT_ENGINEBAY2 = 26, + VMT_ENGINEBAY3 = 27, + VMT_CHASSIS2 = 28, + VMT_CHASSIS3 = 29, + VMT_CHASSIS4 = 30, + VMT_CHASSIS5 = 31, + VMT_DOOR_L = 32, + Unk_514696742 = 33, + VMT_LIVERY_MOD = 34, + Unk_3409280882 = 35, + VMT_ENGINE = 36, + VMT_BRAKES = 37, + VMT_GEARBOX = 38, + VMT_HORN = 39, + VMT_SUSPENSION = 40, + VMT_ARMOUR = 41, + Unk_3278520444 = 42, + Unk_2334449168 = 43, + Unk_1675686396 = 44, + Unk_3968559424 = 45, + Unk_3919652883 = 46, + Unk_2656522436 = 47, + VMT_WHEELS = 48, + VMT_WHEELS_REAR_OR_HYDRAULICS = 49 + } + public enum CVehicleMod_3413962745 //vehicle mod camera position + { + VMCP_DEFAULT = 0, + Unk_3001706694 = 1, + Unk_1148399176 = 2, + Unk_2057559994 = 3, + Unk_1556139353 = 4, + Unk_1830737308 = 5, + Unk_457854237 = 6, + Unk_1629770278 = 7, + Unk_2879151926 = 8, + Unk_3193071790 = 9, + Unk_2770495034 = 10 + } + + +} + diff --git a/CodeWalker.Core/GameFiles/FileTypes/CarModColsFile.cs b/CodeWalker.Core/GameFiles/FileTypes/CarModColsFile.cs new file mode 100644 index 0000000..f67df29 --- /dev/null +++ b/CodeWalker.Core/GameFiles/FileTypes/CarModColsFile.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CodeWalker.GameFiles +{ + [TypeConverter(typeof(ExpandableObjectConverter))] + public class CarModColsFile : GameFile, PackedFile + { + public CarModColsFile() : base(null, GameFileType.CarModCols) + { } + public CarModColsFile(RpfFileEntry entry) : base(entry, GameFileType.CarModCols) + { + } + + public void Load(byte[] data, RpfFileEntry entry) + { + RpfFileEntry = entry; + Name = entry.Name; + FilePath = Name; + + //TODO + + //always PSO .ymt + + + Loaded = true; + } + } +} diff --git a/CodeWalker.Core/GameFiles/FileTypes/CarVariationsFile.cs b/CodeWalker.Core/GameFiles/FileTypes/CarVariationsFile.cs new file mode 100644 index 0000000..c7e3294 --- /dev/null +++ b/CodeWalker.Core/GameFiles/FileTypes/CarVariationsFile.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CodeWalker.GameFiles +{ + [TypeConverter(typeof(ExpandableObjectConverter))] + public class CarVariationsFile : GameFile, PackedFile + { + public CarVariationsFile() : base(null, GameFileType.CarVariations) + { } + public CarVariationsFile(RpfFileEntry entry) : base(entry, GameFileType.CarVariations) + { + } + + public void Load(byte[] data, RpfFileEntry entry) + { + RpfFileEntry = entry; + Name = entry.Name; + FilePath = Name; + + //TODO + + //can be PSO .ymt or XML .meta + + + Loaded = true; + } + } +} diff --git a/CodeWalker.Core/GameFiles/FileTypes/VehicleLayoutsFile.cs b/CodeWalker.Core/GameFiles/FileTypes/VehicleLayoutsFile.cs new file mode 100644 index 0000000..825cc17 --- /dev/null +++ b/CodeWalker.Core/GameFiles/FileTypes/VehicleLayoutsFile.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CodeWalker.GameFiles +{ + [TypeConverter(typeof(ExpandableObjectConverter))] + public class VehicleLayoutsFile : GameFile, PackedFile + { + public VehicleLayoutsFile() : base(null, GameFileType.VehicleLayouts) + { } + public VehicleLayoutsFile(RpfFileEntry entry) : base(entry, GameFileType.VehicleLayouts) + { + } + + public void Load(byte[] data, RpfFileEntry entry) + { + RpfFileEntry = entry; + Name = entry.Name; + FilePath = Name; + + //TODO + + //always XML .meta + + + Loaded = true; + } + } +} diff --git a/CodeWalker.Core/GameFiles/FileTypes/VehiclesFile.cs b/CodeWalker.Core/GameFiles/FileTypes/VehiclesFile.cs index 8b3ad01..bcd18db 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/VehiclesFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/VehiclesFile.cs @@ -1,4 +1,5 @@ -using System; +using SharpDX; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -10,9 +11,9 @@ namespace CodeWalker.GameFiles public class VehiclesFile : GameFile, PackedFile { - public RbfFile Rbf { get; set; } - + public string ResidentTxd { get; set; } + public List InitDatas { get; set; } public Dictionary TxdRelationships { get; set; } @@ -48,7 +49,10 @@ namespace CodeWalker.GameFiles XmlDocument xmldoc = new XmlDocument(); xmldoc.LoadXml(xml); - LoadVehicles(xmldoc); + + ResidentTxd = Xml.GetChildInnerText(xmldoc.SelectSingleNode("CVehicleModelInfo__InitDataList"), "residentTxd"); + + LoadInitDatas(xmldoc); LoadTxdRelationships(xmldoc); @@ -57,12 +61,17 @@ namespace CodeWalker.GameFiles } - private void LoadVehicles(XmlDocument xmldoc) + private void LoadInitDatas(XmlDocument xmldoc) { XmlNodeList items = xmldoc.SelectNodes("CVehicleModelInfo__InitDataList/InitDatas/Item | CVehicleModelInfo__InitDataList/InitDatas/item"); + + InitDatas = new List(); for (int i = 0; i < items.Count; i++) { - //TODO... + var node = items[i]; + VehicleInitData d = new VehicleInitData(); + d.Load(node); + InitDatas.Add(d); } } @@ -82,10 +91,318 @@ namespace CodeWalker.GameFiles { TxdRelationships.Add(childstr, parentstr); } + else + { } } } } } + + + public class VehicleInitData + { + + public string modelName { get; set; } //impaler3 + public string txdName { get; set; } //impaler3 + public string handlingId { get; set; } //IMPALER3 + public string gameName { get; set; } //IMPALER3 + public string vehicleMakeName { get; set; } //DECLASSE + public string expressionDictName { get; set; } //null + public string expressionName { get; set; } //null + public string animConvRoofDictName { get; set; } //null + public string animConvRoofName { get; set; } //null + public string animConvRoofWindowsAffected { get; set; } // + public string ptfxAssetName { get; set; } //weap_xs_vehicle_weapons + public string audioNameHash { get; set; } // + public string layout { get; set; } //LAYOUT_STD_ARENA_1HONLY + public string coverBoundOffsets { get; set; } //IMPALER_COVER_OFFSET_INFO + public string explosionInfo { get; set; } //EXPLOSION_INFO_DEFAULT + public string scenarioLayout { get; set; } // + public string cameraName { get; set; } //FOLLOW_CHEETAH_CAMERA + public string aimCameraName { get; set; } //DEFAULT_THIRD_PERSON_VEHICLE_AIM_CAMERA + public string bonnetCameraName { get; set; } //VEHICLE_BONNET_CAMERA_STANDARD_LONG_DEVIANT + public string povCameraName { get; set; } //REDUCED_NEAR_CLIP_POV_CAMERA + public Vector3 FirstPersonDriveByIKOffset { get; set; } // + public Vector3 FirstPersonDriveByUnarmedIKOffset { get; set; } // + public Vector3 FirstPersonProjectileDriveByIKOffset { get; set; } // + public Vector3 FirstPersonProjectileDriveByPassengerIKOffset { get; set; } // + public Vector3 FirstPersonDriveByRightPassengerIKOffset { get; set; } // + public Vector3 FirstPersonDriveByRightPassengerUnarmedIKOffset { get; set; }// + public Vector3 FirstPersonMobilePhoneOffset { get; set; } // + public Vector3 FirstPersonPassengerMobilePhoneOffset { get; set; } // + public Vector3 PovCameraOffset { get; set; } // + public Vector3 PovCameraVerticalAdjustmentForRollCage { get; set; } // + public Vector3 PovPassengerCameraOffset { get; set; } // + public Vector3 PovRearPassengerCameraOffset { get; set; } // + public string vfxInfoName { get; set; } //VFXVEHICLEINFO_CAR_GENERIC + public bool shouldUseCinematicViewMode { get; set; } // + public bool shouldCameraTransitionOnClimbUpDown { get; set; } // + public bool shouldCameraIgnoreExiting { get; set; } // + public bool AllowPretendOccupants { get; set; } // + public bool AllowJoyriding { get; set; } // + public bool AllowSundayDriving { get; set; } // + public bool AllowBodyColorMapping { get; set; } // + public float wheelScale { get; set; } // + public float wheelScaleRear { get; set; } // + public float dirtLevelMin { get; set; } // + public float dirtLevelMax { get; set; } // + public float envEffScaleMin { get; set; } // + public float envEffScaleMax { get; set; } // + public float envEffScaleMin2 { get; set; } // + public float envEffScaleMax2 { get; set; } // + public float damageMapScale { get; set; } // + public float damageOffsetScale { get; set; } // + public Color4 diffuseTint { get; set; } // + public float steerWheelMult { get; set; } // + public float HDTextureDist { get; set; } // + public float[] lodDistances { get; set; } //// 10.000000// 25.000000// 60.000000// 120.000000// 500.000000// 500.000000// + public float minSeatHeight { get; set; } // + public float identicalModelSpawnDistance { get; set; } // + public int maxNumOfSameColor { get; set; } // + public float defaultBodyHealth { get; set; } // + public float pretendOccupantsScale { get; set; } // + public float visibleSpawnDistScale { get; set; } // + public float trackerPathWidth { get; set; } // + public float weaponForceMult { get; set; } // + public float frequency { get; set; } // + public string swankness { get; set; } //SWANKNESS_4 + public int maxNum { get; set; } // + public string[] flags { get; set; } //FLAG_RECESSED_HEADLIGHT_CORONAS FLAG_EXTRAS_STRONG FLAG_AVERAGE_CAR FLAG_HAS_INTERIOR_EXTRAS FLAG_CAN_HAVE_NEONS FLAG_HAS_JUMP_MOD FLAG_HAS_NITROUS_MOD FLAG_HAS_RAMMING_SCOOP_MOD FLAG_USE_AIRCRAFT_STYLE_WEAPON_TARGETING FLAG_HAS_SIDE_SHUNT FLAG_HAS_WEAPON_SPIKE_MODS FLAG_HAS_SUPERCHARGER FLAG_INCREASE_CAMBER_WITH_SUSPENSION_MOD FLAG_DISABLE_DEFORMATION + public string type { get; set; } //VEHICLE_TYPE_CAR + public string plateType { get; set; } //VPT_FRONT_AND_BACK_PLATES + public string dashboardType { get; set; } //VDT_DUKES + public string vehicleClass { get; set; } //VC_MUSCLE + public string wheelType { get; set; } //VWT_MUSCLE + public string[] trailers { get; set; } // + public string[] additionalTrailers { get; set; } // + public VehicleDriver[] drivers { get; set; } // + public string[] extraIncludes { get; set; } // + public string[] doorsWithCollisionWhenClosed { get; set; } // + public string[] driveableDoors { get; set; } // + public bool bumpersNeedToCollideWithMap { get; set; } // + public bool needsRopeTexture { get; set; } // + public string[] requiredExtras { get; set; } //EXTRA_1 EXTRA_2 EXTRA_3 + public string[] rewards { get; set; } // + public string[] cinematicPartCamera { get; set; } //// WHEEL_FRONT_RIGHT_CAMERA// WHEEL_FRONT_LEFT_CAMERA// WHEEL_REAR_RIGHT_CAMERA// WHEEL_REAR_LEFT_CAMERA// + public string NmBraceOverrideSet { get; set; } // + public Vector3 buoyancySphereOffset { get; set; } // + public float buoyancySphereSizeScale { get; set; } // + public VehicleOverrideRagdollThreshold pOverrideRagdollThreshold { get; set; } // + public string[] firstPersonDrivebyData { get; set; } //// STD_IMPALER2_FRONT_LEFT// STD_IMPALER2_FRONT_RIGHT// + + + public void Load(XmlNode node) + { + modelName = Xml.GetChildInnerText(node, "modelName"); + txdName = Xml.GetChildInnerText(node, "txdName"); + handlingId = Xml.GetChildInnerText(node, "handlingId"); + gameName = Xml.GetChildInnerText(node, "gameName"); + vehicleMakeName = Xml.GetChildInnerText(node, "vehicleMakeName"); + expressionDictName = Xml.GetChildInnerText(node, "expressionDictName"); + expressionName = Xml.GetChildInnerText(node, "expressionName"); + animConvRoofDictName = Xml.GetChildInnerText(node, "animConvRoofDictName"); + animConvRoofName = Xml.GetChildInnerText(node, "animConvRoofName"); + animConvRoofWindowsAffected = Xml.GetChildInnerText(node, "animConvRoofWindowsAffected");//? + ptfxAssetName = Xml.GetChildInnerText(node, "ptfxAssetName"); + audioNameHash = Xml.GetChildInnerText(node, "audioNameHash"); + layout = Xml.GetChildInnerText(node, "layout"); + coverBoundOffsets = Xml.GetChildInnerText(node, "coverBoundOffsets"); + explosionInfo = Xml.GetChildInnerText(node, "explosionInfo"); + scenarioLayout = Xml.GetChildInnerText(node, "scenarioLayout"); + cameraName = Xml.GetChildInnerText(node, "cameraName"); + aimCameraName = Xml.GetChildInnerText(node, "aimCameraName"); + bonnetCameraName = Xml.GetChildInnerText(node, "bonnetCameraName"); + povCameraName = Xml.GetChildInnerText(node, "povCameraName"); + FirstPersonDriveByIKOffset = Xml.GetChildVector3Attributes(node, "FirstPersonDriveByIKOffset", "x", "y", "z"); + FirstPersonDriveByUnarmedIKOffset = Xml.GetChildVector3Attributes(node, "FirstPersonDriveByUnarmedIKOffset", "x", "y", "z"); + FirstPersonProjectileDriveByIKOffset = Xml.GetChildVector3Attributes(node, "FirstPersonProjectileDriveByIKOffset", "x", "y", "z"); + FirstPersonProjectileDriveByPassengerIKOffset = Xml.GetChildVector3Attributes(node, "FirstPersonProjectileDriveByPassengerIKOffset", "x", "y", "z"); + FirstPersonDriveByRightPassengerIKOffset = Xml.GetChildVector3Attributes(node, "FirstPersonDriveByRightPassengerIKOffset", "x", "y", "z"); + FirstPersonDriveByRightPassengerUnarmedIKOffset = Xml.GetChildVector3Attributes(node, "FirstPersonDriveByRightPassengerUnarmedIKOffset", "x", "y", "z"); + FirstPersonMobilePhoneOffset = Xml.GetChildVector3Attributes(node, "FirstPersonMobilePhoneOffset", "x", "y", "z"); + FirstPersonPassengerMobilePhoneOffset = Xml.GetChildVector3Attributes(node, "FirstPersonPassengerMobilePhoneOffset", "x", "y", "z"); + PovCameraOffset = Xml.GetChildVector3Attributes(node, "PovCameraOffset", "x", "y", "z"); + PovCameraVerticalAdjustmentForRollCage = Xml.GetChildVector3Attributes(node, "PovCameraVerticalAdjustmentForRollCage", "x", "y", "z"); + PovPassengerCameraOffset = Xml.GetChildVector3Attributes(node, "PovPassengerCameraOffset", "x", "y", "z"); + PovRearPassengerCameraOffset = Xml.GetChildVector3Attributes(node, "PovRearPassengerCameraOffset", "x", "y", "z"); + vfxInfoName = Xml.GetChildInnerText(node, "vfxInfoName"); + shouldUseCinematicViewMode = Xml.GetChildBoolAttribute(node, "shouldUseCinematicViewMode", "value"); + shouldCameraTransitionOnClimbUpDown = Xml.GetChildBoolAttribute(node, "shouldCameraTransitionOnClimbUpDown", "value"); + shouldCameraIgnoreExiting = Xml.GetChildBoolAttribute(node, "shouldCameraIgnoreExiting", "value"); + AllowPretendOccupants = Xml.GetChildBoolAttribute(node, "AllowPretendOccupants", "value"); + AllowJoyriding = Xml.GetChildBoolAttribute(node, "AllowJoyriding", "value"); + AllowSundayDriving = Xml.GetChildBoolAttribute(node, "AllowSundayDriving", "value"); + AllowBodyColorMapping = Xml.GetChildBoolAttribute(node, "AllowBodyColorMapping", "value"); + wheelScale = Xml.GetChildFloatAttribute(node, "wheelScale", "value"); + wheelScaleRear = Xml.GetChildFloatAttribute(node, "wheelScaleRear", "value"); + dirtLevelMin = Xml.GetChildFloatAttribute(node, "dirtLevelMin", "value"); + dirtLevelMax = Xml.GetChildFloatAttribute(node, "dirtLevelMax", "value"); + envEffScaleMin = Xml.GetChildFloatAttribute(node, "envEffScaleMin", "value"); + envEffScaleMax = Xml.GetChildFloatAttribute(node, "envEffScaleMax", "value"); + envEffScaleMin2 = Xml.GetChildFloatAttribute(node, "envEffScaleMin2", "value"); + envEffScaleMax2 = Xml.GetChildFloatAttribute(node, "envEffScaleMax2", "value"); + damageMapScale = Xml.GetChildFloatAttribute(node, "damageMapScale", "value"); + damageOffsetScale = Xml.GetChildFloatAttribute(node, "damageOffsetScale", "value"); + diffuseTint = new Color4(Convert.ToUInt32(Xml.GetChildStringAttribute(node, "diffuseTint", "value").Replace("0x", ""), 16)); + steerWheelMult = Xml.GetChildFloatAttribute(node, "steerWheelMult", "value"); + HDTextureDist = Xml.GetChildFloatAttribute(node, "HDTextureDist", "value"); + lodDistances = GetFloatArray(node, "lodDistances", '\n'); + minSeatHeight = Xml.GetChildFloatAttribute(node, "minSeatHeight", "value"); + identicalModelSpawnDistance = Xml.GetChildFloatAttribute(node, "identicalModelSpawnDistance", "value"); + maxNumOfSameColor = Xml.GetChildIntAttribute(node, "maxNumOfSameColor", "value"); + defaultBodyHealth = Xml.GetChildFloatAttribute(node, "defaultBodyHealth", "value"); + pretendOccupantsScale = Xml.GetChildFloatAttribute(node, "pretendOccupantsScale", "value"); + visibleSpawnDistScale = Xml.GetChildFloatAttribute(node, "visibleSpawnDistScale", "value"); + trackerPathWidth = Xml.GetChildFloatAttribute(node, "trackerPathWidth", "value"); + weaponForceMult = Xml.GetChildFloatAttribute(node, "weaponForceMult", "value"); + frequency = Xml.GetChildFloatAttribute(node, "frequency", "value"); + swankness = Xml.GetChildInnerText(node, "swankness"); + maxNum = Xml.GetChildIntAttribute(node, "maxNum", "value"); + flags = GetStringArray(node, "flags", ' '); + type = Xml.GetChildInnerText(node, "type"); + plateType = Xml.GetChildInnerText(node, "plateType"); + dashboardType = Xml.GetChildInnerText(node, "dashboardType"); + vehicleClass = Xml.GetChildInnerText(node, "vehicleClass"); + wheelType = Xml.GetChildInnerText(node, "wheelType"); + trailers = GetStringItemArray(node, "trailers"); + additionalTrailers = GetStringItemArray(node, "additionalTrailers"); + var dnode = node.SelectSingleNode("drivers"); + if (dnode != null) + { + var items = dnode.SelectNodes("Item"); + if (items.Count > 0) + { + drivers = new VehicleDriver[items.Count]; + for (int i = 0; i < items.Count; i++) + { + var item = items[i]; + var driver = new VehicleDriver(); + driver.driverName = Xml.GetChildInnerText(item, "driverName"); + driver.npcName = Xml.GetChildInnerText(item, "npcName"); + drivers[i] = driver; + } + } + } + extraIncludes = GetStringItemArray(node, "extraIncludes"); + doorsWithCollisionWhenClosed = GetStringItemArray(node, "doorsWithCollisionWhenClosed"); + driveableDoors = GetStringItemArray(node, "driveableDoors"); + bumpersNeedToCollideWithMap = Xml.GetChildBoolAttribute(node, "bumpersNeedToCollideWithMap", "value"); + needsRopeTexture = Xml.GetChildBoolAttribute(node, "needsRopeTexture", "value"); + requiredExtras = GetStringArray(node, "requiredExtras", ' '); + rewards = GetStringItemArray(node, "rewards"); + cinematicPartCamera = GetStringItemArray(node, "cinematicPartCamera"); + NmBraceOverrideSet = Xml.GetChildInnerText(node, "NmBraceOverrideSet"); + buoyancySphereOffset = Xml.GetChildVector3Attributes(node, "buoyancySphereOffset", "x", "y", "z"); + buoyancySphereSizeScale = Xml.GetChildFloatAttribute(node, "buoyancySphereSizeScale", "value"); + var tnode = node.SelectSingleNode("pOverrideRagdollThreshold"); + if (tnode != null) + { + var ttype = tnode.Attributes["type"]?.Value; + switch (ttype) + { + case "NULL": break; + case "CVehicleModelInfo__CVehicleOverrideRagdollThreshold": + pOverrideRagdollThreshold = new VehicleOverrideRagdollThreshold(); + pOverrideRagdollThreshold.MinComponent = Xml.GetChildIntAttribute(tnode, "MinComponent", "value"); + pOverrideRagdollThreshold.MaxComponent = Xml.GetChildIntAttribute(tnode, "MaxComponent", "value"); + pOverrideRagdollThreshold.ThresholdMult = Xml.GetChildFloatAttribute(tnode, "ThresholdMult", "value"); + break; + default: + break; + } + } + firstPersonDrivebyData = GetStringItemArray(node, "firstPersonDrivebyData"); + } + + private string[] GetStringItemArray(XmlNode node, string childName) + { + var cnode = node.SelectSingleNode(childName); + if (cnode == null) return null; + var items = cnode.SelectNodes("Item"); + if (items == null) return null; + getStringArrayList.Clear(); + foreach (XmlNode inode in items) + { + var istr = inode.InnerText; + if (!string.IsNullOrEmpty(istr)) + { + getStringArrayList.Add(istr); + } + } + if (getStringArrayList.Count == 0) return null; + return getStringArrayList.ToArray(); + } + private string[] GetStringArray(XmlNode node, string childName, char delimiter) + { + var ldastr = Xml.GetChildInnerText(node, childName); + var ldarr = ldastr?.Split(delimiter); + if (ldarr == null) return null; + getStringArrayList.Clear(); + foreach (var ldstr in ldarr) + { + var ldt = ldstr?.Trim(); + if (!string.IsNullOrEmpty(ldt)) + { + getStringArrayList.Add(ldt); + } + } + if (getStringArrayList.Count == 0) return null; + return getStringArrayList.ToArray(); + } + private float[] GetFloatArray(XmlNode node, string childName, char delimiter) + { + var ldastr = Xml.GetChildInnerText(node, childName); + var ldarr = ldastr?.Split(delimiter); + if (ldarr == null) return null; + getFloatArrayList.Clear(); + foreach (var ldstr in ldarr) + { + var ldt = ldstr?.Trim(); + if (!string.IsNullOrEmpty(ldt)) + { + float f; + if (FloatUtil.TryParse(ldt, out f)) + { + getFloatArrayList.Add(f); + } + } + } + if (getFloatArrayList.Count == 0) return null; + return getFloatArrayList.ToArray(); + } + + private static List getStringArrayList = new List(); //kinda hacky.. + private static List getFloatArrayList = new List(); //kinda hacky.. + + + public override string ToString() + { + return modelName; + } + } + + public class VehicleOverrideRagdollThreshold + { + public int MinComponent { get; set; } + public int MaxComponent { get; set; } + public float ThresholdMult { get; set; } + + public override string ToString() + { + return MinComponent.ToString() + ", " + MaxComponent.ToString() + ", " + ThresholdMult.ToString(); + } + } + public class VehicleDriver + { + public string driverName { get; set; } + public string npcName { get; set; } + + public override string ToString() + { + return driverName + ", " + npcName; + } + } + } diff --git a/CodeWalker.Core/GameFiles/GameFile.cs b/CodeWalker.Core/GameFiles/GameFile.cs index 44806f1..e941522 100644 --- a/CodeWalker.Core/GameFiles/GameFile.cs +++ b/CodeWalker.Core/GameFiles/GameFile.cs @@ -71,6 +71,10 @@ namespace CodeWalker.GameFiles Yvr = 15, Gtxd = 16, Vehicles = 17, + CarCols = 18, + CarModCols = 19, + CarVariations = 20, + VehicleLayouts = 21, } diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index a222877..fdab745 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -78,12 +78,17 @@ namespace CodeWalker.GameFiles public Dictionary TimeCycleModsDict = new Dictionary(); + public Dictionary VehiclesInitDict { get; set; } + + public List BaseRpfs { get; private set; } public List AllRpfs { get; private set; } public List DlcRpfs { get; private set; } public bool DoFullStringIndex = false; - + public bool BuildExtendedJenkIndex = true; + public bool LoadArchetypes = true; + public bool LoadVehicles = false; private bool PreloadedMode = false; private string GTAFolder; @@ -149,13 +154,14 @@ namespace CodeWalker.GameFiles if (RpfMan == null) { - EnableDlc = !string.IsNullOrEmpty(SelectedDlc); + //EnableDlc = !string.IsNullOrEmpty(SelectedDlc); RpfMan = new RpfManager(); RpfMan.ExcludePaths = GetExcludePaths(); RpfMan.EnableMods = EnableMods; + RpfMan.BuildExtendedJenkIndex = BuildExtendedJenkIndex; RpfMan.Init(GTAFolder, UpdateStatus, ErrorLog);//, true); //RE test area! @@ -255,6 +261,9 @@ namespace CodeWalker.GameFiles UpdateStatus("Loading strings..."); InitStringDicts(); + + UpdateStatus("Loading vehicles..."); + InitVehicles(); } private void InitDlcList() @@ -410,6 +419,14 @@ namespace CodeWalker.GameFiles if ((sfile == null) || (sfile.DlcFile == null)) continue; DlcNameList.Add(GetDlcNameFromPath(sfile.DlcFile.Path)); } + + if (DlcNameList.Count > 0) + { + if (string.IsNullOrEmpty(SelectedDlc)) + { + SelectedDlc = DlcNameList[DlcNameList.Count - 1]; + } + } } private void InitImagesMetas() @@ -1058,7 +1075,7 @@ namespace CodeWalker.GameFiles } else if (entry.NameLower == "vehicles.meta") { - VehiclesFile vf = RpfMan.GetFile(entry); + VehiclesFile vf = RpfMan.GetFile(entry);//could also get loaded in InitVehicles... if (vf.TxdRelationships != null) { addTxdRelationships(vf.TxdRelationships); @@ -1243,6 +1260,8 @@ namespace CodeWalker.GameFiles archetypesLoaded = false; archetypeDict.Clear(); + if (!LoadArchetypes) return; + var rpfs = EnableDlc ? AllRpfs : BaseRpfs; @@ -1424,6 +1443,104 @@ namespace CodeWalker.GameFiles StatsNames.FullIndexBuilt = true; } + public void InitVehicles() + { + if (!LoadVehicles) return; + + + //Neos7 + //Involved files(at least for rendering purpose ) + //Vehicles.meta + //Carcols.meta + //Carvariations.meta + //Vehiclelayouts.meta + //The other metas shouldn't be important for rendering + //Then the global carcols.ymt is required too + //As it contains the general shared tuning options + //Carcols for modkits and lights kits definitions + //Carvariations links such modkits and lights kits to each vehicle plus defines colours combinations of spawned vehicles + //Vehiclelayouts mostly to handle ped interactions with the vehicle + + + + + + IEnumerable rpfs = PreloadedMode ? AllRpfs : (IEnumerable)ActiveMapRpfFiles.Values; + + + var allVehicles = new Dictionary(); + + var addVehicleFiles = new Action>((from) => + { + foreach (RpfFile file in from) + { + if (file.AllEntries == null) continue; + foreach (RpfEntry entry in file.AllEntries) + { +#if !DEBUG + try +#endif + { + if (entry.NameLower == "vehicles.meta") + { + VehiclesFile vf = RpfMan.GetFile(entry); + if (vf.InitDatas != null) + { + foreach (var initData in vf.InitDatas) + { + var name = initData.modelName.ToLowerInvariant(); + var hash = JenkHash.GenHash(name); + if (allVehicles.ContainsKey(hash)) + { } + allVehicles[hash] = initData; + } + } + } + if ((entry.NameLower == "carcols.ymt") || (entry.NameLower == "carcols.meta")) + { + var cf = RpfMan.GetFile(entry); + + } + if (entry.NameLower == "carmodcols.ymt") + { + var cf = RpfMan.GetFile(entry); + + } + if ((entry.NameLower == "carvariations.ymt") || (entry.NameLower == "carvariations.meta")) + { + var cf = RpfMan.GetFile(entry); + + } + if (entry.NameLower.StartsWith("vehiclelayouts") && entry.NameLower.EndsWith(".meta")) + { + var lf = RpfMan.GetFile(entry); + + } + } +#if !DEBUG + catch (Exception ex) + { + string errstr = entry.Path + "\n" + ex.ToString(); + ErrorLog(errstr); + } +#endif + } + } + + }); + + + addVehicleFiles(rpfs); + + if (EnableDlc) + { + addVehicleFiles(DlcActiveRpfs); + } + + + VehiclesInitDict = allVehicles; + + } public bool SetDlcLevel(string dlc, bool enable) diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs index f9c25a3..90ed2b1 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs @@ -3469,12 +3469,30 @@ namespace CodeWalker.GameFiles TB_COLD = 3827341951, TB_HOT = 2709699671, - - - - - - + vehicleLight = 1339481019, + vehicleLightSettings = 2581049192, + vehicleCorona = 1860240263, + CVehicleKit = 679130282, + CVehicleModVisible = 4238291236, + CVehicleModLink = 2730707380, + CVehicleModStat = 243590259, + CVehicleModelColor = 4213335822, + CVehicleWindowColor = 2561269966, + CVehicleMetallicSetting = 2073371064, + PlateProbabilities = 2135495316, + CVehicleModColors = 2858318490, + CVehicleModColor = 1443412025, + metallic = 2204727143, + classic = 2458459502, + matte = 1951049216, + metals = 2740125593, + chrome = 1114790148, + pearlescent = 3095366650, + spec = 1912906641, + sirens = 2047330294, + CCreditItem = 113388969, + JOB_MED = 568575574, + JOB_SMALL = 4127034762, @@ -3638,6 +3656,9 @@ namespace CodeWalker.GameFiles //rage__spdAABB = 4084721864, scaleBySunIntensity = 59101696, + CVehicleModPearlescentColors = 1380492417, + baseCols = 2645876692, + specCols = 666439252, @@ -3816,6 +3837,13 @@ namespace CodeWalker.GameFiles ASSET_TYPE_DRAWABLEDICTIONARY = 1580165652, ASSET_TYPE_ASSETLESS = 4161085041, + aLevelsData = 1643066032, + cFriendlyName = 2077026003, + cTitle = 834048882, + cFilename = 3760135447, + cBugstarName = 3970741067, + + //openIV carcols.ymt VehiclePlates = 593302648, @@ -3881,7 +3909,11 @@ namespace CodeWalker.GameFiles xenonCoronaColor = 4113209874, xenonLightIntensityModifier = 849227792, xenonCoronaIntensityModifier = 3145775573, - + XenonLightColors = 2580788834, + lightColor = 78766281, + coronaColor = 3615736814, + lightIntensityModifier = 1981979787, + coronaIntensityModifier = 3155797354, diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs index 453aaf8..fd9499e 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs @@ -821,8 +821,8 @@ namespace CodeWalker.GameFiles break; case 1: //unsigned int var int6bVal = MetaTypes.SwapBytes(BitConverter.ToUInt32(data, eoffset)); - ValueTag(sb, cind, ename, int6bVal.ToString()); - //ValueTag(sb, cind, ename, "0x" + int6bVal.ToString("X").PadLeft(8, '0')); + //ValueTag(sb, cind, ename, int6bVal.ToString()); + ValueTag(sb, cind, ename, "0x" + int6bVal.ToString("X").PadLeft(8, '0')); break; } break; diff --git a/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs b/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs index c31cf4b..c20c573 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs @@ -350,29 +350,29 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.fCycleOffset, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo(MetaName.fCycleDuration, PsoDataType.Float, 20, 0, 0) ); - case MetaName.CVehicleModelInfoVarGlobal: + case MetaName.CVehicleModelInfoVarGlobal: //carcols.ymt root return new PsoStructureInfo(MetaName.CVehicleModelInfoVarGlobal, 0, 0, 392, new PsoStructureEntryInfo(MetaName.VehiclePlates, PsoDataType.Structure, 8, 0, (MetaName)465922034), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)4213335822), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CVehicleModelColor), new PsoStructureEntryInfo(MetaName.Colors, PsoDataType.Array, 48, 0, (MetaName)1), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2073371064), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CVehicleMetallicSetting), new PsoStructureEntryInfo(MetaName.MetallicSettings, PsoDataType.Array, 64, 0, (MetaName)3), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2561269966), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CVehicleWindowColor), new PsoStructureEntryInfo(MetaName.WindowColors, PsoDataType.Array, 80, 0, (MetaName)5), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2581049192), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.vehicleLightSettings), new PsoStructureEntryInfo(MetaName.Lights, PsoDataType.Array, 96, 0, MetaName.POINTER), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.sirenSettings), new PsoStructureEntryInfo(MetaName.Sirens, PsoDataType.Array, 112, 0, (MetaName)9), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)679130282), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CVehicleKit), new PsoStructureEntryInfo(MetaName.Kits, PsoDataType.Array, 128, 0, (MetaName)11), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CVehicleWheel), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Array, 0, 0, (MetaName)13), new PsoStructureEntryInfo(MetaName.Wheels, PsoDataType.Array, 144, 4, (MetaName)851982), new PsoStructureEntryInfo(MetaName.GlobalVariationData, PsoDataType.Structure, 352, 0, (MetaName)3062246906), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2807227399), - new PsoStructureEntryInfo((MetaName)2580788834, PsoDataType.Array, 376, 0, MetaName.BYTE) + new PsoStructureEntryInfo(MetaName.XenonLightColors, PsoDataType.Array, 376, 0, MetaName.BYTE) ); - case (MetaName)465922034: + case (MetaName)465922034: //CVehicleModelInfoVarGlobal VehiclePlates return new PsoStructureInfo((MetaName)465922034, 0, 0, 40, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3027500557), new PsoStructureEntryInfo(MetaName.Textures, PsoDataType.Array, 8, 0, 0), @@ -383,14 +383,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.RandomCharOffset, PsoDataType.UByte, 31, 0, 0), new PsoStructureEntryInfo(MetaName.NumRandomChar, PsoDataType.UByte, 32, 0, 0) ); - case (MetaName)3062246906: - return new PsoStructureInfo((MetaName)3062246906, 0, 0, 24, - new PsoStructureEntryInfo(MetaName.xenonLightColor, PsoDataType.UInt, 8, 1, 0), - new PsoStructureEntryInfo(MetaName.xenonCoronaColor, PsoDataType.UInt, 12, 1, 0), - new PsoStructureEntryInfo(MetaName.xenonLightIntensityModifier, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo(MetaName.xenonCoronaIntensityModifier, PsoDataType.Float, 20, 0, 0) - ); - case (MetaName)3027500557: + case (MetaName)3027500557: //CVehicleModelInfoVarGlobal VehiclePlates Texture return new PsoStructureInfo((MetaName)3027500557, 0, 0, 80, new PsoStructureEntryInfo(MetaName.TextureSetName, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.DiffuseMapName, PsoDataType.String, 12, 7, 0), @@ -402,8 +395,22 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.IsFontOutlineEnabled, PsoDataType.Bool, 64, 0, 0), new PsoStructureEntryInfo(MetaName.FontOutlineMinMaxDepth, PsoDataType.Float2, 68, 0, 0) ); - case (MetaName)4213335822: - return new PsoStructureInfo((MetaName)4213335822, 0, 0, 32, + case (MetaName)3062246906: //CVehicleModelInfoVarGlobal GlobalVariationData + return new PsoStructureInfo((MetaName)3062246906, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.xenonLightColor, PsoDataType.UInt, 8, 1, 0), + new PsoStructureEntryInfo(MetaName.xenonCoronaColor, PsoDataType.UInt, 12, 1, 0), + new PsoStructureEntryInfo(MetaName.xenonLightIntensityModifier, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.xenonCoronaIntensityModifier, PsoDataType.Float, 20, 0, 0) + ); + case (MetaName)2807227399: //CVehicleModelInfoVarGlobal XenonLightColors //vehicle xenon light color + return new PsoStructureInfo((MetaName)2807227399, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.lightColor, PsoDataType.UInt, 8, 1, 0), + new PsoStructureEntryInfo(MetaName.coronaColor, PsoDataType.UInt, 12, 1, 0), + new PsoStructureEntryInfo(MetaName.lightIntensityModifier, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.coronaIntensityModifier, PsoDataType.Float, 20, 0, 0) + ); + case MetaName.CVehicleModelColor: //CVehicleModelInfoVarGlobal Colors + return new PsoStructureInfo(MetaName.CVehicleModelColor, 0, 0, 32, new PsoStructureEntryInfo(MetaName.color, PsoDataType.UInt, 8, 1, 0), new PsoStructureEntryInfo(MetaName.metallicID, PsoDataType.Enum, 12, 2, (MetaName)360458334), new PsoStructureEntryInfo(MetaName.audioColor, PsoDataType.Enum, 13, 2, (MetaName)544262540), @@ -412,34 +419,34 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.audioPrefixHash, PsoDataType.UInt, 20, 0, 0), new PsoStructureEntryInfo(MetaName.colorName, PsoDataType.String, 24, 1, 0) ); - case (MetaName)2073371064: - return new PsoStructureInfo((MetaName)2073371064, 0, 0, 24, + case MetaName.CVehicleMetallicSetting: //CVehicleModelInfoVarGlobal MetallicSettings + return new PsoStructureInfo(MetaName.CVehicleMetallicSetting, 0, 0, 24, new PsoStructureEntryInfo(MetaName.specInt, PsoDataType.Float, 8, 0, 0), new PsoStructureEntryInfo(MetaName.specFalloff, PsoDataType.Float, 12, 0, 0), new PsoStructureEntryInfo(MetaName.specFresnel, PsoDataType.Float, 16, 0, 0) ); - case (MetaName)2561269966: - return new PsoStructureInfo((MetaName)2561269966, 0, 0, 16, + case MetaName.CVehicleWindowColor: //CVehicleModelInfoVarGlobal WindowColors + return new PsoStructureInfo(MetaName.CVehicleWindowColor, 0, 0, 16, new PsoStructureEntryInfo(MetaName.color, PsoDataType.UInt, 8, 1, 0), new PsoStructureEntryInfo(MetaName.name, PsoDataType.String, 12, 7, 0) ); - case (MetaName)2581049192: - return new PsoStructureInfo((MetaName)2581049192, 0, 0, 552, + case MetaName.vehicleLightSettings: //CVehicleModelInfoVarGlobal Lights + return new PsoStructureInfo(MetaName.vehicleLightSettings, 0, 0, 552, new PsoStructureEntryInfo(MetaName.id, PsoDataType.UByte, 8, 0, 0), - new PsoStructureEntryInfo(MetaName.indicator, PsoDataType.Structure, 16, 0, (MetaName)1339481019), - new PsoStructureEntryInfo(MetaName.rearIndicatorCorona, PsoDataType.Structure, 64, 0, (MetaName)1860240263), - new PsoStructureEntryInfo(MetaName.frontIndicatorCorona, PsoDataType.Structure, 120, 0, (MetaName)1860240263), - new PsoStructureEntryInfo(MetaName.tailLight, PsoDataType.Structure, 176, 0, (MetaName)1339481019), - new PsoStructureEntryInfo(MetaName.tailLightCorona, PsoDataType.Structure, 224, 0, (MetaName)1860240263), - new PsoStructureEntryInfo(MetaName.tailLightMiddleCorona, PsoDataType.Structure, 280, 0, (MetaName)1860240263), - new PsoStructureEntryInfo(MetaName.headLight, PsoDataType.Structure, 336, 0, (MetaName)1339481019), - new PsoStructureEntryInfo(MetaName.headLightCorona, PsoDataType.Structure, 384, 0, (MetaName)1860240263), - new PsoStructureEntryInfo(MetaName.reversingLight, PsoDataType.Structure, 440, 0, (MetaName)1339481019), - new PsoStructureEntryInfo(MetaName.reversingLightCorona, PsoDataType.Structure, 488, 0, (MetaName)1860240263), + new PsoStructureEntryInfo(MetaName.indicator, PsoDataType.Structure, 16, 0, MetaName.vehicleLight), + new PsoStructureEntryInfo(MetaName.rearIndicatorCorona, PsoDataType.Structure, 64, 0, MetaName.vehicleCorona), + new PsoStructureEntryInfo(MetaName.frontIndicatorCorona, PsoDataType.Structure, 120, 0, MetaName.vehicleCorona), + new PsoStructureEntryInfo(MetaName.tailLight, PsoDataType.Structure, 176, 0, MetaName.vehicleLight), + new PsoStructureEntryInfo(MetaName.tailLightCorona, PsoDataType.Structure, 224, 0, MetaName.vehicleCorona), + new PsoStructureEntryInfo(MetaName.tailLightMiddleCorona, PsoDataType.Structure, 280, 0, MetaName.vehicleCorona), + new PsoStructureEntryInfo(MetaName.headLight, PsoDataType.Structure, 336, 0, MetaName.vehicleLight), + new PsoStructureEntryInfo(MetaName.headLightCorona, PsoDataType.Structure, 384, 0, MetaName.vehicleCorona), + new PsoStructureEntryInfo(MetaName.reversingLight, PsoDataType.Structure, 440, 0, MetaName.vehicleLight), + new PsoStructureEntryInfo(MetaName.reversingLightCorona, PsoDataType.Structure, 488, 0, MetaName.vehicleCorona), new PsoStructureEntryInfo(MetaName.name, PsoDataType.String, 544, 1, 0) ); - case (MetaName)1339481019: - return new PsoStructureInfo((MetaName)1339481019, 0, 0, 48, + case MetaName.vehicleLight: //CVehicleModelInfoVarGlobal Lights Light info + return new PsoStructureInfo(MetaName.vehicleLight, 0, 0, 48, new PsoStructureEntryInfo(MetaName.intensity, PsoDataType.Float, 8, 0, 0), new PsoStructureEntryInfo(MetaName.falloffMax, PsoDataType.Float, 12, 0, 0), new PsoStructureEntryInfo(MetaName.falloffExponent, PsoDataType.Float, 16, 0, 0), @@ -450,8 +457,8 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.textureName, PsoDataType.String, 36, 7, 0), new PsoStructureEntryInfo(MetaName.mirrorTexture, PsoDataType.Bool, 40, 0, 0) ); - case (MetaName)1860240263: - return new PsoStructureInfo((MetaName)1860240263, 0, 0, 56, + case MetaName.vehicleCorona: //CVehicleModelInfoVarGlobal Lights Corona info + return new PsoStructureInfo(MetaName.vehicleCorona, 0, 0, 56, new PsoStructureEntryInfo(MetaName.size, PsoDataType.Float, 8, 0, 0), new PsoStructureEntryInfo(MetaName.size_far, PsoDataType.Float, 12, 0, 0), new PsoStructureEntryInfo(MetaName.intensity, PsoDataType.Float, 16, 0, 0), @@ -488,7 +495,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.rightTailLightMultiples, PsoDataType.UByte, 123, 0, 0), new PsoStructureEntryInfo(MetaName.useRealLights, PsoDataType.Bool, 124, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.sirenLight), - new PsoStructureEntryInfo((MetaName)2047330294, PsoDataType.Array, 128, 1, (MetaName)1310739) + new PsoStructureEntryInfo(MetaName.sirens, PsoDataType.Array, 128, 1, (MetaName)1310739) ); case (MetaName)188820339: return new PsoStructureInfo((MetaName)188820339, 0, 0, 16, @@ -527,17 +534,17 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.pull, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo(MetaName.faceCamera, PsoDataType.Bool, 20, 0, 0) ); - case (MetaName)679130282: - return new PsoStructureInfo((MetaName)679130282, 0, 0, 120, + case MetaName.CVehicleKit: + return new PsoStructureInfo(MetaName.CVehicleKit, 0, 0, 120, new PsoStructureEntryInfo(MetaName.kitName, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.id, PsoDataType.UShort, 12, 0, 0), new PsoStructureEntryInfo(MetaName.kitType, PsoDataType.Enum, 16, 0, (MetaName)3865430600), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)4238291236), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CVehicleModVisible), new PsoStructureEntryInfo(MetaName.visibleMods, PsoDataType.Array, 24, 0, (MetaName)3), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2730707380), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CVehicleModLink), new PsoStructureEntryInfo(MetaName.linkMods, PsoDataType.Array, 40, 0, (MetaName)5), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)243590259), - new PsoStructureEntryInfo(MetaName.statMods, PsoDataType.Array, 56, 0, MetaName.POINTER), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CVehicleModStat), + new PsoStructureEntryInfo(MetaName.statMods, PsoDataType.Array, 56, 0, (MetaName)7), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)427606548), new PsoStructureEntryInfo(MetaName.slotNames, PsoDataType.Array, 72, 0, (MetaName)9), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 2, 0), @@ -545,16 +552,16 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 2, 0), new PsoStructureEntryInfo(MetaName.livery2Names, PsoDataType.Array, 104, 0, (MetaName)13) ); - case (MetaName)243590259: - return new PsoStructureInfo((MetaName)243590259, 0, 0, 32, + case MetaName.CVehicleModStat: + return new PsoStructureInfo(MetaName.CVehicleModStat, 0, 0, 32, new PsoStructureEntryInfo(MetaName.identifier, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.modifier, PsoDataType.UInt, 12, 0, 0), new PsoStructureEntryInfo(MetaName.audioApply, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo(MetaName.weight, PsoDataType.UByte, 20, 0, 0), new PsoStructureEntryInfo(MetaName.type, PsoDataType.Enum, 24, 0, (MetaName)2363989491) ); - case (MetaName)4238291236: - return new PsoStructureInfo((MetaName)4238291236, 0, 0, 96, + case MetaName.CVehicleModVisible: + return new PsoStructureInfo(MetaName.CVehicleModVisible, 0, 0, 96, new PsoStructureEntryInfo(MetaName.modelName, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.modShopLabel, PsoDataType.String, 16, 2, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), @@ -582,8 +589,8 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.slot, PsoDataType.Enum, 8, 0, (MetaName)2363989491), new PsoStructureEntryInfo(MetaName.name, PsoDataType.String, 16, 2, 0) ); - case (MetaName)2730707380: - return new PsoStructureInfo((MetaName)2730707380, 0, 0, 24, + case MetaName.CVehicleModLink: + return new PsoStructureInfo(MetaName.CVehicleModLink, 0, 0, 24, new PsoStructureEntryInfo(MetaName.modelName, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.bone, PsoDataType.Enum, 12, 0, (MetaName)3635907608), new PsoStructureEntryInfo(MetaName.turnOffExtra, PsoDataType.Bool, 16, 0, 0) @@ -596,39 +603,39 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.rimRadius, PsoDataType.Float, 24, 0, 0), new PsoStructureEntryInfo(MetaName.rear, PsoDataType.Bool, 28, 0, 0) ); - case (MetaName)2858318490: - return new PsoStructureInfo((MetaName)2858318490, 0, 0, 128, - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1443412025), - new PsoStructureEntryInfo((MetaName)2204727143, PsoDataType.Array, 8, 0, 0), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1443412025), - new PsoStructureEntryInfo((MetaName)2458459502, PsoDataType.Array, 24, 0, (MetaName)2), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1443412025), - new PsoStructureEntryInfo((MetaName)1951049216, PsoDataType.Array, 40, 0, (MetaName)4), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1443412025), - new PsoStructureEntryInfo((MetaName)2740125593, PsoDataType.Array, 56, 0, (MetaName)6), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1443412025), - new PsoStructureEntryInfo((MetaName)1114790148, PsoDataType.Array, 72, 0, (MetaName)8), - new PsoStructureEntryInfo((MetaName)3095366650, PsoDataType.Structure, 88, 0, (MetaName)1380492417) + case MetaName.CVehicleModColors: //carmodcols.ymt root + return new PsoStructureInfo(MetaName.CVehicleModColors, 0, 0, 128, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CVehicleModColor), + new PsoStructureEntryInfo(MetaName.metallic, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CVehicleModColor), + new PsoStructureEntryInfo(MetaName.classic, PsoDataType.Array, 24, 0, (MetaName)2), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CVehicleModColor), + new PsoStructureEntryInfo(MetaName.matte, PsoDataType.Array, 40, 0, (MetaName)4), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CVehicleModColor), + new PsoStructureEntryInfo(MetaName.metals, PsoDataType.Array, 56, 0, (MetaName)6), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CVehicleModColor), + new PsoStructureEntryInfo(MetaName.chrome, PsoDataType.Array, 72, 0, (MetaName)8), + new PsoStructureEntryInfo(MetaName.pearlescent, PsoDataType.Structure, 88, 0, MetaName.CVehicleModPearlescentColors) ); - case (MetaName)1380492417: - return new PsoStructureInfo((MetaName)1380492417, 0, 0, 40, - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1443412025), - new PsoStructureEntryInfo((MetaName)2645876692, PsoDataType.Array, 8, 0, 0), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1443412025), - new PsoStructureEntryInfo((MetaName)666439252, PsoDataType.Array, 24, 0, (MetaName)2) + case MetaName.CVehicleModPearlescentColors: + return new PsoStructureInfo(MetaName.CVehicleModPearlescentColors, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CVehicleModColor), + new PsoStructureEntryInfo(MetaName.baseCols, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CVehicleModColor), + new PsoStructureEntryInfo(MetaName.specCols, PsoDataType.Array, 24, 0, (MetaName)2) ); - case (MetaName)1443412025: - return new PsoStructureInfo((MetaName)1443412025, 0, 0, 24, + case MetaName.CVehicleModColor: + return new PsoStructureInfo(MetaName.CVehicleModColor, 0, 0, 24, new PsoStructureEntryInfo(MetaName.name, PsoDataType.String, 8, 2, 0), new PsoStructureEntryInfo(MetaName.col, PsoDataType.UByte, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1912906641, PsoDataType.UByte, 17, 0, 0) + new PsoStructureEntryInfo(MetaName.spec, PsoDataType.UByte, 17, 0, 0) ); - case MetaName.CVehicleModelInfoVariation: + case MetaName.CVehicleModelInfoVariation: //carvariations.ymt root return new PsoStructureInfo(MetaName.CVehicleModelInfoVariation, 0, 0, 24, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)418053801), new PsoStructureEntryInfo(MetaName.variationData, PsoDataType.Array, 8, 0, 0) ); - case (MetaName)418053801: + case (MetaName)418053801: //CVehicleModelInfoVariation variationData return new PsoStructureInfo((MetaName)418053801, 0, 0, 96, new PsoStructureEntryInfo(MetaName.modelName, PsoDataType.String, 8, 1, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2575850962), @@ -637,34 +644,34 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.kits, PsoDataType.Array, 32, 0, (MetaName)3), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), new PsoStructureEntryInfo(MetaName.windowsWithExposedEdges, PsoDataType.Array, 48, 0, (MetaName)5), - new PsoStructureEntryInfo(MetaName.plateProbabilities, PsoDataType.Structure, 64, 0, (MetaName)2135495316), + new PsoStructureEntryInfo(MetaName.plateProbabilities, PsoDataType.Structure, 64, 0, MetaName.PlateProbabilities), new PsoStructureEntryInfo(MetaName.lightSettings, PsoDataType.UByte, 88, 0, 0), new PsoStructureEntryInfo(MetaName.sirenSettings, PsoDataType.UByte, 89, 0, 0) ); - case (MetaName)2135495316: - return new PsoStructureInfo((MetaName)2135495316, 0, 0, 24, - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)938618322), - new PsoStructureEntryInfo(MetaName.Probabilities, PsoDataType.Array, 8, 0, 0) - ); - case (MetaName)2575850962: + case (MetaName)2575850962: //CVehicleModelInfoVariation variationData colors return new PsoStructureInfo((MetaName)2575850962, 0, 0, 44 /*40*/, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UByte, 0, 0, 0), new PsoStructureEntryInfo(MetaName.indices, PsoDataType.Array, 8, 4, (MetaName)393216 /*262144*/), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Bool, 0, 0, 0), new PsoStructureEntryInfo(MetaName.liveries, PsoDataType.Array, 14 /*12*/, 4, (MetaName)1966082 /*1638402*/) ); + case MetaName.PlateProbabilities: + return new PsoStructureInfo(MetaName.PlateProbabilities, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)938618322), + new PsoStructureEntryInfo(MetaName.Probabilities, PsoDataType.Array, 8, 0, 0) + ); case (MetaName)938618322: return new PsoStructureInfo((MetaName)938618322, 0, 0, 16, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.Value, PsoDataType.UInt, 12, 0, 0) ); - case (MetaName)1998252412: + case (MetaName)1998252412: //credits.ymt root return new PsoStructureInfo((MetaName)1998252412, 0, 0, 24, - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)113388969), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CCreditItem), new PsoStructureEntryInfo(MetaName.CreditItems, PsoDataType.Array, 8, 0, 0) ); - case (MetaName)113388969: - return new PsoStructureInfo((MetaName)113388969, 0, 0, 48, + case MetaName.CCreditItem: + return new PsoStructureInfo(MetaName.CCreditItem, 0, 0, 48, new PsoStructureEntryInfo(MetaName.LineType, PsoDataType.Enum, 8, 0, (MetaName)1795685103), new PsoStructureEntryInfo(MetaName.cTextId1, PsoDataType.String, 16, 3, 0), new PsoStructureEntryInfo(MetaName.cTextId2, PsoDataType.String, 32, 3, 0) @@ -701,19 +708,19 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.contents, PsoDataType.Enum, 168, 0, MetaName.DataFileContents), new PsoStructureEntryInfo(MetaName.installPartition, PsoDataType.Enum, 172, 0, MetaName.InstallPartition) ); - case MetaName.CLevelData: + case MetaName.CLevelData: //levels.ymt root return new PsoStructureInfo(MetaName.CLevelData, 0, 0, 24, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.sLevelData), - new PsoStructureEntryInfo((MetaName)1643066032, PsoDataType.Array, 8, 0, 0) + new PsoStructureEntryInfo(MetaName.aLevelsData, PsoDataType.Array, 8, 0, 0) ); case MetaName.sLevelData: return new PsoStructureInfo(MetaName.sLevelData, 0, 0, 72, - new PsoStructureEntryInfo((MetaName)2077026003, PsoDataType.String, 8, 3, 0), - new PsoStructureEntryInfo((MetaName)834048882, PsoDataType.String, 24, 3, 0), - new PsoStructureEntryInfo((MetaName)3760135447, PsoDataType.String, 40, 3, 0), - new PsoStructureEntryInfo((MetaName)3970741067, PsoDataType.String, 56, 3, 0) + new PsoStructureEntryInfo(MetaName.cFriendlyName, PsoDataType.String, 8, 3, 0), + new PsoStructureEntryInfo(MetaName.cTitle, PsoDataType.String, 24, 3, 0), + new PsoStructureEntryInfo(MetaName.cFilename, PsoDataType.String, 40, 3, 0), + new PsoStructureEntryInfo(MetaName.cBugstarName, PsoDataType.String, 56, 3, 0) ); - case (MetaName)1056751197: + case (MetaName)1056751197: //mapdatacullboxes.ymt root return new PsoStructureInfo((MetaName)1056751197, 0, 0, 24, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)322201475), new PsoStructureEntryInfo((MetaName)934859523, PsoDataType.Array, 8, 0, 0) @@ -741,7 +748,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CTxdRelationship), new PsoStructureEntryInfo(MetaName.txdRelationships, PsoDataType.Array, 56, 0, (MetaName)5), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CMultiTxdRelationship), - new PsoStructureEntryInfo(MetaName.multiTxdRelationships, PsoDataType.Array, 72, 0, MetaName.POINTER) + new PsoStructureEntryInfo(MetaName.multiTxdRelationships, PsoDataType.Array, 72, 0, (MetaName)7) ); case MetaName.CPedModelInfo__InitData: return new PsoStructureInfo(MetaName.CPedModelInfo__InitData, 0, 0, 296, @@ -14185,13 +14192,6 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)2721898107, PsoDataType.UInt, 0, 0, 0), new PsoStructureEntryInfo((MetaName)1084559223, PsoDataType.SInt, 4, 0, 0) ); - case (MetaName)2807227399: - return new PsoStructureInfo((MetaName)2807227399, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)78766281, PsoDataType.UInt, 8, 1, 0), - new PsoStructureEntryInfo((MetaName)3615736814, PsoDataType.UInt, 12, 1, 0), - new PsoStructureEntryInfo((MetaName)1981979787, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3155797354, PsoDataType.Float, 20, 0, 0) - ); case MetaName.camMotionBlurSettingsMetadata: return new PsoStructureInfo(MetaName.camMotionBlurSettingsMetadata, 0, 0, 64, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), @@ -14285,7 +14285,7 @@ namespace CodeWalker.GameFiles //to generate enuminfos switch (name) { - case (MetaName)360458334: + case (MetaName)360458334: //vehicle mod color metallic id return new PsoEnumInfo((MetaName)360458334, 1, new PsoEnumEntryInfo(MetaName.none, -1), new PsoEnumEntryInfo((MetaName)815563434, 0), @@ -14299,7 +14299,7 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo((MetaName)4285337393, 8), new PsoEnumEntryInfo((MetaName)847803751, 9) ); - case (MetaName)544262540: + case (MetaName)544262540: //vehicle mod color audio color return new PsoEnumInfo((MetaName)544262540, 1, new PsoEnumEntryInfo((MetaName)52583446, 0), new PsoEnumEntryInfo((MetaName)2253400966, 1), @@ -14315,21 +14315,21 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo((MetaName)1645071976, 11), new PsoEnumEntryInfo((MetaName)1358390657, 12) ); - case (MetaName)2065815796: + case (MetaName)2065815796: //vehicle mod color audio prefix return new PsoEnumInfo((MetaName)2065815796, 1, new PsoEnumEntryInfo(MetaName.none, 0), new PsoEnumEntryInfo((MetaName)2318284788, 1), new PsoEnumEntryInfo((MetaName)840729009, 2), new PsoEnumEntryInfo((MetaName)3921902053, 3) ); - case (MetaName)3865430600: + case (MetaName)3865430600: //vehicle mod kit type return new PsoEnumInfo((MetaName)3865430600, 1, new PsoEnumEntryInfo(MetaName.MKT_STANDARD, 0), new PsoEnumEntryInfo(MetaName.MKT_SPORT, 1), new PsoEnumEntryInfo(MetaName.MKT_SUV, 2), new PsoEnumEntryInfo(MetaName.MKT_SPECIAL, 3) ); - case (MetaName)2363989491: + case (MetaName)2363989491: //vehicle mod type return new PsoEnumInfo((MetaName)2363989491, 1, new PsoEnumEntryInfo(MetaName.VMT_SPOILER, 0), new PsoEnumEntryInfo(MetaName.VMT_BUMPER_F, 1), @@ -14382,7 +14382,7 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo(MetaName.VMT_WHEELS, 48), new PsoEnumEntryInfo(MetaName.VMT_WHEELS_REAR_OR_HYDRAULICS, 49) ); - case (MetaName)3635907608: + case (MetaName)3635907608: //vehicle mod bone return new PsoEnumInfo((MetaName)3635907608, 1, new PsoEnumEntryInfo(MetaName.none, -1), new PsoEnumEntryInfo(MetaName.chassis, 0), @@ -14590,7 +14590,7 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo((MetaName)2166816405, 591), new PsoEnumEntryInfo((MetaName)2486991428, 592) ); - case (MetaName)3413962745: + case (MetaName)3413962745: //vehicle mod camera position return new PsoEnumInfo((MetaName)3413962745, 1, new PsoEnumEntryInfo(MetaName.VMCP_DEFAULT, 0), new PsoEnumEntryInfo((MetaName)3001706694, 1), @@ -14604,11 +14604,11 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo((MetaName)3193071790, 9), new PsoEnumEntryInfo((MetaName)2770495034, 10) ); - case (MetaName)1795685103: + case (MetaName)1795685103: //credit item job line type return new PsoEnumInfo((MetaName)1795685103, 1, new PsoEnumEntryInfo(MetaName.JOB_BIG, 0), - new PsoEnumEntryInfo((MetaName)568575574, 1), - new PsoEnumEntryInfo((MetaName)4127034762, 2), + new PsoEnumEntryInfo(MetaName.JOB_MED, 1), + new PsoEnumEntryInfo(MetaName.JOB_SMALL, 2), new PsoEnumEntryInfo((MetaName)1877679104, 3), new PsoEnumEntryInfo((MetaName)2980984179, 4), new PsoEnumEntryInfo((MetaName)298596333, 5), @@ -14904,7 +14904,7 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo((MetaName)551739454, 3), new PsoEnumEntryInfo((MetaName)462532381, 4) ); - case (MetaName)3029795674: + case (MetaName)3029795674: //CPedModelInfo__InitData ScenarioPopStreamingSlot return new PsoEnumInfo((MetaName)3029795674, 1, new PsoEnumEntryInfo(MetaName.SCENARIO_POP_STREAMING_NORMAL, 0), new PsoEnumEntryInfo((MetaName)1152280719, 1) @@ -14923,7 +14923,7 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo((MetaName)3916722287, 2), new PsoEnumEntryInfo((MetaName)157616235, 3) ); - case (MetaName)224899699: + case (MetaName)224899699: //animation clip flags return new PsoEnumInfo((MetaName)224899699, 1, new PsoEnumEntryInfo((MetaName)2933717348, 0), new PsoEnumEntryInfo((MetaName)892548521, 1), @@ -14958,7 +14958,7 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo((MetaName)1321103795, 30), new PsoEnumEntryInfo((MetaName)3765996064, 31) ); - case (MetaName)1498349301: + case (MetaName)1498349301: //animation clip priority return new PsoEnumInfo((MetaName)1498349301, 1, new PsoEnumEntryInfo(MetaName.AP_LOW, 0), new PsoEnumEntryInfo(MetaName.AP_MEDIUM, 1), @@ -14967,13 +14967,13 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo((MetaName)3509068476, 4), new PsoEnumEntryInfo((MetaName)611607097, 5) ); - case (MetaName)1631789397: + case (MetaName)1631789397: //anim clip dictionary streaming policy return new PsoEnumInfo((MetaName)1631789397, 1, new PsoEnumEntryInfo(MetaName.SP_STREAMING, 0), new PsoEnumEntryInfo(MetaName.SP_SINGLEPLAYER_RESIDENT, 1), new PsoEnumEntryInfo(MetaName.SP_MULTIPLAYER_RESIDENT, 2) ); - case (MetaName)733577798: + case (MetaName)733577798: //anim clip dictionary streaming priority return new PsoEnumInfo((MetaName)733577798, 1, new PsoEnumEntryInfo((MetaName)3866220764, 0), new PsoEnumEntryInfo(MetaName.SP_Low, 1), diff --git a/CodeWalker.Core/GameFiles/MetaTypes/XmlPso.cs b/CodeWalker.Core/GameFiles/MetaTypes/XmlPso.cs index 6584027..40f4cdb 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/XmlPso.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/XmlPso.cs @@ -166,7 +166,17 @@ namespace CodeWalker.GameFiles Write(sval, data, entry.DataOffset); break; case 1: //unsigned int - var uval = Convert.ToUInt32(cnode.Attributes["value"].Value); + var ustr = cnode.Attributes["value"].Value; + uint uval = 0; + if (ustr.StartsWith("0x")) + { + ustr = ustr.Substring(2); + uval = Convert.ToUInt32(ustr, 16); + } + else + { + uval = Convert.ToUInt32(ustr); + } Write(uval, data, entry.DataOffset); break; } diff --git a/CodeWalker.Core/GameFiles/RpfManager.cs b/CodeWalker.Core/GameFiles/RpfManager.cs index 49a1b43..be8686f 100644 --- a/CodeWalker.Core/GameFiles/RpfManager.cs +++ b/CodeWalker.Core/GameFiles/RpfManager.cs @@ -15,6 +15,7 @@ namespace CodeWalker.GameFiles public string Folder { get; private set; } public string[] ExcludePaths { get; set; } public bool EnableMods { get; set; } + public bool BuildExtendedJenkIndex { get; set; } = true; public Action UpdateStatus { get; private set; } public Action ErrorLog { get; private set; } @@ -381,102 +382,105 @@ namespace CodeWalker.GameFiles JenkIndex.Ensure(entry.Name); JenkIndex.Ensure(nlow); } - if (nlow.EndsWith(".ydr") || nlow.EndsWith(".yft")) + if (BuildExtendedJenkIndex) { - var sname = nlow.Substring(0, nlow.Length - 4); - JenkIndex.Ensure(sname + "_lod"); - JenkIndex.Ensure(sname + "_loda"); - JenkIndex.Ensure(sname + "_lodb"); - } - if (nlow.EndsWith(".ydd")) - { - if (nlow.EndsWith("_children.ydd")) + if (nlow.EndsWith(".ydr") || nlow.EndsWith(".yft")) { - var strn = nlow.Substring(0, nlow.Length - 13); - JenkIndex.Ensure(strn); - JenkIndex.Ensure(strn + "_lod"); - JenkIndex.Ensure(strn + "_loda"); - JenkIndex.Ensure(strn + "_lodb"); + var sname = nlow.Substring(0, nlow.Length - 4); + JenkIndex.Ensure(sname + "_lod"); + JenkIndex.Ensure(sname + "_loda"); + JenkIndex.Ensure(sname + "_lodb"); } - var idx = nlow.LastIndexOf('_'); - if (idx > 0) + if (nlow.EndsWith(".ydd")) { - var str1 = nlow.Substring(0, idx); - var idx2 = str1.LastIndexOf('_'); - if (idx2 > 0) + if (nlow.EndsWith("_children.ydd")) { - var str2 = str1.Substring(0, idx2); - JenkIndex.Ensure(str2 + "_lod"); - var maxi = 100; - for (int i = 1; i <= maxi; i++) + var strn = nlow.Substring(0, nlow.Length - 13); + JenkIndex.Ensure(strn); + JenkIndex.Ensure(strn + "_lod"); + JenkIndex.Ensure(strn + "_loda"); + JenkIndex.Ensure(strn + "_lodb"); + } + var idx = nlow.LastIndexOf('_'); + if (idx > 0) + { + var str1 = nlow.Substring(0, idx); + var idx2 = str1.LastIndexOf('_'); + if (idx2 > 0) { - var str3 = str2 + "_" + i.ToString().PadLeft(2, '0'); - //JenkIndex.Ensure(str3); - JenkIndex.Ensure(str3 + "_lod"); + var str2 = str1.Substring(0, idx2); + JenkIndex.Ensure(str2 + "_lod"); + var maxi = 100; + for (int i = 1; i <= maxi; i++) + { + var str3 = str2 + "_" + i.ToString().PadLeft(2, '0'); + //JenkIndex.Ensure(str3); + JenkIndex.Ensure(str3 + "_lod"); + } } } } - } - if (nlow.EndsWith(".awc")) //create audio container path hashes... - { - string[] parts = entry.Path.Split('\\'); - int pl = parts.Length; - if (pl > 2) + if (nlow.EndsWith(".awc")) //create audio container path hashes... { - string fn = parts[pl - 1]; - string fd = parts[pl - 2]; - string hpath = fn.Substring(0, fn.Length - 4); - if (fd.EndsWith(".rpf")) + string[] parts = entry.Path.Split('\\'); + int pl = parts.Length; + if (pl > 2) { - fd = fd.Substring(0, fd.Length - 4); - } - hpath = fd + "/" + hpath; - if (parts[pl - 3] != "sfx") - { }//no hit - - JenkIndex.Ensure(hpath); - } - } - if (nlow.EndsWith(".nametable")) - { - RpfBinaryFileEntry binfe = entry as RpfBinaryFileEntry; - if (binfe != null) - { - byte[] data = file.ExtractFile(binfe); - if (data != null) - { - sb.Clear(); - for (int i = 0; i < data.Length; i++) + string fn = parts[pl - 1]; + string fd = parts[pl - 2]; + string hpath = fn.Substring(0, fn.Length - 4); + if (fd.EndsWith(".rpf")) { - byte c = data[i]; - if (c == 0) + fd = fd.Substring(0, fd.Length - 4); + } + hpath = fd + "/" + hpath; + if (parts[pl - 3] != "sfx") + { }//no hit + + JenkIndex.Ensure(hpath); + } + } + if (nlow.EndsWith(".nametable")) + { + RpfBinaryFileEntry binfe = entry as RpfBinaryFileEntry; + if (binfe != null) + { + byte[] data = file.ExtractFile(binfe); + if (data != null) + { + sb.Clear(); + for (int i = 0; i < data.Length; i++) { - string str = sb.ToString(); - if (!string.IsNullOrEmpty(str)) + byte c = data[i]; + if (c == 0) { - string strl = str.ToLowerInvariant(); - //JenkIndex.Ensure(str); - JenkIndex.Ensure(strl); + string str = sb.ToString(); + if (!string.IsNullOrEmpty(str)) + { + string strl = str.ToLowerInvariant(); + //JenkIndex.Ensure(str); + JenkIndex.Ensure(strl); - ////DirMod_Sounds_ entries apparently can be used to infer SP audio strings - ////no luck here yet though - //if (strl.StartsWith("dirmod_sounds_") && (strl.Length > 14)) - //{ - // strl = strl.Substring(14); - // JenkIndex.Ensure(strl); - //} + ////DirMod_Sounds_ entries apparently can be used to infer SP audio strings + ////no luck here yet though + //if (strl.StartsWith("dirmod_sounds_") && (strl.Length > 14)) + //{ + // strl = strl.Substring(14); + // JenkIndex.Ensure(strl); + //} + } + sb.Clear(); + } + else + { + sb.Append((char)c); } - sb.Clear(); - } - else - { - sb.Append((char)c); } } } + else + { } } - else - { } } } diff --git a/CodeWalker.csproj b/CodeWalker.csproj index b6dc6a5..b9da053 100644 --- a/CodeWalker.csproj +++ b/CodeWalker.csproj @@ -534,6 +534,12 @@ + + Form + + + VehicleForm.cs + Form @@ -752,6 +758,9 @@ TextInputForm.cs + + VehicleForm.cs + WorldForm.cs diff --git a/Program.cs b/Program.cs index 50b889f..6bb6187 100644 --- a/Program.cs +++ b/Program.cs @@ -18,6 +18,7 @@ namespace CodeWalker bool menumode = false; bool explorermode = false; bool projectmode = false; + bool vehiclesmode = false; if ((args != null) && (args.Length > 0)) { foreach (string arg in args) @@ -35,6 +36,10 @@ namespace CodeWalker { projectmode = true; } + if (argl == "vehicles") + { + vehiclesmode = true; + } } } @@ -64,6 +69,10 @@ namespace CodeWalker { Application.Run(new Project.ProjectForm()); } + else if (vehiclesmode) + { + Application.Run(new Vehicles.VehicleForm()); + } else { Application.Run(new WorldForm()); diff --git a/Vehicles/VehicleForm.Designer.cs b/Vehicles/VehicleForm.Designer.cs new file mode 100644 index 0000000..35ebed0 --- /dev/null +++ b/Vehicles/VehicleForm.Designer.cs @@ -0,0 +1,115 @@ +namespace CodeWalker.Vehicles +{ + partial class VehicleForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(VehicleForm)); + this.StatusStrip = new System.Windows.Forms.StatusStrip(); + this.StatusLabel = new System.Windows.Forms.ToolStripStatusLabel(); + this.MousedLabel = new System.Windows.Forms.ToolStripStatusLabel(); + this.StatsLabel = new System.Windows.Forms.ToolStripStatusLabel(); + this.StatsUpdateTimer = new System.Windows.Forms.Timer(this.components); + this.StatusStrip.SuspendLayout(); + this.SuspendLayout(); + // + // StatusStrip + // + this.StatusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.StatusLabel, + this.MousedLabel, + this.StatsLabel}); + this.StatusStrip.Location = new System.Drawing.Point(0, 689); + this.StatusStrip.Name = "StatusStrip"; + this.StatusStrip.Size = new System.Drawing.Size(984, 22); + this.StatusStrip.TabIndex = 2; + this.StatusStrip.Text = "statusStrip1"; + // + // StatusLabel + // + this.StatusLabel.BackColor = System.Drawing.SystemColors.Control; + this.StatusLabel.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.StatusLabel.Name = "StatusLabel"; + this.StatusLabel.Size = new System.Drawing.Size(878, 17); + this.StatusLabel.Spring = true; + this.StatusLabel.Text = "Initialising"; + this.StatusLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // MousedLabel + // + this.MousedLabel.BackColor = System.Drawing.SystemColors.Control; + this.MousedLabel.Name = "MousedLabel"; + this.MousedLabel.Size = new System.Drawing.Size(16, 17); + this.MousedLabel.Text = " "; + // + // StatsLabel + // + this.StatsLabel.BackColor = System.Drawing.SystemColors.Control; + this.StatsLabel.Name = "StatsLabel"; + this.StatsLabel.Size = new System.Drawing.Size(75, 17); + this.StatsLabel.Text = "0 geometries"; + // + // StatsUpdateTimer + // + this.StatsUpdateTimer.Enabled = true; + this.StatsUpdateTimer.Interval = 500; + this.StatsUpdateTimer.Tick += new System.EventHandler(this.StatsUpdateTimer_Tick); + // + // VehicleForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.MidnightBlue; + this.ClientSize = new System.Drawing.Size(984, 711); + this.Controls.Add(this.StatusStrip); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "VehicleForm"; + this.Text = "Vehicle Viewer - CodeWalker by dexyfex"; + this.Deactivate += new System.EventHandler(this.VehicleForm_Deactivate); + this.Load += new System.EventHandler(this.VehicleForm_Load); + this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.VehicleForm_KeyDown); + this.KeyUp += new System.Windows.Forms.KeyEventHandler(this.VehicleForm_KeyUp); + this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.VehicleForm_MouseDown); + this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.VehicleForm_MouseMove); + this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.VehicleForm_MouseUp); + this.StatusStrip.ResumeLayout(false); + this.StatusStrip.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.StatusStrip StatusStrip; + private System.Windows.Forms.ToolStripStatusLabel StatusLabel; + private System.Windows.Forms.ToolStripStatusLabel MousedLabel; + private System.Windows.Forms.ToolStripStatusLabel StatsLabel; + private System.Windows.Forms.Timer StatsUpdateTimer; + } +} \ No newline at end of file diff --git a/Vehicles/VehicleForm.cs b/Vehicles/VehicleForm.cs new file mode 100644 index 0000000..bd49827 --- /dev/null +++ b/Vehicles/VehicleForm.cs @@ -0,0 +1,609 @@ +using CodeWalker.GameFiles; +using CodeWalker.Properties; +using CodeWalker.Rendering; +using CodeWalker.World; +using SharpDX; +using SharpDX.Direct3D11; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Diagnostics; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CodeWalker.Vehicles +{ + public partial class VehicleForm : Form, DXForm + { + public Form Form { get { return this; } } //for DXForm/DXManager use + + public Renderer Renderer = null; + public object RenderSyncRoot { get { return Renderer.RenderSyncRoot; } } + + volatile bool formopen = false; + volatile bool running = false; + volatile bool pauserendering = false; + //volatile bool initialised = false; + + Stopwatch frametimer = new Stopwatch(); + Camera camera; + Timecycle timecycle; + Weather weather; + Clouds clouds; + + Entity camEntity = new Entity(); + + + bool MouseLButtonDown = false; + bool MouseRButtonDown = false; + int MouseX; + int MouseY; + System.Drawing.Point MouseDownPoint; + System.Drawing.Point MouseLastPoint; + + + public GameFileCache GameFileCache { get; } = GameFileCacheFactory.Create(); + + + InputManager Input = new InputManager(); + + + bool initedOk = false; + + + + + public VehicleForm() + { + InitializeComponent(); + + Renderer = new Renderer(this, GameFileCache); + camera = Renderer.camera; + timecycle = Renderer.timecycle; + weather = Renderer.weather; + clouds = Renderer.clouds; + + initedOk = Renderer.Init(); + + Renderer.controllightdir = !Settings.Default.Skydome; + Renderer.rendercollisionmeshes = false; + Renderer.renderclouds = false; + //Renderer.renderclouds = true; + //Renderer.individualcloudfrag = "Contrails"; + Renderer.rendermoon = false; + Renderer.renderskeletons = false; + Renderer.SelectionFlagsTestAll = true; + + } + + + public void InitScene(Device device) + { + int width = ClientSize.Width; + int height = ClientSize.Height; + + try + { + Renderer.DeviceCreated(device, width, height); + } + catch (Exception ex) + { + MessageBox.Show("Error loading shaders!\n" + ex.ToString()); + return; + } + + + camera.FollowEntity = camEntity; + camera.FollowEntity.Position = Vector3.Zero;// prevworldpos; + camera.FollowEntity.Orientation = Quaternion.LookAtLH(Vector3.Zero, Vector3.Up, Vector3.ForwardLH); + camera.TargetDistance = 2.0f; + camera.CurrentDistance = 2.0f; + camera.TargetRotation.Y = 0.2f; + camera.CurrentRotation.Y = 0.2f; + camera.TargetRotation.X = 0.5f * (float)Math.PI; + camera.CurrentRotation.X = 0.5f * (float)Math.PI; + + + //LoadSettings(); + + + formopen = true; + new Thread(new ThreadStart(ContentThread)).Start(); + + frametimer.Start(); + + } + public void CleanupScene() + { + formopen = false; + + Renderer.DeviceDestroyed(); + + int count = 0; + while (running && (count < 5000)) //wait for the content thread to exit gracefully + { + Thread.Sleep(1); + count++; + } + } + public void RenderScene(DeviceContext context) + { + float elapsed = (float)frametimer.Elapsed.TotalSeconds; + frametimer.Restart(); + + if (pauserendering) return; + + if (!Monitor.TryEnter(Renderer.RenderSyncRoot, 50)) + { return; } //couldn't get a lock, try again next time + + //UpdateControlInputs(elapsed); + //space.Update(elapsed); + + + Renderer.Update(elapsed, MouseLastPoint.X, MouseLastPoint.Y); + + + + //UpdateWidgets(); + //BeginMouseHitTest(); + + + + + Renderer.BeginRender(context); + + Renderer.RenderSkyAndClouds(); + + Renderer.SelectedDrawable = null;// SelectedItem.Drawable; + + + //if (renderworld) + //{ + // RenderWorld(); + //} + //else if (rendermaps) + //{ + // RenderYmaps(); + //} + //else + //{ + // RenderSingleItem(); + //} + //UpdateMouseHitsFromRenderer(); + //RenderSelection(); + + + //RenderGrid(context); + + + Renderer.RenderQueued(); + + //Renderer.RenderBounds(MapSelectionMode.Entity); + + //Renderer.RenderSelectionGeometry(MapSelectionMode.Entity); + + //RenderMoused(); + + Renderer.RenderFinalPass(); + + //RenderMarkers(); + //RenderWidgets(); + + Renderer.EndRender(); + + Monitor.Exit(Renderer.RenderSyncRoot); + + //UpdateMarkerSelectionPanelInvoke(); + } + public void BuffersResized(int w, int h) + { + Renderer.BuffersResized(w, h); + } + + + + + + private void Init() + { + //called from VehicleForm_Load + + if (!initedOk) + { + Close(); + return; + } + + + MouseWheel += VehicleForm_MouseWheel; + + if (!GTAFolder.UpdateGTAFolder(true)) + { + Close(); + return; + } + + + Input.Init(); + + + Renderer.Start(); + } + + + private void ContentThread() + { + //main content loading thread. + running = true; + + UpdateStatus("Scanning..."); + + try + { + GTA5Keys.LoadFromPath(GTAFolder.CurrentGTAFolder, Settings.Default.Key); + } + catch + { + MessageBox.Show("Keys not found! This shouldn't happen."); + Close(); + return; + } + + GameFileCache.EnableDlc = true; + GameFileCache.LoadVehicles = true; + GameFileCache.LoadArchetypes = false;//to speed things up a little + GameFileCache.BuildExtendedJenkIndex = false;//to speed things up a little + GameFileCache.Init(UpdateStatus, LogError); + + //UpdateDlcListComboBox(gameFileCache.DlcNameList); + + //EnableCacheDependentUI(); + + LoadWorld(); + + + + //initialised = true; + + //EnableDLCModsUI(); + + //UpdateStatus("Ready"); + + + Task.Run(() => { + while (formopen && !IsDisposed) //renderer content loop + { + bool rcItemsPending = Renderer.ContentThreadProc(); + + if (!rcItemsPending) + { + Thread.Sleep(1); //sleep if there's nothing to do + } + } + }); + + while (formopen && !IsDisposed) //main asset loop + { + bool fcItemsPending = GameFileCache.ContentThreadProc(); + + if (!fcItemsPending) + { + Thread.Sleep(1); //sleep if there's nothing to do + } + } + + GameFileCache.Clear(); + + running = false; + } + + + + + private void LoadWorld() + { + UpdateStatus("Loading timecycles..."); + timecycle.Init(GameFileCache, UpdateStatus); + timecycle.SetTime(Renderer.timeofday); + + UpdateStatus("Loading materials..."); + BoundsMaterialTypes.Init(GameFileCache); + + UpdateStatus("Loading weather..."); + weather.Init(GameFileCache, UpdateStatus, timecycle); + //UpdateWeatherTypesComboBox(weather); + + UpdateStatus("Loading clouds..."); + clouds.Init(GameFileCache, UpdateStatus, weather); + //UpdateCloudTypesComboBox(clouds); + + } + + + + + + + private void UpdateStatus(string text) + { + try + { + if (InvokeRequired) + { + BeginInvoke(new Action(() => { UpdateStatus(text); })); + } + else + { + StatusLabel.Text = text; + } + } + catch { } + } + private void LogError(string text) + { + try + { + if (InvokeRequired) + { + Invoke(new Action(() => { LogError(text); })); + } + else + { + //TODO: error logging.. + //ConsoleTextBox.AppendText(text + "\r\n"); + //StatusLabel.Text = text; + //MessageBox.Show(text); + } + } + catch { } + } + + + + + private void UpdateMousePosition(MouseEventArgs e) + { + MouseX = e.X; + MouseY = e.Y; + MouseLastPoint = e.Location; + } + + private void RotateCam(int dx, int dy) + { + camera.MouseRotate(dx, dy); + } + + + + + private void VehicleForm_Load(object sender, EventArgs e) + { + Init(); + } + + private void VehicleForm_MouseDown(object sender, MouseEventArgs e) + { + switch (e.Button) + { + case MouseButtons.Left: MouseLButtonDown = true; break; + case MouseButtons.Right: MouseRButtonDown = true; break; + } + + //if (!ToolsPanelShowButton.Focused) + //{ + // ToolsPanelShowButton.Focus(); //make sure no textboxes etc are focused! + //} + + MouseDownPoint = e.Location; + MouseLastPoint = MouseDownPoint; + + if (MouseLButtonDown) + { + } + + if (MouseRButtonDown) + { + //SelectMousedItem(); + } + + MouseX = e.X; //to stop jumps happening on mousedown, sometimes the last MouseMove event was somewhere else... (eg after clicked a menu) + MouseY = e.Y; + } + + private void VehicleForm_MouseUp(object sender, MouseEventArgs e) + { + switch (e.Button) + { + case MouseButtons.Left: MouseLButtonDown = false; break; + case MouseButtons.Right: MouseRButtonDown = false; break; + } + + + + if (e.Button == MouseButtons.Left) + { + } + } + + private void VehicleForm_MouseMove(object sender, MouseEventArgs e) + { + int dx = e.X - MouseX; + int dy = e.Y - MouseY; + + //if (MouseInvert) + //{ + // dy = -dy; + //} + + //if (ControlMode == WorldControlMode.Free && !ControlBrushEnabled) + { + if (MouseLButtonDown) + { + RotateCam(dx, dy); + } + if (MouseRButtonDown) + { + if (Renderer.controllightdir) + { + Renderer.lightdirx += (dx * camera.Sensitivity); + Renderer.lightdiry += (dy * camera.Sensitivity); + } + else if (Renderer.controltimeofday) + { + float tod = Renderer.timeofday; + tod += (dx - dy) / 30.0f; + while (tod >= 24.0f) tod -= 24.0f; + while (tod < 0.0f) tod += 24.0f; + timecycle.SetTime(tod); + Renderer.timeofday = tod; + + //float fv = tod * 60.0f; + //TimeOfDayTrackBar.Value = (int)fv; + //UpdateTimeOfDayLabel(); + } + } + + UpdateMousePosition(e); + + } + + + + } + + private void VehicleForm_MouseWheel(object sender, MouseEventArgs e) + { + if (e.Delta != 0) + { + camera.MouseZoom(e.Delta); + } + } + + private void VehicleForm_KeyDown(object sender, KeyEventArgs e) + { + if (ActiveControl is TextBox) + { + var tb = ActiveControl as TextBox; + if (!tb.ReadOnly) return; //don't move the camera when typing! + } + if (ActiveControl is ComboBox) + { + var cb = ActiveControl as ComboBox; + if (cb.DropDownStyle != ComboBoxStyle.DropDownList) return; //nontypable combobox + } + + bool enablemove = true;// (!iseditmode) || (MouseLButtonDown && (GrabbedMarker == null) && (GrabbedWidget == null)); + + Input.KeyDown(e, enablemove); + + var k = e.KeyCode; + var kb = Input.keyBindings; + bool ctrl = Input.CtrlPressed; + bool shift = Input.ShiftPressed; + + + if (!ctrl) + { + if (k == kb.MoveSlowerZoomIn) + { + camera.MouseZoom(1); + } + if (k == kb.MoveFasterZoomOut) + { + camera.MouseZoom(-1); + } + } + + + if (!Input.kbmoving) //don't trigger further actions if moving. + { + if (!ctrl) + { + + } + else + { + //switch (k) + //{ + // //case Keys.N: + // // New(); + // // break; + // //case Keys.O: + // // Open(); + // // break; + // //case Keys.S: + // // if (shift) SaveAll(); + // // else Save(); + // // break; + // //case Keys.Z: + // // Undo(); + // // break; + // //case Keys.Y: + // // Redo(); + // // break; + // //case Keys.C: + // // CopyItem(); + // // break; + // //case Keys.V: + // // PasteItem(); + // // break; + // //case Keys.U: + // // ToolsPanelShowButton.Visible = !ToolsPanelShowButton.Visible; + // // break; + //} + } + } + + //if (ControlMode != WorldControlMode.Free || ControlBrushEnabled) + //{ + // e.Handled = true; + //} + } + + private void VehicleForm_KeyUp(object sender, KeyEventArgs e) + { + Input.KeyUp(e); + + if (ActiveControl is TextBox) + { + var tb = ActiveControl as TextBox; + if (!tb.ReadOnly) return; //don't move the camera when typing! + } + if (ActiveControl is ComboBox) + { + var cb = ActiveControl as ComboBox; + if (cb.DropDownStyle != ComboBoxStyle.DropDownList) return; //non-typable combobox + } + + //if (ControlMode != WorldControlMode.Free) + //{ + // e.Handled = true; + //} + } + + private void VehicleForm_Deactivate(object sender, EventArgs e) + { + //try not to lock keyboard movement if the form loses focus. + Input.KeyboardStop(); + } + + private void StatsUpdateTimer_Tick(object sender, EventArgs e) + { + StatsLabel.Text = Renderer.GetStatusText(); + + if (Renderer.timerunning) + { + //float fv = Renderer.timeofday * 60.0f; + ////TimeOfDayTrackBar.Value = (int)fv; + //UpdateTimeOfDayLabel(); + } + + //CameraPositionTextBox.Text = FloatUtil.GetVector3String(camera.Position, "0.##"); + } + } +} diff --git a/Vehicles/VehicleForm.resx b/Vehicles/VehicleForm.resx new file mode 100644 index 0000000..36d72f5 --- /dev/null +++ b/Vehicles/VehicleForm.resx @@ -0,0 +1,415 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 127, 17 + + + + + AAABAAMAICAAAAAAGACoDAAANgAAABAQAAAAABgAaAMAAN4MAABAQAAAAAAYACgyAABGEAAAKAAAACAA + AABAAAAAAQAYAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/u3v+Pn6//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7+/vX3/rzA3OHl9fz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7//+zv+3Z6qcLI5Pr7/wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP7+/+br+15in6+33vf5/wAAAAAAAAAAAAAAAP7+//7+/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//v8//v8//3+/wAAAAAAAAAAAAAAAAAAAP7+/+Ho+1dana20 + 4/b4/wAAAAAAAPz9//P2/+Tp/ezw/vz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///X4 + /9Pa+tPa+/H1//z9/wAAAAAAAAAAAAAAAP7+/93k+SsscaSr3PX3/wAAAP7+//L1/7W98AcWgrvC8Pj6 + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/+bs/xohiAEJdrvF9+7y//z9/wAAAAAAAAAA + AP7+/9rh+CEkapmh0/T3/wAAAPj6/9HZ/AEHcgEEb9LZ+/r7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP7//+/z/3F+zAAAXwQLcZai3fb4/wAAAAAAAAAAAP3+/97l/E9Tmaau4fT3/wAAAO/0/1dd + sAAAV7a/8/H1//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPr8/+jv/46Y3QUUf6Ot + 5PX4/wAAAAAAAAAAAP3+/9zj+3Z6wLe/7fX4/wAAAPD0/212xnaAzerw//z9/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/+/z/+Dm+/D0//z9/wAAAAAAAP7+//j6/9Pd+UhLjb/H + 9/D0//3+//n7/+nt/+jt//n7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7///7+//7+//7+/wAAAAAAAPr8/+7z/83W+ImU2A0UdFNarr/K9env//X4//z9//3+//7//wAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///j6/+Pq/255 + xhckjE5XsVVftUlTqwAKeTA9nr3H8+7z//v8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+//b4/9Tc+Sc0mRonj8rV/crX/ZSb48rX/brG8wwWgQAEdJei + 4efu//n7//7+//z9//z9//z9//z9//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//f5/+3y/+nv/+ft + /8vV+io2mImU2M7c/7vG9yIvlQAOfCg4mM3Y/s/c/4aR1AQRfGtzwtni/ebt/9vi/tri/tXd+9Tc+O3x + /vz9/wAAAAAAAAAAAAAAAAAAAAAAAPn6/87V+FVftkRPrFlnvSEqjQoUfmJvwWFvvg0TfQQIcxEchwAD + cy89n19rvVVitQwZgwAAaiMrkT9NqTVBoiw3mhQihig1mNLX+fv8/wAAAAAAAAAAAAAAAAAAAAAAAPb5 + /52l4EFLqoCK03yF0VBctGhyw52o5GVrvQAAaneBzsHM+jA3mhYgiTtIpJOf3ouW2AAAbmh0wbbA8bS+ + 7qiz5pCb16+56e/z//3+/wAAAAAAAAAAAAAAAAAAAAAAAPv8//H1/+vw/+zx/+nv/7/J9YqP3MbP/8LM + +hwqkFZftaCp5EhRrcTQ+9jj/8rW/UJMqn6J0ebt//X3//f5//b4//X3//f5//z9/wAAAAAAAAAAAAAA + AAAAAAAAAP7+//z9//3+/wAAAAAAAP3+/+7z/6at64iP3aWs7XN8zRIfhyUykp2o5MHM+oKM0xonjY6X + 2+jv//v8/wAAAP7+//n7//b5//r7//7//wAAAAAAAAAAAAAAAP7+//f5/+rw/9Pa9fL0/v7//wAAAAAA + APv8//H1/+Tr/7i/91liu0NPq0VQrS06m0NNqDdCoYqU1+nv//v8/wAAAAAAAPn7/9zi/qSt59ri/fL1 + //v8//7//wAAAPz9//D0/8rT+h0sjkVQrPD0/wAAAAAAAAAAAAAAAAAAAPz9/+7z/8LL9Jqk4aGq6LW/ + 8c3W9+Xs/vH1//v8/wAAAAAAAAAAAPf5/6at5gAAbxIfh6u16+Po/fr7/wAAAPb5/6ev5gAIeAAPernC + 8fX4/wAAAAAAAP3+//v8//z9/wAAAP3+//j6//P3//P2//b4//r8//7+//7+//v8//r8//3+/wAAAPv8 + /+Xr/nuIzwAAbBseg5Sb2fb5/wAAAPf5/8DF8pWe3d/n/vT3//39/wAAAPv8/+zx/87V9+3x/v3+/wAA + AP3+//j6//X4//v8/wAAAAAAAPn7/+Dm/snR9fD0//39//z8/fv8/+3y/8LK9aGq4dfd9/n7/wAAAPz9 + //b5//X4//v8/wAAAAAAAP7+/+7z/4aP1gEPet7k/f39/wAAAPf5/83U+ZCZ2u3x/v7+/wAAAPP3/215 + wgAJd7fB8/L1//7+/wAAAP3+//j6//f5//r8//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAPj6/87W/AAA + X2duue3y//7+/wAAAPD0/05asBQfidzj/P39/wAAAPX4/6Su6AAAXBccgtff/vv8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP3/3F8xhYli9Xe/fn6/wAAAAAAAO3y/1pltQAJd9be + /fv8/wAAAPz9/+rw/36I0Bknjs/W+vv8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAPf5/8HI7tnf+/X4//7+/wAAAAAAAO/0/3R7xgAAb9ng/Pz9/wAAAAAAAPn7/+Ln/dLY+fP2//3+ + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//r7//v8//7+/wAAAAAAAAAA + APb4/7/F84eP0e/0//7+/wAAAAAAAP7+//z9//v8//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz9//b5//X4//v8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////w////4 + P///+D////g8//D4MH/geCB/4Dggf+A4IH/wOCD/+DAB//hgAf//gAP//wAAB/AAAAPwAAAD8AAAA/AA + AAfjAAEHgYADAQPgBwEDEAEBAghgAQwIIEH8CCB//Bggf/wYMH/8ODD///h/////////////KAAAABAA + AAAgAAAAAQAYAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+vv/fL1/v///wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///4+Vx7/F5v///wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAP///4CHtrS62////////////////////wAAAAAAAAAAAP////H0/vf6/v// + /////////4yTwrrB4f///+zw+7rA6P39/////wAAAAAAAAAAAP///56l2BkcguXr/P///////42Uw8jO + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2OL+NjZ7AAArX2Ok + 4uz/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 2eP/LjJ1DAxKfYTE4Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//f7//f7//v7//v// + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/gILIR0eVeoHC3eb/8fX/+/z/AAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+Pr/ + +Pr/+Pr/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+vv/+vv/+/z//f3//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/2eP9ZWeqHx1obnOz4Or/8fX/+/z/AAAAAAAAAAAAAAAA/v7/ + +/z/9fj/8vb/8PX/7vT/8fb/9fj/+fr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/9fj/9fj/9Pj/9Pf/9vn/+/z//v7/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP9ODp9AAA5jZDQ5O7/8PX/+/z/AAAA + AAAAAAAA/v7/+/z/9Pf/7fP/5u//wsz6j5XfuMDx7fL/9vn//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+Pr/8/b/5+3/2eH/2uP/ + 5u3/7fP/8/b/+vv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3ef/U1ebBgVKio/O + 4uz/8fX/+/z/AAAAAAAA/v///P3/9fj/7fP/4uv/hIzZHSWPAABmU1i14ub/9/r/+/z/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9Pf/ + 7/X/09z/TlSzNzWYj5bh5O7/6/L/8vb/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fX/ + 2eP/QUWIEhBZbnSz3uj/8fb/+/z/AAAAAAAA/f7/+Pr/7/T/6PH/iI7cAABvAABqAABncXjK6O//9fj/ + +/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+/z/8/f/2uD/Z27EAABnAABiBgl4jJTd5vD/6O//8vX/+fv//f7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8fb/2OP/Mjd6AQE6ZGup4er/8fX/+/z/AAAAAAAA+vz/8fX/6/T/xM/8ExyJAABwAABu + GySRxc387fT/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vz/8/f/1Nr/MzqhAABhAxOBAARyBgp5jpLg5Oz/7PP/9Pf/+vz//v7/ + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP/KCtvBwZOjJHS4Or/8fX/+/z/AAAA/f7/9/n/7fP/3+j/ + UFq3AABtAAZ3BAh6mZ/n5vD/7vP/+Pr//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/6e//sbb1KzWcAABwBhaBAAFyAgp6fITR + 1d777/T/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3+j/WF2hBglTnaTj5O3/8PX/+/z/AAAA + /P3/9Pf/6vL/k5riAAByAAR0AABrY2vE4ur/6vH/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/7fL/5O3/ytX/RU6w + AABpAA5+AABuAABnhord6e7/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/7/T/3+j/k5jbT1KdgYjJ + 3uf+8fX/+/z/AAAA+/z/9fn/4ef/NDqhAABnAABrJjCU0Nn/5/D/8fX/+vv//v7/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + 9vn/7vP/6vP/ztb/O0CmAABpAABrQkuoxMn57PH/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/ + 2+X/en/CUFGak5nY3+j/8fX//P3/AAAA/P3/9fj/4en/i5DbNT2hIyuTpqzv4uz/7vP/9/n//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/9vn/7/P/6vL/ytH/X2i9XWi7wsf/6e//8/f/+Pr//v7/AAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/WF2hW1ylvMD+3uf/8PX/+/z/AAAA/f7/9vn/7fP/4uj/j5Pgf4LV3+X/6fD/ + 9Pf//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/8vX/7fP/5+//5u7/6vD/8PT/9vn//P3//v7/ + AAAAAAAAAAAAAAAAAAAA/f7/9/n/7fP/0tz9LDJzNjh/nqTk2uT/7fL/9/n//f7//f7/+fv/8/b/7PL/ + 3eX/zM//5ev/9fj/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f3/+vv/9/n/9vn/9fj/9vn/ + +fr//P3//v7/AAAAAAAAAAAA/v///f7/+vv/9vn/7/T/5vD/2Ob/VFubERNdoajk4u//5O7/7vP/9vj/ + +fr/+vv/+Pr/9fj/9Pj/9fj/9fj/+Pr//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///v7/ + /f7//P3//P3//f3//v7//v//AAAAAAAAAAAA/f7/+vz/9vn/8fX/7vT/5O3/3eb/z9n/cHjICxN5d37L + z9n/2eP/5O3/6/L/8PT/9Pf/9/n/+vv/+vv/+/z//P3//f3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+Pr/8/b/7vT/6vL/z9r+jZjeQUeq + IiuQCBN3AAFrBRB8Nj2iUViym6XlydH/4+z/6/L/8PT/9/n/+/z//f7//v//AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/8fX/6/L/3uf/ + mKTkLzibAABoAAB0Fx+HDBh7FSGDAg16AABYAABlCBB/Ji2UhYza1+D/6PL/7fL/9Pf/+vv//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/9/n/ + 8PT/7PT/z9j/XmO+AABtAABcMDSXoajsu8X7VV+5hYzblZ/fTVSxFSKMAABkAABnAAN2Qkmpsbrz5e3/ + 6vH/8fX/+Pr//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/P3/9/n/8PX/7PT/vcn3LTOZAABaAgR1ZWzD0Nf/5vL/1OP/l53lzs3/6fP/4+7/sLzwZ23CBxSD + AABnAABlHiaSmqHo3+j/5+//7/T/9vn//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/ + /v7//v7//v7//f7/+/z/9vj/7vP/7PX/tcLzEBeGAABkPEWlqLPt2eX/4e7/3On/uMX1gofVe3vPhYzY + z93+5/X/4e3/lJ3gHiOPAABtAABqChiEbHLIytD/5/D/7PL/8/f/+Pr/+fr/+Pr/+Pr/+Pr/+Pr/+Pr/ + +Pr/+fv/+vv/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+fv/9/n/9vj/9fj/9Pf/8fX/7PL/4uv/l6HgDhF7AAN4iZDe0d7/3uz/4vD/w83/VVm3 + ICiSAAFyAABlAABwaHTD1N//2un/3er/w838ZW3BEyOJJzKVAQ16NDmfwsn75fD/5u7/7PL/7vP/7fP/ + 7fP/7fL/7fP/7vP/7/T/8fb/9Pj/9vn/+fr//f3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/+Pr/9Pf/8fX/7vT/7PL/6/L/6fH/5u7/6vX/tsD0CQx4AAFwkZvi7ff/4vD/ + 4fD/z9j/OkGlAABiAABwBxWAAAt7BBN+P0uofYLUztb/4O7/6fb/6fP/qa7xQkyoBg56AABqMjugx8/+ + 5fH/4Ov/4On/3uj/3eb/3+j/3uj/1+L/0d3/1d7/3+f/7fL/9vj/+vz//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+fr/8/f/6/L/2d//v8j6vcf5ucP1wMv8wM3+vMj6PkqoAABo + UF25usP7tsPyvsr6sLrwQ0utAABqAAV1OUameIDRKDWZAAd2GyeOLDecmaHntsL0pbLom6riq7LzUlu0 + AANzBhR/AAZ0NT+ja3bBY2i/XGG6UViyWl65XGG7XGC6TVWvQU6pPkalODygqK7p8vb/+vz//v7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/7/T/wcj2R0ysExeFERmGDxuIFB6K + FBqICxSEAABsAAByDBiDCRSBBRCADhaFCRODAAh4AxF/AAl4CxeDHSaPAAp6AAN0AA19AAd3CBOBEBqH + BhGBAAh5AABwAAByAAh5BhSCAxWCAABsAABvAABlAABnAABxAABjAABmAABhAABdAABYAABhCAt/q7Lr + 8/f/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+fv/3uT/SE2vAABn + CBB/GiCMLzmfLTWcGByJFRyKGCOOMj2gHymRDxiGGyOPLDCXBRF/AAh3BhaCEyKMICqTKC2WNDqfIzCV + Awx6Eh+JHiaPAAR3AAZ5CxSDICWQX2q7Q1CqAA1+AAFxDxuHiZTbVGC4dHnQnabrTVqzY23EUV62Slau + LjaZXWm9sLjz5ez/9vn/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +Pv/4+n+e4LPfoPVpqv2vsf/zNX/zdb/xtH/v8v8pK7spKfysLb3vcr4ws784ej/hI/YAAZ1AAJzVF25 + yM//3Of/5+//i5LcAABpMzyfp6vxoKznlqHhqbbtx9H/8fz/kpvfAABiAABph4zc5PD/2OP/193/3un/ + 1+D/2OH/1+D/0Nr/zNL/3+j/6/L/7/T/9vn//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+Pr/9Pf/6vD/5u3/3+b/4uv/6PD/5+//5O3/5/P/sL3sXmS7mZzoz9f/3+z/4e// + mKLiEiKKCBF/KTWZr7T06/f/3ev/VF2zChSBipPcz9v+4u7/3ur/3ev/5/X/qrPrISmSDRJ2Xmq/3ur/ + 4uv/6vH/7fP/7fL/7/T/7vP/7fP/7fP/8PX/8fX/9Pf/+Pr/+/z//v7/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+Pr/9vn/9Pf/8vb/8vb/8/b/9Pf/7/T/6/L/tL/ubXLH + en/Ti43gqavy0t3/nafjMj6fJzaaAAV1GyeOYmW7Nz6fAABgNj6i1N//3uz/2uX/3Oj/5PH/wcj7FR2J + AAN0gong0tr/6fH/7/P/9vj/+Pr/+fv/+fv/+Pr/+Pr/+Pr/+fv/+vv//P3//f7//v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+/z/+/z/+/z//f3//f7/ + +fv/8fX/5Oz/jpbfc3jObnXLcXfOk5rks7b4iY3dR1KvDhuEAABoAABlEBV9U12ytcD13Or/3en/3ej/ + 1eL/q7fvGR+MKDKZbnnNxc/76PD/8fX/+fr//f7//v//AAAA/v7//f7//f3//P3//f3//f7//v//AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//f7//v7/AAAA + AAAAAAAAAAAAAAAA/f7/9vn/7/T/yNH5lJrleoDVmZ3pmpzpc3nPfoTWf4bYVFy3HSaLZ3PGsrb8v8r8 + y9n9q7jre4LRf4fUgIvXAwZ1AABrhYjb0NX/6PH/8PX/+Pr//f7/AAAAAAAA/v///f3/+vv/+Pr/9/r/ + 9/n/+Pr/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f7/+/z/+fr/9vj/9/n/ + +vz/+vv/+/z//v7/AAAAAAAAAAAAAAAA/v7/+vz/8/f/7PL/2uT/t8H1srP6vcH+nKTnSlOxV2C7TVaz + WGS8QUqmSlSuSFOtR1GtbXTKVl23ARB5AAh2AABnd33P3eP/4ur/7/T/9/n//P3/AAAAAAAAAAAA/P3/ + 9/n/8vb/7PH/6fD/7PL/7vP/8vb/9vn/+/z//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/+Pr/ + 8/b/7/T/8Pb/6vH/3eP97vL++fr//P3/AAAAAAAAAAAAAAAAAAAA/f7/+vv/9fj/7/T/5+//z9f+t7v4 + uLn9Z2zFLzucFCGIMz6gGCCMAAd4AAl2Dx2EER+GXWK8c3XLKzKXd4LP4er/6/L/8PX/9/n//P3//v// + AAAAAAAA/v7/+fv/8/b/7PP/y9H/i4/erLbt4er/5e3/7fP/8/b/+fv//f3//v7/AAAAAAAAAAAAAAAA + /v7/+/z/9vj/8PT/6/L/3+n/x9H9aHTAZGvG3+b9+Pr/+/z/AAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + +Pr/8vb/6/H/3OX+wMn4maDmdHrPWGG6T1a1eoHWcHfOTlayUlq1SlKubHjAxMj/0dn/4+v/7PL/8vb/ + +Pr//P3//v7/AAAAAAAAAAAA/f7/+fr/7vP/xsv5YGXAHymRKjKYYWS9rbLz4u3/6/P/8vb/+fr//f7/ + AAAAAAAAAAAA/v//+/z/9vj/7fL/5e3/xs7/Y23BIiiSAABeLTab3+b/9/r/+/z/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAA/f7/+vz/9vj/8PX/6vH/3eb/ydL8xM/6uMPyt733w8j/zNb/1Nz/3OT/4uz/5u7/ + 7fP/8vb/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAA/f7/+fv/7vP/jpHiAAJ1CxaBER6GAABoFRmGbXbH + 0Nf/7PL/9fj//P3/AAAAAAAAAAAA/v7/+fv/8/f/4Of/hYvbKDGZAABuAABdAAZyi5La5+7/9vn/+/z/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/9ff/8vb/7/X/7fP/6/L/5u3/5ez/6fD/ + 7PP/7/T/8fX/9Pf/9/n/+vv//P3//v7//v//AAAAAAAAAAAAAAAAAAAA/v7/+fv/8fb/2eH9fIbQExqH + AABrAAp6AAFyAABwS0+uztX39vn/+vz/AAAAAAAAAAAA/f7/+Pr/8ff/qbLpAABrAABhAABwDBWAfobX + 5e3/8PX/9vn//f3/AAAAAAAA/v///f7/+/z/+vv/+vv/+vz//P3//v7//v///v7//P3/+vz/+Pr/9/n/ + 9vj/9vj/9vj/9vj/9/n/+fr/+/z//P3//f7//v7//f7//P3/+/z/+vz/+/z//P3//v7/AAAA/v7/+/z/ + 9fj/7/T/5/H/uML1U1e1AAh5AABuAABvMjmdv8bz9vr/+vv/AAAAAAAAAAAA/f7/+fv/7/T/iY7aDxSA + GiONa3XHsr7w4Oj/6/H/9Pf/+vz//v7/AAAA/v///P3/+Pr/9Pf/8/f/9fj/9fj/9vn/+/z//v7/AAAA + AAAAAAAA/v7//f7//P3/+/z/+/z//P3//f7//v//AAAAAAAAAAAA/v7/+/z/9/n/9vn/9vn/9Pj/9vn/ + +/z//v7/AAAA/f7/+vz/9fj/7/T/6vL/3ef/i5PbGRqJBQl5jJbZ6vH/9Pj/+/z/AAAAAAAAAAAA/f7/ + +fv/8fT/1Nn9t7/0wcr54er/7fT/8fX/9fj/+vv//f7/AAAAAAAA/f3/+Pr/8PT/6/L/3uX/ztb/5Or/ + 8/f/+Pr//f7/AAAAAAAAAAAA/f7/+vz/+Pr/+fv/+fv/+vv//f3//v//AAAAAAAAAAAA/P3/9/n/7vL/ + 193/ztf/5u3/7vP/9Pf/+/z//v7/AAAA/v7//P3/+Pr/8fX/7PP/5/D/sLfxoKnk4+r/8vf/9/n//f3/ + AAAAAAAAAAAA/v7/+/z/9vn/9Pf/8vb/8fb/8fX/9Pf/+Pr//P3//v7/AAAAAAAA/v7/+vv/8vb/5+7/ + y9H/WWO9KSmSkZXj6vD/+Pv//P3/AAAAAAAA/f7/+Pr/9fj/8vb/6O7/7vP/9fj/+Pr//f7/AAAAAAAA + /v//+vv/8vb/7PP/hYraKiqKlp7i6PD/7fP/9ff/+/z//v7/AAAAAAAA/f7/+vv/9ff/8fX/8PX/8vb/ + 8/f/9vn/+/z//v7/AAAAAAAAAAAAAAAA/f7/+/z/+vv/+fr/+fr/+vv//P3//v7/AAAAAAAAAAAAAAAA + /P3/9fj/7PL/1d7/RUysAABhAABlg4ja6/D/+Pr//P3/AAAAAAAA+/z/9fj/6e7/2eD/h4/bnaXg7PH/ + 9fj/+/z/AAAAAAAA/v7/+Pr/8PX/y9X1JDGVAABaERWDoKnp6PH/7vP/9/n//P3/AAAAAAAAAAAA/v7/ + /P3/+vv/+fv/+fv/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//v7//v7//v//AAAAAAAA + AAAAAAAAAAAA/v7/+fv/8PX/7PX/ipPdAABsAABlQ1Cp3Ob/7vP/9/n//f7/AAAAAAAA+fv/9Pj/yNH5 + Ule2DBJ8Ljie0df+8fb/+fv//v7/AAAA/v7/+Pr/7/X/hY3YAABxAAl7AABuEBaEs7nz6fH/8fX/+vv/ + /v7/AAAAAAAAAAAAAAAA/v///v7//v7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9vn/7PL/0tn/LzidAQFsAAB0iZHb6vP/8PT/+fv//v//AAAA + /v7/+Pr/8vf/r7rqAAV4AABdPUen1N//7PL/9vn//f7/AAAA/v7/+fr/7/T/yc75S1G0AABrARKAAABp + Qker0df/7fP/9/n//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/5+7/cXXNAAd2AABuMDebzdT97PL/ + 9vj//P3/AAAAAAAA/v7/9/n/7/X/tL/uFCCLAABqHSqRvcf46fD/9Pf//f3/AAAAAAAA+vv/8vX/6vH/ + yM3+JC2XAABtAAV2Agx9q7Ly7vT/9vn//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/4uj/WWO1AAVx + KTaYu8T07fT/8vb/+vv//v7/AAAAAAAA/v7/9/n/7vX/vsn1Iy2SAABrAQ99mp/o6PD/9Pf//P3/AAAA + AAAA/P3/9/n/7vP/6fL/s7z2DBB/AABeQ0uttrr56e7/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +fv/4ef6g4zNbXfFw8v27fT/8vb/+Pr//f3/AAAAAAAAAAAA/v7/9/n/7vT/yNL7MjucAABtBxF/nKLo + 6fH/9Pf//P3/AAAAAAAA/v7/+/z/9fj/7fL/6/T/jZXbLzScrrP14en/7fL/+fv//v7/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+vz/8PP91dr34+f/8vb/8/f/9/r//P3//v//AAAAAAAAAAAA/v7/+Pr/8PX/1N3/ + QUqmAQRxBQ98m6Dm7PL/9fj//P3/AAAAAAAAAAAA/v7/+/z/9ff/8PX/5ez/ytH94ej/8vb/9vj/+/z/ + /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA + /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ + 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA + AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file From dce5c4d6ab6a997721cf3b60286abeafd0b36de0 Mon Sep 17 00:00:00 2001 From: dexy Date: Fri, 11 Jan 2019 18:15:25 +1100 Subject: [PATCH 076/158] CarColsFile parsing --- .../GameFiles/FileTypes/CarColsFile.cs | 698 +++++++++++++++++- CodeWalker.Core/GameFiles/GameFileCache.cs | 27 +- .../GameFiles/MetaTypes/MetaNames.cs | 1 + .../GameFiles/MetaTypes/PsoTypes.cs | 6 +- .../GameFiles/MetaTypes/XmlMeta.cs | 3 +- CodeWalker.Core/Utils/Xml.cs | 50 ++ 6 files changed, 758 insertions(+), 27 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/CarColsFile.cs b/CodeWalker.Core/GameFiles/FileTypes/CarColsFile.cs index 6679055..693e5de 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/CarColsFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/CarColsFile.cs @@ -8,11 +8,18 @@ using System.Threading.Tasks; using TC = System.ComponentModel.TypeConverterAttribute; using EXP = System.ComponentModel.ExpandableObjectConverter; using SharpDX; +using System.IO; +using System.Xml; namespace CodeWalker.GameFiles { [TC(typeof(EXP))] public class CarColsFile : GameFile, PackedFile { + public PsoFile Pso { get; set; } + public string Xml { get; set; } + + public CVehicleModelInfoVarGlobal VehicleModelInfo { get; set; } + public CarColsFile() : base(null, GameFileType.CarCols) { } public CarColsFile(RpfFileEntry entry) : base(entry, GameFileType.CarCols) @@ -27,30 +34,46 @@ namespace CodeWalker.GameFiles - //TODO - //can be PSO .ymt or XML .meta + MemoryStream ms = new MemoryStream(data); + if (PsoFile.IsPSO(ms)) + { + Pso = new PsoFile(); + Pso.Load(data); + Xml = PsoXml.GetXml(Pso); //yep let's just convert that to XML :P + } + else + { + Xml = Encoding.UTF8.GetString(data); + } + + XmlDocument xdoc = new XmlDocument(); + if (!string.IsNullOrEmpty(Xml)) + { + try + { + xdoc.LoadXml(Xml); + } + catch (Exception ex) + { + var msg = ex.Message; + } + } + else + { } - - - //for carcols wheels: - //< Item /> < !--VWT_SPORT-- > - //< Item /> < !--VWT_MUSCLE-- > - //< Item /> < !--VWT_LOWRIDER-- > - //< Item /> < !--VWT_SUV-- > - //< Item /> < !--VWT_OFFROAD-- > - //< Item /> < !--VWT_TUNER-- > - //< Item /> < !--VWT_BIKE-- > - //< Item /> < !--VWT_HIEND-- > - //< Item /> < !--VWT_SUPERMOD1-- > - //< Item > < !--VWT_SUPERMOD2-- > + if (xdoc.DocumentElement != null) + { + VehicleModelInfo = new CVehicleModelInfoVarGlobal(xdoc.DocumentElement); + } Loaded = true; } + } @@ -65,7 +88,150 @@ namespace CodeWalker.GameFiles public CVehicleKit[] Kits { get; set; } public CVehicleWheel[][] Wheels { get; set; } public CVehicleModelInfoVarGlobal_3062246906 GlobalVariationData { get; set; } - public CVehicleModelInfoVarGlobal_2807227399[] XenonLightColors { get; set; } + public CVehicleXenonLightColor[] XenonLightColors { get; set; } + + public CVehicleModelInfoVarGlobal(XmlNode node) + { + + //for carcols wheels: + //< Item /> < !--VWT_SPORT-- > + //< Item /> < !--VWT_MUSCLE-- > + //< Item /> < !--VWT_LOWRIDER-- > + //< Item /> < !--VWT_SUV-- > + //< Item /> < !--VWT_OFFROAD-- > + //< Item /> < !--VWT_TUNER-- > + //< Item /> < !--VWT_BIKE-- > + //< Item /> < !--VWT_HIEND-- > + //< Item /> < !--VWT_SUPERMOD1-- > + //< Item > < !--VWT_SUPERMOD2-- > + + XmlNode cnode; + cnode = node.SelectSingleNode("VehiclePlates"); + if (cnode != null) + { + VehiclePlates = new CVehicleModelInfoVarGlobal_465922034(cnode); + } + cnode = node.SelectSingleNode("Colors"); + if (cnode != null) + { + var items = cnode.SelectNodes("Item"); + if (items.Count > 0) + { + Colors = new CVehicleModelColor[items.Count]; + for (int i = 0; i < items.Count; i++) + { + Colors[i] = new CVehicleModelColor(items[i]); + } + } + } + cnode = node.SelectSingleNode("MetallicSettings"); + if (cnode != null) + { + var items = cnode.SelectNodes("Item"); + if (items.Count > 0) + { + MetallicSettings = new CVehicleMetallicSetting[items.Count]; + for (int i = 0; i < items.Count; i++) + { + MetallicSettings[i] = new CVehicleMetallicSetting(items[i]); + } + } + } + cnode = node.SelectSingleNode("WindowColors"); + if (cnode != null) + { + var items = cnode.SelectNodes("Item"); + if (items.Count > 0) + { + WindowColors = new CVehicleWindowColor[items.Count]; + for (int i = 0; i < items.Count; i++) + { + WindowColors[i] = new CVehicleWindowColor(items[i]); + } + } + } + cnode = node.SelectSingleNode("Lights"); + if (cnode != null) + { + var items = cnode.SelectNodes("Item"); + if (items.Count > 0) + { + Lights = new vehicleLightSettings[items.Count]; + for (int i = 0; i < items.Count; i++) + { + Lights[i] = new vehicleLightSettings(items[i]); + } + } + } + cnode = node.SelectSingleNode("Sirens"); + if (cnode != null) + { + var items = cnode.SelectNodes("Item"); + if (items.Count > 0) + { + Sirens = new sirenSettings[items.Count]; + for (int i = 0; i < items.Count; i++) + { + Sirens[i] = new sirenSettings(items[i]); + } + } + } + cnode = node.SelectSingleNode("Kits"); + if (cnode != null) + { + var items = cnode.SelectNodes("Item"); + if (items.Count > 0) + { + Kits = new CVehicleKit[items.Count]; + for (int i = 0; i < items.Count; i++) + { + Kits[i] = new CVehicleKit(items[i]); + } + } + } + cnode = node.SelectSingleNode("Wheels"); + if (cnode != null) + { + var items = cnode.SelectNodes("Item"); + if (items.Count > 0) + { + Wheels = new CVehicleWheel[items.Count][]; + for (int i = 0; i < items.Count; i++) + { + var item = items[i]; + var items2 = item.SelectNodes("Item"); + if (items2.Count > 0) + { + var wheelarr = new CVehicleWheel[items2.Count]; + for (int j = 0; j < items2.Count; j++) + { + wheelarr[j] = new CVehicleWheel(items2[j]); + } + Wheels[i] = wheelarr; + } + } + } + } + cnode = node.SelectSingleNode("GlobalVariationData"); + if (cnode != null) + { + GlobalVariationData = new CVehicleModelInfoVarGlobal_3062246906(cnode); + } + cnode = node.SelectSingleNode("XenonLightColors"); + if (cnode != null) + { + var items = cnode.SelectNodes("Item"); + if (items.Count > 0) + { + XenonLightColors = new CVehicleXenonLightColor[items.Count]; + for (int i = 0; i < items.Count; i++) + { + XenonLightColors[i] = new CVehicleXenonLightColor(items[i]); + } + } + } + + } } [TC(typeof(EXP))] public class CVehicleModelInfoVarGlobal_465922034 //VehiclePlates { @@ -76,6 +242,34 @@ namespace CodeWalker.GameFiles public byte SpaceOffset { get; set; } public byte RandomCharOffset { get; set; } public byte NumRandomChar { get; set; } + + public CVehicleModelInfoVarGlobal_465922034(XmlNode node) + { + XmlNode cnode = node.SelectSingleNode("Textures"); + if (cnode != null) + { + var items = cnode.SelectNodes("Item"); + if (items.Count > 0) + { + Textures = new CVehicleModelInfoVarGlobal_3027500557[items.Count]; + for (int i = 0; i < items.Count; i++) + { + Textures[i] = new CVehicleModelInfoVarGlobal_3027500557(items[i]); + } + } + } + DefaultTexureIndex = Xml.GetChildIntAttribute(node, "DefaultTextureIndex", "value"); + NumericOffset = (byte)Xml.GetChildIntAttribute(node, "NumericOffset", "value"); + AlphabeticOffset = (byte)Xml.GetChildIntAttribute(node, "AlphabeticOffset", "value"); + SpaceOffset = (byte)Xml.GetChildIntAttribute(node, "SpaceOffset", "value"); + RandomCharOffset = (byte)Xml.GetChildIntAttribute(node, "RandomCharOffset", "value"); + NumRandomChar = (byte)Xml.GetChildIntAttribute(node, "NumRandomChar", "value"); + } + + public override string ToString() + { + return (Textures?.Length ?? 0).ToString() + " Textures"; + } } [TC(typeof(EXP))] public class CVehicleModelInfoVarGlobal_3027500557 //VehiclePlates Texture { @@ -88,27 +282,82 @@ namespace CodeWalker.GameFiles public uint FontOutlineColor { get; set; } public bool IsFontOutlineEnabled { get; set; } public Vector2 FontOutlineMinMaxDepth { get; set; } + + public CVehicleModelInfoVarGlobal_3027500557(XmlNode node) + { + TextureSetName = XmlMeta.GetHash(Xml.GetChildInnerText(node, "TextureSetName")); + DiffuseMapName = XmlMeta.GetHash(Xml.GetChildInnerText(node, "DiffuseMapName")); + NormalMapName = XmlMeta.GetHash(Xml.GetChildInnerText(node, "NormalMapName")); + FontExtents = Xml.GetChildVector4Attributes(node, "FontExtents", "x", "y", "z", "w"); + MaxLettersOnPlate = Xml.GetChildVector2Attributes(node, "MaxLettersOnPlate", "x", "y"); + FontColor = Xml.GetChildUIntAttribute(node, "FontColor", "value"); + FontOutlineColor = Xml.GetChildUIntAttribute(node, "FontOutlineColor", "value"); + IsFontOutlineEnabled = Xml.GetChildBoolAttribute(node, "IsFontOutlineEnabled", "value"); + FontOutlineMinMaxDepth = Xml.GetChildVector2Attributes(node, "FontOutlineMinMaxDepth", "x", "y"); + } + + public override string ToString() + { + return TextureSetName.ToString() + ", " + DiffuseMapName.ToString() + ", " + NormalMapName.ToString(); + } } [TC(typeof(EXP))] public class CVehicleModelColor { - public uint Color { get; set; } + public uint color { get; set; } public CVehicleModelColor_360458334 metallicID { get; set; } public CVehicleModelColor_544262540 audioColor { get; set; } public CVehicleModelColor_2065815796 audioPrefix { get; set; } public MetaHash audioColorHash { get; set; } public MetaHash audioPrefixHash { get; set; } public string colorName { get; set; } + + public CVehicleModelColor(XmlNode node) + { + color = Xml.GetChildUIntAttribute(node, "color", "value"); + metallicID = Xml.GetChildEnumInnerText(node, "metallicID"); + audioColor = Xml.GetChildEnumInnerText(node, "audioColor"); + audioPrefix = Xml.GetChildEnumInnerText(node, "audioPrefix"); + audioColorHash = (uint)Xml.GetChildIntAttribute(node, "audioColorHash", "value"); + audioPrefixHash = (uint)Xml.GetChildIntAttribute(node, "audioPrefixHash", "value"); + colorName = Xml.GetChildInnerText(node, "colorName"); + } + + public override string ToString() + { + return colorName; + } } [TC(typeof(EXP))] public class CVehicleMetallicSetting { public float specInt { get; set; } public float specFalloff { get; set; } public float specFresnel { get; set; } + + public CVehicleMetallicSetting(XmlNode node) + { + specInt = Xml.GetChildFloatAttribute(node, "specInt", "value"); + specFalloff = Xml.GetChildFloatAttribute(node, "specFalloff", "value"); + specFresnel = Xml.GetChildFloatAttribute(node, "specFresnel", "value"); + } + public override string ToString() + { + return specInt.ToString() + ", " + specFalloff.ToString() + ", " + specFresnel.ToString(); + } } [TC(typeof(EXP))] public class CVehicleWindowColor { public uint color { get; set; } public MetaHash name { get; set; } + + public CVehicleWindowColor(XmlNode node) + { + color = Xml.GetChildUIntAttribute(node, "color", "value"); + name = XmlMeta.GetHash(Xml.GetChildInnerText(node, "name")); + } + public override string ToString() + { + return name.ToString(); + } } [TC(typeof(EXP))] public class vehicleLightSettings { @@ -124,6 +373,67 @@ namespace CodeWalker.GameFiles public vehicleLight reversingLight { get; set; } public vehicleCorona reversingLightCorona { get; set; } public string name { get; set; } + + public vehicleLightSettings(XmlNode node) + { + id = (byte)Xml.GetChildIntAttribute(node, "id", "value"); + XmlNode cnode; + cnode = node.SelectSingleNode("indicator"); + if (cnode != null) + { + indicator = new vehicleLight(cnode); + } + cnode = node.SelectSingleNode("rearIndicatorCorona"); + if (cnode != null) + { + rearIndicatorCorona = new vehicleCorona(cnode); + } + cnode = node.SelectSingleNode("frontIndicatorCorona"); + if (cnode != null) + { + frontIndicatorCorona = new vehicleCorona(cnode); + } + cnode = node.SelectSingleNode("tailLight"); + if (cnode != null) + { + tailLight = new vehicleLight(cnode); + } + cnode = node.SelectSingleNode("tailLightCorona"); + if (cnode != null) + { + tailLightCorona = new vehicleCorona(cnode); + } + cnode = node.SelectSingleNode("tailLightMiddleCorona"); + if (cnode != null) + { + tailLightMiddleCorona = new vehicleCorona(cnode); + } + cnode = node.SelectSingleNode("headLight"); + if (cnode != null) + { + headLight = new vehicleLight(cnode); + } + cnode = node.SelectSingleNode("headLightCorona"); + if (cnode != null) + { + headLightCorona = new vehicleCorona(cnode); + } + cnode = node.SelectSingleNode("reversingLight"); + if (cnode != null) + { + reversingLight = new vehicleLight(cnode); + } + cnode = node.SelectSingleNode("reversingLightCorona"); + if (cnode != null) + { + reversingLightCorona = new vehicleCorona(cnode); + } + name = Xml.GetChildInnerText(node, "name"); + } + public override string ToString() + { + return id.ToString() + ": " + name; + } } [TC(typeof(EXP))] public class vehicleLight { @@ -136,6 +446,19 @@ namespace CodeWalker.GameFiles public uint color { get; set; } public MetaHash textureName { get; set; } public bool mirrorTexture { get; set; } + + public vehicleLight(XmlNode node) + { + intensity = Xml.GetChildFloatAttribute(node, "intensity", "value"); + falloffMax = Xml.GetChildFloatAttribute(node, "falloffMax", "value"); + falloffExponent = Xml.GetChildFloatAttribute(node, "falloffExponent", "value"); + innerConeAngle = Xml.GetChildFloatAttribute(node, "innerConeAngle", "value"); + outerConeAngle = Xml.GetChildFloatAttribute(node, "outerConeAngle", "value"); + emmissiveBoost = Xml.GetChildBoolAttribute(node, "emmissiveBoost", "value"); + color = Xml.GetChildUIntAttribute(node, "color", "value"); + textureName = XmlMeta.GetHash(Xml.GetChildInnerText(node, "textureName")); + mirrorTexture = Xml.GetChildBoolAttribute(node, "mirrorTexture", "value"); + } } [TC(typeof(EXP))] public class vehicleCorona { @@ -152,6 +475,23 @@ namespace CodeWalker.GameFiles public float zRotation { get; set; } public float zBias { get; set; } public bool pullCoronaIn { get; set; } + + public vehicleCorona(XmlNode node) + { + size = Xml.GetChildFloatAttribute(node, "size", "value"); + size_far = Xml.GetChildFloatAttribute(node, "size_far", "value"); + intensity = Xml.GetChildFloatAttribute(node, "intensity", "value"); + intensity_far = Xml.GetChildFloatAttribute(node, "intensity_far", "value"); + color = Xml.GetChildUIntAttribute(node, "color", "value"); + numCoronas = (byte)Xml.GetChildIntAttribute(node, "numCoronas", "value"); + distBetweenCoronas = (byte)Xml.GetChildIntAttribute(node, "distBetweenCoronas", "value"); + distBetweenCoronas_far = (byte)Xml.GetChildIntAttribute(node, "distBetweenCoronas_far", "value"); + xRotation = Xml.GetChildFloatAttribute(node, "xRotation", "value"); + yRotation = Xml.GetChildFloatAttribute(node, "yRotation", "value"); + zRotation = Xml.GetChildFloatAttribute(node, "zRotation", "value"); + zBias = Xml.GetChildFloatAttribute(node, "zBias", "value"); + pullCoronaIn = Xml.GetChildBoolAttribute(node, "pullCoronaIn", "value"); + } } [TC(typeof(EXP))] public class sirenSettings { @@ -175,10 +515,73 @@ namespace CodeWalker.GameFiles public byte rightTailLightMultiples { get; set; } public bool useRealLights { get; set; } public sirenLight[] sirens { get; set; } + + public sirenSettings(XmlNode node) + { + id = (byte)Xml.GetChildIntAttribute(node, "id", "value"); + name = Xml.GetChildInnerText(node, "name"); + timeMultiplier = Xml.GetChildFloatAttribute(node, "timeMultiplier", "value"); + lightFalloffMax = Xml.GetChildFloatAttribute(node, "lightFalloffMax", "value"); + lightFalloffExponent = Xml.GetChildFloatAttribute(node, "lightFalloffExponent", "value"); + lightInnerConeAngle = Xml.GetChildFloatAttribute(node, "lightInnerConeAngle", "value"); + lightOuterConeAngle = Xml.GetChildFloatAttribute(node, "lightOuterConeAngle", "value"); + lightOffset = Xml.GetChildFloatAttribute(node, "lightOffset", "value"); + textureName = XmlMeta.GetHash(Xml.GetChildInnerText(node, "textureName")); + sequencerBpm = Xml.GetChildUIntAttribute(node, "sequencerBpm", "value"); + XmlNode cnode; + cnode = node.SelectSingleNode("leftHeadLight"); + if (cnode != null) + { + leftHeadLight = new sirenSettings_188820339(cnode); + } + cnode = node.SelectSingleNode("rightHeadLight"); + if (cnode != null) + { + rightHeadLight = new sirenSettings_188820339(cnode); + } + cnode = node.SelectSingleNode("leftTailLight"); + if (cnode != null) + { + leftTailLight = new sirenSettings_188820339(cnode); + } + cnode = node.SelectSingleNode("rightTailLight"); + if (cnode != null) + { + rightTailLight = new sirenSettings_188820339(cnode); + } + leftHeadLightMultiples = (byte)Xml.GetChildIntAttribute(node, "leftHeadLightMultiples", "value"); + rightHeadLightMultiples = (byte)Xml.GetChildIntAttribute(node, "rightHeadLightMultiples", "value"); + leftTailLightMultiples = (byte)Xml.GetChildIntAttribute(node, "leftTailLightMultiples", "value"); + rightTailLightMultiples = (byte)Xml.GetChildIntAttribute(node, "rightTailLightMultiples", "value"); + useRealLights = Xml.GetChildBoolAttribute(node, "useRealLights", "value"); + cnode = node.SelectSingleNode("sirens"); + if (cnode != null) + { + var items = cnode.SelectNodes("Item"); + if (items.Count > 0) + { + sirens = new sirenLight[items.Count]; + for (int i = 0; i < items.Count; i++) + { + sirens[i] = new sirenLight(items[i]); + } + } + } + } + + public override string ToString() + { + return id.ToString() + ": " + name; + } } [TC(typeof(EXP))] public class sirenSettings_188820339 { public uint sequencer { get; set; } + + public sirenSettings_188820339(XmlNode node) + { + sequencer = Xml.GetChildUIntAttribute(node, "sequencer", "value"); + } } [TC(typeof(EXP))] public class sirenLight { @@ -195,6 +598,37 @@ namespace CodeWalker.GameFiles public bool light { get; set; } public bool spotLight { get; set; } public bool castShadows { get; set; } + + public sirenLight(XmlNode node) + { + XmlNode cnode; + cnode = node.SelectSingleNode("rotation"); + if (cnode != null) + { + rotation = new sirenLight_1356743507(cnode); + } + cnode = node.SelectSingleNode("flashiness"); + if (cnode != null) + { + flashiness = new sirenLight_1356743507(cnode); + } + cnode = node.SelectSingleNode("corona"); + if (cnode != null) + { + corona = new sirenCorona(cnode); + } + color = Xml.GetChildUIntAttribute(node, "color", "value"); + intensity = Xml.GetChildFloatAttribute(node, "intensity", "value"); + lightGroup = (byte)Xml.GetChildIntAttribute(node, "lightGroup", "value"); + rotate = Xml.GetChildBoolAttribute(node, "rotate", "value"); + scale = Xml.GetChildBoolAttribute(node, "scale", "value"); + scaleFactor = (byte)Xml.GetChildIntAttribute(node, "scaleFactor", "value"); + flash = Xml.GetChildBoolAttribute(node, "flash", "value"); + light = Xml.GetChildBoolAttribute(node, "light", "value"); + spotLight = Xml.GetChildBoolAttribute(node, "spotLight", "value"); + castShadows = Xml.GetChildBoolAttribute(node, "castShadows", "value"); + + } } [TC(typeof(EXP))] public class sirenLight_1356743507 { @@ -205,6 +639,17 @@ namespace CodeWalker.GameFiles public byte multiples { get; set; } public bool direction { get; set; } public bool syncToBpm { get; set; } + + public sirenLight_1356743507(XmlNode node) + { + delta = Xml.GetChildFloatAttribute(node, "delta", "value"); + start = Xml.GetChildFloatAttribute(node, "start", "value"); + speed = Xml.GetChildFloatAttribute(node, "speed", "value"); + sequencer = Xml.GetChildUIntAttribute(node, "sequencer", "value"); + multiples = (byte)Xml.GetChildIntAttribute(node, "multiples", "value"); + direction = Xml.GetChildBoolAttribute(node, "direction", "value"); + syncToBpm = Xml.GetChildBoolAttribute(node, "syncToBpm", "value"); + } } [TC(typeof(EXP))] public class sirenCorona { @@ -212,6 +657,14 @@ namespace CodeWalker.GameFiles public float size { get; set; } public float pull { get; set; } public bool faceCamera { get; set; } + + public sirenCorona(XmlNode node) + { + intensity = Xml.GetChildFloatAttribute(node, "intensity", "value"); + size = Xml.GetChildFloatAttribute(node, "size", "value"); + pull = Xml.GetChildFloatAttribute(node, "pull", "value"); + faceCamera = Xml.GetChildBoolAttribute(node, "faceCamera", "value"); + } } [TC(typeof(EXP))] public class CVehicleKit { @@ -224,6 +677,98 @@ namespace CodeWalker.GameFiles public CVehicleKit_427606548[] slotNames { get; set; } public MetaHash[] liveryNames { get; set; } public MetaHash[] livery2Names { get; set; } + + public CVehicleKit(XmlNode node) + { + kitName = XmlMeta.GetHash(Xml.GetChildInnerText(node, "kitName")); + id = (ushort)Xml.GetChildUIntAttribute(node, "id", "value"); + kitType = Xml.GetChildEnumInnerText(node, "kitType"); + XmlNode cnode; + cnode = node.SelectSingleNode("visibleMods"); + if (cnode != null) + { + var items = cnode.SelectNodes("Item"); + if (items.Count > 0) + { + visibleMods = new CVehicleModVisible[items.Count]; + for (int i = 0; i < items.Count; i++) + { + visibleMods[i] = new CVehicleModVisible(items[i]); + } + } + } + cnode = node.SelectSingleNode("linkMods"); + if (cnode != null) + { + var items = cnode.SelectNodes("Item"); + if (items.Count > 0) + { + linkMods = new CVehicleModLink[items.Count]; + for (int i = 0; i < items.Count; i++) + { + linkMods[i] = new CVehicleModLink(items[i]); + } + } + } + cnode = node.SelectSingleNode("statMods"); + if (cnode != null) + { + var items = cnode.SelectNodes("Item"); + if (items.Count > 0) + { + statMods = new CVehicleModStat[items.Count]; + for (int i = 0; i < items.Count; i++) + { + statMods[i] = new CVehicleModStat(items[i]); + } + } + } + cnode = node.SelectSingleNode("slotNames"); + if (cnode != null) + { + var items = cnode.SelectNodes("Item"); + if (items.Count > 0) + { + slotNames = new CVehicleKit_427606548[items.Count]; + for (int i = 0; i < items.Count; i++) + { + slotNames[i] = new CVehicleKit_427606548(items[i]); + } + } + } + cnode = node.SelectSingleNode("liveryNames"); + if (cnode != null) + { + var items = cnode.SelectNodes("Item"); + if (items.Count > 0) + { + liveryNames = new MetaHash[items.Count]; + for (int i = 0; i < items.Count; i++) + { + liveryNames[i] = XmlMeta.GetHash(items[i].InnerText); + } + } + } + cnode = node.SelectSingleNode("livery2Names"); + if (cnode != null) + { + var items = cnode.SelectNodes("Item"); + if (items.Count > 0) + { + livery2Names = new MetaHash[items.Count]; + for (int i = 0; i < items.Count; i++) + { + livery2Names[i] = XmlMeta.GetHash(items[i].InnerText); + } + } + } + + } + + public override string ToString() + { + return id.ToString() + ": " + kitName.ToString(); + } } [TC(typeof(EXP))] public class CVehicleModVisible { @@ -246,12 +791,77 @@ namespace CodeWalker.GameFiles public bool disableDriveby { get; set; } public int Unk_161724223 { get; set; } public int Unk_484538291 { get; set; } + + public CVehicleModVisible(XmlNode node) + { + modelName = XmlMeta.GetHash(Xml.GetChildInnerText(node, "modelName")); + modShopLabel = Xml.GetChildInnerText(node, "modShopLabel"); + XmlNode cnode; + cnode = node.SelectSingleNode("linkedModels"); + if (cnode != null) + { + var items = cnode.SelectNodes("Item"); + if (items.Count > 0) + { + linkedModels = new MetaHash[items.Count]; + for (int i = 0; i < items.Count; i++) + { + linkedModels[i] = XmlMeta.GetHash(items[i].InnerText); + } + } + } + cnode = node.SelectSingleNode("turnOffBones"); + if (cnode != null) + { + var items = cnode.SelectNodes("Item"); + if (items.Count > 0) + { + turnOffBones = new CVehicleMod_3635907608[items.Count]; + for (int i = 0; i < items.Count; i++) + { + turnOffBones[i] = Xml.GetEnumValue(items[i].InnerText); + } + } + } + type = Xml.GetChildEnumInnerText(node, "type"); + bone = Xml.GetChildEnumInnerText(node, "bone"); + collisionBone = Xml.GetChildEnumInnerText(node, "collisionBone"); + cameraPos = Xml.GetChildEnumInnerText(node, "cameraPos"); + audioApply = Xml.GetChildFloatAttribute(node, "audioApply", "value"); + weight = (byte)Xml.GetChildIntAttribute(node, "weight", "value"); + turnOffExtra = Xml.GetChildBoolAttribute(node, "turnOffExtra", "value"); + disableBonnetCamera = Xml.GetChildBoolAttribute(node, "disableBonnetCamera", "value"); + allowBonnetSlide = Xml.GetChildBoolAttribute(node, "allowBonnetSlide", "value"); + weaponSlot = (byte)Xml.GetChildIntAttribute(node, "weaponSlot", "value"); + Unk_2656206330 = (byte)Xml.GetChildIntAttribute(node, "Unk_2656206330", "value"); + disableProjectileDriveby = Xml.GetChildBoolAttribute(node, "disableProjectileDriveby", "value"); + disableDriveby = Xml.GetChildBoolAttribute(node, "disableDriveby", "value"); + Unk_161724223 = Xml.GetChildIntAttribute(node, "Unk_161724223", "value"); + Unk_484538291 = Xml.GetChildIntAttribute(node, "Unk_484538291", "value"); + } + + public override string ToString() + { + return modelName.ToString() + ": " + modShopLabel + ": " + bone.ToString(); + } } [TC(typeof(EXP))] public class CVehicleModLink { public MetaHash modelName { get; set; } public CVehicleMod_3635907608 bone { get; set; } public bool turnOffExtra { get; set; } + + public CVehicleModLink(XmlNode node) + { + modelName = XmlMeta.GetHash(Xml.GetChildInnerText(node, "modelName")); + bone = Xml.GetChildEnumInnerText(node, "bone"); + turnOffExtra = Xml.GetChildBoolAttribute(node, "turnOffExtra", "value"); + } + + public override string ToString() + { + return modelName.ToString() + ": " + bone.ToString(); + } } [TC(typeof(EXP))] public class CVehicleModStat { @@ -260,11 +870,34 @@ namespace CodeWalker.GameFiles public float audioApply { get; set; } public byte weight { get; set; } public CVehicleMod_2363989491 type { get; set; } + + public CVehicleModStat(XmlNode node) + { + identifier = XmlMeta.GetHash(Xml.GetChildInnerText(node, "identifier")); + modifier = Xml.GetChildUIntAttribute(node, "modifier", "value"); + audioApply = Xml.GetChildFloatAttribute(node, "audioApply", "value"); + weight = (byte)Xml.GetChildIntAttribute(node, "weight", "value"); + type = Xml.GetChildEnumInnerText(node, "type"); + } + public override string ToString() + { + return identifier.ToString() + ": " + type.ToString(); + } } [TC(typeof(EXP))] public class CVehicleKit_427606548 { public CVehicleMod_2363989491 slot { get; set; } public string name { get; set; } + + public CVehicleKit_427606548(XmlNode node) + { + slot = Xml.GetChildEnumInnerText(node, "slot"); + name = Xml.GetChildInnerText(node, "name"); + } + public override string ToString() + { + return name + ": " + slot.ToString(); + } } [TC(typeof(EXP))] public class CVehicleWheel { @@ -273,6 +906,19 @@ namespace CodeWalker.GameFiles public string modShopLabel { get; set; } public float rimRadius { get; set; } public bool rear { get; set; } + + public CVehicleWheel(XmlNode node) + { + wheelName = XmlMeta.GetHash(Xml.GetChildInnerText(node, "wheelName")); + wheelVariation = XmlMeta.GetHash(Xml.GetChildInnerText(node, "wheelVariation")); + modShopLabel = Xml.GetChildInnerText(node, "modShopLabel"); + rimRadius = Xml.GetChildFloatAttribute(node, "rimRadius", "value"); + rear = Xml.GetChildBoolAttribute(node, "rear", "value"); + } + public override string ToString() + { + return wheelName.ToString() + ": " + wheelVariation.ToString() + ": " + modShopLabel; + } } [TC(typeof(EXP))] public class CVehicleModelInfoVarGlobal_3062246906 //GlobalVariationData { @@ -280,13 +926,29 @@ namespace CodeWalker.GameFiles public uint xenonCoronaColor { get; set; } public float xenonLightIntensityModifier { get; set; } public float xenonCoronaIntensityModifier { get; set; } + + public CVehicleModelInfoVarGlobal_3062246906(XmlNode node) + { + xenonLightColor = Xml.GetChildUIntAttribute(node, "xenonLightColor", "value"); + xenonCoronaColor = Xml.GetChildUIntAttribute(node, "xenonCoronaColor", "value"); + xenonLightIntensityModifier = Xml.GetChildFloatAttribute(node, "xenonLightIntensityModifier", "value"); + xenonCoronaIntensityModifier = Xml.GetChildFloatAttribute(node, "xenonCoronaIntensityModifier", "value"); + } } - [TC(typeof(EXP))] public class CVehicleModelInfoVarGlobal_2807227399 //XenonLightColors + [TC(typeof(EXP))] public class CVehicleXenonLightColor { public uint lightColor { get; set; } public uint coronaColor { get; set; } public float lightIntensityModifier { get; set; } public float coronaIntensityModifier { get; set; } + + public CVehicleXenonLightColor(XmlNode node) + { + lightColor = Xml.GetChildUIntAttribute(node, "lightColor", "value"); + coronaColor = Xml.GetChildUIntAttribute(node, "coronaColor", "value"); + lightIntensityModifier = Xml.GetChildFloatAttribute(node, "lightIntensityModifier", "value"); + coronaIntensityModifier = Xml.GetChildFloatAttribute(node, "coronaIntensityModifier", "value"); + } } diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index fdab745..a205942 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -488,13 +488,23 @@ namespace CodeWalker.GameFiles else { //do we need to include root rpf files? generally don't seem to contain map data? - //ActiveMapRpfFiles[path] = baserpf; + ActiveMapRpfFiles[path] = baserpf; } } } if (!EnableDlc) return; //don't continue for base title only + foreach (var rpf in DlcRpfs) + { + if (rpf.NameLower == "update.rpf")//include this so that files not in child rpf's can be used.. + { + string path = rpf.Path.Replace('\\', '/'); + ActiveMapRpfFiles[path] = rpf; + break; + } + } + DlcActiveRpfs.Clear(); DlcCacheFileList.Clear(); @@ -1469,6 +1479,10 @@ namespace CodeWalker.GameFiles var allVehicles = new Dictionary(); + var allCarCols = new List(); + var allCarModCols = new List(); + var allCarVariations = new List(); + var allVehicleLayouts = new List(); var addVehicleFiles = new Action>((from) => { @@ -1499,22 +1513,25 @@ namespace CodeWalker.GameFiles if ((entry.NameLower == "carcols.ymt") || (entry.NameLower == "carcols.meta")) { var cf = RpfMan.GetFile(entry); - + if (cf.VehicleModelInfo != null) + { + } + allCarCols.Add(cf); } if (entry.NameLower == "carmodcols.ymt") { var cf = RpfMan.GetFile(entry); - + allCarModCols.Add(cf); } if ((entry.NameLower == "carvariations.ymt") || (entry.NameLower == "carvariations.meta")) { var cf = RpfMan.GetFile(entry); - + allCarVariations.Add(cf); } if (entry.NameLower.StartsWith("vehiclelayouts") && entry.NameLower.EndsWith(".meta")) { var lf = RpfMan.GetFile(entry); - + allVehicleLayouts.Add(lf); } } #if !DEBUG diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs index 90ed2b1..ab102ab 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs @@ -3479,6 +3479,7 @@ namespace CodeWalker.GameFiles CVehicleModelColor = 4213335822, CVehicleWindowColor = 2561269966, CVehicleMetallicSetting = 2073371064, + CVehicleXenonLightColor = 2807227399, PlateProbabilities = 2135495316, CVehicleModColors = 2858318490, CVehicleModColor = 1443412025, diff --git a/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs b/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs index c20c573..71129fd 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs @@ -369,7 +369,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Array, 0, 0, (MetaName)13), new PsoStructureEntryInfo(MetaName.Wheels, PsoDataType.Array, 144, 4, (MetaName)851982), new PsoStructureEntryInfo(MetaName.GlobalVariationData, PsoDataType.Structure, 352, 0, (MetaName)3062246906), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2807227399), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CVehicleXenonLightColor), new PsoStructureEntryInfo(MetaName.XenonLightColors, PsoDataType.Array, 376, 0, MetaName.BYTE) ); case (MetaName)465922034: //CVehicleModelInfoVarGlobal VehiclePlates @@ -402,8 +402,8 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.xenonLightIntensityModifier, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo(MetaName.xenonCoronaIntensityModifier, PsoDataType.Float, 20, 0, 0) ); - case (MetaName)2807227399: //CVehicleModelInfoVarGlobal XenonLightColors //vehicle xenon light color - return new PsoStructureInfo((MetaName)2807227399, 0, 0, 24, + case MetaName.CVehicleXenonLightColor: //CVehicleModelInfoVarGlobal XenonLightColors + return new PsoStructureInfo(MetaName.CVehicleXenonLightColor, 0, 0, 24, new PsoStructureEntryInfo(MetaName.lightColor, PsoDataType.UInt, 8, 1, 0), new PsoStructureEntryInfo(MetaName.coronaColor, PsoDataType.UInt, 12, 1, 0), new PsoStructureEntryInfo(MetaName.lightIntensityModifier, PsoDataType.Float, 16, 0, 0), diff --git a/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs b/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs index 79eb93e..86a3468 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs @@ -672,8 +672,9 @@ namespace CodeWalker.GameFiles Buffer.BlockCopy(bytes, 0, data, offset, sizeof(float)); } - private static MetaHash GetHash(string str) + public static MetaHash GetHash(string str) { + if (str == null) return 0; if (str.StartsWith("hash_")) { return (MetaHash) Convert.ToUInt32(str.Substring(5), 16); diff --git a/CodeWalker.Core/Utils/Xml.cs b/CodeWalker.Core/Utils/Xml.cs index 0a4293b..8d5fb13 100644 --- a/CodeWalker.Core/Utils/Xml.cs +++ b/CodeWalker.Core/Utils/Xml.cs @@ -70,6 +70,26 @@ namespace CodeWalker FloatUtil.TryParse(val, out f); return f; } + public static T GetChildEnumInnerText(XmlNode node, string name) where T : struct + { + if (node == null) return new T(); + string val = node.SelectSingleNode(name)?.InnerText; + return GetEnumValue(val); + } + public static T GetEnumValue(string val) where T : struct + { + if (val.StartsWith("hash_")) + { + //convert hash_12ABC to Unk_12345 + var substr = val.Substring(5); + var uval = Convert.ToUInt32(substr, 16); + val = "Unk_" + uval.ToString(); + } + T enumval; + Enum.TryParse(val, out enumval); + return enumval; + } + public static bool GetChildBoolAttribute(XmlNode node, string name, string attribute) { @@ -87,6 +107,22 @@ namespace CodeWalker int.TryParse(val, out i); return i; } + public static uint GetChildUIntAttribute(XmlNode node, string name, string attribute) + { + if (node == null) return 0; + string val = node.SelectSingleNode(name)?.Attributes[attribute]?.InnerText; + uint i; + if (val?.StartsWith("0x") ?? false) + { + var subs = val.Substring(2); + i = Convert.ToUInt32(subs, 16); + } + else + { + uint.TryParse(val, out i); + } + return i; + } public static float GetChildFloatAttribute(XmlNode node, string name, string attribute) { if (node == null) return 0; @@ -101,6 +137,12 @@ namespace CodeWalker string val = node.SelectSingleNode(name)?.Attributes[attribute]?.InnerText; return val; } + public static Vector2 GetChildVector2Attributes(XmlNode node, string name, string x, string y) + { + float fx = GetChildFloatAttribute(node, name, x); + float fy = GetChildFloatAttribute(node, name, y); + return new Vector2(fx, fy); + } public static Vector3 GetChildVector3Attributes(XmlNode node, string name, string x, string y, string z) { float fx = GetChildFloatAttribute(node, name, x); @@ -108,6 +150,14 @@ namespace CodeWalker float fz = GetChildFloatAttribute(node, name, z); return new Vector3(fx, fy, fz); } + public static Vector4 GetChildVector4Attributes(XmlNode node, string name, string x, string y, string z, string w) + { + float fx = GetChildFloatAttribute(node, name, x); + float fy = GetChildFloatAttribute(node, name, y); + float fz = GetChildFloatAttribute(node, name, z); + float fw = GetChildFloatAttribute(node, name, w); + return new Vector4(fx, fy, fz, fw); + } public static XmlElement GetChild(XmlElement element, string name) { From b22fd9fb76f87af6c0a05d4d1da888e084bb1eea Mon Sep 17 00:00:00 2001 From: dexy Date: Fri, 11 Jan 2019 18:56:56 +1100 Subject: [PATCH 077/158] CarModColsFile parsing --- .../GameFiles/FileTypes/CarColsFile.cs | 8 +- .../GameFiles/FileTypes/CarModColsFile.cs | 184 +++++++++++++++++- 2 files changed, 185 insertions(+), 7 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/CarColsFile.cs b/CodeWalker.Core/GameFiles/FileTypes/CarColsFile.cs index 693e5de..34b1bbc 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/CarColsFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/CarColsFile.cs @@ -4,13 +4,13 @@ using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; - -using TC = System.ComponentModel.TypeConverterAttribute; -using EXP = System.ComponentModel.ExpandableObjectConverter; using SharpDX; using System.IO; using System.Xml; +using TC = System.ComponentModel.TypeConverterAttribute; +using EXP = System.ComponentModel.ExpandableObjectConverter; + namespace CodeWalker.GameFiles { [TC(typeof(EXP))] public class CarColsFile : GameFile, PackedFile @@ -842,7 +842,7 @@ namespace CodeWalker.GameFiles public override string ToString() { - return modelName.ToString() + ": " + modShopLabel + ": " + bone.ToString(); + return modelName.ToString() + ": " + modShopLabel + ": " + type.ToString() + ": " + bone.ToString(); } } [TC(typeof(EXP))] public class CVehicleModLink diff --git a/CodeWalker.Core/GameFiles/FileTypes/CarModColsFile.cs b/CodeWalker.Core/GameFiles/FileTypes/CarModColsFile.cs index f67df29..f875725 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/CarModColsFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/CarModColsFile.cs @@ -1,15 +1,24 @@ using System; using System.Collections.Generic; using System.ComponentModel; +using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; +using System.Xml; + +using TC = System.ComponentModel.TypeConverterAttribute; +using EXP = System.ComponentModel.ExpandableObjectConverter; namespace CodeWalker.GameFiles { - [TypeConverter(typeof(ExpandableObjectConverter))] - public class CarModColsFile : GameFile, PackedFile + [TC(typeof(EXP))] public class CarModColsFile : GameFile, PackedFile { + public PsoFile Pso { get; set; } + public string Xml { get; set; } + + public CVehicleModColours VehicleModColours { get; set; } + public CarModColsFile() : base(null, GameFileType.CarModCols) { } public CarModColsFile(RpfFileEntry entry) : base(entry, GameFileType.CarModCols) @@ -22,12 +31,181 @@ namespace CodeWalker.GameFiles Name = entry.Name; FilePath = Name; - //TODO //always PSO .ymt + MemoryStream ms = new MemoryStream(data); + if (PsoFile.IsPSO(ms)) + { + Pso = new PsoFile(); + Pso.Load(data); + Xml = PsoXml.GetXml(Pso); //yep let's just convert that to XML :P + } + + + XmlDocument xdoc = new XmlDocument(); + if (!string.IsNullOrEmpty(Xml)) + { + try + { + xdoc.LoadXml(Xml); + } + catch (Exception ex) + { + var msg = ex.Message; + } + } + else + { } + + + if (xdoc.DocumentElement != null) + { + VehicleModColours = new CVehicleModColours(xdoc.DocumentElement); + } + + Loaded = true; } } + + [TC(typeof(EXP))] public class CVehicleModColours + { + public CVehicleModColor[] metallic { get; set; } + public CVehicleModColor[] classic { get; set; } + public CVehicleModColor[] matte { get; set; } + public CVehicleModColor[] metals { get; set; } + public CVehicleModColor[] chrome { get; set; } + public CVehicleModPearlescentColors pearlescent { get; set; } + + public CVehicleModColours(XmlNode node) + { + XmlNode cnode; + cnode = node.SelectSingleNode("metallic"); + if (cnode != null) + { + var items = cnode.SelectNodes("Item"); + if (items.Count > 0) + { + metallic = new CVehicleModColor[items.Count]; + for (int i = 0; i < items.Count; i++) + { + metallic[i] = new CVehicleModColor(items[i]); + } + } + } + cnode = node.SelectSingleNode("classic"); + if (cnode != null) + { + var items = cnode.SelectNodes("Item"); + if (items.Count > 0) + { + classic = new CVehicleModColor[items.Count]; + for (int i = 0; i < items.Count; i++) + { + classic[i] = new CVehicleModColor(items[i]); + } + } + } + cnode = node.SelectSingleNode("matte"); + if (cnode != null) + { + var items = cnode.SelectNodes("Item"); + if (items.Count > 0) + { + matte = new CVehicleModColor[items.Count]; + for (int i = 0; i < items.Count; i++) + { + matte[i] = new CVehicleModColor(items[i]); + } + } + } + cnode = node.SelectSingleNode("metals"); + if (cnode != null) + { + var items = cnode.SelectNodes("Item"); + if (items.Count > 0) + { + metals = new CVehicleModColor[items.Count]; + for (int i = 0; i < items.Count; i++) + { + metals[i] = new CVehicleModColor(items[i]); + } + } + } + cnode = node.SelectSingleNode("chrome"); + if (cnode != null) + { + var items = cnode.SelectNodes("Item"); + if (items.Count > 0) + { + chrome = new CVehicleModColor[items.Count]; + for (int i = 0; i < items.Count; i++) + { + chrome[i] = new CVehicleModColor(items[i]); + } + } + } + cnode = node.SelectSingleNode("pearlescent"); + if (cnode != null) + { + pearlescent = new CVehicleModPearlescentColors(cnode); + } + + } + } + [TC(typeof(EXP))] public class CVehicleModColor + { + public string name { get; set; } + public byte col { get; set; } + public byte spec { get; set; } + + public CVehicleModColor(XmlNode node) + { + name = Xml.GetChildInnerText(node, "name"); + col = (byte)Xml.GetChildIntAttribute(node, "col", "value"); + spec = (byte)Xml.GetChildIntAttribute(node, "spec", "value"); + } + public override string ToString() + { + return name; + } + } + [TC(typeof(EXP))] public class CVehicleModPearlescentColors + { + public CVehicleModColor[] baseCols { get; set; } + public CVehicleModColor[] specCols { get; set; } + + public CVehicleModPearlescentColors(XmlNode node) + { + XmlNode cnode; + cnode = node.SelectSingleNode("baseCols"); + if (cnode != null) + { + var items = cnode.SelectNodes("Item"); + if (items.Count > 0) + { + baseCols = new CVehicleModColor[items.Count]; + for (int i = 0; i < items.Count; i++) + { + baseCols[i] = new CVehicleModColor(items[i]); + } + } + } + cnode = node.SelectSingleNode("specCols"); + if (cnode != null) + { + var items = cnode.SelectNodes("Item"); + if (items.Count > 0) + { + specCols = new CVehicleModColor[items.Count]; + for (int i = 0; i < items.Count; i++) + { + specCols[i] = new CVehicleModColor(items[i]); + } + } + } + } + } } From 8dafe56db001b8f74b902007c46b8e3e22002ba1 Mon Sep 17 00:00:00 2001 From: dexy Date: Fri, 11 Jan 2019 19:56:57 +1100 Subject: [PATCH 078/158] CarVariationsFile parsing --- .../GameFiles/FileTypes/CarVariationsFile.cs | 234 +++++++++++++++++- CodeWalker.Core/GameFiles/GameFileCache.cs | 7 +- CodeWalker.Core/GameFiles/MetaTypes/Meta.cs | 4 + 3 files changed, 240 insertions(+), 5 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/CarVariationsFile.cs b/CodeWalker.Core/GameFiles/FileTypes/CarVariationsFile.cs index c7e3294..6002c24 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/CarVariationsFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/CarVariationsFile.cs @@ -4,12 +4,22 @@ using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; +using SharpDX; +using System.IO; +using System.Xml; + +using TC = System.ComponentModel.TypeConverterAttribute; +using EXP = System.ComponentModel.ExpandableObjectConverter; namespace CodeWalker.GameFiles { - [TypeConverter(typeof(ExpandableObjectConverter))] - public class CarVariationsFile : GameFile, PackedFile + [TC(typeof(EXP))] public class CarVariationsFile : GameFile, PackedFile { + public PsoFile Pso { get; set; } + public string Xml { get; set; } + + public CVehicleModelInfoVariation VehicleModelInfo { get; set; } + public CarVariationsFile() : base(null, GameFileType.CarVariations) { } public CarVariationsFile(RpfFileEntry entry) : base(entry, GameFileType.CarVariations) @@ -22,12 +32,230 @@ namespace CodeWalker.GameFiles Name = entry.Name; FilePath = Name; - //TODO //can be PSO .ymt or XML .meta + MemoryStream ms = new MemoryStream(data); + if (PsoFile.IsPSO(ms)) + { + Pso = new PsoFile(); + Pso.Load(data); + Xml = PsoXml.GetXml(Pso); //yep let's just convert that to XML :P + } + else + { + Xml = Encoding.UTF8.GetString(data); + } + + XmlDocument xdoc = new XmlDocument(); + if (!string.IsNullOrEmpty(Xml)) + { + try + { + xdoc.LoadXml(Xml); + } + catch (Exception ex) + { + var msg = ex.Message; + } + } + else + { } + + + if (xdoc.DocumentElement != null) + { + VehicleModelInfo = new CVehicleModelInfoVariation(xdoc.DocumentElement); + } Loaded = true; } } + + [TC(typeof(EXP))] public class CVehicleModelInfoVariation + { + public CVehicleModelInfoVariation_418053801[] variationData { get; set; } + + public CVehicleModelInfoVariation(XmlNode node) + { + XmlNode cnode; + cnode = node.SelectSingleNode("variationData"); + if (cnode != null) + { + var items = cnode.SelectNodes("Item"); + if (items.Count > 0) + { + variationData = new CVehicleModelInfoVariation_418053801[items.Count]; + for (int i = 0; i < items.Count; i++) + { + variationData[i] = new CVehicleModelInfoVariation_418053801(items[i]); + } + } + } + } + } + [TC(typeof(EXP))] public class CVehicleModelInfoVariation_418053801 + { + public string modelName { get; set; } + public CVehicleModelInfoVariation_2575850962[] colors { get; set; } + public MetaHash[] kits { get; set; } + public MetaHash[] windowsWithExposedEdges { get; set; } + public PlateProbabilities plateProbabilities { get; set; } + public byte lightSettings { get; set; } + public byte sirenSettings { get; set; } + + public CVehicleModelInfoVariation_418053801(XmlNode node) + { + modelName = Xml.GetChildInnerText(node, "modelName"); + XmlNode cnode; + cnode = node.SelectSingleNode("colors"); + if (cnode != null) + { + var items = cnode.SelectNodes("Item"); + if (items.Count > 0) + { + colors = new CVehicleModelInfoVariation_2575850962[items.Count]; + for (int i = 0; i < items.Count; i++) + { + colors[i] = new CVehicleModelInfoVariation_2575850962(items[i]); + } + } + } + cnode = node.SelectSingleNode("kits"); + if (cnode != null) + { + var items = cnode.SelectNodes("Item"); + if (items.Count > 0) + { + kits = new MetaHash[items.Count]; + for (int i = 0; i < items.Count; i++) + { + kits[i] = XmlMeta.GetHash(items[i].InnerText); + } + } + } + cnode = node.SelectSingleNode("windowsWithExposedEdges"); + if (cnode != null) + { + var items = cnode.SelectNodes("Item"); + if (items.Count > 0) + { + windowsWithExposedEdges = new MetaHash[items.Count]; + for (int i = 0; i < items.Count; i++) + { + windowsWithExposedEdges[i] = XmlMeta.GetHash(items[i].InnerText); + } + } + } + cnode = node.SelectSingleNode("plateProbabilities"); + if (cnode != null) + { + plateProbabilities = new PlateProbabilities(cnode); + } + lightSettings = (byte)Xml.GetChildIntAttribute(node, "lightSettings", "value"); + sirenSettings = (byte)Xml.GetChildIntAttribute(node, "sirenSettings", "value"); + } + + public override string ToString() + { + return modelName; + } + } + [TC(typeof(EXP))] public class CVehicleModelInfoVariation_2575850962 + { + public byte[] indices { get; set; } + public bool[] liveries { get; set; } + + public CVehicleModelInfoVariation_2575850962(XmlNode node) + { + XmlNode cnode; + cnode = node.SelectSingleNode("indices"); + if (cnode != null) + { + var astr = cnode.InnerText; + var arrr = astr.Split(new[] { '\n', ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries); + var alist = new List(); + foreach (var item in arrr) + { + var titem = item.Trim(); + byte v; + if (byte.TryParse(titem, out v)) + { + alist.Add(v); + } + } + indices = alist.ToArray(); + } + cnode = node.SelectSingleNode("liveries"); + if (cnode != null) + { + var items = cnode.SelectNodes("Item"); + if (items.Count > 0) + { + liveries = new bool[items.Count]; + for (int i = 0; i < items.Count; i++) + { + liveries[i] = Xml.GetBoolAttribute(items[i], "value"); + } + } + else + { + var astr = cnode.InnerText; + var arrr = astr.Split(new[] { '\n', ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries); + var alist = new List(); + foreach (var item in arrr) + { + var titem = item.Trim(); + byte v; + if (byte.TryParse(titem, out v)) + { + alist.Add(v > 0); + } + } + liveries = alist.ToArray(); + } + } + + + } + } + [TC(typeof(EXP))] public class PlateProbabilities + { + public PlateProbabilities_938618322[] Probabilities { get; set; } + + public PlateProbabilities(XmlNode node) + { + XmlNode cnode; + cnode = node.SelectSingleNode("Probabilities"); + if (cnode != null) + { + var items = cnode.SelectNodes("Item"); + if (items.Count > 0) + { + Probabilities = new PlateProbabilities_938618322[items.Count]; + for (int i = 0; i < items.Count; i++) + { + Probabilities[i] = new PlateProbabilities_938618322(items[i]); + } + } + } + } + } + [TC(typeof(EXP))] public class PlateProbabilities_938618322 + { + public MetaHash Name { get; set; } + public uint Value { get; set; } + + public PlateProbabilities_938618322(XmlNode node) + { + Name = XmlMeta.GetHash(Xml.GetChildInnerText(node, "Name")); + Value = Xml.GetChildUIntAttribute(node, "Value", "value"); + } + + public override string ToString() + { + return Name.ToString() + ": " + Value.ToString(); + } + } + } diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index a205942..c657e67 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -1514,18 +1514,21 @@ namespace CodeWalker.GameFiles { var cf = RpfMan.GetFile(entry); if (cf.VehicleModelInfo != null) - { - } + { } allCarCols.Add(cf); } if (entry.NameLower == "carmodcols.ymt") { var cf = RpfMan.GetFile(entry); + if (cf.VehicleModColours != null) + { } allCarModCols.Add(cf); } if ((entry.NameLower == "carvariations.ymt") || (entry.NameLower == "carvariations.meta")) { var cf = RpfMan.GetFile(entry); + if (cf.VehicleModelInfo != null) + { } allCarVariations.Add(cf); } if (entry.NameLower.StartsWith("vehiclelayouts") && entry.NameLower.EndsWith(".meta")) diff --git a/CodeWalker.Core/GameFiles/MetaTypes/Meta.cs b/CodeWalker.Core/GameFiles/MetaTypes/Meta.cs index 5d457c8..f51874c 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/Meta.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/Meta.cs @@ -1063,6 +1063,10 @@ namespace CodeWalker.GameFiles { var str = JenkIndex.TryGetString(Hash); if (!string.IsNullOrEmpty(str)) return str; + if (Enum.IsDefined(typeof(MetaName), Hash)) + { + return ((MetaName)Hash).ToString(); + } return GlobalText.GetString(Hash); } From f3c7538d78929dea4827476445354ee8b053148f Mon Sep 17 00:00:00 2001 From: dexy Date: Fri, 11 Jan 2019 20:40:13 +1100 Subject: [PATCH 079/158] Fixed vehicle license plates rendering --- CodeWalker.Core/GameFiles/FileTypes/VehicleLayoutsFile.cs | 6 +++++- CodeWalker.Core/GameFiles/GameFileCache.cs | 2 ++ Rendering/Shaders/BasicShader.cs | 2 ++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/VehicleLayoutsFile.cs b/CodeWalker.Core/GameFiles/FileTypes/VehicleLayoutsFile.cs index 825cc17..d5dcf8c 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/VehicleLayoutsFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/VehicleLayoutsFile.cs @@ -10,6 +10,8 @@ namespace CodeWalker.GameFiles [TypeConverter(typeof(ExpandableObjectConverter))] public class VehicleLayoutsFile : GameFile, PackedFile { + public string Xml { get; set; } + public VehicleLayoutsFile() : base(null, GameFileType.VehicleLayouts) { } public VehicleLayoutsFile(RpfFileEntry entry) : base(entry, GameFileType.VehicleLayouts) @@ -22,9 +24,11 @@ namespace CodeWalker.GameFiles Name = entry.Name; FilePath = Name; - //TODO //always XML .meta + Xml = Encoding.UTF8.GetString(data); + + //TODO: parse CVehicleMetadataMgr XML Loaded = true; diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index c657e67..54aa4f2 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -1534,6 +1534,8 @@ namespace CodeWalker.GameFiles if (entry.NameLower.StartsWith("vehiclelayouts") && entry.NameLower.EndsWith(".meta")) { var lf = RpfMan.GetFile(entry); + if (lf.Xml != null) + { } allVehicleLayouts.Add(lf); } } diff --git a/Rendering/Shaders/BasicShader.cs b/Rendering/Shaders/BasicShader.cs index 9cc5f52..39d85a5 100644 --- a/Rendering/Shaders/BasicShader.cs +++ b/Rendering/Shaders/BasicShader.cs @@ -543,9 +543,11 @@ namespace CodeWalker.Rendering switch (ihash) { case MetaName.DiffuseSampler: + case MetaName.PlateBgSampler: texture = itex; break; case MetaName.BumpSampler: + case MetaName.PlateBgBumpSampler: bumptex = itex; break; case MetaName.SpecSampler: From d7d4054971168f50f4545b41509535c4dbda508d Mon Sep 17 00:00:00 2001 From: dexy Date: Sat, 12 Jan 2019 12:17:02 +1100 Subject: [PATCH 080/158] Fix for XmlMeta not importing Vector3 arrays properly, Added extra texture sampler options --- .../GameFiles/MetaTypes/MetaNames.cs | 2 + .../GameFiles/MetaTypes/XmlMeta.cs | 66 ++++++++++++------- Rendering/Renderable.cs | 4 +- Rendering/Shaders/BasicShader.cs | 3 +- 4 files changed, 51 insertions(+), 24 deletions(-) diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs index ab102ab..5d25976 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs @@ -2136,6 +2136,7 @@ namespace CodeWalker.GameFiles DiffuseNoBorderTexSampler = 1732587965, DiffuseSampler = 4059966321, DiffuseSampler2 = 181641832, + DiffuseSampler3 = 1429813046, //thanks CP DiffuseSamplerFur = 1282320680, DiffuseSamplerPhase2 = 3227619449, DiffuseSamplerPoint = 4015001285, @@ -2158,6 +2159,7 @@ namespace CodeWalker.GameFiles dirtLevel = 47191856, dirtLevelMod = 3961814809, DirtSampler = 2124031998, + DirtBumpSampler = 3157820509,//thanks CP DiskBrakeGlow = 1035405954, displParams = 1163050293, distanceMapSampler = 1616890976, diff --git a/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs b/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs index 86a3468..2d5c8ef 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs @@ -589,39 +589,61 @@ namespace CodeWalker.GameFiles { var items = new List(); - - var split = node.InnerText.Split('\n');// Regex.Split(node.InnerText, @"[\s\r\n\t]"); - - float x = 0f; float y = 0f; float z = 0f; float w = 0f; - for (int i = 0; i < split.Length; i++) + var cnodes = node.SelectNodes("Item"); + if (cnodes.Count > 0) { - var s = split[i]?.Trim(); - if (string.IsNullOrEmpty(s)) continue; - var split2 = Regex.Split(s, @"[\s\t]"); - int c = 0; - x = 0f; y = 0f; z = 0f; - for (int n = 0; n < split2.Length; n++) + foreach (XmlNode cnode in cnodes) { - var ts = split2[n]?.Trim(); - if (string.IsNullOrEmpty(ts)) continue; - var f = FloatUtil.Parse(ts); - switch (c) + var str = cnode.InnerText; + var strs = str.Split(','); + if (strs.Length >= 3) { - case 0: x = f; break; - case 1: y = f; break; - case 2: z = f; break; + x = FloatUtil.Parse(strs[0].Trim()); + y = FloatUtil.Parse(strs[1].Trim()); + z = FloatUtil.Parse(strs[2].Trim()); + if (strs.Length >= 4) + { + w = FloatUtil.Parse(strs[3].Trim()); + } + var val = new Vector4(x, y, z, w); + items.Add(val); } - c++; } - if (c >= 3) + } + else + { + var split = node.InnerText.Split('\n');// Regex.Split(node.InnerText, @"[\s\r\n\t]"); + + for (int i = 0; i < split.Length; i++) { - var val = new Vector4(x, y, z, w); - items.Add(val); + var s = split[i]?.Trim(); + if (string.IsNullOrEmpty(s)) continue; + var split2 = Regex.Split(s, @"[\s\t]"); + int c = 0; + x = 0f; y = 0f; z = 0f; + for (int n = 0; n < split2.Length; n++) + { + var ts = split2[n]?.Trim(); + if (string.IsNullOrEmpty(ts)) continue; + var f = FloatUtil.Parse(ts); + switch (c) + { + case 0: x = f; break; + case 1: y = f; break; + case 2: z = f; break; + } + c++; + } + if (c >= 3) + { + var val = new Vector4(x, y, z, w); + items.Add(val); + } } } diff --git a/Rendering/Renderable.cs b/Rendering/Renderable.cs index e06a128..4988152 100644 --- a/Rendering/Renderable.cs +++ b/Rendering/Renderable.cs @@ -434,8 +434,10 @@ namespace CodeWalker.Rendering MetaName.lookupSampler, //TF_RSN_Msk_CS1_DesHill1, bh1_43_golf_blendmap_04_LOD MetaName.heightSampler, //nxg_prop_tree_palm2_displ_l MetaName.FoamSampler, //bj_beachfoam01_lod, CS_RSN_SL_RiverFoam_01_A_lodCS_RSN_SL_RiverFoam_01_A - MetaName.textureSamp, + MetaName.DirtSampler, + MetaName.DirtBumpSampler, MetaName.DiffuseSampler2, + MetaName.DiffuseSampler3, MetaName.DiffuseHfSampler, MetaName.ComboHeightSamplerFur01, MetaName.ComboHeightSamplerFur23, diff --git a/Rendering/Shaders/BasicShader.cs b/Rendering/Shaders/BasicShader.cs index 39d85a5..216ba6c 100644 --- a/Rendering/Shaders/BasicShader.cs +++ b/Rendering/Shaders/BasicShader.cs @@ -573,8 +573,9 @@ namespace CodeWalker.Rendering //case MetaName.SnowSampler0: //case MetaName.SnowSampler1: //case MetaName.DiffuseSampler2: + //case MetaName.DiffuseSampler3: //case MetaName.DirtSampler: - //case (MetaName)3157820509://normal? + //case MetaName.DirtBumpSampler: break; case MetaName.FlowSampler: case MetaName.FogSampler: From 66b498738a863f73e06eee4429f30089cc100f83 Mon Sep 17 00:00:00 2001 From: dexy Date: Sat, 12 Jan 2019 13:49:31 +1100 Subject: [PATCH 081/158] Fixing carcols file loading, VehicleForm tools panel added --- .../GameFiles/FileTypes/CarColsFile.cs | 12 +- CodeWalker.Core/GameFiles/GameFileCache.cs | 12 +- .../GameFiles/MetaTypes/XmlMeta.cs | 3 +- Vehicles/VehicleForm.Designer.cs | 601 +++++++++++++++ Vehicles/VehicleForm.cs | 698 +++++++++++++++++- 5 files changed, 1303 insertions(+), 23 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/CarColsFile.cs b/CodeWalker.Core/GameFiles/FileTypes/CarColsFile.cs index 34b1bbc..70e2961 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/CarColsFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/CarColsFile.cs @@ -785,8 +785,8 @@ namespace CodeWalker.GameFiles public bool turnOffExtra { get; set; } public bool disableBonnetCamera { get; set; } public bool allowBonnetSlide { get; set; } - public byte weaponSlot { get; set; } //SByte? - public byte Unk_2656206330 { get; set; } //SByte? + public sbyte weaponSlot { get; set; } + public sbyte Unk_2656206330 { get; set; } public bool disableProjectileDriveby { get; set; } public bool disableDriveby { get; set; } public int Unk_161724223 { get; set; } @@ -832,12 +832,12 @@ namespace CodeWalker.GameFiles turnOffExtra = Xml.GetChildBoolAttribute(node, "turnOffExtra", "value"); disableBonnetCamera = Xml.GetChildBoolAttribute(node, "disableBonnetCamera", "value"); allowBonnetSlide = Xml.GetChildBoolAttribute(node, "allowBonnetSlide", "value"); - weaponSlot = (byte)Xml.GetChildIntAttribute(node, "weaponSlot", "value"); - Unk_2656206330 = (byte)Xml.GetChildIntAttribute(node, "Unk_2656206330", "value"); + weaponSlot = (sbyte)Xml.GetChildIntAttribute(node, "weaponSlot", "value"); + Unk_2656206330 = (sbyte)Xml.GetChildIntAttribute(node, "hash_9E527DFA", "value");//TODO: fix disableProjectileDriveby = Xml.GetChildBoolAttribute(node, "disableProjectileDriveby", "value"); disableDriveby = Xml.GetChildBoolAttribute(node, "disableDriveby", "value"); - Unk_161724223 = Xml.GetChildIntAttribute(node, "Unk_161724223", "value"); - Unk_484538291 = Xml.GetChildIntAttribute(node, "Unk_484538291", "value"); + Unk_161724223 = Xml.GetChildIntAttribute(node, "hash_09A3B73F", "value");//TODO: fix + Unk_484538291 = Xml.GetChildIntAttribute(node, "hash_1CE177B3", "value");//TODO: fix } public override string ToString() diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index 54aa4f2..95acf3a 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -1482,6 +1482,7 @@ namespace CodeWalker.GameFiles var allCarCols = new List(); var allCarModCols = new List(); var allCarVariations = new List(); + var allCarVariationsDict = new Dictionary(); var allVehicleLayouts = new List(); var addVehicleFiles = new Action>((from) => @@ -1527,8 +1528,15 @@ namespace CodeWalker.GameFiles if ((entry.NameLower == "carvariations.ymt") || (entry.NameLower == "carvariations.meta")) { var cf = RpfMan.GetFile(entry); - if (cf.VehicleModelInfo != null) - { } + if (cf.VehicleModelInfo?.variationData != null) + { + foreach (var variation in cf.VehicleModelInfo.variationData) + { + var name = variation.modelName.ToLowerInvariant(); + var hash = JenkHash.GenHash(name); + allCarVariationsDict[hash] = variation; + } + } allCarVariations.Add(cf); } if (entry.NameLower.StartsWith("vehiclelayouts") && entry.NameLower.EndsWith(".meta")) diff --git a/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs b/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs index 2d5c8ef..7ee5150 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs @@ -696,13 +696,14 @@ namespace CodeWalker.GameFiles public static MetaHash GetHash(string str) { - if (str == null) return 0; + if (string.IsNullOrEmpty(str)) return 0; if (str.StartsWith("hash_")) { return (MetaHash) Convert.ToUInt32(str.Substring(5), 16); } else { + JenkIndex.Ensure(str); return JenkHash.GenHash(str); } } diff --git a/Vehicles/VehicleForm.Designer.cs b/Vehicles/VehicleForm.Designer.cs index 35ebed0..2bcf081 100644 --- a/Vehicles/VehicleForm.Designer.cs +++ b/Vehicles/VehicleForm.Designer.cs @@ -35,7 +35,55 @@ this.MousedLabel = new System.Windows.Forms.ToolStripStatusLabel(); this.StatsLabel = new System.Windows.Forms.ToolStripStatusLabel(); this.StatsUpdateTimer = new System.Windows.Forms.Timer(this.components); + this.ToolsPanel = new System.Windows.Forms.Panel(); + this.ToolsTabControl = new System.Windows.Forms.TabControl(); + this.ToolsModelsTabPage = new System.Windows.Forms.TabPage(); + this.ToolsTexturesTabPage = new System.Windows.Forms.TabPage(); + this.TextureViewerButton = new System.Windows.Forms.Button(); + this.TexturesTreeView = new CodeWalker.WinForms.TreeViewFix(); + this.ToolsDetailsTabPage = new System.Windows.Forms.TabPage(); + this.DetailsPropertyGrid = new CodeWalker.WinForms.ReadOnlyPropertyGrid(); + this.ToolsOptionsTabPage = new System.Windows.Forms.TabPage(); + this.HDTexturesCheckBox = new System.Windows.Forms.CheckBox(); + this.SkeletonsCheckBox = new System.Windows.Forms.CheckBox(); + this.TimeOfDayLabel = new System.Windows.Forms.Label(); + this.label19 = new System.Windows.Forms.Label(); + this.TimeOfDayTrackBar = new System.Windows.Forms.TrackBar(); + this.ControlLightDirCheckBox = new System.Windows.Forms.CheckBox(); + this.ShowCollisionMeshesCheckBox = new System.Windows.Forms.CheckBox(); + this.GridCheckBox = new System.Windows.Forms.CheckBox(); + this.GridCountComboBox = new System.Windows.Forms.ComboBox(); + this.label2 = new System.Windows.Forms.Label(); + this.GridSizeComboBox = new System.Windows.Forms.ComboBox(); + this.label1 = new System.Windows.Forms.Label(); + this.StatusBarCheckBox = new System.Windows.Forms.CheckBox(); + this.ErrorConsoleCheckBox = new System.Windows.Forms.CheckBox(); + this.HDRRenderingCheckBox = new System.Windows.Forms.CheckBox(); + this.SkydomeCheckBox = new System.Windows.Forms.CheckBox(); + this.ShadowsCheckBox = new System.Windows.Forms.CheckBox(); + this.WireframeCheckBox = new System.Windows.Forms.CheckBox(); + this.RenderModeComboBox = new System.Windows.Forms.ComboBox(); + this.label11 = new System.Windows.Forms.Label(); + this.TextureSamplerComboBox = new System.Windows.Forms.ComboBox(); + this.TextureCoordsComboBox = new System.Windows.Forms.ComboBox(); + this.label10 = new System.Windows.Forms.Label(); + this.AnisotropicFilteringCheckBox = new System.Windows.Forms.CheckBox(); + this.label14 = new System.Windows.Forms.Label(); + this.ToolsPanelHideButton = new System.Windows.Forms.Button(); + this.ToolsDragPanel = new System.Windows.Forms.Panel(); + this.ModelsTreeView = new CodeWalker.WinForms.TreeViewFix(); + this.ToolsPanelShowButton = new System.Windows.Forms.Button(); + this.ConsolePanel = new System.Windows.Forms.Panel(); + this.ConsoleTextBox = new CodeWalker.WinForms.TextBoxFix(); this.StatusStrip.SuspendLayout(); + this.ToolsPanel.SuspendLayout(); + this.ToolsTabControl.SuspendLayout(); + this.ToolsModelsTabPage.SuspendLayout(); + this.ToolsTexturesTabPage.SuspendLayout(); + this.ToolsDetailsTabPage.SuspendLayout(); + this.ToolsOptionsTabPage.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.TimeOfDayTrackBar)).BeginInit(); + this.ConsolePanel.SuspendLayout(); this.SuspendLayout(); // // StatusStrip @@ -80,14 +128,517 @@ this.StatsUpdateTimer.Interval = 500; this.StatsUpdateTimer.Tick += new System.EventHandler(this.StatsUpdateTimer_Tick); // + // ToolsPanel + // + this.ToolsPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.ToolsPanel.BackColor = System.Drawing.SystemColors.ControlDark; + this.ToolsPanel.Controls.Add(this.ToolsTabControl); + this.ToolsPanel.Controls.Add(this.ToolsPanelHideButton); + this.ToolsPanel.Controls.Add(this.ToolsDragPanel); + this.ToolsPanel.Location = new System.Drawing.Point(12, 12); + this.ToolsPanel.Name = "ToolsPanel"; + this.ToolsPanel.Size = new System.Drawing.Size(233, 666); + this.ToolsPanel.TabIndex = 3; + this.ToolsPanel.Visible = false; + // + // ToolsTabControl + // + this.ToolsTabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ToolsTabControl.Controls.Add(this.ToolsModelsTabPage); + this.ToolsTabControl.Controls.Add(this.ToolsTexturesTabPage); + this.ToolsTabControl.Controls.Add(this.ToolsDetailsTabPage); + this.ToolsTabControl.Controls.Add(this.ToolsOptionsTabPage); + this.ToolsTabControl.Location = new System.Drawing.Point(2, 30); + this.ToolsTabControl.Name = "ToolsTabControl"; + this.ToolsTabControl.SelectedIndex = 0; + this.ToolsTabControl.Size = new System.Drawing.Size(228, 633); + this.ToolsTabControl.TabIndex = 1; + // + // ToolsModelsTabPage + // + this.ToolsModelsTabPage.Controls.Add(this.ModelsTreeView); + this.ToolsModelsTabPage.Location = new System.Drawing.Point(4, 22); + this.ToolsModelsTabPage.Name = "ToolsModelsTabPage"; + this.ToolsModelsTabPage.Padding = new System.Windows.Forms.Padding(3); + this.ToolsModelsTabPage.Size = new System.Drawing.Size(220, 607); + this.ToolsModelsTabPage.TabIndex = 0; + this.ToolsModelsTabPage.Text = "Models"; + this.ToolsModelsTabPage.UseVisualStyleBackColor = true; + // + // ToolsTexturesTabPage + // + this.ToolsTexturesTabPage.Controls.Add(this.TextureViewerButton); + this.ToolsTexturesTabPage.Controls.Add(this.TexturesTreeView); + this.ToolsTexturesTabPage.Location = new System.Drawing.Point(4, 22); + this.ToolsTexturesTabPage.Name = "ToolsTexturesTabPage"; + this.ToolsTexturesTabPage.Padding = new System.Windows.Forms.Padding(3); + this.ToolsTexturesTabPage.Size = new System.Drawing.Size(220, 607); + this.ToolsTexturesTabPage.TabIndex = 1; + this.ToolsTexturesTabPage.Text = "Textures"; + this.ToolsTexturesTabPage.UseVisualStyleBackColor = true; + // + // TextureViewerButton + // + this.TextureViewerButton.Location = new System.Drawing.Point(6, 6); + this.TextureViewerButton.Name = "TextureViewerButton"; + this.TextureViewerButton.Size = new System.Drawing.Size(113, 23); + this.TextureViewerButton.TabIndex = 2; + this.TextureViewerButton.Text = "Open texture viewer"; + this.TextureViewerButton.UseVisualStyleBackColor = true; + this.TextureViewerButton.Click += new System.EventHandler(this.TextureViewerButton_Click); + // + // TexturesTreeView + // + this.TexturesTreeView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.TexturesTreeView.Location = new System.Drawing.Point(0, 34); + this.TexturesTreeView.Name = "TexturesTreeView"; + this.TexturesTreeView.ShowRootLines = false; + this.TexturesTreeView.Size = new System.Drawing.Size(220, 573); + this.TexturesTreeView.TabIndex = 1; + // + // ToolsDetailsTabPage + // + this.ToolsDetailsTabPage.Controls.Add(this.DetailsPropertyGrid); + this.ToolsDetailsTabPage.Location = new System.Drawing.Point(4, 22); + this.ToolsDetailsTabPage.Name = "ToolsDetailsTabPage"; + this.ToolsDetailsTabPage.Size = new System.Drawing.Size(220, 607); + this.ToolsDetailsTabPage.TabIndex = 2; + this.ToolsDetailsTabPage.Text = "Details"; + this.ToolsDetailsTabPage.UseVisualStyleBackColor = true; + // + // DetailsPropertyGrid + // + this.DetailsPropertyGrid.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.DetailsPropertyGrid.HelpVisible = false; + this.DetailsPropertyGrid.Location = new System.Drawing.Point(0, 3); + this.DetailsPropertyGrid.Name = "DetailsPropertyGrid"; + this.DetailsPropertyGrid.PropertySort = System.Windows.Forms.PropertySort.NoSort; + this.DetailsPropertyGrid.ReadOnly = true; + this.DetailsPropertyGrid.Size = new System.Drawing.Size(220, 604); + this.DetailsPropertyGrid.TabIndex = 1; + this.DetailsPropertyGrid.ToolbarVisible = false; + // + // ToolsOptionsTabPage + // + this.ToolsOptionsTabPage.Controls.Add(this.HDTexturesCheckBox); + this.ToolsOptionsTabPage.Controls.Add(this.SkeletonsCheckBox); + this.ToolsOptionsTabPage.Controls.Add(this.TimeOfDayLabel); + this.ToolsOptionsTabPage.Controls.Add(this.label19); + this.ToolsOptionsTabPage.Controls.Add(this.TimeOfDayTrackBar); + this.ToolsOptionsTabPage.Controls.Add(this.ControlLightDirCheckBox); + this.ToolsOptionsTabPage.Controls.Add(this.ShowCollisionMeshesCheckBox); + this.ToolsOptionsTabPage.Controls.Add(this.GridCheckBox); + this.ToolsOptionsTabPage.Controls.Add(this.GridCountComboBox); + this.ToolsOptionsTabPage.Controls.Add(this.label2); + this.ToolsOptionsTabPage.Controls.Add(this.GridSizeComboBox); + this.ToolsOptionsTabPage.Controls.Add(this.label1); + this.ToolsOptionsTabPage.Controls.Add(this.StatusBarCheckBox); + this.ToolsOptionsTabPage.Controls.Add(this.ErrorConsoleCheckBox); + this.ToolsOptionsTabPage.Controls.Add(this.HDRRenderingCheckBox); + this.ToolsOptionsTabPage.Controls.Add(this.SkydomeCheckBox); + this.ToolsOptionsTabPage.Controls.Add(this.ShadowsCheckBox); + this.ToolsOptionsTabPage.Controls.Add(this.WireframeCheckBox); + this.ToolsOptionsTabPage.Controls.Add(this.RenderModeComboBox); + this.ToolsOptionsTabPage.Controls.Add(this.label11); + this.ToolsOptionsTabPage.Controls.Add(this.TextureSamplerComboBox); + this.ToolsOptionsTabPage.Controls.Add(this.TextureCoordsComboBox); + this.ToolsOptionsTabPage.Controls.Add(this.label10); + this.ToolsOptionsTabPage.Controls.Add(this.AnisotropicFilteringCheckBox); + this.ToolsOptionsTabPage.Controls.Add(this.label14); + this.ToolsOptionsTabPage.Location = new System.Drawing.Point(4, 22); + this.ToolsOptionsTabPage.Name = "ToolsOptionsTabPage"; + this.ToolsOptionsTabPage.Size = new System.Drawing.Size(220, 607); + this.ToolsOptionsTabPage.TabIndex = 3; + this.ToolsOptionsTabPage.Text = "Options"; + this.ToolsOptionsTabPage.UseVisualStyleBackColor = true; + // + // HDTexturesCheckBox + // + this.HDTexturesCheckBox.AutoSize = true; + this.HDTexturesCheckBox.Checked = true; + this.HDTexturesCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; + this.HDTexturesCheckBox.Location = new System.Drawing.Point(19, 242); + this.HDTexturesCheckBox.Name = "HDTexturesCheckBox"; + this.HDTexturesCheckBox.Size = new System.Drawing.Size(82, 17); + this.HDTexturesCheckBox.TabIndex = 10; + this.HDTexturesCheckBox.Text = "HD textures"; + this.HDTexturesCheckBox.UseVisualStyleBackColor = true; + this.HDTexturesCheckBox.CheckedChanged += new System.EventHandler(this.HDTexturesCheckBox_CheckedChanged); + // + // SkeletonsCheckBox + // + this.SkeletonsCheckBox.AutoSize = true; + this.SkeletonsCheckBox.Location = new System.Drawing.Point(19, 444); + this.SkeletonsCheckBox.Name = "SkeletonsCheckBox"; + this.SkeletonsCheckBox.Size = new System.Drawing.Size(103, 17); + this.SkeletonsCheckBox.TabIndex = 22; + this.SkeletonsCheckBox.Text = "Show Skeletons"; + this.SkeletonsCheckBox.UseVisualStyleBackColor = true; + this.SkeletonsCheckBox.CheckedChanged += new System.EventHandler(this.SkeletonsCheckBox_CheckedChanged); + // + // TimeOfDayLabel + // + this.TimeOfDayLabel.AutoSize = true; + this.TimeOfDayLabel.Location = new System.Drawing.Point(78, 109); + this.TimeOfDayLabel.Name = "TimeOfDayLabel"; + this.TimeOfDayLabel.Size = new System.Drawing.Size(34, 13); + this.TimeOfDayLabel.TabIndex = 5; + this.TimeOfDayLabel.Text = "12:00"; + // + // label19 + // + this.label19.AutoSize = true; + this.label19.Location = new System.Drawing.Point(7, 109); + this.label19.Name = "label19"; + this.label19.Size = new System.Drawing.Size(65, 13); + this.label19.TabIndex = 4; + this.label19.Text = "Time of day:"; + // + // TimeOfDayTrackBar + // + this.TimeOfDayTrackBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.TimeOfDayTrackBar.BackColor = System.Drawing.SystemColors.ControlLightLight; + this.TimeOfDayTrackBar.LargeChange = 60; + this.TimeOfDayTrackBar.Location = new System.Drawing.Point(9, 125); + this.TimeOfDayTrackBar.Maximum = 1440; + this.TimeOfDayTrackBar.Name = "TimeOfDayTrackBar"; + this.TimeOfDayTrackBar.Size = new System.Drawing.Size(203, 45); + this.TimeOfDayTrackBar.TabIndex = 6; + this.TimeOfDayTrackBar.TickFrequency = 60; + this.TimeOfDayTrackBar.Value = 720; + this.TimeOfDayTrackBar.Scroll += new System.EventHandler(this.TimeOfDayTrackBar_Scroll); + // + // ControlLightDirCheckBox + // + this.ControlLightDirCheckBox.AutoSize = true; + this.ControlLightDirCheckBox.Location = new System.Drawing.Point(19, 83); + this.ControlLightDirCheckBox.Name = "ControlLightDirCheckBox"; + this.ControlLightDirCheckBox.Size = new System.Drawing.Size(124, 17); + this.ControlLightDirCheckBox.TabIndex = 3; + this.ControlLightDirCheckBox.Text = "Control light direction"; + this.ControlLightDirCheckBox.UseVisualStyleBackColor = true; + this.ControlLightDirCheckBox.CheckedChanged += new System.EventHandler(this.ControlLightDirCheckBox_CheckedChanged); + // + // ShowCollisionMeshesCheckBox + // + this.ShowCollisionMeshesCheckBox.AutoSize = true; + this.ShowCollisionMeshesCheckBox.Location = new System.Drawing.Point(19, 173); + this.ShowCollisionMeshesCheckBox.Name = "ShowCollisionMeshesCheckBox"; + this.ShowCollisionMeshesCheckBox.Size = new System.Drawing.Size(132, 17); + this.ShowCollisionMeshesCheckBox.TabIndex = 7; + this.ShowCollisionMeshesCheckBox.Text = "Show collision meshes"; + this.ShowCollisionMeshesCheckBox.UseVisualStyleBackColor = true; + this.ShowCollisionMeshesCheckBox.CheckedChanged += new System.EventHandler(this.ShowCollisionMeshesCheckBox_CheckedChanged); + // + // GridCheckBox + // + this.GridCheckBox.AutoSize = true; + this.GridCheckBox.Location = new System.Drawing.Point(19, 364); + this.GridCheckBox.Name = "GridCheckBox"; + this.GridCheckBox.Size = new System.Drawing.Size(45, 17); + this.GridCheckBox.TabIndex = 17; + this.GridCheckBox.Text = "Grid"; + this.GridCheckBox.UseVisualStyleBackColor = true; + this.GridCheckBox.CheckedChanged += new System.EventHandler(this.GridCheckBox_CheckedChanged); + // + // GridCountComboBox + // + this.GridCountComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.GridCountComboBox.FormattingEnabled = true; + this.GridCountComboBox.Items.AddRange(new object[] { + "20", + "40", + "60", + "100"}); + this.GridCountComboBox.Location = new System.Drawing.Point(83, 411); + this.GridCountComboBox.Name = "GridCountComboBox"; + this.GridCountComboBox.Size = new System.Drawing.Size(114, 21); + this.GridCountComboBox.TabIndex = 21; + this.GridCountComboBox.SelectedIndexChanged += new System.EventHandler(this.GridCountComboBox_SelectedIndexChanged); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(7, 414); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(59, 13); + this.label2.TabIndex = 20; + this.label2.Text = "Grid count:"; + // + // GridSizeComboBox + // + this.GridSizeComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.GridSizeComboBox.FormattingEnabled = true; + this.GridSizeComboBox.Items.AddRange(new object[] { + "0.1", + "1.0", + "10", + "100"}); + this.GridSizeComboBox.Location = new System.Drawing.Point(83, 384); + this.GridSizeComboBox.Name = "GridSizeComboBox"; + this.GridSizeComboBox.Size = new System.Drawing.Size(114, 21); + this.GridSizeComboBox.TabIndex = 19; + this.GridSizeComboBox.SelectedIndexChanged += new System.EventHandler(this.GridSizeComboBox_SelectedIndexChanged); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(7, 387); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(70, 13); + this.label1.TabIndex = 18; + this.label1.Text = "Grid unit size:"; + // + // StatusBarCheckBox + // + this.StatusBarCheckBox.AutoSize = true; + this.StatusBarCheckBox.Checked = true; + this.StatusBarCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; + this.StatusBarCheckBox.Location = new System.Drawing.Point(19, 480); + this.StatusBarCheckBox.Name = "StatusBarCheckBox"; + this.StatusBarCheckBox.Size = new System.Drawing.Size(74, 17); + this.StatusBarCheckBox.TabIndex = 23; + this.StatusBarCheckBox.Text = "Status bar"; + this.StatusBarCheckBox.UseVisualStyleBackColor = true; + this.StatusBarCheckBox.CheckedChanged += new System.EventHandler(this.StatusBarCheckBox_CheckedChanged); + // + // ErrorConsoleCheckBox + // + this.ErrorConsoleCheckBox.AutoSize = true; + this.ErrorConsoleCheckBox.Location = new System.Drawing.Point(105, 480); + this.ErrorConsoleCheckBox.Name = "ErrorConsoleCheckBox"; + this.ErrorConsoleCheckBox.Size = new System.Drawing.Size(88, 17); + this.ErrorConsoleCheckBox.TabIndex = 24; + this.ErrorConsoleCheckBox.Text = "Error console"; + this.ErrorConsoleCheckBox.UseVisualStyleBackColor = true; + this.ErrorConsoleCheckBox.CheckedChanged += new System.EventHandler(this.ErrorConsoleCheckBox_CheckedChanged); + // + // HDRRenderingCheckBox + // + this.HDRRenderingCheckBox.AutoSize = true; + this.HDRRenderingCheckBox.Checked = true; + this.HDRRenderingCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; + this.HDRRenderingCheckBox.Location = new System.Drawing.Point(19, 14); + this.HDRRenderingCheckBox.Name = "HDRRenderingCheckBox"; + this.HDRRenderingCheckBox.Size = new System.Drawing.Size(97, 17); + this.HDRRenderingCheckBox.TabIndex = 0; + this.HDRRenderingCheckBox.Text = "HDR rendering"; + this.HDRRenderingCheckBox.UseVisualStyleBackColor = true; + this.HDRRenderingCheckBox.CheckedChanged += new System.EventHandler(this.HDRRenderingCheckBox_CheckedChanged); + // + // SkydomeCheckBox + // + this.SkydomeCheckBox.AutoSize = true; + this.SkydomeCheckBox.Location = new System.Drawing.Point(19, 60); + this.SkydomeCheckBox.Name = "SkydomeCheckBox"; + this.SkydomeCheckBox.Size = new System.Drawing.Size(70, 17); + this.SkydomeCheckBox.TabIndex = 2; + this.SkydomeCheckBox.Text = "Skydome"; + this.SkydomeCheckBox.UseVisualStyleBackColor = true; + this.SkydomeCheckBox.CheckedChanged += new System.EventHandler(this.SkydomeCheckBox_CheckedChanged); + // + // ShadowsCheckBox + // + this.ShadowsCheckBox.AutoSize = true; + this.ShadowsCheckBox.Checked = true; + this.ShadowsCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; + this.ShadowsCheckBox.Location = new System.Drawing.Point(19, 37); + this.ShadowsCheckBox.Name = "ShadowsCheckBox"; + this.ShadowsCheckBox.Size = new System.Drawing.Size(70, 17); + this.ShadowsCheckBox.TabIndex = 1; + this.ShadowsCheckBox.Text = "Shadows"; + this.ShadowsCheckBox.UseVisualStyleBackColor = true; + this.ShadowsCheckBox.CheckedChanged += new System.EventHandler(this.ShadowsCheckBox_CheckedChanged); + // + // WireframeCheckBox + // + this.WireframeCheckBox.AutoSize = true; + this.WireframeCheckBox.Location = new System.Drawing.Point(19, 196); + this.WireframeCheckBox.Name = "WireframeCheckBox"; + this.WireframeCheckBox.Size = new System.Drawing.Size(74, 17); + this.WireframeCheckBox.TabIndex = 8; + this.WireframeCheckBox.Text = "Wireframe"; + this.WireframeCheckBox.UseVisualStyleBackColor = true; + this.WireframeCheckBox.CheckedChanged += new System.EventHandler(this.WireframeCheckBox_CheckedChanged); + // + // RenderModeComboBox + // + this.RenderModeComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.RenderModeComboBox.FormattingEnabled = true; + this.RenderModeComboBox.Items.AddRange(new object[] { + "Default", + "Single texture", + "Vertex normals", + "Vertex tangents", + "Vertex colour 1", + "Vertex colour 2", + "Texture coord 1", + "Texture coord 2", + "Texture coord 3"}); + this.RenderModeComboBox.Location = new System.Drawing.Point(83, 274); + this.RenderModeComboBox.Name = "RenderModeComboBox"; + this.RenderModeComboBox.Size = new System.Drawing.Size(114, 21); + this.RenderModeComboBox.TabIndex = 12; + this.RenderModeComboBox.SelectedIndexChanged += new System.EventHandler(this.RenderModeComboBox_SelectedIndexChanged); + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(7, 304); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(67, 13); + this.label11.TabIndex = 13; + this.label11.Text = "Tex sampler:"; + // + // TextureSamplerComboBox + // + this.TextureSamplerComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.TextureSamplerComboBox.Enabled = false; + this.TextureSamplerComboBox.FormattingEnabled = true; + this.TextureSamplerComboBox.Location = new System.Drawing.Point(83, 301); + this.TextureSamplerComboBox.Name = "TextureSamplerComboBox"; + this.TextureSamplerComboBox.Size = new System.Drawing.Size(114, 21); + this.TextureSamplerComboBox.TabIndex = 14; + this.TextureSamplerComboBox.SelectedIndexChanged += new System.EventHandler(this.TextureSamplerComboBox_SelectedIndexChanged); + // + // TextureCoordsComboBox + // + this.TextureCoordsComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.TextureCoordsComboBox.Enabled = false; + this.TextureCoordsComboBox.FormattingEnabled = true; + this.TextureCoordsComboBox.Items.AddRange(new object[] { + "Texture coord 1", + "Texture coord 2", + "Texture coord 3"}); + this.TextureCoordsComboBox.Location = new System.Drawing.Point(83, 328); + this.TextureCoordsComboBox.Name = "TextureCoordsComboBox"; + this.TextureCoordsComboBox.Size = new System.Drawing.Size(114, 21); + this.TextureCoordsComboBox.TabIndex = 16; + this.TextureCoordsComboBox.SelectedIndexChanged += new System.EventHandler(this.TextureCoordsComboBox_SelectedIndexChanged); + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(7, 277); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(74, 13); + this.label10.TabIndex = 11; + this.label10.Text = "Render mode:"; + // + // AnisotropicFilteringCheckBox + // + this.AnisotropicFilteringCheckBox.AutoSize = true; + this.AnisotropicFilteringCheckBox.Checked = true; + this.AnisotropicFilteringCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; + this.AnisotropicFilteringCheckBox.Location = new System.Drawing.Point(19, 219); + this.AnisotropicFilteringCheckBox.Name = "AnisotropicFilteringCheckBox"; + this.AnisotropicFilteringCheckBox.Size = new System.Drawing.Size(114, 17); + this.AnisotropicFilteringCheckBox.TabIndex = 9; + this.AnisotropicFilteringCheckBox.Text = "Anisotropic filtering"; + this.AnisotropicFilteringCheckBox.UseVisualStyleBackColor = true; + this.AnisotropicFilteringCheckBox.CheckedChanged += new System.EventHandler(this.AnisotropicFilteringCheckBox_CheckedChanged); + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(7, 331); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(63, 13); + this.label14.TabIndex = 15; + this.label14.Text = "Tex coords:"; + // + // ToolsPanelHideButton + // + this.ToolsPanelHideButton.Location = new System.Drawing.Point(3, 3); + this.ToolsPanelHideButton.Name = "ToolsPanelHideButton"; + this.ToolsPanelHideButton.Size = new System.Drawing.Size(30, 23); + this.ToolsPanelHideButton.TabIndex = 0; + this.ToolsPanelHideButton.Text = "<<"; + this.ToolsPanelHideButton.UseVisualStyleBackColor = true; + this.ToolsPanelHideButton.Click += new System.EventHandler(this.ToolsPanelHideButton_Click); + // + // ToolsDragPanel + // + this.ToolsDragPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Right))); + this.ToolsDragPanel.Cursor = System.Windows.Forms.Cursors.VSplit; + this.ToolsDragPanel.Location = new System.Drawing.Point(230, 0); + this.ToolsDragPanel.Name = "ToolsDragPanel"; + this.ToolsDragPanel.Size = new System.Drawing.Size(4, 666); + this.ToolsDragPanel.TabIndex = 17; + this.ToolsDragPanel.MouseDown += new System.Windows.Forms.MouseEventHandler(this.ToolsDragPanel_MouseDown); + this.ToolsDragPanel.MouseMove += new System.Windows.Forms.MouseEventHandler(this.ToolsDragPanel_MouseMove); + this.ToolsDragPanel.MouseUp += new System.Windows.Forms.MouseEventHandler(this.ToolsDragPanel_MouseUp); + // + // ModelsTreeView + // + this.ModelsTreeView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ModelsTreeView.CheckBoxes = true; + this.ModelsTreeView.Location = new System.Drawing.Point(0, 3); + this.ModelsTreeView.Name = "ModelsTreeView"; + this.ModelsTreeView.ShowRootLines = false; + this.ModelsTreeView.Size = new System.Drawing.Size(220, 604); + this.ModelsTreeView.TabIndex = 2; + this.ModelsTreeView.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.ModelsTreeView_AfterCheck); + this.ModelsTreeView.NodeMouseDoubleClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.ModelsTreeView_NodeMouseDoubleClick); + this.ModelsTreeView.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.ModelsTreeView_KeyPress); + // + // ToolsPanelShowButton + // + this.ToolsPanelShowButton.Location = new System.Drawing.Point(15, 15); + this.ToolsPanelShowButton.Name = "ToolsPanelShowButton"; + this.ToolsPanelShowButton.Size = new System.Drawing.Size(30, 23); + this.ToolsPanelShowButton.TabIndex = 4; + this.ToolsPanelShowButton.Text = ">>"; + this.ToolsPanelShowButton.UseVisualStyleBackColor = true; + this.ToolsPanelShowButton.Click += new System.EventHandler(this.ToolsPanelShowButton_Click); + // + // ConsolePanel + // + this.ConsolePanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ConsolePanel.BackColor = System.Drawing.SystemColors.Control; + this.ConsolePanel.Controls.Add(this.ConsoleTextBox); + this.ConsolePanel.Location = new System.Drawing.Point(252, 577); + this.ConsolePanel.Name = "ConsolePanel"; + this.ConsolePanel.Size = new System.Drawing.Size(720, 101); + this.ConsolePanel.TabIndex = 5; + this.ConsolePanel.Visible = false; + // + // ConsoleTextBox + // + this.ConsoleTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ConsoleTextBox.Location = new System.Drawing.Point(3, 3); + this.ConsoleTextBox.Multiline = true; + this.ConsoleTextBox.Name = "ConsoleTextBox"; + this.ConsoleTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.ConsoleTextBox.Size = new System.Drawing.Size(714, 95); + this.ConsoleTextBox.TabIndex = 0; + // // VehicleForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackColor = System.Drawing.Color.MidnightBlue; this.ClientSize = new System.Drawing.Size(984, 711); + this.Controls.Add(this.ConsolePanel); + this.Controls.Add(this.ToolsPanel); this.Controls.Add(this.StatusStrip); + this.Controls.Add(this.ToolsPanelShowButton); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.KeyPreview = true; this.Name = "VehicleForm"; this.Text = "Vehicle Viewer - CodeWalker by dexyfex"; this.Deactivate += new System.EventHandler(this.VehicleForm_Deactivate); @@ -99,6 +650,16 @@ this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.VehicleForm_MouseUp); this.StatusStrip.ResumeLayout(false); this.StatusStrip.PerformLayout(); + this.ToolsPanel.ResumeLayout(false); + this.ToolsTabControl.ResumeLayout(false); + this.ToolsModelsTabPage.ResumeLayout(false); + this.ToolsTexturesTabPage.ResumeLayout(false); + this.ToolsDetailsTabPage.ResumeLayout(false); + this.ToolsOptionsTabPage.ResumeLayout(false); + this.ToolsOptionsTabPage.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.TimeOfDayTrackBar)).EndInit(); + this.ConsolePanel.ResumeLayout(false); + this.ConsolePanel.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); @@ -111,5 +672,45 @@ private System.Windows.Forms.ToolStripStatusLabel MousedLabel; private System.Windows.Forms.ToolStripStatusLabel StatsLabel; private System.Windows.Forms.Timer StatsUpdateTimer; + private System.Windows.Forms.Panel ToolsPanel; + private System.Windows.Forms.TabControl ToolsTabControl; + private System.Windows.Forms.TabPage ToolsModelsTabPage; + private System.Windows.Forms.TabPage ToolsTexturesTabPage; + private System.Windows.Forms.Button TextureViewerButton; + private WinForms.TreeViewFix TexturesTreeView; + private System.Windows.Forms.TabPage ToolsDetailsTabPage; + private WinForms.ReadOnlyPropertyGrid DetailsPropertyGrid; + private System.Windows.Forms.TabPage ToolsOptionsTabPage; + private System.Windows.Forms.CheckBox HDTexturesCheckBox; + private System.Windows.Forms.CheckBox SkeletonsCheckBox; + private System.Windows.Forms.Label TimeOfDayLabel; + private System.Windows.Forms.Label label19; + private System.Windows.Forms.TrackBar TimeOfDayTrackBar; + private System.Windows.Forms.CheckBox ControlLightDirCheckBox; + private System.Windows.Forms.CheckBox ShowCollisionMeshesCheckBox; + private System.Windows.Forms.CheckBox GridCheckBox; + private System.Windows.Forms.ComboBox GridCountComboBox; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.ComboBox GridSizeComboBox; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.CheckBox StatusBarCheckBox; + private System.Windows.Forms.CheckBox ErrorConsoleCheckBox; + private System.Windows.Forms.CheckBox HDRRenderingCheckBox; + private System.Windows.Forms.CheckBox SkydomeCheckBox; + private System.Windows.Forms.CheckBox ShadowsCheckBox; + private System.Windows.Forms.CheckBox WireframeCheckBox; + private System.Windows.Forms.ComboBox RenderModeComboBox; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.ComboBox TextureSamplerComboBox; + private System.Windows.Forms.ComboBox TextureCoordsComboBox; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.CheckBox AnisotropicFilteringCheckBox; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.Button ToolsPanelHideButton; + private System.Windows.Forms.Panel ToolsDragPanel; + private WinForms.TreeViewFix ModelsTreeView; + private System.Windows.Forms.Button ToolsPanelShowButton; + private System.Windows.Forms.Panel ConsolePanel; + private WinForms.TextBoxFix ConsoleTextBox; } } \ No newline at end of file diff --git a/Vehicles/VehicleForm.cs b/Vehicles/VehicleForm.cs index bd49827..0dcd051 100644 --- a/Vehicles/VehicleForm.cs +++ b/Vehicles/VehicleForm.cs @@ -4,6 +4,7 @@ using CodeWalker.Rendering; using CodeWalker.World; using SharpDX; using SharpDX.Direct3D11; +using SharpDX.XInput; using System; using System.Collections.Generic; using System.ComponentModel; @@ -15,6 +16,7 @@ using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; +using Color = SharpDX.Color; namespace CodeWalker.Vehicles { @@ -57,6 +59,23 @@ namespace CodeWalker.Vehicles + bool toolsPanelResizing = false; + int toolsPanelResizeStartX = 0; + int toolsPanelResizeStartLeft = 0; + int toolsPanelResizeStartRight = 0; + + Dictionary DrawableDrawFlags = new Dictionary(); + + bool enableGrid = false; + float gridSize = 1.0f; + int gridCount = 40; + List gridVerts = new List(); + object gridSyncRoot = new object(); + + + + + public VehicleForm() { @@ -109,7 +128,7 @@ namespace CodeWalker.Vehicles camera.CurrentRotation.X = 0.5f * (float)Math.PI; - //LoadSettings(); + LoadSettings(); formopen = true; @@ -141,7 +160,7 @@ namespace CodeWalker.Vehicles if (!Monitor.TryEnter(Renderer.RenderSyncRoot, 50)) { return; } //couldn't get a lock, try again next time - //UpdateControlInputs(elapsed); + UpdateControlInputs(elapsed); //space.Update(elapsed); @@ -178,7 +197,7 @@ namespace CodeWalker.Vehicles //RenderSelection(); - //RenderGrid(context); + RenderGrid(context); Renderer.RenderQueued(); @@ -229,6 +248,21 @@ namespace CodeWalker.Vehicles } + + MetaName[] texsamplers = RenderableGeometry.GetTextureSamplerList(); + foreach (var texsampler in texsamplers) + { + TextureSamplerComboBox.Items.Add(texsampler); + } + //TextureSamplerComboBox.SelectedIndex = 0;//LoadSettings will do this.. + + + UpdateGridVerts(); + GridSizeComboBox.SelectedIndex = 1; + GridCountComboBox.SelectedIndex = 1; + + + Input.Init(); @@ -305,6 +339,25 @@ namespace CodeWalker.Vehicles + private void LoadSettings() + { + var s = Settings.Default; + //WindowState = s.WindowMaximized ? FormWindowState.Maximized : WindowState; + //FullScreenCheckBox.Checked = s.FullScreen; + WireframeCheckBox.Checked = s.Wireframe; + HDRRenderingCheckBox.Checked = s.HDR; + ShadowsCheckBox.Checked = s.Shadows; + SkydomeCheckBox.Checked = s.Skydome; + RenderModeComboBox.SelectedIndex = Math.Max(RenderModeComboBox.FindString(s.RenderMode), 0); + TextureSamplerComboBox.SelectedIndex = Math.Max(TextureSamplerComboBox.FindString(s.RenderTextureSampler), 0); + TextureCoordsComboBox.SelectedIndex = Math.Max(TextureCoordsComboBox.FindString(s.RenderTextureSamplerCoord), 0); + AnisotropicFilteringCheckBox.Checked = s.AnisotropicFiltering; + //ErrorConsoleCheckBox.Checked = s.ShowErrorConsole; + //StatusBarCheckBox.Checked = s.ShowStatusBar; + } + + + private void LoadWorld() { UpdateStatus("Loading timecycles..."); @@ -355,7 +408,7 @@ namespace CodeWalker.Vehicles else { //TODO: error logging.. - //ConsoleTextBox.AppendText(text + "\r\n"); + ConsoleTextBox.AppendText(text + "\r\n"); //StatusLabel.Text = text; //MessageBox.Show(text); } @@ -378,6 +431,364 @@ namespace CodeWalker.Vehicles camera.MouseRotate(dx, dy); } + private void MoveCameraToView(Vector3 pos, float rad) + { + //move the camera to a default place where the given sphere is fully visible. + + rad = Math.Max(0.5f, rad); + + camera.FollowEntity.Position = pos; + camera.TargetDistance = rad * 1.6f; + camera.CurrentDistance = rad * 1.6f; + + } + + + private void AddDrawableTreeNode(DrawableBase drawable, uint hash, bool check) + { + MetaHash mhash = new MetaHash(hash); + + var dnode = ModelsTreeView.Nodes.Add(mhash.ToString()); + dnode.Tag = drawable; + dnode.Checked = check; + + AddDrawableModelsTreeNodes(drawable.DrawableModelsHigh, "High Detail", true, dnode); + AddDrawableModelsTreeNodes(drawable.DrawableModelsMedium, "Medium Detail", false, dnode); + AddDrawableModelsTreeNodes(drawable.DrawableModelsLow, "Low Detail", false, dnode); + AddDrawableModelsTreeNodes(drawable.DrawableModelsVeryLow, "Very Low Detail", false, dnode); + //AddSelectionDrawableModelsTreeNodes(item.Drawable.DrawableModelsX, "X Detail", false, dnode); + + } + private void AddDrawableModelsTreeNodes(ResourcePointerList64 models, string prefix, bool check, TreeNode parentDrawableNode = null) + { + if (models == null) return; + if (models.data_items == null) return; + + for (int mi = 0; mi < models.data_items.Length; mi++) + { + var tnc = (parentDrawableNode != null) ? parentDrawableNode.Nodes : ModelsTreeView.Nodes; + + var model = models.data_items[mi]; + string mprefix = prefix + " " + (mi + 1).ToString(); + var mnode = tnc.Add(mprefix + " " + model.ToString()); + mnode.Tag = model; + mnode.Checked = check; + + var tmnode = TexturesTreeView.Nodes.Add(mprefix + " " + model.ToString()); + tmnode.Tag = model; + + if (!check) + { + Renderer.SelectionModelDrawFlags[model] = false; + } + + if ((model.Geometries == null) || (model.Geometries.data_items == null)) continue; + + foreach (var geom in model.Geometries.data_items) + { + var gname = geom.ToString(); + var gnode = mnode.Nodes.Add(gname); + gnode.Tag = geom; + gnode.Checked = true;// check; + + var tgnode = tmnode.Nodes.Add(gname); + tgnode.Tag = geom; + + if ((geom.Shader != null) && (geom.Shader.ParametersList != null) && (geom.Shader.ParametersList.Hashes != null)) + { + var pl = geom.Shader.ParametersList; + var h = pl.Hashes; + var p = pl.Parameters; + for (int ip = 0; ip < h.Length; ip++) + { + var hash = pl.Hashes[ip]; + var parm = pl.Parameters[ip]; + var tex = parm.Data as TextureBase; + if (tex != null) + { + var t = tex as Texture; + var tstr = tex.Name.Trim(); + if (t != null) + { + tstr = string.Format("{0} ({1}x{2}, embedded)", tex.Name, t.Width, t.Height); + } + var tnode = tgnode.Nodes.Add(hash.ToString().Trim() + ": " + tstr); + tnode.Tag = tex; + } + } + tgnode.Expand(); + } + + } + + mnode.Expand(); + tmnode.Expand(); + } + } + private void UpdateSelectionDrawFlags(TreeNode node) + { + //update the selection draw flags depending on tag and checked/unchecked + var drwbl = node.Tag as DrawableBase; + var model = node.Tag as DrawableModel; + var geom = node.Tag as DrawableGeometry; + bool rem = node.Checked; + lock (Renderer.RenderSyncRoot) + { + if (drwbl != null) + { + if (rem) + { + if (DrawableDrawFlags.ContainsKey(drwbl)) + { + DrawableDrawFlags.Remove(drwbl); + } + } + else + { + DrawableDrawFlags[drwbl] = false; + } + } + if (model != null) + { + if (rem) + { + if (Renderer.SelectionModelDrawFlags.ContainsKey(model)) + { + Renderer.SelectionModelDrawFlags.Remove(model); + } + } + else + { + Renderer.SelectionModelDrawFlags[model] = false; + } + } + if (geom != null) + { + if (rem) + { + if (Renderer.SelectionGeometryDrawFlags.ContainsKey(geom)) + { + Renderer.SelectionGeometryDrawFlags.Remove(geom); + } + } + else + { + Renderer.SelectionGeometryDrawFlags[geom] = false; + } + } + //updateArchetypeStatus = true; + } + } + + private void UpdateModelsUI(DrawableBase drawable) + { + DetailsPropertyGrid.SelectedObject = drawable; + + DrawableDrawFlags.Clear(); + Renderer.SelectionModelDrawFlags.Clear(); + Renderer.SelectionGeometryDrawFlags.Clear(); + ModelsTreeView.Nodes.Clear(); + ModelsTreeView.ShowRootLines = false; + TexturesTreeView.Nodes.Clear(); + if (drawable != null) + { + AddDrawableModelsTreeNodes(drawable.DrawableModelsHigh, "High Detail", true); + AddDrawableModelsTreeNodes(drawable.DrawableModelsMedium, "Medium Detail", false); + AddDrawableModelsTreeNodes(drawable.DrawableModelsLow, "Low Detail", false); + AddDrawableModelsTreeNodes(drawable.DrawableModelsVeryLow, "Very Low Detail", false); + //AddSelectionDrawableModelsTreeNodes(item.Drawable.DrawableModelsX, "X Detail", false); + } + } + + public void LoadModel(YftFile yft) + { + if (yft == null) return; + + //FileName = yft.Name; + //Yft = yft; + + var dr = yft.Fragment?.Drawable; + if (dr != null) + { + MoveCameraToView(dr.BoundingCenter, dr.BoundingSphereRadius); + } + + UpdateModelsUI(yft.Fragment.Drawable); + } + + + + private void UpdateTimeOfDayLabel() + { + int v = TimeOfDayTrackBar.Value; + float fh = v / 60.0f; + int ih = (int)fh; + int im = v - (ih * 60); + if (ih == 24) ih = 0; + TimeOfDayLabel.Text = string.Format("{0:00}:{1:00}", ih, im); + } + + + private void UpdateControlInputs(float elapsed) + { + if (elapsed > 0.1f) elapsed = 0.1f; + + var s = Settings.Default; + + float moveSpeed = 2.0f; + + + Input.Update(elapsed); + + if (Input.xbenable) + { + //if (ControllerButtonJustPressed(GamepadButtonFlags.Start)) + //{ + // SetControlMode(ControlMode == WorldControlMode.Free ? WorldControlMode.Ped : WorldControlMode.Free); + //} + } + + + + if (Input.ShiftPressed) + { + moveSpeed *= 5.0f; + } + if (Input.CtrlPressed) + { + moveSpeed *= 0.2f; + } + + Vector3 movevec = Input.KeyboardMoveVec(false); + + + //if (MapViewEnabled == true) + //{ + // movevec *= elapsed * 100.0f * Math.Min(camera.OrthographicTargetSize * 0.01f, 30.0f); + // float mapviewscale = 1.0f / camera.Height; + // float fdx = MapViewDragX * mapviewscale; + // float fdy = MapViewDragY * mapviewscale; + // movevec.X -= fdx * camera.OrthographicSize; + // movevec.Y += fdy * camera.OrthographicSize; + //} + //else + { + //normal movement + movevec *= elapsed * moveSpeed * Math.Min(camera.TargetDistance, 50.0f); + } + + + Vector3 movewvec = camera.ViewInvQuaternion.Multiply(movevec); + camEntity.Position += movewvec; + + //MapViewDragX = 0; + //MapViewDragY = 0; + + + + + if (Input.xbenable) + { + camera.ControllerRotate(Input.xblx + Input.xbrx, Input.xbly + Input.xbry); + + float zoom = 0.0f; + float zoomspd = s.XInputZoomSpeed; + float zoomamt = zoomspd * elapsed; + if (Input.ControllerButtonPressed(GamepadButtonFlags.DPadUp)) zoom += zoomamt; + if (Input.ControllerButtonPressed(GamepadButtonFlags.DPadDown)) zoom -= zoomamt; + + camera.ControllerZoom(zoom); + + float acc = 0.0f; + float accspd = s.XInputMoveSpeed;//actually accel speed... + acc += Input.xbrt * accspd; + acc -= Input.xblt * accspd; + + Vector3 newdir = camera.ViewDirection; //maybe use the "vehicle" direction...? + Input.xbcontrolvelocity += (acc * elapsed); + + if (Input.ControllerButtonPressed(GamepadButtonFlags.A | GamepadButtonFlags.RightShoulder)) //handbrake... + { + Input.xbcontrolvelocity *= Math.Max(0.75f - elapsed, 0);//not ideal for low fps... + //xbcontrolvelocity = 0.0f; + if (Math.Abs(Input.xbcontrolvelocity) < 0.001f) Input.xbcontrolvelocity = 0.0f; + } + + camEntity.Velocity = newdir * Input.xbcontrolvelocity; + camEntity.Position += camEntity.Velocity * elapsed; + + + //fire! + //if (ControllerButtonJustPressed(GamepadButtonFlags.LeftShoulder)) + //{ + // SpawnTestEntity(true); + //} + + } + + + + } + + + + private void UpdateGridVerts() + { + lock (gridSyncRoot) + { + gridVerts.Clear(); + + float s = gridSize * gridCount * 0.5f; + uint cblack = (uint)Color.Black.ToRgba(); + uint cgray = (uint)Color.DimGray.ToRgba(); + uint cred = (uint)Color.DarkRed.ToRgba(); + uint cgrn = (uint)Color.DarkGreen.ToRgba(); + int interval = 10; + + for (int i = 0; i <= gridCount; i++) + { + float o = (gridSize * i) - s; + if ((i % interval) != 0) + { + gridVerts.Add(new VertexTypePC() { Position = new Vector3(o, -s, 0), Colour = cgray }); + gridVerts.Add(new VertexTypePC() { Position = new Vector3(o, s, 0), Colour = cgray }); + gridVerts.Add(new VertexTypePC() { Position = new Vector3(-s, o, 0), Colour = cgray }); + gridVerts.Add(new VertexTypePC() { Position = new Vector3(s, o, 0), Colour = cgray }); + } + } + for (int i = 0; i <= gridCount; i++) //draw main lines last, so they are on top + { + float o = (gridSize * i) - s; + if ((i % interval) == 0) + { + var cx = (o == 0) ? cred : cblack; + var cy = (o == 0) ? cgrn : cblack; + gridVerts.Add(new VertexTypePC() { Position = new Vector3(o, -s, 0), Colour = cy }); + gridVerts.Add(new VertexTypePC() { Position = new Vector3(o, s, 0), Colour = cy }); + gridVerts.Add(new VertexTypePC() { Position = new Vector3(-s, o, 0), Colour = cx }); + gridVerts.Add(new VertexTypePC() { Position = new Vector3(s, o, 0), Colour = cx }); + } + } + + } + } + + private void RenderGrid(DeviceContext context) + { + if (!enableGrid) return; + + lock (gridSyncRoot) + { + if (gridVerts.Count > 0) + { + Renderer.RenderLines(gridVerts); + } + } + } + + + + @@ -394,10 +805,10 @@ namespace CodeWalker.Vehicles case MouseButtons.Right: MouseRButtonDown = true; break; } - //if (!ToolsPanelShowButton.Focused) - //{ - // ToolsPanelShowButton.Focus(); //make sure no textboxes etc are focused! - //} + if (!ToolsPanelShowButton.Focused) + { + ToolsPanelShowButton.Focus(); //make sure no textboxes etc are focused! + } MouseDownPoint = e.Location; MouseLastPoint = MouseDownPoint; @@ -462,9 +873,9 @@ namespace CodeWalker.Vehicles timecycle.SetTime(tod); Renderer.timeofday = tod; - //float fv = tod * 60.0f; - //TimeOfDayTrackBar.Value = (int)fv; - //UpdateTimeOfDayLabel(); + float fv = tod * 60.0f; + TimeOfDayTrackBar.Value = (int)fv; + UpdateTimeOfDayLabel(); } } @@ -598,12 +1009,271 @@ namespace CodeWalker.Vehicles if (Renderer.timerunning) { - //float fv = Renderer.timeofday * 60.0f; - ////TimeOfDayTrackBar.Value = (int)fv; - //UpdateTimeOfDayLabel(); + float fv = Renderer.timeofday * 60.0f; + //TimeOfDayTrackBar.Value = (int)fv; + UpdateTimeOfDayLabel(); } //CameraPositionTextBox.Text = FloatUtil.GetVector3String(camera.Position, "0.##"); } + + private void ToolsPanelShowButton_Click(object sender, EventArgs e) + { + ToolsPanel.Visible = true; + } + + private void ToolsPanelHideButton_Click(object sender, EventArgs e) + { + ToolsPanel.Visible = false; + } + + private void ToolsDragPanel_MouseDown(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + toolsPanelResizing = true; + toolsPanelResizeStartX = e.X + ToolsPanel.Left + ToolsDragPanel.Left; + toolsPanelResizeStartLeft = ToolsPanel.Left; + toolsPanelResizeStartRight = ToolsPanel.Right; + } + } + + private void ToolsDragPanel_MouseUp(object sender, MouseEventArgs e) + { + toolsPanelResizing = false; + } + + private void ToolsDragPanel_MouseMove(object sender, MouseEventArgs e) + { + if (toolsPanelResizing) + { + int rx = e.X + ToolsPanel.Left + ToolsDragPanel.Left; + int dx = rx - toolsPanelResizeStartX; + ToolsPanel.Width = toolsPanelResizeStartRight - toolsPanelResizeStartLeft + dx; + } + } + + private void ModelsTreeView_AfterCheck(object sender, TreeViewEventArgs e) + { + if (e.Node != null) + { + UpdateSelectionDrawFlags(e.Node); + } + } + + private void ModelsTreeView_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) + { + if (e.Node != null) + { + e.Node.Checked = !e.Node.Checked; + //UpdateSelectionDrawFlags(e.Node); + } + } + + private void ModelsTreeView_KeyPress(object sender, KeyPressEventArgs e) + { + e.Handled = true; //stops annoying ding sound... + } + + private void HDRRenderingCheckBox_CheckedChanged(object sender, EventArgs e) + { + lock (Renderer.RenderSyncRoot) + { + Renderer.shaders.hdr = HDRRenderingCheckBox.Checked; + } + } + + private void ShadowsCheckBox_CheckedChanged(object sender, EventArgs e) + { + lock (Renderer.RenderSyncRoot) + { + Renderer.shaders.shadows = ShadowsCheckBox.Checked; + } + } + + private void SkydomeCheckBox_CheckedChanged(object sender, EventArgs e) + { + Renderer.renderskydome = SkydomeCheckBox.Checked; + //Renderer.controllightdir = !Renderer.renderskydome; + } + + private void ControlLightDirCheckBox_CheckedChanged(object sender, EventArgs e) + { + Renderer.controllightdir = ControlLightDirCheckBox.Checked; + } + + private void TimeOfDayTrackBar_Scroll(object sender, EventArgs e) + { + int v = TimeOfDayTrackBar.Value; + float fh = v / 60.0f; + UpdateTimeOfDayLabel(); + lock (Renderer.RenderSyncRoot) + { + Renderer.timeofday = fh; + timecycle.SetTime(Renderer.timeofday); + } + } + + private void ShowCollisionMeshesCheckBox_CheckedChanged(object sender, EventArgs e) + { + Renderer.rendercollisionmeshes = ShowCollisionMeshesCheckBox.Checked; + Renderer.rendercollisionmeshlayerdrawable = ShowCollisionMeshesCheckBox.Checked; + } + + private void WireframeCheckBox_CheckedChanged(object sender, EventArgs e) + { + Renderer.shaders.wireframe = WireframeCheckBox.Checked; + } + + private void AnisotropicFilteringCheckBox_CheckedChanged(object sender, EventArgs e) + { + Renderer.shaders.AnisotropicFiltering = AnisotropicFilteringCheckBox.Checked; + } + + private void HDTexturesCheckBox_CheckedChanged(object sender, EventArgs e) + { + Renderer.renderhdtextures = HDTexturesCheckBox.Checked; + } + + private void RenderModeComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + TextureSamplerComboBox.Enabled = false; + TextureCoordsComboBox.Enabled = false; + switch (RenderModeComboBox.Text) + { + default: + case "Default": + Renderer.shaders.RenderMode = WorldRenderMode.Default; + break; + case "Single texture": + Renderer.shaders.RenderMode = WorldRenderMode.SingleTexture; + TextureSamplerComboBox.Enabled = true; + TextureCoordsComboBox.Enabled = true; + break; + case "Vertex normals": + Renderer.shaders.RenderMode = WorldRenderMode.VertexNormals; + break; + case "Vertex tangents": + Renderer.shaders.RenderMode = WorldRenderMode.VertexTangents; + break; + case "Vertex colour 1": + Renderer.shaders.RenderMode = WorldRenderMode.VertexColour; + Renderer.shaders.RenderVertexColourIndex = 1; + break; + case "Vertex colour 2": + Renderer.shaders.RenderMode = WorldRenderMode.VertexColour; + Renderer.shaders.RenderVertexColourIndex = 2; + break; + case "Vertex colour 3": + Renderer.shaders.RenderMode = WorldRenderMode.VertexColour; + Renderer.shaders.RenderVertexColourIndex = 3; + break; + case "Texture coord 1": + Renderer.shaders.RenderMode = WorldRenderMode.TextureCoord; + Renderer.shaders.RenderTextureCoordIndex = 1; + break; + case "Texture coord 2": + Renderer.shaders.RenderMode = WorldRenderMode.TextureCoord; + Renderer.shaders.RenderTextureCoordIndex = 2; + break; + case "Texture coord 3": + Renderer.shaders.RenderMode = WorldRenderMode.TextureCoord; + Renderer.shaders.RenderTextureCoordIndex = 3; + break; + } + } + + private void TextureSamplerComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + if (TextureSamplerComboBox.SelectedItem is MetaName) + { + Renderer.shaders.RenderTextureSampler = (MetaName)TextureSamplerComboBox.SelectedItem; + } + } + + private void TextureCoordsComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + switch (TextureCoordsComboBox.Text) + { + default: + case "Texture coord 1": + Renderer.shaders.RenderTextureSamplerCoord = 1; + break; + case "Texture coord 2": + Renderer.shaders.RenderTextureSamplerCoord = 2; + break; + case "Texture coord 3": + Renderer.shaders.RenderTextureSamplerCoord = 3; + break; + } + } + + private void GridCheckBox_CheckedChanged(object sender, EventArgs e) + { + enableGrid = GridCheckBox.Checked; + } + + private void GridSizeComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + float newgs; + float.TryParse(GridSizeComboBox.Text, out newgs); + if (newgs != gridSize) + { + gridSize = newgs; + UpdateGridVerts(); + } + } + + private void GridCountComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + int newgc; + int.TryParse(GridCountComboBox.Text, out newgc); + if (newgc != gridCount) + { + gridCount = newgc; + UpdateGridVerts(); + } + } + + private void SkeletonsCheckBox_CheckedChanged(object sender, EventArgs e) + { + Renderer.renderskeletons = SkeletonsCheckBox.Checked; + } + + private void ErrorConsoleCheckBox_CheckedChanged(object sender, EventArgs e) + { + ConsolePanel.Visible = ErrorConsoleCheckBox.Checked; + } + + private void StatusBarCheckBox_CheckedChanged(object sender, EventArgs e) + { + StatusStrip.Visible = StatusBarCheckBox.Checked; + } + + private void TextureViewerButton_Click(object sender, EventArgs e) + { + //TextureDictionary td = null; + + //if ((Ydr != null) && (Ydr.Loaded)) + //{ + // td = Ydr.Drawable?.ShaderGroup?.TextureDictionary; + //} + //else if ((Yft != null) && (Yft.Loaded)) + //{ + // td = Yft.Fragment?.Drawable?.ShaderGroup?.TextureDictionary; + //} + + //if (td != null) + //{ + // YtdForm f = new YtdForm(); + // f.Show(); + // f.LoadTexDict(td, fileName); + // //f.LoadYtd(ytd); + //} + //else + //{ + // MessageBox.Show("Couldn't find embedded texture dict."); + //} + } } } From 04b7370ba05fa0cebb17905bb7979684edf01389 Mon Sep 17 00:00:00 2001 From: dexy Date: Sat, 12 Jan 2019 15:40:50 +1100 Subject: [PATCH 082/158] Added MetaNames from dav90 --- .../GameFiles/FileTypes/CarColsFile.cs | 370 +++++++++--------- .../GameFiles/MetaTypes/MetaNames.cs | 181 +++++++++ .../GameFiles/MetaTypes/PsoTypes.cs | 360 ++++++++--------- 3 files changed, 546 insertions(+), 365 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/CarColsFile.cs b/CodeWalker.Core/GameFiles/FileTypes/CarColsFile.cs index 70e2961..7625e29 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/CarColsFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/CarColsFile.cs @@ -670,7 +670,7 @@ namespace CodeWalker.GameFiles { public MetaHash kitName { get; set; } public ushort id { get; set; } - public CVehicleKit_3865430600 kitType { get; set; } + public eModKitType kitType { get; set; } public CVehicleModVisible[] visibleMods { get; set; } public CVehicleModLink[] linkMods { get; set; } public CVehicleModStat[] statMods { get; set; } @@ -682,7 +682,7 @@ namespace CodeWalker.GameFiles { kitName = XmlMeta.GetHash(Xml.GetChildInnerText(node, "kitName")); id = (ushort)Xml.GetChildUIntAttribute(node, "id", "value"); - kitType = Xml.GetChildEnumInnerText(node, "kitType"); + kitType = Xml.GetChildEnumInnerText(node, "kitType"); XmlNode cnode; cnode = node.SelectSingleNode("visibleMods"); if (cnode != null) @@ -776,21 +776,21 @@ namespace CodeWalker.GameFiles public string modShopLabel { get; set; } public MetaHash[] linkedModels { get; set; } public CVehicleMod_3635907608[] turnOffBones { get; set; } - public CVehicleMod_2363989491 type { get; set; } + public eVehicleModType type { get; set; } public CVehicleMod_3635907608 bone { get; set; } public CVehicleMod_3635907608 collisionBone { get; set; } - public CVehicleMod_3413962745 cameraPos { get; set; } + public eVehicleModCameraPos cameraPos { get; set; } public float audioApply { get; set; } public byte weight { get; set; } public bool turnOffExtra { get; set; } public bool disableBonnetCamera { get; set; } public bool allowBonnetSlide { get; set; } public sbyte weaponSlot { get; set; } - public sbyte Unk_2656206330 { get; set; } + public sbyte weaponSlotSecondary { get; set; } public bool disableProjectileDriveby { get; set; } public bool disableDriveby { get; set; } - public int Unk_161724223 { get; set; } - public int Unk_484538291 { get; set; } + public int disableDrivebySeat { get; set; } + public int disableDrivebySeatSecondary { get; set; } public CVehicleModVisible(XmlNode node) { @@ -823,21 +823,21 @@ namespace CodeWalker.GameFiles } } } - type = Xml.GetChildEnumInnerText(node, "type"); + type = Xml.GetChildEnumInnerText(node, "type"); bone = Xml.GetChildEnumInnerText(node, "bone"); collisionBone = Xml.GetChildEnumInnerText(node, "collisionBone"); - cameraPos = Xml.GetChildEnumInnerText(node, "cameraPos"); + cameraPos = Xml.GetChildEnumInnerText(node, "cameraPos"); audioApply = Xml.GetChildFloatAttribute(node, "audioApply", "value"); weight = (byte)Xml.GetChildIntAttribute(node, "weight", "value"); turnOffExtra = Xml.GetChildBoolAttribute(node, "turnOffExtra", "value"); disableBonnetCamera = Xml.GetChildBoolAttribute(node, "disableBonnetCamera", "value"); allowBonnetSlide = Xml.GetChildBoolAttribute(node, "allowBonnetSlide", "value"); weaponSlot = (sbyte)Xml.GetChildIntAttribute(node, "weaponSlot", "value"); - Unk_2656206330 = (sbyte)Xml.GetChildIntAttribute(node, "hash_9E527DFA", "value");//TODO: fix + weaponSlotSecondary = (sbyte)Xml.GetChildIntAttribute(node, "weaponSlotSecondary", "value"); disableProjectileDriveby = Xml.GetChildBoolAttribute(node, "disableProjectileDriveby", "value"); disableDriveby = Xml.GetChildBoolAttribute(node, "disableDriveby", "value"); - Unk_161724223 = Xml.GetChildIntAttribute(node, "hash_09A3B73F", "value");//TODO: fix - Unk_484538291 = Xml.GetChildIntAttribute(node, "hash_1CE177B3", "value");//TODO: fix + disableDrivebySeat = Xml.GetChildIntAttribute(node, "disableDrivebySeat", "value"); + disableDrivebySeatSecondary = Xml.GetChildIntAttribute(node, "disableDrivebySeatSecondary", "value"); } public override string ToString() @@ -869,7 +869,7 @@ namespace CodeWalker.GameFiles public uint modifier { get; set; } public float audioApply { get; set; } public byte weight { get; set; } - public CVehicleMod_2363989491 type { get; set; } + public eVehicleModType type { get; set; } public CVehicleModStat(XmlNode node) { @@ -877,7 +877,7 @@ namespace CodeWalker.GameFiles modifier = Xml.GetChildUIntAttribute(node, "modifier", "value"); audioApply = Xml.GetChildFloatAttribute(node, "audioApply", "value"); weight = (byte)Xml.GetChildIntAttribute(node, "weight", "value"); - type = Xml.GetChildEnumInnerText(node, "type"); + type = Xml.GetChildEnumInnerText(node, "type"); } public override string ToString() { @@ -886,12 +886,12 @@ namespace CodeWalker.GameFiles } [TC(typeof(EXP))] public class CVehicleKit_427606548 { - public CVehicleMod_2363989491 slot { get; set; } + public eVehicleModType slot { get; set; } public string name { get; set; } public CVehicleKit_427606548(XmlNode node) { - slot = Xml.GetChildEnumInnerText(node, "slot"); + slot = Xml.GetChildEnumInnerText(node, "slot"); name = Xml.GetChildInnerText(node, "name"); } public override string ToString() @@ -955,42 +955,42 @@ namespace CodeWalker.GameFiles public enum CVehicleModelColor_360458334 //vehicle mod color metallic id { none = -1, - Unk_815563434 = 0, - Unk_969376721 = 1, - Unk_731244402 = 2, - Unk_3537679873 = 3, - Unk_3183119293 = 4, - Unk_4039766491 = 5, - Unk_3777516184 = 6, - Unk_229878718 = 7, - Unk_4285337393 = 8, - Unk_847803751 = 9 + EVehicleModelColorMetallic_normal = 0, + EVehicleModelColorMetallic_1 = 1, + EVehicleModelColorMetallic_2 = 2, + EVehicleModelColorMetallic_3 = 3, + EVehicleModelColorMetallic_4 = 4, + EVehicleModelColorMetallic_5 = 5, + EVehicleModelColorMetallic_6 = 6, + EVehicleModelColorMetallic_7 = 7, + EVehicleModelColorMetallic_8 = 8, + EVehicleModelColorMetallic_9 = 9 } public enum CVehicleModelColor_544262540 //vehicle mod color audio color { - Unk_52583446 = 0, - Unk_2253400966 = 1, - Unk_4012089111 = 2, - Unk_2477037232 = 3, - Unk_437487559 = 4, - Unk_730308174 = 5, - Unk_3129410619 = 6, - Unk_1762671403 = 7, - Unk_2615326998 = 8, - Unk_4157715503 = 9, - Unk_2969646890 = 10, - Unk_1645071976 = 11, - Unk_1358390657 = 12 + POLICE_SCANNER_COLOUR_black = 0, + POLICE_SCANNER_COLOUR_blue = 1, + POLICE_SCANNER_COLOUR_brown = 2, + POLICE_SCANNER_COLOUR_beige = 3, + POLICE_SCANNER_COLOUR_graphite = 4, + POLICE_SCANNER_COLOUR_green = 5, + POLICE_SCANNER_COLOUR_grey = 6, + POLICE_SCANNER_COLOUR_orange = 7, + POLICE_SCANNER_COLOUR_pink = 8, + POLICE_SCANNER_COLOUR_red = 9, + POLICE_SCANNER_COLOUR_silver = 10, + POLICE_SCANNER_COLOUR_white = 11, + POLICE_SCANNER_COLOUR_yellow = 12 } public enum CVehicleModelColor_2065815796 //vehicle mod color audio prefix { none = 0, - Unk_2318284788 = 1, - Unk_840729009 = 2, - Unk_3921902053 = 3 + POLICE_SCANNER_PREFIX_bright = 1, + POLICE_SCANNER_PREFIX_light = 2, + POLICE_SCANNER_PREFIX_dark = 3 } - public enum CVehicleKit_3865430600 //vehicle mod kit type + public enum eModKitType //vehicle mod kit type { MKT_STANDARD = 0, MKT_SPORT = 1, @@ -1001,7 +1001,7 @@ namespace CodeWalker.GameFiles { none = -1, chassis = 0, - Unk_1970334199 = 48, + bodyshell = 48, bumper_f = 49, bumper_r = 50, wing_rf = 51, @@ -1012,58 +1012,58 @@ namespace CodeWalker.GameFiles exhaust_2 = 57, exhaust_3 = 58, exhaust_4 = 59, - Unk_1666652977 = 60, - Unk_1972682668 = 61, - Unk_3204862618 = 62, - Unk_3503093287 = 63, - Unk_442599751 = 64, - Unk_2600343066 = 65, - Unk_3598945568 = 66, - Unk_3896619164 = 67, - Unk_2989016171 = 68, - Unk_3320572913 = 69, - Unk_529211190 = 70, - Unk_823345734 = 71, + exhaust_5 = 60, + exhaust_6 = 61, + exhaust_7 = 62, + exhaust_8 = 63, + exhaust_9 = 64, + exhaust_10 = 65, + exhaust_11 = 66, + exhaust_12 = 67, + exhaust_13 = 68, + exhaust_14 = 69, + exhaust_15 = 70, + exhaust_16 = 71, extra_1 = 401, extra_2 = 402, extra_3 = 403, extra_4 = 404, extra_5 = 405, - Unk_3145755371 = 406, - Unk_2360446286 = 407, - Unk_2661527858 = 408, - Unk_1913477126 = 409, - Unk_2125833567 = 410, - Unk_2431830489 = 411, - Unk_2720558148 = 412, - Unk_903844796 = 413, - Unk_1202337617 = 414, - Unk_2190258525 = 417, - Unk_1950749904 = 418, - Unk_1709504522 = 419, - Unk_1480285367 = 420, - Unk_1213709552 = 421, - Unk_848662892 = 422, - Unk_3990325233 = 423, - Unk_367056899 = 424, - Unk_3413787451 = 425, - Unk_2734584581 = 426, + extra_6 = 406, + extra_7 = 407, + extra_8 = 408, + extra_9 = 409, + extra_10 = 410, + extra_11 = 411, + extra_12 = 412, + extra_13 = 413, + extra_14 = 414, + break_extra_1 = 417, + break_extra_2 = 418, + break_extra_3 = 419, + break_extra_4 = 420, + break_extra_5 = 421, + break_extra_6 = 422, + break_extra_7 = 423, + break_extra_8 = 424, + break_extra_9 = 425, + break_extra_10 = 426, mod_col_1 = 427, mod_col_2 = 428, mod_col_3 = 429, mod_col_4 = 430, mod_col_5 = 431, - Unk_1547719720 = 432, - Unk_580018373 = 433, - Unk_4191162177 = 434, - Unk_3257212908 = 435, - Unk_3033709986 = 436, - Unk_2249285664 = 437, - Unk_1498318491 = 438, - Unk_1787603223 = 439, - Unk_1573326728 = 440, - Unk_1862676998 = 441, - Unk_1044598917 = 442, + mod_col_6 = 432, + mod_col_7 = 433, + mod_col_8 = 434, + mod_col_9 = 435, + mod_col_10 = 436, + mod_col_11 = 437, + mod_col_12 = 438, + mod_col_13 = 439, + mod_col_14 = 440, + mod_col_15 = 441, + mod_col_16 = 442, misc_a = 369, misc_b = 370, misc_c = 371, @@ -1090,99 +1090,99 @@ namespace CodeWalker.GameFiles misc_x = 392, misc_y = 393, misc_z = 394, - Unk_2690009945 = 395, - Unk_1385115596 = 396, - Unk_2921986035 = 79, + misc_1 = 395, + misc_2 = 396, + handlebars = 79, steeringwheel = 80, - Unk_3929033220 = 29, - Unk_837923007 = 21, - Unk_991413023 = 22, + swingarm = 29, + forks_u = 21, + forks_l = 22, headlight_l = 91, headlight_r = 92, - Unk_3979005071 = 97, + indicator_lr = 97, indicator_lf = 95, - Unk_112742354 = 98, + indicator_rr = 98, indicator_rf = 96, - Unk_3008822349 = 93, - Unk_914195096 = 94, + taillight_l = 93, + taillight_r = 94, window_lf = 42, window_rf = 43, - Unk_2355575415 = 45, - Unk_2639884295 = 44, - Unk_2675373130 = 46, - Unk_3523659197 = 47, + window_rr = 45, + window_lr = 44, + window_lm = 46, + window_rm = 47, hub_lf = 30, hub_rf = 31, windscreen_r = 41, - Unk_4084563217 = 104, - Unk_556062831 = 105, - Unk_3850133799 = 106, - Unk_728001778 = 107, + neon_l = 104, + neon_r = 105, + neon_f = 106, + neon_b = 107, door_dside_f = 3, door_dside_r = 4, door_pside_f = 5, door_pside_r = 6, bobble_head = 361, bobble_base = 362, - Unk_785162942 = 363, + bobble_hand = 363, engineblock = 364, - Unk_3654959273 = 474, - Unk_808381781 = 475, - Unk_4268165574 = 476, - Unk_3579951032 = 477, - Unk_2733953759 = 478, - Unk_4123490435 = 479, - Unk_3342441320 = 480, - Unk_1726175929 = 481, - Unk_1947366679 = 482, - Unk_2065498928 = 483, - Unk_2572238744 = 484, - Unk_730555402 = 485, - Unk_4194074861 = 486, - Unk_1343696161 = 487, - Unk_506677594 = 488, - Unk_4167728581 = 489, - Unk_3326122354 = 490, - Unk_217851628 = 491, - Unk_3666821647 = 492, - Unk_2168885119 = 493, - Unk_2399611648 = 494, - Unk_3519328378 = 495, - Unk_2958716326 = 496, - Unk_3292501248 = 497, - Unk_2651277456 = 498, - Unk_3888995355 = 499, - Unk_3843353624 = 500, - Unk_3135215534 = 501, - Unk_3364434689 = 502, - Unk_2723112578 = 503, - Unk_2970026993 = 504, - Unk_2245832093 = 505, - Unk_2492156666 = 506, - Unk_1765012564 = 507, - Unk_2014155263 = 508, - Unk_1286290243 = 509, - Unk_1535367412 = 510, - Unk_3992710274 = 511, - Unk_1077448950 = 512, - Unk_1382757723 = 513, - Unk_614062521 = 514, - Unk_3783807571 = 524, - Unk_2839830988 = 525, - Unk_3138651499 = 526, - Unk_2400824695 = 527, - Unk_4141162370 = 560, - Unk_451472348 = 561, - Unk_1768767594 = 562, - Unk_3599310922 = 563, - Unk_1496111458 = 564, - Unk_3929521030 = 565, - Unk_1157497495 = 566, - Unk_1032498025 = 567, - Unk_2573434709 = 568, - Unk_930609265 = 569, - Unk_879315983 = 570, - Unk_411536741 = 571, + mod_a = 474, + mod_b = 475, + mod_c = 476, + mod_d = 477, + mod_e = 478, + mod_f = 479, + mod_g = 480, + mod_h = 481, + mod_i = 482, + mod_j = 483, + mod_k = 484, + mod_l = 485, + mod_m = 486, + mod_n = 487, + mod_o = 488, + mod_p = 489, + mod_q = 490, + mod_r = 491, + mod_s = 492, + mod_t = 493, + mod_u = 494, + mod_v = 495, + mod_w = 496, + mod_x = 497, + mod_y = 498, + mod_z = 499, + mod_aa = 500, + mod_ab = 501, + mod_ac = 502, + mod_ad = 503, + mod_ae = 504, + mod_af = 505, + mod_ag = 506, + mod_ah = 507, + mod_ai = 508, + mod_aj = 509, + mod_ak = 510, + turret_a1 = 511, + turret_a2 = 512, + turret_a3 = 513, + turret_a4 = 514, + turret_b1 = 524, + turret_b2 = 525, + turret_b3 = 526, + turret_b4 = 527, + rblade_1mod = 560, + rblade_1fast = 561, + rblade_2mod = 562, + rblade_2fast = 563, + rblade_3mod = 564, + rblade_3fast = 565, + fblade_1mod = 566, + fblade_1fast = 567, + fblade_2mod = 568, + fblade_2fast = 569, + fblade_3mod = 570, + fblade_3fast = 571, Unk_1086719913 = 572, Unk_3237490897 = 573, Unk_3375838140 = 574, @@ -1192,20 +1192,20 @@ namespace CodeWalker.GameFiles Unk_1208798824 = 578, Unk_303656220 = 579, Unk_660207018 = 580, - Unk_2796607005 = 581, + spike_1mod = 581, Unk_3045655218 = 582, Unk_2017296145 = 583, - Unk_3978311755 = 584, + spike_2mod = 584, Unk_1122332083 = 585, Unk_1123212214 = 586, - Unk_4063416457 = 587, + spike_3mod = 587, Unk_4011591561 = 588, Unk_2320654166 = 589, - Unk_2292220415 = 590, - Unk_2166816405 = 591, - Unk_2486991428 = 592 + scoop_1mod = 590, + scoop_2mod = 591, + scoop_3mod = 592 } - public enum CVehicleMod_2363989491 //vehicle mod type + public enum eVehicleModType //vehicle mod type { VMT_SPOILER = 0, VMT_BUMPER_F = 1, @@ -1240,7 +1240,7 @@ namespace CodeWalker.GameFiles VMT_CHASSIS4 = 30, VMT_CHASSIS5 = 31, VMT_DOOR_L = 32, - Unk_514696742 = 33, + VMT_DOOR_R = 33, VMT_LIVERY_MOD = 34, Unk_3409280882 = 35, VMT_ENGINE = 36, @@ -1250,27 +1250,27 @@ namespace CodeWalker.GameFiles VMT_SUSPENSION = 40, VMT_ARMOUR = 41, Unk_3278520444 = 42, - Unk_2334449168 = 43, + VMT_TURBO = 43, Unk_1675686396 = 44, - Unk_3968559424 = 45, - Unk_3919652883 = 46, - Unk_2656522436 = 47, + VMT_TYRE_SMOKE = 45, + VMT_HYDRAULICS = 46, + VMT_XENON_LIGHTS = 47, VMT_WHEELS = 48, VMT_WHEELS_REAR_OR_HYDRAULICS = 49 } - public enum CVehicleMod_3413962745 //vehicle mod camera position + public enum eVehicleModCameraPos //vehicle mod camera position { VMCP_DEFAULT = 0, - Unk_3001706694 = 1, - Unk_1148399176 = 2, - Unk_2057559994 = 3, - Unk_1556139353 = 4, - Unk_1830737308 = 5, - Unk_457854237 = 6, - Unk_1629770278 = 7, - Unk_2879151926 = 8, - Unk_3193071790 = 9, - Unk_2770495034 = 10 + VMCP_FRONT = 1, + VMCP_FRONT_LEFT = 2, + VMCP_FRONT_RIGHT = 3, + VMCP_REAR = 4, + VMCP_REAR_LEFT = 5, + VMCP_REAR_RIGHT = 6, + VMCP_LEFT = 7, + VMCP_RIGHT = 8, + VMCP_TOP = 9, + VMCP_BOTTOM = 10 } diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs index 5d25976..e8e394e 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs @@ -3497,6 +3497,13 @@ namespace CodeWalker.GameFiles JOB_MED = 568575574, JOB_SMALL = 4127034762, + eVehicleModType = 2363989491, + eVehicleModCameraPos = 3413962745, + + + + + //from dav90's PSO_RBF_XMLExport_V5.7 @@ -3663,6 +3670,180 @@ namespace CodeWalker.GameFiles baseCols = 2645876692, specCols = 666439252, + EVehicleModelColorMetallic_1 = 969376721, + EVehicleModelColorMetallic_2 = 731244402, + EVehicleModelColorMetallic_3 = 3537679873, + EVehicleModelColorMetallic_4 = 3183119293, + EVehicleModelColorMetallic_5 = 4039766491, + EVehicleModelColorMetallic_6 = 3777516184, + EVehicleModelColorMetallic_7 = 229878718, + EVehicleModelColorMetallic_8 = 4285337393, + EVehicleModelColorMetallic_9 = 847803751, + EVehicleModelColorMetallic_normal = 815563434, + POLICE_SCANNER_COLOUR_beige = 2477037232, + POLICE_SCANNER_COLOUR_black = 52583446, + POLICE_SCANNER_COLOUR_blue = 2253400966, + POLICE_SCANNER_COLOUR_brown = 4012089111, + POLICE_SCANNER_COLOUR_graphite = 437487559, + POLICE_SCANNER_COLOUR_green = 730308174, + POLICE_SCANNER_COLOUR_grey = 3129410619, + POLICE_SCANNER_COLOUR_orange = 1762671403, + POLICE_SCANNER_COLOUR_pink = 2615326998, + POLICE_SCANNER_COLOUR_red = 4157715503, + POLICE_SCANNER_COLOUR_silver = 2969646890, + POLICE_SCANNER_COLOUR_white = 1645071976, + POLICE_SCANNER_COLOUR_yellow = 1358390657, + POLICE_SCANNER_PREFIX_bright = 2318284788, + POLICE_SCANNER_PREFIX_dark = 3921902053, + POLICE_SCANNER_PREFIX_light = 840729009, + VMCP_BOTTOM = 2770495034, + VMCP_FRONT = 3001706694, + VMCP_FRONT_LEFT = 1148399176, + VMCP_FRONT_RIGHT = 2057559994, + VMCP_LEFT = 1629770278, + VMCP_REAR = 1556139353, + VMCP_REAR_LEFT = 1830737308, + VMCP_REAR_RIGHT = 457854237, + VMCP_RIGHT = 2879151926, + VMCP_TOP = 3193071790, + VMT_DOOR_R = 514696742, + VMT_HYDRAULICS = 3919652883, + VMT_TURBO = 2334449168, + VMT_TYRE_SMOKE = 3968559424, + VMT_XENON_LIGHTS = 2656522436, + bobble_hand = 785162942, + bodyshell = 1970334199, + break_extra_1 = 2190258525, + break_extra_10 = 2734584581, + break_extra_2 = 1950749904, + break_extra_3 = 1709504522, + break_extra_4 = 1480285367, + break_extra_5 = 1213709552, + break_extra_6 = 848662892, + break_extra_7 = 3990325233, + break_extra_8 = 367056899, + break_extra_9 = 3413787451, + //collision_18eafea9_cdm3nr = 418053801, + //collision_37f22dd2_7guqqmk = 938618322, + //collision_b473fe0d_86rknbm = 3027500557, + disableDrivebySeat = 161724223, + disableDrivebySeatSecondary = 484538291, + eModKitType = 3865430600, + exhaust_10 = 2600343066, + exhaust_11 = 3598945568, + exhaust_12 = 3896619164, + exhaust_13 = 2989016171, + exhaust_14 = 3320572913, + exhaust_15 = 529211190, + exhaust_16 = 823345734, + exhaust_5 = 1666652977, + exhaust_6 = 1972682668, + exhaust_7 = 3204862618, + exhaust_8 = 3503093287, + exhaust_9 = 442599751, + extra_10 = 2125833567, + extra_11 = 2431830489, + extra_12 = 2720558148, + extra_13 = 903844796, + extra_14 = 1202337617, + extra_6 = 3145755371, + extra_7 = 2360446286, + extra_8 = 2661527858, + extra_9 = 1913477126, + fblade_1mod = 1157497495, + forks_l = 991413023, + forks_u = 837923007, + handlebars = 2921986035, + indicator_lr = 3979005071, + indicator_rr = 112742354, + misc_1 = 2690009945, + misc_2 = 1385115596, + mod_a = 3654959273, + mod_b = 808381781, + mod_c = 4268165574, + mod_col_10 = 3033709986, + mod_col_11 = 2249285664, + mod_col_12 = 1498318491, + mod_col_13 = 1787603223, + mod_col_6 = 1547719720, + mod_col_7 = 580018373, + mod_col_8 = 4191162177, + mod_col_9 = 3257212908, + mod_d = 3579951032, + mod_e = 2733953759, + mod_f = 4123490435, + mod_g = 3342441320, + mod_h = 1726175929, + mod_i = 1947366679, + mod_j = 2065498928, + mod_k = 2572238744, + mod_l = 730555402, + mod_m = 4194074861, + mod_n = 1343696161, + mod_o = 506677594, + mod_p = 4167728581, + mod_q = 3326122354, + mod_r = 217851628, + mod_s = 3666821647, + mod_t = 2168885119, + mod_u = 2399611648, + mod_v = 3519328378, + mod_w = 2958716326, + mod_x = 3292501248, + mod_y = 2651277456, + mod_z = 3888995355, + neon_b = 728001778, + neon_f = 3850133799, + neon_l = 4084563217, + neon_r = 556062831, + scoop_1mod = 2292220415, + scoop_2mod = 2166816405, + scoop_3mod = 2486991428, + spike_1mod = 2796607005, + spike_2mod = 3978311755, + spike_3mod = 4063416457, + swingarm = 3929033220, + taillight_l = 3008822349, + taillight_r = 914195096, + weaponSlotSecondary = 2656206330, + window_lm = 2675373130, + window_lr = 2639884295, + window_rm = 3523659197, + window_rr = 2355575415, + + fblade_1fast = 1032498025, + fblade_2fast = 930609265, + fblade_2mod = 2573434709, + fblade_3fast = 411536741, + fblade_3mod = 879315983, + mod_aa = 3843353624, + mod_ab = 3135215534, + mod_ac = 3364434689, + mod_ad = 2723112578, + mod_ae = 2970026993, + mod_af = 2245832093, + mod_ag = 2492156666, + mod_ah = 1765012564, + mod_ai = 2014155263, + mod_aj = 1286290243, + mod_ak = 1535367412, + mod_col_14 = 1573326728, + mod_col_15 = 1862676998, + mod_col_16 = 1044598917, + rblade_1fast = 451472348, + rblade_1mod = 4141162370, + rblade_2fast = 3599310922, + rblade_2mod = 1768767594, + rblade_3fast = 3929521030, + rblade_3mod = 1496111458, + turret_a1 = 3992710274, + turret_a2 = 1077448950, + turret_a3 = 1382757723, + turret_a4 = 614062521, + turret_b1 = 3783807571, + turret_b2 = 2839830988, + turret_b3 = 3138651499, + turret_b4 = 2400824695, diff --git a/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs b/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs index 71129fd..bad2d57 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs @@ -538,7 +538,7 @@ namespace CodeWalker.GameFiles return new PsoStructureInfo(MetaName.CVehicleKit, 0, 0, 120, new PsoStructureEntryInfo(MetaName.kitName, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.id, PsoDataType.UShort, 12, 0, 0), - new PsoStructureEntryInfo(MetaName.kitType, PsoDataType.Enum, 16, 0, (MetaName)3865430600), + new PsoStructureEntryInfo(MetaName.kitType, PsoDataType.Enum, 16, 0, MetaName.eModKitType), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CVehicleModVisible), new PsoStructureEntryInfo(MetaName.visibleMods, PsoDataType.Array, 24, 0, (MetaName)3), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CVehicleModLink), @@ -558,7 +558,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.modifier, PsoDataType.UInt, 12, 0, 0), new PsoStructureEntryInfo(MetaName.audioApply, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo(MetaName.weight, PsoDataType.UByte, 20, 0, 0), - new PsoStructureEntryInfo(MetaName.type, PsoDataType.Enum, 24, 0, (MetaName)2363989491) + new PsoStructureEntryInfo(MetaName.type, PsoDataType.Enum, 24, 0, MetaName.eVehicleModType) ); case MetaName.CVehicleModVisible: return new PsoStructureInfo(MetaName.CVehicleModVisible, 0, 0, 96, @@ -568,25 +568,25 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.linkedModels, PsoDataType.Array, 24, 0, (MetaName)2), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3635907608), new PsoStructureEntryInfo(MetaName.turnOffBones, PsoDataType.Array, 40, 0, (MetaName)4), - new PsoStructureEntryInfo(MetaName.type, PsoDataType.Enum, 56, 0, (MetaName)2363989491), + new PsoStructureEntryInfo(MetaName.type, PsoDataType.Enum, 56, 0, MetaName.eVehicleModType), new PsoStructureEntryInfo(MetaName.bone, PsoDataType.Enum, 60, 0, (MetaName)3635907608), new PsoStructureEntryInfo(MetaName.collisionBone, PsoDataType.Enum, 64, 0, (MetaName)3635907608), - new PsoStructureEntryInfo(MetaName.cameraPos, PsoDataType.Enum, 68, 0, (MetaName)3413962745), + new PsoStructureEntryInfo(MetaName.cameraPos, PsoDataType.Enum, 68, 0, MetaName.eVehicleModCameraPos), new PsoStructureEntryInfo(MetaName.audioApply, PsoDataType.Float, 72, 0, 0), new PsoStructureEntryInfo(MetaName.weight, PsoDataType.UByte, 76, 0, 0), new PsoStructureEntryInfo(MetaName.turnOffExtra, PsoDataType.Bool, 77, 0, 0), new PsoStructureEntryInfo(MetaName.disableBonnetCamera, PsoDataType.Bool, 78, 0, 0), new PsoStructureEntryInfo(MetaName.allowBonnetSlide, PsoDataType.Bool, 79, 0, 0), new PsoStructureEntryInfo(MetaName.weaponSlot, PsoDataType.SByte, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)2656206330, PsoDataType.SByte, 81, 0, 0), + new PsoStructureEntryInfo(MetaName.weaponSlotSecondary, PsoDataType.SByte, 81, 0, 0), new PsoStructureEntryInfo(MetaName.disableProjectileDriveby, PsoDataType.Bool, 82, 0, 0), new PsoStructureEntryInfo(MetaName.disableDriveby, PsoDataType.Bool, 83, 0, 0), - new PsoStructureEntryInfo((MetaName)161724223, PsoDataType.SInt, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)484538291, PsoDataType.SInt, 88, 0, 0) + new PsoStructureEntryInfo(MetaName.disableDrivebySeat, PsoDataType.SInt, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.disableDrivebySeatSecondary, PsoDataType.SInt, 88, 0, 0) ); case (MetaName)427606548: return new PsoStructureInfo((MetaName)427606548, 0, 0, 24, - new PsoStructureEntryInfo(MetaName.slot, PsoDataType.Enum, 8, 0, (MetaName)2363989491), + new PsoStructureEntryInfo(MetaName.slot, PsoDataType.Enum, 8, 0, MetaName.eVehicleModType), new PsoStructureEntryInfo(MetaName.name, PsoDataType.String, 16, 2, 0) ); case MetaName.CVehicleModLink: @@ -14288,49 +14288,49 @@ namespace CodeWalker.GameFiles case (MetaName)360458334: //vehicle mod color metallic id return new PsoEnumInfo((MetaName)360458334, 1, new PsoEnumEntryInfo(MetaName.none, -1), - new PsoEnumEntryInfo((MetaName)815563434, 0), - new PsoEnumEntryInfo((MetaName)969376721, 1), - new PsoEnumEntryInfo((MetaName)731244402, 2), - new PsoEnumEntryInfo((MetaName)3537679873, 3), - new PsoEnumEntryInfo((MetaName)3183119293, 4), - new PsoEnumEntryInfo((MetaName)4039766491, 5), - new PsoEnumEntryInfo((MetaName)3777516184, 6), - new PsoEnumEntryInfo((MetaName)229878718, 7), - new PsoEnumEntryInfo((MetaName)4285337393, 8), - new PsoEnumEntryInfo((MetaName)847803751, 9) + new PsoEnumEntryInfo(MetaName.EVehicleModelColorMetallic_normal, 0), + new PsoEnumEntryInfo(MetaName.EVehicleModelColorMetallic_1, 1), + new PsoEnumEntryInfo(MetaName.EVehicleModelColorMetallic_2, 2), + new PsoEnumEntryInfo(MetaName.EVehicleModelColorMetallic_3, 3), + new PsoEnumEntryInfo(MetaName.EVehicleModelColorMetallic_4, 4), + new PsoEnumEntryInfo(MetaName.EVehicleModelColorMetallic_5, 5), + new PsoEnumEntryInfo(MetaName.EVehicleModelColorMetallic_6, 6), + new PsoEnumEntryInfo(MetaName.EVehicleModelColorMetallic_7, 7), + new PsoEnumEntryInfo(MetaName.EVehicleModelColorMetallic_8, 8), + new PsoEnumEntryInfo(MetaName.EVehicleModelColorMetallic_9, 9) ); case (MetaName)544262540: //vehicle mod color audio color return new PsoEnumInfo((MetaName)544262540, 1, - new PsoEnumEntryInfo((MetaName)52583446, 0), - new PsoEnumEntryInfo((MetaName)2253400966, 1), - new PsoEnumEntryInfo((MetaName)4012089111, 2), - new PsoEnumEntryInfo((MetaName)2477037232, 3), - new PsoEnumEntryInfo((MetaName)437487559, 4), - new PsoEnumEntryInfo((MetaName)730308174, 5), - new PsoEnumEntryInfo((MetaName)3129410619, 6), - new PsoEnumEntryInfo((MetaName)1762671403, 7), - new PsoEnumEntryInfo((MetaName)2615326998, 8), - new PsoEnumEntryInfo((MetaName)4157715503, 9), - new PsoEnumEntryInfo((MetaName)2969646890, 10), - new PsoEnumEntryInfo((MetaName)1645071976, 11), - new PsoEnumEntryInfo((MetaName)1358390657, 12) + new PsoEnumEntryInfo(MetaName.POLICE_SCANNER_COLOUR_black, 0), + new PsoEnumEntryInfo(MetaName.POLICE_SCANNER_COLOUR_blue, 1), + new PsoEnumEntryInfo(MetaName.POLICE_SCANNER_COLOUR_brown, 2), + new PsoEnumEntryInfo(MetaName.POLICE_SCANNER_COLOUR_beige, 3), + new PsoEnumEntryInfo(MetaName.POLICE_SCANNER_COLOUR_graphite, 4), + new PsoEnumEntryInfo(MetaName.POLICE_SCANNER_COLOUR_green, 5), + new PsoEnumEntryInfo(MetaName.POLICE_SCANNER_COLOUR_grey, 6), + new PsoEnumEntryInfo(MetaName.POLICE_SCANNER_COLOUR_orange, 7), + new PsoEnumEntryInfo(MetaName.POLICE_SCANNER_COLOUR_pink, 8), + new PsoEnumEntryInfo(MetaName.POLICE_SCANNER_COLOUR_red, 9), + new PsoEnumEntryInfo(MetaName.POLICE_SCANNER_COLOUR_silver, 10), + new PsoEnumEntryInfo(MetaName.POLICE_SCANNER_COLOUR_white, 11), + new PsoEnumEntryInfo(MetaName.POLICE_SCANNER_COLOUR_yellow, 12) ); case (MetaName)2065815796: //vehicle mod color audio prefix return new PsoEnumInfo((MetaName)2065815796, 1, new PsoEnumEntryInfo(MetaName.none, 0), - new PsoEnumEntryInfo((MetaName)2318284788, 1), - new PsoEnumEntryInfo((MetaName)840729009, 2), - new PsoEnumEntryInfo((MetaName)3921902053, 3) + new PsoEnumEntryInfo(MetaName.POLICE_SCANNER_PREFIX_bright, 1), + new PsoEnumEntryInfo(MetaName.POLICE_SCANNER_PREFIX_light, 2), + new PsoEnumEntryInfo(MetaName.POLICE_SCANNER_PREFIX_dark, 3) ); - case (MetaName)3865430600: //vehicle mod kit type - return new PsoEnumInfo((MetaName)3865430600, 1, + case MetaName.eModKitType: //vehicle mod kit type + return new PsoEnumInfo(MetaName.eModKitType, 1, new PsoEnumEntryInfo(MetaName.MKT_STANDARD, 0), new PsoEnumEntryInfo(MetaName.MKT_SPORT, 1), new PsoEnumEntryInfo(MetaName.MKT_SUV, 2), new PsoEnumEntryInfo(MetaName.MKT_SPECIAL, 3) ); - case (MetaName)2363989491: //vehicle mod type - return new PsoEnumInfo((MetaName)2363989491, 1, + case MetaName.eVehicleModType: //vehicle mod type + return new PsoEnumInfo(MetaName.eVehicleModType, 1, new PsoEnumEntryInfo(MetaName.VMT_SPOILER, 0), new PsoEnumEntryInfo(MetaName.VMT_BUMPER_F, 1), new PsoEnumEntryInfo(MetaName.VMT_BUMPER_R, 2), @@ -14364,7 +14364,7 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo(MetaName.VMT_CHASSIS4, 30), new PsoEnumEntryInfo(MetaName.VMT_CHASSIS5, 31), new PsoEnumEntryInfo(MetaName.VMT_DOOR_L, 32), - new PsoEnumEntryInfo((MetaName)514696742, 33), + new PsoEnumEntryInfo(MetaName.VMT_DOOR_R, 33), new PsoEnumEntryInfo(MetaName.VMT_LIVERY_MOD, 34), new PsoEnumEntryInfo((MetaName)3409280882, 35), new PsoEnumEntryInfo(MetaName.VMT_ENGINE, 36), @@ -14374,11 +14374,11 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo(MetaName.VMT_SUSPENSION, 40), new PsoEnumEntryInfo(MetaName.VMT_ARMOUR, 41), new PsoEnumEntryInfo((MetaName)3278520444, 42), - new PsoEnumEntryInfo((MetaName)2334449168, 43), + new PsoEnumEntryInfo(MetaName.VMT_TURBO, 43), new PsoEnumEntryInfo((MetaName)1675686396, 44), - new PsoEnumEntryInfo((MetaName)3968559424, 45), - new PsoEnumEntryInfo((MetaName)3919652883, 46), - new PsoEnumEntryInfo((MetaName)2656522436, 47), + new PsoEnumEntryInfo(MetaName.VMT_TYRE_SMOKE, 45), + new PsoEnumEntryInfo(MetaName.VMT_HYDRAULICS, 46), + new PsoEnumEntryInfo(MetaName.VMT_XENON_LIGHTS, 47), new PsoEnumEntryInfo(MetaName.VMT_WHEELS, 48), new PsoEnumEntryInfo(MetaName.VMT_WHEELS_REAR_OR_HYDRAULICS, 49) ); @@ -14386,7 +14386,7 @@ namespace CodeWalker.GameFiles return new PsoEnumInfo((MetaName)3635907608, 1, new PsoEnumEntryInfo(MetaName.none, -1), new PsoEnumEntryInfo(MetaName.chassis, 0), - new PsoEnumEntryInfo((MetaName)1970334199, 48), + new PsoEnumEntryInfo(MetaName.bodyshell, 48), new PsoEnumEntryInfo(MetaName.bumper_f, 49), new PsoEnumEntryInfo(MetaName.bumper_r, 50), new PsoEnumEntryInfo(MetaName.wing_rf, 51), @@ -14397,58 +14397,58 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo(MetaName.exhaust_2, 57), new PsoEnumEntryInfo(MetaName.exhaust_3, 58), new PsoEnumEntryInfo(MetaName.exhaust_4, 59), - new PsoEnumEntryInfo((MetaName)1666652977, 60), - new PsoEnumEntryInfo((MetaName)1972682668, 61), - new PsoEnumEntryInfo((MetaName)3204862618, 62), - new PsoEnumEntryInfo((MetaName)3503093287, 63), - new PsoEnumEntryInfo((MetaName)442599751, 64), - new PsoEnumEntryInfo((MetaName)2600343066, 65), - new PsoEnumEntryInfo((MetaName)3598945568, 66), - new PsoEnumEntryInfo((MetaName)3896619164, 67), - new PsoEnumEntryInfo((MetaName)2989016171, 68), - new PsoEnumEntryInfo((MetaName)3320572913, 69), - new PsoEnumEntryInfo((MetaName)529211190, 70), - new PsoEnumEntryInfo((MetaName)823345734, 71), + new PsoEnumEntryInfo(MetaName.exhaust_5, 60), + new PsoEnumEntryInfo(MetaName.exhaust_6, 61), + new PsoEnumEntryInfo(MetaName.exhaust_7, 62), + new PsoEnumEntryInfo(MetaName.exhaust_8, 63), + new PsoEnumEntryInfo(MetaName.exhaust_9, 64), + new PsoEnumEntryInfo(MetaName.exhaust_10, 65), + new PsoEnumEntryInfo(MetaName.exhaust_11, 66), + new PsoEnumEntryInfo(MetaName.exhaust_12, 67), + new PsoEnumEntryInfo(MetaName.exhaust_13, 68), + new PsoEnumEntryInfo(MetaName.exhaust_14, 69), + new PsoEnumEntryInfo(MetaName.exhaust_15, 70), + new PsoEnumEntryInfo(MetaName.exhaust_16, 71), new PsoEnumEntryInfo(MetaName.extra_1, 401), new PsoEnumEntryInfo(MetaName.extra_2, 402), new PsoEnumEntryInfo(MetaName.extra_3, 403), new PsoEnumEntryInfo(MetaName.extra_4, 404), new PsoEnumEntryInfo(MetaName.extra_5, 405), - new PsoEnumEntryInfo((MetaName)3145755371, 406), - new PsoEnumEntryInfo((MetaName)2360446286, 407), - new PsoEnumEntryInfo((MetaName)2661527858, 408), - new PsoEnumEntryInfo((MetaName)1913477126, 409), - new PsoEnumEntryInfo((MetaName)2125833567, 410), - new PsoEnumEntryInfo((MetaName)2431830489, 411), - new PsoEnumEntryInfo((MetaName)2720558148, 412), - new PsoEnumEntryInfo((MetaName)903844796, 413), - new PsoEnumEntryInfo((MetaName)1202337617, 414), - new PsoEnumEntryInfo((MetaName)2190258525, 417), - new PsoEnumEntryInfo((MetaName)1950749904, 418), - new PsoEnumEntryInfo((MetaName)1709504522, 419), - new PsoEnumEntryInfo((MetaName)1480285367, 420), - new PsoEnumEntryInfo((MetaName)1213709552, 421), - new PsoEnumEntryInfo((MetaName)848662892, 422), - new PsoEnumEntryInfo((MetaName)3990325233, 423), - new PsoEnumEntryInfo((MetaName)367056899, 424), - new PsoEnumEntryInfo((MetaName)3413787451, 425), - new PsoEnumEntryInfo((MetaName)2734584581, 426), + new PsoEnumEntryInfo(MetaName.extra_6, 406), + new PsoEnumEntryInfo(MetaName.extra_7, 407), + new PsoEnumEntryInfo(MetaName.extra_8, 408), + new PsoEnumEntryInfo(MetaName.extra_9, 409), + new PsoEnumEntryInfo(MetaName.extra_10, 410), + new PsoEnumEntryInfo(MetaName.extra_11, 411), + new PsoEnumEntryInfo(MetaName.extra_12, 412), + new PsoEnumEntryInfo(MetaName.extra_13, 413), + new PsoEnumEntryInfo(MetaName.extra_14, 414), + new PsoEnumEntryInfo(MetaName.break_extra_1, 417), + new PsoEnumEntryInfo(MetaName.break_extra_2, 418), + new PsoEnumEntryInfo(MetaName.break_extra_3, 419), + new PsoEnumEntryInfo(MetaName.break_extra_4, 420), + new PsoEnumEntryInfo(MetaName.break_extra_5, 421), + new PsoEnumEntryInfo(MetaName.break_extra_6, 422), + new PsoEnumEntryInfo(MetaName.break_extra_7, 423), + new PsoEnumEntryInfo(MetaName.break_extra_8, 424), + new PsoEnumEntryInfo(MetaName.break_extra_9, 425), + new PsoEnumEntryInfo(MetaName.break_extra_10, 426), new PsoEnumEntryInfo(MetaName.mod_col_1, 427), new PsoEnumEntryInfo(MetaName.mod_col_2, 428), new PsoEnumEntryInfo(MetaName.mod_col_3, 429), new PsoEnumEntryInfo(MetaName.mod_col_4, 430), new PsoEnumEntryInfo(MetaName.mod_col_5, 431), - new PsoEnumEntryInfo((MetaName)1547719720, 432), - new PsoEnumEntryInfo((MetaName)580018373, 433), - new PsoEnumEntryInfo((MetaName)4191162177, 434), - new PsoEnumEntryInfo((MetaName)3257212908, 435), - new PsoEnumEntryInfo((MetaName)3033709986, 436), - new PsoEnumEntryInfo((MetaName)2249285664, 437), - new PsoEnumEntryInfo((MetaName)1498318491, 438), - new PsoEnumEntryInfo((MetaName)1787603223, 439), - new PsoEnumEntryInfo((MetaName)1573326728, 440), - new PsoEnumEntryInfo((MetaName)1862676998, 441), - new PsoEnumEntryInfo((MetaName)1044598917, 442), + new PsoEnumEntryInfo(MetaName.mod_col_6, 432), + new PsoEnumEntryInfo(MetaName.mod_col_7, 433), + new PsoEnumEntryInfo(MetaName.mod_col_8, 434), + new PsoEnumEntryInfo(MetaName.mod_col_9, 435), + new PsoEnumEntryInfo(MetaName.mod_col_10, 436), + new PsoEnumEntryInfo(MetaName.mod_col_11, 437), + new PsoEnumEntryInfo(MetaName.mod_col_12, 438), + new PsoEnumEntryInfo(MetaName.mod_col_13, 439), + new PsoEnumEntryInfo(MetaName.mod_col_14, 440), + new PsoEnumEntryInfo(MetaName.mod_col_15, 441), + new PsoEnumEntryInfo(MetaName.mod_col_16, 442), new PsoEnumEntryInfo(MetaName.misc_a, 369), new PsoEnumEntryInfo(MetaName.misc_b, 370), new PsoEnumEntryInfo(MetaName.misc_c, 371), @@ -14475,99 +14475,99 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo(MetaName.misc_x, 392), new PsoEnumEntryInfo(MetaName.misc_y, 393), new PsoEnumEntryInfo(MetaName.misc_z, 394), - new PsoEnumEntryInfo((MetaName)2690009945, 395), - new PsoEnumEntryInfo((MetaName)1385115596, 396), - new PsoEnumEntryInfo((MetaName)2921986035, 79), + new PsoEnumEntryInfo(MetaName.misc_1, 395), + new PsoEnumEntryInfo(MetaName.misc_2, 396), + new PsoEnumEntryInfo(MetaName.handlebars, 79), new PsoEnumEntryInfo(MetaName.steeringwheel, 80), - new PsoEnumEntryInfo((MetaName)3929033220, 29), - new PsoEnumEntryInfo((MetaName)837923007, 21), - new PsoEnumEntryInfo((MetaName)991413023, 22), + new PsoEnumEntryInfo(MetaName.swingarm, 29), + new PsoEnumEntryInfo(MetaName.forks_u, 21), + new PsoEnumEntryInfo(MetaName.forks_l, 22), new PsoEnumEntryInfo(MetaName.headlight_l, 91), new PsoEnumEntryInfo(MetaName.headlight_r, 92), - new PsoEnumEntryInfo((MetaName)3979005071, 97), + new PsoEnumEntryInfo(MetaName.indicator_lr, 97), new PsoEnumEntryInfo(MetaName.indicator_lf, 95), - new PsoEnumEntryInfo((MetaName)112742354, 98), + new PsoEnumEntryInfo(MetaName.indicator_rr, 98), new PsoEnumEntryInfo(MetaName.indicator_rf, 96), - new PsoEnumEntryInfo((MetaName)3008822349, 93), - new PsoEnumEntryInfo((MetaName)914195096, 94), + new PsoEnumEntryInfo(MetaName.taillight_l, 93), + new PsoEnumEntryInfo(MetaName.taillight_r, 94), new PsoEnumEntryInfo(MetaName.window_lf, 42), new PsoEnumEntryInfo(MetaName.window_rf, 43), - new PsoEnumEntryInfo((MetaName)2355575415, 45), - new PsoEnumEntryInfo((MetaName)2639884295, 44), - new PsoEnumEntryInfo((MetaName)2675373130, 46), - new PsoEnumEntryInfo((MetaName)3523659197, 47), + new PsoEnumEntryInfo(MetaName.window_rr, 45), + new PsoEnumEntryInfo(MetaName.window_lr, 44), + new PsoEnumEntryInfo(MetaName.window_lm, 46), + new PsoEnumEntryInfo(MetaName.window_rm, 47), new PsoEnumEntryInfo(MetaName.hub_lf, 30), new PsoEnumEntryInfo(MetaName.hub_rf, 31), new PsoEnumEntryInfo(MetaName.windscreen_r, 41), - new PsoEnumEntryInfo((MetaName)4084563217, 104), - new PsoEnumEntryInfo((MetaName)556062831, 105), - new PsoEnumEntryInfo((MetaName)3850133799, 106), - new PsoEnumEntryInfo((MetaName)728001778, 107), + new PsoEnumEntryInfo(MetaName.neon_l, 104), + new PsoEnumEntryInfo(MetaName.neon_r, 105), + new PsoEnumEntryInfo(MetaName.neon_f, 106), + new PsoEnumEntryInfo(MetaName.neon_b, 107), new PsoEnumEntryInfo(MetaName.door_dside_f, 3), new PsoEnumEntryInfo(MetaName.door_dside_r, 4), new PsoEnumEntryInfo(MetaName.door_pside_f, 5), new PsoEnumEntryInfo(MetaName.door_pside_r, 6), new PsoEnumEntryInfo(MetaName.bobble_head, 361), new PsoEnumEntryInfo(MetaName.bobble_base, 362), - new PsoEnumEntryInfo((MetaName)785162942, 363), + new PsoEnumEntryInfo(MetaName.bobble_hand, 363), new PsoEnumEntryInfo(MetaName.engineblock, 364), - new PsoEnumEntryInfo((MetaName)3654959273, 474), - new PsoEnumEntryInfo((MetaName)808381781, 475), - new PsoEnumEntryInfo((MetaName)4268165574, 476), - new PsoEnumEntryInfo((MetaName)3579951032, 477), - new PsoEnumEntryInfo((MetaName)2733953759, 478), - new PsoEnumEntryInfo((MetaName)4123490435, 479), - new PsoEnumEntryInfo((MetaName)3342441320, 480), - new PsoEnumEntryInfo((MetaName)1726175929, 481), - new PsoEnumEntryInfo((MetaName)1947366679, 482), - new PsoEnumEntryInfo((MetaName)2065498928, 483), - new PsoEnumEntryInfo((MetaName)2572238744, 484), - new PsoEnumEntryInfo((MetaName)730555402, 485), - new PsoEnumEntryInfo((MetaName)4194074861, 486), - new PsoEnumEntryInfo((MetaName)1343696161, 487), - new PsoEnumEntryInfo((MetaName)506677594, 488), - new PsoEnumEntryInfo((MetaName)4167728581, 489), - new PsoEnumEntryInfo((MetaName)3326122354, 490), - new PsoEnumEntryInfo((MetaName)217851628, 491), - new PsoEnumEntryInfo((MetaName)3666821647, 492), - new PsoEnumEntryInfo((MetaName)2168885119, 493), - new PsoEnumEntryInfo((MetaName)2399611648, 494), - new PsoEnumEntryInfo((MetaName)3519328378, 495), - new PsoEnumEntryInfo((MetaName)2958716326, 496), - new PsoEnumEntryInfo((MetaName)3292501248, 497), - new PsoEnumEntryInfo((MetaName)2651277456, 498), - new PsoEnumEntryInfo((MetaName)3888995355, 499), - new PsoEnumEntryInfo((MetaName)3843353624, 500), - new PsoEnumEntryInfo((MetaName)3135215534, 501), - new PsoEnumEntryInfo((MetaName)3364434689, 502), - new PsoEnumEntryInfo((MetaName)2723112578, 503), - new PsoEnumEntryInfo((MetaName)2970026993, 504), - new PsoEnumEntryInfo((MetaName)2245832093, 505), - new PsoEnumEntryInfo((MetaName)2492156666, 506), - new PsoEnumEntryInfo((MetaName)1765012564, 507), - new PsoEnumEntryInfo((MetaName)2014155263, 508), - new PsoEnumEntryInfo((MetaName)1286290243, 509), - new PsoEnumEntryInfo((MetaName)1535367412, 510), - new PsoEnumEntryInfo((MetaName)3992710274, 511), - new PsoEnumEntryInfo((MetaName)1077448950, 512), - new PsoEnumEntryInfo((MetaName)1382757723, 513), - new PsoEnumEntryInfo((MetaName)614062521, 514), - new PsoEnumEntryInfo((MetaName)3783807571, 524), - new PsoEnumEntryInfo((MetaName)2839830988, 525), - new PsoEnumEntryInfo((MetaName)3138651499, 526), - new PsoEnumEntryInfo((MetaName)2400824695, 527), - new PsoEnumEntryInfo((MetaName)4141162370, 560), - new PsoEnumEntryInfo((MetaName)451472348, 561), - new PsoEnumEntryInfo((MetaName)1768767594, 562), - new PsoEnumEntryInfo((MetaName)3599310922, 563), - new PsoEnumEntryInfo((MetaName)1496111458, 564), - new PsoEnumEntryInfo((MetaName)3929521030, 565), - new PsoEnumEntryInfo((MetaName)1157497495, 566), - new PsoEnumEntryInfo((MetaName)1032498025, 567), - new PsoEnumEntryInfo((MetaName)2573434709, 568), - new PsoEnumEntryInfo((MetaName)930609265, 569), - new PsoEnumEntryInfo((MetaName)879315983, 570), - new PsoEnumEntryInfo((MetaName)411536741, 571), + new PsoEnumEntryInfo(MetaName.mod_a, 474), + new PsoEnumEntryInfo(MetaName.mod_b, 475), + new PsoEnumEntryInfo(MetaName.mod_c, 476), + new PsoEnumEntryInfo(MetaName.mod_d, 477), + new PsoEnumEntryInfo(MetaName.mod_e, 478), + new PsoEnumEntryInfo(MetaName.mod_f, 479), + new PsoEnumEntryInfo(MetaName.mod_g, 480), + new PsoEnumEntryInfo(MetaName.mod_h, 481), + new PsoEnumEntryInfo(MetaName.mod_i, 482), + new PsoEnumEntryInfo(MetaName.mod_j, 483), + new PsoEnumEntryInfo(MetaName.mod_k, 484), + new PsoEnumEntryInfo(MetaName.mod_l, 485), + new PsoEnumEntryInfo(MetaName.mod_m, 486), + new PsoEnumEntryInfo(MetaName.mod_n, 487), + new PsoEnumEntryInfo(MetaName.mod_o, 488), + new PsoEnumEntryInfo(MetaName.mod_p, 489), + new PsoEnumEntryInfo(MetaName.mod_q, 490), + new PsoEnumEntryInfo(MetaName.mod_r, 491), + new PsoEnumEntryInfo(MetaName.mod_s, 492), + new PsoEnumEntryInfo(MetaName.mod_t, 493), + new PsoEnumEntryInfo(MetaName.mod_u, 494), + new PsoEnumEntryInfo(MetaName.mod_v, 495), + new PsoEnumEntryInfo(MetaName.mod_w, 496), + new PsoEnumEntryInfo(MetaName.mod_x, 497), + new PsoEnumEntryInfo(MetaName.mod_y, 498), + new PsoEnumEntryInfo(MetaName.mod_z, 499), + new PsoEnumEntryInfo(MetaName.mod_aa, 500), + new PsoEnumEntryInfo(MetaName.mod_ab, 501), + new PsoEnumEntryInfo(MetaName.mod_ac, 502), + new PsoEnumEntryInfo(MetaName.mod_ad, 503), + new PsoEnumEntryInfo(MetaName.mod_ae, 504), + new PsoEnumEntryInfo(MetaName.mod_af, 505), + new PsoEnumEntryInfo(MetaName.mod_ag, 506), + new PsoEnumEntryInfo(MetaName.mod_ah, 507), + new PsoEnumEntryInfo(MetaName.mod_ai, 508), + new PsoEnumEntryInfo(MetaName.mod_aj, 509), + new PsoEnumEntryInfo(MetaName.mod_ak, 510), + new PsoEnumEntryInfo(MetaName.turret_a1, 511), + new PsoEnumEntryInfo(MetaName.turret_a2, 512), + new PsoEnumEntryInfo(MetaName.turret_a3, 513), + new PsoEnumEntryInfo(MetaName.turret_a4, 514), + new PsoEnumEntryInfo(MetaName.turret_b1, 524), + new PsoEnumEntryInfo(MetaName.turret_b2, 525), + new PsoEnumEntryInfo(MetaName.turret_b3, 526), + new PsoEnumEntryInfo(MetaName.turret_b4, 527), + new PsoEnumEntryInfo(MetaName.rblade_1mod, 560), + new PsoEnumEntryInfo(MetaName.rblade_1fast, 561), + new PsoEnumEntryInfo(MetaName.rblade_2mod, 562), + new PsoEnumEntryInfo(MetaName.rblade_2fast, 563), + new PsoEnumEntryInfo(MetaName.rblade_3mod, 564), + new PsoEnumEntryInfo(MetaName.rblade_3fast, 565), + new PsoEnumEntryInfo(MetaName.fblade_1mod, 566), + new PsoEnumEntryInfo(MetaName.fblade_1fast, 567), + new PsoEnumEntryInfo(MetaName.fblade_2mod, 568), + new PsoEnumEntryInfo(MetaName.fblade_2fast, 569), + new PsoEnumEntryInfo(MetaName.fblade_3mod, 570), + new PsoEnumEntryInfo(MetaName.fblade_3fast, 571), new PsoEnumEntryInfo((MetaName)1086719913, 572), new PsoEnumEntryInfo((MetaName)3237490897, 573), new PsoEnumEntryInfo((MetaName)3375838140, 574), @@ -14577,32 +14577,32 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo((MetaName)1208798824, 578), new PsoEnumEntryInfo((MetaName)303656220, 579), new PsoEnumEntryInfo((MetaName)660207018, 580), - new PsoEnumEntryInfo((MetaName)2796607005, 581), + new PsoEnumEntryInfo(MetaName.spike_1mod, 581), new PsoEnumEntryInfo((MetaName)3045655218, 582), new PsoEnumEntryInfo((MetaName)2017296145, 583), - new PsoEnumEntryInfo((MetaName)3978311755, 584), + new PsoEnumEntryInfo(MetaName.spike_2mod, 584), new PsoEnumEntryInfo((MetaName)1122332083, 585), new PsoEnumEntryInfo((MetaName)1123212214, 586), - new PsoEnumEntryInfo((MetaName)4063416457, 587), + new PsoEnumEntryInfo(MetaName.spike_3mod, 587), new PsoEnumEntryInfo((MetaName)4011591561, 588), new PsoEnumEntryInfo((MetaName)2320654166, 589), - new PsoEnumEntryInfo((MetaName)2292220415, 590), - new PsoEnumEntryInfo((MetaName)2166816405, 591), - new PsoEnumEntryInfo((MetaName)2486991428, 592) + new PsoEnumEntryInfo(MetaName.scoop_1mod, 590), + new PsoEnumEntryInfo(MetaName.scoop_2mod, 591), + new PsoEnumEntryInfo(MetaName.scoop_3mod, 592) ); - case (MetaName)3413962745: //vehicle mod camera position - return new PsoEnumInfo((MetaName)3413962745, 1, + case MetaName.eVehicleModCameraPos: //vehicle mod camera position + return new PsoEnumInfo(MetaName.eVehicleModCameraPos, 1, new PsoEnumEntryInfo(MetaName.VMCP_DEFAULT, 0), - new PsoEnumEntryInfo((MetaName)3001706694, 1), - new PsoEnumEntryInfo((MetaName)1148399176, 2), - new PsoEnumEntryInfo((MetaName)2057559994, 3), - new PsoEnumEntryInfo((MetaName)1556139353, 4), - new PsoEnumEntryInfo((MetaName)1830737308, 5), - new PsoEnumEntryInfo((MetaName)457854237, 6), - new PsoEnumEntryInfo((MetaName)1629770278, 7), - new PsoEnumEntryInfo((MetaName)2879151926, 8), - new PsoEnumEntryInfo((MetaName)3193071790, 9), - new PsoEnumEntryInfo((MetaName)2770495034, 10) + new PsoEnumEntryInfo(MetaName.VMCP_FRONT, 1), + new PsoEnumEntryInfo(MetaName.VMCP_FRONT_LEFT, 2), + new PsoEnumEntryInfo(MetaName.VMCP_FRONT_RIGHT, 3), + new PsoEnumEntryInfo(MetaName.VMCP_REAR, 4), + new PsoEnumEntryInfo(MetaName.VMCP_REAR_LEFT, 5), + new PsoEnumEntryInfo(MetaName.VMCP_REAR_RIGHT, 6), + new PsoEnumEntryInfo(MetaName.VMCP_LEFT, 7), + new PsoEnumEntryInfo(MetaName.VMCP_RIGHT, 8), + new PsoEnumEntryInfo(MetaName.VMCP_TOP, 9), + new PsoEnumEntryInfo(MetaName.VMCP_BOTTOM, 10) ); case (MetaName)1795685103: //credit item job line type return new PsoEnumInfo((MetaName)1795685103, 1, From e39784f8175795b9397a9ff5e446639d23a564dc Mon Sep 17 00:00:00 2001 From: dexy Date: Sat, 12 Jan 2019 17:45:19 +1100 Subject: [PATCH 083/158] Added MetaNames from dav90 --- .../GameFiles/FileTypes/YmfFile.cs | 8 +- .../GameFiles/MetaTypes/MetaNames.cs | 5072 +++++- .../GameFiles/MetaTypes/MetaTypes.cs | 50 +- .../GameFiles/MetaTypes/PsoBuilder.cs | 2 +- .../GameFiles/MetaTypes/PsoTypes.cs | 13412 ++++++++-------- 5 files changed, 11771 insertions(+), 6773 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/YmfFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YmfFile.cs index db900d7..8d46d87 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YmfFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YmfFile.cs @@ -98,7 +98,7 @@ namespace CodeWalker.GameFiles HDTxdAssetBindings = PsoTypes.GetItemArray(Pso, d.HDTxdBindingArray); - Interiors = PsoTypes.GetObjectArray(Pso, d.Interiors); + Interiors = PsoTypes.GetObjectArray(Pso, d.Interiors); } @@ -169,9 +169,9 @@ namespace CodeWalker.GameFiles } } - [TypeConverter(typeof(ExpandableObjectConverter))] public class YmfInterior : PsoClass + [TypeConverter(typeof(ExpandableObjectConverter))] public class YmfInterior : PsoClass { - public Unk_741495440 Interior { get; set; } + public CInteriorBoundsFiles Interior { get; set; } public MetaHash[] Bounds { get; set; }//ybn hashes? public override string ToString() @@ -179,7 +179,7 @@ namespace CodeWalker.GameFiles return Interior.ToString(); } - public override void Init(PsoFile pso, ref Unk_741495440 v) + public override void Init(PsoFile pso, ref CInteriorBoundsFiles v) { Interior = v; Bounds = PsoTypes.GetHashArray(pso, v.Bounds); diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs index e8e394e..5cd912b 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs @@ -3670,6 +3670,1190 @@ namespace CodeWalker.GameFiles baseCols = 2645876692, specCols = 666439252, + //EVehicleModelColorMetallic_1 = 969376721, + //EVehicleModelColorMetallic_2 = 731244402, + //EVehicleModelColorMetallic_3 = 3537679873, + //EVehicleModelColorMetallic_4 = 3183119293, + //EVehicleModelColorMetallic_5 = 4039766491, + //EVehicleModelColorMetallic_6 = 3777516184, + //EVehicleModelColorMetallic_7 = 229878718, + //EVehicleModelColorMetallic_8 = 4285337393, + //EVehicleModelColorMetallic_9 = 847803751, + //EVehicleModelColorMetallic_normal = 815563434, + //POLICE_SCANNER_COLOUR_beige = 2477037232, + //POLICE_SCANNER_COLOUR_black = 52583446, + //POLICE_SCANNER_COLOUR_blue = 2253400966, + //POLICE_SCANNER_COLOUR_brown = 4012089111, + //POLICE_SCANNER_COLOUR_graphite = 437487559, + //POLICE_SCANNER_COLOUR_green = 730308174, + //POLICE_SCANNER_COLOUR_grey = 3129410619, + //POLICE_SCANNER_COLOUR_orange = 1762671403, + //POLICE_SCANNER_COLOUR_pink = 2615326998, + //POLICE_SCANNER_COLOUR_red = 4157715503, + //POLICE_SCANNER_COLOUR_silver = 2969646890, + //POLICE_SCANNER_COLOUR_white = 1645071976, + //POLICE_SCANNER_COLOUR_yellow = 1358390657, + //POLICE_SCANNER_PREFIX_bright = 2318284788, + //POLICE_SCANNER_PREFIX_dark = 3921902053, + //POLICE_SCANNER_PREFIX_light = 840729009, + //VMCP_BOTTOM = 2770495034, + //VMCP_FRONT = 3001706694, + //VMCP_FRONT_LEFT = 1148399176, + //VMCP_FRONT_RIGHT = 2057559994, + //VMCP_LEFT = 1629770278, + //VMCP_REAR = 1556139353, + //VMCP_REAR_LEFT = 1830737308, + //VMCP_REAR_RIGHT = 457854237, + //VMCP_RIGHT = 2879151926, + //VMCP_TOP = 3193071790, + //VMT_DOOR_R = 514696742, + //VMT_HYDRAULICS = 3919652883, + //VMT_TURBO = 2334449168, + //VMT_TYRE_SMOKE = 3968559424, + //VMT_XENON_LIGHTS = 2656522436, + //bobble_hand = 785162942, + //bodyshell = 1970334199, + //break_extra_1 = 2190258525, + //break_extra_10 = 2734584581, + //break_extra_2 = 1950749904, + //break_extra_3 = 1709504522, + //break_extra_4 = 1480285367, + //break_extra_5 = 1213709552, + //break_extra_6 = 848662892, + //break_extra_7 = 3990325233, + //break_extra_8 = 367056899, + //break_extra_9 = 3413787451, + ////collision_18eafea9_cdm3nr = 418053801, + ////collision_37f22dd2_7guqqmk = 938618322, + ////collision_b473fe0d_86rknbm = 3027500557, + //disableDrivebySeat = 161724223, + //disableDrivebySeatSecondary = 484538291, + //eModKitType = 3865430600, + //exhaust_10 = 2600343066, + //exhaust_11 = 3598945568, + //exhaust_12 = 3896619164, + //exhaust_13 = 2989016171, + //exhaust_14 = 3320572913, + //exhaust_15 = 529211190, + //exhaust_16 = 823345734, + //exhaust_5 = 1666652977, + //exhaust_6 = 1972682668, + //exhaust_7 = 3204862618, + //exhaust_8 = 3503093287, + //exhaust_9 = 442599751, + //extra_10 = 2125833567, + //extra_11 = 2431830489, + //extra_12 = 2720558148, + //extra_13 = 903844796, + //extra_14 = 1202337617, + //extra_6 = 3145755371, + //extra_7 = 2360446286, + //extra_8 = 2661527858, + //extra_9 = 1913477126, + //fblade_1mod = 1157497495, + //forks_l = 991413023, + //forks_u = 837923007, + //handlebars = 2921986035, + //indicator_lr = 3979005071, + //indicator_rr = 112742354, + //misc_1 = 2690009945, + //misc_2 = 1385115596, + //mod_a = 3654959273, + //mod_b = 808381781, + //mod_c = 4268165574, + //mod_col_10 = 3033709986, + //mod_col_11 = 2249285664, + //mod_col_12 = 1498318491, + //mod_col_13 = 1787603223, + //mod_col_6 = 1547719720, + //mod_col_7 = 580018373, + //mod_col_8 = 4191162177, + //mod_col_9 = 3257212908, + //mod_d = 3579951032, + //mod_e = 2733953759, + //mod_f = 4123490435, + //mod_g = 3342441320, + //mod_h = 1726175929, + //mod_i = 1947366679, + //mod_j = 2065498928, + //mod_k = 2572238744, + //mod_l = 730555402, + //mod_m = 4194074861, + //mod_n = 1343696161, + //mod_o = 506677594, + //mod_p = 4167728581, + //mod_q = 3326122354, + //mod_r = 217851628, + //mod_s = 3666821647, + //mod_t = 2168885119, + //mod_u = 2399611648, + //mod_v = 3519328378, + //mod_w = 2958716326, + //mod_x = 3292501248, + //mod_y = 2651277456, + //mod_z = 3888995355, + //neon_b = 728001778, + //neon_f = 3850133799, + //neon_l = 4084563217, + //neon_r = 556062831, + //scoop_1mod = 2292220415, + //scoop_2mod = 2166816405, + //scoop_3mod = 2486991428, + //spike_1mod = 2796607005, + //spike_2mod = 3978311755, + //spike_3mod = 4063416457, + //swingarm = 3929033220, + //taillight_l = 3008822349, + //taillight_r = 914195096, + //weaponSlotSecondary = 2656206330, + //window_lm = 2675373130, + //window_lr = 2639884295, + //window_rm = 3523659197, + //window_rr = 2355575415, + + //fblade_1fast = 1032498025, + //fblade_2fast = 930609265, + //fblade_2mod = 2573434709, + //fblade_3fast = 411536741, + //fblade_3mod = 879315983, + //mod_aa = 3843353624, + //mod_ab = 3135215534, + //mod_ac = 3364434689, + //mod_ad = 2723112578, + //mod_ae = 2970026993, + //mod_af = 2245832093, + //mod_ag = 2492156666, + //mod_ah = 1765012564, + //mod_ai = 2014155263, + //mod_aj = 1286290243, + //mod_ak = 1535367412, + //mod_col_14 = 1573326728, + //mod_col_15 = 1862676998, + //mod_col_16 = 1044598917, + //rblade_1fast = 451472348, + //rblade_1mod = 4141162370, + //rblade_2fast = 3599310922, + //rblade_2mod = 1768767594, + //rblade_3fast = 3929521030, + //rblade_3mod = 1496111458, + //turret_a1 = 3992710274, + //turret_a2 = 1077448950, + //turret_a3 = 1382757723, + //turret_a4 = 614062521, + //turret_b1 = 3783807571, + //turret_b2 = 2839830988, + //turret_b3 = 3138651499, + //turret_b4 = 2400824695, + + + + + ACTION_TABLE_BRANCHES = 873568416, + ACTION_TABLE_DAMAGES = 595808921, + ACTION_TABLE_DEFINITIONS = 1586102416, + ACTION_TABLE_FACIAL_ANIM_SETS = 2229907729, + ACTION_TABLE_HOMINGS = 322779061, + ACTION_TABLE_IMPULSES = 3648540414, + ACTION_TABLE_INTERRELATIONS = 1160967041, + ACTION_TABLE_RESULTS = 1389081087, + ACTION_TABLE_RUMBLES = 2747161193, + ACTION_TABLE_STEALTH_KILLS = 607800534, + ACTION_TABLE_STRIKE_BONES = 2040342322, + ACTION_TABLE_VFX = 387140454, + AF_AimDirect = 860304717, + AF_AtEdge = 3386029841, + AF_CAN_DIVE = 1665251515, + AF_Center = 3392782621, + AF_EnterLeft = 3822780995, + AF_FaceLeft = 754232761, + AF_Low = 4105818928, + AF_Scope = 2989860387, + AF_ToLow = 569621039, + AF_ToPeek = 1740709742, + AIEnterCoverClips = 102329791, + AIEnterTransitionClips = 2915894063, + AIOneHandedAimingClipSetId = 1351184833, + AIOnlyReactionRangeScaleFactor = 1284602455, + AIStandEnterCoverClips = 3619734025, + AITimeBetweenLookAtsFailureMax = 825960985, + AITimeBetweenLookAtsFailureMin = 1036503478, + AITimeWaitingToCrossRoadMax = 242751779, + AITimeWaitingToCrossRoadMin = 299126851, + AITwoHandedAimingClipSetId = 1837001601, + AI_IdleTurnRate = 985371239, + AI_MBRAcceleration = 2741511192, + AI_MBRDeceleration = 3394605993, + AMBIENT_PED_MODEL_SET_FILE = 2585891657, + AMBIENT_PROP_MODEL_SET_FILE = 1221077490, + AMBIENT_VEHICLE_MODEL_SET_FILE = 2488014020, + APF_ADDITIVE = 332392317, + APF_BLOCK_HEAD_IK = 1871501357, + APF_FACIAL = 1706286383, + APF_ISFINISHAUTOREMOVE = 3723366928, + APF_UPPERBODYONLY = 3541611037, + APF_USE_SECONDARY_SLOT = 2933717348, + AUDIO_CURVEDATA = 2270570848, + AUDIO_LEGALS = 980984444, + AUDIO_NAME = 1792396879, + AUTOGYRO = 2983251618, + AbandonDistance = 3316020555, + AbortAimedAtMinDistance = 2471124155, + AccelRate = 1799363495, + Acceleration = 455772583, + AccelerationBased = 1199000829, + AccelerationForce = 4142316102, + AccelerationLimit = 2807887859, + AccelerationScaleBike = 1717140709, + AccelerationSmoothing = 946605886, + AccelerationSmoothingBike = 1058383858, + AccelerationToStartLeaning = 3976993041, + ActionBlendInDuration = 1593645740, + ActionClipRate = 2230131245, + ActionCombatAlignRate = 1946397601, + ActionModeTime = 258368020, + ActionSets = 4009202106, + ActionsHandcuffedNetworkId = 2803702095, + AddPedGenBlockedArea = 3664766217, + AddToBaseStuckOnVehicleSets = 4027713155, + AdditionalDistanceForApproach = 3311720447, + AdditionalDistanceForStrafe = 3249320190, + AdditionalModifier = 3164975884, + AdditionalSpeedCap = 3139639651, + AdditionalWindscreenRagdollForceFwd = 1948944372, + AdditionalWindscreenRagdollForceUp = 3235771585, + Adjustment = 1514279376, + Adjustments = 4147768898, + AdvanceDistanceSquared = 898987704, + AdvanceUseTimeRandomMaxProportion = 652219771, + AggressiveMove = 625597120, + Agility = 3039521267, + AgitatedPersonality = 3499834918, + AgitationTriggers = 1849624842, + Ai = 237851371, + AiAimIntroCloseEnoughTolerance = 295831481, + AiClearedVehicleDelay = 2616874064, + AiClearedVehicleSmartFallDelay = 2452951318, + AiEntryHalfAngleTolerance = 2527222356, + AiEntryMaxRate = 976189127, + AiEntryMinRate = 2645460108, + AiMoverFixupMaxExtraHeadingChange = 3215816764, + AimAssistBlendInTime = 505547665, + AimAssistBlendOutTime = 3649321767, + AimAssistCapsuleMaxLength = 134284951, + AimAssistCapsuleRadius = 2827935386, + AimAssistDistanceCurve = 390534438, + AimBehaviourEnvelopeRef = 2238897248, + AimDirectlyMaxAngle = 3060249921, + AimDistance = 3825720952, + AimFov = 3154554341, + AimIntroClips = 1512682432, + AimIntroMaxAngleChangeRate = 1952772149, + AimIntroMaxPhaseChangeRate = 2752952312, + AimIntroMaxTimedOutPhaseChangeRate = 3521301980, + AimIntroMinPhaseChangeRate = 1545452032, + AimIntroRateForAi = 3231686180, + AimIntroTaskBlendOutDuration = 473976041, + AimOutroDelayTime = 2973722662, + AimOutroMinTaskTimeWhenRunPressed = 2511610049, + AimOutroRateForAi = 1089147792, + AimOutroTime = 1822973195, + AimOutroTimeIfAimingOnStick = 1768561713, + AimPoses = 877489286, + AimSensitivityScalingLimits = 1539206266, + AimTurnCosAngleTolerance = 2821466544, + Aiming = 3260617242, + AimingOnStickCooldownMs = 1466310013, + AimingOnStickExitCooldown = 2412774208, + AimingSettings = 85936843, + AirResistanceOption = 220567909, + AlignSuccessMaxDist = 2661149439, + AlignmentConeAngle = 3992317122, + AlignmentConeAngleWithTrailer = 3365340087, + AlignmentConeOffsetTowardsVehicleFrontAngle = 1160959405, + AllowArmouredKnockdown = 3717266986, + AllowArmouredLegShot = 1779515548, + AllowDriveToGetup = 2492839498, + AllowDriverLockOnToAmbientPeds = 3783727678, + AllowDriverLockOnToAmbientPedsInSP = 3215957770, + AllowEntryToMPWarpInSeats = 4265363743, + AllowIgnoreAsLowPriority = 3215420778, + AllowMovingArmedMeleeAttack = 2144745273, + AllowNonPlayerHighFallAbort = 4255515242, + AllowOffScreenHighFallAbort = 992799658, + AllowPitchAndRoll = 3861069366, + AllowPlayerStunned = 3993091983, + AllowPursuePlayer = 1975950903, + AllowRoadCrossHurryOnLightChange = 3260171409, + AllowScanningEvenIfPreviouslyReacted = 3118021097, + AllowSlowCruisingWithMusic = 2380425018, + AllowSoftLockFineAim = 297555324, + AllowWarningActivations = 4197576600, + AllowWhenBalanced = 2018281497, + AlternateControlStickInputThreshold = 3417116793, + AlternativeAnimBlockedHeight = 3876119945, + AlwaysUse = 715231316, + AmbientAnimLengthBuffer = 1095839119, + AmbientAudio = 3268464789, + AmbientEventLifetime = 1941376054, + AmbientEventType = 1507389089, + AmountPinnedDownByBullet = 866380197, + AmountPinnedDownByDamage = 3456533073, + AmountPinnedDownByWitnessKill = 1098445330, + AmplitudeLimits = 2371650129, + AmplitudeNoise = 312484959, + AmplitudeScale = 2919368248, + AngleDelta = 737052146, + AngleDifferenceForMax = 2207962562, + AngleDifferenceForMin = 3784903261, + AngleForMax = 760576493, + AngleForMin = 485092302, + AngleForRunway = 2103581552, + AngleOfCoverWeighting = 2472038331, + AngleScalingFactor = 1160632805, + AngleToCameraWeighting = 1431242126, + AngleToCoverWeighting = 647728646, + AngleToDynamicCoverWeighting = 3402563167, + AngledArea = 2592513975, + AngledAreas = 3530189928, + AngledClimbScaleVelocityExtensionMax = 2762624828, + AngledClimbTheshold = 3158074083, + AngularVelocityLimits = 1247412006, + AnimMode = 1881596949, + AnimPostFXManager = 4209092714, + AnimalBodyScale = 3667685650, + AnimalPelvisScale = 4074006169, + AnimatedPostFX = 3205113395, + AnkleAndWrist = 3435621206, + ApplyPedScale = 1737474230, + ApplyRotationScaling = 142881218, + ApplyTranslationScaling = 2981016968, + ApplyVehicleScale = 3650822252, + ApproachTarget = 432947414, + ApproachingPlayerCosineThreshold = 372581586, + ApproachingPlayerDistanceThreshold = 1461747338, + ApproachingPlayerModifier = 2714692767, + ApproachingTargetVehicleHoldFireDistance = 1135781765, + AquaticSpawnDepth = 798871205, + AquaticSpawnMaxHeightAbovePlayer = 1856882404, + Arc = 1995960590, + ArcRadius = 1686516854, + ArcStatus = 743861760, + ArmShot = 3674358794, + ArmourEfficiency = 3330066831, + Armoured = 264772538, + ArmouredBonus = 81171216, + ArmouredRapidHitCount = 3537415104, + Army = 2552595859, + ArrestDistance = 684815089, + ArrestDot = 1800609114, + ArrestHardLockDistance = 1845591318, + ArrestInVehicleDistance = 1433360068, + ArrestProbeDistance = 4096940896, + AspectRatio = 69123357, + AssetName = 2112595704, + AssistanceAngle = 763241052, + AssistedAimCamera = 4068186391, + AssistedAimInterpolateInDuration = 4032674616, + AssistedAimOutroTime = 4243324346, + AtEdgeAnimStateInfos = 1367701780, + AttachBoneTag = 575433612, + AttachOffset = 3651374867, + AttachOffsetX = 1914687253, + AttachOffsetY = 1407750823, + AttachOffsetZ = 1694184652, + AttachOrientationX = 2711684267, + AttachOrientationY = 2941689878, + AttachOrientationZ = 1795856235, + AttachParentHeightRatioToAttain = 2070771362, + AttachParentHeightRatioToAttainInTightSpace = 2923457671, + AttachParentHeightScalingForCameraRelativeVerticalOffset = 2685248219, + AttachParentHeightScalingForCameraRelativeVerticalOffset_AfterAiming = 3654232577, + AttachParentHeightScalingForExtraCameraRelativeVerticalOffset = 3987821886, + AttachParentInAirEnvelopeRef = 1789219851, + AttachParentMatrixForRelativeOrbitSpringConstant = 2521592812, + AttachParentMatrixForRelativeOrbitSpringDampingRatio = 4067016949, + AttachParentRelativeHeading = 10648206, + AttachParentRelativePitch = 3436942647, + AttachParentRollDampingPitchHardLimits = 1356521412, + AttachParentRollDampingPitchSoftLimits = 4039533147, + AttachParentRollSpringConstant = 293341517, + AttachParentRollSpringDampingRatio = 3607038158, + AttachParentUpwardSpeedScalingInAirEnvelopeRef = 2960196386, + AttachParentUpwardSpeedScalingOnGroundEnvelopeRef = 2224847663, + AttachParentWidthScalingForCameraRelativeSideOffset = 142271562, + AttachPart = 2289273332, + AttachPedPelvisOffsetSpringConstant = 1148495425, + AttachPedPelvisOffsetSpringDampingRatio = 536202543, + AttachRelativeOffset = 3718710002, + AttackDelay = 1512162309, + AttackDuration = 75961662, + AttackStrengthMax = 3806042807, + AttackStrengthMin = 2502152653, + AudioReactionRange = 17870529, + AutomaticHeadShot = 478190306, + AutomaticInitialSnapMult = 1689181219, + AutomaticNeckShot = 451773670, + AutomobileSpeedModifier = 2432019232, + AvoidNearbyPedDotThreshold = 2430060993, + AvoidNearbyPedHorizontal = 2710536525, + AvoidNearbyPedVertical = 868109097, + AvoidOffsetXY = 2249292417, + AvoidOffsetZ = 2919714320, + AvoidanceMarginForOtherLawEnforcementVehicles = 48543250, + AvoidanceProbeInterval = 3847609025, + AvoidanceProbeLength = 715859273, + AvoidanceProbePullback = 3266740728, + AvoidanceSteerAngleDegrees = 3581037895, + Avoids = 394023184, + AwardParachuteJumpDistanceA = 3004548533, + AwardParachuteJumpDistanceB = 3235406138, + AwardParachuteJumpTime = 1740411412, + AwardVehicleJumpDistanceA = 3662021366, + AwardVehicleJumpDistanceB = 2301583602, + AwardVehicleJumpTime = 1801522365, + AxesFacingTolerance = 1858039250, + BACKGROUND_SCRIPT_FILE = 1197964820, + BCRExclusionZone = 3968865312, + BC_Randomize = 4235841451, + BC_Retain = 2165534923, + BF_AGGRESSIVE_AFTER_RUNNING_PED_OVER = 4159638386, + BF_ARGUMENTATIVE = 168692563, + BF_CAN_ACCELERATE_IN_CAR = 1160283338, + BF_CAN_FLEE_WHEN_HIT_BY_CAR = 687848862, + BF_CAN_GET_OUT_WHEN_HIT_BY_CAR = 2997524846, + BF_CONFRONTATIONAL = 1200956848, + BF_DONT_FORCE_FLEE_COMBAT = 1196718962, + BF_DONT_RUN_ON_MELEE_ATTACK = 914958829, + BF_DONT_SAY_PANIC_ON_FLEE = 640530450, + BF_GET_PISSED_WHEN_HIT_BY_CAR = 4164385006, + BF_INTERVENE_ON_MELEE_ACTION = 294976751, + BF_INTIMIDATE_PLAYER = 2849017488, + BF_LIMIT_COMBATANTS = 4202267286, + BF_PLAY_CAR_HORN = 3634362686, + BF_PURSUE_WHEN_HIT_BY_CAR = 985531983, + BF_REACT_ON_COMBAT = 3501709025, + BF_WATCH_ON_CAR_STOLEN = 1317922943, + BIG_REACTION = 3804705025, + BUILDING_META_DISPLACEMENT_FILE = 1815909929, + BackHeadingInterpRate = 1673427683, + BackOffTimer = 3890964100, + BackShot = 3495314353, + BadRoute = 1572599387, + BadRouteValue = 3663294436, + Base = 212355988, + BaseAttachVelocityToIgnoreEnvelopeRef = 60641442, + BaseClipId = 1993756531, + BaseFov = 1865815245, + BaseFovToEmulateWithFocalLengthMultiplier = 3921296525, + BaseHeading = 2985933428, + BaseMotionBlurStrength = 652273141, + BaseNearClip = 2755051531, + BaseOrbitPitchOffset = 1778852906, + BaseOrbitPitchOffsetInTightSpace = 158553507, + BasePivotHeightScalingForFootRoom = 1397182427, + BasePivotPosition = 1065618425, + BaseTimeToLook = 2905104124, + BasicObjectScore = 1313622498, + BasicPedScore = 835021064, + BasicVehicleScore = 3463312294, + BeJackedBlendInDuration = 2885633587, + BehindPedModifier = 214316948, + BehindPedToCoverCosTolerance = 1216157443, + BehindRotateAngleLookAhead = 3025087075, + BehindTargetAngle = 2688788428, + BehindThreshold = 692748984, + BeingPushedOnGroundTooLongMS = 952442515, + BiasSide = 1744405318, + BiasSideTime = 2827348378, + BicycleDepletionMaxMult = 3428727331, + BicycleDepletionMidMult = 4027241659, + BicycleDepletionMinMult = 2709145468, + BicycleDrivebyFilterId = 939946101, + BicycleEnterForce = 1607735267, + BicycleInverseMassScales = 3654250561, + BicycleMaxDepletionLimit = 1171875727, + BicycleMidDepletionLimit = 2465303084, + BicycleMinDepletionLimit = 4176468490, + BicycleVelocityToUseAnimatedJumpOff = 2218133629, + BikeDrivebyFilterId = 3931552272, + BikeEnterForce = 356015597, + BikeEnterLeanAngleOvershootAmt = 1348653070, + BikeEnterLeanAngleOvershootRate = 114247175, + BikeExitForce = 3130040539, + BikeHornClipId = 1786685138, + BikeInAirDriveToStandUpTimeMax = 4108731380, + BikeInAirDriveToStandUpTimeMin = 333974259, + BikeInverseMassScales = 3619347977, + BikeMaxRestoreDuration = 4019573548, + BikeMinRestoreDuration = 1929662760, + BikePickUpAlignBlendDuration = 3899294511, + BikePitchSmoothingPassengerRate = 1515003340, + BikePitchSmoothingRate = 4270612236, + BikeVehicleMinPhaseToStartRotFixup = 4059105444, + BikeVelocityToUseAnimatedJumpOff = 553575729, + BirdHeightMapDeltaMax = 1961626874, + BirdHeightMapDeltaMin = 597953858, + BirdSpawnXYRangeMax = 2777866816, + BirdSpawnXYRangeMin = 3368483780, + Bitmap = 3540307690, + BlanketForceScale = 4071693543, + BlendDuration = 2387941002, + BlendDurationForEarlyOut = 4197363947, + BlendInDeltaForPed = 1293637123, + BlendInDeltaForProp = 639648672, + BlendInSpringConstant = 2111282409, + BlendLevel = 42409501, + BlendOut = 4265715862, + BlendOutDelayBalanceFailed = 2382871963, + BlendOutDelayStanding = 3295848876, + BlendOutDuration = 1231407173, + BlendOutPhase = 3550098093, + BlendOutSpringConstant = 165735146, + BlendOutThreshold = 124792981, + BlendToIdleTime = 2500851482, + BlendoutPhase = 160395732, + BlindFireAnimStateNewInfos = 2740917805, + BlindFireHighCoverMaxPitchLimit = 3950076744, + BlindFireHighCoverMinPitchLimit = 1565596444, + Block = 2210395489, + BlockOffscreenShotReactions = 83217879, + BlockingAreas = 20824415, + BloomMax = 3093400296, + BoatMaxAvoidanceAngle = 26476902, + BoatTargetArriveDist = 3249924134, + BodyWrithe = 1990395340, + BoneRelativeAttachOffset = 2842669433, + Bonus = 2733810571, + BottomComponent = 2168296036, + BottomSpread = 4172681798, + Bound = 2111641000, + BoundAnkles = 4148786995, + Brake = 3493497994, + BrakeControl = 2512256335, + Braking = 3150145630, + BrakingDifferenceForLinearVZMax = 4258663913, + BrakingDifferenceForLinearVZMin = 3149009694, + Bravery = 2511674669, + BraveryTypes = 1481182292, + BreakAttachmentMoveSpeedThreshold = 3465127340, + BreakAttachmentOrientationThreshold = 365892591, + BringVehicleToHaltDistance = 157002911, + BuddyShot = 1747672916, + BufferDistance = 2084497360, + BumpedByCar = 19643947, + BumpedByCarFriendly = 1912045929, + BumpedByObject = 3428812559, + BumpedByPed = 3386895833, + BumpedByPedFriendly = 121419715, + BumpedByPedIsQuadruped = 1002558306, + BumpedByPedMinDotVel = 1234302495, + BumpedByPedMinVel = 974350285, + BumpedByPedRagdoll = 2004593632, + BumpedByPlayerRagdoll = 1980284711, + BumperOverlapForMaxSpeed = 3083236924, + BumperOverlapForMinSpeed = 2926405391, + BumperOverlapToBeInPosition = 1688870175, + BuoyancySettings = 1991191506, + BurnOutBlendInSpeed = 514772223, + BurnOutBlendInTol = 4038428233, + BurnOutBlendOutSpeed = 765288989, + BurnOutClipId = 1402571365, + BurstFireInitialSnapMult = 2148964650, + CAMERA_METADATA_FILE = 2801332849, + CAssassinsDispatch__Tunables = 3584713396, + CCompEntityAnims = 1980345114, + CCompEntityEffectsData = 3430328684, + CCoverTuningFile = 3016688820, + CCreditArray = 1998252412, + CF_ALLOWED_COP_PURSUIT = 491616304, + CF_JACKING = 2861521524, + CFriendlyIssues = 754458458, + CHINESE_SHUFFLING_CHECKS_FILE = 1244900227, + CINEMATIC = 3839202812, + //CInteriorBoundsFiles = 741495440, + COLLAR = 87075802, + COMImpulseComponent = 3129842207, + COMImpulseMaxRootVelocityMagnitude = 2681040368, + COMImpulseOnlyWhileBalancing = 2187976068, + COMImpulseScale = 3040120990, + CONTENTS_DEBUG_ONLY = 2652598047, + CONTENTS_MAX = 1137770612, + CONTROLLER_LABELS_FILE = 1309368403, + CONTROLLER_LABELS_FILE_360 = 648947982, + CONTROLLER_LABELS_FILE_PS3 = 2127547113, + CONTROLLER_LABELS_FILE_PS3_JPN = 2324879915, + CPedPropInfo = 2858946626, + CPedPropMetaData = 94549140, + CPedSelectionSet = 253191135, + CPedVariationInfo = 376833625, + CPlantInfo = 1982133670, + CPlayerSpecialAbilityManager = 2688740668, + CPopulationGroup = 1530774378, + CSlownessZoneManager = 3721180525, + CTCCapsuleRadius = 3651490612, + CTCClearanceCapsuleEndForwardOffset = 3077258891, + CTCClearanceCapsuleEndZOffset = 2044226047, + CTCClearanceCapsuleRadius = 837246042, + CTCClearanceCapsuleStartForwardOffset = 4089643980, + CTCClearanceCapsuleStartZOffset = 1328526529, + CTCDepthDistanceCompletionOffset = 148125195, + CTCForwardOffset = 3036685456, + CTCHeightOffset = 1038229473, + CTCMinDistance = 348835470, + CTCProbeDepth = 3727526506, + CTCSideOffset = 2512599606, + CTCSpacingOffset = 4258697085, + CTaskBirdLocomotion__Tunables = 1099459847, + CTaskCuffed__Tunables = 918124422, + CTaskInCustody__Tunables = 2117468048, + CTuningFile = 2828759280, + CVA_WHEEL_REAR_LEFT = 3148884390, + Calculation = 3703855515, + CamAttachPositionWeights = 1291841671, + CamToCoverDirCosAngleTol = 588986036, + CamToPedDirCosAngleTol = 1553721673, + CameraDirToCoverMinDot = 4218123581, + CameraLookAtBlendRate = 3198525203, + CameraLookAtRotationLimit = 3701159057, + CameraLookAtTurnRate = 3589690545, + CameraRef = 1055059023, + CameraRelativeSideOffset = 1032707911, + CameraRelativeVerticalOffset = 1114870307, + CameraSettings = 3095142060, + CameraWeighting = 3990545757, + Cameras = 1331283328, + CanBePaused = 1966573275, + CanCallPolice = 3833488932, + CanStealCarsAtLights = 3908221492, + CanStealParkedCars = 3993007617, + CanStealPlayersVehicle = 3564233674, + CanStealStationaryCars = 1365518895, + CanUseForReactions = 2426586936, + CapsuleHitForce = 883555571, + CapsuleLengthForDetection = 322237759, + CapsuleSettings = 2803013276, + CapsuleVehicleHitTuning = 1834701470, + CarSirenModifier = 3642651832, + CatchFall = 4093402329, + CatchFallHeightThresholdClipPose = 1581787136, + CatchFallHeightThresholdRollUp = 2088499253, + CatchFallHeightThresholdWindmill = 3140918872, + CatchFallRelaxHeight = 4249251885, + CatchUpHelperRef = 1443569911, + CatchUpSpeed = 730064409, + CausesRumbleWhenCollidesWithPlayer = 2821566375, + CausesVehicleAvoidance = 1030055336, + ChanceForGutShotKnockdown = 3055246492, + ChanceOfFallToKneesAfterLastStand = 4015640822, + ChanceOfFallToKneesOnCollapse = 3769959610, + ChanceOfFilmingEventOnPhoneIfWatching = 4002374438, + ChanceOfPedSeeingCarFromBehind = 315595788, + ChanceOfWatchRatherThanHurryAway = 273885309, + ChancePlayingCustomBackAwayAnimBigReact = 2458557466, + ChancePlayingCustomBackAwayAnimSmallReact = 1713122871, + ChancePlayingInitalTurnAnimBigReact = 551070027, + ChancePlayingInitalTurnAnimSmallReact = 1757042582, + ChanceToDeleteOnExitVehicle = 1276762529, + ChancesForHesitate = 1095332633, + ChancesForSwerve = 1825428191, + ChancesToApplyReactionWhenShootingOutTire = 4058868243, + ChancesToCallPolice = 2723841400, + ChancesToDive = 3174431501, + ChancesToFlipOff = 2395375846, + ChancesToForceWaitInFront = 987604024, + ChancesToHonk = 4171049765, + ChancesToHonkHeldDown = 1871327732, + ChancesToIntimidateArmedTarget = 2212321440, + ChancesToIntimidateUnarmedTarget = 2214254758, + ChancesToReactForGunAimedAt = 1942207582, + ChancesWhenBuddyKilledWithScaryWeapon = 52194177, + ChangeRatesForParachuting = 2700491627, + ChangeRatesForSkydiving = 143335713, + ChangeStationClipId = 2867244273, + CharacterLight = 1142553590, + ChargeTuning = 612012739, + Chase = 2342544226, + Cheat = 766857224, + CheatPowerIncreaseForMatchSpeed = 3640126549, + CheckForMovingGround = 2224677187, + ChestForce = 2102302469, + ChestForcePitch = 347021105, + CinematicContexts = 1387858, + CircleRotateAngleLookAhead = 2760165709, + CircleTestRadii = 1409114490, + CircleTestsMoveDistToTestNewPos = 3404462, + CirclingAngularSpeed = 4190486872, + CirclingMBR = 4203587509, + ClampImpulse = 1180195582, + ClavicleImpulseScale = 1905000551, + ClearVehicleTimeMS = 4245738856, + ClearZ = 2795607090, + ClearedVehicle = 3612199348, + ClimbAlignTolerance = 3652074424, + ClimbingOrJumpingPedModifier = 2209113178, + ClipId = 1300775131, + ClipSetForCasual = 2787113182, + ClipSetForIntro = 2755047550, + ClipSetForRuns = 4017342285, + ClippingAvoidance = 185739126, + Clips = 3647518623, + ClonePlayerBumpedByCarActivationModifier = 1036094636, + ClonePlayerBumpedByCloneCarActivationModifier = 2745991583, + CloseDistance = 2443685244, + CloseDoorForceMultiplier = 2238708643, + ClosePlayerDistanceThreshold = 2302698674, + ClosePlayerModifier = 2278997613, + ClosePlayerSpeedupDistanceSquaredThreshold = 2385841716, + ClosePlayerSpeedupTimeThreshold = 1980022811, + ClosePointCounterMax = 2874710517, + ClosePointDistanceSquared = 2832422495, + CloseSpawningViewMultiplier = 3846222437, + ClosestPointToLineBonusModifier = 1432381156, + ClosestPointToLineDist = 3770142196, + CockGunWeaponClipId = 2737802101, + Collision = 2519270732, + CollisionFallBackPosition = 340312382, + CollisionLosHeightOffset = 706571699, + CollisionProbe = 961255660, + CollisionRef = 3424608737, + CollisionRootPositionFallBackToPivotBlendValue = 4279727627, + CollisionRootPositionSpringConstant = 3507950586, + CollisionRootPositionSpringDampingRatio = 3397058689, + CollisionSettings = 3762874292, + CollisionTestRadiusSpringConstant = 551575094, + CollisionTestRadiusSpringDampingRatio = 1557769430, + Colour = 3346932687, + CombatAlignRate = 1557395660, + CombatEntryBlendDuration = 2555911368, + CombatLoitering = 3029474439, + CombatOpenDoorClipId = 118829386, + ComeBackInWhenAimDirectChangeInHighCover = 4276335920, + CompletionRadius = 1468879986, + Constant = 2414966970, + Constraints = 1591913012, + Contact = 3061072832, + ContinuousContactTime = 1174887920, + ContinuousGapHighFallTime = 1425777632, + ControlDebugBeginAngle = 1147737070, + ControlDebugEndAngle = 2904615002, + ControlDebugRadius = 2886272257, + ControlDebugXPos = 3419184861, + ControlDebugYPos = 3872178927, + ControlHelperRef = 2884954151, + CopInVehicleVisualReactionRange = 2651939713, + Cops = 1528396268, + CoreAIMotionClipSetId = 2782502123, + CoreMotionClipSetId = 2878139548, + CoreWeaponClipSetId = 1024291853, + CornerExitClips = 353989914, + CornerExitHeadingModifier = 2292594697, + CoverAimOffsetFromBlocked = 2495484427, + CoverDirToCameraWeightMax = 302988723, + CoverDirToCameraWeightMaxAimGun = 428630826, + CoverDirToCameraWeightMaxScaleDist = 3645928265, + CoverDirToCameraWeightMin = 2777705971, + CoverEntryHeadingReachedTol = 647951209, + CoverEntryMaxDirectDistance = 1608065887, + CoverEntryMaxDistance = 1307601741, + CoverEntryMaxDistanceAI = 3523536193, + CoverEntryMinAngleToScale = 3426925695, + CoverEntryMinDistance = 1391743069, + CoverEntryMinDistanceAI = 4070109213, + CoverEntryMinTimeNavigatingAI = 1162149057, + CoverEntryPositionReachedTol = 1436746072, + CoverEntryRateAI = 2901436256, + CoverEntryRatePlayer = 443908416, + CoverEntryShortDistanceAI = 14209833, + CoverEntryShortDistancePlayer = 1607017826, + CoverEntryStandDistance = 1011440787, + CoverEntryStandStrafeDistance = 1748900014, + CoverHeadingCloseEnough = 488807312, + CoverHeadingCloseEnoughTurn = 52868234, + CoverLeftFireModifier = 3014744113, + CoverLeftFireModifierLow = 4019978349, + CoverLeftIncreaseModifier = 314817266, + CoverMaxDistance = 4142738100, + CoverMinDistance = 417867439, + CoverPoint = 2523520621, + CoverPoints = 3053199956, + CoverPositionCloseEnough = 2380669878, + CoverResponseTimeout = 2346320415, + CoverRightFireModifier = 3586592245, + CoverRightFireModifierLow = 1508442808, + CoverRightIncreaseModifier = 1620272884, + CoverSettings = 3780197314, + CoverStepClipSetId = 2450446524, + CoverToCoverAngTol = 1570059814, + CoverToCoverAnimStateInfos = 3577768695, + CoverToCoverClipRate = 1687761193, + CoverToCoverDistTol = 2125677956, + CoverToCoverDuration = 462269180, + CoverToCoverEdgeTestEndYOffset = 545166509, + CoverToCoverEdgeTestStartYOffset = 2470298407, + CoverToCoverMaxAccel = 3143775651, + CoverToCoverMaxAngToStep = 446471957, + CoverToCoverMaxDistToStep = 19390938, + CoverToCoverMaxRotScalePhase = 372008448, + CoverToCoverMaxScalePhase = 4228398614, + CoverToCoverMinAng = 2651943117, + CoverToCoverMinAngToScale = 3382987159, + CoverToCoverMinDepthToScale = 1009232455, + CoverToCoverMinDistToScale = 483457094, + CoverToCoverMinRotScalePhase = 321218444, + CoverToCoverMinScalePhase = 2919445883, + CoverToCoverSmallAnimDist = 392526062, + CoverWeightDistance = 3336702639, + CoverWeightUsage = 3908973904, + CoverWeightValue = 2465106291, + CoveredInBloodPlayerModifier = 1573945112, + CoweringForeverDeleteOffscreenTimeMS_MAX = 263563417, + CoweringForeverDeleteOffscreenTimeMS_MIN = 1966243013, + CrashLanding = 3151745571, + CriminalVehicleMinStartSpeed = 4063126636, + Criminality = 3808740257, + CriminalityTypes = 1643851287, + CrouchedLeftFireOffset = 3453306812, + CrouchedOrLowCover = 3072964466, + CrouchedRightFireOffset = 2533938546, + CruiseDuckPrepLeftBikeClipId = 1163109918, + CruiseDuckPrepLeftCharClipId = 733218, + CruiseDuckPrepRightBikeClipId = 1089195126, + CruiseDuckPrepRightCharClipId = 1933131499, + CruisePedalCharClipId = 196702567, + CruiseSpeed = 2895901568, + CruiseSpeedForStrafe = 2482756980, + CruiseSpeedMultiplierForBackOff = 3659936455, + CruiseSpeedMultiplierForMaxBackOffDistance = 2134482011, + CruiseSpeedMultiplierForMaxSlowdown = 2690108566, + CruiseSpeedMultiplierForMinBackOffDistance = 3537928320, + CruiseSpeedMultiplierForMinSlowdown = 2016261853, + CruiseSpeedWhenClose = 587550606, + CruiseSpeedWhenObstructedByLawEnforcementPed = 1914453083, + CruiseSpeedWhenObstructedByLawEnforcementVehicle = 1604976859, + Current = 2479092473, + CurrentHeading = 413002367, + CurveSets = 4116334946, + CustomBoundingBoxSettings = 1022007033, + CustomCollisionOriginRelativePosition = 4155454260, + CustomOrbitDistanceLimitsToForce = 1828892401, + CustomSettings = 2827051945, + CutsceneBlendSpringConstant = 777008740, + CutsceneBlendSpringDampingRatio = 2366444870, + CycleTargetAngularLimit = 1394170274, + CycleTargetAngularLimitMelee = 3789965859, + DEFAULT_TASK_DATA_FILE = 2701401283, + DEFORMABLE_OBJECTS_FILE = 3996479808, + DEVINS_SNOWLIGHT = 1635759186, + DISABLE_FILE = 3897970480, + DISPATCH_DATA_FILE = 1977530558, + DRIVER_RULES_STD_FILE = 4292163424, + DSP_AERIAL = 3148113674, + DSP_AQUATIC = 1563097128, + DSP_GROUND_WILDLIFE = 2099691605, + DamageMotionBlurDuration = 304164673, + DamageMotionBlurMaxDamage = 938189370, + DamageMotionBlurMaxStrength = 1317618698, + DamageMotionBlurMinDamage = 3242284698, + DampenRootTargetHeight = 1671878115, + DampenRootTargetWeight = 794209155, + DampeningForce = 1129875775, + Dead = 2865917470, + DeadFallOutClipId = 1583960251, + DeadZoneAnyInputDirection = 1699227528, + DeadZoneStickNorm = 3681430863, + DebugDisplayAlwaysUseEventPosition = 387027865, + DebugDisplayListPlayerInfo = 1307368391, + DebugDraw = 2418474749, + DebugLockOnTargets = 3853036348, + DebugSwapInstantly = 2950978586, + DebugTargetting = 4090546975, + Decay = 398571259, + DecayDuration = 1826449020, + DecayRate = 1564203967, + Deceleration = 1627413096, + DeepWaterThreshold = 3940110369, + DefaultAlignEndFixupPhase = 1305634921, + DefaultAlignRate = 2555216789, + DefaultAlignStartFixupPhase = 717764835, + DefaultAmnestyTime = 1730819989, + DefaultBackwardsProjectionRange = 4112548279, + DefaultBeJackedAlivePedFromOutsideClipId = 3819225408, + DefaultBeJackedAlivePedFromWaterClipId = 3745870995, + DefaultBeJackedAlivePedOnVehicleClipId = 2307365987, + DefaultBeJackedAlivePedOnVehicleIntoWaterClipId = 2347965860, + DefaultBeJackedDeadPedFromOutsideClipId = 2626413479, + DefaultBeJackedDeadPedFromWaterClipId = 542641977, + DefaultBeJackedDeadPedOnVehicleClipId = 988275496, + DefaultBeJackedDeadPedOnVehicleIntoWaterClipId = 824689766, + DefaultChanceOfStandingWhileMoving = 3714303368, + DefaultClimbDownClipId = 2758806077, + DefaultClimbDownNoDoorClipId = 374589004, + DefaultClimbUpClipId = 2993991731, + DefaultClimbUpNoDoorClipId = 4167965920, + DefaultCloseDoorEndIkPhase = 932416743, + DefaultCloseDoorEndPhase = 444144670, + DefaultCloseDoorStartIkPhase = 3092993621, + DefaultCloseDoorStartPhase = 2181733270, + DefaultCrashExitOnSideClipId = 828622422, + DefaultCrouchingPose = 607364341, + DefaultDistanceFromWorldCenter = 2251904831, + DefaultEdgeTurnBlendDuration = 3203547922, + DefaultFleeExitClipId = 1085529957, + DefaultForcedEntryClipId = 4187378175, + DefaultFov = 1391977192, + DefaultGetInClipId = 1776336338, + DefaultGetOutBlendDuration = 3739360652, + DefaultGetOutClipId = 1983795837, + DefaultGetOutNoWindBlendDuration = 2470385571, + DefaultGetOutNoWingId = 90808597, + DefaultGetOutOnToVehicleClipId = 2498096438, + DefaultGetOutToWaterClipId = 4109561514, + DefaultHiddenEvasionTimeReduction = 115496620, + DefaultImpactBikeClipId = 2443433960, + DefaultImpactCharClipId = 628124008, + DefaultInverseMassScales = 1575645985, + DefaultJackAlivePedFromOutsideClipId = 2624279103, + DefaultJackAlivePedFromWaterClipId = 2379662115, + DefaultJackDeadPedFromOnVehicleClipId = 1982208210, + DefaultJackDeadPedFromOutsideClipId = 1755247816, + DefaultJackDeadPedFromWaterClipId = 2061479056, + DefaultJackDeadPedOnVehicleIntoWaterClipId = 3508843174, + DefaultJackPedFromOnVehicleClipId = 807201844, + DefaultJackPedOnVehicleIntoWaterClipId = 1866652328, + DefaultJackRate = 4256000061, + DefaultJumpOutClipId = 1640661523, + DefaultKillShotImpulseMult = 1035940220, + DefaultLookAtThreshold = 2539614217, + DefaultMPKillShotImpulseMult = 3207843175, + DefaultMPRapidFireKillShotImpulseMult = 3825480237, + DefaultMaxRotationScalingValue = 3714157750, + DefaultMaxTranslationScalingValue = 589616650, + DefaultMeleeRange = 318279589, + DefaultMinRotationScalingValue = 273784445, + DefaultMinTranslationScalingValue = 4071659392, + DefaultOpenDoorClipId = 757048139, + DefaultOpenDoorEndIkPhase = 2631224923, + DefaultOpenDoorEndPhase = 1506371742, + DefaultOpenDoorRate = 350729378, + DefaultOpenDoorStartIkPhase = 2878218804, + DefaultOpenDoorStartPhase = 462320915, + DefaultPedalToFreewheelBlendDuration = 811691519, + DefaultPitch = 2266995505, + DefaultPitchSmoothingRate = 3114188164, + DefaultPlayerStandEntryEndMovementPhase = 2445300354, + DefaultPlayerStandEntryStartMovementPhase = 2787336412, + DefaultProbeOffset = 4100289588, + DefaultRapidFireKillShotImpulseMult = 2071204131, + DefaultRelativePitch = 551950644, + DefaultReversePitch = 1670344535, + DefaultSettleBlendDuration = 2855575670, + DefaultSitToStandBlendDuration = 2455313637, + DefaultSmallImpactBikeClipId = 2298295044, + DefaultSmallImpactCharClipId = 2966685819, + DefaultStandingPose = 836857486, + DefaultStillToTurnBlendDuration = 1307353498, + DefaultTargetAimPitchMax = 3414965475, + DefaultTargetAimPitchMin = 3751177723, + DefaultTargetAngularLimit = 361676600, + DefaultTargetAngularLimitClose = 3274621266, + DefaultTargetAngularLimitCloseDistMax = 2015184340, + DefaultTargetAngularLimitCloseDistMin = 2598900761, + DefaultTargetAngularLimitMelee = 3817163838, + DefaultTargetAngularLimitMeleeLockOnNoStick = 2076997846, + DefaultTargetAngularLimitVehicleWeapon = 2675889779, + DefaultTargetDistanceWeightMelee = 908567944, + DefaultTargetDistanceWeightMeleeRunning = 118717170, + DefaultTargetHeadingWeightMelee = 3338545377, + DefaultTargetHeadingWeightMeleeRunning = 3833299605, + DefaultTimeBetweenIdles = 1544265672, + DefaultTryLockedDoorClipId = 2087055883, + DefaultWeaponLoadout = 2744215759, + Delay = 4112497335, + DelayBetweenPavementFloodFillSearches = 4087190680, + DelayTimeWhenOutOfAmmoInScope = 3684533695, + DeleteOffscreenTimeMS_MAX = 2066926080, + DeleteOffscreenTimeMS_MIN = 2782271258, + DeltaForMaxStickChange = 2339537570, + DeltaScaleWhenPlayerStationary = 397262754, + DeltaTolerance = 2032147920, + Deploy = 325816429, + DepthForLandProbe = 1901477334, + DesiredDirToCoverAimingWeight = 1242729948, + DesiredDirToCoverMinDot = 3768160914, + DesiredDirToCoverWeight = 2932059417, + DesiredDistanceToCover = 1551121369, + DesiredDistanceToCoverToRequestStep = 2359940104, + DesiredLeanAngleRate = 4138940297, + DesiredLeanAngleRateQuad = 2940067495, + DesiredLeanAngleTolToBringLegIn = 1030667828, + DesiredOvershootLeanAngle = 2868091491, + DesiredPitch = 2095341670, + DesiredSpeedToBringLegIn = 3420225248, + DesiredTimeToResolveAngleDifference = 2923527027, + Despawning = 1606361377, + DetachExitDefaultPhaseThreshold = 1532444703, + DetectionRadius = 4278404079, + Difficulty = 1654675133, + DirectorList = 1163993726, + DisableAiCoverEntryStreamCheck = 2504995190, + DisableBikeHandleArmIk = 1131247892, + DisableBikePickPullUpOffsetScale = 454797365, + DisableCloseDoor = 4046635601, + DisableCoverToCoverRotationScaling = 1227928250, + DisableCoverToCoverTranslationScaling = 2876044804, + DisableDoorHandleArmIk = 4238205678, + DisableInjuredBehaviorDistLimit = 868220978, + DisableInjuredBehaviorImpulseLimit = 1833631034, + DisableIntroOverShootCheck = 3598945794, + DisableIntroScaling = 1465904835, + DisableJumpOnSteepStairs = 1258832245, + DisableMoverFixups = 1336261201, + DisableOutroOverShootCheck = 2745801756, + DisableOutroScaling = 1212343445, + DisableReachForWoundOnHeadShot = 390630339, + DisableReachForWoundOnHeadShotMaxDelay = 702711221, + DisableReachForWoundOnHeadShotMinDelay = 3271496489, + DisableReachForWoundOnNeckShot = 249145917, + DisableReachForWoundOnNeckShotMaxDelay = 266530001, + DisableReachForWoundOnNeckShotMinDelay = 3192396779, + DisableRotationOvershoot = 3253125136, + DisableRotationOvershootCheck = 3699526709, + DisableRotationScaling = 800236883, + DisableSeatBoneArmIk = 2336701139, + DisableStartMessageForSprintExhausted = 3533734703, + DisableStreamedVehicleAnimRequestHelper = 3950304880, + DisableTagSyncIntoAlign = 609083866, + DisableTimeslicingHeadingThresholdD = 484878979, + DisableTranslationOvershoot = 2434177980, + DisableTranslationOvershootCheck = 2679767269, + DisableTranslationScaling = 3134002215, + DisableVaultForwardDot = 1893591066, + DisableVehicleDependencies = 1599003681, + DisableWeaponBlocking = 800840705, + DisableWhenOffMission = 746028494, + DisallowGroundProbeVelocity = 7853624, + DispatchNode = 3360212191, + DisplacementScaleApproachRateIn = 2671402641, + DisplacementScaleApproachRateOut = 3023759131, + Display = 2360416497, + DisplayAimAssistCurves = 216413736, + DisplayAimAssistIntersections = 2995853681, + DisplayFreeAimTargetDebug = 315412703, + DisplayLockOnAngularRanges = 951183830, + DisplayLockOnDistRanges = 208459187, + DisplayRemovedGroups = 1828214902, + DisplaySoftLockDebug = 1909407402, + DistConsideredAtAimPosition = 2297046941, + DistFromCoverToAllowReloadCache = 3441446008, + DistSquaredThresholdAtCrowdRoundPos = 3622532239, + DistSquaredThresholdMovingToCrowdRoundPos = 3859213332, + DistToCoverWeight = 2279531977, + DistToCoverWeightNoStickBonus = 2996089454, + DistToCoverWeightThreat = 3255589803, + DistToEntryToAllowForcedActionMode = 1493908582, + DistToUseShortestRotation = 3490225320, + DistVicinityOfCrowd = 803081093, + DistanceBetweenAiPedsCoverAndPlayersCover = 2013288531, + DistanceForCarChaseShockingEvents = 1719190513, + DistanceForFull = 3884700100, + DistanceForMaxTimeBeforeNewPose = 858243059, + DistanceForMinTimeBeforeNewPose = 3601324404, + DistanceForStraightLineModeAlways = 2986369414, + DistanceForStraightLineModeIfLos = 1150609584, + DistanceLimits = 335839296, + DistanceToCapSpeed = 3093267843, + DistanceToEvaluateDoors = 3475018274, + DistanceToFollowInCar = 3856148267, + DistanceToFollowVehicleBeforeFlee = 459862259, + DistanceToRunToVehicle = 1289358659, + DistanceToSignalVehiclePursuitToCriminal = 783802328, + DistanceToStart = 64309451, + DistanceToStartCappingSpeed = 3739118103, + DistanceToStopMassIdeal = 3823614053, + DistanceToStopMassWeight = 979399865, + DistanceToStopMultiplier = 2798838940, + DistanceToTerminate = 1737497458, + DistanceToTestDownForVehiclesToReject = 3416628233, + DistanceToUseGunfireReactAndFleeAnimations = 2597491379, + DistanceToWallCoverToCover = 1318415761, + DistanceToWallCrouching = 575575803, + DistanceToWallStanding = 2650603299, + DistanceWeighting = 1241525786, + DistanceWeightingNoStick = 1793159754, + DistanceXYToUseHeightMapAvoidance = 1504259891, + DistanceZThresholdForHighHighFall = 4004286054, + DiveControlExtraDistanceBlendOutSpeed = 4164582757, + DiveControlExtraDistanceForDiveFromVehicle = 145933303, + DiveControlMaxFallDistance = 3177202947, + DiveDepth = 639055889, + DiveMBR = 3392297418, + DiveProjectionDistance = 3492375078, + DiveRampPow = 3048005225, + DiveWaterOffsetToHitFullyInControlWeight = 2538011040, + DoAynchronousProbesWhenFindingFreeAimAssistTarget = 2930848614, + DoCatchFallRelax = 2414092533, + DoFinalHeadingFixUp = 3946058806, + DoInitialHeadingBlend = 311045516, + DoPostCameraClipUpdateForPlayer = 2949921986, + DofSettings = 3044898952, + DofSettingsForMobilePhoneShallowDofMode = 1057367158, + DofSettingsInTightSpace = 2814402846, + DontRemoveReticuleDuringBlindFireNew = 4136330299, + DoorAlignmentSettings = 3950418303, + DoorRatioToConsiderDoorClosed = 3341844967, + DoorRatioToConsiderDoorOpen = 2420294542, + DoorRatioToConsiderDoorOpenCombat = 3006117682, + DoorRatioToConsiderDoorOpenSteps = 2541408088, + DotProductBehind = 1100440084, + DotProductFacing = 2732547664, + DotThresholdForCenterEnter = 762985941, + DotToClampSpeedToMaximum = 2850579408, + DotToClampSpeedToMinimum = 628879039, + DownHillImpactBikeClipId = 450274249, + DownHillImpactCharClipId = 4170136432, + DownHillInAirFreeWheelBikeClipId = 4163976723, + DownHillInAirFreeWheelCharClipId = 2221169411, + DownHillMinPitchToStandUp = 1599024557, + DownHillSmallImpactBikeClipId = 896939326, + DownHillSmallImpactCharClipId = 2199245470, + DownStairsPelvisMaxDeltaZMoving = 2173480721, + DownStairsPelvisMaxNegativeDeltaZMoving = 1295091688, + DownedThreatModifier = 521885682, + DownwardSpeedLimits = 1575008605, + DraggerArmIk = 989307764, + DrawDebug = 2958876793, + DrawableAltId = 3029420796, + DrawableIds = 4176789291, + DriftX = 1925470428, + DriftY = 4083276309, + DriftZ = 422585777, + DriveToGetup = 1589180219, + DrivingAbilityMax = 866268907, + DrivingAbilityMin = 1569329370, + DrivingAggressivenessMax = 534710722, + DrivingAggressivenessMin = 1151027181, + Drop = 2901180925, + DropDistance = 529669607, + DropDuration = 1445694321, + DropForRunway = 3113590399, + DuckAndCoverCanTriggerForPlayerTime = 760739523, + DuckUnderOverheadCollisionSettings = 2946100032, + DuplicateDistanceCheck = 735659884, + DuplicateTimeCheck = 1621558076, + DurationHeldDownEnterButtonToJackFriendly = 2689559592, + DurationRampDownCapsulePushedByVehicle = 4163982628, + DynamicSet1 = 2970224816, + DynamicSet2 = 3261705071, + DynamicSet3 = 3903387629, + ET_AGGRESSIVE_DRIVER = 2353748938, + ET_AMBIENT_COP = 1795127718, + ET_COP_PURSUIT = 1484258773, + ET_CRIME = 1610395939, + ET_INTERESTING_DRIVER = 2215450775, + ET_INVALID = 1195757242, + ET_JAYWALKING = 2126457811, + ET_SPAWNED_COP_PURSUIT = 1150557519, + EVENTS_OVERRIDE_FILE = 350410266, EVehicleModelColorMetallic_1 = 969376721, EVehicleModelColorMetallic_2 = 731244402, EVehicleModelColorMetallic_3 = 3537679873, @@ -3680,6 +4864,1851 @@ namespace CodeWalker.GameFiles EVehicleModelColorMetallic_8 = 4285337393, EVehicleModelColorMetallic_9 = 847803751, EVehicleModelColorMetallic_normal = 815563434, + EXPRESSION_SETS_FILE = 3354018708, + EXTRAMAP_CONVERSION_OCC_FILE = 1691493964, + EaseIn = 2993575128, + EaseOut = 4042229056, + EasyTargettingDifficultyInfo = 1097471232, + EdgeCapsuleRadius = 3106353871, + EdgeCoverWeight = 3910547157, + EdgeEndXOffset = 1400174762, + EdgeEndYOffset = 1982386380, + EdgeHighZOffset = 919529730, + EdgeLowCoverMoveTime = 205550242, + EdgeLowZOffset = 3480207128, + EdgeMaximumOffsetDiff = 3256121602, + EdgeMinimumOffsetDiff = 3457829957, + EdgeStartXOffset = 3356016298, + EdgeStartYOffset = 2250358383, + EdgeTurnAnimStateInfos = 896061089, + EdgeWeighting = 1511298321, + Electrocute = 3856838428, + EnableActivationsFromCapsuleImpacts = 3247587106, + EnableAimDirectlyIntros = 4050756282, + EnableBikePickUpAlign = 2377829258, + EnableBulletBending = 1473266781, + EnableCloseDoorHandIk = 734813238, + EnableConflictingNormalCollisionRemoval = 3464583782, + EnableCoverIdleVariations = 288573626, + EnableCoverPeekingVariations = 3781531198, + EnableCoverPinnedVariations = 2498623969, + EnableCoverToCover = 1136710348, + EnableFootTagSyncing = 2493304798, + EnableForcedFireForTargetProximity = 4012970274, + EnableIkForAI = 138117989, + EnableInitialHeadingBlend = 914424597, + EnableJackRateOverride = 583417184, + EnableLeftHandIkInCover = 2828343094, + EnableNewAICoverEntry = 661599637, + EnableNewBikeEntry = 3299231528, + EnableOpenDoorHandIk = 2861302055, + EnableRagdollPooling = 325894988, + EnableRagdollPoolingMp = 503115024, + EnableReloadingWhilstMovingInCover = 3367723943, + EnableRotationScaling = 3088085048, + EnableSideSwipeActivations = 2716995625, + EnableStreamedEntryAnims = 3726126567, + EnableStreamedEntryVariationAnims = 2305444416, + EnableStreamedInVehicleAnims = 774087018, + EnableTranslationScaling = 1466859809, + EnableUseSwatClipSet = 3380579615, + EnableWalkStops = 2560019435, + EnclosedSearchRegions = 937610588, + EndHeadingTolerance = 2243016084, + EndStuckOnVehicle = 3136215640, + EndStuckOnVehiclePlayer = 2353506762, + EndStuckUnderVehicle = 2222643548, + EndStuckUnderVehiclePlayer = 3275734390, + EnemyAccuracyScaling = 3589303034, + EnemyCharging = 2545446674, + EnergyLostPerSecond = 3136810971, + EnterClipId = 517541874, + EnterCoverAIAimingBase1H = 1405654072, + EnterCoverAIAimingBase2H = 2519142628, + EnterCoverAIAimingSwat1H = 4262460027, + EnterCoverAIAimingSwat2H = 2653796808, + EnterCoverAITransition1H = 1017470219, + EnterCoverAITransition2H = 1163390260, + EnterCoverAimInterruptDistanceTolerance = 3320233516, + EnterCoverAimInterruptHeadingTolerance = 2304671979, + EnterCoverInterruptDistanceTolerance = 1874728809, + EnterCoverInterruptHeadingTolerance = 3084434327, + EnterCoverInterruptMinTime = 3889498778, + EntryPointSets = 769744308, + EnvelopeRef = 1811750171, + EqualizeAmount = 4026600462, + EquipBestWeapon = 962329419, + ErrorThreshold = 305674207, + EvaluateThreatFromCoverPoints = 4040000084, + EvasionThreshold = 2708798326, + EventDecayTimeMS = 2722629246, + EventInitInterval = 3561980965, + EventInterval = 95033849, + EventlessSwitchDistanceRequirement = 3437799044, + EventlessSwitchInactivityTimeRequirement = 1865528825, + EventlessSwitchStateTimeRequirement = 619528635, + ExactStopTargetRadius = 2433763429, + ExcludePedBumpAngleFromPushCalculation = 4060868299, + ExitAttachmentMoveSpeedThreshold = 788433631, + ExitClipId = 2518432971, + ExitCornerDirOffset = 498927550, + ExitCornerYOffset = 1366592047, + ExitCornerZOffset = 3182801896, + ExitCoverBaseClipSetId = 150770804, + ExitCoverExtraClipSetId = 395871171, + ExitDistance = 3093573752, + ExitProbeDistance = 4256472352, + ExitToAimClipSets = 3606683380, + ExitToAimClipsName = 1926032835, + ExitToAimVehicleInfos = 2503125343, + ExitVehicleAttempToFireBlendOutDuration = 95286584, + ExitVehicleBlendInDuration = 3090579301, + ExitVehicleBlendOutDuration = 3420274436, + ExitVehicleMaxDistance = 2200934401, + ExitVehicleRouteMinDistance = 1946412733, + ExitVehicleUnderWaterBlendOutDuration = 873885486, + ExplosiveDamageMod = 2530332272, + ExposurePush = 2577299971, + ExtendedDistanceFromWorldCenter = 769039659, + Extension = 207195018, + ExtraCameraRelativeVerticalOffset = 2401664616, + ExtraDistForGoto = 2347754539, + ExtraDistanceToPushAway = 3893627623, + ExtraFleeDistance = 695930878, + ExtraForces = 1349337627, + ExtraHeadingRate = 1444953847, + ExtraHeightForGround = 4011421405, + ExtraOffsetForGroundCheck = 1326750951, + ExtraOrbitPitchOffsetForHighAngleMode = 4048007163, + ExtraOrbitPitchOffsetForThirdPersonFarViewMode = 2477951883, + ExtraSideOffsetForHangingOnLeftSide = 2610056728, + ExtraSideOffsetForHangingOnRightSide = 843687785, + ExtraToleranceForStopWatchDistance = 3333208061, + ExtraTorqueTwistMax = 1612043114, + ExtraWaterZGroundFixup = 207811054, + FCT_HALF_SIGMOID = 3916722287, + FCT_LINEAR = 2803657832, + FCT_NONE = 383539244, + FCT_SIGMOID = 157616235, + FIRINGPATTERNS_FILE = 3015019398, + FIRST_PERSON = 70078021, + FRONTEND_DAT_FILE = 2221411686, + FRONTEND_MENU_FILE = 1803244175, + FXStack = 1829495763, + FakeLungeOffset = 614448068, + FallLandThreshold = 2788362157, + FallOffAMovingCar = 1639523711, + FallTestAngleBlendOutTime = 1882364948, + FallTimeBeforeHighFallAbort = 2093200171, + FallToKnees = 1740552960, + FallingSpeedForHighFall = 3699124688, + FallsOutofVehicleVelocity = 2846727445, + FastAlignRate = 2551900503, + FastApproachRate = 2363497120, + FastDuckPrepLeftBikeClipId = 2693600057, + FastDuckPrepLeftCharClipId = 1151736662, + FastDuckPrepRightBikeClipId = 4229390137, + FastDuckPrepRightCharClipId = 4061011008, + FastEnterExitRate = 1506926002, + FastExitDefaultPhaseThreshold = 2055075186, + FastMinTurnApproachRate = 892232162, + FastMovingPedSpeed = 1615867498, + FastRunRateMax = 684879272, + FastRunRateMin = 2165656152, + FastTurnAcceleration = 305608474, + FastTurnApproachRate = 1148310117, + FastWalkRateMax = 806948898, + FastWalkRateMin = 1182689916, + FatallyInjured = 62148721, + FeetLiftForce = 1163046056, + FightingModifier = 2538889403, + FinalShotImpulseClampMax = 1454653034, + FindPropInEnvironmentDist = 1136341997, + FindSpawnPointInDirection = 3455230182, + FineAimBlendSpringConstant = 4207333442, + FineAimBlendSpringDampingRatio = 1717370547, + FineAimDownwardsVerticalMovement = 3411810706, + FineAimHorSpeedMax = 1036145679, + FineAimHorSpeedMin = 2633888729, + FineAimHorSpeedPower = 2444069349, + FineAimHorWeightSpeedMultiplier = 2407796767, + FineAimSidewaysScale = 2012228463, + FineAimSpeedMultiplier = 3282516112, + FineAimSpeedMultiplierClose = 2679873658, + FineAimSpeedMultiplierCloseDistMax = 286043552, + FineAimSpeedMultiplierCloseDistMin = 767482079, + FineAimVerSpeed = 2689623744, + FineAimVerticalMovement = 1940999374, + FireTimeAfterChaseOnFoot = 1325474651, + FireTimeAfterStaticMovementAbort = 1579430656, + FireTimeAfterStoppingMoveToCover = 475196801, + FishOutOfWaterDelay = 3728756551, + FixieSkidLeftBikeClip0Id = 3950475012, + FixieSkidLeftBikeClip1Id = 874968111, + FixieSkidLeftCharClip0Id = 1543557460, + FixieSkidLeftCharClip1Id = 323139173, + FixieSkidRightBikeClip0Id = 1348669466, + FixieSkidRightBikeClip1Id = 2864920648, + FixieSkidRightCharClip0Id = 2616623374, + FixieSkidRightCharClip1Id = 3652939154, + FixieSkidToBalanceLeftBikeClip1Id = 2138292255, + FixieSkidToBalanceLeftCharClip1Id = 2365139646, + FixieSkidToBalanceRightBikeClip1Id = 1620728723, + FixieSkidToBalanceRightCharClip1Id = 963408802, + FleeDistance = 191817975, + FleeDuringCombat = 1811637113, + FleeExitExtraRotationSpeed = 4193052421, + FleeExitExtraTranslationSpeed = 4180330400, + FleeExitVehicleBlendOutDuration = 2378492841, + FleeIfApproachedByOtherEntity = 1542742362, + FleeIfApproachedBySourceEntity = 2924272020, + FleeMBR = 1024232437, + FleeMBRMax = 1178169613, + FleeMBRMin = 1822017225, + FleeOffset = 335985570, + FleeReactions = 603736164, + FleeSafeDistance = 846083482, + FleeSpeedInVehicle = 1520777858, + FleeTargetTooCloseDistance = 882826582, + FlightAngleLimitsForParachutingBraking = 2890662262, + FlightAngleLimitsForParachutingNormal = 960147082, + FlightAngleLimitsForSkydiving = 4264481693, + FlightHeightAboveTarget = 2016619356, + Flinch = 764802101, + FlinchDecayTime = 1944104863, + FlipForce = 3224113269, + FocusParentToTargetBlendLevel = 2840529796, + FollowOffset = 3967034351, + FollowOrientationConing = 70382085, + FollowPedLookAtBoneTag = 389542769, + FollowRadius = 353087997, + FollowTimeout = 2187967175, + FollowYOffset = 1895961621, + FollowZOffset = 647976226, + FootInterp = 1745248481, + FootInterpIntersecting = 1545915544, + FootInterpIntersectingMoving = 3264564387, + FootInterpMoving = 1979344219, + FootInterpOnDynamic = 67151581, + ForceAtMaxVelocity = 2377779348, + ForceAtMinVelocity = 1864398785, + ForceCower = 4045684189, + ForceCrime = 1727634143, + ForceLowCornerEastFaceNorth = 2740301581, + ForceLowCornerEastFaceSouth = 1105971590, + ForceLowCornerNorthFaceEast = 1675103884, + ForceLowCornerNorthFaceWest = 2231393111, + ForceLowCornerSouthFaceEast = 1921771349, + ForceLowCornerSouthFaceWest = 1507251800, + ForceLowCornerWestFaceNorth = 4153767546, + ForceLowCornerWestFaceSouth = 3854489506, + ForceMPAnimRatesInSP = 2345403785, + ForceMag = 3327649992, + ForceNewMessage = 3330375348, + ForceNoTimeslicingHeadingDiff = 810486897, + ForceOverVehicle = 599992998, + ForcePinnedDown = 5986942, + ForceRollUp = 1703031604, + ForceRunDelayTime = 111777931, + ForceStandEnterOnly = 1408347563, + ForceStreamingFailure = 2569732609, + ForceToApply = 71889384, + ForceToTarget = 243919456, + ForceUnderVehicle = 2074671276, + ForceUpdatesWhenTurningStartThresholdRadians = 3756162272, + ForceUpdatesWhenTurningStopThresholdRadians = 1213035272, + ForceWindmill = 3831760128, + ForcedDoorHandleArmIk = 2101205108, + ForcedLegUpVelocity = 2821506258, + Forces = 3184237865, + ForcesForSkydiving = 590082074, + ForwardAcceleration = 32744136, + ForwardDirectionThresholdCosSquared = 745911052, + ForwardDistToStartSideScale = 3395179822, + FovAcceleration = 1137737707, + FovLimits = 4288186671, + FovScalar = 680981764, + FrameComponents = 2102911583, + FramesToLookAheadForProbe = 1260903928, + FreefallThresold = 2222926220, + Frequency = 2554379728, + FrequencyNoise = 1511368071, + FromCarHit = 1362978742, + FromCoverExitDistance = 2504179355, + FromOnFootAccelerationMod = 2358855400, + FromStrafeAccelerationMod = 971520507, + FromStrafe_MovingBlendOutTime = 1926561545, + FromStrafe_WeightRate = 2545261234, + FromValue = 3814756382, + FromWantedLevel = 1358049181, + FutureDistanceForMaxSteerAngle = 1786731261, + FutureDistanceForMinSteerAngle = 2361783730, + GangScenarioPedToPlayerModifier = 2883008619, + GetInCombatClipId = 427276467, + GetInFromWaterClipId = 2521753678, + GetInRate = 1556614668, + GetInStandOnClipId = 2593531090, + GetOnQuickClipId = 923017874, + GlobalLateralTorsoOffsetInLeftCover = 3909527233, + GotoWatchRange = 2651403585, + GravityScale = 1393168468, + GroundFixupHeight = 4272192282, + GroundFixupHeightBoatInWater = 667507334, + GroundFixupHeightBoatInWaterInitial = 93138639, + GroundFixupHeightLarge = 1434272564, + GroundFixupHeightLargeOffset = 3416772737, + GroundMaterialProbeDepth = 883567309, + GroundMaterialProbeOffset = 2995052029, + GroundMaterialSpawnCoordNormalZTolerance = 1328674939, + GroupId = 1405734818, + GroupMemberSlowDownDistance = 2525435888, + GroupMemberWaitDistance = 4219594699, + GroupMemberWaitMinTime = 2050658669, + GroupMemberWalkCloseDistance = 3760186281, + GuardWorldExtents = 1651229959, + GunShotThresholdDistance = 3483089763, + HBC_Randomize = 2066966848, + HBC_Retain = 1409024016, + HELI = 3778816900, + HORSE_REINS_FILE = 1866311889, + HUD_TXD_FILE = 1987285695, + HandBrakeControl = 1151983218, + HandBrakeInputEnvelopeRef = 73888528, + HandBrakeSwingSettings = 3703185618, + HandGunDamageMod = 1873521687, + HandcuffedClipSetId = 1015537615, + HangingAroundVehicleModifier = 420424724, + HasCreateWeaponTag = 3631567393, + HasInterruptTag = 1944180374, + HasSixDirections = 3697908634, + HasStickInputThreshold = 2573017241, + HashOrdering = 3243012891, + Hashes = 2753590613, + HeadAndNeck = 3404836153, + HeadLook = 3103279089, + HeadShot = 800099441, + HeadShotImpulseMultiplier = 3053385153, + HeadShotMPImpulseMultiplier = 1084989136, + HeadingAcceleration = 426969157, + HeadingChangeRate = 2653769818, + HeadingCorrection = 472852554, + HeadingDelta = 2891994847, + HeadingDiffStartBlendDegrees = 1440906110, + HeadingOffset = 2344149746, + HeadingPullAroundErrorScalingBlendLevel = 1199102981, + HeadingPullAroundMaxMoveSpeed = 3319639913, + HeadingPullAroundMinMoveSpeed = 3078528158, + HeadingPullAroundSpeedAtMaxMoveSpeed = 1466199679, + HeadingPullAroundSpringConstant = 1332565251, + HeadingPullAroundSpringDampingRatio = 4054409124, + HeadingReachedTolerance = 452418176, + HeadingScoreForCoverLockOnRejection = 155512302, + HeadingToleranceDegrees = 3997955765, + HeadingWanderChange = 3829108144, + HeadingWeighting = 328254695, + HeadingWeightingNoStick = 1613714646, + HealthBar = 133430210, + HealthConfigHash = 372913173, + HealthMultiplierBonus = 2121757492, + HealthRatioLimit = 2392243130, + HealthRegenEfficiency = 2721388482, + HeavyBrakeYAcceleration = 2551415238, + HeightChangeSettleBlendDuration = 3719483743, + HeightMapDelta = 1983182002, + HeightMapLookAheadDist = 552115106, + HeightScaling = 1920226182, + HeightToStartLanding = 3067654195, + HeightToStartWrithe = 2221851990, + HeliPedModelId = 2549257506, + HeliSpeedModifier = 641071834, + HeliTargetArriveDist = 2931101691, + HeliVehicleModelId = 1696043144, + Helis = 847633247, + HighAltitudeZoomSettings = 2054392766, + HighBlindFireAimingDirectlyLimitAngle = 298108981, + HighCloseEdgeWallTestYOffset = 1632533833, + HighCoverBlendInDuration = 4171399035, + HighCoverClipRate = 677754437, + HighCoverProbeHeight = 1565700819, + HighFallProbeLength = 934569024, + HighFallTimeToBlockInjuredOnGround = 1503093096, + HighHighFallEnd = 1799229733, + HighHighFallStart = 1342466268, + HighImportanceModifier = 786235913, + HighJumpMaxAngleForVelScale = 2289178459, + HighJumpMaxVelScale = 3965084574, + HighJumpMinAngleForVelScale = 910411457, + HighJumpMinVelScale = 1943815238, + HighLeftAimStepInfoSet = 80679158, + HighLodWalkHeadingLerpRate = 2391787980, + HighOpenDoorClipId = 3849261684, + HighRightAimStepInfoSet = 2338326271, + HighSpeedShakeSettings = 3319637384, + HighSpeedZoomSettings = 2646605713, + HighVelocity = 4250665956, + HighVelocityBlendOut = 468457579, + HintHelperRef = 730193180, + History = 3024574816, + HistoryCosineThreshold = 3400740468, + HitRandomisation = 3061537468, + HitRandomisationAutomatic = 4009335731, + HoldLegOutVelocity = 682602058, + HoldSub = 1878184186, + HoldingSingleHandedWeapon = 3720463376, + HoldingTwoHandedWeapon = 3291888789, + HoldingWeaponBonus = 4170306057, + HoldingWeaponPlayerModifier = 1493940343, + HotPedDisableSexinessFlagChecks = 674468988, + HotPedMaxDistance = 2831412815, + HotPedMaxDotAngle = 1194287595, + HotPedMaxHeightDifference = 3233483053, + HotPedMinDistance = 334092093, + HotPedMinDotAngle = 101327813, + HotPedRenderDebug = 248477757, + HotwireClipId = 2232368689, + HotwireRate = 1960961110, + HumanBodyScale = 3219752194, + HumanPelvisScale = 938878998, + HumanSpine0Scale = 670734777, + HumanSpine1Scale = 2267090113, + HurryAwayInitialMBR = 1287855842, + HurryAwayMBRChangeDelay = 162073420, + HurryAwayMBRChangeRange = 2978098349, + HurryAwayMoveBlendRatioWhenFar = 199132405, + HurryAwayMoveBlendRatioWhenNear = 3010798658, + HurryAwayWatchFirst = 3611561302, + IDE_FILE = 3422262499, + IN_AIRCRAFT = 3210104948, + IN_BOAT = 1045637820, + IN_HELI = 2079134431, + IN_SUBMARINE = 2742629541, + IN_TURRET = 4177603501, + IdealDistance = 2913237777, + IdealDistanceCouldLeaveCar = 13763777, + IdealDistanceForPursue = 514678423, + IdealDistanceIfArmed = 3291058825, + IdealDistanceIfUnarmed = 172591904, + IdealDistanceInVehicleAndTargetArmed = 2541599029, + IdealDistanceInVehicleAndTargetUnarmed = 922557972, + IdealDistanceOnBikeAndTargetArmed = 1876514812, + IdealDistanceOnBikeAndTargetUnarmed = 2051473778, + IdealDistanceShotAt = 150170926, + IdealHeadingOffsetForLimiting = 3658085406, + IdealPitchForFiringVariation = 1908604654, + IdealSpawnDistance = 652074796, + IdealTurnApproachRate = 1298540281, + IdentificationRange = 625679404, + IdleAnimStateInfos = 3037289130, + IdleCmini = 1252108818, + IdleHeadingLerpRate = 183241195, + IdleHigh1HVariationClipsets = 2565051320, + IdleHigh2HVariationClipsets = 616197965, + IdleLow1HVariationClipsets = 229574996, + IdleLow2HVariationClipsets = 754984064, + IdleTimeRandomFactor = 2115224183, + IdleTransitionBlendTimeFromActionMode = 639925745, + IdleTransitionBlendTimeFromStealth = 1990190949, + IdleVariationAnimStateInfos = 1977186530, + IdleYStartOffset = 3646563039, + IgnoreFovForHeadIk = 2404066730, + IgnoreIfSensingPedIsOtherEntity = 4035148525, + IgnoreRotationBlend = 2067979515, + ImmediateHighFallSpeedAi = 696030652, + ImmediateHighFallSpeedPlayer = 187177991, + ImpulseMult = 959886766, + Impulses = 245896742, + InAir = 1916434556, + InAirFreeWheelBikeClipId = 3916128451, + InAirFreeWheelCharClipId = 4285496170, + InAirHeadingRate = 712615227, + InAirMovementApproachRate = 2498638030, + InAirMovementRate = 1308347600, + InAirProbeDistance = 3752389553, + InAirProbeForwardOffset = 4171402878, + InAirZAccelTrigger = 1568293823, + InBoat = 3499358923, + InCoverMovementSpeed = 3787797455, + InCoverMovementSpeedEnterCover = 1291062567, + InCoverScoreModifier = 1975453329, + InCoverTolerance = 3968028188, + InDuration = 2456685333, + InHeli = 345193988, + InMotionAlignmentVelocityTolerance = 891286257, + InMotionTighterTurnsVelocityTolerance = 3646294886, + InPlaceAlignmentVelocityTolerance = 2324978953, + InRangeDrivingPlayerModifier = 3099253594, + InRangePlayerDistanceThreshold = 395317425, + InRangePlayerInRaceDistanceThreshold = 1849354099, + InRangePlayerModifier = 3120269183, + InVehicle = 3094451383, + InVehicleLookAtDampingRef = 556138114, + InWaterExitDepth = 1332340783, + InWaterExitProbeLength = 1768336421, + IncidentLocation = 2790865931, + IncreasedAerialSpawningFactor = 3248533699, + IncreasedAquaticSpawningFactor = 1340414393, + IncreasedGroundWildlifeSpawningFactor = 1785192888, + InflectionPitch = 1035721466, + Info = 4197530443, + InitialAreaTimeoutWhenCrimeReported = 3003441217, + InitialAreaTimeoutWhenSeen = 922425823, + InitialBumpComponent = 406034015, + InitialBumpForce = 2701068933, + InitialBumpOffset = 1000319425, + InitialDelay = 1832992496, + InitialForce = 2966151540, + InitialForceComponent = 871993282, + InitialForceOffset = 279094028, + InitialLowEdgeTestEndYOffset = 1933569235, + InitialLowEdgeTestStartYOffset = 1759052099, + InitialLowEdgeWallTestYOffset = 420444049, + InitialRagdollDelay = 1901527010, + InitialRelativeHeadingLimits = 1115426652, + InitialRelativePitchLimits = 113692134, + InitialTerrainAvoidanceAngleD = 3968352519, + InitialWorldPitchLimits = 1692207327, + InnerDistanceThreshold = 2348909882, + InputEnvelopeRef = 1933675573, + InputMagPowerFactor = 3265151949, + InputMagToIncreaseDeadZoneMax = 4159970100, + InputMagToIncreaseDeadZoneMin = 3261011203, + InputType = 1445865118, + InputYAxisCornerExitValue = 2129665503, + InputYAxisQuitValue = 1147378819, + InsideCornerStopDistance = 3341714290, + InsideEdgeEndXOffset = 2929248824, + InsideEdgeEndYOffset = 1055186370, + InsideEdgeStartXOffset = 2121459739, + InsideEdgeStartYOffset = 2408138725, + InstantProbeDurationMin = 4060945649, + InterpRates = 78660797, + IntroClip0Id = 4104220306, + IntroClip1Id = 430012531, + IntroClipId = 3802470907, + IntroMaxScale = 842076929, + IntroMovementDuration = 3673514744, + IntroRate = 1649508716, + IntroRotScalingDefaultEndPhase = 1894035381, + IntroRotScalingDefaultStartPhase = 1515476732, + IntroScalingDefaultEndPhase = 4206558217, + IntroScalingDefaultStartPhase = 3371499882, + InvMassScale = 514198685, + InverseMassScales = 172669903, + IsBehindVehicleGlass = 3132205970, + IsCasual = 3169257000, + IsChild = 2962717212, + IsCrouching = 1674350800, + IsDangerousAnimal = 1867113976, + IsGang = 1945623796, + IsHuman = 2212592004, + IsLocal = 3419197588, + IsMale = 819954510, + IsSecurity = 622092394, + IsStationary = 4172129738, + IsWeird = 1025165367, + Items = 2880561169, + JOB_AND_NAME_MED = 1218436764, + JackingModifier = 2688373686, + JetskiDrivebyFilterId = 2134287489, + JumpCollision = 1017102101, + JumpFallTestAngle = 793837940, + JumpOutofSubNeutralBuoyancyTime = 2102914796, + KeepWeapon = 1218243798, + KickOnGroundTuning = 1543515715, + KnockOffBikeEjectImpactFriction = 3996231382, + KnockOffBikeEjectMaxImpactDepth = 301898848, + KnockOffBikeForwardMaxComponent = 2466946069, + KnockOffBikeForwardMinComponent = 2251372495, + KnockOffBikeMaxSpeed = 2357933858, + KnockOffBikeMaxUpright = 3242658957, + KnockOffBikeMinSpeed = 2854807360, + KnockOffBikeMinUpright = 4180033042, + KnockOffBikePitchMaxComponent = 2962336026, + KnockOffBikePitchMinComponent = 164203436, + KnockOffBikeUpMaxComponent = 2641066262, + KnockOffBikeUpMinComponent = 3963787762, + LADDER_METADATA_FILE = 873638153, + LEADERBOARD_DATA_FILE = 153829429, + LEGALS = 4072415756, + LEVEL_STREAMING_FILE = 3625514299, + LOOKIK_BLEND_RATE_FAST = 373155899, + LOOKIK_BLEND_RATE_FASTEST = 2515903841, + LOOKIK_BLEND_RATE_INSTANT = 1486063330, + LOOKIK_BLEND_RATE_NORMAL = 1833278132, + LOOKIK_BLEND_RATE_SLOW = 986173808, + LOOKIK_BLEND_RATE_SLOWEST = 3711568277, + LOOKIK_ROT_LIM_NARROW = 3906611689, + LOOKIK_ROT_LIM_NARROWEST = 1073022306, + LOOKIK_ROT_LIM_OFF = 49782489, + LOOKIK_ROT_LIM_WIDE = 1112780501, + LOOKIK_ROT_LIM_WIDEST = 1594514833, + LOOKIK_TURN_RATE_FAST = 2235154210, + LOOKIK_TURN_RATE_NORMAL = 3984591931, + LOOKIK_TURN_RATE_SLOW = 2708677357, + LOOK_FORWARD_RELATIVE_TO_ATTACH = 2580680746, + LSAcceleration = 2358484554, + LSDeadZoneAngle = 2899233953, + LSDeceleration = 4267995471, + LackOfHostility = 2857118825, + LadderAlignment = 2014258089, + LadderPitch = 2326671617, + LandHeadingModifier = 1347777197, + LandProbe = 1166908668, + LandProbeLength = 2205933583, + LandRollHeight = 3897556344, + LandRollHeightFromJump = 2847920310, + LandRollHeightFromVault = 3337751765, + LandSlopeNoseUpMax = 3983307371, + LandSlopeNoseUpMin = 564764161, + Landing = 1163966079, + LargeVerticalAccelerationDelta = 4247487957, + LastBattleEventHighEnergyEndTime = 2064072700, + LastBattleEventHighEnergyStartTime = 271833144, + LastSpottedDistance = 2553544690, + LastStand = 1877343639, + LastStandArmoured = 745594459, + LastStandMaxArmouredTotalTime = 2286694021, + LastStandMaxTotalTime = 417172126, + LateralForce = 2100597904, + LaunchLeftBikeClipId = 3073315828, + LaunchLeftCharClipId = 1333997798, + LaunchRightBikeClipId = 3808805794, + LaunchRightCharClipId = 945663205, + LayerA = 3994552921, + LayerB = 3761008258, + LayerBlend = 3968024215, + Layers = 4018703742, + LeaderExitVehicleDistance = 676285031, + LeanAngleDefaultRate = 1850650077, + LeanAngleDefaultRatePassenger = 1393469938, + LeanAngleReturnRate = 1365613076, + LeanAngleReturnedTol = 4254763028, + LeanAngleSmoothingRate = 541806245, + LeanForwardsAngleSmoothingRate = 4228832635, + LeanScale = 2484601688, + LeanSidewaysAngleMaxAccAngle = 4058717361, + LeanSidewaysAngleMinAccAngle = 4159734133, + LeanSidewaysAngleSmoothingAcc = 1551960100, + LeanSidewaysAngleSmoothingRateMax = 1540399603, + LeanSidewaysAngleSmoothingRateMin = 525349387, + LeaningExtremeThreshold = 48278855, + LeftBoneOffset = 416915558, + LeftGrip = 102733762, + LeftHandOffset = 2557494577, + LeftPickUpTargetLerpPhaseEnd = 354147533, + LeftPickUpTargetLerpPhaseEndBicycle = 3597820233, + LeftPickUpTargetLerpPhaseStart = 3911832280, + LeftPickUpTargetLerpPhaseStartBicycle = 706443375, + LeftPullUpTargetLerpPhaseEnd = 2320755313, + LeftPullUpTargetLerpPhaseEndBicycle = 3214386681, + LeftPullUpTargetLerpPhaseStart = 4195927131, + LeftPullUpTargetLerpPhaseStartBicycle = 2664369195, + LeftRightStickInputMin = 3223119611, + LeftRightStickInputSmoothingRate = 1082826303, + LeftWire = 2742077142, + LegShot = 2675545657, + LegShotFallRootImpulseMinUpright = 4252723795, + LegShotFallRootImpulseMult = 184133535, + LengthScaling = 4135147407, + LensArtefact = 661891977, + LimbStrengthTuning = 2622719195, + LimitAttachParentRelativePitchAndHeading = 2799648005, + LimitMeleeRangeToDefault = 1169108573, + LineOfSight = 2250254670, + LineOfSightStatus = 682590761, + LineOfSightTests = 728351840, + LinearVZForBrakingDifferenceMax = 119610653, + LinearVZForBrakingDifferenceMin = 950864184, + LinearVZForPitchRatioMax = 332728501, + LinearVZForPitchRatioMin = 135326749, + LocationForNearestCarNodeOverrides = 3346068581, + LockOnDistanceLimits = 4280147981, + LockOnDistanceRejectionModifier = 2510305536, + LockOnEnvelopeRef = 2833081775, + LockOnOrbitDistanceSettings = 4165908011, + LockOnRangeModifier = 3927328861, + LockOnSwitchTimeExtensionBreakLock = 1952125540, + LockOnSwitchTimeExtensionKillTarget = 2774244387, + LockOnTargetDampingSettings = 1635236307, + LockOnTargetStunnedEnvelopeRef = 2209545096, + LockType = 4263854907, + LongitudinalBodyLeanApproachRate = 373069342, + LongitudinalBodyLeanApproachRateSlope = 4228525959, + LongitudinalBodyLeanApproachRateSlow = 1466153272, + LookAheadDistanceForBackAway = 1706779012, + LookAheadForRunway = 1293732320, + LookAround = 4270549134, + LookAtBehaviour = 589368866, + LookAtOffset = 1190303903, + LookAtTime = 3780096928, + LookAtUpdateTime = 1858185525, + LookBehindOutroTimeMS = 537305387, + LookBehindRelativeAttachPosition = 2548218645, + LookOverSettings = 3300166924, + LookingInRangePlayerMaxDotAngle = 1018069509, + LoopClipId = 3333920819, + LoopClipSetId = 3859145463, + LoopMode = 3135858693, + LostBalanceAndGrabbing = 944999838, + LowBlindFireAimingDirectlyLimitAngle = 2323225479, + LowBlockedBlend = 2527050941, + LowCoverBlendInDuration = 2789076521, + LowCoverClipRate = 1362808676, + LowCoverProbeHeight = 4155982221, + LowImportanceModifier = 592353395, + LowLeftStep = 4111569262, + LowLod = 3357299335, + LowLodBaseClipSetId = 664477457, + LowLodExtraHeadingAdjustmentRate = 3846215494, + LowLodIdleClipSetId = 2167334901, + LowLodWalkHeadingLerpRate = 3008826210, + LowOffsetCapsuleLength = 568360986, + LowOffsetCapsuleRadius = 4015224528, + LowRightStep = 4205427545, + LowSideZOffset = 1655026590, + LowStepBackLeftXBlocked = 2531405930, + LowStepBackLeftYBlocked = 2343990340, + LowStepBackRightXBlocked = 3516373800, + LowStepBackRightYBlocked = 3372482096, + LowStepOutLeftXBlocked = 842428202, + LowStepOutLeftYBlocked = 3532419784, + LowStepOutRightXBlocked = 8574286, + LowStepOutRightYBlocked = 298303912, + LowVelocityReactionThreshold = 2079428645, + LowXClearOffsetCapsuleTest = 2818774649, + LowXOffsetCapsuleTest = 3545526197, + LowYOffsetCapsuleTest = 717814241, + LowZOffsetCapsuleTest = 2260315698, + LowerArmImpulseCap = 3002630191, + LowerArmNoTorseHitImpulseCap = 2054532609, + LungeChangeDistance = 1585455214, + LungeForwardOffset = 2740115372, + LungeTargetRadius = 2981439007, + LungeZOffset = 3783579394, + MOTION_TASK_DATA_FILE = 775482934, + MOTIVATIONS_FILE = 2957501757, + MOUNT_TUNE_FILE = 2889043007, + MPLargeAccidenThresold = 2099608654, + Mag = 2130375977, + MagnitudeClamp = 3388239219, + MatchTargetWeapon = 2028274881, + MatchTimer = 219280121, + MaxAbsDotForAvoidDirected = 462717652, + MaxAbsThrottleForCloseDoor = 1734471519, + MaxAccelModifier = 150232389, + MaxAcceleration = 2732255867, + MaxAccelerationForLean = 419181205, + MaxAdjustmentLookAhead = 4125886772, + MaxAiActivationLimit = 1737477488, + MaxAimFromGroundTime = 3996785209, + MaxAimTimeOnStickMs = 1480451859, + MaxAltitudeDelta = 2362779209, + MaxAmbientVehiclesToSpawnChase = 3549282925, + MaxAmplitude = 272708601, + MaxAngle = 3503009483, + MaxAngleConsidered = 2451123132, + MaxAngleDeltaForLockOnSwitchBlendScaling = 2783842060, + MaxAngleForScaleVelocityExtension = 360286196, + MaxAnglePickPOI = 527596719, + MaxAngleToBeginRotationScale = 3171601208, + MaxAngleToSetDirectly = 3073391680, + MaxAngularDiffBetweenDynamicAndStaticCover = 2761743161, + MaxAngularHeadingVelocityAi = 4125755684, + MaxAngularHeadingVelocityPlayer = 63113045, + MaxAngularHeadingVelocityPlayerForcedStandAim = 1486772652, + MaxAngularVelocity = 1393994109, + MaxAngularVelocityScaleFactor = 3006329763, + MaxArmourImpulseMult = 1393173723, + MaxAttachParentDepthUnderWaterToRemainBuoyant = 2069938157, + MaxAttachParentDepthUnderWaterToRemainBuoyantOut = 1698601922, + MaxAttachParentSpeedToClonePitchFromCinematicMountedCameras = 150825038, + MaxAttachParentSubmergedLevelToApplyFullAttachParentMatrixForRelativeOrbit = 3039556728, + MaxBackOffDistance = 2075820886, + MaxBaseFovScaling = 785828068, + MaxBlendDurationForInitialLockOn = 1807116888, + MaxBlendDurationForLockOnSwitch = 3132164856, + MaxBrake = 1676250682, + MaxCapsuleTests = 961760330, + MaxCircleRadius = 3815425058, + MaxClipsToCheckPerFrame = 1435927021, + MaxCollisionFallBackBlendLevelToForceUnderWater = 2382802886, + MaxCollisionRootSpeedToForcePopIn = 35427940, + MaxCollisionRootSpeedToPausePullBack = 4012884170, + MaxCollisionTestRadius = 2696635175, + MaxCombineDistThresholdSquared = 3413677046, + MaxCruiseSpeed = 2890274297, + MaxCruiseSpeedMultiplier = 4219085548, + MaxCruiseSpeedWhenClamped = 3775809407, + MaxDamageTakenImpulseMult = 253998194, + MaxDamageTakenThreshold = 4025040637, + MaxDamageToCheckForRandomDeath = 4042046110, + MaxDamageToIgnore = 2744941697, + MaxDeccelModifier = 1410651137, + MaxDeceleration = 1689883019, + MaxDefaultAngularVelocity = 2408710412, + MaxDefendPointWaitTimeMS = 3128562978, + MaxDelay = 509314747, + MaxDelayExitTime = 3125460893, + MaxDelayForGetOff = 1867895091, + MaxDelayTimeForExitVehicle = 2049624973, + MaxDelayTimer = 2906908712, + MaxDifferenceToAverageBrakes = 87152394, + MaxDirectionVariance = 3433998695, + MaxDistScanArc = 2704081606, + MaxDistToConsiderPedGoingToDoorPriority = 4213098799, + MaxDistToConsiderVehicleValid = 2104384861, + MaxDistToCoverWhenPlayerIsClose = 2168923712, + MaxDistToCoverXY = 2157843494, + MaxDistToCoverZ = 2187323127, + MaxDistToPathDefault = 819069056, + MaxDistToVehicle = 1250203641, + MaxDistUpdateFrequency = 3216270742, + MaxDistanceAbovePedPositionToClampPitch = 1654280371, + MaxDistanceAiPedFromTheirCoverToAbortPlayerEnterCover = 1955233508, + MaxDistanceAroundClosestRoadNode = 1354574680, + MaxDistanceErrorToIgnore = 1819399769, + MaxDistanceForAmbientReaction = 2167383018, + MaxDistanceForAvoid = 1319056930, + MaxDistanceForAvoidDirected = 1721238833, + MaxDistanceForBackAway = 2592101241, + MaxDistanceForDispatchPosition = 43531000, + MaxDistanceForFineAimScaling = 70391041, + MaxDistanceForHolster = 3926218692, + MaxDistanceForLawToReturnToCombatFromFlee = 115479140, + MaxDistanceForOrientation = 3358534575, + MaxDistanceForPedToBeVeryCloseToCover = 3273119465, + MaxDistanceForRiverWaterClippingTest = 753638141, + MaxDistanceForSearch = 2973796969, + MaxDistanceForSlowdown = 2085906895, + MaxDistanceForTaint = 688870759, + MaxDistanceForWaterClippingTest = 102161666, + MaxDistanceFromCameraForViewportChecks = 3017247137, + MaxDistanceFromNavMesh = 1798086221, + MaxDistanceFromOptimal = 2733041160, + MaxDistanceFromPed = 1011332177, + MaxDistanceFromPedToHelpPed = 3390705532, + MaxDistanceFromRoadNode = 4277520254, + MaxDistanceFromTargetToForceStraightLineMode = 2229910851, + MaxDistanceNavmeshMayAdjustPath = 3452202501, + MaxDistanceToAdjustSpeed = 2070026726, + MaxDistanceToAlwaysLookAtTarget = 4029768824, + MaxDistanceToBeConsideredClumped = 2154790128, + MaxDistanceToBeConsideredOptimal = 1883452103, + MaxDistanceToCareAboutBlockingLineOfSight = 803259673, + MaxDistanceToCheckEntryCollisionWhenIgnoring = 3271021322, + MaxDistanceToClampCruiseSpeed = 3954141229, + MaxDistanceToConsiderClose = 1501439076, + MaxDistanceToConsiderCloseToPositionToMoveTo = 2494967040, + MaxDistanceToConsiderTooClose = 3348150388, + MaxDistanceToContinueFromPursue = 3842476462, + MaxDistanceToFindVehicle = 702493934, + MaxDistanceToHoldFireForArrest = 655626928, + MaxDistanceToInsult = 3792438004, + MaxDistanceToMyVehicleToChase = 2374284734, + MaxDistanceToPersist = 3073979382, + MaxDistanceToPursueVehicle = 1506267647, + MaxDistanceToReactToJackForGoToDoor = 3839836820, + MaxDistanceToReturnToLastUsedVehicle = 1770714176, + MaxDistanceToScanForNearbyVehicle = 2354829088, + MaxDistanceToScanLookAts = 491173128, + MaxDistanceToSearchForAquaticPoints = 1744844248, + MaxDistanceToSearchForGroundWildlifePoints = 1961260334, + MaxDistanceToSideOnPavement = 1016024123, + MaxDistanceToStartFromPursue = 648063710, + MaxDistanceToStartMatchingSpeed = 2246107998, + MaxDistanceToTalk = 1179075662, + MaxDistanceToUseUrgentTransitions = 2236196658, + MaxDistanceToVehicleForCommandeer = 3887134676, + MaxDistanceToWatchVehicle = 3050367607, + MaxDistanceTraveledMultiplier = 713008535, + MaxDiveHeight = 2479363241, + MaxDoorSpeedToConsiderClosingDoor = 3503503802, + MaxDot = 3500436404, + MaxDotForHandBrake = 1930122576, + MaxDotToApplyTorque = 403672092, + MaxDotToContinueFromAnalyze = 126845285, + MaxDotToStartFromAnalyze = 1082929500, + MaxDotToTargetToHelpPed = 3200641731, + MaxDriverTimeToLeaveVehicle = 3023143341, + MaxDuration = 3115459373, + MaxDurationForMultiplayerViewModeActivation = 1552516033, + MaxDurationToTrackVehicles = 2514003172, + MaxEncumberedClimbHeight = 4241887050, + MaxEscapeDistance = 1872481699, + MaxExtraHeightForTowedVehicles = 3584381811, + MaxExtraHeightForVehicleTrailers = 2086333922, + MaxExtraMoney = 471524408, + MaxFacingThreshold = 1107258897, + MaxFallHeight = 355034181, + MaxFleeMoveBlendRatio = 2916287204, + MaxFlinchDistance = 1218603971, + MaxForceFiringDistance = 2117446694, + MaxForceFiringStateTime = 1120297675, + MaxForwardSpeed = 2306378250, + MaxForwardsPitchFastSpeed = 1535257534, + MaxForwardsPitchSlope = 1260039600, + MaxForwardsPitchSlopeBalance = 2058043106, + MaxForwardsPitchSlowSpeed = 705106159, + MaxForwardsPitchWheelieBalance = 2198401741, + MaxFov = 3615529910, + MaxGameplayNmAgents = 1794949754, + MaxGameplayNmAgentsMp = 3172335713, + MaxGrabTime = 2123286016, + MaxHandToHandleDistance = 2222197615, + MaxHandleHeightDiff = 474312049, + MaxHandleHeightDiffVan = 3933910603, + MaxHeadingAdjustmentRate = 1871838464, + MaxHeadingAlignmentCosThreshold = 3382384728, + MaxHeadingAngle = 3669858468, + MaxHeadingDiffBetweenCTCPoints = 225620543, + MaxHeadingDifferenceForQuickGlanceInSameDirection = 4164431042, + MaxHeadingSpeed = 1529419507, + MaxHealthImpulseMult = 3839056884, + MaxHealthLossForQuickGetup = 1165801413, + MaxHeavyCrashDeathChance = 1466872193, + MaxHeight = 4276410337, + MaxHeightDifference = 3332963351, + MaxHeightDifferenceToApproachTarget = 1288859935, + MaxHeliDamping = 3700594697, + MaxHoldBreathDuration = 1166926746, + MaxHoverHeightDistToWarpIntoHeli = 2914709570, + MaxImpulse = 1400954876, + MaxInjuredTargetTimerVariation = 1511702574, + MaxInputForIdleExit = 2059966079, + MaxInstances = 2118495770, + MaxIntensity = 1137728512, + MaxIterations = 3378768739, + MaxJumpHeightForSmallImpact = 1962859811, + MaxLateralSkidSpeed = 3579471989, + MaxLeanInDirectionTime = 2519882664, + MaxLength = 977032494, + MaxLift = 489565795, + MaxLimit = 597877266, + MaxLinearVelocity = 1416568288, + MaxLookAroundMoveSpeedMultiplier = 2563263345, + MaxLookAtArmWoundTime = 2663144521, + MaxLookAtDistance = 2034399215, + MaxLookBackAngle = 894057762, + MaxMag = 3421300414, + MaxMoveOrientationSpeedDuringLookAround = 1286077706, + MaxMoveSpeedForFollowOrientation = 1014809841, + MaxMoveSpeedInCover = 2814625688, + MaxMoveToDefensiveAreaAngleVariation = 2154434340, + MaxMovingProbeOffset = 4049257140, + MaxMovingThreshold = 3214855311, + MaxNavmeshPatrolRadiusFactor = 1708395848, + MaxNearbyToFindPerFrame = 1638764838, + MaxNumPedsAllowedToBeVeryCloseToCover = 1481327584, + MaxNumPedsChasingOnFoot = 2540858782, + MaxNumRequestsPerContext = 1337224709, + MaxNumberCopVehiclesInChase = 1965911345, + MaxNumberFakeApproaches = 284429428, + MaxOffset = 826600434, + MaxOpenRatioForOpenDoorInitialInside = 4028760366, + MaxOpenRatioForOpenDoorInitialOutside = 4222207562, + MaxOpenRatioForOpenDoorInside = 2427558104, + MaxOpenRatioForOpenDoorOutside = 1484783860, + MaxOscillationDisplacementInside = 2206944099, + MaxOscillationDisplacementOutside = 1118824342, + MaxParachutePitch = 1610340719, + MaxParachuteRoll = 888388965, + MaxPassengerTimeToLeaveVehicle = 3100475498, + MaxPassengersForAttraction = 865654234, + MaxPhoneFilmTime = 3084950400, + MaxPhoneFilmTimeHurryAway = 2306714989, + MaxPitch = 4261179401, + MaxPitchAngle = 1021608480, + MaxPitchAngle2H = 2966888023, + MaxPitchDefault = 3807823759, + MaxPitchDifferenceForFiringVariation = 644208462, + MaxPitchInAir = 422547942, + MaxPitchSpeed = 1910928125, + MaxPitchingAnglePickPOI = 3709479259, + MaxPlaneControlAbility = 1011508514, + MaxPlaneDamping = 353529649, + MaxPlayerActivationLimit = 83737662, + MaxPlayerCapsulePushTimeForRagdollActivation = 2253067348, + MaxPlayerScore = 2407947760, + MaxPlayerToCoverDist = 4030958526, + MaxPositionVariance = 2240856053, + MaxPreCollisionCameraSpeedToForcePopIn = 4130418064, + MaxPreCollisionCameraSpeedToPausePullBack = 2824365723, + MaxRadius = 466062419, + MaxRadiusForMaxTimeSinceLastSpotted = 208554060, + MaxRadiusForMinTimeSinceLastSpotted = 679039028, + MaxRageRagdolls = 2482945086, + MaxRageRagdollsMp = 1068424255, + MaxRangeWithoutRadioForFistFights = 2602588680, + MaxRate = 1154906885, + MaxRateForInVehicleAnims = 4219653521, + MaxRateForSlowBlendDuration = 1735614949, + MaxRateToPlayCowerReaction = 2442429563, + MaxRateVariance = 2016189169, + MaxReactToFireDelay = 3144065170, + MaxReactToFireRate = 2938880609, + MaxReactionTime = 2030474037, + MaxRelativeHeading = 3645576770, + MaxRoll = 1361361101, + MaxRollFromBrake = 2707471304, + MaxRollFromStick = 4013155074, + MaxRotScale = 3906575696, + MaxRotSpeed = 2343716985, + MaxRotationalSpeed = 2507965951, + MaxRotationalSpeedScale = 502763290, + MaxRouteLengthForCower = 3858374889, + MaxRouteSizeForCower = 325049815, + MaxSearchDistance = 1252284298, + MaxSearchRadiusForNavMesh = 861953935, + MaxSecondsAsTopLevelTask = 324489357, + MaxShakeInstances = 2390340428, + MaxShellShockedDistance = 1811470108, + MaxSidePaddingForTurn = 3250501977, + MaxSpeedDifference = 1143414935, + MaxSpeedDifferenceForPowerAdjustment = 1861379728, + MaxSpeedForAvoid = 1592953719, + MaxSpeedForAvoidDirected = 44796921, + MaxSpeedForBrace = 508750981, + MaxSpeedForEarlyCombatExit = 4258519451, + MaxSpeedForHesitate = 3303023161, + MaxSpeedForStill = 3869148508, + MaxSpeedForStillReverse = 1916394191, + MaxSpeedForVehicle = 2486108674, + MaxSpeedForVehicleMovingSlowly = 408114095, + MaxSpeedToActivate = 3555945363, + MaxSpeedToContinueJackingVehicle = 3826933504, + MaxSpeedToDive = 4063222790, + MaxSpeedToStartJackingVehicle = 4182891936, + MaxSpeedToTriggerFixieSkidTransition = 2271374387, + MaxSpeedToTriggerTrackStandTransition = 1082334520, + MaxSpeedToUseHandBrake = 1580566536, + MaxStairsJumpAngle = 3734083336, + MaxStaminaDuration = 1624872472, + MaxStandWaitTimeMS = 3857242043, + MaxSteerAngle = 3758934792, + MaxSteeringAngleForAmbientIdles = 1299890657, + MaxSteeringAngleForSitIdles = 2737592779, + MaxStepBackDist = 3352731897, + MaxStepOutDist = 899299281, + MaxSteps = 3459663346, + MaxStickChangePerSecond = 1936752322, + MaxStickInputAngleInfluence = 3234046643, + MaxStopPhaseToResumeMovement = 1345455105, + MaxStoppingDuration = 863732031, + MaxStoppingEdgeCheckProbeOffset = 1469301844, + MaxStoppingProbeOffset = 38963063, + MaxStruggleTime = 2216234163, + MaxStunnedTime = 3892117779, + MaxSuperJumpInitialVelocity = 988692459, + MaxSweepAngleWhenAvoidingPopIn = 1583100448, + MaxSweepAngleWhenMovingTowardsLos = 2848194588, + MaxTakeOffHeadingChangeRate = 2210871472, + MaxTakeOffRate = 3524235412, + MaxTargetAngularMovementForWatch = 3193923873, + MaxTargetOffsetX = 4229384679, + MaxTargetOffsetY = 4066129521, + MaxTargetOffsetZ = 3764687490, + MaxTargetOffsetZ_TargetInAir = 3283771357, + MaxTargetSteerAngleToContinueFromPursue = 3306631916, + MaxTargetSteerAngleToStartFromPursue = 2501833676, + MaxThrottle = 64513465, + MaxThrottleForStill = 1906306837, + MaxThrust = 3597427549, + MaxTimeBeforeNewPose = 1274013705, + MaxTimeBeforeReact = 3193578838, + MaxTimeBetweenIdleVariations = 3648216318, + MaxTimeBetweenPlayerIdleVariations = 2015526511, + MaxTimeBetweenSearches = 110388555, + MaxTimeBetweenShootOutTiresGlobal = 283868640, + MaxTimeForAmbientReaction = 2937486448, + MaxTimeForArrestBreakout = 2090607393, + MaxTimeForAudioReaction = 143794235, + MaxTimeForBrake = 110293208, + MaxTimeForHandsUp = 3487053313, + MaxTimeForInitialState = 478429586, + MaxTimeForStream = 122331865, + MaxTimeInBulletReactionState = 1969287622, + MaxTimeInCombatToShootOutTires = 730951251, + MaxTimeInStateToContinueFromPursue = 1655056873, + MaxTimeInSwerve = 4163863357, + MaxTimeMoveNearCrimeMs = 897487244, + MaxTimeMoveToLawFailedPathfindingMs = 2062768994, + MaxTimeMoveToLawMs = 1736715102, + MaxTimeSearchMs = 3450986312, + MaxTimeSinceGetUpForAmbientIdles = 2863765530, + MaxTimeSinceLastSpotted = 1171478055, + MaxTimeSinceShiftedWeightForwardToAllowWheelie = 2103453391, + MaxTimeSinceShot = 3302572334, + MaxTimeStayPinned = 818416092, + MaxTimeStreamClipSetInBeforeSkippingCloseDoor = 3836837046, + MaxTimeStreamClipSetInBeforeWarpMP = 1243230599, + MaxTimeStreamClipSetInBeforeWarpSP = 2153531751, + MaxTimeStreamInVehicleClipSetBeforeStartingEngine = 559307397, + MaxTimeStreamShuffleClipSetInBeforeWarp = 3089447490, + MaxTimeTargetVehicleMoving = 904929247, + MaxTimeToBeObstructed = 3272441861, + MaxTimeToCallPolice = 3706002780, + MaxTimeToClipIntoDynamicCollision = 851288932, + MaxTimeToConsiderPedGoingToDoorPriority = 2361725074, + MaxTimeToFleeInVehicle = 454716601, + MaxTimeToHesitate = 3164535731, + MaxTimeToHoldFireAtTaskInitialization = 2545130112, + MaxTimeToLookAheadForFutureTargetPosition = 2027520168, + MaxTimeToPrepareWeapon = 535072586, + MaxTimeToReact = 512026668, + MaxTimeToRejectRespawnedTarget = 2157137274, + MaxTimeToReserveComponentBeforeWarp = 3107868104, + MaxTimeToSpendInEarLoopToPutDownPhone = 854541557, + MaxTimeToSpendOccluded = 2101619543, + MaxTimeToSpendOccludedByAttachParent = 1735950673, + MaxTimeToSwerve = 2288728578, + MaxTimeToTrespassWhileSwimmingBeforeDeath = 3579116253, + MaxTimeToWait = 2597134309, + MaxTimeToWaitForShot = 2658068209, + MaxTimeToWatchVehicle = 3652981848, + MaxTimeUntilReturnToIdleFromAimAfterAimedAt = 4055554934, + MaxTimeUntilReturnToIdleFromAimDefault = 263823852, + MaxTimeWaitForExitBeforeWarp = 1727051436, + MaxTimeWaitingForBlockingArea = 1799405168, + MaxTimeWaitingForCircleMs = 1160010076, + MaxTimeWithNoReferences = 1570040321, + MaxTimeoutToAcquireLineOfSight = 2480389571, + MaxTrainClimbHeight = 1979246139, + MaxTransScale = 2917519651, + MaxTransVelocity = 766404597, + MaxTranslationalMoveSpeed = 4264959731, + MaxTranslationalScale = 3484537704, + MaxTranslationalStandSpeed = 840729400, + MaxTurnProbeOffset = 1513492849, + MaxUprightRatio = 2171339313, + MaxUsesForIdleVariationChange = 3247168097, + MaxUsesForOutroReactVariationChange = 2728975961, + MaxUsesForPeekingVariationChange = 2265825010, + MaxUsesForPinnedVariationChange = 1988933435, + MaxValue = 3107625217, + MaxValueForCorrection = 4282800535, + MaxVariationForCurrentPitch = 2853820726, + MaxVariationForDesiredPitch = 1403610920, + MaxVehSpeedToConsiderClosingDoor = 3267312723, + MaxVehicleCapsulePushTimeForPlayerRagdollActivation = 3476926475, + MaxVehicleCapsulePushTimeForRagdollActivation = 2007819517, + MaxVehicleCollisionDamageScale = 86779191, + MaxVehicleVelocityForAmbientIdles = 3495687858, + MaxVel = 2245023424, + MaxVelMag = 3255660709, + MaxVelThreshold = 1711478621, + MaxVelocityForSitIdles = 3221129138, + MaxVelocityForSlow = 2650334467, + MaxVelocityForVehicleLookAtSqr = 1245516390, + MaxVelocityToEnterBike = 2759646652, + MaxWaitForShotFailures = 3748385313, + MaxWaitTime = 295850963, + MaxWaitTimeBetweenTakeOffsMS = 626958998, + MaxWallAngle = 2100915621, + MaxWatchTime = 4262514281, + MaxWatchTimeHurryAway = 3939134595, + MaxWheelieAbility = 3607524859, + MaxWorldLimitsPlayerX = 1353421746, + MaxWorldLimitsPlayerY = 420979855, + MaxWptAngle = 3402152282, + MaxWritheTime = 127971633, + MaxXYAccelerationForLeanBike = 2317632829, + MaxXYDistanceForNewPosition = 1731877118, + MaxXYDistanceToApproachTarget = 2074438621, + MaxYIntentionToUseSlowApproach = 1157744908, + MaxYaw = 2297479061, + MaxYawFromRoll = 494928189, + MaxYawFromStick = 430837016, + MaxZAccelerationForLeanBike = 3982029176, + MaxZComponentForCollisionNormal = 3252894044, + MaxZDiffBetweenCoverPoints = 2570702388, + MaxZDiffBetweenPedPos = 4136133905, + MaxZoomFactor = 3357849814, + MediumImportanceModifier = 3388322333, + MediumShot = 2976595087, + Melee = 2945330295, + MeleeHeadingFalloffPowerRunning = 3977716086, + MeleeHeadingOverride = 4259971013, + MeleeHeadingOverrideRunning = 2260731941, + MeleeLockOnCameraWeighting = 2159755352, + MeleeLockOnCameraWeightingNoStick = 3188195832, + MeleeLockOnPedWeightingNoStick = 2452287190, + MeleeLockOnStickWeighting = 2608892368, + MeleeLostLOSBreakTime = 3651791969, + MemoryDuration = 1743809398, + MemoryGroup = 4286534285, + Messages = 605698999, + MetadataList = 4098657407, + MicroSMG = 1685333671, + MinAccelModifier = 274966492, + MinAccumulatedImpactForSideSwipe = 3443143875, + MinAiSpeedForStandingUp = 510487850, + MinAimTimeMs = 2221861795, + MinAircraftContactSpeedToApplyFullAttachParentMatrixForRelativeOrbit = 1190961214, + MinAircraftGroundSpeedToApplyFullAttachParentMatrixForRelativeOrbit = 1708190798, + MinAltitudeDelta = 4256613730, + MinAmplitude = 3172666582, + MinAngleForScaleVelocityExtension = 2856025533, + MinAnglePickPOI = 389125880, + MinAngularVelocityScaleFactor = 40347237, + MinAnimOffsetMagnitude = 2661194585, + MinAnimRotationDeltaToScale = 3718056384, + MinAnimTranslationDeltaToScale = 99937628, + MinArmourImpulseMult = 3969466346, + MinAttachParentApproachSpeedForPitchLock = 2127124229, + MinAttachParentHeightRatioToPushAwayFromCollision = 296951838, + MinAttachSpeedToUpdateTightSpaceLevel = 2058076685, + MinBackOffDistance = 1492713734, + MinBlendDurationForInitialLockOn = 3397272914, + MinBlendDurationForLockOnSwitch = 3048647846, + MinBlendLevelAfterPushAwayFromCollision = 527029053, + MinBlendWeightToUseFarClipEvents = 2057785224, + MinBlendWeightToUseHighClipEvents = 3370177558, + MinBrake = 3259827294, + MinBrakeForCloseUpCamera = 3323891652, + MinCameraMoveSpeedToSweepInDirectionOfTravel = 1302934580, + MinCentredSteeringAngleTimeForSitIdles = 3234674890, + MinCircleRadius = 3257642822, + MinClearDistanceBelow = 3563387020, + MinContactDepthForContinuousPushActivation = 4064358618, + MinCoverToPlayerCoverDist = 4196658405, + MinCruiseSpeedMultiplier = 2635294172, + MinCurrentRotationDeltaToScale = 478065483, + MinDamageTakenImpulseMult = 167326155, + MinDamageTakenThreshold = 1810182352, + MinDamageTakenToApplyDamageAI = 2405402680, + MinDamageTakenToApplyDamagePlayer = 2721586149, + MinDamageToCheckForRandomDeath = 2190188961, + MinDeccelModifier = 3966738289, + MinDefendPointWaitTimeMS = 3250827903, + MinDefensiveAreaRadiusForWillAdvance = 1909915037, + MinDelay = 3403479156, + MinDelayBetweenBuoyancyStateChanges = 1503749012, + MinDelayExitTime = 3151657361, + MinDelayForGetOff = 2811169447, + MinDelayOnSubmerging = 3666052486, + MinDelayOnSurfacing = 2560927169, + MinDelayTimeForExitVehicle = 3267921887, + MinDelayTimer = 564420500, + MinDepthBelowSurface = 2503381867, + MinDepthUnderWaterWhenNotBuoyant = 3111702866, + MinDifferenceBetweenCowerReactionRates = 884159106, + MinDisplacementScale = 3403073366, + MinDistAwayFromEntryPointToConsiderFinished = 24914513, + MinDistFromOtherPeds = 1071466356, + MinDistFromPlayerToDeleteCoweringForever = 3668424542, + MinDistFromPlayerToDeleteOffscreen = 162655462, + MinDistFromPlayerToDeleteOnExitVehicle = 225841828, + MinDistFromTargetWhenCoweringToCheckForExit = 9265257, + MinDistPercentageToScaleScanArc = 3089390809, + MinDistScanArc = 1000280571, + MinDistToAlwaysClampInitialOrientation = 1420291822, + MinDistToCoverAnyDir = 449945587, + MinDistToCoverSpecificDir = 2215019044, + MinDistToPlayEntryAnim = 525431756, + MinDistToPriorityCoverToForce = 997332238, + MinDistToScale = 3131955124, + MinDistToVehicle = 722704686, + MinDistUpdateFrequency = 475173943, + MinDistanceAwayForFilming = 334429677, + MinDistanceBetweenFilmingPeds = 2758358422, + MinDistanceBetweenPositionsWithClearLineOfSight = 579362303, + MinDistanceBetweenPositionsWithoutClearLineOfSightInExteriors = 72559400, + MinDistanceBetweenPositionsWithoutClearLineOfSightInInteriors = 2086611921, + MinDistanceForAimIntro = 813193409, + MinDistanceForAmbientReaction = 946719330, + MinDistanceForAvoid = 724928304, + MinDistanceForAvoidDirected = 3043121072, + MinDistanceForBackAway = 2509346908, + MinDistanceForFineAimScaling = 1350912934, + MinDistanceForLawToFleeFromCombat = 871647294, + MinDistanceForLockOn = 9436207, + MinDistanceForSearch = 2124766118, + MinDistanceForSlowdown = 4284975454, + MinDistanceFromPlayerToDeleteHurriedPed = 3508977239, + MinDistanceFromPlayerToDeleteStuckBird = 2955815816, + MinDistanceMovedToStartSearch = 4233283909, + MinDistanceToAdjust = 4143621306, + MinDistanceToAdjustSpeed = 1514235773, + MinDistanceToBeConsideredLaggingBehind = 4205882999, + MinDistanceToBeConsideredOptimal = 4180445694, + MinDistanceToCheckClumped = 2096238662, + MinDistanceToContinue = 3514547823, + MinDistanceToCoverToStop = 3078439303, + MinDistanceToEnterVehicleIfTargetEntersVehicle = 3875303030, + MinDistanceToFindVehicle = 4037909654, + MinDistanceToLookAhead = 1577260290, + MinDistanceToLookBehind = 3533260791, + MinDistanceToMove = 1348357381, + MinDistanceToScanForNearbyVehicle = 868829697, + MinDistanceToSearchForAquaticPoints = 3539942532, + MinDistanceToSearchForGroundWildlifePoints = 303177901, + MinDistanceToSetApproachPosition = 2521320953, + MinDistanceToSideOnPavement = 2371258779, + MinDistanceToStart = 3423985846, + MinDistanceToStartMatchingSpeed = 820982755, + MinDistanceToTargetForIdleVariations = 1823873460, + MinDistanceToTargetForPeek = 4047811579, + MinDiveHeight = 1331483625, + MinDot = 1241644828, + MinDotForInFront = 890881625, + MinDotForPickupDirection = 1046969538, + MinDotForSlowdown = 2841547079, + MinDotMovingAwayFromTargetToStartCruiseInFront = 1195737890, + MinDotMovingTowardsTargetToContinueBrakeInFront = 2713817702, + MinDotMovingTowardsTargetToStartBrakeInFront = 935837869, + MinDotTargetMovingTowardsOurSideToStartBackAndForth = 1212941547, + MinDotTargetMovingTowardsUsToContinueBackAndForth = 737095977, + MinDotTargetMovingTowardsUsToContinueBrakeInFront = 67415689, + MinDotTargetMovingTowardsUsToContinueCruiseInFront = 2961114452, + MinDotTargetMovingTowardsUsToStartBackAndForth = 4094305061, + MinDotTargetMovingTowardsUsToStartBrakeInFront = 1917200737, + MinDotTargetMovingTowardsUsToStartCruiseInFront = 3682638304, + MinDotToBeConsideredInFront = 4211240273, + MinDotToClampCruiseSpeed = 1823449253, + MinDotToConsiderVehicleValid = 1576858885, + MinDotToContinueFromAnalyze = 158897950, + MinDotToContinueFromPursue = 2146950936, + MinDotToInsult = 536817715, + MinDotToPointGunAtPositionWhenUnableToTurn = 2838815119, + MinDotToStartFromAnalyze = 2497181955, + MinDotToStartFromPursue = 1707529261, + MinDotToTalk = 2101568980, + MinDriverTimeToLeaveVehicle = 1223491754, + MinEdgeDistanceForStoppingAnim = 1251038941, + MinExtraMoney = 1666523442, + MinFallHeight = 3171739573, + MinFallSpeedForHighFallAbort = 1512271781, + MinFallingSpeedForAnimatedDyingFall = 1632351140, + MinFallingSpeedInRagdoll = 1694228856, + MinFineAimTime = 1340511632, + MinFineAimTimeHoldingStick = 64509274, + MinFleeMoveBlendRatio = 859826315, + MinFocusToSecondaryFocusDistance = 1225855688, + MinForDrivebys = 1749910459, + MinForceFiringDistance = 1845309081, + MinForceFiringStateTime = 1435641288, + MinForwardSpeed = 2742393958, + MinForwardsPitchFastSpeed = 3949027340, + MinForwardsPitchSlope = 2116015636, + MinForwardsPitchSlopeBalance = 3525415799, + MinForwardsPitchSlowSpeed = 3517975074, + MinForwardsPitchWheelieBalance = 3271949585, + MinForwardsPitchWheelieBegin = 1825055764, + MinFov = 2006858266, + MinFovForNetworkPlay = 1881152859, + MinGrabTime = 1433408101, + MinHandleHeightDiffVan = 1408201742, + MinHeadShotImpulseMultiplier = 3084941871, + MinHeadingAlignmentCosThreshold = 3690289360, + MinHeadingAngle = 2186047470, + MinHealth = 1280594926, + MinHealthForQuickGetup = 3891222055, + MinHealthImpulseMult = 4101332336, + MinHeavyCrashDeathChance = 663937180, + MinHeight = 1206332797, + MinHeightAboveTerrain = 2018929951, + MinHeightAboveVehicleDriverSeat = 3420511035, + MinHeightAboveWater = 851393034, + MinHeightAboveWaterWhenBuoyant = 2469744276, + MinHeliDamping = 2239295053, + MinHitNormalDotWorldUpForRivers = 2252203055, + MinHoldBreathDuration = 299633947, + MinHoldTimeToBlockFullAttachParentMatrixForRelativeOrbit = 897419234, + MinImpulse = 675904337, + MinInputToInterruptIdle = 3378374324, + MinIntensity = 1509127932, + MinLateralSkidSpeed = 4191348047, + MinLeanInDirectionTime = 4237013150, + MinLength = 1352021757, + MinLookAtArmWoundTime = 1894293331, + MinMBRToStop = 326250284, + MinMag = 1967662718, + MinMagForBikeToBeOnSide = 667864712, + MinMoveToCoverDistForCoverMeAudio = 3920545059, + MinMovingProbeOffset = 26449222, + MinMovingToCoverTimeToStop = 254417857, + MinNavmeshPatrolRadiusFactor = 1521803727, + MinNoReticuleAimTime = 2809571307, + MinNumberFakeApproaches = 2768935848, + MinOffsetForGetInPosition = 1340388073, + MinOpenDoorRatioToUseArmIk = 2696374786, + MinOrientationDeltaToCut = 1055028939, + MinOrientationDeltaToCutForReverseAngle = 2434688331, + MinOrientationDeltaToCutWithTrailer = 1873731470, + MinOrientationSpeedToMaintainDirection = 785961650, + MinParachutePitch = 1228835903, + MinPassengerTimeToLeaveVehicle = 3439953457, + MinPassengersForAttraction = 3561917245, + MinPathLengthForValidExit = 1596520127, + MinPedFwdToEntryDotToClampInitialOrientation = 158501595, + MinPedSpeedToActivateRagdoll = 1213730703, + MinPhaseToApplyExtraHeadingAi = 2185200792, + MinPhaseToApplyExtraHeadingPlayer = 3617904707, + MinPhoneFilmTime = 1169941758, + MinPhoneFilmTimeHurryAway = 1926295578, + MinPhysSpeedToActivateRagdoll = 4167152455, + MinPitch = 509392339, + MinPitchAngle = 3480847079, + MinPitchAngle2H = 2669496770, + MinPitchDefault = 1054799563, + MinPitchInAir = 2469007968, + MinPlaneControlAbility = 1670377462, + MinPlaneDamping = 3955578614, + MinPlayerJumpOutSpeedBike = 2863410559, + MinPlayerJumpOutSpeedCar = 2485839112, + MinPlayerMoveDistanceToSpawnChase = 1676424772, + MinRate = 1240074404, + MinRateForInVehicleAnims = 438194982, + MinRateToPlayCowerReaction = 2568949102, + MinRatioForClosingDoor = 1807337106, + MinReactToFireRate = 1887154148, + MinRelativeHeading = 3137513888, + MinRemainingAnimDurationToScale = 2357080007, + MinRemainingRotationForScaling = 1379047521, + MinRoll = 1178479344, + MinRotDelta = 1511471000, + MinRotScale = 614907799, + MinRotationalSpeedScale = 2167006115, + MinSafeOrbitDistanceScalingForExtensions = 177572622, + MinSafeRadiusReductionWithinPedMoverCapsule = 1976571596, + MinSideNormalForSideSwipe = 48284945, + MinSnap = 709707651, + MinSoftLockBreakAtMaxXStickTime = 2357834650, + MinSoftLockBreakTime = 1649684365, + MinSoftLockBreakTimeCloseRange = 3539954611, + MinSpawnTimeForPoliceHeliAfterDestroyed = 4153560394, + MinSpeed = 1724998945, + MinSpeedDifferenceForPowerAdjustment = 3207905455, + MinSpeedForAvoid = 252789847, + MinSpeedForAvoidDirected = 2493712752, + MinSpeedForChase = 1337026297, + MinSpeedForDive = 2304242044, + MinSpeedForMaxRelativeAttachSpringConstant = 1558815907, + MinSpeedForSwerve = 2981979817, + MinSpeedForVehicleMovingQuickly = 1059555640, + MinSpeedForVehicleToBeConsideredStillSqr = 4258377742, + MinSpeedForWreck = 2743225815, + MinSpeedInSwerve = 1487496534, + MinSpeedLeewayToStartFromPursue = 2231898585, + MinSpeedToAbortOpenDoor = 492953913, + MinSpeedToAbortOpenDoorCombat = 3831454313, + MinSpeedToAbortOpenDoorPlayer = 2387057259, + MinSpeedToApplyReaction = 672649965, + MinSpeedToApplyTorque = 601372446, + MinSpeedToBeConsideredEscapingInVehicle = 2329813458, + MinSpeedToBlendInDriveFastFacial = 380529072, + MinSpeedToDeactivate = 3815175242, + MinSpeedToDive = 152364693, + MinSpeedToJumpOutOfVehicle = 3352329382, + MinSpeedToRagdollOpenDoor = 3555981726, + MinSpeedToRagdollOpenDoorCombat = 820682935, + MinSpeedToRagdollOpenDoorPlayer = 1024103431, + MinSprintResultToStand = 3302557202, + MinSqdDistToSetPos = 2571589718, + MinStaminaDuration = 1051647876, + MinStandWaitTimeMS = 1521808097, + MinSteerAngle = 168285857, + MinStepOutDist = 427371079, + MinStickInputToEnableCoverToCover = 1887369799, + MinStickInputToEnableMoveAroundCorner = 2511576109, + MinStickInputToMoveAroundCorner = 629671162, + MinStickInputToMoveInCover = 1261300416, + MinStickInputXAxisToTurnInCover = 2609438296, + MinStickMagnitudeForEarlyOutMovement = 2039762038, + MinStopPhaseToResumeMovement = 2282663253, + MinStoppingDist = 691235540, + MinStoppingEdgeCheckProbeOffset = 772858715, + MinStoppingProbeOffset = 3446268000, + MinStruggleTime = 2829230620, + MinStunnedTime = 3100954165, + MinSuperJumpInitialVelocity = 4057741743, + MinTakeOffHeadingChangeRate = 72858195, + MinTakeOffRate = 1117824032, + MinTargetOffsetX = 69361213, + MinTargetOffsetY = 3996070487, + MinTargetOffsetZ = 3765475034, + MinTargetOffsetZ_TargetInAir = 3515816840, + MinTargetSpeedToContinueFromPursue = 1829902171, + MinTargetSpeedToStartFromPursue = 4080325939, + MinTargetStandingOnTrainSpeed = 3385636076, + MinThrottle = 1568208081, + MinTimeBeforeAllowingAutoPeek = 3608928929, + MinTimeBeforeAllowingCornerMove = 1733226917, + MinTimeBeforeCanChooseNewPose = 2658395586, + MinTimeBeforeNewPose = 3603257907, + MinTimeBeforeReact = 3183040402, + MinTimeBeforeSwitchLookAt = 1289065068, + MinTimeBetweenAttemptsToFindNearby = 2714855430, + MinTimeBetweenAttemptsToFindNewPosition = 765310, + MinTimeBetweenCloseDoorAttempts = 663934809, + MinTimeBetweenEyeIkProcesses = 206502145, + MinTimeBetweenFiringVariations = 817834735, + MinTimeBetweenFlinches = 2271449308, + MinTimeBetweenIdleVariations = 2643024561, + MinTimeBetweenInsults = 3789052240, + MinTimeBetweenLineOfSightTests = 967712511, + MinTimeBetweenMeleeJackAttempts = 4106127787, + MinTimeBetweenMeleeJackAttemptsOnNetworkClone = 1911699676, + MinTimeBetweenOverheadBulletReactions = 3886708440, + MinTimeBetweenPlayerIdleVariations = 1573385593, + MinTimeBetweenQuickGlancesInSameDirection = 1927524225, + MinTimeBetweenReactionChecksForGunAimedAt = 1752177996, + MinTimeBetweenReactions = 3817763328, + MinTimeBetweenSharkDispatches = 4195725397, + MinTimeBetweenShootOutTiresGlobal = 470555105, + MinTimeBetweenStatusUpdates = 1814559575, + MinTimeBetweenStrafeDirectionChanges = 4157008494, + MinTimeBoatOutOfWaterForExit = 3458993355, + MinTimeElapsedForGroundWrithe = 3919163430, + MinTimeForAmbientReaction = 1295611070, + MinTimeForCornerMove = 4067447650, + MinTimeForHandsUp = 1376968536, + MinTimeForInitialState = 3439568038, + MinTimeInCombatToNotStreamIn = 2838084369, + MinTimeInCombatToShootOutTires = 1335171882, + MinTimeInCurrentStateForStill = 2871611248, + MinTimeInFreewheelState = 3840966049, + MinTimeInHornState = 3070028166, + MinTimeInPedalState = 2196376340, + MinTimeInRagdoll = 3903892409, + MinTimeInShuntStateBeforeRestart = 3200053693, + MinTimeInSitToStillStateToReverse = 3389614983, + MinTimeInStandState = 3553993325, + MinTimeInStateForForcedFire = 1232297261, + MinTimeInStateToAllowTransitionFromFixieSkid = 863715729, + MinTimeInTaskToCheckForDamage = 2132426494, + MinTimeMovingAwayToGiveToWitness = 1927499316, + MinTimeRemainingForGroundWrithe = 2331611470, + MinTimeSinceAnyCircleJoined = 4160428671, + MinTimeSinceLastHostileAction = 1740762106, + MinTimeSinceLastSpotted = 3151249820, + MinTimeSinceSameCircleJoined = 1038805177, + MinTimeSinceTalkingEndedToMakeCall = 3385798684, + MinTimeSinceTalkingEndedToSayContextForCall = 4230329614, + MinTimeSinceTargetTalkingEndedToMakeCall = 2919871050, + MinTimeSpentInEarLoopToSayContextForCall = 2980295761, + MinTimeSpentSwimmingToRespectMotionTask = 2968196113, + MinTimeStayPinned = 2308421233, + MinTimeTargetHasBeenTalkingToMakeCall = 4048361920, + MinTimeToBePinnedDown = 3650240986, + MinTimeToCallPolice = 821642865, + MinTimeToChangeChaseOnFootSpeed = 615112755, + MinTimeToConsiderDangerousDriving = 3887812374, + MinTimeToConsiderPedGoingToDoorPriority = 423470112, + MinTimeToFleeInVehicle = 3344957179, + MinTimeToHesitate = 3189387953, + MinTimeToKeepEngineAndLightsOnWhileParked = 2478597497, + MinTimeToPrepareWeapon = 3427043837, + MinTimeToReact = 3649567479, + MinTimeToRepeatLastAnimation = 1359604368, + MinTimeToScale = 2681841281, + MinTimeToSpendInEarLoopToPutDownPhone = 2423924604, + MinTimeToSpendInTask = 3005241839, + MinTimeToStandUp = 2267264803, + MinTimeToStayUprightAfterImpact = 3608841595, + MinTimeToSwerve = 1907731990, + MinTimeToWait = 460015891, + MinTimeToWaitForOtherPedToExit = 746970568, + MinTimeToWaitForShot = 1841691026, + MinTimeUntilReturnToIdleFromAimAfterAimedAt = 1630578621, + MinTimeUntilReturnToIdleFromAimDefault = 360559002, + MinTimeoutToAcquireLineOfSight = 3438052999, + MinTransScale = 1999362333, + MinTranslationalScale = 2870050188, + MinTurnApproachRate = 1055045198, + MinTurnProbeOffset = 3317722172, + MinTurnSpeedMotionOverPOI = 2806951563, + MinUpdatesBeforeApplyingMotionBlur = 1025607184, + MinUsesForIdleVariationChange = 3007638827, + MinUsesForOutroReactVariationChange = 1069071024, + MinUsesForPeekingVariationChange = 1848963111, + MinUsesForPinnedVariationChange = 3203888722, + MinValue = 324547252, + MinValueForCorrection = 2782043564, + MinVehVelMagForBicycleSideSwipe = 3048137979, + MinVehVelMagForSideSwipe = 3804354300, + MinVehVelocityToGoThroughWindscreen = 1165173355, + MinVehVelocityToGoThroughWindscreenMP = 2444940549, + MinVehicleCollisionDamageScale = 1127062988, + MinVehicleWarning = 798220376, + MinVel = 66577426, + MinVelMag = 3279914945, + MinVelStillStart = 2988949625, + MinVelStillStop = 2175562542, + MinVelThreshold = 3891030916, + MinVelThroughNormalForSideSwipe = 1658632009, + MinVelocity = 2073951791, + MinVelocityForDriveByAssistedAim = 3025537526, + MinVelocityForFast = 2876804674, + MinVelocityToRagdollPed = 52645552, + MinVelocityToScale = 3538596479, + MinWaitTime = 3965435915, + MinWaitTimeBetweenTakeOffsMS = 3519366748, + MinWaitTimeToPlayPlayerIdleVariations = 1797303037, + MinWatchTime = 424721387, + MinWatchTimeHurryAway = 3859810396, + MinWheelieAbility = 1924165020, + MinWorldLimitsPlayerX = 3684109243, + MinWorldLimitsPlayerY = 164620332, + MinWritheTime = 4260165656, + MinXYVelForWantsToMove = 514488562, + MinimumDownedTime = 3571595842, + MinimumShotReactionTimeAIMS = 1078427012, + MinimumShotReactionTimePlayerMS = 3405078066, + MobileChatScenarioMayAbort = 1434985449, + MobilePhoneCameraControlHelperRef = 376729145, + ModelForParachuteInMP = 745109363, + ModelForParachuteInSP = 1753140963, + ModelNamesToConsiderPlayersForScoringPurposes = 1071210221, + Modes = 945555571, + ModifierName = 2966939369, + MotionBlurSettings = 490368749, + MotionBlurStrength = 1859659636, + MotionLookAtBlendRate = 1566172518, + MotionLookAtRotationLimit = 3198801841, + MotionLookAtTurnRate = 1972120707, + MotivationMax = 2674738037, + MotivationMin = 4238411479, + MouseMaxHeadingSpeedMax = 2735899528, + MouseMaxHeadingSpeedMin = 419948133, + MouseMaxPitchSpeedMax = 1102394099, + MouseMaxPitchSpeedMin = 2160264290, + MoveBlendRatioForFarGoto = 1440512567, + MoveNetworkBlendoutDuration = 780063382, + MoveParameters = 1126598037, + MoveRateOverride = 3469377736, + MoveToDistanceInVehicle = 1359250131, + MovementAcceleration = 1913804545, + MovementAwayWeighting = 1351646535, + MovementClipRate = 4205396201, + MovementClipSets = 3053450155, + MovementCostModifier = 1366066164, + MovementMotionBlurMaxSpeed = 1743155234, + MovementMotionBlurMaxStrength = 1328935990, + MovementMotionBlurMinSpeed = 3274038425, + Moving = 3575677823, + MovingAnimStateInfos = 2676261337, + MovingAwayVelocityMSThreshold = 1549370724, + MovingDirectionSmoothingAngleMax = 916804787, + MovingDirectionSmoothingAngleMin = 3163856764, + MovingDirectionSmoothingForwardAngleRun = 4229364158, + MovingDirectionSmoothingForwardAngleWalk = 817979133, + MovingDirectionSmoothingForwardRateAccelerationMod = 206173392, + MovingDirectionSmoothingForwardRateMod = 4209639571, + MovingDirectionSmoothingRateAccelerationMax = 1021183862, + MovingDirectionSmoothingRateAccelerationMin = 4203477475, + MovingDirectionSmoothingRateMaxRun = 2229072832, + MovingDirectionSmoothingRateMaxWalk = 2584063876, + MovingDirectionSmoothingRateMin = 2151433465, + MovingEdgeTestEndYOffset = 189580395, + MovingEdgeTestStartYOffset = 1678354404, + MovingExtraHeadingChangeAngleMax = 3031402448, + MovingExtraHeadingChangeAngleMin = 243413468, + MovingExtraHeadingChangeRate = 830448667, + MovingExtraHeadingChangeRateAcceleration = 932904484, + MovingExtraHeadingChangeRateAccelerationMax = 3423772986, + MovingExtraHeadingChangeRateAccelerationMin = 2172130562, + MovingExtraHeadingChangeRateRun = 2979286721, + MovingExtraHeadingChangeRateWalk = 3334261987, + MovingMultiplierBonus = 474003950, + MovingVarsSet = 2593822105, + MovingVehicleVelocityThreshold = 309425308, + MovingWalkAnimRateAcceleration = 3381710529, + MovingWalkAnimRateMax = 1051732090, + MovingWalkAnimRateMin = 2563588038, + MpActivationModifiers = 755518553, + MpMaxHealthLossForQuickGetup = 1666177823, + MpMinHealthForQuickGetup = 888956679, + MpPlayerQuickBlendOut = 558729515, + MultiplayerClimbClamberRateModifier = 935832867, + MultiplayerClimbRunningRateModifier = 2530564765, + MultiplayerClimbStandRateModifier = 367433608, + MultiplayerCoverIntroRateModifier = 674066505, + MultiplayerEnterExitJackVehicleRateModifier = 891602871, + MultiplayerIdleTurnRateModifier = 2570857418, + MultiplayerLadderRateModifier = 2900803312, + MultiplayerReloadRateModifier = 1245165468, + MultiplierForDangerousDriving = 4090325919, + NAME_BIG = 1877679104, + NAME_MED = 2980984179, + NAME_SMALL = 298596333, + NETWORKOPTIONS_FILE = 3850710962, + NMBodyScale = 380014673, + NM_TUNING_FILE = 1639152529, + NO_REACTION = 3073843763, + NavMeshPoint = 680699981, + NavMeshPoints = 2288844751, + NearClip = 1325746994, + NearDistanceForOrientation = 4175205823, + Nearby = 3709090817, + NeckShot = 256476042, + NeckStrengthTuning = 2519031107, + NetworkBlendDuration = 1021030104, + NetworkBlendDurationOpenDoorCombat = 132682005, + NetworkBlendInDuration = 8008463, + NetworkBlendOutDuration = 2175660835, + NetworkBlendOutDurationRun = 235129999, + NetworkBlendOutDurationRunStart = 2896892589, + NeverUse = 2562048776, + NewLeanSteerApproachRate = 1728172908, + NextTransitionClipId = 3399412192, + NextTransitionExtraScalar = 2392693984, + NoCoverEastFaceCenter = 3014113591, + NoCoverEastFaceNorth = 4173874730, + NoCoverEastFaceSouth = 3315722870, + NoCoverNorthFaceCenter = 1753198982, + NoCoverNorthFaceEast = 3074030570, + NoCoverNorthFaceWest = 4102086546, + NoCoverSouthFaceCenter = 1192754605, + NoCoverSouthFaceEast = 3712292480, + NoCoverSouthFaceWest = 3483214048, + NoCoverVehicleDoors = 4158814707, + NoCoverWestFaceCenter = 1200088335, + NoCoverWestFaceNorth = 980667646, + NoCoverWestFaceSouth = 4149395173, + NoParachuteMaxCollisionNormalThreshold = 1928060490, + NoParachuteMaxPitch = 2440882257, + NoParachuteMinCollisionNormalThreshold = 4262842160, + NoParachuteTimeForMinCollisionNormalThreshold = 336137001, + NoReticuleLockOnRangeModifier = 3583828968, + NoReticuleMaxLockOnRange = 2308178823, + NoReticuleTargetAimPitchLimit = 1235721286, + NoReticuleTargetAngularLimit = 4232341165, + NoReticuleTargetAngularLimitClose = 4081370038, + NoReticuleTargetAngularLimitCloseDistMax = 3453384537, + NoReticuleTargetAngularLimitCloseDistMin = 2946314787, + NonFlyableArea = 3154226565, + NonFlyableAreaArray = 665455491, + NormalPreferredDepth = 1606727990, + NormalTargettingDifficultyInfo = 3104062807, + NormalThresholds = 3543710223, + NotBeingPushedDelayMS = 4123949353, + NotBeingPushedOnGroundDelayMS = 739931697, + NotProfessional = 931067397, + NumCapsuleTests = 2133560880, + NumEarlyVehicleEntryDriversAllowed = 889613745, + NumFramesToPersistLargeVerticalAcceleration = 2142946869, + NumTests = 465899626, + NumToUpdatePerFrame = 575445590, + NumberOfBurstsMax = 3616069026, + NumberOfBurstsMin = 236118490, + NumberOfShotsPerBurstMax = 428905168, + NumberOfShotsPerBurstMin = 2577107356, + OCMClearanceCapsuleRadius = 852914750, + OCMCrouchedForwardClearanceOffset = 3832321302, + OCMCrouchedHeightOffset = 461310715, + OCMSideClearanceDepth = 4269848077, + OCMSideTestDepth = 2079300420, + OCMStandingForwardClearanceOffset = 1249475394, + OCMStandingHeightOffset = 708594816, + ON_BIKE = 1812735189, + ObjectActivationForceMultiplier = 116532981, + ObjectMinSpeedForActivation = 602234407, + ObstructionProbe = 1865732807, + ObstructionProbeAngleA = 3742382496, + ObstructionProbeAngleB = 3275063787, + ObstructionProbeAngleC = 4169133183, + OcclusionSweep = 1207465912, + Occupied = 1339021909, + OffsetLimits = 3479495276, + OnBalanceFailed = 3974797120, + OnBalanceFailedSprintExhausted = 3419269985, + OnBalanceFailedStairs = 1418190490, + OnBalanceFailure = 494965274, + OnBeingPushed = 577683658, + OnBeingPushedOnGround = 258986085, + OnBeingPushedOnGroundTooLong = 1444135973, + OnCatchFallSuccess = 4246526405, + OnDisableDriveToGetup = 553250717, + OnElectrocuteFinished = 3413282736, + OnEnableDriveToGetup = 609938430, + OnFireWeightingMult = 3746655905, + OnFootBlendInDuration = 1084086108, + OnFootClipRate = 4280609914, + OnFootLookAtDampingRef = 2538678656, + OnMovingGround = 4192987078, + OnNotBeingPushed = 256038063, + OnSlopeThreshold = 1801923157, + OnStairs = 3396170193, + OnSteepSlope = 3705331241, + OneHandedClipSetName = 448596277, + OnlyAllowForShot = 3256506769, + OnlyInContact = 4063846733, + OnlyNotInContact = 122191424, + OnlyUseForGangPeds = 2711794664, + OnlyUseForLawEnforcementPeds = 4078932877, + OnlyUseForReactions = 1952942912, + OpenDoorBlendDurationFromNormalAlign = 1615640364, + OpenDoorBlendDurationFromOnVehicleAlign = 754839673, + OpenDoorToJackBlendDuration = 3439162962, + Optimal = 2980335366, + OptimumDistToLeftCoverEdge = 796885552, + OptimumDistToLeftCoverEdgeCrouched = 3881315855, + OptimumDistToRightCoverEdge = 2188704570, + OptimumDistToRightCoverEdgeCrouched = 2688479781, + OrbitDistance = 2733631256, + OrbitDistanceDamping = 337202266, + OrbitDistanceLimitScaling = 1688148358, + OrbitDistanceLimitSpringConstant = 2829148759, + OrbitDistanceLimitSpringDampingRatio = 1084689577, + OrbitDistanceLimitsForBasePosition = 2111969249, + OrbitDistanceScalingForCustomFirstPersonFallBack = 3978450060, + OrbitDistanceScalingLimits = 1871429041, + OrbitDistanceScalingSpringConstant = 2983717675, + OrbitDistanceScalingSpringDampingRatio = 1300443955, + OrbitDistanceScalingToApplyWhenPushing = 2688276525, + OrbitPitchLimits = 1974814289, + OrbitPitchOffsetWhenFullyDucked = 3105010187, + OrientationSpring = 3781066831, + OutDuration = 3592760554, + OuterDistanceThreshold = 2366160443, + OutroClip0Id = 3585249404, + OutroMaxScale = 2206745704, + OutroMovementDuration = 2943938244, + OutroRate = 2260414033, + OutroReact1HVariationClipsets = 1976510010, + OutroReact2HVariationClipsets = 1754157237, + OutroRotationScalingDefaultEndPhase = 4246951180, + OutroRotationScalingDefaultStartPhase = 2960195918, + OutroScalingDefaultEndPhase = 1459623344, + OutroScalingDefaultStartPhase = 3467497537, + OverVehicle = 2691364124, + OverlapSpeedMultiplier = 2358940861, + Overlay = 370428790, + OverrideDirections = 198397458, + OverrideElasticity = 134807671, + OverrideFleeDirection = 3320627039, + OverrideFlipForce = 2230782934, + OverrideFriction = 3907466188, + OverrideInitialForce = 3258479231, + OverrideInverseMassScales = 143477949, + OverrideReactDirection = 3275732457, + OverrideReactionType = 1094485493, + OverrideRootLiftForce = 1333505912, + OverrideStuckOnVehicleSets = 2561285304, + OverwriteMaxPitch = 2955289081, + PARTITION_MAX = 2899492762, + PED_BOUNDS_FILE = 2374071028, + PED_BRAWLING_STYLE_FILE = 1575806881, + PED_COMPONENT_CLOTH_FILE = 1241304438, + PED_COMPONENT_SETS_FILE = 1714450686, + PED_DRIVES_AVERAGE_CAR = 1662727357, + PED_DRIVES_BIG_CAR = 1066836384, + PED_DRIVES_BOAT = 2087263659, + PED_DRIVES_MOTORCYCLE = 698500424, + PED_DRIVES_POOR_CAR = 3796340206, + PED_DRIVES_RICH_CAR = 740214256, + PED_HEALTH_FILE = 2737334773, + PED_IK_SETTINGS_FILE = 4183131447, + PED_NAV_CAPABILITES_FILE = 3376025535, + PED_PERCEPTION_FILE = 1804477999, + PED_SPECIAL_ABILITIES_FILE = 3685712067, + PED_TASK_DATA_FILE = 3947749085, + PED_VARS_FILE = 915034040, + PLAYER_CARD_SETUP = 1504533439, + POILookAtBlendRate = 1217360623, + POILookAtRotationLimit = 3819703101, + POILookAtTurnRate = 1321758856, POLICE_SCANNER_COLOUR_beige = 2477037232, POLICE_SCANNER_COLOUR_black = 52583446, POLICE_SCANNER_COLOUR_blue = 2253400966, @@ -3696,6 +6725,1158 @@ namespace CodeWalker.GameFiles POLICE_SCANNER_PREFIX_bright = 2318284788, POLICE_SCANNER_PREFIX_dark = 3921902053, POLICE_SCANNER_PREFIX_light = 840729009, + POPGROUP_AERIAL = 2486476801, + POPGROUP_AMBIENT = 2602754504, + POPGROUP_AQUATIC = 3747129892, + POPGROUP_IN_VEHICLE = 3190143096, + POPGROUP_IS_GANG = 198544766, + POPGROUP_NETWORK_COMMON = 1732741445, + POPGROUP_SCENARIO = 2037609896, + POPGROUP_WILDLIFE = 600606236, + POSTFX_EASE_IN = 2556745525, + POSTFX_EASE_IN_HOLD_EASE_OUT = 1791815485, + POSTFX_EASE_OUT = 3362010507, + POSTFX_IN_HOLD_OUT = 332192867, + POSTFX_LOOP_ALL = 535426628, + POSTFX_LOOP_HOLD_ONLY = 2694408850, + POSTFX_LOOP_NONE = 3585121058, + PS3_SCRIPT_RPF = 3650318782, + PadShake = 2667671232, + PadShakeMaxDuration = 2836403845, + PadShakeMaxHeight = 2333975606, + PadShakeMaxIntensity = 1208994934, + PadShakeMinDuration = 3639487949, + PadShakeMinHeight = 2222398831, + PadShakeMinIntensity = 2760872373, + ParachuteBones = 3328657748, + ParachuteCamera = 3869597064, + ParachuteCloseUpCamera = 2309595247, + ParachuteInitialVelocityY = 1202762864, + ParachuteInitialVelocityZ = 904794347, + ParachuteMass = 4131153122, + ParachuteMassReduced = 3018517000, + ParachutePack = 2636443310, + ParachutePackVariations = 1735940634, + ParachutePhysics = 3256630458, + ParachuteProbeRadius = 4118156471, + ParachuteUpThreshold = 739494681, + Parachuting = 2611998079, + ParachutingAi = 3248104514, + ParachutingFilterId = 3728753498, + ParamSets = 315966693, + Params = 1933425356, + ParentRelativeAttachOffset = 1399337810, + ParentRelativeAttachOffsetAtOrbitHeadingLimits = 442114217, + ParkingSpaceBlockedMaxAttempts = 4245532224, + ParkingSpaceBlockedWaitTimePerAttempt = 1316038287, + Passive = 1672543877, + PathFinding = 394936210, + PavementFloodFillSearchRadius = 3609661010, + PedActivationForceMultiplier = 3758147000, + PedAngleLimitsForSkydiving = 2243095299, + PedDirToPedCoverCosAngleTol = 1073641398, + PedFearImpact = 3170606833, + PedGenBlockedAreaMinRadius = 3928192642, + PedGenBlockingAreaLifeTimeMS = 1799800134, + PedMoveAccel = 1030928652, + PedMoveDecel = 1966094123, + PedTestRadius = 2802682741, + PedTestXOffset = 763167134, + PedTestYOffset = 3960625221, + PedTestZOffset = 480380605, + PedTestZStartOffset = 1752043243, + PedToCoverCapsuleRadius = 60938529, + PedToCoverEndPullBackDistance = 1271601300, + PedToCoverEndZOffset = 649298289, + PedalGearApproachRate = 2418985851, + PeekToEdgeTurnBlendDuration = 1163008630, + PeekingAnimStateInfos = 1958652331, + PeekingHigh1HVariationClipsets = 86703483, + PeekingHigh2HVariationClipsets = 1692855661, + PeekingLow1HVariationClipsets = 3656589599, + PeekingLow2HVariationClipsets = 4084903537, + PeekingVariationAnimStateInfos = 2572412881, + PelvisInterp = 2837302706, + PelvisInterpMoving = 115587354, + PelvisInterpOnDynamic = 2709476201, + Penalty = 581818714, + Periodic = 1887945139, + PersonalityName = 4206114216, + //Phase = 369413731, + PhaseDuringDeployToConsiderOut = 1259738869, + PhaseToBlendOut = 4149318965, + PhoneFov = 732629634, + PickingUpBikeModifier = 1578175347, + PinnedDownBlindFireChance = 1504716899, + PinnedDownByBulletRange = 3328891889, + PinnedDownDecreaseAmountPerSecond = 2317940667, + PinnedDownPeekChance = 3488557674, + PinnedDownTakeCoverAmount = 2529898856, + PinnedDownThreshold = 2906996848, + PinnedHigh1HVariationClipsets = 186750731, + PinnedHigh2HVariationClipsets = 1643071074, + PinnedIdleAnimStateInfos = 430330313, + PinnedIntroAnimStateInfos = 2080360880, + PinnedLow1HVariationClipsets = 1337721029, + PinnedLow2HVariationClipsets = 3647756430, + PinnedOutroAnimStateInfos = 3262741183, + PitchAcceleration = 4133472264, + PitchChangeRateAcceleration = 724740943, + PitchClampMax = 4112643692, + PitchClampMin = 1388744206, + PitchForBraking = 2154895854, + PitchForMaxIntensity = 2952102575, + PitchForMinIntensity = 4133137923, + PitchForNormal = 2757465295, + PitchInDirectionComponent = 3608118347, + PitchInDirectionForce = 2459418685, + PitchOffsetAtMaxHeight = 2605085544, + PitchOffsetAtMinHeight = 3346546090, + PitchPullAroundErrorScalingBlendLevel = 3418263557, + PitchPullAroundMaxMoveSpeed = 430354724, + PitchPullAroundMinMoveSpeed = 2976192130, + PitchPullAroundSpeedAtMaxMoveSpeed = 634917686, + PitchPullAroundSpringConstant = 835784625, + PitchPullAroundSpringDampingRatio = 1088580250, + PitchRatioForLinearVZMax = 3041351606, + PitchRatioForLinearVZMin = 2724758116, + PitchSideAngle = 107265024, + PitchTorqueMax = 3768610799, + PitchTorqueMin = 2554943154, + PivotOverBoundingBoxSettings = 588927535, + PivotPosition = 3256568637, + PlaneDrivingSubtaskArrivalDist = 1499169614, + PlaneTargetArriveDist = 370645093, + PlaneTargetArriveDistTaxiOnGround = 1118749782, + PlayerBumpedByCar = 3418860704, + PlayerBumpedByCloneCarActivationModifier = 3611321062, + PlayerCapsuleMinSpeedForContinuousPushActivation = 3679622218, + PlayerClearedVehicleDelay = 112556840, + PlayerClearedVehicleSmartFallDelay = 2235898070, + PlayerCopCarModifier = 1479577695, + PlayerCopModifier = 4108478935, + PlayerDeath = 2720032072, + PlayerDeathMP = 1586436866, + PlayerDeathSP = 3600525461, + PlayerHasslingModifier = 3008009434, + PlayerIdleHigh0HVariationClipsets = 3420717239, + PlayerIdleHigh1HVariationClipsets = 2643498096, + PlayerIdleHigh2HVariationClipsets = 1210186805, + PlayerIdleIntroAnimRate = 2967257859, + PlayerIdleLow0HVariationClipsets = 1469086565, + PlayerIdleLow1HVariationClipsets = 421291191, + PlayerIdleLow2HVariationClipsets = 2423980252, + PlayerLookAtDebugDraw = 2179898613, + PlayerMoveAccel = 3051090926, + PlayerMoveDecel = 1886735419, + PlayerMoverFixupMaxExtraHeadingChange = 1887702115, + PlayerMp = 410406055, + PlayerPedModifier = 2396547402, + PlayerQuickBlendOut = 2430282312, + PlayerSexyPedModifier = 390614501, + PlayerSprintEntryRate = 1168875174, + PlayerStatInfos = 977451662, + PlayerSwankyCarMax = 3873670579, + PlayerSwankyCarMin = 369519904, + PlayerSwankyCarModifier = 1078762608, + PlayerSwimTimeThreshold = 422419421, + PlayerTimeBetweenLookAtsMax = 408684949, + PlayerTimeBetweenLookAtsMin = 2542169368, + PlayerTimeMyVehicleLookAtsMax = 3266178324, + PlayerTimeMyVehicleLookAtsMin = 831935567, + Player_IdleTurnRate = 1662197919, + Player_MBRAcceleration = 3782895898, + Player_MBRDeceleration = 1302286994, + PointOnMap = 2637460797, + PopulationFleeMod = 3370827836, + Pos = 4135922358, + PositionDiffStartBlend = 126173811, + PowerForMaxAdjustment = 3574337729, + PowerForMinAdjustment = 4239471096, + PreEmptiveEdgeActivationMaxDistance = 3827728081, + PreEmptiveEdgeActivationMaxHeadingDiff = 1934953324, + PreEmptiveEdgeActivationMaxVel = 3639122208, + PreEmptiveEdgeActivationMinDesiredMBR2 = 3990938220, + PreEmptiveEdgeActivationMinDotVel = 2370073816, + PreToPostCollisionLookAtOrientationBlendValue = 3068587259, + PrecisionAimSettings = 2539872798, + PredictiveBraceBlendInDuration = 1609589815, + PredictiveBraceBlendOutDuration = 2469517273, + PredictiveBraceMaxUpDotSlope = 1011217048, + PredictiveBraceProbeLength = 2158524964, + PredictiveBraceStartDelay = 3163116709, + PredictiveProbeZOffset = 1351443366, + PredictiveRagdollIntersectionDot = 1107591412, + PredictiveRagdollProbeLength = 1048227809, + PredictiveRagdollProbeRadius = 503191318, + PredictiveRagdollRequiredVelocityMag = 2170844885, + PredictiveRagdollStartDelay = 3462282137, + PreferNearWaterSurfaceArrivalRadius = 2212250161, + PreventDirectTransitionToReverseFromSit = 1025905604, + PreventRotationOvershoot = 634174859, + PreventShufflingExtraRange = 1174072295, + PreventTranslationOvershoot = 570011198, + PreviousTransitionClipId = 681665994, + PreviousTransitionExtraScalar = 2390268263, + PrioHarmless = 3537128593, + PrioIngangOrFriend = 2239503730, + PrioMeleeCombatThreat = 3520267510, + PrioMeleeDead = 2219818555, + PrioMeleeDownedCombatThreat = 3711072717, + PrioMeleeInjured = 2459910426, + PrioMeleePotentialThreat = 1405902341, + PrioMissionThreat = 1044442786, + PrioMissionThreatCuffed = 647449150, + PrioNeutral = 2861651580, + PrioNeutralInjured = 354050193, + PrioPlayer2Player = 1964865895, + PrioPlayer2PlayerAttackers = 762484474, + PrioPlayer2PlayerCuffed = 1986201193, + PrioPlayer2PlayerEveryone = 3895688789, + PrioPlayer2PlayerStrangers = 2061852453, + PrioPotentialThreat = 1168690220, + PrioScriptedHighPriority = 1053617936, + PriorityCoverWeight = 3734777024, + PriorityCoverWeighting = 1292700163, + ProbSpawnHeli = 2463315253, + ProbabilityDrawWeaponWhenLosing = 1774223506, + ProbabilityWeighting = 51557962, + Probe = 217069262, + ProbeHeightAbovePelvis = 1229015521, + ProbeResults = 3041273548, + Probes = 1934123857, + ProcessPhysicsApproachRate = 2123652996, + Professional = 2673189131, + ProgressiveTerrainAvoidanceAngleD = 4040142753, + PullAlongside = 2022288628, + PullAroundSettings = 1394164846, + PullAroundSettingsForLookBehind = 914396031, + PullBackSpringConstant = 1125215459, + PullBackTowardsCollision = 333745998, + PullPinClipId = 547753211, + Pursue = 2777285984, + PursuitModeExtraHeadingRate = 2496636494, + PursuitModeGallopRateFactor = 3846643666, + PushAngleDotTolerance = 1293114690, + PushBeyondEntitiesIfClipping = 2276761303, + PushInSpringConstant = 2562227249, + PushedThresholdOnGround = 476585181, + PutOnHelmetClipId = 2026680640, + QUADBIKE = 1011863180, + QuickBlendOut = 784154981, + RADIO_FILE = 2322405299, + RADIO_GENRE_CLASSIC_HIPHOP = 255693040, + RADIO_GENRE_COUNTRY = 1750835908, + RADIO_GENRE_DANCE = 43700981, + RADIO_GENRE_LEFT_WING_TALK = 3586021020, + RADIO_GENRE_MODERN_HIPHOP = 285221172, + RADIO_GENRE_POP = 4176867203, + RADIO_GENRE_UNSPECIFIED = 4132096390, + RAGDOLL_BUTTOCKS = 540107349, + RAGDOLL_CLAVICLE_LEFT = 2288805232, + RAGDOLL_CLAVICLE_RIGHT = 488421620, + RAGDOLL_FOOT_LEFT = 2446307443, + RAGDOLL_FOOT_RIGHT = 4158664243, + RAGDOLL_HAND_LEFT = 3905421121, + RAGDOLL_HAND_RIGHT = 1124094743, + RAGDOLL_HEAD = 111082097, + RAGDOLL_LOWER_ARM_LEFT = 125251313, + RAGDOLL_NECK = 339046583, + RAGDOLL_SHIN_LEFT = 2408459571, + RAGDOLL_SHIN_RIGHT = 3373894112, + RAGDOLL_SPINE0 = 2548005619, + RAGDOLL_SPINE1 = 1729141078, + RAGDOLL_SPINE2 = 1967764936, + RAGDOLL_SPINE3 = 3266498717, + RAGDOLL_THIGH_LEFT = 1739907813, + RAGDOLL_THIGH_RIGHT = 3821605495, + RAGDOLL_UPPER_ARM_LEFT = 2053403138, + RAGDOLL_UPPER_ARM_RIGHT = 1968199161, + RadiusForContact = 1978969151, + RadiusForFindNearby = 2410167662, + RadiusForViewportCheck = 3808847755, + RadiusScalingForClippingTest = 2642729834, + RadiusScalingForOcclusionTest = 2763528752, + RagdollAbortPoseDistanceThreshold = 1562486689, + RagdollAbortPoseMaxVelocity = 445822306, + RagdollBlendEnvelopeRef = 2513422573, + RagdollComponentAirResistanceForce = 1187767114, + RagdollComponentAirResistanceMinStiffness = 3808435735, + RagdollIntoWaterVelocity = 477015084, + RagdollPlayerDistanceThreshold = 3324445918, + RagdollUnderWheelTuning = 2982454130, + RagdollingModifier = 3445942281, + RageRagdollImpulseTuning = 3405457664, + Ram = 3087082769, + RandomEventData = 4113341331, + RandomEventName = 790968462, + RandomEventTimeIntervalMax = 2841351028, + RandomEventTimeIntervalMin = 2347950667, + RandomEventType = 2154193106, + RandomEventTypeName = 2873713085, + RandomiseLeadingHand = 2410986509, + RandomiseSettledTime = 2400689426, + Randomness = 3060363673, + RangeOffset = 3211719875, + RangePercentage = 2083139838, + RangeToUseDynamicCoverPointMax = 2744819135, + RangeToUseDynamicCoverPointMin = 2676905487, + RapidFireBoostShotImpulseMult = 926832193, + RapidFireBoostShotMaxRandom = 2456570730, + RapidFireBoostShotMinRandom = 3069940419, + RapidHitCount = 1056935054, + RappellingAlignment = 4264482777, + ReactAndFleeBlendOutPhase = 851779527, + ReactToOtherEntity = 409978509, + ReactionMode = 3828609944, + ReactionTime = 1025142686, + RearExitSideOffset = 1266778169, + RecentlyLookedAtEntityModifier = 2971794167, + RecentlyLookedAtPlayerModifier = 975579249, + RecklessCarModifier = 813645662, + RecklessCarSpeedMax = 199234802, + RecklessCarSpeedMin = 1168459099, + RecoilShakeAmplitudeScaling = 2294924343, + RecreateWeaponTime = 3706230533, + ReduceDownedTimeByPerformanceTime = 1128285975, + ReduceWithPedAngularVelocity = 3126754678, + ReduceWithPedVelocity = 1660316244, + ReenterFallLandThreshold = 4199432698, + Refuel = 3888134503, + RegainComet = 605981827, + RegisteredStacks = 3283104082, + RegularExitDefaultPhaseThreshold = 5170829, + RejectLockIfBestTargetIsInCover = 3603478229, + RejectLockonHeadingTheshold = 655402948, + RelativeAttachPosition = 2323851759, + RelativeAttachPositionSmoothRate = 2878053132, + RelativeAttachSpringConstantEnvelopeRef = 4086545075, + RelativeAttachSpringConstantLimits = 1204776061, + RelativeAttachSpringConstantLimitsForPassengers = 340115724, + RelativeAttachSpringDampingRatio = 2918672176, + RelativeHeadingLimitsForMobilePhoneCamera = 503778969, + RelativeLookAtPosition = 54415504, + RelativeOffset = 4287557601, + RelativeOrbitHeadingLimits = 1654683326, + Relaxation = 1783791261, + ReleaseDelay = 4289809678, + ReleaseDuration = 4066793496, + ReleaseSub = 2933611601, + RemoveReticuleDuringBlindFire = 3024014754, + RenderAimArcDebug = 3262184677, + RenderArcsAtCoverPosition = 4249860971, + RenderDebug = 3284686610, + RenderDebugDraw = 2797308174, + RenderDebugToTTY = 3670985951, + RenderId = 2789976084, + Rendering = 67050499, + Reservations = 3702072617, + ReserveLocalPlayerNmAgent = 2584307454, + ReserveLocalPlayerNmAgentMp = 75381461, + Reserved = 4030133267, + Resource = 4037058594, + Restrictions = 3321094558, + ResultMult = 2301637192, + ResumeDistSq = 810755963, + ReticuleSlowDownCapsuleLength = 1217679840, + ReticuleSlowDownCapsuleRadius = 494811143, + ReticuleSlowDownRadius = 1424095429, + ReturnToNormalDistanceSq = 829574868, + ReturnZoneThreshold = 4004042226, + ReverseLeftFootAlignAnims = 1175770299, + RifleDamageMod = 3362977435, + RightBoneOffset = 697293397, + RightGrip = 2936843542, + RightHandOffset = 4292584457, + RightPickUpTargetLerpPhaseEnd = 58162742, + RightPickUpTargetLerpPhaseEndBicycle = 4109701939, + RightPickUpTargetLerpPhaseStart = 1933869525, + RightPickUpTargetLerpPhaseStartBicycle = 3395959775, + RightPullUpTargetLerpPhaseEnd = 2264946778, + RightPullUpTargetLerpPhaseEndBicycle = 3699582686, + RightPullUpTargetLerpPhaseStart = 1089127336, + RightPullUpTargetLerpPhaseStartBicycle = 149985112, + RightWire = 2577801154, + RocketSettings = 4146741065, + RollAcceleration = 802099030, + RollAngleScale = 2238978991, + RollForBraking = 3154540810, + RollForMaxYaw = 1251049479, + RollForMinYaw = 1128820245, + RollForNormal = 3016943843, + RollSettings = 4214646062, + RollSpringConstant = 261121990, + RollSpringDampRatio = 1003830880, + RollUpHeightThreshold = 2106002013, + RollingFall = 2787586299, + RootLiftForce = 2143662100, + RotationChangeRate = 3669742245, + RotationLookAhead = 3143134944, + RotationTowardsLos = 1899363737, + RouteArrivalDistance = 157944410, + RouteLengthThresholdForApproachOffset = 4290867387, + RouteLengthThresholdForFinalApproach = 394374347, + RouteLookAheadDistance = 1396210696, + RouteRadiusFactor = 4261831117, + RubberBulletKnockdown = 3062524360, + RunAndGunAimCamera = 724878846, + RunAndGunInterpolateInDuration = 674462637, + RunAndGunOutroTime = 3879469601, + RunAngAccel = 469859232, + RunForever = 4079974935, + Running = 3805238957, + RunningAgainstBulletImpulseMult = 930478842, + RunningAgainstBulletImpulseMultMax = 2892741044, + RunningPedModifier = 1209452937, + RunningWithBulletImpulseMult = 188546747, + RunwayProbes = 731090194, + SAC_Randomize = 1962395292, + SAC_Retain = 2341131515, + SAT_BULLET_TIME = 2744852139, + SAT_CAR_SLOWDOWN = 2137706596, + SAT_INSULT = 2169367037, + SAT_RAGE = 3583791984, + SAT_SNAPSHOT = 977651983, + SCENARIO_POINTS_FILE = 276092270, + SCENARIO_POP_STREAMING_SMALL = 1152280719, + SF_AltBackDriverSide = 2355736970, + SF_AltBackPassengerSide = 2152776352, + SF_AltFrontDriverSide = 3757862915, + SF_AltFrontPassengerSide = 1261964441, + SF_BackDriverSide = 3935682468, + SF_BackPassengerSide = 2563045769, + SF_FrontDriverSide = 982742767, + SF_FrontPassengerSide = 469567916, + SLOD_KEEP_LOWEST = 462532381, + SLOD_LARGE_QUADPED = 3496177438, + SLOD_NULL = 551739454, + SLOD_SMALL_QUADPED = 1128152005, + SMALL_REACTION = 2909022553, + SPACE_BIG = 652367616, + SPACE_END = 1961485429, + SPACE_MED = 2308938833, + SPACE_SMALL = 3292874000, + SPECIAL_AIRPORT = 3761654755, + SPECIAL_NONE = 514090469, + SPLargeAccidenThresold = 803970846, + SPRITE_1 = 394130841, + SP_Variation = 3866220764, + STREAMING_FILE = 265895563, + STREAMING_FILE_PLATFORM_OTHER = 1322995281, + STREAMING_FILE_PLATFORM_PS3 = 4254420265, + STREAMING_FILE_PLATFORM_XENON = 569488699, + SUBMARINE = 2537188912, + SafeDistance = 2538781855, + SafeTimeBeforeLeavingCover = 4116865999, + SafetyProportionInDefensiveAreaMax = 189140842, + SafetyProportionInDefensiveAreaMin = 1022323136, + ScaleAccelWithDelta = 801104139, + ScaleHeadShotImpulseWithSpineOrientation = 1833987390, + ScaleSnapWithSpineOrientation = 125672080, + ScaleStayUprightWithVel = 3892109820, + ScaleWithMass = 2640302727, + ScaleWithUpright = 1033385210, + ScaleWithVelocity = 2708100865, + ScalingFactor = 4050830448, + ScanDistance = 1702320721, + ScanRadius = 2723670760, + ScenarioDelayAfterFailureMax = 4009937054, + ScenarioDelayAfterFailureMin = 4004750790, + ScenarioDelayAfterFailureWhenStationary = 1166603434, + ScenarioDelayAfterNotAbleToSearch = 2129795449, + ScenarioDelayAfterSuccessMax = 2887992243, + ScenarioDelayAfterSuccessMin = 1467495810, + ScenarioDelayInitialMax = 1049520739, + ScenarioDelayInitialMin = 2307005569, + ScenarioScanOffsetDistance = 1173793332, + ScenarioScanRadius = 2718645532, + ScenarioToScenarioPedModifier = 645696278, + ScoreCalculationsPerFrame = 1815040418, + Scoring = 3333387022, + ScreenRatioForMaxFootRoom = 3982287448, + ScreenRatioForMaxFootRoomInTightSpace = 695725580, + ScreenRatioForMinFootRoom = 2014345705, + ScreenRatioForMinFootRoomInTightSpace = 2449849624, + Scripted = 1420062864, + ScubaGear = 7473239, + ScubaGearVariations = 1092654765, + ScubaGearWithLightsOff = 505931244, + ScubaGearWithLightsOn = 1478092361, + ScubaMaskProps = 2321693669, + SearchRotateAngleLookAhead = 1512295050, + SearchThreatMaxDot = 1574888900, + SearchToCoverCosTolerance = 2892923069, + SeatBlendAngSpeed = 580774094, + SeatBlendLinSpeed = 3426806263, + SeatDisplacementSmoothingRateDriver = 3305089148, + SeatDisplacementSmoothingRatePassenger = 166726527, + SeatPosition = 788888146, + SecondaryFocusParentToTargetBlendLevel = 2535634527, + SecondsBeforeWarpToLeader = 3663548072, + SecondsSinceInWaterThatCountsAsWet = 3211610412, + SensesRange = 1188235128, + SeparationDrag = 3440934413, + SeparationPickup = 383086153, + SeparationPutdown = 4100111705, + SetFallingReactionFallOverVehicle = 246824093, + SetFallingReactionFallOverWall = 3571002906, + SetFallingReactionHealthy = 1126347982, + SetFallingReactionInjured = 3814409847, + SettingsRef = 926775845, + SettleAnimStateInfos = 260425135, + SettledTimeMS = 2088054141, + SettledTimeMinMS = 2229954249, + ShakeAmplitude = 415335014, + ShakeAmplitudeScalingForShootingAbilityLimits = 1149560055, + ShakeFirstPersonShootingAbilityLimits = 937843974, + ShakeRef = 1511687083, + SharkAddRangeInViewMin = 750370993, + SharkFleeDist = 3147934542, + SharkModelName = 2326003695, + ShockingFilmSpeechHash = 1372129940, + ShockingSpeechChance = 1805287691, + ShockingSpeechHash = 1884622848, + ShootRateModifier = 920840724, + Shot = 2213248546, + ShotAgainstWall = 2464589752, + ShotgunChanceToMoveHeadImpulseToSpine2 = 2406131077, + ShotgunChanceToMoveNeckImpulseToSpine2 = 895546582, + ShotgunChanceToMoveSpine3ImpulseToSpine2 = 3217262184, + ShotgunLiftNearThreshold = 4071309368, + ShotgunMaxLiftImpulse = 3764669870, + ShotgunMaxSpeedForLiftImpulse = 3579666943, + Shots = 4029364641, + ShouldAimSweepOverrideOrbitPitchLimits = 184490319, + ShouldAlign = 2033261313, + ShouldAlignOnVehicleExit = 3431976824, + ShouldAllowInterpolationSourceCameraToPersistReticule = 4238055063, + ShouldAllowOtherCollisionToConstrainCameraIntoEntities = 615517883, + ShouldApply = 651835053, + ShouldApplyAimSensitivityPref = 2185008081, + ShouldApplyAttachOffsetRelativeToCamera = 3807713258, + ShouldApplyAttachParentRoll = 4012821505, + ShouldApplyAttachPedPelvisOffset = 2861227361, + ShouldApplyBuoyancy = 959048093, + ShouldApplyDamping = 2339455115, + ShouldApplyInAttachParentLocalSpace = 3748493944, + ShouldApplyRoll = 436250856, + ShouldApplyScaling = 1357431466, + ShouldApplySniperControlPref = 2355159673, + ShouldApplyWeaponFov = 2917952843, + ShouldAttachToFollowPedHead = 2659354456, + ShouldAttachToFollowPedSeat = 339929903, + ShouldAttachToParentCentreOfGravity = 372575308, + ShouldAttachToVehicleBone = 3725196996, + ShouldAttachToVehicleExitEntryPoint = 2429106995, + ShouldBlendOutWhenAttachParentIsInAir = 3478105571, + ShouldBlendOutWhenAttachParentIsOnGround = 1212391588, + ShouldBlendWithAttachParentMatrixForRelativeOrbitBlend = 3993671513, + ShouldByPassNearClip = 4107190241, + ShouldCalculateXYDistance = 9156722, + ShouldConsiderAttachParentForwardSpeedForPullAround = 3857630189, + ShouldConsiderAttachParentLocalXYVelocityForPullAround = 4045243730, + ShouldConsiderData = 3663951405, + ShouldConstrainCollisionRootPositionAgainstClippingTypes = 823526659, + ShouldCopyVehicleCameraMotionBlur = 1232220671, + ShouldDetect = 1134622566, + ShouldDisplayReticule = 1348911901, + ShouldDisplayReticuleDuringInterpolation = 870186590, + ShouldDuck = 1848522270, + ShouldFleeDistance = 2097584563, + ShouldFleeFilmingDistance = 2071699275, + ShouldFleeVehicleDistance = 1339551933, + ShouldFocusOnLockOnTarget = 4137686847, + ShouldForceCutToOrbitDistanceLimitsForThirdPersonFarViewMode = 1953360151, + ShouldIgnoreAttachParentMovementForOrientation = 1256703824, + ShouldIgnoreAttachParentPitchForLookBehind = 2793581079, + ShouldIgnoreBuoyancyStateAndAvoidSurface = 134488060, + ShouldIgnoreCollisionWithAttachParent = 1949881438, + ShouldIgnoreCollisionWithFollowVehicle = 3863307203, + ShouldIgnoreFollowVehicleForCollisionOrigin = 3696538081, + ShouldIgnoreFollowVehicleForCollisionRoot = 2213127338, + ShouldIgnoreOcclusionWithBrokenFragments = 1921983042, + ShouldIgnoreOcclusionWithBrokenFragmentsOfIgnoredEntities = 3325779817, + ShouldIgnoreOcclusionWithRagdolls = 1973279102, + ShouldIgnoreOcclusionWithSelectCollision = 2656848273, + ShouldIgnoreVelocityOfAttachParentAttachEntity = 1933402526, + ShouldIgnoreVerticalPivotOffsetForFootRoom = 881872463, + ShouldLockHeading = 2098973612, + ShouldLockOnToTargetEntityPosition = 1419212045, + ShouldLockVerticalOffset = 1581058504, + ShouldMakeAttachedEntityInvisible = 1478931781, + ShouldMakeFollowPedHeadInvisible = 1762086384, + ShouldMakePedInAttachSeatInvisible = 1538342627, + ShouldMoveTowardsLos = 1510673380, + ShouldOrbitRelativeToAttachParentOrientation = 2846809829, + ShouldPersistOrbitOrientationRelativeToAttachParent = 3002500493, + ShouldPersistPopInBehaviour = 2762175909, + ShouldPullAroundToAttachParentFront = 2208576746, + ShouldPullAroundToBasicAttachParentMatrix = 3468493382, + ShouldPullAroundUsingSimpleSpringDamping = 3614496996, + ShouldPullBackByCapsuleRadius = 1356103878, + ShouldPushBeyondAttachParentIfClipping = 724966028, + ShouldReportAsCameraTypeTest = 1876340735, + ShouldRestictToFrontSeat = 523999628, + ShouldRewardMoneyOnDeath = 89900819, + ShouldScriptedAimTaskOverrideOrbitPitchLimits = 3180847895, + ShouldSetBuoyantWhenAttachParentNotFullySubmerged = 448788827, + ShouldSweepToAvoidPopIn = 1756495672, + ShouldTerminateForDistanceToTarget = 179124010, + ShouldTerminateForOcclusion = 474380051, + ShouldTerminateForPitchAndHeading = 4172426852, + ShouldTerminateForWorldPitch = 1301968002, + ShouldTerminateIfOccludedByAttachParent = 1072193524, + ShouldTestForClipping = 2106075408, + ShouldTestForMapPenetrationFromAttachPosition = 1051168964, + ShouldToggleAccurateModeInput = 288255802, + ShouldToggleViewModeBetweenThirdAndFirstPerson = 3604554750, + ShouldTorsoIkLimitsOverrideOrbitPitchLimits = 3271563285, + ShouldUseAccurateModeInput = 2283622261, + ShouldUseBaseAttachPosition = 2274949645, + ShouldUseCustomCollisionOrigin = 2702878862, + ShouldUseCustomFramingInTightSpace = 4033450681, + ShouldUseDiscreteZoomControl = 1466092206, + ShouldUseDynamicCentreOfGravity = 799910142, + ShouldUseGameTime = 820757070, + ShouldUseLockOnAiming = 1301399000, + ShouldUseLockOnAimingForDriver = 721433849, + ShouldUseLockOnAimingForPassenger = 1821508366, + ShouldUseLookBehindCustomPosition = 956615974, + ShouldUseLookBehindInput = 4114297506, + ShouldUseViewModeInput = 509270218, + ShouldUseZoomInput = 1706209718, + ShouldValidateLockOnTargetPosition = 114759485, + ShuntAccelerateMag = 1917995403, + ShuntAccelerateMagBike = 3020055197, + ShuntDamageMultiplierAI = 158324629, + ShuntDamageMultiplierPlayer = 851764695, + SideOffset = 2119254607, + SideScale = 1948575789, + SideSwipeForce = 3413603413, + SideZoneThreshold = 1333345561, + SimulationTimeInMs = 3281708108, + SitToStillBikeClipId = 1718435094, + SitToStillCharClipId = 2341866800, + SitToStillClipId = 3951489866, + SkipGotoHeadingDeltaDegrees = 2090002900, + SkipGotoXYDist = 699708569, + SkipGotoZDist = 790344800, + SkipHolsterWeapon = 45502974, + SkyDiveProbeDistance = 343578348, + SkyDivingCamera = 365994391, + SlideWalkAnimRate = 4171416824, + SlopeSlide = 862016535, + SlowApproachRate = 2330583994, + SlowDown = 1251865784, + SlowDownDist = 2685821768, + SlowDownDistance = 4110448569, + SlowDownDistanceMax = 1781466093, + SlowDownDistanceMin = 947493336, + SlowDownSpeed = 2686150441, + SlowFastSpeedThreshold = 4250418611, + SlowMinTurnApproachRate = 3696984410, + SlowPedalToFreewheelBlendDuration = 1900606204, + SlowRunRateMax = 843042981, + SlowRunRateMin = 3959772122, + SlowTurnAcceleration = 3928052593, + SlowTurnApproachRate = 3661307080, + SlowdownDistance = 3943951078, + SmallCapsuleCoverPenalty = 184089910, + SmallCapsuleCoverRadius = 1348626108, + SmgDamageMod = 167232035, + SmoothRate = 1863632928, + SniperImpulses = 3585973980, + SniperLegShot = 3003938851, + SoftLockBreakDistanceMax = 2224486137, + SoftLockBreakDistanceMin = 1661550302, + SoftLockBreakValue = 4067802571, + SoftLockFineAimBreakXYValue = 1403902499, + SoftLockFineAimBreakZValue = 3553881274, + SoftLockFineAimXYAbsoluteValue = 352361634, + SoftLockFineAimXYAbsoluteValueClose = 1117580274, + SoftLockTime = 2124028122, + SoftLockTimeToAcquireTarget = 3433060120, + Sonar = 409760750, + SpActivationModifiers = 1742296994, + Spawning = 4197810024, + SpawningChasesEnabled = 1201683089, + SpeedDifferenceForMaxDistanceToStartMatchingSpeed = 1979699436, + SpeedDifferenceForMinDistanceToStartMatchingSpeed = 2025348338, + SpeedForMinimumDot = 1301007976, + SpeedForNarrowestAnglePickPOI = 1078877377, + SpeedLimitsForVerticalMoveSpeedScaling = 1914871967, + SpeedToAlwaysDive = 2913264363, + SphereTestRadiusForDeadWaterSettle = 2511398250, + SpinOut = 1954107545, + SpineStrengthTuning = 2573019437, + SpreadLimit = 662073465, + SpringConstant = 4163819120, + SpringDampingRatio = 731206835, + SpringForce = 2286316924, + SpringMountRef = 4021873979, + SprintControlData = 3828880770, + SprintExhausted = 29931670, + SprintReplenishFinishedPercentage = 3615351832, + SprintReplenishRateMultiplier = 3211960089, + SprintReplenishRateMultiplierBike = 600117053, + Sprinting = 2194212345, + SprintingDeath = 3676971081, + SprintingLegShot = 1190774472, + StairsFootInterp = 3289881556, + StairsFootInterpCoverAim = 2144071841, + StairsFootInterpIntersecting = 3671506242, + StairsPelvisInterp = 2577533666, + StairsPelvisInterpCoverAim = 1271955779, + StairsPelvisInterpMoving = 2302577809, + StairsPelvisMaxNegativeDeltaZCoverAim = 3894253961, + StairsSpringMultiplierMax = 816343475, + StairsSpringMultiplierMin = 369470094, + StaminaEfficiency = 1862920964, + StandAlignMaxDist = 996663150, + StandClip0Id = 2845656216, + StandClip1Id = 1744028122, + StandClip2Id = 1441580086, + StandardAI = 1367672446, + StandardBlendOutThresholds = 2851995582, + StandingLandHeadingModifier = 176941965, + StartAggressive = 987294494, + StartAnimatedTurnsD = 3129761256, + StartCatchFall = 1213801104, + StartClipWaitTime = 123069407, + StartClipWaitTimePlayer = 1412213192, + StartDefault = 385444229, + StartDelayDuration = 966603625, + StartEngineClipId = 723740105, + StartEngineForce = 3175914177, + StartExtendedProbeTime = 2633188230, + StartForceDownHeight = 2371670611, + StartLocomotionBlendoutThreshold = 1243932439, + StartLocomotionDefaultBlendDuration = 1266064609, + StartLocomotionDefaultBlendOutDuration = 1010088937, + StartLocomotionEarlyOutBlendOutDuration = 3914009351, + StartLocomotionHeadingDeltaBlendoutThreshold = 562952832, + StartLocomotionWalkRunBoundary = 1107407285, + StartPosition = 4070310820, + StartRollDownStairs = 2633206880, + StartToIdleDirectlyPhaseThreshold = 265096732, + StartTurnThresholdDegrees = 1138520829, + StartWeak = 2862149771, + StartWindmill = 776602752, + StartingEnergy = 3024832208, + StaticLosTest1Offset = 2749521042, + StaticLosTest2Offset = 4086815177, + StayUpright = 509938192, + StayUprightAtMaxVel = 930009703, + StayUprightAtMinVel = 3524092362, + StdVehicleMinPhaseToStartRotFixup = 2300124116, + StealthNoisePeriodMS = 2280670656, + StealthSpeedThresholdHigh = 2089726799, + StealthSpeedThresholdLow = 324788932, + StealthVehicleTypeFactorBicycles = 897691679, + StealthZoomSettings = 3610920953, + SteepSlopeStartAnimatedTurnsD = 2582103758, + SteepSlopeStopAnimatedTurnsD = 1722856329, + SteepSlopeThresholdD = 3054410305, + SteerAngleControl = 3605734753, + SteeringChangeToStartProcessMoveSignals = 2406738390, + SteeringChangeToStopProcessMoveSignals = 3912339645, + SteeringDeadZone = 2532196566, + SteeringDeadZoneCentreTimeMS = 1503418851, + SteeringDeadZoneTimeMS = 1683629424, + StepInfos = 1592390985, + StepOutCapsuleRadiusScale = 2554062878, + StepOutLeftX = 1144003052, + StepOutRightX = 3683453861, + StepOutX = 259942193, + StepOutY = 4255892364, + StepTransitionMaxAngle = 1584333756, + StepTransitionMinAngle = 2533820819, + SteppingAnimStateInfos = 3007867016, + SteppingApproachRate = 2556798213, + SteppingApproachRateFast = 1705449547, + SteppingApproachRateSlow = 4027315230, + SteppingEdgeTestEndYOffset = 2621555533, + SteppingEdgeTestStartYOffset = 1342115678, + SteppingHeadingApproachRate = 4090917343, + SteppingMovementSpeed = 2296590808, + StickDownDuration = 4175251844, + StickDownMinRange = 488214823, + StickValueForMax = 2536907014, + StickValueForMin = 1576728196, + StickX = 1871798248, + StickY = 1965746967, + StickyId = 2164901921, + StillAccTol = 1079251923, + StillDelayTime = 3047698562, + StillPitchAngleTol = 2495843356, + StillToSitApproachRate = 3504747140, + StillToSitClipId = 1322656239, + StillToSitLeanRate = 651496609, + StopAnimatedTurnsD = 1268028398, + StopDistSq = 1791608761, + StopPhaseThreshold = 1520516679, + StopResponseWhenExpired = 2309582193, + StopTurnThresholdDegrees = 1142247737, + StopWatchDistance = 2181133548, + StoppingAnimStateInfos = 2080209369, + StoppingDistanceGallopMBR = 3764305197, + StoppingDistanceRunMBR = 2508724347, + StoppingDistanceWalkMBR = 792142948, + StoppingGotoPointRemainingDist = 577153356, + StrafeAcceleration = 1363831855, + StrafeDirectionLerpRateMaxAI = 1204182041, + StrafeDirectionLerpRateMaxPlayer = 2769179410, + StrafeDirectionLerpRateMinAI = 2509399696, + StrafeDirectionLerpRateMinPlayer = 1932572913, + StraightLineDistance = 474269749, + StreamConnectedSeatAnims = 3147840041, + StreamEntryAndInVehicleAnimsTogether = 1924248769, + StreamInVehicleAndEntryAnimsTogether = 4236803127, + StreamedOneHandedCoverMovementClipSetId = 3568457068, + StreamedUnarmedCoverMovementClipSetId = 3141671110, + StreamingName = 692898807, + StrongBlastMagnitude = 1446526858, + StuckOnVehicle = 648899635, + StuckOnVehicleBlendOutThresholds = 2482984819, + StuckOnVehicleMaxTime = 1360661757, + StuckOnVehiclePlayer = 2880735205, + StuckUnderVehicle = 1316017959, + StuckUnderVehicleMaxUpright = 1218193578, + StuckUnderVehiclePlayer = 600771112, + StuckWaitTime = 774340160, + StuckWaitTimeMp = 4110175468, + StunnedDistanceSpringConstant = 399773061, + StunnedDistanceSpringDampingRatio = 340673450, + StunnedHeadingSpringConstant = 1625429307, + StunnedHeadingSpringDampingRatio = 2414166560, + StunnedPitchSpringConstant = 1044796272, + StunnedPitchSpringDampingRatio = 122790262, + StuntJump = 2578429326, + StuntJumpPitchInDirectionComponent = 2080285568, + StuntJumpPitchInDirectionForce = 2619863448, + SubmergedBlendOutThreshold = 3512832436, + SuperHighFallStart = 2200596271, + SurfaceHeightFallingLerpRate = 3431403282, + SurfaceHeightFollowingTriggerRange = 3742890223, + SurfaceHeightRisingLerpRate = 1039725890, + SurfacePitchLerpRate = 61986925, + SurfaceProbeHead = 1909345264, + SurfaceProbeTail = 1086011957, + SurfaceProjectionDistance = 2147768117, + SurfaceSkimmerDepth = 1405419534, + SurfaceZOffset = 2629938407, + Surprised = 730897041, + Swat = 507550818, + SweepClip0Id = 3630917852, + SweepClip1Id = 3117869494, + SweepClip2Id = 4068466847, + SwerveTime = 3588251070, + SwingSpeedAtMaxSkidSpeed = 2084746057, + SwitchToNextPointDistJogging = 4287996365, + SwitchToNextPointDistWalking = 1010415847, + SwitchToStraightLineDist = 2409655710, + TC_Randomize = 279516121, + TC_Retain = 3014288776, + THIRD_PERSON_FAR = 2770781844, + THIRD_PERSON_MEDIUM = 3489645472, + THIRD_PERSON_NEAR = 2573120959, + THROWNWEAPONINFO_FILE = 1339784773, + TIME_DEPENDENT = 3029576156, + TRAIN = 3644569018, + TUNABLE_OBJECTS_FILE = 3511689339, + TailgateDistanceMax = 10772112, + TailgateIdealDistanceMax = 3640450256, + TailgateIdealDistanceMin = 3101610967, + TailgateSpeedMultiplierMax = 94249946, + TailgateSpeedMultiplierMin = 2435522850, + TailgateVelocityMin = 3105879189, + TakeCustodyDistance = 116998034, + TakedownProbability = 3234488441, + TapAdd = 3672071413, + TargetArriveDist = 3935882297, + TargetDirectionMinDot = 3431388800, + TargetDistance = 2300691636, + TargetDistanceFallOffMax = 2509546906, + TargetDistanceFallOffMin = 780951691, + TargetDistanceFromVehicleEntry = 2654770325, + TargetDistanceMaxWeightingAimTime = 2894102221, + TargetDistanceWeightingMax = 1298342428, + TargetDistanceWeightingMin = 4286470540, + TargetHeadingWeighting = 379592677, + TargetInfluenceSphereRadius = 4246707502, + TargetJackRadius = 1336699435, + TargetMaxSpeedToStrafe = 2121954925, + TargetMinDistanceToAwayFacingNavLink = 1032956977, + TargetMinDistanceToRoute = 1578284711, + TargetMinSpeedToIgnore = 3344078648, + TargetOffsetFilter = 4288775642, + TargetRadiusForCloseNavMeshTask = 1670586696, + TargetRadiusForMoveToPosition = 4292170157, + TargetRadiusForOrientatedAlignRun = 2898549300, + TargetRadiusForOrientatedAlignWalk = 3904376533, + TargetReached = 2955443375, + TargetRearDoorOpenRatio = 1172728662, + TaskMessage = 191752587, + TeeterControl = 2265693971, + TeeterEdge = 1040810614, + TestLowLodIdle = 718713683, + TexId = 1424942312, + TextLabel = 2047169098, + TextureKey = 1994003276, + ThirdPersonVehicleAimCameraRef = 961264130, + ThreatDirWeight = 3141504902, + ThreatEngageDirWeight = 3121364054, + ThreatResponseArmed = 1842245065, + ThreatResponseMelee = 2782470584, + ThreatResponseUnarmed = 1368196689, + Threshhold = 1066024874, + ThresholdRun = 317231619, + ThresholdWatch = 3695837863, + ThresholdWatchAfterFace = 1236817557, + ThresholdWatchStop = 3056724293, + ThrottleControl = 1718221861, + ThrottleMultiplier = 2515377448, + ThroughWindScreenBlendInDuration = 1384973258, + ThroughWindscreenDamageAi = 1443265623, + ThroughWindscreenDamagePlayer = 91246296, + ThrowLongClipId = 2511572601, + ThrowProjectileClipSetId = 76855168, + ThrowProjectileClips = 1011459206, + ThrowShortClipId = 573759163, + ThrowSmokeGrenadeTuning = 3088747583, + TightSpaceSpringConstant = 488216999, + TightSpaceSpringDampingRatio = 1406371922, + TighterTurn = 2775606479, + Tiles = 2501703395, + TimeAfterAttractionMs = 3415237781, + TimeAfterChainTestFailedMs = 884187023, + TimeAfterFailedConditionsMs = 281170344, + TimeAfterGunshotForPlayerToPlayIdles = 3057149274, + TimeAfterGunshotToPlayIdles = 1718176557, + TimeAfterNoBoundsMs = 2108114328, + TimeAheadForBrake = 1369613048, + TimeAheadForBrakeOnWideRoads = 3279921996, + TimeAheadForGetInPosition = 1751757949, + TimeBefore = 353469799, + TimeBeforeDriverAnimCheck = 2064516214, + TimeBeforeFiringMax = 6520997, + TimeBeforeFiringMin = 1761265942, + TimeBeforeInitialForcedFire = 1561898282, + TimeBeforeOvertakeToMatchSpeedWhenCruising = 3069250390, + TimeBeforeOvertakeToMatchSpeedWhenPulledOver = 847675324, + TimeBetweenAddingDangerousVehicleEvents = 3877124457, + TimeBetweenArmedMeleeAttemptsInMs = 3218253966, + TimeBetweenBlockingAreaChecksMS = 3384585290, + TimeBetweenBrokenPointChecks = 1732510557, + TimeBetweenBurstsAbsoluteMin = 913069912, + TimeBetweenBurstsMax = 1662854346, + TimeBetweenBurstsMaxRandomPercent = 3041121812, + TimeBetweenBurstsMin = 1007771611, + TimeBetweenCarChaseShockingEvents = 2475600241, + TimeBetweenChecksToLeaveCowering = 3836158716, + TimeBetweenCoverPointSearches = 2294664490, + TimeBetweenDifficultyUpdates = 2905197964, + TimeBetweenDoorChecks = 910622893, + TimeBetweenExitVehicleDueToRouteChecks = 4172879726, + TimeBetweenForcedFireStates = 1133862058, + TimeBetweenGroundProbes = 2107629661, + TimeBetweenHandsUpChecks = 1422617106, + TimeBetweenIncreasingAvoidanceAngle = 530164593, + TimeBetweenInfluenceSphereChecks = 847783567, + TimeBetweenInvalidateInvalidDispatchVehicles = 606050838, + TimeBetweenLineOfSightChecks = 2789360544, + TimeBetweenLookAts = 3284365585, + TimeBetweenMarkDispatchVehiclesForDespawn = 2966580682, + TimeBetweenPeeksWithoutLOS = 1685929346, + TimeBetweenPlayerArrestAttempts = 1777999076, + TimeBetweenPlayerEvents = 3786622949, + TimeBetweenPointUpdates = 933911179, + TimeBetweenReactionIdlesMax = 1213974814, + TimeBetweenReactionIdlesMin = 1003164741, + TimeBetweenRouteAdjustments = 368954988, + TimeBetweenScenarioScans = 95380765, + TimeBetweenSearchesForNextScenarioInChain = 2148143287, + TimeBetweenSeekChecksAtTacticalPoint = 2565736146, + TimeBetweenShotsAbsoluteMin = 4134391333, + TimeBetweenShotsMax = 2449042043, + TimeBetweenShotsMin = 965484170, + TimeBetweenShoutTargetPosition = 3942172091, + TimeBetweenSpawnAttempts = 3078950392, + TimeBetweenSpawnAttemptsModifier = 296253880, + TimeBetweenSwitchToClearTasks = 2109232134, + TimeBetweenTestSpheresIntersectingRoute = 4076542446, + TimeBetweenWaterHeightMapChecks = 1094365177, + TimeBetweenWaterProbes = 3534467233, + TimeEvadingForMaxValue = 3674050950, + TimeForEyeIk = 420989827, + TimeForRunAndGunOutroDelays = 1555086572, + TimeForTakedownTargetAcquiry = 2979929207, + TimeInSeconds = 704872957, + TimeInWheelieToEnforceMinPitch = 2654954309, + TimeMinBeforeLastPoint = 3697919373, + TimeMinBeforeLastPointType = 3167164487, + TimeOfDayRandomnessHours = 643049118, + TimeOnGroundToDrive = 4081532692, + TimeScale = 3983645896, + TimeSinceLastSpottedToLeaveEngineOn = 3885866805, + TimeSinceNotWantingToTrackStandToAllowStillTransition = 3469844948, + TimeStillToTransitionToTrackStand = 3178576793, + TimeToAllowCachedStickInputForMelee = 694461643, + TimeToApplyPushFromVehicleForce = 2802719757, + TimeToAvoidTargetAfterDamaged = 4228837765, + TimeToCircle = 432972202, + TimeToConsiderEnterInputValid = 195183113, + TimeToCower = 2520530295, + TimeToDelayChaseOnFoot = 259290858, + TimeToFlapMax = 177240921, + TimeToFlapMin = 2321281590, + TimeToGiveUp = 2406795129, + TimeToHoldFireAfterJack = 2874514021, + TimeToLeaveMinBetweenAnybody = 2913322701, + TimeToLeaveRandomAmount = 3638708710, + TimeToLeaveRandomFraction = 3090913677, + TimeToLive = 4175948694, + TimeToLookAhead = 3717085729, + TimeToLookAheadForCollision = 1222335592, + TimeToLookBehind = 2632846246, + TimeToSignalVehiclePursuitToCriminalMax = 3952273225, + TimeToSignalVehiclePursuitToCriminalMin = 972295474, + TimeToStare = 3623978511, + TimeToStartCatchFall = 3622461286, + TimeToStartCatchFallPlayer = 2616410929, + TimeToThrowWeaponMS = 4154063324, + TimeToThrowWeaponPlayerMS = 2820766976, + TimeToUseUrgentTransitionsWhenThreatened = 2561996113, + TimeToWait = 1118835093, + TimeToWaitAtPosition = 3070881148, + TimeUntilDeletionWhenHurrying = 4026550489, + TimeUntilDeletionWhenStuckOffscreen = 731604244, + TimeUntilRelease = 331709996, + TimeWhenStuckToIgnoreBird = 2942205087, + TimedMessages = 2683667002, + Timers = 577434903, + TimesliceMinDistToTarget = 2393149687, + TimesliceTimeAfterAvoidanceMs = 47710483, + ToPose = 1765007258, + TopComponent = 883722394, + TopSpread = 1191223326, + TorqueMultiplier = 2183062202, + TotalStickInput = 4050970672, + TowardsDoorPushAngleDotTolerance = 3263047395, + TrackStandLeftBikeClipId = 413582134, + TrackStandLeftCharClipId = 1792476542, + TrackStandRightBikeClipId = 688331024, + TrackStandRightCharClipId = 697395711, + TrackStandToStillLeftBikeClipId = 2145122814, + TrackStandToStillLeftCharClipId = 1736721816, + TrackStandToStillRightBikeClipId = 2112680596, + TrackStandToStillRightCharClipId = 2306546493, + TransitionReactionTime = 4282065899, + Transitions = 2275723194, + TranslationChangeRate = 86992154, + TrespassGuardModelName = 560650271, + TriggerAmbientReactionChances = 449694767, + TripleHeadNearClip = 1634093344, + TuckFreeWheelToTrackStandRightBikeClipId = 182997087, + TuckFreeWheelToTrackStandRightCharClipId = 4218531778, + TurbulenceSettings = 668098498, + Turn180ActivationAngle = 956068907, + Turn180ConsistentAngleTolerance = 997046562, + TurnAcceleration = 660335017, + TurnClipRate = 849148447, + TurnEndAnimStateInfos = 2833513553, + TurnEnterAnimStateInfos = 313911161, + TurnFromRoll = 320841962, + TurnFromStick = 914788843, + TurnLeftFastClipId = 139557085, + TurnLeftSlowClipId = 1974526496, + TurnResetThresholdD = 3939547333, + TurnRightFastClipId = 3609018768, + TurnRightSlowClipId = 3624061968, + TurnSpeedMBRThreshold = 545188344, + TurnTime = 992439102, + TurnToIdleTransitionDelay = 246989054, + TurnTransitionDelay = 3543637314, + TurnWalkStartAnimStateInfos = 2132068389, + TurningEnergyLowerThreshold = 2301662345, + TurningEnergyUpperThreshold = 3891776628, + TurningRate = 2265632345, + TurningTolerance = 3607448121, + TwoHandedClipSetName = 646946550, + UnarmedBonus = 1120630761, + UnarmedInCoverTargetingDistance = 1369945566, + UncertaintySettings = 71599683, + UncuffDistance = 85726558, + UnderCarMaxVelocity = 3776343247, + UnderVehicle = 3262694177, + UnderVehicleContinuousContactTime = 3606585778, + UnderVehicleInitialDelay = 2055428725, + UnderVehicleVelocityThreshold = 1061400063, + Underwater = 3260924144, + UnderwaterRelax = 1203310844, + UpDownStickInputMin = 2758926922, + UpDownStickInputSmoothingRate = 1495829016, + UpHillMinPitchToStandUp = 221837246, + UpStairsPelvisMaxDeltaZMoving = 2784569431, + UpStairsPelvisMaxNegativeDeltaZMoving = 1210483821, + UpdateOnVehicle = 2664008333, + UpdateOnVehiclePlayer = 2214161412, + UpdatesBeforeShiftingBounds = 2237139323, + UpperArmImpulseCap = 3575120372, + UpperArmNoTorsoHitImpulseCap = 3342224597, + UpperBodyAimBlendInDuration = 1388147608, + UpperBodyAimBlendOutDuration = 870279090, + UpwardMoveSpeedScalingInAir = 2018965896, + UpwardMoveSpeedScalingOnGround = 1487131765, + Urgent = 638477469, + UseAttachDuringAlign = 1827422982, + UseAutoPeekAimFromCoverControls = 1366091002, + UseBalanceForEdgeActivation = 1435456656, + UseButtonToMoveAroundCorner = 92660424, + UseByDefault = 3330866903, + UseCameraOrientationForBackwardsDirection = 4080484940, + UseCameraOrientationWeighting = 3262493116, + UseCameraOrientationWhenStill = 2656290976, + UseCapsuleTests = 3032938120, + UseCombatEntryForAiJack = 2341452292, + UseConstantIntroScaling = 1930123256, + UseConstantOutroScaling = 28269420, + UseDriveByAssistedAim = 2834495058, + UseEnclosedSearchRegions = 759464384, + UseExtraHeading = 1171907848, + UseFineAimSpring = 1815260878, + UseInitialLeanForcing = 1694816095, + UseLastSeenPosition = 2888264108, + UseLegIkOnBikes = 3852741535, + UseLockOnTargetSwitching = 2942037123, + UseMeleeHeadingOverride = 2400008353, + UseMoverPositionWhilePeeking = 3860983555, + UseMovingDirectionDiff = 26697373, + UseNewSlowDownCode = 1214053169, + UseNewStepAndWalkStarts = 4236998281, + UseNewTurnWalkStarts = 2618193402, + UseNewTurns = 2597341356, + UseNonNormalisedScoringForPlayer = 1619169047, + UseOrientationFromParachuteBone = 3610904814, + UsePreEmptiveEdgeActivation = 2870540718, + UsePreEmptiveEdgeActivationMp = 89764064, + UseRagdollTargetIfNoAssistTarget = 2837888679, + UseRelaxBehaviour = 2811070889, + UseRemainingMinTimeForGroundWrithe = 3956869012, + UseReticuleSlowDown = 3139641677, + UseReticuleSlowDownForRunAndGun = 2667436072, + UseReticuleSlowDownStrafeClamp = 1791816512, + UseReturnOvershoot = 347971119, + UseShortDistAngleRotation = 2589136465, + UseSlowInOut = 2172495855, + UseSprintButtonForCoverToCover = 3117448440, + UseStickHistoryForCoverSearch = 3891560208, + UseThreatWeighting = 1056793189, + UseVerticalAxis = 2547715741, + UserData1 = 647685198, + UserData2 = 4202662936, + VEHICLE_CAMERA_OFFSETS_FILE = 321643698, + VFXCullRangeScaleNotVisible = 3493766854, VMCP_BOTTOM = 2770495034, VMCP_FRONT = 3001706694, VMCP_FRONT_LEFT = 1148399176, @@ -3711,8 +7892,218 @@ namespace CodeWalker.GameFiles VMT_TURBO = 2334449168, VMT_TYRE_SMOKE = 3968559424, VMT_XENON_LIGHTS = 2656522436, + ValidityProbes = 1879187973, + ValueForMax = 1433159873, + ValueForMaxDistanceFromOptimal = 502596100, + ValueForMaxDistanceFromPed = 2889265507, + ValueForMin = 2828335077, + ValueForMinDistanceFromOptimal = 744506381, + ValueForMinDistanceFromPed = 1140912184, + ValueForTooCloseToTarget = 3390301810, + ValueForUnableToFind = 1083242382, + Vault = 224741676, + VaultDepth = 428832696, + VaultExtraZGroundTest = 3090504223, + VaultFallTestAngle = 1723088470, + VaultHorizClearance = 3626807160, + VaultVertClearance = 1828436652, + VehicleActivationForceMultiplierBicycle = 1598687789, + VehicleActivationForceMultiplierBike = 2070345117, + VehicleActivationForceMultiplierBoat = 1538253009, + VehicleActivationForceMultiplierDefault = 1953114585, + VehicleActivationForceMultiplierHeli = 2815969152, + VehicleActivationForceMultiplierPlane = 2575088986, + VehicleActivationForceMultiplierQuadBike = 1027107196, + VehicleActivationForceMultiplierTrain = 1298279329, + VehicleAttachPart = 1760348159, + VehicleCentreZOffset = 3606813162, + VehicleCollisionElasticityMult = 4203888010, + VehicleCollisionFrictionMult = 1270097093, + VehicleCollisionNormalPitchOverVehicle = 1698949999, + VehicleCollisionNormalPitchUnderVehicle = 760529768, + VehicleCustomSettingsList = 3282527658, + VehicleEdgeProbeXOffset = 1461993132, + VehicleEdgeProbeZOffset = 370845448, + VehicleEntryExitPitchLevelSmoothRate = 135621085, + VehicleFallingSpeedWeight = 3356594861, + VehicleForwardInitialScale = 99981148, + VehicleForwardScale = 399270735, + VehicleJumpLookAtBlendRate = 3988230675, + VehicleJumpLookAtTurnRate = 3786041740, + VehicleMinSpeedForAiActivation = 999125689, + VehicleMinSpeedForContinuousPushActivation = 1115174900, + VehicleMinSpeedForPlayerActivation = 1493712076, + VehicleMinSpeedForStationaryAiActivation = 2568028856, + VehicleMinSpeedForStationaryPlayerActivation = 3804386946, + VehicleMinSpeedForWarningActivation = 3383227946, + VehicleOnTopOfVehicleCollisionSettings = 227846107, + VehicleOverrides = 2892094444, + VehicleSlowDown = 144280219, + VehicleSpeedToAbortCloseDoor = 2994929358, + VehicleTypes = 101865872, + VehicleVelToImpactNormalMinDot = 670176362, + VelMagStairsSpringMax = 1652778083, + VelMagStairsSpringMin = 1875736055, + VelStartCircling = 3146864305, + VelStopCircling = 3555988495, + //Velocity2 = 2944635386, + VelocityDeltaThrownOut = 3562480846, + VelocityDeltaThrownOutPlayerMP = 935626028, + VelocityDeltaThrownOutPlayerSP = 1359095251, + VelocityInheritance = 3529865731, + VelocityMax = 3727574793, + VelocityMin = 3439766974, + VelocityThreshold = 3597443216, + VelocityZThresholdForHighHighFall = 1373544668, + VelocityZThresholdForSuperHighFall = 2767003073, + VerifyCoverInterval = 3544497884, + VerticalAcceleration = 335505697, + VerticalFlightModeSettings = 2663165374, + VerticalMoveSpeedScaling = 3594576614, + VerticalMoveSpeedScalingAtMaxSpeed = 1880225385, + VeryCloseIgnoreDesAndCamToleranceDist = 3378257781, + VeryCloseIgnoreDesAndCamToleranceDistAimGun = 1824902254, + VeryCloseToCoverDist = 3671850988, + VeryCloseToCoverWeight = 3278990871, + Vibration = 3143512563, + ViewModeBlendEnvelopeRef = 1610750427, + ViewModes = 2142445901, + VisualReactionRange = 2272290579, + WEATHER_DEPENDENT = 211193083, + WaitForFootPlant = 3115377094, + WaitTimeAfterFailedVehExit = 637992620, + WaitTimeForJackingSlowedVehicle = 3405855740, + WaitingOffsets = 2967055211, + WalkAngAccel = 214999846, + WalkStartAnimStateInfos = 3590260370, + Walking = 3122448379, + WalkingRoundPedModifier = 4057155416, + WallHighTestZOffset = 2168664060, + WallProbeDistance = 180206572, + WallProbeRadius = 3138282762, + WallTestEndXOffset = 1396197980, + WallTestStartXOffset = 1813675586, + WallTestYOffset = 1784425794, + WanderInfluenceSphereRadius = 3384130276, + WantedClean = 651905954, + WantedLevel = 1092646882, + WatchSayFightCheers = 1461520922, + WatchSayShocked = 3973997152, + WaterBobShakeRef = 572898954, + WaterCannon = 3460531080, + WaterEntryShakeSettings = 3250603115, + WaterHeightSmoothRate = 3243646861, + WaterProbeDepth = 519277350, + WaterProbeOffset = 2825120069, + Waveform = 579825085, + WeaponAccuracyModifierForAimedAt = 2268167532, + WeaponAccuracyModifierForEvasiveMovement = 409082717, + WeaponAccuracyModifierForOffScreen = 3234043128, + WeaponAnimsFPSIdle = 961290246, + WeaponAnimsFPSLT = 3087874789, + WeaponAnimsFPSRNG = 2940814298, + WeaponAnimsFPSScope = 1227904788, + WeaponBlockingLengthOffset = 68994958, + WeaponBlockingOffsetInLeftCover = 1375297558, + WeaponBlockingOffsetInRightCover = 2238616520, + WeaponLongBlockingOffsetInLeftCover = 1090704787, + WeaponSets = 1399921457, + WeaponZoomFactorSpringConstant = 447200092, + WeaponZoomFactorSpringDampingRatio = 3347315427, + Wearing = 4006165571, + Weight = 2283156278, + WeightToBlockFromPursue = 46040720, + WeightToPullAlongsideFromPursue = 3622347383, + WeightToRamFromPursue = 355255193, + WeightToSpinOutFromPursue = 1145877267, + Weights = 3025359898, + WheelieAccelerateControlThreshold = 908927858, + WheelieApproachRate = 1223047739, + WheelieDesiredLeanAngleTol = 830782336, + WheelieMaxSpeedThreshold = 2115168466, + WheelieShiftThreshold = 524252818, + WheelieSitToStandBlendDuration = 1137589274, + WheelieStickPullBackMinIntention = 2587752772, + WheelieUpDownControlThreshold = 301666014, + WideShot = 742934843, + WideTargetAngularLimit = 1280045894, + WitnessPersonality = 1504162135, + Witnesses = 473322006, + WorldPitchLimits = 759759236, + X360_SCRIPT_RPF = 2882324974, + Yaw = 2514469802, + ZAccForHighImpact = 3275703461, + ZAccForLowImpact = 2682740739, + ZAccForMedImpact = 819470063, + ZAccelerationToStartLeaning = 1346841624, + ZThresholdForApproachOffset = 1712423423, + ZeroRateOnDirectionChange = 3627404834, + ZeroValue = 1611654117, + Zoom = 2983410641, + ZoomDuration = 2271271663, + ZoomFactor = 447392537, + ZoomMotionBlurMaxFovDelta = 3100931510, + ZoomMotionBlurMaxStrengthForFov = 1238524664, + ZoomMotionBlurMinFovDelta = 1054008152, + aSlownessZone = 1652130128, + activeAnimSet = 4032486415, + angleToTargetDegreesToNotUseMinRadius = 2986015914, + animPoseAttachDefault = 1043632907, + animPoseAttachToVehicle = 3798182907, + animPoseDefault = 1916209420, + animPoseHandsCuffed = 2725274669, + attributeList = 1107288906, + attributes = 1956494238, + avoidHeadingChangeSpeed = 1518108829, + avoidHeadingJump = 3036720225, + avoidLockDuration = 3551843612, + avoidPitchChangeSpeed = 1623304217, + avoidPitchJump = 1597259961, + bAllowSmashDuringJump = 2841425601, + bAllowUnderwaterExplosion = 2310120635, + bApplyVehicleEMP = 178952880, + bApplyVehicleSlick = 1236241772, + bApplyVehicleSlowdown = 1509365439, + bApplyVehicleTyrePop = 1334397542, + bBlockJumpCollisionAgainstRagdollBlocked = 69785967, + bBox = 1231029245, + bCanSetPlayerOnFire = 3710755331, + bChargeTargetEnabled = 3037590705, + bControlledByPlayerSprintInput = 3904393624, + bDebugRender = 1991353814, + bDisable2HandedGetups = 1782949708, + bDrawIdleHeadLookTarget = 2274869694, + bEnableDebugDraw = 3665067262, + bEnableGaitAdditive = 3236417550, + bEnableJumpCollisions = 787384491, + bEnableJumpCollisionsMp = 1816652759, + bEnabled = 1409504843, + bFaceAndBodyAreMerged = 2435794203, + bForcePetrolTankDamage = 3983992955, + bForceVehicleExplosion = 3312297335, + bFoundFaceAnimation = 259776703, + bHorizontalRighting = 2237132872, + bIgnoreRatioCheckForFire = 2400251666, + bOverrideFaceAnimation = 1741651815, + bStatic = 2375647859, + bThrowSmokeGrenadeEnabled = 2007829514, + bTrafficLightPositioning = 956704533, + bUseClipPoseHelper = 2006791804, + bUseStayUpright = 2778976875, + bValue = 208974921, + bVerticalRighting = 1056777533, + blurType = 2749488155, + boatBowPtFxForwardMountedName = 2402780585, + boatBowPtFxForwardMountedOffset = 1426207057, + boatExitPtFxEnabled = 913361740, + boatExitPtFxName = 276219657, + boatExitPtFxRange = 3427519025, + boatExitPtFxScale = 2913951911, + boatExitPtFxSpeedEvoMax = 669705932, + boatExitPtFxSpeedEvoMin = 501212370, bobble_hand = 785162942, bodyshell = 1970334199, + boneSize = 60123590, break_extra_1 = 2190258525, break_extra_10 = 2734584581, break_extra_2 = 1950749904, @@ -3723,12 +8114,52 @@ namespace CodeWalker.GameFiles break_extra_7 = 3990325233, break_extra_8 = 367056899, break_extra_9 = 3413787451, - //collision_18eafea9_cdm3nr = 418053801, - //collision_37f22dd2_7guqqmk = 938618322, - //collision_b473fe0d_86rknbm = 3027500557, + cAnimCompressionFile = 2016919075, + cAnimExportCtrlSpecFile = 2982365822, + cExtraRoom = 2952522139, + cFaceDir = 399683105, + cFaceExportCtrlSpecFile = 3382327909, + cHandle = 1251016415, + cName = 1286194959, + cRemoveBoneNameList = 1501402472, + cSceneName = 3148363891, + camCinematicPoliceCarMountedShotMetadata = 1537399056, + camInterpolatorMetadata = 2380636687, + camVehicleRocketSettings = 2211164655, + cameraCutList = 2618346740, + cascadeIndex = 311972855, + chargeMultiplier = 510925374, + colA = 4130410962, + colB = 193412222, + colG = 2816570672, + colR = 960927728, + colTint = 690075466, + colorShift = 4254456164, + concatDataList = 1452216515, + continuousCharge = 463466415, + curves = 1403691063, + cutfAttributes = 2237184102, + damageAtMid = 3010331635, + damageMultiplier = 18336056, + decalId = 2371851021, + decalLength = 1229088392, + decalLife = 96058849, + decalWidth = 2398011309, + defenseMultiplier = 2057680844, + density = 3843932311, + depletionMultiplier = 3653186651, + depthMult = 1469744358, + destroySuppressor = 1745227706, + dirtBlue = 365907991, + dirtGreen = 986658337, + dirtRed = 3463006534, disableDrivebySeat = 161724223, disableDrivebySeatSecondary = 484538291, + eImpactConeRagdollComponent = 100413071, eModKitType = 3865430600, + //eVehicleModCameraPos = 3413962745, + //eVehicleModType = 2363989491, + entries = 934859523, exhaust_10 = 2600343066, exhaust_11 = 3598945568, exhaust_12 = 3896619164, @@ -3750,21 +8181,464 @@ namespace CodeWalker.GameFiles extra_7 = 2360446286, extra_8 = 2661527858, extra_9 = 1913477126, + fAIGreetingDistanceMax = 2521394702, + fAIGreetingDistanceMin = 2740963979, + fAIGreetingPedModifier = 383049694, + fAbsoluteMinDistanceToTarget = 3835533225, + fAccuracyReductionFloor = 552287921, + fAccuracyReductionPerEnemy = 887750836, + fAimToIdleAngleLimitLeft = 867760403, + fAimToIdleAngleLimitRight = 3299346053, + fAimToIdleBreakOutAngle = 2204270248, + fAmbientAnimsMaxDistToTargetSq = 2501949685, + fAmbientAnimsMinDistToTargetSq = 2971689701, + fAnimalImpulseMultMax = 3454936156, + fAnimalImpulseMultMin = 3492529421, + fAnimalMassMult = 3679879803, + fArgumentProbability = 2595564437, + fBaseAlpha = 3124083955, + fBlockedLosAimTime = 547548618, + fBlockedLosWeighting = 1239531869, + fBulletReactionPosAdjustmentZ = 2724641994, + fCancelTargetInCoverMovedDist = 2002565392, + fCancelTargetOutOfCoverMovedDist = 2120328830, + fCargoFuel = 304399001, + fChanceOfArgumentChallenge = 784723777, + fChanceOfArgumentChallengeBeingAccepted = 2295557741, + fChanceOfConversationRant = 1878691053, + fChanceOfDynamicRun = 7313110, + fChargeGoalBehindCoverCentralOffset = 1417010304, + fChargeGoalCompletionRadius = 3325627586, + fChargeGoalLateralOffset = 1507206306, + fChargeGoalMaxAdjustRadius = 1141048876, + fChargeGoalRearOffset = 2183058530, + fConeAngle = 1743670592, + fConversationSoundReductionAmount = 3201590411, + fConversationSoundReductionDistance = 1212129799, + fCoronaIntensity = 1078847881, + fCoronaSize = 1810161173, + fCoronaZBias = 1698708840, + fCounterImpulseRatio = 3072803950, + fCounterImpulseScale = 2189152686, + fCoverPointScoreMultiplier = 1893361518, + fDecideToRunChance = 1248305822, + fDefaultDescendRate = 1487680899, + fDefaultRopeLength = 1491518630, + fDirectionTestProbeLength = 2195773039, + fDirtLevel = 3834082948, + fDisplayZ = 806477731, + fDistSearch = 2679850916, + fDistToHidingTarget_Inner = 1373272095, + fDistToHidingTarget_Outer = 1408109790, + fDistToPickNewPoint = 3620765866, + fDistanceBetweenInfluenceSpheres = 2500728149, + fDoInjuredOnGroundChance = 3434153865, + fDotMinThrowerToTarget = 1053509475, + fDurationStage1 = 3898851432, + fDurationStage2 = 498117381, + fEndStrength = 649526198, + fExistingTargetScoreWeight = 1679672363, + fExitDescendRate = 2768160631, + fExtraRopeLength = 2199025334, + fFadeInCutsceneDuration = 969234229, + fFadeInGameDuration = 3025199107, + fFadeOutCutsceneDuration = 953346839, + fFadeOutGameDuration = 473400434, + fFallOff = 391886097, + fFallingSpeedForHighFall = 906382083, + fFallingSpeedThreshold = 715813748, + fFarDrawDistance = 3688268720, + fFastCarPushImpulseMult = 2370876339, + fFinisherShotgunBonusArmedSpeedModifier = 1950052429, + fFireContinuouslyDistMax = 884701582, + fFireContinuouslyDistMin = 3652101978, + fFireWeaponStrengthForceMultiplier = 336969407, + fFleeProjectRange = 1574250361, + fFleeRange = 3546053113, + fFlinchTargetZOffset = 1502498286, + fFlinchTargetZOffsetOnGround = 3223569917, + fForceLeanInDirectionAmountMax = 615835079, + fForceLeanInDirectionAmountMin = 481812193, + fForceRampMaxSpeed = 2515092116, + fForceRampMinSpeed = 3439085926, + fForceStrafeDistance = 679941746, + fGlassBreakRadius = 3567409373, + fGlassDamage = 2130522201, + fGoToDefAreaTimeOut = 2145163833, + fHeadLookHeadingRandomizationRange = 1337934970, + fHeadLookPitchRandomizationRange = 1747662930, + fHeadLookZOffset = 3439106982, + fHeadLookZOffsetOnGround = 3990998153, + fHeadingRandomizationRange = 1290250752, + fHeight = 4242690206, + fHorizontalRightingStrength = 3772786175, + fHorizontalRightingTime = 3419496233, + fImpactConeAngleBack = 3437539423, + fImpactConeAngleFront = 2987127575, + fImpulseMultLimbs = 2222583561, + fImpulseMultSpine = 2449600555, + fImpulseRecoveryPerSecond = 3098879897, + fImpulseReductionPerShot = 702174865, + fImpulseReductionScaleMax = 1706111854, + fIndent = 3956347885, + fInfluenceSphereCheckRouteRadius = 2889725249, + fInfluenceSphereInnerWeight = 3016470091, + fInfluenceSphereOuterWeight = 983725397, + fInfluenceSphereRequestRadius = 3585286231, + fInitialDelay = 79279568, + fInitialHitImpulseMult = 664247322, + fInitialSearchRadius = 2790363538, + fInjuredGetupImpulseMag2 = 461478411, + fInputMax = 541735427, + //fIntensity = 3937240636, + fJumpDescendRate = 564993371, + fJumpToSmashWindowPhaseChange = 3670878450, + fLifeTime = 2257773206, + fLongJumpDescendRate = 1357105096, + fLostTargetTime = 593698055, + fMaxAboveHeadForOverheadReactions = 2841960409, + fMaxAllyDistance = 1305363589, + fMaxAngleBetweenTargets = 1848729150, + fMaxAngleOffset = 3595841120, + fMaxArmAmplitude = 3679690700, + fMaxArmPeriod = 2396268986, + fMaxArmStiffness = 3395352877, + fMaxAttemptMoveToCoverDelay = 1947279181, + fMaxAttemptMoveToCoverDelayGlobal = 3581780763, + fMaxBuoyancy = 2562294840, + fMaxDistForOverheadReactions = 1522624465, + fMaxDistanceFromCorner = 1719840119, + fMaxDistanceToTarget = 624502137, + fMaxDstanceToMoveAwayFromAlly = 3914650526, + fMaxDynamicStrafeDistance = 1721763990, + fMaxHeliSpeedForRappel = 210693397, + fMaxImpulseModifier = 628688906, + fMaxJumpPhaseAllowDescend = 3096283176, + fMaxJumpPhaseAllowSmashWindow = 1851998260, + fMaxLeavingCornerDistance = 2930793396, + fMaxRandomAdditionalOffset = 3574291632, + fMaxRouteDistanceModifier = 685847089, + fMaxSecondsDelayBetweenChatLines = 1048379145, + fMaxSecondsDelayBetweenPhoneLines = 3637331931, + fMaxStroke = 2122555922, + fMaxTargetDistToUpdateFlinch = 3171415609, + fMaxTargetDistToUpdateFlinchOnGround = 2588071080, + fMaxTimeBeforeReactToExplosion = 1679184192, + fMaxTimeBetweenBulletReactions = 433744442, + fMaxTimeBetweenFrustratedPeds = 2786807653, + fMaxTimeBetweenLookAt = 3890597462, + fMaxTimeStrafing = 630125920, + fMaxTimeToWait = 328649625, + fMaxWaitForCoverExitTime = 1074424476, + fMaxWaitSeconds = 1143137996, + fMidStrength = 494142166, + fMinAlliesForMaxAngleOffset = 1154727971, + fMinArmAmplitude = 1774619724, + fMinArmPeriod = 2926397774, + fMinArmStiffness = 966292507, + fMinAttemptMoveToCoverDelay = 449264633, + fMinAttemptMoveToCoverDelayGlobal = 1975275563, + fMinBuoyancy = 3789430640, + fMinDistBetweenTargetAndOtherEnemies = 3248381180, + fMinDistToNonTargetEnemy = 3283971281, + fMinDistanceBetweenPeds = 398266299, + fMinDistanceForAltCover = 1192276059, + fMinDistanceFromPrimaryTarget = 2423717597, + fMinDistanceSavingToUseVehicle = 3352862788, + fMinDistanceSquaredToPlayerForAudio = 4242148097, + fMinDistanceToBeConsideredSameEvent = 4233735310, + fMinDistanceToBreakWindow = 1608634776, + fMinDistanceToClearCorner = 2829098503, + fMinDistanceToTarget = 2783817407, + fMinDistanceToUseVehicle = 3455250403, + fMinFinisherShotgunTotalImpulseBraced = 1412443494, + fMinFinisherShotgunTotalImpulseNormal = 1471062121, + fMinForwardVectorToFlinch = 729908938, + fMinForwardVectorToFlinchOnGround = 3628130093, + fMinHeadingDeltaToFixTurn = 1358716283, + fMinHeadingDeltaToIdleTurn = 890221191, + fMinHeightToRappel = 2869375884, + fMinHoldThrowPitch = 1407383707, + fMinImpulseModifier = 4043035065, + fMinJumpPhaseAllowDescend = 2330528087, + fMinJumpPhaseAllowSmashWindow = 425134671, + fMinListenerRangeToDrawSonarBlips = 2604348013, + fMinLoiteringTimeSeconds = 2196178671, + fMinOtherPedDistanceDiff = 2587275512, + fMinRiverFlowForRapids = 978248567, + fMinRiverGroundClearanceForRapids = 2761683393, + fMinSecondsDelayBetweenChatLines = 3930402274, + fMinSecondsDelayBetweenPhoneLines = 2156082331, + fMinSmashWindowPhase = 2105176291, + fMinSpeedForPush = 1105441606, + fMinStickValueAllowDescend = 4109388444, + fMinStroke = 1198151288, + fMinTimeAfterAimPoseForStateChange = 3273513642, + fMinTimeBeforeReactToExplosion = 4258831091, + fMinTimeBetweenBulletReactions = 1300484749, + fMinTimeBetweenFrustratedPeds = 919558869, + fMinTimeBetweenLookAt = 2167660448, + fMinTimeBetweenRunDirectlyChecks = 3866357326, + fMinTimeInCombatSeconds = 197521501, + fMinTimeInGetUpToAllowCover = 266220607, + fMinTimeInState = 1959218646, + fMinTimeRunning = 1041070680, + fMinTimeStandingAtCover = 4116440083, + fMinTimeToWait = 1415555709, + fMoveBlendRatioLerpTime = 599255143, + fMuscleAngleStrengthRampDownRate = 3498784443, + fMuscleSpeedStrengthRampDownRate = 3163227947, + fNearDrawDistance = 1690336060, + fNewPositionThreshold = 445998819, + fOffset = 1293919506, + fParachutingZoom = 105068200, + fPitch = 632986329, + fPlayerBeingTargetedExtraDistance = 3975640219, + fPlayerDirectThreatDistance = 4134350078, + fPlayerHighThreatWeighting = 2927479807, + fPlayerMoveDistToResetChargeGoals = 1014164585, + fPlayerMoveDistToResetLoiterPosition = 2426887593, + fPlayerObstructionCheckRadius = 2115554015, + fPlayerObstructionRadius = 2354781986, + fPlayerThreatDistance = 1772648844, + fPow = 2680890523, + fPreferInjuredGetupPlayerHealthThreshold = 1193017389, + fProbeLength = 586057169, + fPronePedKickImpulse = 2891493908, + fRadioSoundReductionAmount = 1747790072, + fRadioSoundReductionDistance = 1838053251, + fRadius = 315509558, + fRagdollComponentBuoyancy = 2460325000, + fRagdollScore = 4246262885, + fRainSnowSoundReductionAmount = 801070127, + fResultMax = 2372087104, + fRetreatTime = 2224359067, + fRoll = 2689106272, + fRopeUnwindRate = 2890096206, + fRotation = 2963173633, + fSearchRangeMax = 3314827784, + fSearchScaler = 2543804780, + fSecondsInAirBeforePassengerComment = 156254164, + fSecondsInRainTransitionPeriod = 3510850224, + fSectionByTimeSliceDuration = 3421999474, + fShadowBlur = 1632842349, + fShotBlindFireProbability = 2977969682, + fShotHeadAngleToFireGun = 3872529888, + fShotWeaponAngleToFireGun = 3753244842, + fShoutBlockingLosInterval = 1257619633, + fShoutTargetPositionInterval = 2226395755, + fSmallInfluenceSphereRadius = 304969557, + fSoundRange_BarelyAudible = 347298932, + fSoundRange_CarHighSpeed = 29182579, + fSoundRange_CarHorn = 2428401420, + fSoundRange_CarLowSpeed = 871660954, + fSoundRange_ClearlyAudible = 2698396339, + fSoundRange_Explosion = 1114733078, + fSoundRange_FootstepBase = 3197086918, + fSoundRange_FootstepFoliage = 1197726055, + fSoundRange_GlassBreak = 1070205007, + fSoundRange_Gunshot = 4073295642, + fSoundRange_HeavyFootstep = 1578589400, + fSoundRange_LandFromFall = 3329995088, + fSoundRange_Megaphone = 121379805, + fSoundRange_MostlyAudible = 1166640595, + fSoundRange_ObjectCollision = 819051225, + fSoundRange_Shouting = 2190165672, + fSoundRange_SilencedGunshot = 3759114450, + fSoundRange_Talking = 496127271, + fSoundRange_WaterSplashLarge = 807986206, + fSoundRange_WaterSplashSmall = 1532863616, + fSoundRange_WeaponSpinUp = 3813597325, + fSoundRange_Whisper = 1593818711, + fSpecialAbilityRageKickImpulseModifier = 913654553, + fStaminaDepletionBlinkPercentage = 420083265, + fStartAimingDistance = 2899412417, + fStartDescendingDistToTargetSq = 2804961359, + fStartStrength = 2901808706, + fStayUprightForceIdle = 604632997, + fStayUprightForceMoving = 603776431, + fStayUprightForceNonVelocityBased = 230707381, + fStopAimingDistance = 1894206862, + fSubtitleDuration = 1836544003, + fTargetScenarioRadius = 1578763478, + fTargetThreatOverride = 925392687, + fTargetTooCloseDistance = 970868308, + fTargetableDistance = 1046040592, + fTargetingInactiveDisableTime = 3550430565, + fTempInitialStiffnessWhenShot = 3121676006, + fTime = 1591208228, + fTimeBetweenAllyProximityChecks = 1201850831, + fTimeBetweenAltCoverSearches = 1187764077, + fTimeBetweenCombatDirectorUpdates = 687676716, + fTimeBetweenCoverSearchesMax = 379663563, + fTimeBetweenCoverSearchesMin = 4141996221, + fTimeBetweenDragsMin = 697272720, + fTimeBetweenFailedGestureMax = 1249935741, + fTimeBetweenFailedGestureMin = 562041905, + fTimeBetweenGestureAnimsMax = 853543838, + fTimeBetweenGestureAnimsMin = 1148925964, + fTimeBetweenGesturesMaxGlobal = 1473938462, + fTimeBetweenGesturesMinGlobal = 3136547752, + fTimeBetweenJackingAttempts = 2673669317, + fTimeBetweenPassiveAnimsMax = 2278473263, + fTimeBetweenPassiveAnimsMin = 3683572550, + fTimeBetweenQuickGlancesMax = 3389707560, + fTimeBetweenQuickGlancesMin = 2756383457, + fTimeBetweenRouteSearches = 1932437978, + fTimeBetweenSecondaryTargetUsesMax = 3340527808, + fTimeBetweenSecondaryTargetUsesMin = 610577934, + fTimeBetweenUpdates = 4202105817, + fTimeSinceLastAimedAtForGesture = 2237966956, + fTimeToIgnoreBlockedLosWeighting = 3653083064, + fTimeToPickNewPoint = 330577879, + fTimeToStandAtPerimeter = 2009665019, + fTimeToUseSecondaryTargetMax = 3128077167, + fTimeToUseSecondaryTargetMin = 3243108638, + fTotalDuration = 1185457940, + fTransitionInDuration = 2279341021, + fTransitionOutDuration = 1271134520, + fValue = 198751340, + fVehicleOffset = 285457106, + fVehicleTilt = 382138818, + fVerticalRightingStrength = 3868696870, + fVerticalRightingTime = 1372422790, + fVolumeIntensity = 3963210786, + fWidth = 658992148, + fWorldH = 2995953429, + fWorldW = 3885599006, + fWorldX = 4115899538, + fWorldY = 70992481, + faceAnimationNodeName = 555167272, + faceAttributesFilename = 3123042911, + fadeCurveType = 2259012140, + fadeInColor = 1910831709, + fadeInTime = 3161810789, + fadeOutColor = 2234426246, + fadeOutTime = 2157942304, + fblade_1fast = 1032498025, fblade_1mod = 1157497495, + fblade_2fast = 930609265, + fblade_2mod = 2573434709, + fblade_3fast = 411536741, + fblade_3mod = 879315983, + forceFall = 569763335, forks_l = 991413023, forks_u = 837923007, + frames = 580974885, + futureHeightmapSampleTime = 892450737, + futureSampleTime = 2996388896, + fwClipSetWithGetup = 4285341798, + fwDirectedClipItemWithProps = 3883314999, + gpuPtFxEnabled = 4158673537, + halfSigmoidConstant = 3368438810, handlebars = 2921986035, + hdrMult = 271126249, + iBulletEventResponseLengthMs = 2255380962, + iComponent = 505193016, + iCutsceneFlags = 2110267871, + iDrawable = 2231657823, + iEventArgsIndex = 4289498236, + iEventId = 3149172832, + iHeadLookRandomizationTimeMin = 1333092266, + iHeadingRandomizationTimeMax = 72944862, + iHeadingRandomizationTimeMin = 15793390, + iHeadlookRandomizationTimeMax = 3088121500, + iHealthDepletionBlinkPercentage = 4066516916, + iLanguageID = 1537748314, + iLightProperty = 2477126074, + iLightType = 1233248098, + iLivery = 756943177, + iLivery2 = 2453634574, + iMainBodyColour = 4067992989, + iMaxLookAtTime = 2834021629, + iMaxNumInjuredOnGroundAgents = 2495781827, + iMaxPedsAtTrafficLights = 3623500230, + iMaxPedsInCombatTask = 269064650, + iMaxRandomExplosionTime = 3153397162, + iMaxTime = 2235294119, + iMaxTimeBeforeSearchingForNewHidingPlace = 3217586928, + iMinLookAtTime = 1571509424, + iMinNumEnemiesForScaling = 2189340328, + iMinTime = 4168588760, + iMinTimeBeforeSearchingForNewHidingPlace = 3618288355, + iObjectId = 1657245540, + iObjectIdList = 1236477325, + iOverlayType = 211975133, + iPlayerDirectThreatTimeMs = 653564341, + iRandomDurationMax = 2620945991, + iRandomDurationMin = 18835671, + iRangeEnd = 398786672, + iRangeStart = 1047819622, + iRunningTimeForVelocityBasedStayupright = 971008663, + iShotMaxBlindFireTimeH = 4263173023, + iShotMaxBlindFireTimeL = 3609300401, + iShotMaxTimeBeforeGunThreaten = 3639036861, + iShotMaxTimeBetweenFireGun = 655022274, + iShotMinTimeBeforeGunThreaten = 3985239087, + iShotMinTimeBetweenFireGun = 3419541350, + iSpecularColour = 1609620374, + iTargetNotSeenIgnoreTimeMs = 3270779927, + iTexture = 467155910, + iTimeToStandAtSearchPoint = 1751162602, + iTransitionIn = 2643240271, + iTransitionOut = 2810110094, + iVectorDefault = 178027873, indicator_lr = 3979005071, indicator_rr = 112742354, + initialUnlockedCap = 1709960891, + interiorHash = 595627342, + interpTime = 3980674446, + isUnderwater = 2320897552, + largeCharge = 1846583548, + lawResponseTime = 218173601, + lawResponseType = 1915622273, + layers = 197915343, + leanKd = 664693842, + leanKi = 814841404, + leanKp = 2222663190, + lightingType = 2671568709, + limbId = 970730558, + lookAtVelProbIfNoBumpTarget = 1708224645, + maxCruiseSpeed = 3454970252, + maxDesiredAnglePitchDegrees = 1673702936, + maxDesiredAngleRollDegrees = 1731534963, + maxDesiredAngleYawDegrees = 3035684229, + maxDistanceAfterAimingToApplyAlternateScalingMax = 2968415887, + maxHangoutChatDistSq = 1876536698, + maxMinDistanceForRollComputation = 2791696823, + maxPitch = 2569057742, + maxPitchRoll = 139171723, + maxRoll = 682642275, + maxSecondsNearPlayerUntilHangoutQuit = 2302651663, + maxThrottle = 2384591971, + maxYaw = 4244700983, + mediumCharge = 3545223222, + midRadius = 3099411482, + minMinDistanceForRollComputation = 502368761, + minSecondsNearPlayerUntilHangoutQuit = 232011649, misc_1 = 2690009945, misc_2 = 1385115596, mod_a = 3654959273, + mod_aa = 3843353624, + mod_ab = 3135215534, + mod_ac = 3364434689, + mod_ad = 2723112578, + mod_ae = 2970026993, + mod_af = 2245832093, + mod_ag = 2492156666, + mod_ah = 1765012564, + mod_ai = 2014155263, + mod_aj = 1286290243, + mod_ak = 1535367412, mod_b = 808381781, mod_c = 4268165574, mod_col_10 = 3033709986, mod_col_11 = 2249285664, mod_col_12 = 1498318491, mod_col_13 = 1787603223, + mod_col_14 = 1573326728, + mod_col_15 = 1862676998, + mod_col_16 = 1044598917, mod_col_6 = 1547719720, mod_col_7 = 580018373, mod_col_8 = 4191162177, @@ -3792,50 +8666,115 @@ namespace CodeWalker.GameFiles mod_x = 3292501248, mod_y = 2651277456, mod_z = 3888995355, + models = 4042130640, neon_b = 728001778, neon_f = 3850133799, neon_l = 4084563217, neon_r = 556062831, - scoop_1mod = 2292220415, - scoop_2mod = 2166816405, - scoop_3mod = 2486991428, - spike_1mod = 2796607005, - spike_2mod = 3978311755, - spike_3mod = 4063416457, - swingarm = 3929033220, - taillight_l = 3008822349, - taillight_r = 914195096, - weaponSlotSecondary = 2656206330, - window_lm = 2675373130, - window_lr = 2639884295, - window_rm = 3523659197, - window_rr = 2355575415, - - fblade_1fast = 1032498025, - fblade_2fast = 930609265, - fblade_2mod = 2573434709, - fblade_3fast = 411536741, - fblade_3mod = 879315983, - mod_aa = 3843353624, - mod_ab = 3135215534, - mod_ac = 3364434689, - mod_ad = 2723112578, - mod_ae = 2970026993, - mod_af = 2245832093, - mod_ag = 2492156666, - mod_ah = 1765012564, - mod_ai = 2014155263, - mod_aj = 1286290243, - mod_ak = 1535367412, - mod_col_14 = 1573326728, - mod_col_15 = 1862676998, - mod_col_16 = 1044598917, + nonFlyableAreas = 3958481819, + numFutureSamples = 54155191, + numHeightmapFutureSamples = 1335540990, + outFxName = 3344142251, + overrideFaceAnimationFilename = 2464163899, + pCutsceneEventArgsList = 101111438, + pCutsceneEventList = 873743947, + pCutsceneLoadEventList = 1537015366, + pCutsceneObjects = 1337787258, + pExtraBoneIds = 814194086, + parameterIntensity = 3579895798, + patchFile = 246845325, + pedGroups = 3299118270, + pitchKd = 1584865556, + pitchKi = 665138033, + pitchKp = 2427028852, + playerNearToHangoutDistanceInMetersSquared = 724033442, + ptFxDepthEvoMax = 3186421174, + ptFxDepthEvoMin = 1171785422, + rage__cutfAnimatedLightObject = 425672361, + rage__cutfAnimatedParticleEffectObject = 3750235532, + rage__cutfAnimationManagerObject = 162924556, + rage__cutfAssetManagerObject = 68930034, + rage__cutfAudioObject = 204478241, + rage__cutfBlockingBoundsObject = 1024212505, + rage__cutfBoolValueEventArgs = 2483426166, + rage__cutfCameraCutCharacterLightParams = 2335868993, + rage__cutfCameraCutEventArgs = 1032739425, + rage__cutfCameraCutTimeOfDayDofModifier = 1378659296, + rage__cutfCameraObject = 2665839426, + rage__cutfCascadeShadowEventArgs = 852034231, + rage__cutfCutsceneFile2 = 3527760993, + rage__cutfCutsceneFile2__SConcatData = 1737539928, + rage__cutfDecalEventArgs = 3570809234, + rage__cutfDecalObject = 576081308, + rage__cutfEvent = 2587541103, + rage__cutfEventArgs = 534106966, + rage__cutfFinalNameEventArgs = 80958073, + rage__cutfFixupModelObject = 989168939, + rage__cutfFloatValueEventArgs = 1609567909, + rage__cutfHiddenModelObject = 979016746, + rage__cutfLightObject = 1781777258, + rage__cutfLoadSceneEventArgs = 3528166281, + rage__cutfNameEventArgs = 1160694198, + rage__cutfObjectIdEvent = 3787091478, + rage__cutfObjectIdEventArgs = 3132728576, + rage__cutfObjectIdListEventArgs = 1377451264, + rage__cutfObjectIdNameEventArgs = 4198689239, + rage__cutfObjectVariationEventArgs = 2095750852, + rage__cutfOverlayObject = 2083739024, + rage__cutfParticleEffectObject = 1696721139, + rage__cutfPedModelObject = 462317467, + rage__cutfPlayParticleEffectEventArgs = 222809975, + rage__cutfPropModelObject = 2296489151, + rage__cutfRayfireObject = 578480161, + rage__cutfScreenFadeEventArgs = 303942334, + rage__cutfScreenFadeObject = 2841702621, + rage__cutfSubtitleEventArgs = 3215026609, + rage__cutfSubtitleObject = 307438872, + rage__cutfTriggerLightEffectEventArgs = 3654996547, + rage__cutfVehicleExtraEventArgs = 4113944278, + rage__cutfVehicleModelObject = 2042362651, + rage__cutfVehicleVariationEventArgs = 918254035, + rage__cutfWeaponModelObject = 3028272477, + rage__parAttributeList = 1334016442, rblade_1fast = 451472348, rblade_1mod = 4141162370, rblade_2fast = 3599310922, rblade_2mod = 1768767594, rblade_3fast = 3929521030, rblade_3mod = 1496111458, + rollKd = 2739053876, + rollKi = 1158342846, + rollKp = 3696891742, + sampleSize = 1245538595, + scoop_1mod = 2292220415, + scoop_2mod = 2166816405, + scoop_3mod = 2486991428, + sectionSplitList = 4212477189, + sigmoidConstant = 3286738338, + sizeEvo = 1814735825, + slowDistance = 2171885531, + smallCharge = 2475436365, + sortIndex = 2685533834, + specialAbilities = 1644716366, + speedMult = 1478381657, + spike_1mod = 2796607005, + spike_2mod = 3978311755, + spike_3mod = 4063416457, + strRequestRecording = 1353902600, + streakDirection = 2002769312, + streamedMusc = 4241737797, + swingarm = 3929033220, + tacticalXml = 2014698042, + taillight_l = 3008822349, + taillight_r = 914195096, + throttleKd = 528950431, + throttleKi = 974150069, + throttleKp = 2573768812, + timeAfterAimingToApplyAlternateScalingMax = 4000301303, + timeAfterAimingToApplyAlternateScalingMin = 1097326038, + timeAfterAimingToApplyDistanceBlend = 2278684726, + timeToCatchfallMS = 382034967, + timeWarpScale = 448101701, turret_a1 = 3992710274, turret_a2 = 1077448950, turret_a3 = 1382757723, @@ -3844,6 +8783,65 @@ namespace CodeWalker.GameFiles turret_b2 = 2839830988, turret_b3 = 3138651499, turret_b4 = 2400824695, + typeFile = 2221257278, + uAITimeBetweenGreeting = 4188496022, + uAimToIdleLookAtTime = 1015010494, + uCheckForChargeTargetPeriodMS = 1748071312, + uCheckForSmokeThrowPeriodMS = 1637328324, + uConsiderRecentChargeAsActiveTimeoutMS = 698042866, + uConsiderRecentThrowAsActiveTimeoutMS = 865965443, + uDistanceCheckPeriodMS = 2454614730, + uMaxNumActiveChargers = 1678873512, + uMaxNumActiveThrowers = 2870486361, + uMaxTimeInMSToPlayRingTone = 3917563062, + uMinTimeBetweenChargesAtSameTargetMS = 2705750728, + uMinTimeBetweenThrowsAtSameTargetMS = 4240191943, + uMinTimeForSamePedToChargeAgainMS = 921957248, + uMinTimeForSamePedToThrowAgainMS = 2208519322, + uNumPedsToTransitionToRainPerPeriod = 3616711897, + uRepeatedAttemptsBeforeTeleportToLeader = 3188916891, + uTicksUntilHangoutConversationCheck = 1226852111, + uTimeBetweenLookBacks = 891569975, + uTimeInMSUntilNewWeirdPedComment = 1037671842, + uTimeToLookBack = 3027972140, + uTimeToWaitAfterNewSayFailureInSeconds = 1968341934, + vColour = 3313809689, + vCorners = 2013990738, + vDirection = 3788713491, + vExtraRoomPos = 1493683017, + vHaltFrequency = 220202594, + vOffset = 281069076, + vPosition = 1835178760, + vRotation = 330442780, + vRotationQuaternion = 1522820057, + vScale = 1805863696, + vScroll = 2514516235, + vStartPosition = 2268451071, + vTriggerOffset = 1263529604, + vehGroups = 3356170168, + vfxGroup = 222345803, + weaponSlotSecondary = 2656206330, + whiskerForwardSpeedScale = 3367104276, + whiskerForwardTestDistance = 4280868953, + whiskerLateralTestDistance = 369724672, + whiskerTestAngle = 1412479638, + whiskerVerticalTestDistance = 2043681017, + widthRatio = 2261099445, + wildlifeHabitats = 2772741337, + windDebrisPtFxEnabled = 3909318761, + windDebrisPtFxName = 1353578052, + window_lm = 2675373130, + window_lr = 2639884295, + window_rm = 3523659197, + window_rr = 2355575415, + yawKd = 3266080932, + yawKi = 1366920760, + yawKp = 922081581, + + + + + diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaTypes.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaTypes.cs index 117605a..0b8f66e 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaTypes.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaTypes.cs @@ -894,21 +894,21 @@ namespace CodeWalker.GameFiles new MetaStructureEntryInfo_s(MetaName.StartImapFile, 264, MetaStructureEntryDataType.Hash, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.EndImapFile, 268, MetaStructureEntryDataType.Hash, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.PtFxAssetName, 272, MetaStructureEntryDataType.Hash, 0, 0, 0), - new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, (MetaName)1980345114), + new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, MetaName.CCompEntityAnims), new MetaStructureEntryInfo_s(MetaName.Animations, 280, MetaStructureEntryDataType.Array, 0, 13, 0) ); - case (MetaName)1980345114: - return new MetaStructureInfo((MetaName)1980345114, 4110496011, 768, 216, + case MetaName.CCompEntityAnims: + return new MetaStructureInfo(MetaName.CCompEntityAnims, 4110496011, 768, 216, new MetaStructureEntryInfo_s(MetaName.AnimDict, 0, MetaStructureEntryDataType.ArrayOfChars, 0, 0, (MetaName)64), new MetaStructureEntryInfo_s(MetaName.AnimName, 64, MetaStructureEntryDataType.ArrayOfChars, 0, 0, (MetaName)64), new MetaStructureEntryInfo_s(MetaName.AnimatedModel, 128, MetaStructureEntryDataType.ArrayOfChars, 0, 0, (MetaName)64), new MetaStructureEntryInfo_s(MetaName.punchInPhase, 192, MetaStructureEntryDataType.Float, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.punchOutPhase, 196, MetaStructureEntryDataType.Float, 0, 0, 0), - new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, (MetaName)3430328684), + new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, MetaName.CCompEntityEffectsData), new MetaStructureEntryInfo_s(MetaName.effectsData, 200, MetaStructureEntryDataType.Array, 0, 5, 0) ); - case (MetaName)3430328684: - return new MetaStructureInfo((MetaName)3430328684, 1724963966, 1024, 160, + case MetaName.CCompEntityEffectsData: + return new MetaStructureInfo(MetaName.CCompEntityEffectsData, 1724963966, 1024, 160, new MetaStructureEntryInfo_s(MetaName.fxType, 0, MetaStructureEntryDataType.UnsignedInt, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.fxOffsetPos, 16, MetaStructureEntryDataType.Float_XYZ, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.fxOffsetRot, 32, MetaStructureEntryDataType.Float_XYZW, 0, 0, 0), @@ -1007,16 +1007,16 @@ namespace CodeWalker.GameFiles new MetaStructureEntryInfo_s(MetaName.y, 4, MetaStructureEntryDataType.Float, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.z, 8, MetaStructureEntryDataType.Float, 0, 0, 0) ); - case (MetaName)2858946626: - return new MetaStructureInfo((MetaName)2858946626, 1792487819, 768, 40, + case MetaName.CPedPropInfo: + return new MetaStructureInfo(MetaName.CPedPropInfo, 1792487819, 768, 40, new MetaStructureEntryInfo_s((MetaName)2598445407, 0, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0), - new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, (MetaName)94549140), + new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, MetaName.CPedPropMetaData), new MetaStructureEntryInfo_s((MetaName)3902803273, 8, MetaStructureEntryDataType.Array, 0, 1, 0), new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, MetaName.CAnchorProps), new MetaStructureEntryInfo_s(MetaName.aAnchors, 24, MetaStructureEntryDataType.Array, 0, 3, 0) ); - case (MetaName)376833625: - return new MetaStructureInfo((MetaName)376833625, 4030871161, 768, 112, + case MetaName.CPedVariationInfo: + return new MetaStructureInfo(MetaName.CPedVariationInfo, 4030871161, 768, 112, new MetaStructureEntryInfo_s((MetaName)1235281004, 0, MetaStructureEntryDataType.Boolean, 0, 0, 0), new MetaStructureEntryInfo_s((MetaName)4086467184, 1, MetaStructureEntryDataType.Boolean, 0, 0, 0), new MetaStructureEntryInfo_s((MetaName)911147899, 2, MetaStructureEntryDataType.Boolean, 0, 0, 0), @@ -1025,11 +1025,11 @@ namespace CodeWalker.GameFiles new MetaStructureEntryInfo_s((MetaName)2996560424, 4, MetaStructureEntryDataType.ArrayOfBytes, 0, 4, MetaName.PsoPOINTER), new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, (MetaName)3538495220), new MetaStructureEntryInfo_s((MetaName)3796409423, 16, MetaStructureEntryDataType.Array, 0, 6, 0), - new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, (MetaName)253191135), + new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, MetaName.CPedSelectionSet), new MetaStructureEntryInfo_s(MetaName.aSelectionSets, 32, MetaStructureEntryDataType.Array, 0, 8, 0), new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, MetaName.CComponentInfo), new MetaStructureEntryInfo_s(MetaName.compInfos, 48, MetaStructureEntryDataType.Array, 0, 10, 0), - new MetaStructureEntryInfo_s(MetaName.propInfo, 64, MetaStructureEntryDataType.Structure, 0, 0, (MetaName)2858946626), + new MetaStructureEntryInfo_s(MetaName.propInfo, 64, MetaStructureEntryDataType.Structure, 0, 0, MetaName.CPedPropInfo), new MetaStructureEntryInfo_s(MetaName.dlcName, 104, MetaStructureEntryDataType.Hash, 0, 0, 0) ); case (MetaName)3538495220: @@ -1069,8 +1069,8 @@ namespace CodeWalker.GameFiles new MetaStructureEntryInfo_s((MetaName)3509540765, 44, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0), new MetaStructureEntryInfo_s((MetaName)4196345791, 45, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0) ); - case (MetaName)94549140: - return new MetaStructureInfo((MetaName)94549140, 2029738350, 768, 56, + case MetaName.CPedPropMetaData: + return new MetaStructureInfo(MetaName.CPedPropMetaData, 2029738350, 768, 56, new MetaStructureEntryInfo_s(MetaName.audioId, 0, MetaStructureEntryDataType.Hash, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Float, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.expressionMods, 4, MetaStructureEntryDataType.ArrayOfBytes, 0, 1, (MetaName)5), @@ -1098,8 +1098,8 @@ namespace CodeWalker.GameFiles new MetaStructureEntryInfo_s(MetaName.props, 0, MetaStructureEntryDataType.Array, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.anchor, 16, MetaStructureEntryDataType.IntEnum, 0, 0, (MetaName)2834549053) ); - case (MetaName)253191135: - return new MetaStructureInfo((MetaName)253191135, 3120284999, 512, 48, + case MetaName.CPedSelectionSet: + return new MetaStructureInfo(MetaName.CPedSelectionSet, 3120284999, 512, 48, new MetaStructureEntryInfo_s(MetaName.name, 0, MetaStructureEntryDataType.Hash, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0), new MetaStructureEntryInfo_s((MetaName)173599222, 4, MetaStructureEntryDataType.ArrayOfBytes, 0, 1, MetaName.PsoPOINTER), @@ -2234,7 +2234,7 @@ namespace CodeWalker.GameFiles PV_COMP_MAX = 2048,//12, } - public enum Unk_4212977111 //component peds Unk_94549140 renderFlags + public enum Unk_4212977111 //component peds CPedPropMetaData renderFlags : int //Key:1551913633 { Unk_3757767268 = 0, @@ -5808,7 +5808,7 @@ namespace CodeWalker.GameFiles } } - [TC(typeof(EXP))] public struct Unk_1980345114 //216 bytes, Key:4110496011 //destruction animations? + [TC(typeof(EXP))] public struct CCompEntityAnims //216 bytes, Key:4110496011 //destruction animations? { public ArrayOfChars64 AnimDict { get; set; } //0 0: ArrayOfChars: 64: AnimDict public ArrayOfChars64 AnimName { get; set; } //64 64: ArrayOfChars: 64: AnimName @@ -5818,7 +5818,7 @@ namespace CodeWalker.GameFiles public Array_Structure effectsData { get; set; } //200 200: Array: 0: effectsData {0: Structure: 3430328684: 256} } - [TC(typeof(EXP))] public struct Unk_3430328684 //160 bytes, Key:1724963966 //destruction animation effects data + [TC(typeof(EXP))] public struct CCompEntityEffectsData //160 bytes, Key:1724963966 //destruction animation effects data { public uint fxType { get; set; } //0 0: UnsignedInt: 0: fxType public uint Unused0 { get; set; }//4 @@ -5968,7 +5968,7 @@ namespace CodeWalker.GameFiles - public struct Unk_376833625 //112 bytes, Key:4030871161 //COMPONENT PEDS YMT ROOT - in componentpeds .rpf's + public struct CPedVariationInfo //112 bytes, Key:4030871161 //COMPONENT PEDS YMT ROOT - in componentpeds .rpf's { public byte Unk_1235281004 { get; set; } //0 0: Boolean: 0: 1235281004 public byte Unk_4086467184 { get; set; } //1 1: Boolean: 0: 4086467184 @@ -5978,7 +5978,7 @@ namespace CodeWalker.GameFiles public Array_Structure Unk_3796409423 { get; set; } //16 16: Array: 0: 3796409423 {0: Structure: 3538495220: 256} public Array_Structure aSelectionSets { get; set; } //32 32: Array: 0: aSelectionSets {0: Structure: 253191135: 256} public Array_Structure compInfos { get; set; } //48 48: Array: 0: compInfos//592652859 {0: Structure: CComponentInfo//1866571721: 256} - public Unk_2858946626 propInfo { get; set; } //64 64: Structure: 2858946626: propInfo//2240851416 + public CPedPropInfo propInfo { get; set; } //64 64: Structure: 2858946626: propInfo//2240851416 public MetaHash dlcName { get; set; } //104 104: Hash: 0: dlcName public uint Unused0 { get; set; }//108 } @@ -6021,7 +6021,7 @@ namespace CodeWalker.GameFiles public uint Unused6 { get; set; }//20 } - public struct Unk_253191135 //48 bytes, Key:3120284999 //COMPONENT PEDS unknown + public struct CPedSelectionSet //48 bytes, Key:3120284999 //COMPONENT PEDS unknown { public MetaHash name { get; set; } //0 0: Hash: 0: name public ArrayOfBytes12 Unk_173599222 { get; set; } //4 4: ArrayOfBytes: 12: 173599222 @@ -6052,7 +6052,7 @@ namespace CodeWalker.GameFiles public ushort Unused5 { get; set; }//46 } - public struct Unk_2858946626 //40 bytes, Key:1792487819 //COMPONENT PEDS unknown + public struct CPedPropInfo //40 bytes, Key:1792487819 //COMPONENT PEDS unknown { public byte Unk_2598445407 { get; set; } //0 0: UnsignedByte: 0: 2598445407 public byte Unused0 { get; set; }//1 @@ -6062,7 +6062,7 @@ namespace CodeWalker.GameFiles public Array_Structure aAnchors { get; set; } //24 24: Array: 0: aAnchors//162345210 {0: Structure: CAnchorProps//2170383875: 256} } - public struct Unk_94549140 //56 bytes, Key:2029738350 //COMPONENT PEDS unknown + public struct CPedPropMetaData //56 bytes, Key:2029738350 //COMPONENT PEDS unknown { public MetaHash audioId { get; set; } //0 0: Hash: 0: audioId public ArrayOfBytes5 expressionMods { get; set; } //4 4: ArrayOfBytes: 5: expressionMods//942761829 diff --git a/CodeWalker.Core/GameFiles/MetaTypes/PsoBuilder.cs b/CodeWalker.Core/GameFiles/MetaTypes/PsoBuilder.cs index a86b1dc..8f5c449 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/PsoBuilder.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/PsoBuilder.cs @@ -342,7 +342,7 @@ namespace CodeWalker.GameFiles //case (MetaName)3219912345: // return new PsoStructureInfo((MetaName)3219912345, 0, 0, 24, // new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2356519750), - // new PsoStructureEntryInfo((MetaName)4147768898, PsoDataType.Array, 8, 0, 0) + // new PsoStructureEntryInfo(MetaName.Adjustments, PsoDataType.Array, 8, 0, 0) // ); } diff --git a/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs b/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs index bad2d57..8294d76 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs @@ -665,8 +665,8 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.Value, PsoDataType.UInt, 12, 0, 0) ); - case (MetaName)1998252412: //credits.ymt root - return new PsoStructureInfo((MetaName)1998252412, 0, 0, 24, + case MetaName.CCreditArray: //credits.ymt root + return new PsoStructureInfo(MetaName.CCreditArray, 0, 0, 24, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CCreditItem), new PsoStructureEntryInfo(MetaName.CreditItems, PsoDataType.Array, 8, 0, 0) ); @@ -701,7 +701,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.locked, PsoDataType.Bool, 160, 0, 0), new PsoStructureEntryInfo(MetaName.loadCompletely, PsoDataType.Bool, 161, 0, 0), new PsoStructureEntryInfo(MetaName.overlay, PsoDataType.Bool, 162, 0, 0), - new PsoStructureEntryInfo((MetaName)246845325, PsoDataType.Bool, 163, 0, 0), + new PsoStructureEntryInfo(MetaName.patchFile, PsoDataType.Bool, 163, 0, 0), new PsoStructureEntryInfo(MetaName.disabled, PsoDataType.Bool, 164, 0, 0), new PsoStructureEntryInfo(MetaName.persistent, PsoDataType.Bool, 165, 0, 0), new PsoStructureEntryInfo(MetaName.enforceLsnSorting, PsoDataType.Bool, 166, 0, 0), @@ -723,7 +723,7 @@ namespace CodeWalker.GameFiles case (MetaName)1056751197: //mapdatacullboxes.ymt root return new PsoStructureInfo((MetaName)1056751197, 0, 0, 24, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)322201475), - new PsoStructureEntryInfo((MetaName)934859523, PsoDataType.Array, 8, 0, 0) + new PsoStructureEntryInfo(MetaName.entries, PsoDataType.Array, 8, 0, 0) ); case (MetaName)322201475: return new PsoStructureInfo((MetaName)322201475, 0, 0, 80, @@ -731,7 +731,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.aabb, PsoDataType.Structure, 16, 0, MetaName.rage__spdAABB), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UInt, 0, 0, 0), new PsoStructureEntryInfo((MetaName)4022397219, PsoDataType.Array, 48, 0, (MetaName)2), - new PsoStructureEntryInfo((MetaName)1409504843, PsoDataType.Bool, 64, 0, 0) + new PsoStructureEntryInfo(MetaName.bEnabled, PsoDataType.Bool, 64, 0, 0) ); case MetaName.rage__spdAABB: return new PsoStructureInfo(MetaName.rage__spdAABB, 0, 0, 32, @@ -762,7 +762,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.Pedtype, PsoDataType.String, 44, 7, 0), new PsoStructureEntryInfo(MetaName.MovementClipSet, PsoDataType.String, 48, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo((MetaName)3053450155, PsoDataType.Array, 56, 0, (MetaName)9), + new PsoStructureEntryInfo(MetaName.MovementClipSets, PsoDataType.Array, 56, 0, (MetaName)9), new PsoStructureEntryInfo(MetaName.StrafeClipSet, PsoDataType.String, 72, 7, 0), new PsoStructureEntryInfo(MetaName.MovementToStrafeClipSet, PsoDataType.String, 76, 7, 0), new PsoStructureEntryInfo(MetaName.InjuredStrafeClipSet, PsoDataType.String, 80, 7, 0), @@ -833,32 +833,32 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 3, 0), new PsoStructureEntryInfo(MetaName.children, PsoDataType.Array, 24, 0, (MetaName)1) ); - case (MetaName)2688740668: - return new PsoStructureInfo((MetaName)2688740668, 0, 0, 64, + case MetaName.CPlayerSpecialAbilityManager: + return new PsoStructureInfo(MetaName.CPlayerSpecialAbilityManager, 0, 0, 64, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)4125685004), - new PsoStructureEntryInfo((MetaName)1644716366, PsoDataType.Array, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2475436365, PsoDataType.SInt, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3545223222, PsoDataType.SInt, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1846583548, PsoDataType.SInt, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)463466415, PsoDataType.SInt, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)2259012140, PsoDataType.Enum, 40, 0, (MetaName)3057039286), - new PsoStructureEntryInfo((MetaName)3368438810, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)3286738338, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)3161810789, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)2157942304, PsoDataType.Float, 56, 0, 0) + new PsoStructureEntryInfo(MetaName.specialAbilities, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.smallCharge, PsoDataType.SInt, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.mediumCharge, PsoDataType.SInt, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.largeCharge, PsoDataType.SInt, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.continuousCharge, PsoDataType.SInt, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.fadeCurveType, PsoDataType.Enum, 40, 0, (MetaName)3057039286), + new PsoStructureEntryInfo(MetaName.halfSigmoidConstant, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.sigmoidConstant, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.fadeInTime, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.fadeOutTime, PsoDataType.Float, 56, 0, 0) ); case (MetaName)4125685004: return new PsoStructureInfo((MetaName)4125685004, 0, 0, 48, new PsoStructureEntryInfo(MetaName.duration, PsoDataType.SInt, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1709960891, PsoDataType.SInt, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)448101701, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)18336056, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2057680844, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3653186651, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)510925374, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.initialUnlockedCap, PsoDataType.SInt, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.timeWarpScale, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.damageMultiplier, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.defenseMultiplier, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.depletionMultiplier, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.chargeMultiplier, PsoDataType.Float, 32, 0, 0), new PsoStructureEntryInfo(MetaName.fxName, PsoDataType.String, 36, 7, 0), - new PsoStructureEntryInfo((MetaName)3344142251, PsoDataType.String, 40, 7, 0), - new PsoStructureEntryInfo((MetaName)4032486415, PsoDataType.String, 44, 7, 0) + new PsoStructureEntryInfo(MetaName.outFxName, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo(MetaName.activeAnimSet, PsoDataType.String, 44, 7, 0) ); case MetaName.CDataFileMgr__ContentChangeSet: return new PsoStructureInfo(MetaName.CDataFileMgr__ContentChangeSet, 0, 0, 184, @@ -920,8 +920,8 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), new PsoStructureEntryInfo(MetaName.moveNetworkFlags, PsoDataType.Array, 40, 0, (MetaName)5) ); - case (MetaName)3883314999: - return new PsoStructureInfo((MetaName)3883314999, 0, 0, 32, + case MetaName.fwDirectedClipItemWithProps: + return new PsoStructureInfo(MetaName.fwDirectedClipItemWithProps, 0, 0, 32, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)224899699), new PsoStructureEntryInfo(MetaName.flags, PsoDataType.Flags, 8, 0, (MetaName)2097152), new PsoStructureEntryInfo(MetaName.priority, PsoDataType.Enum, 12, 0, (MetaName)1498349301), @@ -938,8 +938,8 @@ namespace CodeWalker.GameFiles case MetaName.fwClipItem: return new PsoStructureInfo(MetaName.fwClipItem, 0, 0, 8 //empty struct... possibly abstract/base class ); - case (MetaName)4285341798: //creature/animal clip set? - return new PsoStructureInfo((MetaName)4285341798, 0, 0, 72, + case MetaName.fwClipSetWithGetup: //creature/animal clip set? + return new PsoStructureInfo(MetaName.fwClipSetWithGetup, 0, 0, 72, new PsoStructureEntryInfo(MetaName.fallbackId, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.clipDictionaryName, PsoDataType.String, 12, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), @@ -967,11 +967,11 @@ namespace CodeWalker.GameFiles case (MetaName)3219912345://clip sets memory group modifier? return new PsoStructureInfo((MetaName)3219912345, 0, 0, 24, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2356519750), - new PsoStructureEntryInfo((MetaName)4147768898, PsoDataType.Array, 8, 0, 0) + new PsoStructureEntryInfo(MetaName.Adjustments, PsoDataType.Array, 8, 0, 0) ); case (MetaName)2356519750: //clip sets memory group modifier adjustment return new PsoStructureInfo((MetaName)2356519750, 0, 0, 16, - new PsoStructureEntryInfo((MetaName)4286534285, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.MemoryGroup, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.Amount, PsoDataType.SInt, 12, 0, 0) ); case (MetaName)1005381910: //clip sets move network flags list/group? @@ -994,67 +994,67 @@ namespace CodeWalker.GameFiles // new PsoStructureEntryInfo(MetaName.Key, PsoDataType.String, 0, 7, 0), // new PsoStructureEntryInfo(MetaName.Item, PsoDataType.Structure, 8, 0, (MetaName)3219912345) // ); - case (MetaName)4209092714: - return new PsoStructureInfo((MetaName)4209092714, 0, 0, 24, + case MetaName.AnimPostFXManager: + return new PsoStructureInfo(MetaName.AnimPostFXManager, 0, 0, 24, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2319197961), - new PsoStructureEntryInfo((MetaName)3283104082, PsoDataType.Array, 8, 0, 0) + new PsoStructureEntryInfo(MetaName.RegisteredStacks, PsoDataType.Array, 8, 0, 0) ); case (MetaName)2319197961: return new PsoStructureInfo((MetaName)2319197961, 0, 0, 384, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1829495763, PsoDataType.Structure, 16, 0, (MetaName)2675557154), + new PsoStructureEntryInfo(MetaName.FXStack, PsoDataType.Structure, 16, 0, (MetaName)2675557154), new PsoStructureEntryInfo(MetaName.Priority, PsoDataType.UByte, 376, 0, 0) ); case (MetaName)2675557154: return new PsoStructureInfo((MetaName)2675557154, 0, 0, 360, - new PsoStructureEntryInfo((MetaName)3968024215, PsoDataType.Structure, 8, 0, (MetaName)2367955297), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3205113395), - new PsoStructureEntryInfo((MetaName)4018703742, PsoDataType.Array, 48, 1, (MetaName)393217), - new PsoStructureEntryInfo((MetaName)1405734818, PsoDataType.SInt, 344, 0, 0), + new PsoStructureEntryInfo(MetaName.LayerBlend, PsoDataType.Structure, 8, 0, (MetaName)2367955297), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.AnimatedPostFX), + new PsoStructureEntryInfo(MetaName.Layers, PsoDataType.Array, 48, 1, (MetaName)393217), + new PsoStructureEntryInfo(MetaName.GroupId, PsoDataType.SInt, 344, 0, 0), new PsoStructureEntryInfo((MetaName)1991133938, PsoDataType.UInt, 348, 0, 0), new PsoStructureEntryInfo((MetaName)4185090704, PsoDataType.UInt, 352, 0, 0), new PsoStructureEntryInfo(MetaName.EventType, PsoDataType.Enum, 356, 0, (MetaName)2168155209) ); case (MetaName)2367955297: return new PsoStructureInfo((MetaName)2367955297, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)3994552921, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3761008258, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo(MetaName.LayerA, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.LayerB, PsoDataType.String, 12, 7, 0), new PsoStructureEntryInfo(MetaName.Disabled, PsoDataType.Bool, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1511368071, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)312484959, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2554379728, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.FrequencyNoise, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.AmplitudeNoise, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.Frequency, PsoDataType.Float, 28, 0, 0), new PsoStructureEntryInfo(MetaName.Bias, PsoDataType.Float, 32, 0, 0) ); - case (MetaName)3205113395: - return new PsoStructureInfo((MetaName)3205113395, 0, 0, 48, - new PsoStructureEntryInfo((MetaName)2966939369, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1881596949, PsoDataType.Enum, 12, 0, (MetaName)2476021071), - new PsoStructureEntryInfo((MetaName)966603625, PsoDataType.UInt, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2456685333, PsoDataType.UInt, 20, 0, 0), + case MetaName.AnimatedPostFX: + return new PsoStructureInfo(MetaName.AnimatedPostFX, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.ModifierName, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.AnimMode, PsoDataType.Enum, 12, 0, (MetaName)2476021071), + new PsoStructureEntryInfo(MetaName.StartDelayDuration, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.InDuration, PsoDataType.UInt, 20, 0, 0), new PsoStructureEntryInfo(MetaName.HoldDuration, PsoDataType.UInt, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3592760554, PsoDataType.UInt, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.OutDuration, PsoDataType.UInt, 28, 0, 0), new PsoStructureEntryInfo(MetaName.Disabled, PsoDataType.Bool, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)3135858693, PsoDataType.Enum, 36, 0, (MetaName)3696221852), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 40, 0, 0) + new PsoStructureEntryInfo(MetaName.LoopMode, PsoDataType.Enum, 36, 0, (MetaName)3696221852), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 40, 0, 0) ); case (MetaName)1300198536: return new PsoStructureInfo((MetaName)1300198536, 0, 0, 24, - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)661891977), - new PsoStructureEntryInfo((MetaName)197915343, PsoDataType.Array, 8, 0, 0) + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.LensArtefact), + new PsoStructureEntryInfo(MetaName.layers, PsoDataType.Array, 8, 0, 0) ); - case (MetaName)661891977: - return new PsoStructureInfo((MetaName)661891977, 0, 0, 64, + case MetaName.LensArtefact: + return new PsoStructureInfo(MetaName.LensArtefact, 0, 0, 64, new PsoStructureEntryInfo(MetaName.name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2749488155, PsoDataType.Enum, 12, 0, (MetaName)3261591327), + new PsoStructureEntryInfo(MetaName.blurType, PsoDataType.Enum, 12, 0, (MetaName)3261591327), new PsoStructureEntryInfo(MetaName.scale, PsoDataType.Float2, 16, 0, 0), new PsoStructureEntryInfo(MetaName.offset, PsoDataType.Float2, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)4254456164, PsoDataType.UInt, 32, 1, 0), + new PsoStructureEntryInfo(MetaName.colorShift, PsoDataType.UInt, 32, 1, 0), new PsoStructureEntryInfo(MetaName.opacity, PsoDataType.Float, 36, 0, 0), new PsoStructureEntryInfo((MetaName)2600565536, PsoDataType.Enum, 40, 0, (MetaName)516897642), new PsoStructureEntryInfo((MetaName)1250212400, PsoDataType.Float2, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)2002769312, PsoDataType.Enum, 52, 0, (MetaName)2665868448), + new PsoStructureEntryInfo(MetaName.streakDirection, PsoDataType.Enum, 52, 0, (MetaName)2665868448), new PsoStructureEntryInfo(MetaName.enabled, PsoDataType.Bool, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)2685533834, PsoDataType.SInt, 60, 0, 0) + new PsoStructureEntryInfo(MetaName.sortIndex, PsoDataType.SInt, 60, 0, 0) ); case MetaName.CPtFxAssetInfoMgr: return new PsoStructureInfo(MetaName.CPtFxAssetInfoMgr, 0, 0, 24, @@ -1078,17 +1078,17 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.position, PsoDataType.Float3, 16, 0, 0), new PsoStructureEntryInfo(MetaName.rotation, PsoDataType.Float3, 32, 0, 0), new PsoStructureEntryInfo(MetaName.scale, PsoDataType.Float3, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)960927728, PsoDataType.UByte, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)2816570672, PsoDataType.UByte, 65, 0, 0), - new PsoStructureEntryInfo((MetaName)193412222, PsoDataType.UByte, 66, 0, 0), - new PsoStructureEntryInfo((MetaName)4130410962, PsoDataType.UByte, 67, 0, 0), - new PsoStructureEntryInfo((MetaName)271126249, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.colR, PsoDataType.UByte, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.colG, PsoDataType.UByte, 65, 0, 0), + new PsoStructureEntryInfo(MetaName.colB, PsoDataType.UByte, 66, 0, 0), + new PsoStructureEntryInfo(MetaName.colA, PsoDataType.UByte, 67, 0, 0), + new PsoStructureEntryInfo(MetaName.hdrMult, PsoDataType.Float, 68, 0, 0), new PsoStructureEntryInfo(MetaName.range, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)3843932311, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.density, PsoDataType.Float, 76, 0, 0), new PsoStructureEntryInfo(MetaName.falloff, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)595627342, PsoDataType.Long, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)2320897552, PsoDataType.Bool, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)2671568709, PsoDataType.Enum, 100, 0, (MetaName)2628996780) + new PsoStructureEntryInfo(MetaName.interiorHash, PsoDataType.Long, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.isUnderwater, PsoDataType.Bool, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.lightingType, PsoDataType.Enum, 100, 0, (MetaName)2628996780) ); case MetaName.CVfxInteriorInfoMgr: return new PsoStructureInfo(MetaName.CVfxInteriorInfoMgr, 0, 0, 56, @@ -1169,15 +1169,15 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)1193506380, PsoDataType.SInt, 68, 0, 0), new PsoStructureEntryInfo((MetaName)1561972343, PsoDataType.SInt, 72, 0, 0), new PsoStructureEntryInfo((MetaName)2527519128, PsoDataType.SInt, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)2398011309, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)1229088392, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.decalWidth, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.decalLength, PsoDataType.Float, 84, 0, 0), new PsoStructureEntryInfo((MetaName)1369041264, PsoDataType.UByte, 88, 0, 0), new PsoStructureEntryInfo((MetaName)1201263928, PsoDataType.UByte, 89, 0, 0), new PsoStructureEntryInfo((MetaName)1596752989, PsoDataType.UByte, 90, 0, 0), new PsoStructureEntryInfo((MetaName)2768457985, PsoDataType.UByte, 91, 0, 0), new PsoStructureEntryInfo((MetaName)1822646338, PsoDataType.UByte, 92, 0, 0), new PsoStructureEntryInfo((MetaName)2318441304, PsoDataType.UByte, 93, 0, 0), - new PsoStructureEntryInfo((MetaName)96058849, PsoDataType.Float, 96, 0, 0) + new PsoStructureEntryInfo(MetaName.decalLife, PsoDataType.Float, 96, 0, 0) ); case (MetaName)1299390333: return new PsoStructureInfo((MetaName)1299390333, 0, 0, 24, @@ -1193,7 +1193,7 @@ namespace CodeWalker.GameFiles ); case (MetaName)1811001251: return new PsoStructureInfo((MetaName)1811001251, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)2371851021, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.decalId, PsoDataType.SInt, 8, 0, 0), new PsoStructureEntryInfo((MetaName)3806811108, PsoDataType.SInt, 12, 0, 0), new PsoStructureEntryInfo((MetaName)3913505542, PsoDataType.SInt, 16, 0, 0), new PsoStructureEntryInfo((MetaName)3041920342, PsoDataType.Float, 20, 0, 0), @@ -1205,8 +1205,8 @@ namespace CodeWalker.GameFiles case (MetaName)1559486096: return new PsoStructureInfo((MetaName)1559486096, 0, 0, 32, new PsoStructureEntryInfo(MetaName.ptFxName, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1171785422, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)3186421174, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ptFxDepthEvoMin, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.ptFxDepthEvoMax, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo(MetaName.ptFxSpeedEvoMin, PsoDataType.Float, 20, 0, 0), new PsoStructureEntryInfo(MetaName.ptFxSpeedEvoMax, PsoDataType.Float, 24, 0, 0) ); @@ -1217,15 +1217,15 @@ namespace CodeWalker.GameFiles ); case (MetaName)1073939452: return new PsoStructureInfo((MetaName)1073939452, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)1814735825, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1469744358, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)1478381657, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2261099445, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.sizeEvo, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.depthMult, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.speedMult, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.widthRatio, PsoDataType.Float, 20, 0, 0) ); case (MetaName)2217981082: return new PsoStructureInfo((MetaName)2217981082, 0, 0, 48, - new PsoStructureEntryInfo((MetaName)1245538595, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)60123590, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.sampleSize, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.boneSize, PsoDataType.Float, 12, 0, 0), new PsoStructureEntryInfo((MetaName)2990477260, PsoDataType.Bool, 16, 0, 0), new PsoStructureEntryInfo(MetaName.splashInPtFxEnabled, PsoDataType.Bool, 17, 0, 0), new PsoStructureEntryInfo(MetaName.splashOutPtFxEnabled, PsoDataType.Bool, 18, 0, 0), @@ -1361,7 +1361,7 @@ namespace CodeWalker.GameFiles ); case (MetaName)231867887: return new PsoStructureInfo((MetaName)231867887, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)222345803, PsoDataType.Enum, 8, 0, (MetaName)679492), + new PsoStructureEntryInfo(MetaName.vfxGroup, PsoDataType.Enum, 8, 0, (MetaName)679492), new PsoStructureEntryInfo((MetaName)3557178741, PsoDataType.String, 12, 7, 0), new PsoStructureEntryInfo((MetaName)3535009775, PsoDataType.String, 16, 7, 0) ); @@ -1369,7 +1369,7 @@ namespace CodeWalker.GameFiles return new PsoStructureInfo((MetaName)1904273735, 0, 0, 32, new PsoStructureEntryInfo((MetaName)2366957880, PsoDataType.Enum, 8, 0, (MetaName)2363471356), new PsoStructureEntryInfo((MetaName)1407284946, PsoDataType.Enum, 12, 0, (MetaName)2363471356), - new PsoStructureEntryInfo((MetaName)970730558, PsoDataType.Enum, 16, 0, (MetaName)726948528), + new PsoStructureEntryInfo(MetaName.limbId, PsoDataType.Enum, 16, 0, (MetaName)726948528), new PsoStructureEntryInfo((MetaName)1061041502, PsoDataType.String, 20, 7, 0), new PsoStructureEntryInfo((MetaName)2989606868, PsoDataType.String, 24, 7, 0) ); @@ -1378,7 +1378,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.ptFxName, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo((MetaName)2366957880, PsoDataType.Enum, 12, 0, (MetaName)2363471356), new PsoStructureEntryInfo((MetaName)1407284946, PsoDataType.Enum, 16, 0, (MetaName)2363471356), - new PsoStructureEntryInfo((MetaName)970730558, PsoDataType.SInt, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.limbId, PsoDataType.SInt, 20, 0, 0) ); case (MetaName)3663974917: return new PsoStructureInfo((MetaName)3663974917, 0, 0, 24, @@ -1394,8 +1394,8 @@ namespace CodeWalker.GameFiles ); case MetaName.CVfxRegionInfo: return new PsoStructureInfo(MetaName.CVfxRegionInfo, 0, 0, 64, - new PsoStructureEntryInfo((MetaName)3909318761, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1353578052, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo(MetaName.windDebrisPtFxEnabled, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.windDebrisPtFxName, PsoDataType.String, 12, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)215011533), new PsoStructureEntryInfo((MetaName)157134441, PsoDataType.Array, 16, 0, (MetaName)2), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)215011533), @@ -1405,7 +1405,7 @@ namespace CodeWalker.GameFiles ); case (MetaName)215011533: return new PsoStructureInfo((MetaName)215011533, 0, 0, 48, - new PsoStructureEntryInfo((MetaName)4158673537, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.gpuPtFxEnabled, PsoDataType.Bool, 8, 0, 0), new PsoStructureEntryInfo((MetaName)28713766, PsoDataType.String, 12, 7, 0), new PsoStructureEntryInfo((MetaName)3099312282, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo((MetaName)3614737265, PsoDataType.Float, 20, 0, 0), @@ -1517,18 +1517,18 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.boatEntryPtFxSpeedEvoMin, PsoDataType.Float, 400, 0, 0), new PsoStructureEntryInfo(MetaName.boatEntryPtFxSpeedEvoMax, PsoDataType.Float, 404, 0, 0), new PsoStructureEntryInfo(MetaName.boatEntryPtFxScale, PsoDataType.Float, 408, 0, 0), - new PsoStructureEntryInfo((MetaName)913361740, PsoDataType.Bool, 412, 0, 0), - new PsoStructureEntryInfo((MetaName)3427519025, PsoDataType.Float, 416, 0, 0), - new PsoStructureEntryInfo((MetaName)276219657, PsoDataType.String, 420, 7, 0), - new PsoStructureEntryInfo((MetaName)501212370, PsoDataType.Float, 424, 0, 0), - new PsoStructureEntryInfo((MetaName)669705932, PsoDataType.Float, 428, 0, 0), - new PsoStructureEntryInfo((MetaName)2913951911, PsoDataType.Float, 432, 0, 0), + new PsoStructureEntryInfo(MetaName.boatExitPtFxEnabled, PsoDataType.Bool, 412, 0, 0), + new PsoStructureEntryInfo(MetaName.boatExitPtFxRange, PsoDataType.Float, 416, 0, 0), + new PsoStructureEntryInfo(MetaName.boatExitPtFxName, PsoDataType.String, 420, 7, 0), + new PsoStructureEntryInfo(MetaName.boatExitPtFxSpeedEvoMin, PsoDataType.Float, 424, 0, 0), + new PsoStructureEntryInfo(MetaName.boatExitPtFxSpeedEvoMax, PsoDataType.Float, 428, 0, 0), + new PsoStructureEntryInfo(MetaName.boatExitPtFxScale, PsoDataType.Float, 432, 0, 0), new PsoStructureEntryInfo(MetaName.boatBowPtFxEnabled, PsoDataType.Bool, 436, 0, 0), new PsoStructureEntryInfo(MetaName.boatBowPtFxRange, PsoDataType.Float, 440, 0, 0), new PsoStructureEntryInfo(MetaName.boatBowPtFxForwardName, PsoDataType.String, 444, 7, 0), new PsoStructureEntryInfo(MetaName.boatBowPtFxReverseName, PsoDataType.String, 448, 7, 0), - new PsoStructureEntryInfo((MetaName)2402780585, PsoDataType.String, 452, 7, 0), - new PsoStructureEntryInfo((MetaName)1426207057, PsoDataType.Float3, 464, 0, 0), + new PsoStructureEntryInfo(MetaName.boatBowPtFxForwardMountedName, PsoDataType.String, 452, 7, 0), + new PsoStructureEntryInfo(MetaName.boatBowPtFxForwardMountedOffset, PsoDataType.Float3, 464, 0, 0), new PsoStructureEntryInfo(MetaName.boatBowPtFxSpeedEvoMin, PsoDataType.Float, 480, 0, 0), new PsoStructureEntryInfo(MetaName.boatBowPtFxSpeedEvoMax, PsoDataType.Float, 484, 0, 0), new PsoStructureEntryInfo(MetaName.boatBowPtFxKeelEvoMin, PsoDataType.Float, 488, 0, 0), @@ -1643,7 +1643,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)294307720, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.probability, PsoDataType.Float, 12, 0, 0), new PsoStructureEntryInfo(MetaName.scale, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)690075466, PsoDataType.UInt, 20, 1, 0) + new PsoStructureEntryInfo(MetaName.colTint, PsoDataType.UInt, 20, 1, 0) ); case (MetaName)1794703310: return new PsoStructureInfo((MetaName)1794703310, 0, 0, 24, @@ -1656,7 +1656,7 @@ namespace CodeWalker.GameFiles return new PsoStructureInfo(MetaName.CProceduralInfo, 0, 0, 4120, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2143317860), new PsoStructureEntryInfo(MetaName.procObjInfos, PsoDataType.Array, 8, 0, 0), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1982133670), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CPlantInfo), new PsoStructureEntryInfo(MetaName.plantInfos, PsoDataType.Array, 24, 0, (MetaName)2), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3343541253), new PsoStructureEntryInfo(MetaName.procTagTable, PsoDataType.Array, 40, 4, (MetaName)16711684) @@ -1691,8 +1691,8 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)956281369), new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.Flags, 52, 2, (MetaName)524308) ); - case (MetaName)1982133670: - return new PsoStructureInfo((MetaName)1982133670, 0, 0, 56, + case MetaName.CPlantInfo: + return new PsoStructureInfo(MetaName.CPlantInfo, 0, 0, 56, new PsoStructureEntryInfo(MetaName.Tag, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.Color, PsoDataType.UInt, 12, 1, 0), new PsoStructureEntryInfo(MetaName.GroundColor, PsoDataType.UInt, 16, 1, 0), @@ -1721,9 +1721,9 @@ namespace CodeWalker.GameFiles case MetaName.camMetadataStore: return new PsoStructureInfo(MetaName.camMetadataStore, 0, 0, 40, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), - new PsoStructureEntryInfo((MetaName)4098657407, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MetadataList, PsoDataType.Array, 8, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), - new PsoStructureEntryInfo((MetaName)1163993726, PsoDataType.Array, 24, 0, (MetaName)2) + new PsoStructureEntryInfo(MetaName.DirectorList, PsoDataType.Array, 24, 0, (MetaName)2) ); case MetaName.camDepthOfFieldSettingsMetadata: return new PsoStructureInfo(MetaName.camDepthOfFieldSettingsMetadata, 0, 0, 96, @@ -1752,24 +1752,24 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicAnimatedCameraMetadata: return new PsoStructureInfo(MetaName.camCinematicAnimatedCameraMetadata, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0) + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0) ); case MetaName.camCinematicCameraManCameraMetadata: return new PsoStructureInfo(MetaName.camCinematicCameraManCameraMetadata, 0, 0, 328, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo((MetaName)2962759393, PsoDataType.Float, 32, 0, 0), new PsoStructureEntryInfo((MetaName)3005507009, PsoDataType.Float, 36, 0, 0), new PsoStructureEntryInfo((MetaName)114561573, PsoDataType.Bool, 40, 0, 0), new PsoStructureEntryInfo((MetaName)1535052963, PsoDataType.Float, 44, 0, 0), new PsoStructureEntryInfo(MetaName.CollisionRadius, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2642729834, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.RadiusScalingForClippingTest, PsoDataType.Float, 52, 0, 0), new PsoStructureEntryInfo((MetaName)3023548272, PsoDataType.Float, 56, 0, 0), new PsoStructureEntryInfo((MetaName)846082931, PsoDataType.Float, 60, 0, 0), new PsoStructureEntryInfo((MetaName)3539146194, PsoDataType.UInt, 64, 0, 0), @@ -1780,17 +1780,17 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)3190591149, PsoDataType.UInt, 84, 0, 0), new PsoStructureEntryInfo((MetaName)2884448793, PsoDataType.UInt, 88, 0, 0), new PsoStructureEntryInfo((MetaName)69722150, PsoDataType.Bool, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)2723670760, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)1702320721, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.ScanRadius, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.ScanDistance, PsoDataType.Float, 100, 0, 0), new PsoStructureEntryInfo((MetaName)199666231, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)556138114, PsoDataType.String, 108, 7, 0), - new PsoStructureEntryInfo((MetaName)2538678656, PsoDataType.String, 112, 7, 0), + new PsoStructureEntryInfo(MetaName.InVehicleLookAtDampingRef, PsoDataType.String, 108, 7, 0), + new PsoStructureEntryInfo(MetaName.OnFootLookAtDampingRef, PsoDataType.String, 112, 7, 0), new PsoStructureEntryInfo((MetaName)4200791860, PsoDataType.String, 116, 7, 0), new PsoStructureEntryInfo((MetaName)3308026067, PsoDataType.String, 120, 7, 0), new PsoStructureEntryInfo((MetaName)1279708504, PsoDataType.Structure, 128, 0, MetaName.camCinematicCameraOperatorShakeSettings), - new PsoStructureEntryInfo((MetaName)102161666, PsoDataType.Float, 256, 0, 0), - new PsoStructureEntryInfo((MetaName)753638141, PsoDataType.Float, 260, 0, 0), - new PsoStructureEntryInfo((MetaName)851393034, PsoDataType.Float, 264, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForWaterClippingTest, PsoDataType.Float, 256, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForRiverWaterClippingTest, PsoDataType.Float, 260, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHeightAboveWater, PsoDataType.Float, 264, 0, 0), new PsoStructureEntryInfo((MetaName)1035890821, PsoDataType.Float, 268, 0, 0), new PsoStructureEntryInfo((MetaName)3518053347, PsoDataType.Bool, 272, 0, 0), new PsoStructureEntryInfo((MetaName)568093394, PsoDataType.Float, 276, 0, 0), @@ -1809,8 +1809,8 @@ namespace CodeWalker.GameFiles ); case MetaName.camCinematicCameraOperatorShakeSettings: return new PsoStructureInfo(MetaName.camCinematicCameraOperatorShakeSettings, 0, 0, 128, - new PsoStructureEntryInfo((MetaName)71599683, PsoDataType.Structure, 8, 0, MetaName.camCinematicCameraOperatorShakeUncertaintySettings), - new PsoStructureEntryInfo((MetaName)668098498, PsoDataType.Structure, 88, 0, MetaName.camCinematicCameraOperatorShakeTurbulenceSettings) + new PsoStructureEntryInfo(MetaName.UncertaintySettings, PsoDataType.Structure, 8, 0, MetaName.camCinematicCameraOperatorShakeUncertaintySettings), + new PsoStructureEntryInfo(MetaName.TurbulenceSettings, PsoDataType.Structure, 88, 0, MetaName.camCinematicCameraOperatorShakeTurbulenceSettings) ); case MetaName.camCinematicCameraOperatorShakeUncertaintySettings: return new PsoStructureInfo(MetaName.camCinematicCameraOperatorShakeUncertaintySettings, 0, 0, 80, @@ -1822,29 +1822,29 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)3850080675, PsoDataType.Float2, 40, 0, 0), new PsoStructureEntryInfo((MetaName)2902509544, PsoDataType.Float, 48, 0, 0), new PsoStructureEntryInfo((MetaName)3004590170, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)4050830448, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringDampingRatio, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.ScalingFactor, PsoDataType.Float, 60, 0, 0), new PsoStructureEntryInfo((MetaName)2280675285, PsoDataType.Float, 64, 0, 0), new PsoStructureEntryInfo((MetaName)933422390, PsoDataType.Float, 68, 0, 0), new PsoStructureEntryInfo((MetaName)3253772488, PsoDataType.Float, 72, 0, 0) ); case MetaName.camCinematicCameraOperatorShakeTurbulenceSettings: return new PsoStructureInfo(MetaName.camCinematicCameraOperatorShakeTurbulenceSettings, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo((MetaName)1741343660, PsoDataType.Float2, 12, 0, 0), new PsoStructureEntryInfo(MetaName.DistanceRange, PsoDataType.Float2, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2902509544, PsoDataType.Float, 28, 0, 0), new PsoStructureEntryInfo((MetaName)3004590170, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 36, 0, 0) + new PsoStructureEntryInfo(MetaName.SpringDampingRatio, PsoDataType.Float, 36, 0, 0) ); case MetaName.camCinematicHeliChaseCameraMetadata: return new PsoStructureInfo(MetaName.camCinematicHeliChaseCameraMetadata, 0, 0, 392, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3115459373, PsoDataType.UInt, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDuration, PsoDataType.UInt, 32, 0, 0), new PsoStructureEntryInfo((MetaName)3800346187, PsoDataType.UInt, 36, 0, 0), new PsoStructureEntryInfo((MetaName)2004927681, PsoDataType.UInt, 40, 0, 0), new PsoStructureEntryInfo((MetaName)408757490, PsoDataType.UInt, 44, 0, 0), @@ -1877,7 +1877,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)2289962831, PsoDataType.Float, 152, 0, 0), new PsoStructureEntryInfo((MetaName)3658577234, PsoDataType.Float, 156, 0, 0), new PsoStructureEntryInfo((MetaName)3483998043, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)1325746994, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo(MetaName.NearClip, PsoDataType.Float, 164, 0, 0), new PsoStructureEntryInfo((MetaName)2217923367, PsoDataType.Bool, 168, 0, 0), new PsoStructureEntryInfo((MetaName)114561573, PsoDataType.Bool, 169, 0, 0), new PsoStructureEntryInfo((MetaName)2187445607, PsoDataType.Bool, 170, 0, 0), @@ -1885,8 +1885,8 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)4185802977, PsoDataType.Float, 172, 0, 0), new PsoStructureEntryInfo((MetaName)315713489, PsoDataType.Bool, 176, 0, 0), new PsoStructureEntryInfo(MetaName.PitchLimits, PsoDataType.Float2, 180, 0, 0), - new PsoStructureEntryInfo((MetaName)556138114, PsoDataType.String, 188, 7, 0), - new PsoStructureEntryInfo((MetaName)2538678656, PsoDataType.String, 192, 7, 0), + new PsoStructureEntryInfo(MetaName.InVehicleLookAtDampingRef, PsoDataType.String, 188, 7, 0), + new PsoStructureEntryInfo(MetaName.OnFootLookAtDampingRef, PsoDataType.String, 192, 7, 0), new PsoStructureEntryInfo((MetaName)4200791860, PsoDataType.String, 196, 7, 0), new PsoStructureEntryInfo((MetaName)3308026067, PsoDataType.String, 200, 7, 0), new PsoStructureEntryInfo((MetaName)1279708504, PsoDataType.Structure, 208, 0, MetaName.camCinematicCameraOperatorShakeSettings), @@ -1908,67 +1908,67 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicVehicleOrbitCameraMetadata: return new PsoStructureInfo(MetaName.camCinematicVehicleOrbitCameraMetadata, 0, 0, 136, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 32, 0, 0), new PsoStructureEntryInfo(MetaName.PitchLimits, PsoDataType.Float2, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)4288186671, PsoDataType.Float2, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.FovLimits, PsoDataType.Float2, 48, 0, 0), new PsoStructureEntryInfo((MetaName)315073442, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)737052146, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.AngleDelta, PsoDataType.Float, 60, 0, 0), new PsoStructureEntryInfo((MetaName)559738595, PsoDataType.Float, 64, 0, 0), new PsoStructureEntryInfo(MetaName.CollisionRadius, PsoDataType.Float, 68, 0, 0), new PsoStructureEntryInfo((MetaName)3983210518, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)2763528752, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)2642729834, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.RadiusScalingForOcclusionTest, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.RadiusScalingForClippingTest, PsoDataType.Float, 80, 0, 0), new PsoStructureEntryInfo((MetaName)2153696126, PsoDataType.Float, 84, 0, 0), new PsoStructureEntryInfo((MetaName)765619120, PsoDataType.Float, 88, 0, 0), new PsoStructureEntryInfo((MetaName)3644129030, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)2101619543, PsoDataType.UInt, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeToSpendOccluded, PsoDataType.UInt, 96, 0, 0), new PsoStructureEntryInfo((MetaName)3991802629, PsoDataType.UInt, 100, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicVehicleOrbitCameraInitalSettings), new PsoStructureEntryInfo((MetaName)1539141183, PsoDataType.Array, 104, 0, (MetaName)20), - new PsoStructureEntryInfo((MetaName)102161666, PsoDataType.Float, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)753638141, PsoDataType.Float, 124, 0, 0), - new PsoStructureEntryInfo((MetaName)851393034, PsoDataType.Float, 128, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxDistanceForWaterClippingTest, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForRiverWaterClippingTest, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHeightAboveWater, PsoDataType.Float, 128, 0, 0) ); case MetaName.camCinematicVehicleOrbitCameraInitalSettings: return new PsoStructureInfo(MetaName.camCinematicVehicleOrbitCameraInitalSettings, 0, 0, 16, new PsoStructureEntryInfo(MetaName.Heading, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2891994847, PsoDataType.Float, 12, 0, 0) + new PsoStructureEntryInfo(MetaName.HeadingDelta, PsoDataType.Float, 12, 0, 0) ); case MetaName.camCinematicVehicleLowOrbitCameraMetadata: return new PsoStructureInfo(MetaName.camCinematicVehicleLowOrbitCameraMetadata, 0, 0, 256, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 32, 0, 0), new PsoStructureEntryInfo(MetaName.PitchLimits, PsoDataType.Float2, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)4288186671, PsoDataType.Float2, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.FovLimits, PsoDataType.Float2, 48, 0, 0), new PsoStructureEntryInfo((MetaName)315073442, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)737052146, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.AngleDelta, PsoDataType.Float, 60, 0, 0), new PsoStructureEntryInfo((MetaName)2037218535, PsoDataType.Float, 64, 0, 0), new PsoStructureEntryInfo((MetaName)4219845621, PsoDataType.Float, 68, 0, 0), new PsoStructureEntryInfo((MetaName)1088437692, PsoDataType.Float, 72, 0, 0), new PsoStructureEntryInfo(MetaName.CollisionRadius, PsoDataType.Float, 76, 0, 0), new PsoStructureEntryInfo((MetaName)3983210518, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)2763528752, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)2642729834, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.RadiusScalingForOcclusionTest, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.RadiusScalingForClippingTest, PsoDataType.Float, 88, 0, 0), new PsoStructureEntryInfo((MetaName)565251953, PsoDataType.Float, 92, 0, 0), new PsoStructureEntryInfo((MetaName)2153696126, PsoDataType.Float, 96, 0, 0), new PsoStructureEntryInfo((MetaName)765619120, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)2101619543, PsoDataType.UInt, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeToSpendOccluded, PsoDataType.UInt, 104, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicVehicleOrbitCameraInitalSettings), new PsoStructureEntryInfo((MetaName)1539141183, PsoDataType.Array, 112, 0, MetaName.UINT), - new PsoStructureEntryInfo((MetaName)102161666, PsoDataType.Float, 128, 0, 0), - new PsoStructureEntryInfo((MetaName)753638141, PsoDataType.Float, 132, 0, 0), - new PsoStructureEntryInfo((MetaName)851393034, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForWaterClippingTest, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForRiverWaterClippingTest, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHeightAboveWater, PsoDataType.Float, 136, 0, 0), new PsoStructureEntryInfo((MetaName)1958709726, PsoDataType.Float, 140, 0, 0), - new PsoStructureEntryInfo((MetaName)4261179401, PsoDataType.Float, 144, 0, 0), - new PsoStructureEntryInfo((MetaName)1361361101, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPitch, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRoll, PsoDataType.Float, 148, 0, 0), new PsoStructureEntryInfo((MetaName)2815616753, PsoDataType.Float, 152, 0, 0), new PsoStructureEntryInfo((MetaName)2843406703, PsoDataType.Float, 156, 0, 0), new PsoStructureEntryInfo((MetaName)4109249654, PsoDataType.Float, 160, 0, 0), @@ -1980,51 +1980,51 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)2223609026, PsoDataType.Float, 184, 0, 0), new PsoStructureEntryInfo((MetaName)752307799, PsoDataType.Float, 188, 0, 0), new PsoStructureEntryInfo((MetaName)1612512934, PsoDataType.Structure, 192, 0, MetaName.camSpeedRelativeShakeSettingsMetadata), - new PsoStructureEntryInfo((MetaName)3319637384, PsoDataType.Structure, 224, 0, MetaName.camSpeedRelativeShakeSettingsMetadata) + new PsoStructureEntryInfo(MetaName.HighSpeedShakeSettings, PsoDataType.Structure, 224, 0, MetaName.camSpeedRelativeShakeSettingsMetadata) ); case MetaName.camSpeedRelativeShakeSettingsMetadata: return new PsoStructureInfo(MetaName.camSpeedRelativeShakeSettingsMetadata, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2742393958, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)2306378250, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.MinForwardSpeed, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxForwardSpeed, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringConstant, PsoDataType.Float, 20, 0, 0), new PsoStructureEntryInfo((MetaName)3092190689, PsoDataType.Float, 24, 0, 0) ); case MetaName.camCinematicIdleCameraMetadata: return new PsoStructureInfo(MetaName.camCinematicIdleCameraMetadata, 0, 0, 168, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo((MetaName)1305640980, PsoDataType.UInt, 32, 0, 0), new PsoStructureEntryInfo((MetaName)653716069, PsoDataType.Float, 36, 0, 0), new PsoStructureEntryInfo((MetaName)887335192, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)742934843, PsoDataType.Structure, 48, 0, MetaName.camCinematicIdleShots), - new PsoStructureEntryInfo((MetaName)2976595087, PsoDataType.Structure, 72, 0, MetaName.camCinematicIdleShots), + new PsoStructureEntryInfo(MetaName.WideShot, PsoDataType.Structure, 48, 0, MetaName.camCinematicIdleShots), + new PsoStructureEntryInfo(MetaName.MediumShot, PsoDataType.Structure, 72, 0, MetaName.camCinematicIdleShots), new PsoStructureEntryInfo((MetaName)2026925651, PsoDataType.Structure, 96, 0, MetaName.camCinematicIdleShots), new PsoStructureEntryInfo((MetaName)2443187932, PsoDataType.Float2, 120, 0, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 128, 0, 0), new PsoStructureEntryInfo(MetaName.CollisionRadius, PsoDataType.Float, 136, 0, 0), new PsoStructureEntryInfo((MetaName)3983210518, PsoDataType.Float, 140, 0, 0), - new PsoStructureEntryInfo((MetaName)2763528752, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo(MetaName.RadiusScalingForOcclusionTest, PsoDataType.Float, 144, 0, 0), new PsoStructureEntryInfo((MetaName)762567518, PsoDataType.Float2, 148, 0, 0), new PsoStructureEntryInfo((MetaName)348135302, PsoDataType.Float, 156, 0, 0), - new PsoStructureEntryInfo((MetaName)2101619543, PsoDataType.Float, 160, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxTimeToSpendOccluded, PsoDataType.Float, 160, 0, 0) ); case MetaName.camCinematicIdleShots: return new PsoStructureInfo(MetaName.camCinematicIdleShots, 0, 0, 24, new PsoStructureEntryInfo(MetaName.PitchLimits, PsoDataType.Float2, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)335839296, PsoDataType.Float2, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.DistanceLimits, PsoDataType.Float2, 16, 0, 0) ); case MetaName.camCinematicFirstPersonIdleCameraMetadata: return new PsoStructureInfo(MetaName.camCinematicFirstPersonIdleCameraMetadata, 0, 0, 200, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2014698042, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.tacticalXml, PsoDataType.Float, 32, 0, 0), new PsoStructureEntryInfo((MetaName)2146055434, PsoDataType.Float, 36, 0, 0), new PsoStructureEntryInfo((MetaName)498489070, PsoDataType.Float, 40, 0, 0), new PsoStructureEntryInfo((MetaName)642179285, PsoDataType.UInt, 44, 0, 0), @@ -2069,11 +2069,11 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicStuntCameraMetadata: return new PsoStructureInfo(MetaName.camCinematicStuntCameraMetadata, 0, 0, 72, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)4288186671, PsoDataType.Float2, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.FovLimits, PsoDataType.Float2, 32, 0, 0), new PsoStructureEntryInfo((MetaName)3686787728, PsoDataType.Float, 40, 0, 0), new PsoStructureEntryInfo((MetaName)2332427685, PsoDataType.Float2, 44, 0, 0), new PsoStructureEntryInfo((MetaName)3195921543, PsoDataType.Float2, 52, 0, 0), @@ -2082,38 +2082,38 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicGroupCameraMetadata: return new PsoStructureInfo(MetaName.camCinematicGroupCameraMetadata, 0, 0, 96, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)4288186671, PsoDataType.Float2, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.FovLimits, PsoDataType.Float2, 32, 0, 0), new PsoStructureEntryInfo((MetaName)3686787728, PsoDataType.Float, 40, 0, 0), new PsoStructureEntryInfo((MetaName)4150576777, PsoDataType.Float2, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)2642729834, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.RadiusScalingForClippingTest, PsoDataType.Float, 52, 0, 0), new PsoStructureEntryInfo(MetaName.CollisionRadius, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)2101619543, PsoDataType.UInt, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeToSpendOccluded, PsoDataType.UInt, 60, 0, 0), new PsoStructureEntryInfo((MetaName)3434528744, PsoDataType.Float, 64, 0, 0), new PsoStructureEntryInfo((MetaName)2373655501, PsoDataType.Float, 68, 0, 0), new PsoStructureEntryInfo((MetaName)400251000, PsoDataType.Float, 72, 0, 0), new PsoStructureEntryInfo((MetaName)1035890821, PsoDataType.Float, 76, 0, 0), new PsoStructureEntryInfo((MetaName)1856660360, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)102161666, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)753638141, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)851393034, PsoDataType.Float, 92, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxDistanceForWaterClippingTest, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForRiverWaterClippingTest, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHeightAboveWater, PsoDataType.Float, 92, 0, 0) ); case MetaName.camCinematicTrainTrackingCameraMetadata: return new PsoStructureInfo(MetaName.camCinematicTrainTrackingCameraMetadata, 0, 0, 400, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo((MetaName)2962759393, PsoDataType.Float, 32, 0, 0), new PsoStructureEntryInfo((MetaName)3005507009, PsoDataType.Float, 36, 0, 0), new PsoStructureEntryInfo((MetaName)114561573, PsoDataType.Bool, 40, 0, 0), new PsoStructureEntryInfo((MetaName)1535052963, PsoDataType.Float, 44, 0, 0), new PsoStructureEntryInfo(MetaName.CollisionRadius, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2642729834, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.RadiusScalingForClippingTest, PsoDataType.Float, 52, 0, 0), new PsoStructureEntryInfo((MetaName)3023548272, PsoDataType.Float, 56, 0, 0), new PsoStructureEntryInfo((MetaName)846082931, PsoDataType.Float, 60, 0, 0), new PsoStructureEntryInfo((MetaName)3539146194, PsoDataType.UInt, 64, 0, 0), @@ -2124,17 +2124,17 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)3190591149, PsoDataType.UInt, 84, 0, 0), new PsoStructureEntryInfo((MetaName)2884448793, PsoDataType.UInt, 88, 0, 0), new PsoStructureEntryInfo((MetaName)69722150, PsoDataType.Bool, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)2723670760, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)1702320721, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.ScanRadius, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.ScanDistance, PsoDataType.Float, 100, 0, 0), new PsoStructureEntryInfo((MetaName)199666231, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)556138114, PsoDataType.String, 108, 7, 0), - new PsoStructureEntryInfo((MetaName)2538678656, PsoDataType.String, 112, 7, 0), + new PsoStructureEntryInfo(MetaName.InVehicleLookAtDampingRef, PsoDataType.String, 108, 7, 0), + new PsoStructureEntryInfo(MetaName.OnFootLookAtDampingRef, PsoDataType.String, 112, 7, 0), new PsoStructureEntryInfo((MetaName)4200791860, PsoDataType.String, 116, 7, 0), new PsoStructureEntryInfo((MetaName)3308026067, PsoDataType.String, 120, 7, 0), new PsoStructureEntryInfo((MetaName)1279708504, PsoDataType.Structure, 128, 0, MetaName.camCinematicCameraOperatorShakeSettings), - new PsoStructureEntryInfo((MetaName)102161666, PsoDataType.Float, 256, 0, 0), - new PsoStructureEntryInfo((MetaName)753638141, PsoDataType.Float, 260, 0, 0), - new PsoStructureEntryInfo((MetaName)851393034, PsoDataType.Float, 264, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForWaterClippingTest, PsoDataType.Float, 256, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForRiverWaterClippingTest, PsoDataType.Float, 260, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHeightAboveWater, PsoDataType.Float, 264, 0, 0), new PsoStructureEntryInfo((MetaName)1035890821, PsoDataType.Float, 268, 0, 0), new PsoStructureEntryInfo((MetaName)3518053347, PsoDataType.Bool, 272, 0, 0), new PsoStructureEntryInfo((MetaName)568093394, PsoDataType.Float, 276, 0, 0), @@ -2160,15 +2160,15 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicMountedCameraMetadata: return new PsoStructureInfo(MetaName.camCinematicMountedCameraMetadata, 0, 0, 1344, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2884954151, PsoDataType.String, 32, 7, 0), - new PsoStructureEntryInfo((MetaName)376729145, PsoDataType.String, 36, 7, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ControlHelperRef, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo(MetaName.MobilePhoneCameraControlHelperRef, PsoDataType.String, 36, 7, 0), new PsoStructureEntryInfo((MetaName)3464513788, PsoDataType.String, 40, 7, 0), - new PsoStructureEntryInfo((MetaName)4086545075, PsoDataType.String, 44, 7, 0), - new PsoStructureEntryInfo((MetaName)2513422573, PsoDataType.String, 48, 7, 0), + new PsoStructureEntryInfo(MetaName.RelativeAttachSpringConstantEnvelopeRef, PsoDataType.String, 44, 7, 0), + new PsoStructureEntryInfo(MetaName.RagdollBlendEnvelopeRef, PsoDataType.String, 48, 7, 0), new PsoStructureEntryInfo((MetaName)4071354708, PsoDataType.String, 52, 7, 0), new PsoStructureEntryInfo((MetaName)972815273, PsoDataType.String, 56, 7, 0), new PsoStructureEntryInfo((MetaName)844800904, PsoDataType.String, 60, 7, 0), @@ -2176,13 +2176,13 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)722540604, PsoDataType.String, 68, 7, 0), new PsoStructureEntryInfo((MetaName)3400674238, PsoDataType.String, 72, 7, 0), new PsoStructureEntryInfo((MetaName)885223840, PsoDataType.String, 76, 7, 0), - new PsoStructureEntryInfo((MetaName)4021873979, PsoDataType.String, 80, 7, 0), - new PsoStructureEntryInfo((MetaName)1865815245, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)2755051531, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)1634093344, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)2323851759, PsoDataType.Float3, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringMountRef, PsoDataType.String, 80, 7, 0), + new PsoStructureEntryInfo(MetaName.BaseFov, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseNearClip, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.TripleHeadNearClip, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.RelativeAttachPosition, PsoDataType.Float3, 96, 0, 0), new PsoStructureEntryInfo((MetaName)1792533284, PsoDataType.Float3, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)2842669433, PsoDataType.Float3, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.BoneRelativeAttachOffset, PsoDataType.Float3, 128, 0, 0), new PsoStructureEntryInfo((MetaName)3162861957, PsoDataType.Float3, 144, 0, 0), new PsoStructureEntryInfo((MetaName)2981089011, PsoDataType.Float3, 160, 0, 0), new PsoStructureEntryInfo((MetaName)464677746, PsoDataType.Float3, 176, 0, 0), @@ -2191,8 +2191,8 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)4196591490, PsoDataType.Float3, 224, 0, 0), new PsoStructureEntryInfo((MetaName)1001532487, PsoDataType.Float3, 240, 0, 0), new PsoStructureEntryInfo((MetaName)1862921276, PsoDataType.Float3, 256, 0, 0), - new PsoStructureEntryInfo((MetaName)1204776061, PsoDataType.Float2, 272, 0, 0), - new PsoStructureEntryInfo((MetaName)340115724, PsoDataType.Float2, 280, 0, 0), + new PsoStructureEntryInfo(MetaName.RelativeAttachSpringConstantLimits, PsoDataType.Float2, 272, 0, 0), + new PsoStructureEntryInfo(MetaName.RelativeAttachSpringConstantLimitsForPassengers, PsoDataType.Float2, 280, 0, 0), new PsoStructureEntryInfo((MetaName)3248777081, PsoDataType.Float2, 288, 0, 0), new PsoStructureEntryInfo((MetaName)74704022, PsoDataType.Float2, 296, 0, 0), new PsoStructureEntryInfo((MetaName)4088070730, PsoDataType.Float, 304, 0, 0), @@ -2202,8 +2202,8 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)2931383793, PsoDataType.Bool, 320, 0, 0), new PsoStructureEntryInfo((MetaName)1919709187, PsoDataType.Float, 324, 0, 0), new PsoStructureEntryInfo((MetaName)945934562, PsoDataType.Float, 328, 0, 0), - new PsoStructureEntryInfo((MetaName)551950644, PsoDataType.Float, 332, 0, 0), - new PsoStructureEntryInfo((MetaName)1670344535, PsoDataType.Float, 336, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultRelativePitch, PsoDataType.Float, 332, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultReversePitch, PsoDataType.Float, 336, 0, 0), new PsoStructureEntryInfo((MetaName)742850166, PsoDataType.Float, 340, 0, 0), new PsoStructureEntryInfo((MetaName)2686299665, PsoDataType.Float2, 344, 0, 0), new PsoStructureEntryInfo((MetaName)1473955583, PsoDataType.Float, 352, 0, 0), @@ -2211,9 +2211,9 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)2135497875, PsoDataType.Bool, 357, 0, 0), new PsoStructureEntryInfo((MetaName)4187867131, PsoDataType.Bool, 358, 0, 0), new PsoStructureEntryInfo((MetaName)2423170684, PsoDataType.Structure, 360, 0, MetaName.camCinematicMountedCameraMetadataRelativePitchScalingToThrottle), - new PsoStructureEntryInfo((MetaName)3319637384, PsoDataType.Structure, 376, 0, MetaName.camSpeedRelativeShakeSettingsMetadata), + new PsoStructureEntryInfo(MetaName.HighSpeedShakeSettings, PsoDataType.Structure, 376, 0, MetaName.camSpeedRelativeShakeSettingsMetadata), new PsoStructureEntryInfo((MetaName)1672349165, PsoDataType.Structure, 408, 0, MetaName.camSpeedRelativeShakeSettingsMetadata), - new PsoStructureEntryInfo((MetaName)4146741065, PsoDataType.Structure, 440, 0, (MetaName)2211164655), + new PsoStructureEntryInfo(MetaName.RocketSettings, PsoDataType.Structure, 440, 0, MetaName.camVehicleRocketSettings), new PsoStructureEntryInfo((MetaName)1913942883, PsoDataType.Bool, 456, 0, 0), new PsoStructureEntryInfo((MetaName)3459873736, PsoDataType.Bool, 457, 0, 0), new PsoStructureEntryInfo((MetaName)880876795, PsoDataType.Bool, 458, 0, 0), @@ -2223,50 +2223,50 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)1020746469, PsoDataType.Structure, 584, 0, MetaName.camCinematicMountedCameraMetadataFirstPersonRoll), new PsoStructureEntryInfo((MetaName)3266557322, PsoDataType.Structure, 608, 0, MetaName.camCinematicMountedCameraMetadataFirstPersonPitchOffset), new PsoStructureEntryInfo((MetaName)4210630063, PsoDataType.Bool, 656, 0, 0), - new PsoStructureEntryInfo((MetaName)2918672176, PsoDataType.Float, 660, 0, 0), - new PsoStructureEntryInfo((MetaName)1558815907, PsoDataType.Float, 664, 0, 0), + new PsoStructureEntryInfo(MetaName.RelativeAttachSpringDampingRatio, PsoDataType.Float, 660, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSpeedForMaxRelativeAttachSpringConstant, PsoDataType.Float, 664, 0, 0), new PsoStructureEntryInfo((MetaName)17770171, PsoDataType.Float, 668, 0, 0), new PsoStructureEntryInfo((MetaName)2454715147, PsoDataType.Float, 672, 0, 0), new PsoStructureEntryInfo((MetaName)789371927, PsoDataType.Bool, 676, 0, 0), - new PsoStructureEntryInfo((MetaName)2659354456, PsoDataType.Bool, 677, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldAttachToFollowPedHead, PsoDataType.Bool, 677, 0, 0), new PsoStructureEntryInfo((MetaName)2639714447, PsoDataType.Bool, 678, 0, 0), - new PsoStructureEntryInfo((MetaName)339929903, PsoDataType.Bool, 679, 0, 0), - new PsoStructureEntryInfo((MetaName)523999628, PsoDataType.Bool, 680, 0, 0), - new PsoStructureEntryInfo((MetaName)2429106995, PsoDataType.Bool, 681, 0, 0), - new PsoStructureEntryInfo((MetaName)3725196996, PsoDataType.Bool, 682, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldAttachToFollowPedSeat, PsoDataType.Bool, 679, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldRestictToFrontSeat, PsoDataType.Bool, 680, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldAttachToVehicleExitEntryPoint, PsoDataType.Bool, 681, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldAttachToVehicleBone, PsoDataType.Bool, 682, 0, 0), new PsoStructureEntryInfo((MetaName)4227962431, PsoDataType.Bool, 683, 0, 0), new PsoStructureEntryInfo((MetaName)3424726202, PsoDataType.Bool, 684, 0, 0), new PsoStructureEntryInfo((MetaName)883646732, PsoDataType.Bool, 685, 0, 0), new PsoStructureEntryInfo((MetaName)1344883999, PsoDataType.Bool, 686, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)2782414211), new PsoStructureEntryInfo((MetaName)3524553148, PsoDataType.Flags, 688, 0, (MetaName)2097231), - new PsoStructureEntryInfo((MetaName)1760348159, PsoDataType.Enum, 692, 0, (MetaName)3404480226), - new PsoStructureEntryInfo((MetaName)589368866, PsoDataType.Enum, 696, 0, (MetaName)2136742399), - new PsoStructureEntryInfo((MetaName)54415504, PsoDataType.Float3, 704, 0, 0), - new PsoStructureEntryInfo((MetaName)2548218645, PsoDataType.Float3, 720, 0, 0), - new PsoStructureEntryInfo((MetaName)956615974, PsoDataType.Bool, 736, 0, 0), - new PsoStructureEntryInfo((MetaName)389542769, PsoDataType.SInt, 740, 0, 0), - new PsoStructureEntryInfo((MetaName)3781066831, PsoDataType.Structure, 744, 0, MetaName.camCinematicMountedCameraMetadataOrientationSpring), + new PsoStructureEntryInfo(MetaName.VehicleAttachPart, PsoDataType.Enum, 692, 0, (MetaName)3404480226), + new PsoStructureEntryInfo(MetaName.LookAtBehaviour, PsoDataType.Enum, 696, 0, (MetaName)2136742399), + new PsoStructureEntryInfo(MetaName.RelativeLookAtPosition, PsoDataType.Float3, 704, 0, 0), + new PsoStructureEntryInfo(MetaName.LookBehindRelativeAttachPosition, PsoDataType.Float3, 720, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseLookBehindCustomPosition, PsoDataType.Bool, 736, 0, 0), + new PsoStructureEntryInfo(MetaName.FollowPedLookAtBoneTag, PsoDataType.SInt, 740, 0, 0), + new PsoStructureEntryInfo(MetaName.OrientationSpring, PsoDataType.Structure, 744, 0, MetaName.camCinematicMountedCameraMetadataOrientationSpring), new PsoStructureEntryInfo((MetaName)2204528705, PsoDataType.Structure, 808, 0, MetaName.camCinematicMountedCameraMetadataLeadingLookSettings), - new PsoStructureEntryInfo((MetaName)509392339, PsoDataType.Float, 856, 0, 0), - new PsoStructureEntryInfo((MetaName)4261179401, PsoDataType.Float, 860, 0, 0), + new PsoStructureEntryInfo(MetaName.MinPitch, PsoDataType.Float, 856, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPitch, PsoDataType.Float, 860, 0, 0), new PsoStructureEntryInfo((MetaName)3932844561, PsoDataType.Float, 864, 0, 0), new PsoStructureEntryInfo((MetaName)1690462370, PsoDataType.Float, 868, 0, 0), - new PsoStructureEntryInfo((MetaName)503778969, PsoDataType.Float2, 872, 0, 0), - new PsoStructureEntryInfo((MetaName)3132205970, PsoDataType.Bool, 880, 0, 0), + new PsoStructureEntryInfo(MetaName.RelativeHeadingLimitsForMobilePhoneCamera, PsoDataType.Float2, 872, 0, 0), + new PsoStructureEntryInfo(MetaName.IsBehindVehicleGlass, PsoDataType.Bool, 880, 0, 0), new PsoStructureEntryInfo((MetaName)2385481086, PsoDataType.Bool, 881, 0, 0), - new PsoStructureEntryInfo((MetaName)1348911901, PsoDataType.Bool, 882, 0, 0), - new PsoStructureEntryInfo((MetaName)1762086384, PsoDataType.Bool, 883, 0, 0), - new PsoStructureEntryInfo((MetaName)1538342627, PsoDataType.Bool, 884, 0, 0), - new PsoStructureEntryInfo((MetaName)1232220671, PsoDataType.Bool, 885, 0, 0), - new PsoStructureEntryInfo((MetaName)2799648005, PsoDataType.Bool, 886, 0, 0), - new PsoStructureEntryInfo((MetaName)4172426852, PsoDataType.Bool, 887, 0, 0), - new PsoStructureEntryInfo((MetaName)3436942647, PsoDataType.Float2, 888, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldDisplayReticule, PsoDataType.Bool, 882, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldMakeFollowPedHeadInvisible, PsoDataType.Bool, 883, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldMakePedInAttachSeatInvisible, PsoDataType.Bool, 884, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldCopyVehicleCameraMotionBlur, PsoDataType.Bool, 885, 0, 0), + new PsoStructureEntryInfo(MetaName.LimitAttachParentRelativePitchAndHeading, PsoDataType.Bool, 886, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldTerminateForPitchAndHeading, PsoDataType.Bool, 887, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRelativePitch, PsoDataType.Float2, 888, 0, 0), new PsoStructureEntryInfo((MetaName)1537030464, PsoDataType.Float2, 896, 0, 0), new PsoStructureEntryInfo((MetaName)3275096368, PsoDataType.Float2, 904, 0, 0), new PsoStructureEntryInfo((MetaName)923714524, PsoDataType.Float2, 912, 0, 0), new PsoStructureEntryInfo((MetaName)3680927973, PsoDataType.Float2, 920, 0, 0), - new PsoStructureEntryInfo((MetaName)10648206, PsoDataType.Float2, 928, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRelativeHeading, PsoDataType.Float2, 928, 0, 0), new PsoStructureEntryInfo((MetaName)2362796003, PsoDataType.Float2, 936, 0, 0), new PsoStructureEntryInfo((MetaName)2931436971, PsoDataType.Float2, 944, 0, 0), new PsoStructureEntryInfo((MetaName)4288033461, PsoDataType.Float2, 952, 0, 0), @@ -2276,39 +2276,39 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)1847367979, PsoDataType.Float2, 984, 0, 0), new PsoStructureEntryInfo((MetaName)1083919137, PsoDataType.Float2, 992, 0, 0), new PsoStructureEntryInfo((MetaName)4130730234, PsoDataType.Float2, 1000, 0, 0), - new PsoStructureEntryInfo((MetaName)113692134, PsoDataType.Float2, 1008, 0, 0), - new PsoStructureEntryInfo((MetaName)1115426652, PsoDataType.Float2, 1016, 0, 0), - new PsoStructureEntryInfo((MetaName)4012821505, PsoDataType.Bool, 1024, 0, 0), - new PsoStructureEntryInfo((MetaName)1301968002, PsoDataType.Bool, 1025, 0, 0), - new PsoStructureEntryInfo((MetaName)1692207327, PsoDataType.Float2, 1028, 0, 0), - new PsoStructureEntryInfo((MetaName)759759236, PsoDataType.Float2, 1036, 0, 0), - new PsoStructureEntryInfo((MetaName)474380051, PsoDataType.Bool, 1044, 0, 0), - new PsoStructureEntryInfo((MetaName)2101619543, PsoDataType.UInt, 1048, 0, 0), - new PsoStructureEntryInfo((MetaName)1072193524, PsoDataType.Bool, 1052, 0, 0), - new PsoStructureEntryInfo((MetaName)1735950673, PsoDataType.UInt, 1056, 0, 0), + new PsoStructureEntryInfo(MetaName.InitialRelativePitchLimits, PsoDataType.Float2, 1008, 0, 0), + new PsoStructureEntryInfo(MetaName.InitialRelativeHeadingLimits, PsoDataType.Float2, 1016, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldApplyAttachParentRoll, PsoDataType.Bool, 1024, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldTerminateForWorldPitch, PsoDataType.Bool, 1025, 0, 0), + new PsoStructureEntryInfo(MetaName.InitialWorldPitchLimits, PsoDataType.Float2, 1028, 0, 0), + new PsoStructureEntryInfo(MetaName.WorldPitchLimits, PsoDataType.Float2, 1036, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldTerminateForOcclusion, PsoDataType.Bool, 1044, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeToSpendOccluded, PsoDataType.UInt, 1048, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldTerminateIfOccludedByAttachParent, PsoDataType.Bool, 1052, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeToSpendOccludedByAttachParent, PsoDataType.UInt, 1056, 0, 0), new PsoStructureEntryInfo(MetaName.CollisionRadius, PsoDataType.Float, 1060, 0, 0), - new PsoStructureEntryInfo((MetaName)2763528752, PsoDataType.Float, 1064, 0, 0), - new PsoStructureEntryInfo((MetaName)179124010, PsoDataType.Bool, 1068, 0, 0), - new PsoStructureEntryInfo((MetaName)1737497458, PsoDataType.Float, 1072, 0, 0), - new PsoStructureEntryInfo((MetaName)9156722, PsoDataType.Bool, 1076, 0, 0), - new PsoStructureEntryInfo((MetaName)2106075408, PsoDataType.Bool, 1077, 0, 0), - new PsoStructureEntryInfo((MetaName)851288932, PsoDataType.UInt, 1080, 0, 0), - new PsoStructureEntryInfo((MetaName)2642729834, PsoDataType.Float, 1084, 0, 0), + new PsoStructureEntryInfo(MetaName.RadiusScalingForOcclusionTest, PsoDataType.Float, 1064, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldTerminateForDistanceToTarget, PsoDataType.Bool, 1068, 0, 0), + new PsoStructureEntryInfo(MetaName.DistanceToTerminate, PsoDataType.Float, 1072, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldCalculateXYDistance, PsoDataType.Bool, 1076, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldTestForClipping, PsoDataType.Bool, 1077, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeToClipIntoDynamicCollision, PsoDataType.UInt, 1080, 0, 0), + new PsoStructureEntryInfo(MetaName.RadiusScalingForClippingTest, PsoDataType.Float, 1084, 0, 0), new PsoStructureEntryInfo((MetaName)816145056, PsoDataType.Bool, 1088, 0, 0), new PsoStructureEntryInfo((MetaName)439797539, PsoDataType.Bool, 1089, 0, 0), - new PsoStructureEntryInfo((MetaName)102161666, PsoDataType.Float, 1092, 0, 0), - new PsoStructureEntryInfo((MetaName)753638141, PsoDataType.Float, 1096, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForWaterClippingTest, PsoDataType.Float, 1092, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForRiverWaterClippingTest, PsoDataType.Float, 1096, 0, 0), new PsoStructureEntryInfo((MetaName)976391107, PsoDataType.Bool, 1100, 0, 0), - new PsoStructureEntryInfo((MetaName)851393034, PsoDataType.Float, 1104, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHeightAboveWater, PsoDataType.Float, 1104, 0, 0), new PsoStructureEntryInfo((MetaName)200247978, PsoDataType.Bool, 1108, 0, 0), new PsoStructureEntryInfo((MetaName)1613380386, PsoDataType.Float, 1112, 0, 0), new PsoStructureEntryInfo((MetaName)2154681758, PsoDataType.Bool, 1116, 0, 0), - new PsoStructureEntryInfo((MetaName)556138114, PsoDataType.String, 1120, 7, 0), - new PsoStructureEntryInfo((MetaName)2538678656, PsoDataType.String, 1124, 7, 0), + new PsoStructureEntryInfo(MetaName.InVehicleLookAtDampingRef, PsoDataType.String, 1120, 7, 0), + new PsoStructureEntryInfo(MetaName.OnFootLookAtDampingRef, PsoDataType.String, 1124, 7, 0), new PsoStructureEntryInfo((MetaName)4200791860, PsoDataType.String, 1128, 7, 0), - new PsoStructureEntryInfo((MetaName)4107190241, PsoDataType.Bool, 1132, 0, 0), - new PsoStructureEntryInfo((MetaName)1051168964, PsoDataType.Bool, 1133, 0, 0), - new PsoStructureEntryInfo((MetaName)2985933428, PsoDataType.Float, 1136, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldByPassNearClip, PsoDataType.Bool, 1132, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldTestForMapPenetrationFromAttachPosition, PsoDataType.Bool, 1133, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseHeading, PsoDataType.Float, 1136, 0, 0), new PsoStructureEntryInfo((MetaName)1214392329, PsoDataType.Bool, 1140, 0, 0), new PsoStructureEntryInfo((MetaName)2327168839, PsoDataType.Float, 1144, 0, 0), new PsoStructureEntryInfo((MetaName)1246262822, PsoDataType.Float, 1148, 0, 0), @@ -2341,7 +2341,7 @@ namespace CodeWalker.GameFiles ); case MetaName.camCinematicMountedCameraMetadataLookAroundSettings: return new PsoStructureInfo(MetaName.camCinematicMountedCameraMetadataLookAroundSettings, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)2484601688, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.LeanScale, PsoDataType.Float, 8, 0, 0), new PsoStructureEntryInfo((MetaName)214599438, PsoDataType.Float, 12, 0, 0), new PsoStructureEntryInfo((MetaName)2702689596, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo((MetaName)2951014073, PsoDataType.Float, 20, 0, 0), @@ -2360,15 +2360,15 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicMountedCameraMetadataFirstPersonPitchOffset: return new PsoStructureInfo(MetaName.camCinematicMountedCameraMetadataFirstPersonPitchOffset, 0, 0, 48, new PsoStructureEntryInfo((MetaName)551752221, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)826600434, PsoDataType.Float3, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxOffset, PsoDataType.Float3, 16, 0, 0), new PsoStructureEntryInfo((MetaName)1775298710, PsoDataType.Float, 32, 0, 0), new PsoStructureEntryInfo((MetaName)2173221242, PsoDataType.Float, 36, 0, 0), new PsoStructureEntryInfo((MetaName)75090556, PsoDataType.Float, 40, 0, 0) ); case MetaName.camCinematicMountedCameraMetadataOrientationSpring: return new PsoStructureInfo(MetaName.camCinematicMountedCameraMetadataOrientationSpring, 0, 0, 64, - new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringConstant, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringDampingRatio, PsoDataType.Float, 12, 0, 0), new PsoStructureEntryInfo((MetaName)1464813290, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo((MetaName)12756205, PsoDataType.Bool, 20, 0, 0), new PsoStructureEntryInfo((MetaName)967704366, PsoDataType.Float, 24, 0, 0), @@ -2383,8 +2383,8 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)966483701, PsoDataType.Float, 8, 0, 0), new PsoStructureEntryInfo((MetaName)1778767763, PsoDataType.Bool, 12, 0, 0), new PsoStructureEntryInfo((MetaName)3524239627, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringConstant, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringDampingRatio, PsoDataType.Float, 24, 0, 0), new PsoStructureEntryInfo((MetaName)1788878871, PsoDataType.Float, 28, 0, 0), new PsoStructureEntryInfo((MetaName)3960905630, PsoDataType.Float, 32, 0, 0), new PsoStructureEntryInfo((MetaName)2872708052, PsoDataType.Bool, 36, 0, 0), @@ -2393,88 +2393,88 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicMountedCameraMetadataMovementOnAccelerationSettings: return new PsoStructureInfo(MetaName.camCinematicMountedCameraMetadataMovementOnAccelerationSettings, 0, 0, 48, new PsoStructureEntryInfo((MetaName)3974113312, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2111282409, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)165735146, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.BlendInSpringConstant, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.BlendOutSpringConstant, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringDampingRatio, PsoDataType.Float, 20, 0, 0), new PsoStructureEntryInfo((MetaName)3305119805, PsoDataType.Float, 24, 0, 0), new PsoStructureEntryInfo((MetaName)1186910375, PsoDataType.Float, 28, 0, 0), new PsoStructureEntryInfo((MetaName)1778767763, PsoDataType.Bool, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)3357849814, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxZoomFactor, PsoDataType.Float, 36, 0, 0), new PsoStructureEntryInfo((MetaName)3493441660, PsoDataType.Float, 40, 0, 0), new PsoStructureEntryInfo((MetaName)1259376027, PsoDataType.Float, 44, 0, 0) ); case MetaName.camCinematicPositionCameraMetadata: return new PsoStructureInfo(MetaName.camCinematicPositionCameraMetadata, 0, 0, 104, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.PitchLimits, PsoDataType.Float2, 32, 0, 0), new PsoStructureEntryInfo(MetaName.CollisionRadius, PsoDataType.Float, 40, 0, 0), new PsoStructureEntryInfo((MetaName)3983210518, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)2642729834, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2101619543, PsoDataType.UInt, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.RadiusScalingForClippingTest, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeToSpendOccluded, PsoDataType.UInt, 52, 0, 0), new PsoStructureEntryInfo((MetaName)3715714007, PsoDataType.Float, 56, 0, 0), new PsoStructureEntryInfo((MetaName)3434528744, PsoDataType.Float, 60, 0, 0), new PsoStructureEntryInfo((MetaName)1699827350, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)2271271663, PsoDataType.UInt, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.ZoomDuration, PsoDataType.UInt, 68, 0, 0), new PsoStructureEntryInfo((MetaName)3609378888, PsoDataType.Float, 72, 0, 0), new PsoStructureEntryInfo((MetaName)1843629037, PsoDataType.UInt, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)102161666, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)753638141, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)851393034, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)556138114, PsoDataType.String, 92, 7, 0), - new PsoStructureEntryInfo((MetaName)2538678656, PsoDataType.String, 96, 7, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForWaterClippingTest, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForRiverWaterClippingTest, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHeightAboveWater, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.InVehicleLookAtDampingRef, PsoDataType.String, 92, 7, 0), + new PsoStructureEntryInfo(MetaName.OnFootLookAtDampingRef, PsoDataType.String, 96, 7, 0), new PsoStructureEntryInfo((MetaName)4200791860, PsoDataType.String, 100, 7, 0) ); case MetaName.camCinematicWaterCrashCameraMetadata: return new PsoStructureInfo(MetaName.camCinematicWaterCrashCameraMetadata, 0, 0, 88, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.PitchLimits, PsoDataType.Float2, 32, 0, 0), new PsoStructureEntryInfo(MetaName.CollisionRadius, PsoDataType.Float, 40, 0, 0), new PsoStructureEntryInfo((MetaName)3106190053, PsoDataType.Float, 44, 0, 0), new PsoStructureEntryInfo(MetaName.RadiusScale, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)529669607, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.DropDistance, PsoDataType.Float, 52, 0, 0), new PsoStructureEntryInfo((MetaName)3822313305, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)2014698042, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.tacticalXml, PsoDataType.Float, 60, 0, 0), new PsoStructureEntryInfo((MetaName)2965889555, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)2101619543, PsoDataType.UInt, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)1445694321, PsoDataType.UInt, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeToSpendOccluded, PsoDataType.UInt, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.DropDuration, PsoDataType.UInt, 72, 0, 0), new PsoStructureEntryInfo((MetaName)2920068067, PsoDataType.UInt, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)2387941002, PsoDataType.UInt, 80, 0, 0) + new PsoStructureEntryInfo(MetaName.BlendDuration, PsoDataType.UInt, 80, 0, 0) ); case MetaName.camCinematicTwoShotCameraMetadata: return new PsoStructureInfo(MetaName.camCinematicTwoShotCameraMetadata, 0, 0, 136, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1865815245, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2755051531, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)3983645896, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseFov, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseNearClip, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeScale, PsoDataType.Float, 40, 0, 0), new PsoStructureEntryInfo((MetaName)3072113430, PsoDataType.Float, 44, 0, 0), new PsoStructureEntryInfo((MetaName)654218252, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)1114870307, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.CameraRelativeVerticalOffset, PsoDataType.Float, 52, 0, 0), new PsoStructureEntryInfo((MetaName)1926313598, PsoDataType.Float, 56, 0, 0), new PsoStructureEntryInfo((MetaName)1167967077, PsoDataType.Float, 60, 0, 0), new PsoStructureEntryInfo((MetaName)656358172, PsoDataType.Float, 64, 0, 0), new PsoStructureEntryInfo((MetaName)940306022, PsoDataType.Float, 68, 0, 0), new PsoStructureEntryInfo((MetaName)4169793326, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)2733631256, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistance, PsoDataType.Float, 76, 0, 0), new PsoStructureEntryInfo((MetaName)3573176421, PsoDataType.SInt, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)9436207, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceForLockOn, PsoDataType.Float, 84, 0, 0), new PsoStructureEntryInfo((MetaName)1953981041, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)1252108818, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.IdleCmini, PsoDataType.Float, 92, 0, 0), new PsoStructureEntryInfo((MetaName)3754548217, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)102161666, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)753638141, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)851393034, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForWaterClippingTest, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForRiverWaterClippingTest, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHeightAboveWater, PsoDataType.Float, 108, 0, 0), new PsoStructureEntryInfo((MetaName)2383824547, PsoDataType.Float, 112, 0, 0), new PsoStructureEntryInfo((MetaName)1720877983, PsoDataType.Bool, 116, 0, 0), new PsoStructureEntryInfo((MetaName)1117249844, PsoDataType.Float, 120, 0, 0), @@ -2485,17 +2485,17 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicPedCloseUpCameraMetadata: return new PsoStructureInfo(MetaName.camCinematicPedCloseUpCameraMetadata, 0, 0, 192, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1865815245, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2755051531, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)575433612, PsoDataType.SInt, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)3651374867, PsoDataType.Float3, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseFov, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseNearClip, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachBoneTag, PsoDataType.SInt, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachOffset, PsoDataType.Float3, 48, 0, 0), new PsoStructureEntryInfo((MetaName)1099610506, PsoDataType.Bool, 64, 0, 0), new PsoStructureEntryInfo((MetaName)3573176421, PsoDataType.SInt, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)1190303903, PsoDataType.Float3, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.LookAtOffset, PsoDataType.Float3, 80, 0, 0), new PsoStructureEntryInfo((MetaName)367186942, PsoDataType.Bool, 96, 0, 0), new PsoStructureEntryInfo((MetaName)3381486527, PsoDataType.UInt, 100, 0, 0), new PsoStructureEntryInfo((MetaName)3185512023, PsoDataType.Float, 104, 0, 0), @@ -2513,90 +2513,90 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)3418665750, PsoDataType.Float, 152, 0, 0), new PsoStructureEntryInfo((MetaName)2934396710, PsoDataType.Float, 156, 0, 0), new PsoStructureEntryInfo((MetaName)2715105524, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)2101619543, PsoDataType.UInt, 164, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeToSpendOccluded, PsoDataType.UInt, 164, 0, 0), new PsoStructureEntryInfo((MetaName)3609378888, PsoDataType.Float, 168, 0, 0), - new PsoStructureEntryInfo((MetaName)102161666, PsoDataType.Float, 172, 0, 0), - new PsoStructureEntryInfo((MetaName)753638141, PsoDataType.Float, 176, 0, 0), - new PsoStructureEntryInfo((MetaName)851393034, PsoDataType.Float, 180, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxDistanceForWaterClippingTest, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForRiverWaterClippingTest, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHeightAboveWater, PsoDataType.Float, 180, 0, 0) ); case MetaName.camControlHelperMetadata: return new PsoStructureInfo(MetaName.camControlHelperMetadata, 0, 0, 288, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2142445901, PsoDataType.Structure, 16, 0, MetaName.camControlHelperMetadataViewModes), - new PsoStructureEntryInfo((MetaName)4270549134, PsoDataType.Structure, 128, 0, MetaName.camControlHelperMetadataLookAround), - new PsoStructureEntryInfo((MetaName)2983410641, PsoDataType.Structure, 224, 0, MetaName.camControlHelperMetadataZoom), - new PsoStructureEntryInfo((MetaName)537305387, PsoDataType.UInt, 264, 0, 0), - new PsoStructureEntryInfo((MetaName)4114297506, PsoDataType.Bool, 268, 0, 0), - new PsoStructureEntryInfo((MetaName)2283622261, PsoDataType.Bool, 269, 0, 0), - new PsoStructureEntryInfo((MetaName)288255802, PsoDataType.Bool, 270, 0, 0), - new PsoStructureEntryInfo((MetaName)2355159673, PsoDataType.Bool, 271, 0, 0), - new PsoStructureEntryInfo((MetaName)2185008081, PsoDataType.Bool, 272, 0, 0), - new PsoStructureEntryInfo((MetaName)1539206266, PsoDataType.Float2, 276, 0, 0), - new PsoStructureEntryInfo((MetaName)1552516033, PsoDataType.UInt, 284, 0, 0) + new PsoStructureEntryInfo(MetaName.ViewModes, PsoDataType.Structure, 16, 0, MetaName.camControlHelperMetadataViewModes), + new PsoStructureEntryInfo(MetaName.LookAround, PsoDataType.Structure, 128, 0, MetaName.camControlHelperMetadataLookAround), + new PsoStructureEntryInfo(MetaName.Zoom, PsoDataType.Structure, 224, 0, MetaName.camControlHelperMetadataZoom), + new PsoStructureEntryInfo(MetaName.LookBehindOutroTimeMS, PsoDataType.UInt, 264, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseLookBehindInput, PsoDataType.Bool, 268, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseAccurateModeInput, PsoDataType.Bool, 269, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldToggleAccurateModeInput, PsoDataType.Bool, 270, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldApplySniperControlPref, PsoDataType.Bool, 271, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldApplyAimSensitivityPref, PsoDataType.Bool, 272, 0, 0), + new PsoStructureEntryInfo(MetaName.AimSensitivityScalingLimits, PsoDataType.Float2, 276, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDurationForMultiplayerViewModeActivation, PsoDataType.UInt, 284, 0, 0) ); case MetaName.camControlHelperMetadataViewModes: return new PsoStructureInfo(MetaName.camControlHelperMetadataViewModes, 0, 0, 112, - new PsoStructureEntryInfo((MetaName)509270218, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)3604554750, PsoDataType.Bool, 9, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseViewModeInput, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldToggleViewModeBetweenThirdAndFirstPerson, PsoDataType.Bool, 9, 0, 0), new PsoStructureEntryInfo(MetaName.Context, PsoDataType.Enum, 12, 0, (MetaName)513957198), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)2703064232), new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.Flags, 16, 2, (MetaName)327683), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camControlHelperMetadataViewModeSettings), new PsoStructureEntryInfo(MetaName.Settings, PsoDataType.Array, 24, 4, (MetaName)327685), - new PsoStructureEntryInfo((MetaName)1610750427, PsoDataType.String, 104, 7, 0) + new PsoStructureEntryInfo(MetaName.ViewModeBlendEnvelopeRef, PsoDataType.String, 104, 7, 0) ); case MetaName.camControlHelperMetadataViewModeSettings: return new PsoStructureInfo(MetaName.camControlHelperMetadataViewModeSettings, 0, 0, 16, - new PsoStructureEntryInfo((MetaName)1688148358, PsoDataType.Float2, 8, 0, 0) + new PsoStructureEntryInfo(MetaName.OrbitDistanceLimitScaling, PsoDataType.Float2, 8, 0, 0) ); case MetaName.camControlHelperMetadataLookAround: return new PsoStructureInfo(MetaName.camControlHelperMetadataLookAround, 0, 0, 96, - new PsoStructureEntryInfo((MetaName)3265151949, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)455772583, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)1627413096, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1529419507, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1910928125, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)419948133, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2735899528, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2160264290, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)1102394099, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2899233953, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)2358484554, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)4267995471, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)820757070, PsoDataType.Bool, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)1933675573, PsoDataType.String, 60, 7, 0), - new PsoStructureEntryInfo((MetaName)2539872798, PsoDataType.Structure, 64, 0, MetaName.camControlHelperMetaDataPrecisionAimSettings) + new PsoStructureEntryInfo(MetaName.InputMagPowerFactor, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.Acceleration, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.Deceleration, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxHeadingSpeed, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPitchSpeed, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MouseMaxHeadingSpeedMin, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MouseMaxHeadingSpeedMax, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MouseMaxPitchSpeedMin, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MouseMaxPitchSpeedMax, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.LSDeadZoneAngle, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.LSAcceleration, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.LSDeceleration, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseGameTime, PsoDataType.Bool, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.InputEnvelopeRef, PsoDataType.String, 60, 7, 0), + new PsoStructureEntryInfo(MetaName.PrecisionAimSettings, PsoDataType.Structure, 64, 0, MetaName.camControlHelperMetaDataPrecisionAimSettings) ); case MetaName.camControlHelperMetaDataPrecisionAimSettings: return new PsoStructureInfo(MetaName.camControlHelperMetaDataPrecisionAimSettings, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)274966492, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)150232389, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)3966738289, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1410651137, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3261011203, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)4159970100, PsoDataType.Float, 28, 0, 0) + new PsoStructureEntryInfo(MetaName.MinAccelModifier, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAccelModifier, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDeccelModifier, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDeccelModifier, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.InputMagToIncreaseDeadZoneMin, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.InputMagToIncreaseDeadZoneMax, PsoDataType.Float, 28, 0, 0) ); case MetaName.camControlHelperMetadataZoom: return new PsoStructureInfo(MetaName.camControlHelperMetadataZoom, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)1706209718, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1466092206, PsoDataType.Bool, 9, 0, 0), - new PsoStructureEntryInfo((MetaName)820757070, PsoDataType.Bool, 10, 0, 0), - new PsoStructureEntryInfo((MetaName)2006858266, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)1881152859, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3615529910, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3265151949, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)455772583, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1627413096, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseZoomInput, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseDiscreteZoomControl, PsoDataType.Bool, 9, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseGameTime, PsoDataType.Bool, 10, 0, 0), + new PsoStructureEntryInfo(MetaName.MinFov, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MinFovForNetworkPlay, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxFov, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.InputMagPowerFactor, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.Acceleration, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.Deceleration, PsoDataType.Float, 32, 0, 0), new PsoStructureEntryInfo(MetaName.MaxSpeed, PsoDataType.Float, 36, 0, 0) ); case MetaName.camCinematicVehicleTrackingCameraMetadata: return new PsoStructureInfo(MetaName.camCinematicVehicleTrackingCameraMetadata, 0, 0, 128, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1190303903, PsoDataType.Float3, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.LookAtOffset, PsoDataType.Float3, 32, 0, 0), new PsoStructureEntryInfo(MetaName.PositionOffset, PsoDataType.Float3, 48, 0, 0), new PsoStructureEntryInfo(MetaName.Fov, PsoDataType.Float, 64, 0, 0), new PsoStructureEntryInfo((MetaName)1292601136, PsoDataType.Float2, 68, 0, 0), @@ -2604,22 +2604,22 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)4013358927, PsoDataType.Float2, 84, 0, 0), new PsoStructureEntryInfo((MetaName)328948722, PsoDataType.Float2, 92, 0, 0), new PsoStructureEntryInfo(MetaName.CollisionRadius, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)2642729834, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.RadiusScalingForClippingTest, PsoDataType.Float, 104, 0, 0), new PsoStructureEntryInfo((MetaName)2198318784, PsoDataType.Float, 108, 0, 0), new PsoStructureEntryInfo((MetaName)1142735275, PsoDataType.UInt, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)102161666, PsoDataType.Float, 116, 0, 0), - new PsoStructureEntryInfo((MetaName)753638141, PsoDataType.Float, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)851393034, PsoDataType.Float, 124, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxDistanceForWaterClippingTest, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForRiverWaterClippingTest, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHeightAboveWater, PsoDataType.Float, 124, 0, 0) ); case MetaName.camEnvelopeMetadata: return new PsoStructureInfo(MetaName.camEnvelopeMetadata, 0, 0, 56, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo((MetaName)4004354650, PsoDataType.UInt, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)75961662, PsoDataType.UInt, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1826449020, PsoDataType.UInt, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.AttackDuration, PsoDataType.UInt, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.DecayDuration, PsoDataType.UInt, 24, 0, 0), new PsoStructureEntryInfo((MetaName)1735638891, PsoDataType.Float, 28, 0, 0), new PsoStructureEntryInfo(MetaName.HoldDuration, PsoDataType.SInt, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)4066793496, PsoDataType.UInt, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.ReleaseDuration, PsoDataType.UInt, 36, 0, 0), new PsoStructureEntryInfo((MetaName)2014772834, PsoDataType.Enum, 40, 0, (MetaName)3921015781), new PsoStructureEntryInfo((MetaName)1004206996, PsoDataType.Enum, 44, 0, (MetaName)3921015781), new PsoStructureEntryInfo((MetaName)1484523694, PsoDataType.Bool, 48, 0, 0) @@ -2627,38 +2627,38 @@ namespace CodeWalker.GameFiles case MetaName.camSpringMountMetadata: return new PsoStructureInfo(MetaName.camSpringMountMetadata, 0, 0, 80, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2807887859, PsoDataType.Float3, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)4142316102, PsoDataType.Float3, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2286316924, PsoDataType.Float3, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)1129875775, PsoDataType.Float3, 64, 0, 0) + new PsoStructureEntryInfo(MetaName.AccelerationLimit, PsoDataType.Float3, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.AccelerationForce, PsoDataType.Float3, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringForce, PsoDataType.Float3, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.DampeningForce, PsoDataType.Float3, 64, 0, 0) ); case MetaName.camAnimatedCameraMetadata: return new PsoStructureInfo(MetaName.camAnimatedCameraMetadata, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0) + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0) ); case MetaName.camFreeCameraMetadata: return new PsoStructureInfo(MetaName.camFreeCameraMetadata, 0, 0, 112, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)4070310820, PsoDataType.Float3, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)32744136, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)1363831855, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)335505697, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.StartPosition, PsoDataType.Float3, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.ForwardAcceleration, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.StrafeAcceleration, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.VerticalAcceleration, PsoDataType.Float, 56, 0, 0), new PsoStructureEntryInfo((MetaName)430698760, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)426969157, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)4133472264, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)802099030, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.HeadingAcceleration, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.PitchAcceleration, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.RollAcceleration, PsoDataType.Float, 72, 0, 0), new PsoStructureEntryInfo((MetaName)991761956, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)1137737707, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.FovAcceleration, PsoDataType.Float, 80, 0, 0), new PsoStructureEntryInfo((MetaName)2276437979, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)4261179401, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPitch, PsoDataType.Float, 88, 0, 0), new PsoStructureEntryInfo((MetaName)1380375800, PsoDataType.Float, 92, 0, 0), new PsoStructureEntryInfo((MetaName)3305680632, PsoDataType.Float, 96, 0, 0), new PsoStructureEntryInfo((MetaName)3631492583, PsoDataType.UInt, 100, 0, 0) @@ -2666,159 +2666,159 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicMountedPartCameraMetadata: return new PsoStructureInfo(MetaName.camCinematicMountedPartCameraMetadata, 0, 0, 192, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)4086545075, PsoDataType.String, 32, 7, 0), - new PsoStructureEntryInfo((MetaName)4021873979, PsoDataType.String, 36, 7, 0), - new PsoStructureEntryInfo((MetaName)1865815245, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2755051531, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)2289273332, PsoDataType.Enum, 48, 0, (MetaName)3404480226), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.RelativeAttachSpringConstantEnvelopeRef, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo(MetaName.SpringMountRef, PsoDataType.String, 36, 7, 0), + new PsoStructureEntryInfo(MetaName.BaseFov, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseNearClip, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachPart, PsoDataType.Enum, 48, 0, (MetaName)3404480226), new PsoStructureEntryInfo((MetaName)2797646907, PsoDataType.Float3, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)54415504, PsoDataType.Float3, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)1204776061, PsoDataType.Float2, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)340115724, PsoDataType.Float2, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)2918672176, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)1558815907, PsoDataType.Float, 116, 0, 0), - new PsoStructureEntryInfo((MetaName)3319637384, PsoDataType.Structure, 120, 0, MetaName.camSpeedRelativeShakeSettingsMetadata), - new PsoStructureEntryInfo((MetaName)3132205970, PsoDataType.Bool, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.RelativeLookAtPosition, PsoDataType.Float3, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.RelativeAttachSpringConstantLimits, PsoDataType.Float2, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.RelativeAttachSpringConstantLimitsForPassengers, PsoDataType.Float2, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.RelativeAttachSpringDampingRatio, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSpeedForMaxRelativeAttachSpringConstant, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.HighSpeedShakeSettings, PsoDataType.Structure, 120, 0, MetaName.camSpeedRelativeShakeSettingsMetadata), + new PsoStructureEntryInfo(MetaName.IsBehindVehicleGlass, PsoDataType.Bool, 152, 0, 0), new PsoStructureEntryInfo((MetaName)2385481086, PsoDataType.Bool, 153, 0, 0), - new PsoStructureEntryInfo((MetaName)1348911901, PsoDataType.Bool, 154, 0, 0), - new PsoStructureEntryInfo((MetaName)1762086384, PsoDataType.Bool, 155, 0, 0), - new PsoStructureEntryInfo((MetaName)1232220671, PsoDataType.Bool, 156, 0, 0), - new PsoStructureEntryInfo((MetaName)2101619543, PsoDataType.UInt, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldDisplayReticule, PsoDataType.Bool, 154, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldMakeFollowPedHeadInvisible, PsoDataType.Bool, 155, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldCopyVehicleCameraMotionBlur, PsoDataType.Bool, 156, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeToSpendOccluded, PsoDataType.UInt, 160, 0, 0), new PsoStructureEntryInfo(MetaName.CollisionRadius, PsoDataType.Float, 164, 0, 0), - new PsoStructureEntryInfo((MetaName)2763528752, PsoDataType.Float, 168, 0, 0), - new PsoStructureEntryInfo((MetaName)2106075408, PsoDataType.Bool, 172, 0, 0), - new PsoStructureEntryInfo((MetaName)2642729834, PsoDataType.Float, 176, 0, 0), - new PsoStructureEntryInfo((MetaName)102161666, PsoDataType.Float, 180, 0, 0), - new PsoStructureEntryInfo((MetaName)753638141, PsoDataType.Float, 184, 0, 0), - new PsoStructureEntryInfo((MetaName)851393034, PsoDataType.Float, 188, 0, 0) + new PsoStructureEntryInfo(MetaName.RadiusScalingForOcclusionTest, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldTestForClipping, PsoDataType.Bool, 172, 0, 0), + new PsoStructureEntryInfo(MetaName.RadiusScalingForClippingTest, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForWaterClippingTest, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForRiverWaterClippingTest, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHeightAboveWater, PsoDataType.Float, 188, 0, 0) ); case MetaName.camFollowPedCameraMetadata: return new PsoStructureInfo(MetaName.camFollowPedCameraMetadata, 0, 0, 2288, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2884954151, PsoDataType.String, 32, 7, 0), - new PsoStructureEntryInfo((MetaName)730193180, PsoDataType.String, 36, 7, 0), - new PsoStructureEntryInfo((MetaName)1443569911, PsoDataType.String, 40, 7, 0), - new PsoStructureEntryInfo((MetaName)60641442, PsoDataType.String, 44, 7, 0), - new PsoStructureEntryInfo((MetaName)1865815245, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2755051531, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ControlHelperRef, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo(MetaName.HintHelperRef, PsoDataType.String, 36, 7, 0), + new PsoStructureEntryInfo(MetaName.CatchUpHelperRef, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo(MetaName.BaseAttachVelocityToIgnoreEnvelopeRef, PsoDataType.String, 44, 7, 0), + new PsoStructureEntryInfo(MetaName.BaseFov, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseNearClip, PsoDataType.Float, 52, 0, 0), new PsoStructureEntryInfo((MetaName)3305154880, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)2846809829, PsoDataType.Bool, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)3002500493, PsoDataType.Bool, 61, 0, 0), - new PsoStructureEntryInfo((MetaName)2521592812, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)4067016949, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldOrbitRelativeToAttachParentOrientation, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldPersistOrbitOrientationRelativeToAttachParent, PsoDataType.Bool, 61, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentMatrixForRelativeOrbitSpringConstant, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentMatrixForRelativeOrbitSpringDampingRatio, PsoDataType.Float, 68, 0, 0), new PsoStructureEntryInfo((MetaName)2406229624, PsoDataType.Float, 72, 0, 0), new PsoStructureEntryInfo((MetaName)727876548, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)3039556728, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)1708190798, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)1190961214, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)897419234, PsoDataType.UInt, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)150825038, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)4033450681, PsoDataType.Bool, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)2058076685, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)488216999, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)1406371922, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)2814402846, PsoDataType.String, 116, 7, 0), - new PsoStructureEntryInfo((MetaName)372575308, PsoDataType.Bool, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)799910142, PsoDataType.Bool, 121, 0, 0), - new PsoStructureEntryInfo((MetaName)1933402526, PsoDataType.Bool, 122, 0, 0), - new PsoStructureEntryInfo((MetaName)1022007033, PsoDataType.Structure, 128, 0, MetaName.camThirdPersonCameraMetadataCustomBoundingBoxSettings), - new PsoStructureEntryInfo((MetaName)2861227361, PsoDataType.Bool, 152, 0, 0), - new PsoStructureEntryInfo((MetaName)1148495425, PsoDataType.Float, 156, 0, 0), - new PsoStructureEntryInfo((MetaName)536202543, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)1065618425, PsoDataType.Structure, 176, 0, MetaName.camThirdPersonCameraMetadataBasePivotPosition), - new PsoStructureEntryInfo((MetaName)3256568637, PsoDataType.Structure, 272, 0, MetaName.camThirdPersonCameraMetadataPivotPosition), - new PsoStructureEntryInfo((MetaName)588927535, PsoDataType.Structure, 320, 0, MetaName.camThirdPersonCameraMetadataPivotOverBoungingBoxSettings), - new PsoStructureEntryInfo((MetaName)2014345705, PsoDataType.Float, 344, 0, 0), - new PsoStructureEntryInfo((MetaName)3982287448, PsoDataType.Float, 348, 0, 0), - new PsoStructureEntryInfo((MetaName)2449849624, PsoDataType.Float, 352, 0, 0), - new PsoStructureEntryInfo((MetaName)695725580, PsoDataType.Float, 356, 0, 0), - new PsoStructureEntryInfo((MetaName)1397182427, PsoDataType.Float, 360, 0, 0), - new PsoStructureEntryInfo((MetaName)881872463, PsoDataType.Bool, 364, 0, 0), - new PsoStructureEntryInfo((MetaName)177572622, PsoDataType.Float, 368, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAttachParentSubmergedLevelToApplyFullAttachParentMatrixForRelativeOrbit, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAircraftGroundSpeedToApplyFullAttachParentMatrixForRelativeOrbit, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAircraftContactSpeedToApplyFullAttachParentMatrixForRelativeOrbit, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHoldTimeToBlockFullAttachParentMatrixForRelativeOrbit, PsoDataType.UInt, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAttachParentSpeedToClonePitchFromCinematicMountedCameras, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseCustomFramingInTightSpace, PsoDataType.Bool, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAttachSpeedToUpdateTightSpaceLevel, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.TightSpaceSpringConstant, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.TightSpaceSpringDampingRatio, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.DofSettingsInTightSpace, PsoDataType.String, 116, 7, 0), + new PsoStructureEntryInfo(MetaName.ShouldAttachToParentCentreOfGravity, PsoDataType.Bool, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseDynamicCentreOfGravity, PsoDataType.Bool, 121, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreVelocityOfAttachParentAttachEntity, PsoDataType.Bool, 122, 0, 0), + new PsoStructureEntryInfo(MetaName.CustomBoundingBoxSettings, PsoDataType.Structure, 128, 0, MetaName.camThirdPersonCameraMetadataCustomBoundingBoxSettings), + new PsoStructureEntryInfo(MetaName.ShouldApplyAttachPedPelvisOffset, PsoDataType.Bool, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachPedPelvisOffsetSpringConstant, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachPedPelvisOffsetSpringDampingRatio, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.BasePivotPosition, PsoDataType.Structure, 176, 0, MetaName.camThirdPersonCameraMetadataBasePivotPosition), + new PsoStructureEntryInfo(MetaName.PivotPosition, PsoDataType.Structure, 272, 0, MetaName.camThirdPersonCameraMetadataPivotPosition), + new PsoStructureEntryInfo(MetaName.PivotOverBoundingBoxSettings, PsoDataType.Structure, 320, 0, MetaName.camThirdPersonCameraMetadataPivotOverBoungingBoxSettings), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMinFootRoom, PsoDataType.Float, 344, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMaxFootRoom, PsoDataType.Float, 348, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMinFootRoomInTightSpace, PsoDataType.Float, 352, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMaxFootRoomInTightSpace, PsoDataType.Float, 356, 0, 0), + new PsoStructureEntryInfo(MetaName.BasePivotHeightScalingForFootRoom, PsoDataType.Float, 360, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreVerticalPivotOffsetForFootRoom, PsoDataType.Bool, 364, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSafeOrbitDistanceScalingForExtensions, PsoDataType.Float, 368, 0, 0), new PsoStructureEntryInfo((MetaName)560700931, PsoDataType.Float, 372, 0, 0), - new PsoStructureEntryInfo((MetaName)1828892401, PsoDataType.Float2, 376, 0, 0), - new PsoStructureEntryInfo((MetaName)2829148759, PsoDataType.Float, 384, 0, 0), - new PsoStructureEntryInfo((MetaName)1084689577, PsoDataType.Float, 388, 0, 0), - new PsoStructureEntryInfo((MetaName)3978450060, PsoDataType.Float, 392, 0, 0), - new PsoStructureEntryInfo((MetaName)1991191506, PsoDataType.Structure, 400, 0, MetaName.camThirdPersonCameraMetadataBuoyancySettings), - new PsoStructureEntryInfo((MetaName)1949881438, PsoDataType.Bool, 448, 0, 0), - new PsoStructureEntryInfo((MetaName)3863307203, PsoDataType.Bool, 449, 0, 0), - new PsoStructureEntryInfo((MetaName)3696538081, PsoDataType.Bool, 450, 0, 0), - new PsoStructureEntryInfo((MetaName)2213127338, PsoDataType.Bool, 451, 0, 0), - new PsoStructureEntryInfo((MetaName)724966028, PsoDataType.Bool, 452, 0, 0), - new PsoStructureEntryInfo((MetaName)2696635175, PsoDataType.Float, 456, 0, 0), - new PsoStructureEntryInfo((MetaName)1976571596, PsoDataType.Float, 460, 0, 0), - new PsoStructureEntryInfo((MetaName)551575094, PsoDataType.Float, 464, 0, 0), - new PsoStructureEntryInfo((MetaName)1557769430, PsoDataType.Float, 468, 0, 0), - new PsoStructureEntryInfo((MetaName)4155454260, PsoDataType.Float3, 480, 0, 0), + new PsoStructureEntryInfo(MetaName.CustomOrbitDistanceLimitsToForce, PsoDataType.Float2, 376, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceLimitSpringConstant, PsoDataType.Float, 384, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceLimitSpringDampingRatio, PsoDataType.Float, 388, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceScalingForCustomFirstPersonFallBack, PsoDataType.Float, 392, 0, 0), + new PsoStructureEntryInfo(MetaName.BuoyancySettings, PsoDataType.Structure, 400, 0, MetaName.camThirdPersonCameraMetadataBuoyancySettings), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreCollisionWithAttachParent, PsoDataType.Bool, 448, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreCollisionWithFollowVehicle, PsoDataType.Bool, 449, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreFollowVehicleForCollisionOrigin, PsoDataType.Bool, 450, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreFollowVehicleForCollisionRoot, PsoDataType.Bool, 451, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldPushBeyondAttachParentIfClipping, PsoDataType.Bool, 452, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxCollisionTestRadius, PsoDataType.Float, 456, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSafeRadiusReductionWithinPedMoverCapsule, PsoDataType.Float, 460, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionTestRadiusSpringConstant, PsoDataType.Float, 464, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionTestRadiusSpringDampingRatio, PsoDataType.Float, 468, 0, 0), + new PsoStructureEntryInfo(MetaName.CustomCollisionOriginRelativePosition, PsoDataType.Float3, 480, 0, 0), new PsoStructureEntryInfo((MetaName)4194152221, PsoDataType.Float3, 496, 0, 0), - new PsoStructureEntryInfo((MetaName)2702878862, PsoDataType.Bool, 512, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseCustomCollisionOrigin, PsoDataType.Bool, 512, 0, 0), new PsoStructureEntryInfo((MetaName)1998689777, PsoDataType.Bool, 513, 0, 0), new PsoStructureEntryInfo((MetaName)2235540893, PsoDataType.Bool, 514, 0, 0), new PsoStructureEntryInfo((MetaName)3479639237, PsoDataType.Float3, 528, 0, 0), new PsoStructureEntryInfo((MetaName)1496115250, PsoDataType.Float, 544, 0, 0), - new PsoStructureEntryInfo((MetaName)340312382, PsoDataType.Structure, 552, 0, MetaName.camThirdPersonCameraMetadataCollisionFallBackPosition), - new PsoStructureEntryInfo((MetaName)4279727627, PsoDataType.Float, 592, 0, 0), - new PsoStructureEntryInfo((MetaName)823526659, PsoDataType.Bool, 596, 0, 0), - new PsoStructureEntryInfo((MetaName)3507950586, PsoDataType.Float, 600, 0, 0), - new PsoStructureEntryInfo((MetaName)3397058689, PsoDataType.Float, 604, 0, 0), - new PsoStructureEntryInfo((MetaName)227846107, PsoDataType.Structure, 608, 0, MetaName.camThirdPersonCameraMetadataVehicleOnTopOfVehicleCollisionSettings), - new PsoStructureEntryInfo((MetaName)3658085406, PsoDataType.Float, 632, 0, 0), - new PsoStructureEntryInfo((MetaName)1654683326, PsoDataType.Float2, 636, 0, 0), - new PsoStructureEntryInfo((MetaName)1974814289, PsoDataType.Float2, 644, 0, 0), - new PsoStructureEntryInfo((MetaName)1778852906, PsoDataType.Float, 652, 0, 0), - new PsoStructureEntryInfo((MetaName)158553507, PsoDataType.Float, 656, 0, 0), - new PsoStructureEntryInfo((MetaName)3300166924, PsoDataType.Structure, 664, 0, MetaName.camThirdPersonCameraMetadataLookOverSettings), - new PsoStructureEntryInfo((MetaName)2793581079, PsoDataType.Bool, 688, 0, 0), - new PsoStructureEntryInfo((MetaName)2111969249, PsoDataType.Float2, 692, 0, 0), - new PsoStructureEntryInfo((MetaName)3068587259, PsoDataType.Float, 700, 0, 0), - new PsoStructureEntryInfo((MetaName)293341517, PsoDataType.Float, 704, 0, 0), - new PsoStructureEntryInfo((MetaName)3607038158, PsoDataType.Float, 708, 0, 0), - new PsoStructureEntryInfo((MetaName)4039533147, PsoDataType.Float2, 712, 0, 0), - new PsoStructureEntryInfo((MetaName)1356521412, PsoDataType.Float2, 720, 0, 0), - new PsoStructureEntryInfo((MetaName)3610920953, PsoDataType.Structure, 728, 0, MetaName.camThirdPersonCameraMetadataStealthZoomSettings), + new PsoStructureEntryInfo(MetaName.CollisionFallBackPosition, PsoDataType.Structure, 552, 0, MetaName.camThirdPersonCameraMetadataCollisionFallBackPosition), + new PsoStructureEntryInfo(MetaName.CollisionRootPositionFallBackToPivotBlendValue, PsoDataType.Float, 592, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldConstrainCollisionRootPositionAgainstClippingTypes, PsoDataType.Bool, 596, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionRootPositionSpringConstant, PsoDataType.Float, 600, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionRootPositionSpringDampingRatio, PsoDataType.Float, 604, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleOnTopOfVehicleCollisionSettings, PsoDataType.Structure, 608, 0, MetaName.camThirdPersonCameraMetadataVehicleOnTopOfVehicleCollisionSettings), + new PsoStructureEntryInfo(MetaName.IdealHeadingOffsetForLimiting, PsoDataType.Float, 632, 0, 0), + new PsoStructureEntryInfo(MetaName.RelativeOrbitHeadingLimits, PsoDataType.Float2, 636, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitPitchLimits, PsoDataType.Float2, 644, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseOrbitPitchOffset, PsoDataType.Float, 652, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseOrbitPitchOffsetInTightSpace, PsoDataType.Float, 656, 0, 0), + new PsoStructureEntryInfo(MetaName.LookOverSettings, PsoDataType.Structure, 664, 0, MetaName.camThirdPersonCameraMetadataLookOverSettings), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreAttachParentPitchForLookBehind, PsoDataType.Bool, 688, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceLimitsForBasePosition, PsoDataType.Float2, 692, 0, 0), + new PsoStructureEntryInfo(MetaName.PreToPostCollisionLookAtOrientationBlendValue, PsoDataType.Float, 700, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRollSpringConstant, PsoDataType.Float, 704, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRollSpringDampingRatio, PsoDataType.Float, 708, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRollDampingPitchSoftLimits, PsoDataType.Float2, 712, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRollDampingPitchHardLimits, PsoDataType.Float2, 720, 0, 0), + new PsoStructureEntryInfo(MetaName.StealthZoomSettings, PsoDataType.Structure, 728, 0, MetaName.camThirdPersonCameraMetadataStealthZoomSettings), new PsoStructureEntryInfo((MetaName)1947299079, PsoDataType.Structure, 752, 0, MetaName.camThirdPersonCameraMetadataQuadrupedalHeightSpring), - new PsoStructureEntryInfo((MetaName)490368749, PsoDataType.String, 776, 7, 0), + new PsoStructureEntryInfo(MetaName.MotionBlurSettings, PsoDataType.String, 776, 7, 0), new PsoStructureEntryInfo((MetaName)2122226771, PsoDataType.Bool, 780, 0, 0), - new PsoStructureEntryInfo((MetaName)1789219851, PsoDataType.String, 784, 7, 0), - new PsoStructureEntryInfo((MetaName)2224847663, PsoDataType.String, 788, 7, 0), - new PsoStructureEntryInfo((MetaName)2960196386, PsoDataType.String, 792, 7, 0), - new PsoStructureEntryInfo((MetaName)2238897248, PsoDataType.String, 796, 7, 0), - new PsoStructureEntryInfo((MetaName)572898954, PsoDataType.String, 800, 7, 0), - new PsoStructureEntryInfo((MetaName)1256703824, PsoDataType.Bool, 804, 0, 0), - new PsoStructureEntryInfo((MetaName)1394164846, PsoDataType.Structure, 808, 0, MetaName.camFollowCameraMetadataPullAroundSettings), - new PsoStructureEntryInfo((MetaName)914396031, PsoDataType.Structure, 872, 0, MetaName.camFollowCameraMetadataPullAroundSettings), - new PsoStructureEntryInfo((MetaName)4045243730, PsoDataType.Bool, 936, 0, 0), - new PsoStructureEntryInfo((MetaName)3857630189, PsoDataType.Bool, 937, 0, 0), - new PsoStructureEntryInfo((MetaName)2208576746, PsoDataType.Bool, 938, 0, 0), - new PsoStructureEntryInfo((MetaName)3468493382, PsoDataType.Bool, 939, 0, 0), - new PsoStructureEntryInfo((MetaName)3614496996, PsoDataType.Bool, 940, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentInAirEnvelopeRef, PsoDataType.String, 784, 7, 0), + new PsoStructureEntryInfo(MetaName.AttachParentUpwardSpeedScalingOnGroundEnvelopeRef, PsoDataType.String, 788, 7, 0), + new PsoStructureEntryInfo(MetaName.AttachParentUpwardSpeedScalingInAirEnvelopeRef, PsoDataType.String, 792, 7, 0), + new PsoStructureEntryInfo(MetaName.AimBehaviourEnvelopeRef, PsoDataType.String, 796, 7, 0), + new PsoStructureEntryInfo(MetaName.WaterBobShakeRef, PsoDataType.String, 800, 7, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreAttachParentMovementForOrientation, PsoDataType.Bool, 804, 0, 0), + new PsoStructureEntryInfo(MetaName.PullAroundSettings, PsoDataType.Structure, 808, 0, MetaName.camFollowCameraMetadataPullAroundSettings), + new PsoStructureEntryInfo(MetaName.PullAroundSettingsForLookBehind, PsoDataType.Structure, 872, 0, MetaName.camFollowCameraMetadataPullAroundSettings), + new PsoStructureEntryInfo(MetaName.ShouldConsiderAttachParentLocalXYVelocityForPullAround, PsoDataType.Bool, 936, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldConsiderAttachParentForwardSpeedForPullAround, PsoDataType.Bool, 937, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldPullAroundToAttachParentFront, PsoDataType.Bool, 938, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldPullAroundToBasicAttachParentMatrix, PsoDataType.Bool, 939, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldPullAroundUsingSimpleSpringDamping, PsoDataType.Bool, 940, 0, 0), new PsoStructureEntryInfo((MetaName)2671392542, PsoDataType.Bool, 941, 0, 0), - new PsoStructureEntryInfo((MetaName)2127124229, PsoDataType.Float, 944, 0, 0), - new PsoStructureEntryInfo((MetaName)2098973612, PsoDataType.Bool, 948, 0, 0), - new PsoStructureEntryInfo((MetaName)1014809841, PsoDataType.Float, 952, 0, 0), - new PsoStructureEntryInfo((MetaName)2563263345, PsoDataType.Float, 956, 0, 0), - new PsoStructureEntryInfo((MetaName)1914871967, PsoDataType.Float2, 960, 0, 0), - new PsoStructureEntryInfo((MetaName)3594576614, PsoDataType.Float, 968, 0, 0), - new PsoStructureEntryInfo((MetaName)1880225385, PsoDataType.Float, 972, 0, 0), - new PsoStructureEntryInfo((MetaName)1487131765, PsoDataType.Float, 976, 0, 0), - new PsoStructureEntryInfo((MetaName)2018965896, PsoDataType.Float, 980, 0, 0), - new PsoStructureEntryInfo((MetaName)1286077706, PsoDataType.Float, 984, 0, 0), - new PsoStructureEntryInfo((MetaName)70382085, PsoDataType.Structure, 992, 0, MetaName.camFollowCameraMetadataFollowOrientationConing), - new PsoStructureEntryInfo((MetaName)4214646062, PsoDataType.Structure, 1024, 0, MetaName.camFollowCameraMetadataRollSettings), - new PsoStructureEntryInfo((MetaName)2054392766, PsoDataType.Structure, 1064, 0, MetaName.camFollowCameraMetadataHighAltitudeZoomSettings), + new PsoStructureEntryInfo(MetaName.MinAttachParentApproachSpeedForPitchLock, PsoDataType.Float, 944, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldLockHeading, PsoDataType.Bool, 948, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxMoveSpeedForFollowOrientation, PsoDataType.Float, 952, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxLookAroundMoveSpeedMultiplier, PsoDataType.Float, 956, 0, 0), + new PsoStructureEntryInfo(MetaName.SpeedLimitsForVerticalMoveSpeedScaling, PsoDataType.Float2, 960, 0, 0), + new PsoStructureEntryInfo(MetaName.VerticalMoveSpeedScaling, PsoDataType.Float, 968, 0, 0), + new PsoStructureEntryInfo(MetaName.VerticalMoveSpeedScalingAtMaxSpeed, PsoDataType.Float, 972, 0, 0), + new PsoStructureEntryInfo(MetaName.UpwardMoveSpeedScalingOnGround, PsoDataType.Float, 976, 0, 0), + new PsoStructureEntryInfo(MetaName.UpwardMoveSpeedScalingInAir, PsoDataType.Float, 980, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxMoveOrientationSpeedDuringLookAround, PsoDataType.Float, 984, 0, 0), + new PsoStructureEntryInfo(MetaName.FollowOrientationConing, PsoDataType.Structure, 992, 0, MetaName.camFollowCameraMetadataFollowOrientationConing), + new PsoStructureEntryInfo(MetaName.RollSettings, PsoDataType.Structure, 1024, 0, MetaName.camFollowCameraMetadataRollSettings), + new PsoStructureEntryInfo(MetaName.HighAltitudeZoomSettings, PsoDataType.Structure, 1064, 0, MetaName.camFollowCameraMetadataHighAltitudeZoomSettings), new PsoStructureEntryInfo((MetaName)1885083576, PsoDataType.Bool, 1104, 0, 0), new PsoStructureEntryInfo((MetaName)1213389792, PsoDataType.Bool, 1105, 0, 0), new PsoStructureEntryInfo((MetaName)473739279, PsoDataType.Float, 1108, 0, 0), - new PsoStructureEntryInfo((MetaName)2513422573, PsoDataType.String, 1112, 7, 0), + new PsoStructureEntryInfo(MetaName.RagdollBlendEnvelopeRef, PsoDataType.String, 1112, 7, 0), new PsoStructureEntryInfo((MetaName)3575968142, PsoDataType.String, 1116, 7, 0), new PsoStructureEntryInfo((MetaName)2291862537, PsoDataType.UInt, 1120, 0, 0), new PsoStructureEntryInfo((MetaName)459469516, PsoDataType.Float, 1124, 0, 0), @@ -2846,8 +2846,8 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)813655062, PsoDataType.Float, 1668, 0, 0), new PsoStructureEntryInfo((MetaName)859959795, PsoDataType.Float, 1672, 0, 0), new PsoStructureEntryInfo((MetaName)2322941924, PsoDataType.Structure, 1680, 0, MetaName.camFollowPedCameraMetadataAssistedMovementAlignment), - new PsoStructureEntryInfo((MetaName)2014258089, PsoDataType.Structure, 1768, 0, MetaName.camFollowPedCameraMetadataLadderAlignment), - new PsoStructureEntryInfo((MetaName)4264482777, PsoDataType.Structure, 1952, 0, MetaName.camFollowPedCameraMetadataRappellingAlignment), + new PsoStructureEntryInfo(MetaName.LadderAlignment, PsoDataType.Structure, 1768, 0, MetaName.camFollowPedCameraMetadataLadderAlignment), + new PsoStructureEntryInfo(MetaName.RappellingAlignment, PsoDataType.Structure, 1952, 0, MetaName.camFollowPedCameraMetadataRappellingAlignment), new PsoStructureEntryInfo((MetaName)215880757, PsoDataType.Bool, 1968, 0, 0), new PsoStructureEntryInfo((MetaName)4161177976, PsoDataType.Structure, 1976, 0, MetaName.camFollowCameraMetadataPullAroundSettings), new PsoStructureEntryInfo((MetaName)2738607365, PsoDataType.Float2, 2040, 0, 0), @@ -2859,7 +2859,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)3895855693, PsoDataType.Float2, 2072, 0, 0), new PsoStructureEntryInfo((MetaName)2344836057, PsoDataType.Structure, 2080, 0, MetaName.camFollowPedCameraMetadataOrbitPitchLimitsForOverheadCollision), new PsoStructureEntryInfo((MetaName)3095276846, PsoDataType.Float, 2112, 0, 0), - new PsoStructureEntryInfo((MetaName)135621085, PsoDataType.Float, 2116, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleEntryExitPitchLevelSmoothRate, PsoDataType.Float, 2116, 0, 0), new PsoStructureEntryInfo((MetaName)2068541596, PsoDataType.Float, 2120, 0, 0), new PsoStructureEntryInfo((MetaName)1699579049, PsoDataType.Structure, 2128, 0, MetaName.camFollowPedCameraMetadataRunningShakeSettings), new PsoStructureEntryInfo((MetaName)498572221, PsoDataType.Structure, 2160, 0, MetaName.camFollowPedCameraMetadataSwimmingShakeSettings), @@ -2869,315 +2869,315 @@ namespace CodeWalker.GameFiles ); case MetaName.camThirdPersonCameraMetadataCustomBoundingBoxSettings: return new PsoStructureInfo(MetaName.camThirdPersonCameraMetadataCustomBoundingBoxSettings, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)1920226182, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2086333922, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)3584381811, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3420511035, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.HeightScaling, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxExtraHeightForVehicleTrailers, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxExtraHeightForTowedVehicles, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHeightAboveVehicleDriverSeat, PsoDataType.Float, 20, 0, 0) ); case MetaName.camThirdPersonCameraMetadataBasePivotPosition: return new PsoStructureInfo(MetaName.camThirdPersonCameraMetadataBasePivotPosition, 0, 0, 96, - new PsoStructureEntryInfo((MetaName)2274949645, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2070771362, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)2923457671, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3748493944, PsoDataType.Bool, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)4214646062, PsoDataType.Structure, 24, 0, MetaName.camThirdPersonCameraMetadataBasePivotPositionRollSettings), - new PsoStructureEntryInfo((MetaName)4287557601, PsoDataType.Float3, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)1581058504, PsoDataType.Bool, 80, 0, 0) + new PsoStructureEntryInfo(MetaName.ShouldUseBaseAttachPosition, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentHeightRatioToAttain, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentHeightRatioToAttainInTightSpace, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldApplyInAttachParentLocalSpace, PsoDataType.Bool, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.RollSettings, PsoDataType.Structure, 24, 0, MetaName.camThirdPersonCameraMetadataBasePivotPositionRollSettings), + new PsoStructureEntryInfo(MetaName.RelativeOffset, PsoDataType.Float3, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldLockVerticalOffset, PsoDataType.Bool, 80, 0, 0) ); case MetaName.camThirdPersonCameraMetadataBasePivotPositionRollSettings: return new PsoStructureInfo(MetaName.camThirdPersonCameraMetadataBasePivotPositionRollSettings, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)4012821505, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2742393958, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)2306378250, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1160632805, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3503009483, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 32, 0, 0) + new PsoStructureEntryInfo(MetaName.ShouldApplyAttachParentRoll, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MinForwardSpeed, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxForwardSpeed, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.AngleScalingFactor, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAngle, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringConstant, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringDampingRatio, PsoDataType.Float, 32, 0, 0) ); case MetaName.camThirdPersonCameraMetadataPivotPosition: return new PsoStructureInfo(MetaName.camThirdPersonCameraMetadataPivotPosition, 0, 0, 48, - new PsoStructureEntryInfo((MetaName)1032707911, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1114870307, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)142271562, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2685248219, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1097326038, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)4000301303, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2968415887, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2278684726, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)3654232577, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.CameraRelativeSideOffset, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.CameraRelativeVerticalOffset, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentWidthScalingForCameraRelativeSideOffset, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentHeightScalingForCameraRelativeVerticalOffset, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.timeAfterAimingToApplyAlternateScalingMin, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.timeAfterAimingToApplyAlternateScalingMax, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.maxDistanceAfterAimingToApplyAlternateScalingMax, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.timeAfterAimingToApplyDistanceBlend, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentHeightScalingForCameraRelativeVerticalOffset_AfterAiming, PsoDataType.Float, 40, 0, 0), new PsoStructureEntryInfo((MetaName)2888330455, PsoDataType.Float, 44, 0, 0) ); case MetaName.camThirdPersonCameraMetadataPivotOverBoungingBoxSettings: return new PsoStructureInfo(MetaName.camThirdPersonCameraMetadataPivotOverBoungingBoxSettings, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)42409501, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2401664616, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)3987821886, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.BlendLevel, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ExtraCameraRelativeVerticalOffset, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentHeightScalingForExtraCameraRelativeVerticalOffset, PsoDataType.Float, 16, 0, 0) ); case MetaName.camThirdPersonCameraMetadataBuoyancySettings: return new PsoStructureInfo(MetaName.camThirdPersonCameraMetadataBuoyancySettings, 0, 0, 48, - new PsoStructureEntryInfo((MetaName)959048093, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1503749012, PsoDataType.UInt, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)3666052486, PsoDataType.UInt, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2560927169, PsoDataType.UInt, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2968196113, PsoDataType.UInt, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2069938157, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1698601922, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2382802886, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)448788827, PsoDataType.Bool, 40, 0, 0) + new PsoStructureEntryInfo(MetaName.ShouldApplyBuoyancy, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDelayBetweenBuoyancyStateChanges, PsoDataType.UInt, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDelayOnSubmerging, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDelayOnSurfacing, PsoDataType.UInt, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeSpentSwimmingToRespectMotionTask, PsoDataType.UInt, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAttachParentDepthUnderWaterToRemainBuoyant, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAttachParentDepthUnderWaterToRemainBuoyantOut, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxCollisionFallBackBlendLevelToForceUnderWater, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldSetBuoyantWhenAttachParentNotFullySubmerged, PsoDataType.Bool, 40, 0, 0) ); case MetaName.camThirdPersonCameraMetadataCollisionFallBackPosition: return new PsoStructureInfo(MetaName.camThirdPersonCameraMetadataCollisionFallBackPosition, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)2070771362, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)296951838, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentHeightRatioToAttain, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAttachParentHeightRatioToPushAwayFromCollision, PsoDataType.Float, 12, 0, 0), new PsoStructureEntryInfo((MetaName)4004666528, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)527029053, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MinBlendLevelAfterPushAwayFromCollision, PsoDataType.Float, 20, 0, 0), new PsoStructureEntryInfo((MetaName)31648245, PsoDataType.Float, 24, 0, 0), new PsoStructureEntryInfo((MetaName)2702477980, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo((MetaName)20195593, PsoDataType.Bool, 29, 0, 0), - new PsoStructureEntryInfo((MetaName)3748493944, PsoDataType.Bool, 30, 0, 0), - new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 36, 0, 0) + new PsoStructureEntryInfo(MetaName.ShouldApplyInAttachParentLocalSpace, PsoDataType.Bool, 30, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringConstant, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringDampingRatio, PsoDataType.Float, 36, 0, 0) ); case MetaName.camThirdPersonCameraMetadataVehicleOnTopOfVehicleCollisionSettings: return new PsoStructureInfo(MetaName.camThirdPersonCameraMetadataVehicleOnTopOfVehicleCollisionSettings, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)651835053, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2514003172, PsoDataType.UInt, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)3416628233, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.ShouldApply, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDurationToTrackVehicles, PsoDataType.UInt, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.DistanceToTestDownForVehiclesToReject, PsoDataType.Float, 16, 0, 0) ); case MetaName.camThirdPersonCameraMetadataLookOverSettings: return new PsoStructureInfo(MetaName.camThirdPersonCameraMetadataLookOverSettings, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)1206332797, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)4276410337, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)3346546090, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2605085544, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.MinHeight, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxHeight, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.PitchOffsetAtMinHeight, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.PitchOffsetAtMaxHeight, PsoDataType.Float, 20, 0, 0) ); case MetaName.camThirdPersonCameraMetadataStealthZoomSettings: return new PsoStructureInfo(MetaName.camThirdPersonCameraMetadataStealthZoomSettings, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)651835053, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)3357849814, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.ShouldApply, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxZoomFactor, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringConstant, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringDampingRatio, PsoDataType.Float, 20, 0, 0) ); case MetaName.camFollowCameraMetadataPullAroundSettings: return new PsoStructureInfo(MetaName.camFollowCameraMetadataPullAroundSettings, 0, 0, 64, - new PsoStructureEntryInfo((MetaName)3478105571, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1212391588, PsoDataType.Bool, 9, 0, 0), - new PsoStructureEntryInfo((MetaName)3993671513, PsoDataType.Bool, 10, 0, 0), - new PsoStructureEntryInfo((MetaName)3078528158, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)3319639913, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1466199679, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1199102981, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)1332565251, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)4054409124, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2976192130, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)430354724, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)634917686, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)3418263557, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)835784625, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)1088580250, PsoDataType.Float, 56, 0, 0) + new PsoStructureEntryInfo(MetaName.ShouldBlendOutWhenAttachParentIsInAir, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldBlendOutWhenAttachParentIsOnGround, PsoDataType.Bool, 9, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldBlendWithAttachParentMatrixForRelativeOrbitBlend, PsoDataType.Bool, 10, 0, 0), + new PsoStructureEntryInfo(MetaName.HeadingPullAroundMinMoveSpeed, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.HeadingPullAroundMaxMoveSpeed, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.HeadingPullAroundSpeedAtMaxMoveSpeed, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.HeadingPullAroundErrorScalingBlendLevel, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.HeadingPullAroundSpringConstant, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.HeadingPullAroundSpringDampingRatio, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.PitchPullAroundMinMoveSpeed, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.PitchPullAroundMaxMoveSpeed, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.PitchPullAroundSpeedAtMaxMoveSpeed, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.PitchPullAroundErrorScalingBlendLevel, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.PitchPullAroundSpringConstant, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.PitchPullAroundSpringDampingRatio, PsoDataType.Float, 56, 0, 0) ); case MetaName.camFollowCameraMetadataFollowOrientationConing: return new PsoStructureInfo(MetaName.camFollowCameraMetadataFollowOrientationConing, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)3503009483, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)69123357, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)2344149746, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAngle, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.AspectRatio, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.HeadingOffset, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo(MetaName.PitchOffset, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1863632928, PsoDataType.Float, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.SmoothRate, PsoDataType.Float, 24, 0, 0) ); case MetaName.camFollowCameraMetadataRollSettings: return new PsoStructureInfo(MetaName.camFollowCameraMetadataRollSettings, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)436250856, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)261121990, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)1003830880, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2742393958, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2306378250, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2238978991, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1361361101, PsoDataType.Float, 32, 0, 0) + new PsoStructureEntryInfo(MetaName.ShouldApplyRoll, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.RollSpringConstant, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.RollSpringDampRatio, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MinForwardSpeed, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxForwardSpeed, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.RollAngleScale, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRoll, PsoDataType.Float, 32, 0, 0) ); case MetaName.camFollowCameraMetadataHighAltitudeZoomSettings: return new PsoStructureInfo(MetaName.camFollowCameraMetadataHighAltitudeZoomSettings, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)4256613730, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2362779209, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)785828068, PsoDataType.Float, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.MinAltitudeDelta, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAltitudeDelta, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringConstant, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringDampingRatio, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxBaseFovScaling, PsoDataType.Float, 24, 0, 0) ); case MetaName.camFollowPedCameraMetadataCustomViewModeSettings: return new PsoStructureInfo(MetaName.camFollowPedCameraMetadataCustomViewModeSettings, 0, 0, 24, new PsoStructureEntryInfo((MetaName)4026985674, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2014345705, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)3982287448, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1778852906, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.ScreenRatioForMinFootRoom, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMaxFootRoom, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseOrbitPitchOffset, PsoDataType.Float, 20, 0, 0) ); case MetaName.camFollowPedCameraMetadataAssistedMovementAlignment: return new PsoStructureInfo(MetaName.camFollowPedCameraMetadataAssistedMovementAlignment, 0, 0, 88, - new PsoStructureEntryInfo((MetaName)2033261313, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldAlign, PsoDataType.Bool, 8, 0, 0), new PsoStructureEntryInfo((MetaName)2541847736, PsoDataType.String, 12, 7, 0), new PsoStructureEntryInfo((MetaName)3143901835, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo((MetaName)2602308947, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1394164846, PsoDataType.Structure, 24, 0, MetaName.camFollowCameraMetadataPullAroundSettings) + new PsoStructureEntryInfo(MetaName.PullAroundSettings, PsoDataType.Structure, 24, 0, MetaName.camFollowCameraMetadataPullAroundSettings) ); case MetaName.camFollowPedCameraMetadataLadderAlignment: return new PsoStructureInfo(MetaName.camFollowPedCameraMetadataLadderAlignment, 0, 0, 184, - new PsoStructureEntryInfo((MetaName)2033261313, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldAlign, PsoDataType.Bool, 8, 0, 0), new PsoStructureEntryInfo((MetaName)2541847736, PsoDataType.String, 12, 7, 0), - new PsoStructureEntryInfo((MetaName)1654683326, PsoDataType.Float2, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1974814289, PsoDataType.Float2, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.RelativeOrbitHeadingLimits, PsoDataType.Float2, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitPitchLimits, PsoDataType.Float2, 24, 0, 0), new PsoStructureEntryInfo((MetaName)261180327, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)3594576614, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.VerticalMoveSpeedScaling, PsoDataType.Float, 36, 0, 0), new PsoStructureEntryInfo((MetaName)666447554, PsoDataType.Float, 40, 0, 0), new PsoStructureEntryInfo((MetaName)4131471736, PsoDataType.UInt, 44, 0, 0), new PsoStructureEntryInfo((MetaName)3980517625, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)1394164846, PsoDataType.Structure, 56, 0, MetaName.camFollowCameraMetadataPullAroundSettings), + new PsoStructureEntryInfo(MetaName.PullAroundSettings, PsoDataType.Structure, 56, 0, MetaName.camFollowCameraMetadataPullAroundSettings), new PsoStructureEntryInfo((MetaName)738690141, PsoDataType.Structure, 120, 0, MetaName.camFollowCameraMetadataPullAroundSettings) ); case MetaName.camFollowPedCameraMetadataRappellingAlignment: return new PsoStructureInfo(MetaName.camFollowPedCameraMetadataRappellingAlignment, 0, 0, 16, - new PsoStructureEntryInfo((MetaName)2033261313, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldAlign, PsoDataType.Bool, 8, 0, 0), new PsoStructureEntryInfo((MetaName)261180327, PsoDataType.Float, 12, 0, 0) ); case MetaName.camFollowPedCameraMetadataOrbitPitchLimitsForOverheadCollision: return new PsoStructureInfo(MetaName.camFollowPedCameraMetadataOrbitPitchLimitsForOverheadCollision, 0, 0, 32, new PsoStructureEntryInfo((MetaName)1746008730, PsoDataType.Float2, 8, 0, 0), new PsoStructureEntryInfo((MetaName)256117257, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.SpringConstant, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringDampingRatio, PsoDataType.Float, 24, 0, 0) ); case MetaName.camFollowPedCameraMetadataRunningShakeSettings: return new PsoStructureInfo(MetaName.camFollowPedCameraMetadataRunningShakeSettings, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3172666582, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)272708601, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.MinAmplitude, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAmplitude, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo((MetaName)491218034, PsoDataType.Float, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2700987639, PsoDataType.Float, 24, 0, 0) ); case MetaName.camFollowPedCameraMetadataSwimmingShakeSettings: return new PsoStructureInfo(MetaName.camFollowPedCameraMetadataSwimmingShakeSettings, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3172666582, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)272708601, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.MinAmplitude, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAmplitude, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo((MetaName)491218034, PsoDataType.Float, 20, 0, 0), new PsoStructureEntryInfo((MetaName)1443947683, PsoDataType.Float, 24, 0, 0), new PsoStructureEntryInfo((MetaName)2015392943, PsoDataType.Float, 28, 0, 0) ); case MetaName.camFollowPedCameraMetadataDivingShakeSettings: return new PsoStructureInfo(MetaName.camFollowPedCameraMetadataDivingShakeSettings, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1206332797, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)4276410337, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3172666582, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)272708601, PsoDataType.Float, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.MinHeight, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxHeight, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAmplitude, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAmplitude, PsoDataType.Float, 24, 0, 0) ); case MetaName.camFollowPedCameraMetadataHighFallShakeSettings: return new PsoStructureInfo(MetaName.camFollowPedCameraMetadataHighFallShakeSettings, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1724998945, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.MinSpeed, PsoDataType.Float, 12, 0, 0), new PsoStructureEntryInfo(MetaName.MaxSpeed, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)272708601, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxAmplitude, PsoDataType.Float, 20, 0, 0) ); case MetaName.camFollowPedCameraMetadataPushBeyondNearbyVehiclesInRagdollSettings: return new PsoStructureInfo(MetaName.camFollowPedCameraMetadataPushBeyondNearbyVehiclesInRagdollSettings, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)2514003172, PsoDataType.UInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDurationToTrackVehicles, PsoDataType.UInt, 8, 0, 0), new PsoStructureEntryInfo((MetaName)1159487467, PsoDataType.Float, 12, 0, 0), new PsoStructureEntryInfo((MetaName)2913317904, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo((MetaName)752814960, PsoDataType.Float, 20, 0, 0), new PsoStructureEntryInfo((MetaName)1115262693, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)4278404079, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3416628233, PsoDataType.Float, 32, 0, 0) + new PsoStructureEntryInfo(MetaName.DetectionRadius, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.DistanceToTestDownForVehiclesToReject, PsoDataType.Float, 32, 0, 0) ); case MetaName.camCollisionMetadata: return new PsoStructureInfo(MetaName.camCollisionMetadata, 0, 0, 240, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1921983042, PsoDataType.Bool, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3325779817, PsoDataType.Bool, 17, 0, 0), - new PsoStructureEntryInfo((MetaName)1510673380, PsoDataType.Bool, 18, 0, 0), - new PsoStructureEntryInfo((MetaName)1756495672, PsoDataType.Bool, 19, 0, 0), - new PsoStructureEntryInfo((MetaName)2762175909, PsoDataType.Bool, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1356103878, PsoDataType.Bool, 21, 0, 0), - new PsoStructureEntryInfo((MetaName)2656848273, PsoDataType.Bool, 22, 0, 0), - new PsoStructureEntryInfo((MetaName)1973279102, PsoDataType.Bool, 23, 0, 0), - new PsoStructureEntryInfo((MetaName)1876340735, PsoDataType.Bool, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)1207465912, PsoDataType.Structure, 32, 0, MetaName.camCollisionMetadataOcclusionSweep), - new PsoStructureEntryInfo((MetaName)394936210, PsoDataType.Structure, 72, 0, MetaName.camCollisionMetadataPathFinding), - new PsoStructureEntryInfo((MetaName)1899363737, PsoDataType.Structure, 88, 0, MetaName.camCollisionMetadataRotationTowardsLos), - new PsoStructureEntryInfo((MetaName)337202266, PsoDataType.Structure, 104, 0, MetaName.camCollisionMetadataOrbitDistanceDamping), - new PsoStructureEntryInfo((MetaName)185739126, PsoDataType.Structure, 136, 0, MetaName.camCollisionMetadataClippingAvoidance), - new PsoStructureEntryInfo((MetaName)1991191506, PsoDataType.Structure, 152, 0, MetaName.camCollisionMetadataBuoyancySettings), - new PsoStructureEntryInfo((MetaName)2276761303, PsoDataType.Structure, 184, 0, MetaName.camCollisionMetadataPushBeyondEntitiesIfClipping), - new PsoStructureEntryInfo((MetaName)333745998, PsoDataType.Structure, 216, 0, MetaName.camCollisionMetadataPullBackTowardsCollision) + new PsoStructureEntryInfo(MetaName.ShouldIgnoreOcclusionWithBrokenFragments, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreOcclusionWithBrokenFragmentsOfIgnoredEntities, PsoDataType.Bool, 17, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldMoveTowardsLos, PsoDataType.Bool, 18, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldSweepToAvoidPopIn, PsoDataType.Bool, 19, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldPersistPopInBehaviour, PsoDataType.Bool, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldPullBackByCapsuleRadius, PsoDataType.Bool, 21, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreOcclusionWithSelectCollision, PsoDataType.Bool, 22, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreOcclusionWithRagdolls, PsoDataType.Bool, 23, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldReportAsCameraTypeTest, PsoDataType.Bool, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.OcclusionSweep, PsoDataType.Structure, 32, 0, MetaName.camCollisionMetadataOcclusionSweep), + new PsoStructureEntryInfo(MetaName.PathFinding, PsoDataType.Structure, 72, 0, MetaName.camCollisionMetadataPathFinding), + new PsoStructureEntryInfo(MetaName.RotationTowardsLos, PsoDataType.Structure, 88, 0, MetaName.camCollisionMetadataRotationTowardsLos), + new PsoStructureEntryInfo(MetaName.OrbitDistanceDamping, PsoDataType.Structure, 104, 0, MetaName.camCollisionMetadataOrbitDistanceDamping), + new PsoStructureEntryInfo(MetaName.ClippingAvoidance, PsoDataType.Structure, 136, 0, MetaName.camCollisionMetadataClippingAvoidance), + new PsoStructureEntryInfo(MetaName.BuoyancySettings, PsoDataType.Structure, 152, 0, MetaName.camCollisionMetadataBuoyancySettings), + new PsoStructureEntryInfo(MetaName.PushBeyondEntitiesIfClipping, PsoDataType.Structure, 184, 0, MetaName.camCollisionMetadataPushBeyondEntitiesIfClipping), + new PsoStructureEntryInfo(MetaName.PullBackTowardsCollision, PsoDataType.Structure, 216, 0, MetaName.camCollisionMetadataPullBackTowardsCollision) ); case MetaName.camCollisionMetadataOcclusionSweep: return new PsoStructureInfo(MetaName.camCollisionMetadataOcclusionSweep, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)2133560880, PsoDataType.UInt, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)35427940, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)4130418064, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2848194588, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1583100448, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)785961650, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1302934580, PsoDataType.Float, 32, 0, 0) + new PsoStructureEntryInfo(MetaName.NumCapsuleTests, PsoDataType.UInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxCollisionRootSpeedToForcePopIn, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPreCollisionCameraSpeedToForcePopIn, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSweepAngleWhenMovingTowardsLos, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSweepAngleWhenAvoidingPopIn, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MinOrientationSpeedToMaintainDirection, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MinCameraMoveSpeedToSweepInDirectionOfTravel, PsoDataType.Float, 32, 0, 0) ); case MetaName.camCollisionMetadataPathFinding: return new PsoStructureInfo(MetaName.camCollisionMetadataPathFinding, 0, 0, 16, - new PsoStructureEntryInfo((MetaName)961760330, PsoDataType.UInt, 8, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxCapsuleTests, PsoDataType.UInt, 8, 0, 0) ); case MetaName.camCollisionMetadataRotationTowardsLos: return new PsoStructureInfo(MetaName.camCollisionMetadataRotationTowardsLos, 0, 0, 16, - new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 12, 0, 0) + new PsoStructureEntryInfo(MetaName.SpringConstant, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringDampingRatio, PsoDataType.Float, 12, 0, 0) ); case MetaName.camCollisionMetadataOrbitDistanceDamping: return new PsoStructureInfo(MetaName.camCollisionMetadataOrbitDistanceDamping, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)4012884170, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2824365723, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1819399769, PsoDataType.Float, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxCollisionRootSpeedToPausePullBack, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPreCollisionCameraSpeedToPausePullBack, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringConstant, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringDampingRatio, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceErrorToIgnore, PsoDataType.Float, 24, 0, 0) ); case MetaName.camCollisionMetadataClippingAvoidance: return new PsoStructureInfo(MetaName.camCollisionMetadataClippingAvoidance, 0, 0, 16, - new PsoStructureEntryInfo((MetaName)3378768739, PsoDataType.UInt, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)322237759, PsoDataType.Float, 12, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxIterations, PsoDataType.UInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.CapsuleLengthForDetection, PsoDataType.Float, 12, 0, 0) ); case MetaName.camCollisionMetadataBuoyancySettings: return new PsoStructureInfo(MetaName.camCollisionMetadataBuoyancySettings, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)959048093, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)134488060, PsoDataType.Bool, 9, 0, 0), - new PsoStructureEntryInfo((MetaName)2252203055, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)3243646861, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2469744276, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3111702866, PsoDataType.Float, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.ShouldApplyBuoyancy, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreBuoyancyStateAndAvoidSurface, PsoDataType.Bool, 9, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHitNormalDotWorldUpForRivers, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.WaterHeightSmoothRate, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHeightAboveWaterWhenBuoyant, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDepthUnderWaterWhenNotBuoyant, PsoDataType.Float, 24, 0, 0) ); case MetaName.camCollisionMetadataPushBeyondEntitiesIfClipping: return new PsoStructureInfo(MetaName.camCollisionMetadataPushBeyondEntitiesIfClipping, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)3893627623, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2688276525, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)1125215459, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2562227249, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)615517883, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ExtraDistanceToPushAway, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceScalingToApplyWhenPushing, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.PullBackSpringConstant, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.PushInSpringConstant, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringDampingRatio, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldAllowOtherCollisionToConstrainCameraIntoEntities, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo((MetaName)925224069, PsoDataType.Bool, 29, 0, 0), new PsoStructureEntryInfo((MetaName)631999118, PsoDataType.Bool, 30, 0, 0) ); case MetaName.camCollisionMetadataPullBackTowardsCollision: return new PsoStructureInfo(MetaName.camCollisionMetadataPullBackTowardsCollision, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)2111282409, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)165735146, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.BlendInSpringConstant, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.BlendOutSpringConstant, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringDampingRatio, PsoDataType.Float, 16, 0, 0) ); case MetaName.camHintHelperMetadata: return new PsoStructureInfo(MetaName.camHintHelperMetadata, 0, 0, 88, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)680981764, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.FovScalar, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo((MetaName)1674069994, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1778852906, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)1974814289, PsoDataType.Float2, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseOrbitPitchOffset, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitPitchLimits, PsoDataType.Float2, 28, 0, 0), new PsoStructureEntryInfo((MetaName)67329582, PsoDataType.Float, 36, 0, 0), new PsoStructureEntryInfo((MetaName)2753181554, PsoDataType.Structure, 40, 0, MetaName.camHintHelperMetadataPivotPositionAdditive), new PsoStructureEntryInfo((MetaName)3051761482, PsoDataType.String, 64, 7, 0), new PsoStructureEntryInfo((MetaName)399304638, PsoDataType.String, 68, 7, 0), new PsoStructureEntryInfo((MetaName)315713489, PsoDataType.Bool, 72, 0, 0), new PsoStructureEntryInfo((MetaName)3421755121, PsoDataType.Bool, 73, 0, 0), - new PsoStructureEntryInfo((MetaName)9436207, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceForLockOn, PsoDataType.Float, 76, 0, 0), new PsoStructureEntryInfo((MetaName)1167921072, PsoDataType.Bool, 80, 0, 0) ); case MetaName.camHintHelperMetadataPivotPositionAdditive: @@ -3191,7 +3191,7 @@ namespace CodeWalker.GameFiles return new PsoStructureInfo(MetaName.camInconsistentBehaviourZoomHelperMetadata, 0, 0, 184, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo((MetaName)2835430912, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3615529910, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxFov, PsoDataType.Float, 20, 0, 0), new PsoStructureEntryInfo((MetaName)192388977, PsoDataType.Structure, 24, 0, MetaName.camInconsistentBehaviourZoomHelperDetectSuddenMovementSettings), new PsoStructureEntryInfo((MetaName)3137016932, PsoDataType.Structure, 64, 0, MetaName.camInconsistentBehaviourZoomHelperDetectFastCameraTurnSettings), new PsoStructureEntryInfo((MetaName)3922359176, PsoDataType.Structure, 104, 0, MetaName.camInconsistentBehaviourZoomHelperAirborneSettings), @@ -3199,8 +3199,8 @@ namespace CodeWalker.GameFiles ); case MetaName.camInconsistentBehaviourZoomHelperDetectSuddenMovementSettings: return new PsoStructureInfo(MetaName.camInconsistentBehaviourZoomHelperDetectSuddenMovementSettings, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)1134622566, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1025142686, PsoDataType.UInt, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldDetect, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ReactionTime, PsoDataType.UInt, 12, 0, 0), new PsoStructureEntryInfo((MetaName)989577416, PsoDataType.UInt, 16, 0, 0), new PsoStructureEntryInfo((MetaName)2226168954, PsoDataType.UInt, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2667621860, PsoDataType.Float, 24, 0, 0), @@ -3208,8 +3208,8 @@ namespace CodeWalker.GameFiles ); case MetaName.camInconsistentBehaviourZoomHelperDetectFastCameraTurnSettings: return new PsoStructureInfo(MetaName.camInconsistentBehaviourZoomHelperDetectFastCameraTurnSettings, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)1134622566, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1025142686, PsoDataType.UInt, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldDetect, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ReactionTime, PsoDataType.UInt, 12, 0, 0), new PsoStructureEntryInfo((MetaName)989577416, PsoDataType.UInt, 16, 0, 0), new PsoStructureEntryInfo((MetaName)2226168954, PsoDataType.UInt, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2667621860, PsoDataType.Float, 24, 0, 0), @@ -3218,8 +3218,8 @@ namespace CodeWalker.GameFiles ); case MetaName.camInconsistentBehaviourZoomHelperAirborneSettings: return new PsoStructureInfo(MetaName.camInconsistentBehaviourZoomHelperAirborneSettings, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)1134622566, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1025142686, PsoDataType.UInt, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldDetect, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ReactionTime, PsoDataType.UInt, 12, 0, 0), new PsoStructureEntryInfo((MetaName)989577416, PsoDataType.UInt, 16, 0, 0), new PsoStructureEntryInfo((MetaName)2226168954, PsoDataType.UInt, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2667621860, PsoDataType.Float, 24, 0, 0), @@ -3227,8 +3227,8 @@ namespace CodeWalker.GameFiles ); case MetaName.camInconsistentBehaviourZoomHelperLosSettings: return new PsoStructureInfo(MetaName.camInconsistentBehaviourZoomHelperLosSettings, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)1134622566, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1025142686, PsoDataType.UInt, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldDetect, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ReactionTime, PsoDataType.UInt, 12, 0, 0), new PsoStructureEntryInfo((MetaName)989577416, PsoDataType.UInt, 16, 0, 0), new PsoStructureEntryInfo((MetaName)2226168954, PsoDataType.UInt, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2667621860, PsoDataType.Float, 24, 0, 0), @@ -3239,7 +3239,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo((MetaName)482340760, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo((MetaName)1046944473, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2387941002, PsoDataType.SInt, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.BlendDuration, PsoDataType.SInt, 24, 0, 0), new PsoStructureEntryInfo((MetaName)3764337155, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo((MetaName)2836572250, PsoDataType.Enum, 32, 0, (MetaName)3921015781) ); @@ -3262,334 +3262,334 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo((MetaName)765307181, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo((MetaName)988110708, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1724998945, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSpeed, PsoDataType.Float, 24, 0, 0), new PsoStructureEntryInfo((MetaName)3931376905, PsoDataType.Float, 28, 0, 0), new PsoStructureEntryInfo((MetaName)1623903878, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2306378250, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxForwardSpeed, PsoDataType.Float, 36, 0, 0), new PsoStructureEntryInfo((MetaName)3766959106, PsoDataType.Bool, 40, 0, 0), new PsoStructureEntryInfo((MetaName)88070689, PsoDataType.Float, 44, 0, 0), new PsoStructureEntryInfo((MetaName)1846985178, PsoDataType.Float, 48, 0, 0), new PsoStructureEntryInfo((MetaName)2004585270, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 60, 0, 0) + new PsoStructureEntryInfo(MetaName.SpringConstant, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringDampingRatio, PsoDataType.Float, 60, 0, 0) ); case MetaName.camFollowVehicleCameraMetadata: return new PsoStructureInfo(MetaName.camFollowVehicleCameraMetadata, 0, 0, 1376, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2884954151, PsoDataType.String, 32, 7, 0), - new PsoStructureEntryInfo((MetaName)730193180, PsoDataType.String, 36, 7, 0), - new PsoStructureEntryInfo((MetaName)1443569911, PsoDataType.String, 40, 7, 0), - new PsoStructureEntryInfo((MetaName)60641442, PsoDataType.String, 44, 7, 0), - new PsoStructureEntryInfo((MetaName)1865815245, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2755051531, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ControlHelperRef, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo(MetaName.HintHelperRef, PsoDataType.String, 36, 7, 0), + new PsoStructureEntryInfo(MetaName.CatchUpHelperRef, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo(MetaName.BaseAttachVelocityToIgnoreEnvelopeRef, PsoDataType.String, 44, 7, 0), + new PsoStructureEntryInfo(MetaName.BaseFov, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseNearClip, PsoDataType.Float, 52, 0, 0), new PsoStructureEntryInfo((MetaName)3305154880, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)2846809829, PsoDataType.Bool, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)3002500493, PsoDataType.Bool, 61, 0, 0), - new PsoStructureEntryInfo((MetaName)2521592812, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)4067016949, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldOrbitRelativeToAttachParentOrientation, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldPersistOrbitOrientationRelativeToAttachParent, PsoDataType.Bool, 61, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentMatrixForRelativeOrbitSpringConstant, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentMatrixForRelativeOrbitSpringDampingRatio, PsoDataType.Float, 68, 0, 0), new PsoStructureEntryInfo((MetaName)2406229624, PsoDataType.Float, 72, 0, 0), new PsoStructureEntryInfo((MetaName)727876548, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)3039556728, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)1708190798, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)1190961214, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)897419234, PsoDataType.UInt, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)150825038, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)4033450681, PsoDataType.Bool, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)2058076685, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)488216999, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)1406371922, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)2814402846, PsoDataType.String, 116, 7, 0), - new PsoStructureEntryInfo((MetaName)372575308, PsoDataType.Bool, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)799910142, PsoDataType.Bool, 121, 0, 0), - new PsoStructureEntryInfo((MetaName)1933402526, PsoDataType.Bool, 122, 0, 0), - new PsoStructureEntryInfo((MetaName)1022007033, PsoDataType.Structure, 128, 0, MetaName.camThirdPersonCameraMetadataCustomBoundingBoxSettings), - new PsoStructureEntryInfo((MetaName)2861227361, PsoDataType.Bool, 152, 0, 0), - new PsoStructureEntryInfo((MetaName)1148495425, PsoDataType.Float, 156, 0, 0), - new PsoStructureEntryInfo((MetaName)536202543, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)1065618425, PsoDataType.Structure, 176, 0, MetaName.camThirdPersonCameraMetadataBasePivotPosition), - new PsoStructureEntryInfo((MetaName)3256568637, PsoDataType.Structure, 272, 0, MetaName.camThirdPersonCameraMetadataPivotPosition), - new PsoStructureEntryInfo((MetaName)588927535, PsoDataType.Structure, 320, 0, MetaName.camThirdPersonCameraMetadataPivotOverBoungingBoxSettings), - new PsoStructureEntryInfo((MetaName)2014345705, PsoDataType.Float, 344, 0, 0), - new PsoStructureEntryInfo((MetaName)3982287448, PsoDataType.Float, 348, 0, 0), - new PsoStructureEntryInfo((MetaName)2449849624, PsoDataType.Float, 352, 0, 0), - new PsoStructureEntryInfo((MetaName)695725580, PsoDataType.Float, 356, 0, 0), - new PsoStructureEntryInfo((MetaName)1397182427, PsoDataType.Float, 360, 0, 0), - new PsoStructureEntryInfo((MetaName)881872463, PsoDataType.Bool, 364, 0, 0), - new PsoStructureEntryInfo((MetaName)177572622, PsoDataType.Float, 368, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAttachParentSubmergedLevelToApplyFullAttachParentMatrixForRelativeOrbit, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAircraftGroundSpeedToApplyFullAttachParentMatrixForRelativeOrbit, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAircraftContactSpeedToApplyFullAttachParentMatrixForRelativeOrbit, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHoldTimeToBlockFullAttachParentMatrixForRelativeOrbit, PsoDataType.UInt, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAttachParentSpeedToClonePitchFromCinematicMountedCameras, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseCustomFramingInTightSpace, PsoDataType.Bool, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAttachSpeedToUpdateTightSpaceLevel, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.TightSpaceSpringConstant, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.TightSpaceSpringDampingRatio, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.DofSettingsInTightSpace, PsoDataType.String, 116, 7, 0), + new PsoStructureEntryInfo(MetaName.ShouldAttachToParentCentreOfGravity, PsoDataType.Bool, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseDynamicCentreOfGravity, PsoDataType.Bool, 121, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreVelocityOfAttachParentAttachEntity, PsoDataType.Bool, 122, 0, 0), + new PsoStructureEntryInfo(MetaName.CustomBoundingBoxSettings, PsoDataType.Structure, 128, 0, MetaName.camThirdPersonCameraMetadataCustomBoundingBoxSettings), + new PsoStructureEntryInfo(MetaName.ShouldApplyAttachPedPelvisOffset, PsoDataType.Bool, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachPedPelvisOffsetSpringConstant, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachPedPelvisOffsetSpringDampingRatio, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.BasePivotPosition, PsoDataType.Structure, 176, 0, MetaName.camThirdPersonCameraMetadataBasePivotPosition), + new PsoStructureEntryInfo(MetaName.PivotPosition, PsoDataType.Structure, 272, 0, MetaName.camThirdPersonCameraMetadataPivotPosition), + new PsoStructureEntryInfo(MetaName.PivotOverBoundingBoxSettings, PsoDataType.Structure, 320, 0, MetaName.camThirdPersonCameraMetadataPivotOverBoungingBoxSettings), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMinFootRoom, PsoDataType.Float, 344, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMaxFootRoom, PsoDataType.Float, 348, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMinFootRoomInTightSpace, PsoDataType.Float, 352, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMaxFootRoomInTightSpace, PsoDataType.Float, 356, 0, 0), + new PsoStructureEntryInfo(MetaName.BasePivotHeightScalingForFootRoom, PsoDataType.Float, 360, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreVerticalPivotOffsetForFootRoom, PsoDataType.Bool, 364, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSafeOrbitDistanceScalingForExtensions, PsoDataType.Float, 368, 0, 0), new PsoStructureEntryInfo((MetaName)560700931, PsoDataType.Float, 372, 0, 0), - new PsoStructureEntryInfo((MetaName)1828892401, PsoDataType.Float2, 376, 0, 0), - new PsoStructureEntryInfo((MetaName)2829148759, PsoDataType.Float, 384, 0, 0), - new PsoStructureEntryInfo((MetaName)1084689577, PsoDataType.Float, 388, 0, 0), - new PsoStructureEntryInfo((MetaName)3978450060, PsoDataType.Float, 392, 0, 0), - new PsoStructureEntryInfo((MetaName)1991191506, PsoDataType.Structure, 400, 0, MetaName.camThirdPersonCameraMetadataBuoyancySettings), - new PsoStructureEntryInfo((MetaName)1949881438, PsoDataType.Bool, 448, 0, 0), - new PsoStructureEntryInfo((MetaName)3863307203, PsoDataType.Bool, 449, 0, 0), - new PsoStructureEntryInfo((MetaName)3696538081, PsoDataType.Bool, 450, 0, 0), - new PsoStructureEntryInfo((MetaName)2213127338, PsoDataType.Bool, 451, 0, 0), - new PsoStructureEntryInfo((MetaName)724966028, PsoDataType.Bool, 452, 0, 0), - new PsoStructureEntryInfo((MetaName)2696635175, PsoDataType.Float, 456, 0, 0), - new PsoStructureEntryInfo((MetaName)1976571596, PsoDataType.Float, 460, 0, 0), - new PsoStructureEntryInfo((MetaName)551575094, PsoDataType.Float, 464, 0, 0), - new PsoStructureEntryInfo((MetaName)1557769430, PsoDataType.Float, 468, 0, 0), - new PsoStructureEntryInfo((MetaName)4155454260, PsoDataType.Float3, 480, 0, 0), + new PsoStructureEntryInfo(MetaName.CustomOrbitDistanceLimitsToForce, PsoDataType.Float2, 376, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceLimitSpringConstant, PsoDataType.Float, 384, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceLimitSpringDampingRatio, PsoDataType.Float, 388, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceScalingForCustomFirstPersonFallBack, PsoDataType.Float, 392, 0, 0), + new PsoStructureEntryInfo(MetaName.BuoyancySettings, PsoDataType.Structure, 400, 0, MetaName.camThirdPersonCameraMetadataBuoyancySettings), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreCollisionWithAttachParent, PsoDataType.Bool, 448, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreCollisionWithFollowVehicle, PsoDataType.Bool, 449, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreFollowVehicleForCollisionOrigin, PsoDataType.Bool, 450, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreFollowVehicleForCollisionRoot, PsoDataType.Bool, 451, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldPushBeyondAttachParentIfClipping, PsoDataType.Bool, 452, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxCollisionTestRadius, PsoDataType.Float, 456, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSafeRadiusReductionWithinPedMoverCapsule, PsoDataType.Float, 460, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionTestRadiusSpringConstant, PsoDataType.Float, 464, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionTestRadiusSpringDampingRatio, PsoDataType.Float, 468, 0, 0), + new PsoStructureEntryInfo(MetaName.CustomCollisionOriginRelativePosition, PsoDataType.Float3, 480, 0, 0), new PsoStructureEntryInfo((MetaName)4194152221, PsoDataType.Float3, 496, 0, 0), - new PsoStructureEntryInfo((MetaName)2702878862, PsoDataType.Bool, 512, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseCustomCollisionOrigin, PsoDataType.Bool, 512, 0, 0), new PsoStructureEntryInfo((MetaName)1998689777, PsoDataType.Bool, 513, 0, 0), new PsoStructureEntryInfo((MetaName)2235540893, PsoDataType.Bool, 514, 0, 0), new PsoStructureEntryInfo((MetaName)3479639237, PsoDataType.Float3, 528, 0, 0), new PsoStructureEntryInfo((MetaName)1496115250, PsoDataType.Float, 544, 0, 0), - new PsoStructureEntryInfo((MetaName)340312382, PsoDataType.Structure, 552, 0, MetaName.camThirdPersonCameraMetadataCollisionFallBackPosition), - new PsoStructureEntryInfo((MetaName)4279727627, PsoDataType.Float, 592, 0, 0), - new PsoStructureEntryInfo((MetaName)823526659, PsoDataType.Bool, 596, 0, 0), - new PsoStructureEntryInfo((MetaName)3507950586, PsoDataType.Float, 600, 0, 0), - new PsoStructureEntryInfo((MetaName)3397058689, PsoDataType.Float, 604, 0, 0), - new PsoStructureEntryInfo((MetaName)227846107, PsoDataType.Structure, 608, 0, MetaName.camThirdPersonCameraMetadataVehicleOnTopOfVehicleCollisionSettings), - new PsoStructureEntryInfo((MetaName)3658085406, PsoDataType.Float, 632, 0, 0), - new PsoStructureEntryInfo((MetaName)1654683326, PsoDataType.Float2, 636, 0, 0), - new PsoStructureEntryInfo((MetaName)1974814289, PsoDataType.Float2, 644, 0, 0), - new PsoStructureEntryInfo((MetaName)1778852906, PsoDataType.Float, 652, 0, 0), - new PsoStructureEntryInfo((MetaName)158553507, PsoDataType.Float, 656, 0, 0), - new PsoStructureEntryInfo((MetaName)3300166924, PsoDataType.Structure, 664, 0, MetaName.camThirdPersonCameraMetadataLookOverSettings), - new PsoStructureEntryInfo((MetaName)2793581079, PsoDataType.Bool, 688, 0, 0), - new PsoStructureEntryInfo((MetaName)2111969249, PsoDataType.Float2, 692, 0, 0), - new PsoStructureEntryInfo((MetaName)3068587259, PsoDataType.Float, 700, 0, 0), - new PsoStructureEntryInfo((MetaName)293341517, PsoDataType.Float, 704, 0, 0), - new PsoStructureEntryInfo((MetaName)3607038158, PsoDataType.Float, 708, 0, 0), - new PsoStructureEntryInfo((MetaName)4039533147, PsoDataType.Float2, 712, 0, 0), - new PsoStructureEntryInfo((MetaName)1356521412, PsoDataType.Float2, 720, 0, 0), - new PsoStructureEntryInfo((MetaName)3610920953, PsoDataType.Structure, 728, 0, MetaName.camThirdPersonCameraMetadataStealthZoomSettings), + new PsoStructureEntryInfo(MetaName.CollisionFallBackPosition, PsoDataType.Structure, 552, 0, MetaName.camThirdPersonCameraMetadataCollisionFallBackPosition), + new PsoStructureEntryInfo(MetaName.CollisionRootPositionFallBackToPivotBlendValue, PsoDataType.Float, 592, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldConstrainCollisionRootPositionAgainstClippingTypes, PsoDataType.Bool, 596, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionRootPositionSpringConstant, PsoDataType.Float, 600, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionRootPositionSpringDampingRatio, PsoDataType.Float, 604, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleOnTopOfVehicleCollisionSettings, PsoDataType.Structure, 608, 0, MetaName.camThirdPersonCameraMetadataVehicleOnTopOfVehicleCollisionSettings), + new PsoStructureEntryInfo(MetaName.IdealHeadingOffsetForLimiting, PsoDataType.Float, 632, 0, 0), + new PsoStructureEntryInfo(MetaName.RelativeOrbitHeadingLimits, PsoDataType.Float2, 636, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitPitchLimits, PsoDataType.Float2, 644, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseOrbitPitchOffset, PsoDataType.Float, 652, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseOrbitPitchOffsetInTightSpace, PsoDataType.Float, 656, 0, 0), + new PsoStructureEntryInfo(MetaName.LookOverSettings, PsoDataType.Structure, 664, 0, MetaName.camThirdPersonCameraMetadataLookOverSettings), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreAttachParentPitchForLookBehind, PsoDataType.Bool, 688, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceLimitsForBasePosition, PsoDataType.Float2, 692, 0, 0), + new PsoStructureEntryInfo(MetaName.PreToPostCollisionLookAtOrientationBlendValue, PsoDataType.Float, 700, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRollSpringConstant, PsoDataType.Float, 704, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRollSpringDampingRatio, PsoDataType.Float, 708, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRollDampingPitchSoftLimits, PsoDataType.Float2, 712, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRollDampingPitchHardLimits, PsoDataType.Float2, 720, 0, 0), + new PsoStructureEntryInfo(MetaName.StealthZoomSettings, PsoDataType.Structure, 728, 0, MetaName.camThirdPersonCameraMetadataStealthZoomSettings), new PsoStructureEntryInfo((MetaName)1947299079, PsoDataType.Structure, 752, 0, MetaName.camThirdPersonCameraMetadataQuadrupedalHeightSpring), - new PsoStructureEntryInfo((MetaName)490368749, PsoDataType.String, 776, 7, 0), + new PsoStructureEntryInfo(MetaName.MotionBlurSettings, PsoDataType.String, 776, 7, 0), new PsoStructureEntryInfo((MetaName)2122226771, PsoDataType.Bool, 780, 0, 0), - new PsoStructureEntryInfo((MetaName)1789219851, PsoDataType.String, 784, 7, 0), - new PsoStructureEntryInfo((MetaName)2224847663, PsoDataType.String, 788, 7, 0), - new PsoStructureEntryInfo((MetaName)2960196386, PsoDataType.String, 792, 7, 0), - new PsoStructureEntryInfo((MetaName)2238897248, PsoDataType.String, 796, 7, 0), - new PsoStructureEntryInfo((MetaName)572898954, PsoDataType.String, 800, 7, 0), - new PsoStructureEntryInfo((MetaName)1256703824, PsoDataType.Bool, 804, 0, 0), - new PsoStructureEntryInfo((MetaName)1394164846, PsoDataType.Structure, 808, 0, MetaName.camFollowCameraMetadataPullAroundSettings), - new PsoStructureEntryInfo((MetaName)914396031, PsoDataType.Structure, 872, 0, MetaName.camFollowCameraMetadataPullAroundSettings), - new PsoStructureEntryInfo((MetaName)4045243730, PsoDataType.Bool, 936, 0, 0), - new PsoStructureEntryInfo((MetaName)3857630189, PsoDataType.Bool, 937, 0, 0), - new PsoStructureEntryInfo((MetaName)2208576746, PsoDataType.Bool, 938, 0, 0), - new PsoStructureEntryInfo((MetaName)3468493382, PsoDataType.Bool, 939, 0, 0), - new PsoStructureEntryInfo((MetaName)3614496996, PsoDataType.Bool, 940, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentInAirEnvelopeRef, PsoDataType.String, 784, 7, 0), + new PsoStructureEntryInfo(MetaName.AttachParentUpwardSpeedScalingOnGroundEnvelopeRef, PsoDataType.String, 788, 7, 0), + new PsoStructureEntryInfo(MetaName.AttachParentUpwardSpeedScalingInAirEnvelopeRef, PsoDataType.String, 792, 7, 0), + new PsoStructureEntryInfo(MetaName.AimBehaviourEnvelopeRef, PsoDataType.String, 796, 7, 0), + new PsoStructureEntryInfo(MetaName.WaterBobShakeRef, PsoDataType.String, 800, 7, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreAttachParentMovementForOrientation, PsoDataType.Bool, 804, 0, 0), + new PsoStructureEntryInfo(MetaName.PullAroundSettings, PsoDataType.Structure, 808, 0, MetaName.camFollowCameraMetadataPullAroundSettings), + new PsoStructureEntryInfo(MetaName.PullAroundSettingsForLookBehind, PsoDataType.Structure, 872, 0, MetaName.camFollowCameraMetadataPullAroundSettings), + new PsoStructureEntryInfo(MetaName.ShouldConsiderAttachParentLocalXYVelocityForPullAround, PsoDataType.Bool, 936, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldConsiderAttachParentForwardSpeedForPullAround, PsoDataType.Bool, 937, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldPullAroundToAttachParentFront, PsoDataType.Bool, 938, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldPullAroundToBasicAttachParentMatrix, PsoDataType.Bool, 939, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldPullAroundUsingSimpleSpringDamping, PsoDataType.Bool, 940, 0, 0), new PsoStructureEntryInfo((MetaName)2671392542, PsoDataType.Bool, 941, 0, 0), - new PsoStructureEntryInfo((MetaName)2127124229, PsoDataType.Float, 944, 0, 0), - new PsoStructureEntryInfo((MetaName)2098973612, PsoDataType.Bool, 948, 0, 0), - new PsoStructureEntryInfo((MetaName)1014809841, PsoDataType.Float, 952, 0, 0), - new PsoStructureEntryInfo((MetaName)2563263345, PsoDataType.Float, 956, 0, 0), - new PsoStructureEntryInfo((MetaName)1914871967, PsoDataType.Float2, 960, 0, 0), - new PsoStructureEntryInfo((MetaName)3594576614, PsoDataType.Float, 968, 0, 0), - new PsoStructureEntryInfo((MetaName)1880225385, PsoDataType.Float, 972, 0, 0), - new PsoStructureEntryInfo((MetaName)1487131765, PsoDataType.Float, 976, 0, 0), - new PsoStructureEntryInfo((MetaName)2018965896, PsoDataType.Float, 980, 0, 0), - new PsoStructureEntryInfo((MetaName)1286077706, PsoDataType.Float, 984, 0, 0), - new PsoStructureEntryInfo((MetaName)70382085, PsoDataType.Structure, 992, 0, MetaName.camFollowCameraMetadataFollowOrientationConing), - new PsoStructureEntryInfo((MetaName)4214646062, PsoDataType.Structure, 1024, 0, MetaName.camFollowCameraMetadataRollSettings), - new PsoStructureEntryInfo((MetaName)2054392766, PsoDataType.Structure, 1064, 0, MetaName.camFollowCameraMetadataHighAltitudeZoomSettings), - new PsoStructureEntryInfo((MetaName)3703185618, PsoDataType.Structure, 1104, 0, MetaName.camFollowVehicleCameraMetadataHandBrakeSwingSettings), - new PsoStructureEntryInfo((MetaName)2946100032, PsoDataType.Structure, 1136, 0, MetaName.camFollowVehicleCameraMetadataDuckUnderOverheadCollisionSettings), - new PsoStructureEntryInfo((MetaName)2646605713, PsoDataType.Structure, 1192, 0, MetaName.camFollowVehicleCameraMetadataHighSpeedZoomSettings), - new PsoStructureEntryInfo((MetaName)3319637384, PsoDataType.Structure, 1224, 0, MetaName.camFollowVehicleCameraMetadataHighSpeedShakeSettings), - new PsoStructureEntryInfo((MetaName)3250603115, PsoDataType.Structure, 1248, 0, MetaName.camFollowVehicleCameraMetadataWaterEntryShakeSettings), - new PsoStructureEntryInfo((MetaName)2663165374, PsoDataType.Structure, 1280, 0, MetaName.camFollowVehicleCameraMetadataVerticalFlightModeSettings), - new PsoStructureEntryInfo((MetaName)3950418303, PsoDataType.Structure, 1296, 0, MetaName.camVehicleCustomSettingsMetadataDoorAlignmentSettings), - new PsoStructureEntryInfo((MetaName)135621085, PsoDataType.Float, 1336, 0, 0), - new PsoStructureEntryInfo((MetaName)4048007163, PsoDataType.Float, 1340, 0, 0), - new PsoStructureEntryInfo((MetaName)2477951883, PsoDataType.Float, 1344, 0, 0), - new PsoStructureEntryInfo((MetaName)1953360151, PsoDataType.Bool, 1348, 0, 0), - new PsoStructureEntryInfo((MetaName)961264130, PsoDataType.String, 1352, 7, 0), + new PsoStructureEntryInfo(MetaName.MinAttachParentApproachSpeedForPitchLock, PsoDataType.Float, 944, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldLockHeading, PsoDataType.Bool, 948, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxMoveSpeedForFollowOrientation, PsoDataType.Float, 952, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxLookAroundMoveSpeedMultiplier, PsoDataType.Float, 956, 0, 0), + new PsoStructureEntryInfo(MetaName.SpeedLimitsForVerticalMoveSpeedScaling, PsoDataType.Float2, 960, 0, 0), + new PsoStructureEntryInfo(MetaName.VerticalMoveSpeedScaling, PsoDataType.Float, 968, 0, 0), + new PsoStructureEntryInfo(MetaName.VerticalMoveSpeedScalingAtMaxSpeed, PsoDataType.Float, 972, 0, 0), + new PsoStructureEntryInfo(MetaName.UpwardMoveSpeedScalingOnGround, PsoDataType.Float, 976, 0, 0), + new PsoStructureEntryInfo(MetaName.UpwardMoveSpeedScalingInAir, PsoDataType.Float, 980, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxMoveOrientationSpeedDuringLookAround, PsoDataType.Float, 984, 0, 0), + new PsoStructureEntryInfo(MetaName.FollowOrientationConing, PsoDataType.Structure, 992, 0, MetaName.camFollowCameraMetadataFollowOrientationConing), + new PsoStructureEntryInfo(MetaName.RollSettings, PsoDataType.Structure, 1024, 0, MetaName.camFollowCameraMetadataRollSettings), + new PsoStructureEntryInfo(MetaName.HighAltitudeZoomSettings, PsoDataType.Structure, 1064, 0, MetaName.camFollowCameraMetadataHighAltitudeZoomSettings), + new PsoStructureEntryInfo(MetaName.HandBrakeSwingSettings, PsoDataType.Structure, 1104, 0, MetaName.camFollowVehicleCameraMetadataHandBrakeSwingSettings), + new PsoStructureEntryInfo(MetaName.DuckUnderOverheadCollisionSettings, PsoDataType.Structure, 1136, 0, MetaName.camFollowVehicleCameraMetadataDuckUnderOverheadCollisionSettings), + new PsoStructureEntryInfo(MetaName.HighSpeedZoomSettings, PsoDataType.Structure, 1192, 0, MetaName.camFollowVehicleCameraMetadataHighSpeedZoomSettings), + new PsoStructureEntryInfo(MetaName.HighSpeedShakeSettings, PsoDataType.Structure, 1224, 0, MetaName.camFollowVehicleCameraMetadataHighSpeedShakeSettings), + new PsoStructureEntryInfo(MetaName.WaterEntryShakeSettings, PsoDataType.Structure, 1248, 0, MetaName.camFollowVehicleCameraMetadataWaterEntryShakeSettings), + new PsoStructureEntryInfo(MetaName.VerticalFlightModeSettings, PsoDataType.Structure, 1280, 0, MetaName.camFollowVehicleCameraMetadataVerticalFlightModeSettings), + new PsoStructureEntryInfo(MetaName.DoorAlignmentSettings, PsoDataType.Structure, 1296, 0, MetaName.camVehicleCustomSettingsMetadataDoorAlignmentSettings), + new PsoStructureEntryInfo(MetaName.VehicleEntryExitPitchLevelSmoothRate, PsoDataType.Float, 1336, 0, 0), + new PsoStructureEntryInfo(MetaName.ExtraOrbitPitchOffsetForHighAngleMode, PsoDataType.Float, 1340, 0, 0), + new PsoStructureEntryInfo(MetaName.ExtraOrbitPitchOffsetForThirdPersonFarViewMode, PsoDataType.Float, 1344, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldForceCutToOrbitDistanceLimitsForThirdPersonFarViewMode, PsoDataType.Bool, 1348, 0, 0), + new PsoStructureEntryInfo(MetaName.ThirdPersonVehicleAimCameraRef, PsoDataType.String, 1352, 7, 0), new PsoStructureEntryInfo((MetaName)4075164277, PsoDataType.Bool, 1356, 0, 0), new PsoStructureEntryInfo((MetaName)2625336677, PsoDataType.String, 1360, 7, 0), new PsoStructureEntryInfo((MetaName)3347720841, PsoDataType.Float2, 1364, 0, 0) ); case MetaName.camFollowVehicleCameraMetadataHandBrakeSwingSettings: return new PsoStructureInfo(MetaName.camFollowVehicleCameraMetadataHandBrakeSwingSettings, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)73888528, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)4191348047, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3579471989, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2084746057, PsoDataType.Float, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.HandBrakeInputEnvelopeRef, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.SpringConstant, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MinLateralSkidSpeed, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxLateralSkidSpeed, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.SwingSpeedAtMaxSkidSpeed, PsoDataType.Float, 24, 0, 0) ); case MetaName.camFollowVehicleCameraMetadataDuckUnderOverheadCollisionSettings: return new PsoStructureInfo(MetaName.camFollowVehicleCameraMetadataDuckUnderOverheadCollisionSettings, 0, 0, 56, - new PsoStructureEntryInfo((MetaName)1811750171, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1848522270, PsoDataType.Bool, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)3105010187, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3073979382, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2803013276, PsoDataType.Structure, 32, 0, MetaName.camFollowVehicleCameraMetadataDuckUnderOverheadCollisionSettingsCapsuleSettings) + new PsoStructureEntryInfo(MetaName.EnvelopeRef, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ShouldDuck, PsoDataType.Bool, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitPitchOffsetWhenFullyDucked, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceToPersist, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringConstant, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.CapsuleSettings, PsoDataType.Structure, 32, 0, MetaName.camFollowVehicleCameraMetadataDuckUnderOverheadCollisionSettingsCapsuleSettings) ); case MetaName.camFollowVehicleCameraMetadataDuckUnderOverheadCollisionSettingsCapsuleSettings: return new PsoStructureInfo(MetaName.camFollowVehicleCameraMetadataDuckUnderOverheadCollisionSettingsCapsuleSettings, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)465899626, PsoDataType.UInt, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)4135147407, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)3479495276, PsoDataType.Float2, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.NumTests, PsoDataType.UInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.LengthScaling, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.OffsetLimits, PsoDataType.Float2, 16, 0, 0) ); case MetaName.camFollowVehicleCameraMetadataHighSpeedZoomSettings: return new PsoStructureInfo(MetaName.camFollowVehicleCameraMetadataHighSpeedZoomSettings, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)2742393958, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2306378250, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)785828068, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)777008740, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2366444870, PsoDataType.Float, 28, 0, 0) + new PsoStructureEntryInfo(MetaName.MinForwardSpeed, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxForwardSpeed, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringConstant, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxBaseFovScaling, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.CutsceneBlendSpringConstant, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.CutsceneBlendSpringDampingRatio, PsoDataType.Float, 28, 0, 0) ); case MetaName.camFollowVehicleCameraMetadataHighSpeedShakeSettings: return new PsoStructureInfo(MetaName.camFollowVehicleCameraMetadataHighSpeedShakeSettings, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2742393958, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)2306378250, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.MinForwardSpeed, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxForwardSpeed, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringConstant, PsoDataType.Float, 20, 0, 0) ); case MetaName.camFollowVehicleCameraMetadataWaterEntryShakeSettings: return new PsoStructureInfo(MetaName.camFollowVehicleCameraMetadataWaterEntryShakeSettings, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2390340428, PsoDataType.UInt, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)1575008605, PsoDataType.Float2, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2371650129, PsoDataType.Float2, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.MaxShakeInstances, PsoDataType.UInt, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.DownwardSpeedLimits, PsoDataType.Float2, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.AmplitudeLimits, PsoDataType.Float2, 24, 0, 0) ); case MetaName.camFollowVehicleCameraMetadataVerticalFlightModeSettings: return new PsoStructureInfo(MetaName.camFollowVehicleCameraMetadataVerticalFlightModeSettings, 0, 0, 16, - new PsoStructureEntryInfo((MetaName)1974814289, PsoDataType.Float2, 8, 0, 0) + new PsoStructureEntryInfo(MetaName.OrbitPitchLimits, PsoDataType.Float2, 8, 0, 0) ); case MetaName.camVehicleCustomSettingsMetadataDoorAlignmentSettings: return new PsoStructureInfo(MetaName.camVehicleCustomSettingsMetadataDoorAlignmentSettings, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)3663951405, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)3431976824, PsoDataType.Bool, 9, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldConsiderData, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldAlignOnVehicleExit, PsoDataType.Bool, 9, 0, 0), new PsoStructureEntryInfo((MetaName)669372144, PsoDataType.Bool, 10, 0, 0), - new PsoStructureEntryInfo((MetaName)1160959405, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)3992317122, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3365340087, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1055028939, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2434688331, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1873731470, PsoDataType.Float, 32, 0, 0) + new PsoStructureEntryInfo(MetaName.AlignmentConeOffsetTowardsVehicleFrontAngle, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.AlignmentConeAngle, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.AlignmentConeAngleWithTrailer, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MinOrientationDeltaToCut, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MinOrientationDeltaToCutForReverseAngle, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MinOrientationDeltaToCutWithTrailer, PsoDataType.Float, 32, 0, 0) ); case MetaName.camFollowParachuteCameraMetadata: return new PsoStructureInfo(MetaName.camFollowParachuteCameraMetadata, 0, 0, 1136, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2884954151, PsoDataType.String, 32, 7, 0), - new PsoStructureEntryInfo((MetaName)730193180, PsoDataType.String, 36, 7, 0), - new PsoStructureEntryInfo((MetaName)1443569911, PsoDataType.String, 40, 7, 0), - new PsoStructureEntryInfo((MetaName)60641442, PsoDataType.String, 44, 7, 0), - new PsoStructureEntryInfo((MetaName)1865815245, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2755051531, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ControlHelperRef, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo(MetaName.HintHelperRef, PsoDataType.String, 36, 7, 0), + new PsoStructureEntryInfo(MetaName.CatchUpHelperRef, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo(MetaName.BaseAttachVelocityToIgnoreEnvelopeRef, PsoDataType.String, 44, 7, 0), + new PsoStructureEntryInfo(MetaName.BaseFov, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseNearClip, PsoDataType.Float, 52, 0, 0), new PsoStructureEntryInfo((MetaName)3305154880, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)2846809829, PsoDataType.Bool, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)3002500493, PsoDataType.Bool, 61, 0, 0), - new PsoStructureEntryInfo((MetaName)2521592812, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)4067016949, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldOrbitRelativeToAttachParentOrientation, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldPersistOrbitOrientationRelativeToAttachParent, PsoDataType.Bool, 61, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentMatrixForRelativeOrbitSpringConstant, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentMatrixForRelativeOrbitSpringDampingRatio, PsoDataType.Float, 68, 0, 0), new PsoStructureEntryInfo((MetaName)2406229624, PsoDataType.Float, 72, 0, 0), new PsoStructureEntryInfo((MetaName)727876548, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)3039556728, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)1708190798, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)1190961214, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)897419234, PsoDataType.UInt, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)150825038, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)4033450681, PsoDataType.Bool, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)2058076685, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)488216999, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)1406371922, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)2814402846, PsoDataType.String, 116, 7, 0), - new PsoStructureEntryInfo((MetaName)372575308, PsoDataType.Bool, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)799910142, PsoDataType.Bool, 121, 0, 0), - new PsoStructureEntryInfo((MetaName)1933402526, PsoDataType.Bool, 122, 0, 0), - new PsoStructureEntryInfo((MetaName)1022007033, PsoDataType.Structure, 128, 0, MetaName.camThirdPersonCameraMetadataCustomBoundingBoxSettings), - new PsoStructureEntryInfo((MetaName)2861227361, PsoDataType.Bool, 152, 0, 0), - new PsoStructureEntryInfo((MetaName)1148495425, PsoDataType.Float, 156, 0, 0), - new PsoStructureEntryInfo((MetaName)536202543, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)1065618425, PsoDataType.Structure, 176, 0, MetaName.camThirdPersonCameraMetadataBasePivotPosition), - new PsoStructureEntryInfo((MetaName)3256568637, PsoDataType.Structure, 272, 0, MetaName.camThirdPersonCameraMetadataPivotPosition), - new PsoStructureEntryInfo((MetaName)588927535, PsoDataType.Structure, 320, 0, MetaName.camThirdPersonCameraMetadataPivotOverBoungingBoxSettings), - new PsoStructureEntryInfo((MetaName)2014345705, PsoDataType.Float, 344, 0, 0), - new PsoStructureEntryInfo((MetaName)3982287448, PsoDataType.Float, 348, 0, 0), - new PsoStructureEntryInfo((MetaName)2449849624, PsoDataType.Float, 352, 0, 0), - new PsoStructureEntryInfo((MetaName)695725580, PsoDataType.Float, 356, 0, 0), - new PsoStructureEntryInfo((MetaName)1397182427, PsoDataType.Float, 360, 0, 0), - new PsoStructureEntryInfo((MetaName)881872463, PsoDataType.Bool, 364, 0, 0), - new PsoStructureEntryInfo((MetaName)177572622, PsoDataType.Float, 368, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAttachParentSubmergedLevelToApplyFullAttachParentMatrixForRelativeOrbit, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAircraftGroundSpeedToApplyFullAttachParentMatrixForRelativeOrbit, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAircraftContactSpeedToApplyFullAttachParentMatrixForRelativeOrbit, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHoldTimeToBlockFullAttachParentMatrixForRelativeOrbit, PsoDataType.UInt, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAttachParentSpeedToClonePitchFromCinematicMountedCameras, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseCustomFramingInTightSpace, PsoDataType.Bool, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAttachSpeedToUpdateTightSpaceLevel, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.TightSpaceSpringConstant, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.TightSpaceSpringDampingRatio, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.DofSettingsInTightSpace, PsoDataType.String, 116, 7, 0), + new PsoStructureEntryInfo(MetaName.ShouldAttachToParentCentreOfGravity, PsoDataType.Bool, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseDynamicCentreOfGravity, PsoDataType.Bool, 121, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreVelocityOfAttachParentAttachEntity, PsoDataType.Bool, 122, 0, 0), + new PsoStructureEntryInfo(MetaName.CustomBoundingBoxSettings, PsoDataType.Structure, 128, 0, MetaName.camThirdPersonCameraMetadataCustomBoundingBoxSettings), + new PsoStructureEntryInfo(MetaName.ShouldApplyAttachPedPelvisOffset, PsoDataType.Bool, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachPedPelvisOffsetSpringConstant, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachPedPelvisOffsetSpringDampingRatio, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.BasePivotPosition, PsoDataType.Structure, 176, 0, MetaName.camThirdPersonCameraMetadataBasePivotPosition), + new PsoStructureEntryInfo(MetaName.PivotPosition, PsoDataType.Structure, 272, 0, MetaName.camThirdPersonCameraMetadataPivotPosition), + new PsoStructureEntryInfo(MetaName.PivotOverBoundingBoxSettings, PsoDataType.Structure, 320, 0, MetaName.camThirdPersonCameraMetadataPivotOverBoungingBoxSettings), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMinFootRoom, PsoDataType.Float, 344, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMaxFootRoom, PsoDataType.Float, 348, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMinFootRoomInTightSpace, PsoDataType.Float, 352, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMaxFootRoomInTightSpace, PsoDataType.Float, 356, 0, 0), + new PsoStructureEntryInfo(MetaName.BasePivotHeightScalingForFootRoom, PsoDataType.Float, 360, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreVerticalPivotOffsetForFootRoom, PsoDataType.Bool, 364, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSafeOrbitDistanceScalingForExtensions, PsoDataType.Float, 368, 0, 0), new PsoStructureEntryInfo((MetaName)560700931, PsoDataType.Float, 372, 0, 0), - new PsoStructureEntryInfo((MetaName)1828892401, PsoDataType.Float2, 376, 0, 0), - new PsoStructureEntryInfo((MetaName)2829148759, PsoDataType.Float, 384, 0, 0), - new PsoStructureEntryInfo((MetaName)1084689577, PsoDataType.Float, 388, 0, 0), - new PsoStructureEntryInfo((MetaName)3978450060, PsoDataType.Float, 392, 0, 0), - new PsoStructureEntryInfo((MetaName)1991191506, PsoDataType.Structure, 400, 0, MetaName.camThirdPersonCameraMetadataBuoyancySettings), - new PsoStructureEntryInfo((MetaName)1949881438, PsoDataType.Bool, 448, 0, 0), - new PsoStructureEntryInfo((MetaName)3863307203, PsoDataType.Bool, 449, 0, 0), - new PsoStructureEntryInfo((MetaName)3696538081, PsoDataType.Bool, 450, 0, 0), - new PsoStructureEntryInfo((MetaName)2213127338, PsoDataType.Bool, 451, 0, 0), - new PsoStructureEntryInfo((MetaName)724966028, PsoDataType.Bool, 452, 0, 0), - new PsoStructureEntryInfo((MetaName)2696635175, PsoDataType.Float, 456, 0, 0), - new PsoStructureEntryInfo((MetaName)1976571596, PsoDataType.Float, 460, 0, 0), - new PsoStructureEntryInfo((MetaName)551575094, PsoDataType.Float, 464, 0, 0), - new PsoStructureEntryInfo((MetaName)1557769430, PsoDataType.Float, 468, 0, 0), - new PsoStructureEntryInfo((MetaName)4155454260, PsoDataType.Float3, 480, 0, 0), + new PsoStructureEntryInfo(MetaName.CustomOrbitDistanceLimitsToForce, PsoDataType.Float2, 376, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceLimitSpringConstant, PsoDataType.Float, 384, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceLimitSpringDampingRatio, PsoDataType.Float, 388, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceScalingForCustomFirstPersonFallBack, PsoDataType.Float, 392, 0, 0), + new PsoStructureEntryInfo(MetaName.BuoyancySettings, PsoDataType.Structure, 400, 0, MetaName.camThirdPersonCameraMetadataBuoyancySettings), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreCollisionWithAttachParent, PsoDataType.Bool, 448, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreCollisionWithFollowVehicle, PsoDataType.Bool, 449, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreFollowVehicleForCollisionOrigin, PsoDataType.Bool, 450, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreFollowVehicleForCollisionRoot, PsoDataType.Bool, 451, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldPushBeyondAttachParentIfClipping, PsoDataType.Bool, 452, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxCollisionTestRadius, PsoDataType.Float, 456, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSafeRadiusReductionWithinPedMoverCapsule, PsoDataType.Float, 460, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionTestRadiusSpringConstant, PsoDataType.Float, 464, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionTestRadiusSpringDampingRatio, PsoDataType.Float, 468, 0, 0), + new PsoStructureEntryInfo(MetaName.CustomCollisionOriginRelativePosition, PsoDataType.Float3, 480, 0, 0), new PsoStructureEntryInfo((MetaName)4194152221, PsoDataType.Float3, 496, 0, 0), - new PsoStructureEntryInfo((MetaName)2702878862, PsoDataType.Bool, 512, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseCustomCollisionOrigin, PsoDataType.Bool, 512, 0, 0), new PsoStructureEntryInfo((MetaName)1998689777, PsoDataType.Bool, 513, 0, 0), new PsoStructureEntryInfo((MetaName)2235540893, PsoDataType.Bool, 514, 0, 0), new PsoStructureEntryInfo((MetaName)3479639237, PsoDataType.Float3, 528, 0, 0), new PsoStructureEntryInfo((MetaName)1496115250, PsoDataType.Float, 544, 0, 0), - new PsoStructureEntryInfo((MetaName)340312382, PsoDataType.Structure, 552, 0, MetaName.camThirdPersonCameraMetadataCollisionFallBackPosition), - new PsoStructureEntryInfo((MetaName)4279727627, PsoDataType.Float, 592, 0, 0), - new PsoStructureEntryInfo((MetaName)823526659, PsoDataType.Bool, 596, 0, 0), - new PsoStructureEntryInfo((MetaName)3507950586, PsoDataType.Float, 600, 0, 0), - new PsoStructureEntryInfo((MetaName)3397058689, PsoDataType.Float, 604, 0, 0), - new PsoStructureEntryInfo((MetaName)227846107, PsoDataType.Structure, 608, 0, MetaName.camThirdPersonCameraMetadataVehicleOnTopOfVehicleCollisionSettings), - new PsoStructureEntryInfo((MetaName)3658085406, PsoDataType.Float, 632, 0, 0), - new PsoStructureEntryInfo((MetaName)1654683326, PsoDataType.Float2, 636, 0, 0), - new PsoStructureEntryInfo((MetaName)1974814289, PsoDataType.Float2, 644, 0, 0), - new PsoStructureEntryInfo((MetaName)1778852906, PsoDataType.Float, 652, 0, 0), - new PsoStructureEntryInfo((MetaName)158553507, PsoDataType.Float, 656, 0, 0), - new PsoStructureEntryInfo((MetaName)3300166924, PsoDataType.Structure, 664, 0, MetaName.camThirdPersonCameraMetadataLookOverSettings), - new PsoStructureEntryInfo((MetaName)2793581079, PsoDataType.Bool, 688, 0, 0), - new PsoStructureEntryInfo((MetaName)2111969249, PsoDataType.Float2, 692, 0, 0), - new PsoStructureEntryInfo((MetaName)3068587259, PsoDataType.Float, 700, 0, 0), - new PsoStructureEntryInfo((MetaName)293341517, PsoDataType.Float, 704, 0, 0), - new PsoStructureEntryInfo((MetaName)3607038158, PsoDataType.Float, 708, 0, 0), - new PsoStructureEntryInfo((MetaName)4039533147, PsoDataType.Float2, 712, 0, 0), - new PsoStructureEntryInfo((MetaName)1356521412, PsoDataType.Float2, 720, 0, 0), - new PsoStructureEntryInfo((MetaName)3610920953, PsoDataType.Structure, 728, 0, MetaName.camThirdPersonCameraMetadataStealthZoomSettings), + new PsoStructureEntryInfo(MetaName.CollisionFallBackPosition, PsoDataType.Structure, 552, 0, MetaName.camThirdPersonCameraMetadataCollisionFallBackPosition), + new PsoStructureEntryInfo(MetaName.CollisionRootPositionFallBackToPivotBlendValue, PsoDataType.Float, 592, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldConstrainCollisionRootPositionAgainstClippingTypes, PsoDataType.Bool, 596, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionRootPositionSpringConstant, PsoDataType.Float, 600, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionRootPositionSpringDampingRatio, PsoDataType.Float, 604, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleOnTopOfVehicleCollisionSettings, PsoDataType.Structure, 608, 0, MetaName.camThirdPersonCameraMetadataVehicleOnTopOfVehicleCollisionSettings), + new PsoStructureEntryInfo(MetaName.IdealHeadingOffsetForLimiting, PsoDataType.Float, 632, 0, 0), + new PsoStructureEntryInfo(MetaName.RelativeOrbitHeadingLimits, PsoDataType.Float2, 636, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitPitchLimits, PsoDataType.Float2, 644, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseOrbitPitchOffset, PsoDataType.Float, 652, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseOrbitPitchOffsetInTightSpace, PsoDataType.Float, 656, 0, 0), + new PsoStructureEntryInfo(MetaName.LookOverSettings, PsoDataType.Structure, 664, 0, MetaName.camThirdPersonCameraMetadataLookOverSettings), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreAttachParentPitchForLookBehind, PsoDataType.Bool, 688, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceLimitsForBasePosition, PsoDataType.Float2, 692, 0, 0), + new PsoStructureEntryInfo(MetaName.PreToPostCollisionLookAtOrientationBlendValue, PsoDataType.Float, 700, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRollSpringConstant, PsoDataType.Float, 704, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRollSpringDampingRatio, PsoDataType.Float, 708, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRollDampingPitchSoftLimits, PsoDataType.Float2, 712, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRollDampingPitchHardLimits, PsoDataType.Float2, 720, 0, 0), + new PsoStructureEntryInfo(MetaName.StealthZoomSettings, PsoDataType.Structure, 728, 0, MetaName.camThirdPersonCameraMetadataStealthZoomSettings), new PsoStructureEntryInfo((MetaName)1947299079, PsoDataType.Structure, 752, 0, MetaName.camThirdPersonCameraMetadataQuadrupedalHeightSpring), - new PsoStructureEntryInfo((MetaName)490368749, PsoDataType.String, 776, 7, 0), + new PsoStructureEntryInfo(MetaName.MotionBlurSettings, PsoDataType.String, 776, 7, 0), new PsoStructureEntryInfo((MetaName)2122226771, PsoDataType.Bool, 780, 0, 0), - new PsoStructureEntryInfo((MetaName)1789219851, PsoDataType.String, 784, 7, 0), - new PsoStructureEntryInfo((MetaName)2224847663, PsoDataType.String, 788, 7, 0), - new PsoStructureEntryInfo((MetaName)2960196386, PsoDataType.String, 792, 7, 0), - new PsoStructureEntryInfo((MetaName)2238897248, PsoDataType.String, 796, 7, 0), - new PsoStructureEntryInfo((MetaName)572898954, PsoDataType.String, 800, 7, 0), - new PsoStructureEntryInfo((MetaName)1256703824, PsoDataType.Bool, 804, 0, 0), - new PsoStructureEntryInfo((MetaName)1394164846, PsoDataType.Structure, 808, 0, MetaName.camFollowCameraMetadataPullAroundSettings), - new PsoStructureEntryInfo((MetaName)914396031, PsoDataType.Structure, 872, 0, MetaName.camFollowCameraMetadataPullAroundSettings), - new PsoStructureEntryInfo((MetaName)4045243730, PsoDataType.Bool, 936, 0, 0), - new PsoStructureEntryInfo((MetaName)3857630189, PsoDataType.Bool, 937, 0, 0), - new PsoStructureEntryInfo((MetaName)2208576746, PsoDataType.Bool, 938, 0, 0), - new PsoStructureEntryInfo((MetaName)3468493382, PsoDataType.Bool, 939, 0, 0), - new PsoStructureEntryInfo((MetaName)3614496996, PsoDataType.Bool, 940, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentInAirEnvelopeRef, PsoDataType.String, 784, 7, 0), + new PsoStructureEntryInfo(MetaName.AttachParentUpwardSpeedScalingOnGroundEnvelopeRef, PsoDataType.String, 788, 7, 0), + new PsoStructureEntryInfo(MetaName.AttachParentUpwardSpeedScalingInAirEnvelopeRef, PsoDataType.String, 792, 7, 0), + new PsoStructureEntryInfo(MetaName.AimBehaviourEnvelopeRef, PsoDataType.String, 796, 7, 0), + new PsoStructureEntryInfo(MetaName.WaterBobShakeRef, PsoDataType.String, 800, 7, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreAttachParentMovementForOrientation, PsoDataType.Bool, 804, 0, 0), + new PsoStructureEntryInfo(MetaName.PullAroundSettings, PsoDataType.Structure, 808, 0, MetaName.camFollowCameraMetadataPullAroundSettings), + new PsoStructureEntryInfo(MetaName.PullAroundSettingsForLookBehind, PsoDataType.Structure, 872, 0, MetaName.camFollowCameraMetadataPullAroundSettings), + new PsoStructureEntryInfo(MetaName.ShouldConsiderAttachParentLocalXYVelocityForPullAround, PsoDataType.Bool, 936, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldConsiderAttachParentForwardSpeedForPullAround, PsoDataType.Bool, 937, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldPullAroundToAttachParentFront, PsoDataType.Bool, 938, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldPullAroundToBasicAttachParentMatrix, PsoDataType.Bool, 939, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldPullAroundUsingSimpleSpringDamping, PsoDataType.Bool, 940, 0, 0), new PsoStructureEntryInfo((MetaName)2671392542, PsoDataType.Bool, 941, 0, 0), - new PsoStructureEntryInfo((MetaName)2127124229, PsoDataType.Float, 944, 0, 0), - new PsoStructureEntryInfo((MetaName)2098973612, PsoDataType.Bool, 948, 0, 0), - new PsoStructureEntryInfo((MetaName)1014809841, PsoDataType.Float, 952, 0, 0), - new PsoStructureEntryInfo((MetaName)2563263345, PsoDataType.Float, 956, 0, 0), - new PsoStructureEntryInfo((MetaName)1914871967, PsoDataType.Float2, 960, 0, 0), - new PsoStructureEntryInfo((MetaName)3594576614, PsoDataType.Float, 968, 0, 0), - new PsoStructureEntryInfo((MetaName)1880225385, PsoDataType.Float, 972, 0, 0), - new PsoStructureEntryInfo((MetaName)1487131765, PsoDataType.Float, 976, 0, 0), - new PsoStructureEntryInfo((MetaName)2018965896, PsoDataType.Float, 980, 0, 0), - new PsoStructureEntryInfo((MetaName)1286077706, PsoDataType.Float, 984, 0, 0), - new PsoStructureEntryInfo((MetaName)70382085, PsoDataType.Structure, 992, 0, MetaName.camFollowCameraMetadataFollowOrientationConing), - new PsoStructureEntryInfo((MetaName)4214646062, PsoDataType.Structure, 1024, 0, MetaName.camFollowCameraMetadataRollSettings), - new PsoStructureEntryInfo((MetaName)2054392766, PsoDataType.Structure, 1064, 0, MetaName.camFollowCameraMetadataHighAltitudeZoomSettings), - new PsoStructureEntryInfo((MetaName)2827051945, PsoDataType.Structure, 1104, 0, MetaName.camFollowParachuteCameraMetadataCustomSettings) + new PsoStructureEntryInfo(MetaName.MinAttachParentApproachSpeedForPitchLock, PsoDataType.Float, 944, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldLockHeading, PsoDataType.Bool, 948, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxMoveSpeedForFollowOrientation, PsoDataType.Float, 952, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxLookAroundMoveSpeedMultiplier, PsoDataType.Float, 956, 0, 0), + new PsoStructureEntryInfo(MetaName.SpeedLimitsForVerticalMoveSpeedScaling, PsoDataType.Float2, 960, 0, 0), + new PsoStructureEntryInfo(MetaName.VerticalMoveSpeedScaling, PsoDataType.Float, 968, 0, 0), + new PsoStructureEntryInfo(MetaName.VerticalMoveSpeedScalingAtMaxSpeed, PsoDataType.Float, 972, 0, 0), + new PsoStructureEntryInfo(MetaName.UpwardMoveSpeedScalingOnGround, PsoDataType.Float, 976, 0, 0), + new PsoStructureEntryInfo(MetaName.UpwardMoveSpeedScalingInAir, PsoDataType.Float, 980, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxMoveOrientationSpeedDuringLookAround, PsoDataType.Float, 984, 0, 0), + new PsoStructureEntryInfo(MetaName.FollowOrientationConing, PsoDataType.Structure, 992, 0, MetaName.camFollowCameraMetadataFollowOrientationConing), + new PsoStructureEntryInfo(MetaName.RollSettings, PsoDataType.Structure, 1024, 0, MetaName.camFollowCameraMetadataRollSettings), + new PsoStructureEntryInfo(MetaName.HighAltitudeZoomSettings, PsoDataType.Structure, 1064, 0, MetaName.camFollowCameraMetadataHighAltitudeZoomSettings), + new PsoStructureEntryInfo(MetaName.CustomSettings, PsoDataType.Structure, 1104, 0, MetaName.camFollowParachuteCameraMetadataCustomSettings) ); case MetaName.camFollowParachuteCameraMetadataCustomSettings: return new PsoStructureInfo(MetaName.camFollowParachuteCameraMetadataCustomSettings, 0, 0, 24, @@ -3600,36 +3600,36 @@ namespace CodeWalker.GameFiles case MetaName.camFirstPersonPedAimCameraMetadata: return new PsoStructureInfo(MetaName.camFirstPersonPedAimCameraMetadata, 0, 0, 208, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2884954151, PsoDataType.String, 32, 7, 0), - new PsoStructureEntryInfo((MetaName)1865815245, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)2755051531, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)1025607184, PsoDataType.UInt, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)652273141, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)1054008152, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)3100931510, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)1238524664, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)3718710002, PsoDataType.Float3, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)3807713258, PsoDataType.Bool, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)509392339, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)4261179401, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)3137513888, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)3645576770, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)1478931781, PsoDataType.Bool, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ControlHelperRef, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo(MetaName.BaseFov, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseNearClip, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.MinUpdatesBeforeApplyingMotionBlur, PsoDataType.UInt, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseMotionBlurStrength, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.ZoomMotionBlurMinFovDelta, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.ZoomMotionBlurMaxFovDelta, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.ZoomMotionBlurMaxStrengthForFov, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachRelativeOffset, PsoDataType.Float3, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldApplyAttachOffsetRelativeToCamera, PsoDataType.Bool, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.MinPitch, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPitch, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.MinRelativeHeading, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRelativeHeading, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldMakeAttachedEntityInvisible, PsoDataType.Bool, 112, 0, 0), new PsoStructureEntryInfo((MetaName)1959607978, PsoDataType.Bool, 113, 0, 0), - new PsoStructureEntryInfo((MetaName)1348911901, PsoDataType.Bool, 114, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldDisplayReticule, PsoDataType.Bool, 114, 0, 0), new PsoStructureEntryInfo((MetaName)1120407412, PsoDataType.Bool, 115, 0, 0), - new PsoStructureEntryInfo((MetaName)937843974, PsoDataType.Float2, 116, 0, 0), - new PsoStructureEntryInfo((MetaName)1149560055, PsoDataType.Float2, 124, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeFirstPersonShootingAbilityLimits, PsoDataType.Float2, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeAmplitudeScalingForShootingAbilityLimits, PsoDataType.Float2, 124, 0, 0), new PsoStructureEntryInfo((MetaName)2758176724, PsoDataType.Structure, 136, 0, MetaName.camFirstPersonAimCameraMetadataHeadingCorrection), new PsoStructureEntryInfo((MetaName)330110937, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)575433612, PsoDataType.SInt, 176, 0, 0), - new PsoStructureEntryInfo((MetaName)1634093344, PsoDataType.Float, 180, 0, 0), - new PsoStructureEntryInfo((MetaName)2878053132, PsoDataType.Float, 184, 0, 0), - new PsoStructureEntryInfo((MetaName)3271563285, PsoDataType.Bool, 188, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachBoneTag, PsoDataType.SInt, 176, 0, 0), + new PsoStructureEntryInfo(MetaName.TripleHeadNearClip, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo(MetaName.RelativeAttachPositionSmoothRate, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldTorsoIkLimitsOverrideOrbitPitchLimits, PsoDataType.Bool, 188, 0, 0), new PsoStructureEntryInfo((MetaName)1847867369, PsoDataType.Bool, 189, 0, 0), new PsoStructureEntryInfo((MetaName)1173900687, PsoDataType.Float, 192, 0, 0), new PsoStructureEntryInfo((MetaName)1322555765, PsoDataType.Float, 196, 0, 0), @@ -3637,40 +3637,40 @@ namespace CodeWalker.GameFiles ); case MetaName.camFirstPersonAimCameraMetadataHeadingCorrection: return new PsoStructureInfo(MetaName.camFirstPersonAimCameraMetadataHeadingCorrection, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringConstant, PsoDataType.Float, 8, 0, 0), new PsoStructureEntryInfo((MetaName)1496770623, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)2032147920, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.DeltaTolerance, PsoDataType.Float, 16, 0, 0) ); case MetaName.camFirstPersonShooterCameraMetadata: return new PsoStructureInfo(MetaName.camFirstPersonShooterCameraMetadata, 0, 0, 1664, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2884954151, PsoDataType.String, 32, 7, 0), - new PsoStructureEntryInfo((MetaName)1865815245, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)2755051531, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)1025607184, PsoDataType.UInt, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)652273141, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)1054008152, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)3100931510, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)1238524664, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)3718710002, PsoDataType.Float3, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)3807713258, PsoDataType.Bool, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)509392339, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)4261179401, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)3137513888, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)3645576770, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)1478931781, PsoDataType.Bool, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ControlHelperRef, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo(MetaName.BaseFov, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseNearClip, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.MinUpdatesBeforeApplyingMotionBlur, PsoDataType.UInt, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseMotionBlurStrength, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.ZoomMotionBlurMinFovDelta, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.ZoomMotionBlurMaxFovDelta, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.ZoomMotionBlurMaxStrengthForFov, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachRelativeOffset, PsoDataType.Float3, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldApplyAttachOffsetRelativeToCamera, PsoDataType.Bool, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.MinPitch, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPitch, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.MinRelativeHeading, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRelativeHeading, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldMakeAttachedEntityInvisible, PsoDataType.Bool, 112, 0, 0), new PsoStructureEntryInfo((MetaName)1959607978, PsoDataType.Bool, 113, 0, 0), - new PsoStructureEntryInfo((MetaName)1348911901, PsoDataType.Bool, 114, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldDisplayReticule, PsoDataType.Bool, 114, 0, 0), new PsoStructureEntryInfo((MetaName)1120407412, PsoDataType.Bool, 115, 0, 0), - new PsoStructureEntryInfo((MetaName)937843974, PsoDataType.Float2, 116, 0, 0), - new PsoStructureEntryInfo((MetaName)1149560055, PsoDataType.Float2, 124, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeFirstPersonShootingAbilityLimits, PsoDataType.Float2, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeAmplitudeScalingForShootingAbilityLimits, PsoDataType.Float2, 124, 0, 0), new PsoStructureEntryInfo((MetaName)2758176724, PsoDataType.Structure, 136, 0, MetaName.camFirstPersonAimCameraMetadataHeadingCorrection), new PsoStructureEntryInfo((MetaName)330110937, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)730193180, PsoDataType.String, 176, 7, 0), + new PsoStructureEntryInfo(MetaName.HintHelperRef, PsoDataType.String, 176, 7, 0), new PsoStructureEntryInfo((MetaName)3500215588, PsoDataType.Float3, 192, 0, 0), new PsoStructureEntryInfo((MetaName)1583458555, PsoDataType.Float3, 208, 0, 0), new PsoStructureEntryInfo((MetaName)3253139357, PsoDataType.Float3, 224, 0, 0), @@ -3680,7 +3680,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)424961570, PsoDataType.Float3, 288, 0, 0), new PsoStructureEntryInfo((MetaName)104465235, PsoDataType.Float3, 304, 0, 0), new PsoStructureEntryInfo((MetaName)4034848485, PsoDataType.Float3, 320, 0, 0), - new PsoStructureEntryInfo((MetaName)10648206, PsoDataType.Float2, 336, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRelativeHeading, PsoDataType.Float2, 336, 0, 0), new PsoStructureEntryInfo((MetaName)2372600507, PsoDataType.Float2, 344, 0, 0), new PsoStructureEntryInfo((MetaName)971666241, PsoDataType.Float2, 352, 0, 0), new PsoStructureEntryInfo((MetaName)162051482, PsoDataType.Float2, 360, 0, 0), @@ -3688,24 +3688,24 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)3507003526, PsoDataType.Float2, 376, 0, 0), new PsoStructureEntryInfo((MetaName)1765689234, PsoDataType.String, 384, 7, 0), new PsoStructureEntryInfo((MetaName)722540604, PsoDataType.String, 388, 7, 0), - new PsoStructureEntryInfo((MetaName)2833081775, PsoDataType.String, 392, 7, 0), + new PsoStructureEntryInfo(MetaName.LockOnEnvelopeRef, PsoDataType.String, 392, 7, 0), new PsoStructureEntryInfo((MetaName)3102337801, PsoDataType.String, 396, 7, 0), new PsoStructureEntryInfo((MetaName)1038878908, PsoDataType.String, 400, 7, 0), new PsoStructureEntryInfo((MetaName)3684814544, PsoDataType.String, 404, 7, 0), new PsoStructureEntryInfo((MetaName)2377645189, PsoDataType.String, 408, 7, 0), new PsoStructureEntryInfo((MetaName)3664775821, PsoDataType.String, 412, 7, 0), new PsoStructureEntryInfo((MetaName)3075522471, PsoDataType.String, 416, 7, 0), - new PsoStructureEntryInfo((MetaName)575433612, PsoDataType.SInt, 420, 0, 0), - new PsoStructureEntryInfo((MetaName)2878053132, PsoDataType.Float, 424, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachBoneTag, PsoDataType.SInt, 420, 0, 0), + new PsoStructureEntryInfo(MetaName.RelativeAttachPositionSmoothRate, PsoDataType.Float, 424, 0, 0), new PsoStructureEntryInfo((MetaName)3559802057, PsoDataType.Structure, 432, 0, MetaName.camFirstPersonShooterCameraMetadataRelativeAttachOrientationSettings), new PsoStructureEntryInfo((MetaName)3284913244, PsoDataType.Float, 544, 0, 0), new PsoStructureEntryInfo((MetaName)742850166, PsoDataType.Float, 548, 0, 0), new PsoStructureEntryInfo((MetaName)1801708329, PsoDataType.Float, 552, 0, 0), new PsoStructureEntryInfo((MetaName)522025471, PsoDataType.Float, 556, 0, 0), - new PsoStructureEntryInfo((MetaName)3154554341, PsoDataType.Float, 560, 0, 0), + new PsoStructureEntryInfo(MetaName.AimFov, PsoDataType.Float, 560, 0, 0), new PsoStructureEntryInfo((MetaName)2685045238, PsoDataType.Float, 564, 0, 0), new PsoStructureEntryInfo((MetaName)1545486036, PsoDataType.Float, 568, 0, 0), - new PsoStructureEntryInfo((MetaName)732629634, PsoDataType.Float, 572, 0, 0), + new PsoStructureEntryInfo(MetaName.PhoneFov, PsoDataType.Float, 572, 0, 0), new PsoStructureEntryInfo((MetaName)2263644173, PsoDataType.Float, 576, 0, 0), new PsoStructureEntryInfo((MetaName)189771911, PsoDataType.Float, 580, 0, 0), new PsoStructureEntryInfo((MetaName)3266229162, PsoDataType.Float, 584, 0, 0), @@ -3726,18 +3726,18 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)413985988, PsoDataType.Float, 644, 0, 0), new PsoStructureEntryInfo((MetaName)731578407, PsoDataType.Float, 648, 0, 0), new PsoStructureEntryInfo((MetaName)3517278862, PsoDataType.Float, 652, 0, 0), - new PsoStructureEntryInfo((MetaName)2326671617, PsoDataType.Float, 656, 0, 0), + new PsoStructureEntryInfo(MetaName.LadderPitch, PsoDataType.Float, 656, 0, 0), new PsoStructureEntryInfo((MetaName)83336335, PsoDataType.Float, 660, 0, 0), new PsoStructureEntryInfo((MetaName)3203179444, PsoDataType.Float, 664, 0, 0), new PsoStructureEntryInfo((MetaName)803486985, PsoDataType.Float, 668, 0, 0), - new PsoStructureEntryInfo((MetaName)2294924343, PsoDataType.Float, 672, 0, 0), + new PsoStructureEntryInfo(MetaName.RecoilShakeAmplitudeScaling, PsoDataType.Float, 672, 0, 0), new PsoStructureEntryInfo((MetaName)2122499987, PsoDataType.Float, 676, 0, 0), new PsoStructureEntryInfo((MetaName)1515082975, PsoDataType.Float, 680, 0, 0), new PsoStructureEntryInfo((MetaName)1515564685, PsoDataType.Float, 684, 0, 0), new PsoStructureEntryInfo((MetaName)3592059377, PsoDataType.Float, 688, 0, 0), new PsoStructureEntryInfo((MetaName)448454700, PsoDataType.Bool, 692, 0, 0), new PsoStructureEntryInfo((MetaName)545313111, PsoDataType.Float, 696, 0, 0), - new PsoStructureEntryInfo((MetaName)1976571596, PsoDataType.Float, 700, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSafeRadiusReductionWithinPedMoverCapsule, PsoDataType.Float, 700, 0, 0), new PsoStructureEntryInfo((MetaName)1534221961, PsoDataType.Float, 704, 0, 0), new PsoStructureEntryInfo((MetaName)270168093, PsoDataType.Float, 708, 0, 0), new PsoStructureEntryInfo((MetaName)2100042799, PsoDataType.Float, 712, 0, 0), @@ -3749,7 +3749,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)2387142724, PsoDataType.UInt, 736, 0, 0), new PsoStructureEntryInfo((MetaName)2743970065, PsoDataType.UInt, 740, 0, 0), new PsoStructureEntryInfo((MetaName)2452155390, PsoDataType.UInt, 744, 0, 0), - new PsoStructureEntryInfo((MetaName)3781066831, PsoDataType.Structure, 752, 0, MetaName.camFirstPersonShooterCameraMetadataOrientationSpring), + new PsoStructureEntryInfo(MetaName.OrientationSpring, PsoDataType.Structure, 752, 0, MetaName.camFirstPersonShooterCameraMetadataOrientationSpring), new PsoStructureEntryInfo((MetaName)415673303, PsoDataType.Structure, 792, 0, MetaName.camFirstPersonShooterCameraMetadataOrientationSpring), new PsoStructureEntryInfo((MetaName)3397810078, PsoDataType.Structure, 832, 0, MetaName.camFirstPersonShooterCameraMetadataOrientationSpring), new PsoStructureEntryInfo((MetaName)3440729757, PsoDataType.Structure, 872, 0, MetaName.camFirstPersonShooterCameraMetadataOrientationSpringLite), @@ -3767,7 +3767,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)2550891007, PsoDataType.Structure, 1064, 0, MetaName.camFirstPersonShooterCameraMetadataOrientationSpringLite), new PsoStructureEntryInfo((MetaName)475503552, PsoDataType.Float, 1080, 0, 0), new PsoStructureEntryInfo((MetaName)1215439957, PsoDataType.Float2, 1084, 0, 0), - new PsoStructureEntryInfo((MetaName)3271563285, PsoDataType.Bool, 1092, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldTorsoIkLimitsOverrideOrbitPitchLimits, PsoDataType.Bool, 1092, 0, 0), new PsoStructureEntryInfo((MetaName)1723254225, PsoDataType.Bool, 1093, 0, 0), new PsoStructureEntryInfo((MetaName)366723406, PsoDataType.String, 1096, 7, 0), new PsoStructureEntryInfo((MetaName)264754789, PsoDataType.String, 1100, 7, 0), @@ -3787,29 +3787,29 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)1630855608, PsoDataType.Float, 1156, 0, 0), new PsoStructureEntryInfo((MetaName)3965978499, PsoDataType.Structure, 1160, 0, MetaName.camFirstPersonShooterCameraMetadataStickyAim), new PsoStructureEntryInfo((MetaName)585212636, PsoDataType.Structure, 1272, 0, MetaName.camFirstPersonShooterCameraMetadataStickyAim), - new PsoStructureEntryInfo((MetaName)1301399000, PsoDataType.Bool, 1384, 0, 0), - new PsoStructureEntryInfo((MetaName)114759485, PsoDataType.Bool, 1385, 0, 0), - new PsoStructureEntryInfo((MetaName)9436207, PsoDataType.Float, 1388, 0, 0), - new PsoStructureEntryInfo((MetaName)1350912934, PsoDataType.Float, 1392, 0, 0), - new PsoStructureEntryInfo((MetaName)70391041, PsoDataType.Float, 1396, 0, 0), - new PsoStructureEntryInfo((MetaName)2783842060, PsoDataType.Float, 1400, 0, 0), - new PsoStructureEntryInfo((MetaName)4207333442, PsoDataType.Float, 1404, 0, 0), - new PsoStructureEntryInfo((MetaName)1717370547, PsoDataType.Float, 1408, 0, 0), - new PsoStructureEntryInfo((MetaName)3048647846, PsoDataType.UInt, 1412, 0, 0), - new PsoStructureEntryInfo((MetaName)3132164856, PsoDataType.UInt, 1416, 0, 0), - new PsoStructureEntryInfo((MetaName)3397272914, PsoDataType.UInt, 1420, 0, 0), - new PsoStructureEntryInfo((MetaName)1807116888, PsoDataType.UInt, 1424, 0, 0), - new PsoStructureEntryInfo((MetaName)1148495425, PsoDataType.Float, 1428, 0, 0), - new PsoStructureEntryInfo((MetaName)536202543, PsoDataType.Float, 1432, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseLockOnAiming, PsoDataType.Bool, 1384, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldValidateLockOnTargetPosition, PsoDataType.Bool, 1385, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceForLockOn, PsoDataType.Float, 1388, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceForFineAimScaling, PsoDataType.Float, 1392, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForFineAimScaling, PsoDataType.Float, 1396, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAngleDeltaForLockOnSwitchBlendScaling, PsoDataType.Float, 1400, 0, 0), + new PsoStructureEntryInfo(MetaName.FineAimBlendSpringConstant, PsoDataType.Float, 1404, 0, 0), + new PsoStructureEntryInfo(MetaName.FineAimBlendSpringDampingRatio, PsoDataType.Float, 1408, 0, 0), + new PsoStructureEntryInfo(MetaName.MinBlendDurationForLockOnSwitch, PsoDataType.UInt, 1412, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxBlendDurationForLockOnSwitch, PsoDataType.UInt, 1416, 0, 0), + new PsoStructureEntryInfo(MetaName.MinBlendDurationForInitialLockOn, PsoDataType.UInt, 1420, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxBlendDurationForInitialLockOn, PsoDataType.UInt, 1424, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachPedPelvisOffsetSpringConstant, PsoDataType.Float, 1428, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachPedPelvisOffsetSpringDampingRatio, PsoDataType.Float, 1432, 0, 0), new PsoStructureEntryInfo((MetaName)2447870594, PsoDataType.Float, 1436, 0, 0), new PsoStructureEntryInfo((MetaName)2225908075, PsoDataType.Float, 1440, 0, 0), new PsoStructureEntryInfo((MetaName)1894138, PsoDataType.Float, 1444, 0, 0), new PsoStructureEntryInfo((MetaName)724885771, PsoDataType.Float, 1448, 0, 0), new PsoStructureEntryInfo((MetaName)2413827894, PsoDataType.Float2, 1452, 0, 0), - new PsoStructureEntryInfo((MetaName)3780197314, PsoDataType.Structure, 1464, 0, MetaName.camFirstPersonShooterCameraMetadataCoverSettings), + new PsoStructureEntryInfo(MetaName.CoverSettings, PsoDataType.Structure, 1464, 0, MetaName.camFirstPersonShooterCameraMetadataCoverSettings), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camFirstPersonShooterCameraMetadataSprintBreakOutSettings), new PsoStructureEntryInfo((MetaName)2011532787, PsoDataType.Array, 1584, 1, (MetaName)131236), - new PsoStructureEntryInfo((MetaName)490368749, PsoDataType.String, 1656, 7, 0) + new PsoStructureEntryInfo(MetaName.MotionBlurSettings, PsoDataType.String, 1656, 7, 0) ); case MetaName.camFirstPersonShooterCameraMetadataRelativeAttachOrientationSettings: return new PsoStructureInfo(MetaName.camFirstPersonShooterCameraMetadataRelativeAttachOrientationSettings, 0, 0, 112, @@ -3836,15 +3836,15 @@ namespace CodeWalker.GameFiles return new PsoStructureInfo(MetaName.camFirstPersonShooterCameraMetadataOrientationSpring, 0, 0, 40, new PsoStructureEntryInfo(MetaName.HeadingLimits, PsoDataType.Float2, 8, 0, 0), new PsoStructureEntryInfo(MetaName.PitchLimits, PsoDataType.Float2, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringConstant, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringDampingRatio, PsoDataType.Float, 28, 0, 0), new PsoStructureEntryInfo((MetaName)1524988618, PsoDataType.Float, 32, 0, 0), new PsoStructureEntryInfo((MetaName)1290012653, PsoDataType.Float, 36, 0, 0) ); case MetaName.camFirstPersonShooterCameraMetadataOrientationSpringLite: return new PsoStructureInfo(MetaName.camFirstPersonShooterCameraMetadataOrientationSpringLite, 0, 0, 16, - new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 12, 0, 0) + new PsoStructureEntryInfo(MetaName.SpringConstant, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringDampingRatio, PsoDataType.Float, 12, 0, 0) ); case MetaName.camFirstPersonShooterCameraMetadataStickyAim: return new PsoStructureInfo(MetaName.camFirstPersonShooterCameraMetadataStickyAim, 0, 0, 112, @@ -3888,7 +3888,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)1497386222, PsoDataType.Float, 44, 0, 0), new PsoStructureEntryInfo((MetaName)783496886, PsoDataType.Float, 48, 0, 0), new PsoStructureEntryInfo((MetaName)2616989255, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)472852554, PsoDataType.Structure, 56, 0, MetaName.camFirstPersonAimCameraMetadataHeadingCorrection), + new PsoStructureEntryInfo(MetaName.HeadingCorrection, PsoDataType.Structure, 56, 0, MetaName.camFirstPersonAimCameraMetadataHeadingCorrection), new PsoStructureEntryInfo((MetaName)907428778, PsoDataType.SInt, 80, 0, 0), new PsoStructureEntryInfo((MetaName)4143200730, PsoDataType.SInt, 84, 0, 0), new PsoStructureEntryInfo((MetaName)105496678, PsoDataType.SInt, 88, 0, 0), @@ -3911,304 +3911,304 @@ namespace CodeWalker.GameFiles case MetaName.camFirstPersonHeadTrackingAimCameraMetadata: return new PsoStructureInfo(MetaName.camFirstPersonHeadTrackingAimCameraMetadata, 0, 0, 128, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2884954151, PsoDataType.String, 32, 7, 0), - new PsoStructureEntryInfo((MetaName)1865815245, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)2755051531, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)1025607184, PsoDataType.UInt, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)652273141, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)1054008152, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)3100931510, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)1238524664, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)3718710002, PsoDataType.Float3, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)3807713258, PsoDataType.Bool, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)509392339, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)4261179401, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)3137513888, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)3645576770, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)1348911901, PsoDataType.Bool, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)575433612, PsoDataType.SInt, 116, 0, 0) + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ControlHelperRef, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo(MetaName.BaseFov, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseNearClip, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.MinUpdatesBeforeApplyingMotionBlur, PsoDataType.UInt, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseMotionBlurStrength, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.ZoomMotionBlurMinFovDelta, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.ZoomMotionBlurMaxFovDelta, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.ZoomMotionBlurMaxStrengthForFov, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachRelativeOffset, PsoDataType.Float3, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldApplyAttachOffsetRelativeToCamera, PsoDataType.Bool, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.MinPitch, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPitch, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.MinRelativeHeading, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRelativeHeading, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldDisplayReticule, PsoDataType.Bool, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachBoneTag, PsoDataType.SInt, 116, 0, 0) ); case MetaName.camThirdPersonPedAimCameraMetadata: return new PsoStructureInfo(MetaName.camThirdPersonPedAimCameraMetadata, 0, 0, 1040, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2884954151, PsoDataType.String, 32, 7, 0), - new PsoStructureEntryInfo((MetaName)730193180, PsoDataType.String, 36, 7, 0), - new PsoStructureEntryInfo((MetaName)1443569911, PsoDataType.String, 40, 7, 0), - new PsoStructureEntryInfo((MetaName)60641442, PsoDataType.String, 44, 7, 0), - new PsoStructureEntryInfo((MetaName)1865815245, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2755051531, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ControlHelperRef, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo(MetaName.HintHelperRef, PsoDataType.String, 36, 7, 0), + new PsoStructureEntryInfo(MetaName.CatchUpHelperRef, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo(MetaName.BaseAttachVelocityToIgnoreEnvelopeRef, PsoDataType.String, 44, 7, 0), + new PsoStructureEntryInfo(MetaName.BaseFov, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseNearClip, PsoDataType.Float, 52, 0, 0), new PsoStructureEntryInfo((MetaName)3305154880, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)2846809829, PsoDataType.Bool, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)3002500493, PsoDataType.Bool, 61, 0, 0), - new PsoStructureEntryInfo((MetaName)2521592812, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)4067016949, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldOrbitRelativeToAttachParentOrientation, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldPersistOrbitOrientationRelativeToAttachParent, PsoDataType.Bool, 61, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentMatrixForRelativeOrbitSpringConstant, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentMatrixForRelativeOrbitSpringDampingRatio, PsoDataType.Float, 68, 0, 0), new PsoStructureEntryInfo((MetaName)2406229624, PsoDataType.Float, 72, 0, 0), new PsoStructureEntryInfo((MetaName)727876548, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)3039556728, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)1708190798, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)1190961214, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)897419234, PsoDataType.UInt, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)150825038, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)4033450681, PsoDataType.Bool, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)2058076685, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)488216999, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)1406371922, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)2814402846, PsoDataType.String, 116, 7, 0), - new PsoStructureEntryInfo((MetaName)372575308, PsoDataType.Bool, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)799910142, PsoDataType.Bool, 121, 0, 0), - new PsoStructureEntryInfo((MetaName)1933402526, PsoDataType.Bool, 122, 0, 0), - new PsoStructureEntryInfo((MetaName)1022007033, PsoDataType.Structure, 128, 0, MetaName.camThirdPersonCameraMetadataCustomBoundingBoxSettings), - new PsoStructureEntryInfo((MetaName)2861227361, PsoDataType.Bool, 152, 0, 0), - new PsoStructureEntryInfo((MetaName)1148495425, PsoDataType.Float, 156, 0, 0), - new PsoStructureEntryInfo((MetaName)536202543, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)1065618425, PsoDataType.Structure, 176, 0, MetaName.camThirdPersonCameraMetadataBasePivotPosition), - new PsoStructureEntryInfo((MetaName)3256568637, PsoDataType.Structure, 272, 0, MetaName.camThirdPersonCameraMetadataPivotPosition), - new PsoStructureEntryInfo((MetaName)588927535, PsoDataType.Structure, 320, 0, MetaName.camThirdPersonCameraMetadataPivotOverBoungingBoxSettings), - new PsoStructureEntryInfo((MetaName)2014345705, PsoDataType.Float, 344, 0, 0), - new PsoStructureEntryInfo((MetaName)3982287448, PsoDataType.Float, 348, 0, 0), - new PsoStructureEntryInfo((MetaName)2449849624, PsoDataType.Float, 352, 0, 0), - new PsoStructureEntryInfo((MetaName)695725580, PsoDataType.Float, 356, 0, 0), - new PsoStructureEntryInfo((MetaName)1397182427, PsoDataType.Float, 360, 0, 0), - new PsoStructureEntryInfo((MetaName)881872463, PsoDataType.Bool, 364, 0, 0), - new PsoStructureEntryInfo((MetaName)177572622, PsoDataType.Float, 368, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAttachParentSubmergedLevelToApplyFullAttachParentMatrixForRelativeOrbit, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAircraftGroundSpeedToApplyFullAttachParentMatrixForRelativeOrbit, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAircraftContactSpeedToApplyFullAttachParentMatrixForRelativeOrbit, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHoldTimeToBlockFullAttachParentMatrixForRelativeOrbit, PsoDataType.UInt, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAttachParentSpeedToClonePitchFromCinematicMountedCameras, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseCustomFramingInTightSpace, PsoDataType.Bool, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAttachSpeedToUpdateTightSpaceLevel, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.TightSpaceSpringConstant, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.TightSpaceSpringDampingRatio, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.DofSettingsInTightSpace, PsoDataType.String, 116, 7, 0), + new PsoStructureEntryInfo(MetaName.ShouldAttachToParentCentreOfGravity, PsoDataType.Bool, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseDynamicCentreOfGravity, PsoDataType.Bool, 121, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreVelocityOfAttachParentAttachEntity, PsoDataType.Bool, 122, 0, 0), + new PsoStructureEntryInfo(MetaName.CustomBoundingBoxSettings, PsoDataType.Structure, 128, 0, MetaName.camThirdPersonCameraMetadataCustomBoundingBoxSettings), + new PsoStructureEntryInfo(MetaName.ShouldApplyAttachPedPelvisOffset, PsoDataType.Bool, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachPedPelvisOffsetSpringConstant, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachPedPelvisOffsetSpringDampingRatio, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.BasePivotPosition, PsoDataType.Structure, 176, 0, MetaName.camThirdPersonCameraMetadataBasePivotPosition), + new PsoStructureEntryInfo(MetaName.PivotPosition, PsoDataType.Structure, 272, 0, MetaName.camThirdPersonCameraMetadataPivotPosition), + new PsoStructureEntryInfo(MetaName.PivotOverBoundingBoxSettings, PsoDataType.Structure, 320, 0, MetaName.camThirdPersonCameraMetadataPivotOverBoungingBoxSettings), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMinFootRoom, PsoDataType.Float, 344, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMaxFootRoom, PsoDataType.Float, 348, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMinFootRoomInTightSpace, PsoDataType.Float, 352, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMaxFootRoomInTightSpace, PsoDataType.Float, 356, 0, 0), + new PsoStructureEntryInfo(MetaName.BasePivotHeightScalingForFootRoom, PsoDataType.Float, 360, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreVerticalPivotOffsetForFootRoom, PsoDataType.Bool, 364, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSafeOrbitDistanceScalingForExtensions, PsoDataType.Float, 368, 0, 0), new PsoStructureEntryInfo((MetaName)560700931, PsoDataType.Float, 372, 0, 0), - new PsoStructureEntryInfo((MetaName)1828892401, PsoDataType.Float2, 376, 0, 0), - new PsoStructureEntryInfo((MetaName)2829148759, PsoDataType.Float, 384, 0, 0), - new PsoStructureEntryInfo((MetaName)1084689577, PsoDataType.Float, 388, 0, 0), - new PsoStructureEntryInfo((MetaName)3978450060, PsoDataType.Float, 392, 0, 0), - new PsoStructureEntryInfo((MetaName)1991191506, PsoDataType.Structure, 400, 0, MetaName.camThirdPersonCameraMetadataBuoyancySettings), - new PsoStructureEntryInfo((MetaName)1949881438, PsoDataType.Bool, 448, 0, 0), - new PsoStructureEntryInfo((MetaName)3863307203, PsoDataType.Bool, 449, 0, 0), - new PsoStructureEntryInfo((MetaName)3696538081, PsoDataType.Bool, 450, 0, 0), - new PsoStructureEntryInfo((MetaName)2213127338, PsoDataType.Bool, 451, 0, 0), - new PsoStructureEntryInfo((MetaName)724966028, PsoDataType.Bool, 452, 0, 0), - new PsoStructureEntryInfo((MetaName)2696635175, PsoDataType.Float, 456, 0, 0), - new PsoStructureEntryInfo((MetaName)1976571596, PsoDataType.Float, 460, 0, 0), - new PsoStructureEntryInfo((MetaName)551575094, PsoDataType.Float, 464, 0, 0), - new PsoStructureEntryInfo((MetaName)1557769430, PsoDataType.Float, 468, 0, 0), - new PsoStructureEntryInfo((MetaName)4155454260, PsoDataType.Float3, 480, 0, 0), + new PsoStructureEntryInfo(MetaName.CustomOrbitDistanceLimitsToForce, PsoDataType.Float2, 376, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceLimitSpringConstant, PsoDataType.Float, 384, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceLimitSpringDampingRatio, PsoDataType.Float, 388, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceScalingForCustomFirstPersonFallBack, PsoDataType.Float, 392, 0, 0), + new PsoStructureEntryInfo(MetaName.BuoyancySettings, PsoDataType.Structure, 400, 0, MetaName.camThirdPersonCameraMetadataBuoyancySettings), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreCollisionWithAttachParent, PsoDataType.Bool, 448, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreCollisionWithFollowVehicle, PsoDataType.Bool, 449, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreFollowVehicleForCollisionOrigin, PsoDataType.Bool, 450, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreFollowVehicleForCollisionRoot, PsoDataType.Bool, 451, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldPushBeyondAttachParentIfClipping, PsoDataType.Bool, 452, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxCollisionTestRadius, PsoDataType.Float, 456, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSafeRadiusReductionWithinPedMoverCapsule, PsoDataType.Float, 460, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionTestRadiusSpringConstant, PsoDataType.Float, 464, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionTestRadiusSpringDampingRatio, PsoDataType.Float, 468, 0, 0), + new PsoStructureEntryInfo(MetaName.CustomCollisionOriginRelativePosition, PsoDataType.Float3, 480, 0, 0), new PsoStructureEntryInfo((MetaName)4194152221, PsoDataType.Float3, 496, 0, 0), - new PsoStructureEntryInfo((MetaName)2702878862, PsoDataType.Bool, 512, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseCustomCollisionOrigin, PsoDataType.Bool, 512, 0, 0), new PsoStructureEntryInfo((MetaName)1998689777, PsoDataType.Bool, 513, 0, 0), new PsoStructureEntryInfo((MetaName)2235540893, PsoDataType.Bool, 514, 0, 0), new PsoStructureEntryInfo((MetaName)3479639237, PsoDataType.Float3, 528, 0, 0), new PsoStructureEntryInfo((MetaName)1496115250, PsoDataType.Float, 544, 0, 0), - new PsoStructureEntryInfo((MetaName)340312382, PsoDataType.Structure, 552, 0, MetaName.camThirdPersonCameraMetadataCollisionFallBackPosition), - new PsoStructureEntryInfo((MetaName)4279727627, PsoDataType.Float, 592, 0, 0), - new PsoStructureEntryInfo((MetaName)823526659, PsoDataType.Bool, 596, 0, 0), - new PsoStructureEntryInfo((MetaName)3507950586, PsoDataType.Float, 600, 0, 0), - new PsoStructureEntryInfo((MetaName)3397058689, PsoDataType.Float, 604, 0, 0), - new PsoStructureEntryInfo((MetaName)227846107, PsoDataType.Structure, 608, 0, MetaName.camThirdPersonCameraMetadataVehicleOnTopOfVehicleCollisionSettings), - new PsoStructureEntryInfo((MetaName)3658085406, PsoDataType.Float, 632, 0, 0), - new PsoStructureEntryInfo((MetaName)1654683326, PsoDataType.Float2, 636, 0, 0), - new PsoStructureEntryInfo((MetaName)1974814289, PsoDataType.Float2, 644, 0, 0), - new PsoStructureEntryInfo((MetaName)1778852906, PsoDataType.Float, 652, 0, 0), - new PsoStructureEntryInfo((MetaName)158553507, PsoDataType.Float, 656, 0, 0), - new PsoStructureEntryInfo((MetaName)3300166924, PsoDataType.Structure, 664, 0, MetaName.camThirdPersonCameraMetadataLookOverSettings), - new PsoStructureEntryInfo((MetaName)2793581079, PsoDataType.Bool, 688, 0, 0), - new PsoStructureEntryInfo((MetaName)2111969249, PsoDataType.Float2, 692, 0, 0), - new PsoStructureEntryInfo((MetaName)3068587259, PsoDataType.Float, 700, 0, 0), - new PsoStructureEntryInfo((MetaName)293341517, PsoDataType.Float, 704, 0, 0), - new PsoStructureEntryInfo((MetaName)3607038158, PsoDataType.Float, 708, 0, 0), - new PsoStructureEntryInfo((MetaName)4039533147, PsoDataType.Float2, 712, 0, 0), - new PsoStructureEntryInfo((MetaName)1356521412, PsoDataType.Float2, 720, 0, 0), - new PsoStructureEntryInfo((MetaName)3610920953, PsoDataType.Structure, 728, 0, MetaName.camThirdPersonCameraMetadataStealthZoomSettings), + new PsoStructureEntryInfo(MetaName.CollisionFallBackPosition, PsoDataType.Structure, 552, 0, MetaName.camThirdPersonCameraMetadataCollisionFallBackPosition), + new PsoStructureEntryInfo(MetaName.CollisionRootPositionFallBackToPivotBlendValue, PsoDataType.Float, 592, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldConstrainCollisionRootPositionAgainstClippingTypes, PsoDataType.Bool, 596, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionRootPositionSpringConstant, PsoDataType.Float, 600, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionRootPositionSpringDampingRatio, PsoDataType.Float, 604, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleOnTopOfVehicleCollisionSettings, PsoDataType.Structure, 608, 0, MetaName.camThirdPersonCameraMetadataVehicleOnTopOfVehicleCollisionSettings), + new PsoStructureEntryInfo(MetaName.IdealHeadingOffsetForLimiting, PsoDataType.Float, 632, 0, 0), + new PsoStructureEntryInfo(MetaName.RelativeOrbitHeadingLimits, PsoDataType.Float2, 636, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitPitchLimits, PsoDataType.Float2, 644, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseOrbitPitchOffset, PsoDataType.Float, 652, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseOrbitPitchOffsetInTightSpace, PsoDataType.Float, 656, 0, 0), + new PsoStructureEntryInfo(MetaName.LookOverSettings, PsoDataType.Structure, 664, 0, MetaName.camThirdPersonCameraMetadataLookOverSettings), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreAttachParentPitchForLookBehind, PsoDataType.Bool, 688, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceLimitsForBasePosition, PsoDataType.Float2, 692, 0, 0), + new PsoStructureEntryInfo(MetaName.PreToPostCollisionLookAtOrientationBlendValue, PsoDataType.Float, 700, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRollSpringConstant, PsoDataType.Float, 704, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRollSpringDampingRatio, PsoDataType.Float, 708, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRollDampingPitchSoftLimits, PsoDataType.Float2, 712, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRollDampingPitchHardLimits, PsoDataType.Float2, 720, 0, 0), + new PsoStructureEntryInfo(MetaName.StealthZoomSettings, PsoDataType.Structure, 728, 0, MetaName.camThirdPersonCameraMetadataStealthZoomSettings), new PsoStructureEntryInfo((MetaName)1947299079, PsoDataType.Structure, 752, 0, MetaName.camThirdPersonCameraMetadataQuadrupedalHeightSpring), - new PsoStructureEntryInfo((MetaName)490368749, PsoDataType.String, 776, 7, 0), + new PsoStructureEntryInfo(MetaName.MotionBlurSettings, PsoDataType.String, 776, 7, 0), new PsoStructureEntryInfo((MetaName)2122226771, PsoDataType.Bool, 780, 0, 0), - new PsoStructureEntryInfo((MetaName)2833081775, PsoDataType.String, 784, 7, 0), - new PsoStructureEntryInfo((MetaName)1348911901, PsoDataType.Bool, 788, 0, 0), - new PsoStructureEntryInfo((MetaName)870186590, PsoDataType.Bool, 789, 0, 0), - new PsoStructureEntryInfo((MetaName)4238055063, PsoDataType.Bool, 790, 0, 0), - new PsoStructureEntryInfo((MetaName)2917952843, PsoDataType.Bool, 791, 0, 0), - new PsoStructureEntryInfo((MetaName)1301399000, PsoDataType.Bool, 792, 0, 0), - new PsoStructureEntryInfo((MetaName)1419212045, PsoDataType.Bool, 793, 0, 0), - new PsoStructureEntryInfo((MetaName)114759485, PsoDataType.Bool, 794, 0, 0), - new PsoStructureEntryInfo((MetaName)1634093344, PsoDataType.Float, 796, 0, 0), - new PsoStructureEntryInfo((MetaName)2294924343, PsoDataType.Float, 800, 0, 0), - new PsoStructureEntryInfo((MetaName)9436207, PsoDataType.Float, 804, 0, 0), - new PsoStructureEntryInfo((MetaName)1350912934, PsoDataType.Float, 808, 0, 0), - new PsoStructureEntryInfo((MetaName)70391041, PsoDataType.Float, 812, 0, 0), - new PsoStructureEntryInfo((MetaName)2783842060, PsoDataType.Float, 816, 0, 0), - new PsoStructureEntryInfo((MetaName)3397272914, PsoDataType.UInt, 820, 0, 0), - new PsoStructureEntryInfo((MetaName)1807116888, PsoDataType.UInt, 824, 0, 0), - new PsoStructureEntryInfo((MetaName)3048647846, PsoDataType.UInt, 828, 0, 0), - new PsoStructureEntryInfo((MetaName)3132164856, PsoDataType.UInt, 832, 0, 0), - new PsoStructureEntryInfo((MetaName)4207333442, PsoDataType.Float, 836, 0, 0), - new PsoStructureEntryInfo((MetaName)1717370547, PsoDataType.Float, 840, 0, 0), - new PsoStructureEntryInfo((MetaName)447200092, PsoDataType.Float, 844, 0, 0), - new PsoStructureEntryInfo((MetaName)3347315427, PsoDataType.Float, 848, 0, 0), - new PsoStructureEntryInfo((MetaName)4137686847, PsoDataType.Bool, 852, 0, 0), - new PsoStructureEntryInfo((MetaName)3921296525, PsoDataType.Float, 856, 0, 0), - new PsoStructureEntryInfo((MetaName)2840529796, PsoDataType.Float, 860, 0, 0), - new PsoStructureEntryInfo((MetaName)2535634527, PsoDataType.Float, 864, 0, 0), - new PsoStructureEntryInfo((MetaName)1225855688, PsoDataType.Float, 868, 0, 0), - new PsoStructureEntryInfo((MetaName)2209545096, PsoDataType.String, 880, 7, 0), - new PsoStructureEntryInfo((MetaName)1635236307, PsoDataType.Structure, 888, 0, MetaName.camThirdPersonPedAimCameraMetadataLockOnTargetDampingSettings), - new PsoStructureEntryInfo((MetaName)4165908011, PsoDataType.Structure, 928, 0, MetaName.camThirdPersonPedAimCameraMetadataLockOnOrbitDistanceSettings), - new PsoStructureEntryInfo((MetaName)1399337810, PsoDataType.Float3, 976, 0, 0), - new PsoStructureEntryInfo((MetaName)442114217, PsoDataType.Float3, 992, 0, 0), - new PsoStructureEntryInfo((MetaName)575433612, PsoDataType.SInt, 1008, 0, 0), - new PsoStructureEntryInfo((MetaName)3180847895, PsoDataType.Bool, 1012, 0, 0), - new PsoStructureEntryInfo((MetaName)184490319, PsoDataType.Bool, 1013, 0, 0), - new PsoStructureEntryInfo((MetaName)1057367158, PsoDataType.String, 1016, 7, 0), + new PsoStructureEntryInfo(MetaName.LockOnEnvelopeRef, PsoDataType.String, 784, 7, 0), + new PsoStructureEntryInfo(MetaName.ShouldDisplayReticule, PsoDataType.Bool, 788, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldDisplayReticuleDuringInterpolation, PsoDataType.Bool, 789, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldAllowInterpolationSourceCameraToPersistReticule, PsoDataType.Bool, 790, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldApplyWeaponFov, PsoDataType.Bool, 791, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseLockOnAiming, PsoDataType.Bool, 792, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldLockOnToTargetEntityPosition, PsoDataType.Bool, 793, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldValidateLockOnTargetPosition, PsoDataType.Bool, 794, 0, 0), + new PsoStructureEntryInfo(MetaName.TripleHeadNearClip, PsoDataType.Float, 796, 0, 0), + new PsoStructureEntryInfo(MetaName.RecoilShakeAmplitudeScaling, PsoDataType.Float, 800, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceForLockOn, PsoDataType.Float, 804, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceForFineAimScaling, PsoDataType.Float, 808, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForFineAimScaling, PsoDataType.Float, 812, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAngleDeltaForLockOnSwitchBlendScaling, PsoDataType.Float, 816, 0, 0), + new PsoStructureEntryInfo(MetaName.MinBlendDurationForInitialLockOn, PsoDataType.UInt, 820, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxBlendDurationForInitialLockOn, PsoDataType.UInt, 824, 0, 0), + new PsoStructureEntryInfo(MetaName.MinBlendDurationForLockOnSwitch, PsoDataType.UInt, 828, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxBlendDurationForLockOnSwitch, PsoDataType.UInt, 832, 0, 0), + new PsoStructureEntryInfo(MetaName.FineAimBlendSpringConstant, PsoDataType.Float, 836, 0, 0), + new PsoStructureEntryInfo(MetaName.FineAimBlendSpringDampingRatio, PsoDataType.Float, 840, 0, 0), + new PsoStructureEntryInfo(MetaName.WeaponZoomFactorSpringConstant, PsoDataType.Float, 844, 0, 0), + new PsoStructureEntryInfo(MetaName.WeaponZoomFactorSpringDampingRatio, PsoDataType.Float, 848, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldFocusOnLockOnTarget, PsoDataType.Bool, 852, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseFovToEmulateWithFocalLengthMultiplier, PsoDataType.Float, 856, 0, 0), + new PsoStructureEntryInfo(MetaName.FocusParentToTargetBlendLevel, PsoDataType.Float, 860, 0, 0), + new PsoStructureEntryInfo(MetaName.SecondaryFocusParentToTargetBlendLevel, PsoDataType.Float, 864, 0, 0), + new PsoStructureEntryInfo(MetaName.MinFocusToSecondaryFocusDistance, PsoDataType.Float, 868, 0, 0), + new PsoStructureEntryInfo(MetaName.LockOnTargetStunnedEnvelopeRef, PsoDataType.String, 880, 7, 0), + new PsoStructureEntryInfo(MetaName.LockOnTargetDampingSettings, PsoDataType.Structure, 888, 0, MetaName.camThirdPersonPedAimCameraMetadataLockOnTargetDampingSettings), + new PsoStructureEntryInfo(MetaName.LockOnOrbitDistanceSettings, PsoDataType.Structure, 928, 0, MetaName.camThirdPersonPedAimCameraMetadataLockOnOrbitDistanceSettings), + new PsoStructureEntryInfo(MetaName.ParentRelativeAttachOffset, PsoDataType.Float3, 976, 0, 0), + new PsoStructureEntryInfo(MetaName.ParentRelativeAttachOffsetAtOrbitHeadingLimits, PsoDataType.Float3, 992, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachBoneTag, PsoDataType.SInt, 1008, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldScriptedAimTaskOverrideOrbitPitchLimits, PsoDataType.Bool, 1012, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldAimSweepOverrideOrbitPitchLimits, PsoDataType.Bool, 1013, 0, 0), + new PsoStructureEntryInfo(MetaName.DofSettingsForMobilePhoneShallowDofMode, PsoDataType.String, 1016, 7, 0), new PsoStructureEntryInfo((MetaName)309842601, PsoDataType.Float, 1020, 0, 0), new PsoStructureEntryInfo((MetaName)3770307856, PsoDataType.Bool, 1024, 0, 0) ); case MetaName.camThirdPersonPedAimCameraMetadataLockOnTargetDampingSettings: return new PsoStructureInfo(MetaName.camThirdPersonPedAimCameraMetadataLockOnTargetDampingSettings, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)2339455115, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1625429307, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)2414166560, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1044796272, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)122790262, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)399773061, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)340673450, PsoDataType.Float, 32, 0, 0) + new PsoStructureEntryInfo(MetaName.ShouldApplyDamping, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.StunnedHeadingSpringConstant, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.StunnedHeadingSpringDampingRatio, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.StunnedPitchSpringConstant, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.StunnedPitchSpringDampingRatio, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.StunnedDistanceSpringConstant, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.StunnedDistanceSpringDampingRatio, PsoDataType.Float, 32, 0, 0) ); case MetaName.camThirdPersonPedAimCameraMetadataLockOnOrbitDistanceSettings: return new PsoStructureInfo(MetaName.camThirdPersonPedAimCameraMetadataLockOnOrbitDistanceSettings, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)1357431466, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)4280147981, PsoDataType.Float2, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)1871429041, PsoDataType.Float2, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2983717675, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1300443955, PsoDataType.Float, 32, 0, 0) + new PsoStructureEntryInfo(MetaName.ShouldApplyScaling, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.LockOnDistanceLimits, PsoDataType.Float2, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceScalingLimits, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceScalingSpringConstant, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceScalingSpringDampingRatio, PsoDataType.Float, 32, 0, 0) ); case MetaName.camThirdPersonPedAssistedAimCameraMetadata: return new PsoStructureInfo(MetaName.camThirdPersonPedAssistedAimCameraMetadata, 0, 0, 1584, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2884954151, PsoDataType.String, 32, 7, 0), - new PsoStructureEntryInfo((MetaName)730193180, PsoDataType.String, 36, 7, 0), - new PsoStructureEntryInfo((MetaName)1443569911, PsoDataType.String, 40, 7, 0), - new PsoStructureEntryInfo((MetaName)60641442, PsoDataType.String, 44, 7, 0), - new PsoStructureEntryInfo((MetaName)1865815245, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2755051531, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ControlHelperRef, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo(MetaName.HintHelperRef, PsoDataType.String, 36, 7, 0), + new PsoStructureEntryInfo(MetaName.CatchUpHelperRef, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo(MetaName.BaseAttachVelocityToIgnoreEnvelopeRef, PsoDataType.String, 44, 7, 0), + new PsoStructureEntryInfo(MetaName.BaseFov, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseNearClip, PsoDataType.Float, 52, 0, 0), new PsoStructureEntryInfo((MetaName)3305154880, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)2846809829, PsoDataType.Bool, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)3002500493, PsoDataType.Bool, 61, 0, 0), - new PsoStructureEntryInfo((MetaName)2521592812, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)4067016949, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldOrbitRelativeToAttachParentOrientation, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldPersistOrbitOrientationRelativeToAttachParent, PsoDataType.Bool, 61, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentMatrixForRelativeOrbitSpringConstant, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentMatrixForRelativeOrbitSpringDampingRatio, PsoDataType.Float, 68, 0, 0), new PsoStructureEntryInfo((MetaName)2406229624, PsoDataType.Float, 72, 0, 0), new PsoStructureEntryInfo((MetaName)727876548, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)3039556728, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)1708190798, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)1190961214, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)897419234, PsoDataType.UInt, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)150825038, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)4033450681, PsoDataType.Bool, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)2058076685, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)488216999, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)1406371922, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)2814402846, PsoDataType.String, 116, 7, 0), - new PsoStructureEntryInfo((MetaName)372575308, PsoDataType.Bool, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)799910142, PsoDataType.Bool, 121, 0, 0), - new PsoStructureEntryInfo((MetaName)1933402526, PsoDataType.Bool, 122, 0, 0), - new PsoStructureEntryInfo((MetaName)1022007033, PsoDataType.Structure, 128, 0, MetaName.camThirdPersonCameraMetadataCustomBoundingBoxSettings), - new PsoStructureEntryInfo((MetaName)2861227361, PsoDataType.Bool, 152, 0, 0), - new PsoStructureEntryInfo((MetaName)1148495425, PsoDataType.Float, 156, 0, 0), - new PsoStructureEntryInfo((MetaName)536202543, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)1065618425, PsoDataType.Structure, 176, 0, MetaName.camThirdPersonCameraMetadataBasePivotPosition), - new PsoStructureEntryInfo((MetaName)3256568637, PsoDataType.Structure, 272, 0, MetaName.camThirdPersonCameraMetadataPivotPosition), - new PsoStructureEntryInfo((MetaName)588927535, PsoDataType.Structure, 320, 0, MetaName.camThirdPersonCameraMetadataPivotOverBoungingBoxSettings), - new PsoStructureEntryInfo((MetaName)2014345705, PsoDataType.Float, 344, 0, 0), - new PsoStructureEntryInfo((MetaName)3982287448, PsoDataType.Float, 348, 0, 0), - new PsoStructureEntryInfo((MetaName)2449849624, PsoDataType.Float, 352, 0, 0), - new PsoStructureEntryInfo((MetaName)695725580, PsoDataType.Float, 356, 0, 0), - new PsoStructureEntryInfo((MetaName)1397182427, PsoDataType.Float, 360, 0, 0), - new PsoStructureEntryInfo((MetaName)881872463, PsoDataType.Bool, 364, 0, 0), - new PsoStructureEntryInfo((MetaName)177572622, PsoDataType.Float, 368, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAttachParentSubmergedLevelToApplyFullAttachParentMatrixForRelativeOrbit, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAircraftGroundSpeedToApplyFullAttachParentMatrixForRelativeOrbit, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAircraftContactSpeedToApplyFullAttachParentMatrixForRelativeOrbit, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHoldTimeToBlockFullAttachParentMatrixForRelativeOrbit, PsoDataType.UInt, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAttachParentSpeedToClonePitchFromCinematicMountedCameras, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseCustomFramingInTightSpace, PsoDataType.Bool, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAttachSpeedToUpdateTightSpaceLevel, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.TightSpaceSpringConstant, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.TightSpaceSpringDampingRatio, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.DofSettingsInTightSpace, PsoDataType.String, 116, 7, 0), + new PsoStructureEntryInfo(MetaName.ShouldAttachToParentCentreOfGravity, PsoDataType.Bool, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseDynamicCentreOfGravity, PsoDataType.Bool, 121, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreVelocityOfAttachParentAttachEntity, PsoDataType.Bool, 122, 0, 0), + new PsoStructureEntryInfo(MetaName.CustomBoundingBoxSettings, PsoDataType.Structure, 128, 0, MetaName.camThirdPersonCameraMetadataCustomBoundingBoxSettings), + new PsoStructureEntryInfo(MetaName.ShouldApplyAttachPedPelvisOffset, PsoDataType.Bool, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachPedPelvisOffsetSpringConstant, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachPedPelvisOffsetSpringDampingRatio, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.BasePivotPosition, PsoDataType.Structure, 176, 0, MetaName.camThirdPersonCameraMetadataBasePivotPosition), + new PsoStructureEntryInfo(MetaName.PivotPosition, PsoDataType.Structure, 272, 0, MetaName.camThirdPersonCameraMetadataPivotPosition), + new PsoStructureEntryInfo(MetaName.PivotOverBoundingBoxSettings, PsoDataType.Structure, 320, 0, MetaName.camThirdPersonCameraMetadataPivotOverBoungingBoxSettings), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMinFootRoom, PsoDataType.Float, 344, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMaxFootRoom, PsoDataType.Float, 348, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMinFootRoomInTightSpace, PsoDataType.Float, 352, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMaxFootRoomInTightSpace, PsoDataType.Float, 356, 0, 0), + new PsoStructureEntryInfo(MetaName.BasePivotHeightScalingForFootRoom, PsoDataType.Float, 360, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreVerticalPivotOffsetForFootRoom, PsoDataType.Bool, 364, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSafeOrbitDistanceScalingForExtensions, PsoDataType.Float, 368, 0, 0), new PsoStructureEntryInfo((MetaName)560700931, PsoDataType.Float, 372, 0, 0), - new PsoStructureEntryInfo((MetaName)1828892401, PsoDataType.Float2, 376, 0, 0), - new PsoStructureEntryInfo((MetaName)2829148759, PsoDataType.Float, 384, 0, 0), - new PsoStructureEntryInfo((MetaName)1084689577, PsoDataType.Float, 388, 0, 0), - new PsoStructureEntryInfo((MetaName)3978450060, PsoDataType.Float, 392, 0, 0), - new PsoStructureEntryInfo((MetaName)1991191506, PsoDataType.Structure, 400, 0, MetaName.camThirdPersonCameraMetadataBuoyancySettings), - new PsoStructureEntryInfo((MetaName)1949881438, PsoDataType.Bool, 448, 0, 0), - new PsoStructureEntryInfo((MetaName)3863307203, PsoDataType.Bool, 449, 0, 0), - new PsoStructureEntryInfo((MetaName)3696538081, PsoDataType.Bool, 450, 0, 0), - new PsoStructureEntryInfo((MetaName)2213127338, PsoDataType.Bool, 451, 0, 0), - new PsoStructureEntryInfo((MetaName)724966028, PsoDataType.Bool, 452, 0, 0), - new PsoStructureEntryInfo((MetaName)2696635175, PsoDataType.Float, 456, 0, 0), - new PsoStructureEntryInfo((MetaName)1976571596, PsoDataType.Float, 460, 0, 0), - new PsoStructureEntryInfo((MetaName)551575094, PsoDataType.Float, 464, 0, 0), - new PsoStructureEntryInfo((MetaName)1557769430, PsoDataType.Float, 468, 0, 0), - new PsoStructureEntryInfo((MetaName)4155454260, PsoDataType.Float3, 480, 0, 0), + new PsoStructureEntryInfo(MetaName.CustomOrbitDistanceLimitsToForce, PsoDataType.Float2, 376, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceLimitSpringConstant, PsoDataType.Float, 384, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceLimitSpringDampingRatio, PsoDataType.Float, 388, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceScalingForCustomFirstPersonFallBack, PsoDataType.Float, 392, 0, 0), + new PsoStructureEntryInfo(MetaName.BuoyancySettings, PsoDataType.Structure, 400, 0, MetaName.camThirdPersonCameraMetadataBuoyancySettings), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreCollisionWithAttachParent, PsoDataType.Bool, 448, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreCollisionWithFollowVehicle, PsoDataType.Bool, 449, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreFollowVehicleForCollisionOrigin, PsoDataType.Bool, 450, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreFollowVehicleForCollisionRoot, PsoDataType.Bool, 451, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldPushBeyondAttachParentIfClipping, PsoDataType.Bool, 452, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxCollisionTestRadius, PsoDataType.Float, 456, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSafeRadiusReductionWithinPedMoverCapsule, PsoDataType.Float, 460, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionTestRadiusSpringConstant, PsoDataType.Float, 464, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionTestRadiusSpringDampingRatio, PsoDataType.Float, 468, 0, 0), + new PsoStructureEntryInfo(MetaName.CustomCollisionOriginRelativePosition, PsoDataType.Float3, 480, 0, 0), new PsoStructureEntryInfo((MetaName)4194152221, PsoDataType.Float3, 496, 0, 0), - new PsoStructureEntryInfo((MetaName)2702878862, PsoDataType.Bool, 512, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseCustomCollisionOrigin, PsoDataType.Bool, 512, 0, 0), new PsoStructureEntryInfo((MetaName)1998689777, PsoDataType.Bool, 513, 0, 0), new PsoStructureEntryInfo((MetaName)2235540893, PsoDataType.Bool, 514, 0, 0), new PsoStructureEntryInfo((MetaName)3479639237, PsoDataType.Float3, 528, 0, 0), new PsoStructureEntryInfo((MetaName)1496115250, PsoDataType.Float, 544, 0, 0), - new PsoStructureEntryInfo((MetaName)340312382, PsoDataType.Structure, 552, 0, MetaName.camThirdPersonCameraMetadataCollisionFallBackPosition), - new PsoStructureEntryInfo((MetaName)4279727627, PsoDataType.Float, 592, 0, 0), - new PsoStructureEntryInfo((MetaName)823526659, PsoDataType.Bool, 596, 0, 0), - new PsoStructureEntryInfo((MetaName)3507950586, PsoDataType.Float, 600, 0, 0), - new PsoStructureEntryInfo((MetaName)3397058689, PsoDataType.Float, 604, 0, 0), - new PsoStructureEntryInfo((MetaName)227846107, PsoDataType.Structure, 608, 0, MetaName.camThirdPersonCameraMetadataVehicleOnTopOfVehicleCollisionSettings), - new PsoStructureEntryInfo((MetaName)3658085406, PsoDataType.Float, 632, 0, 0), - new PsoStructureEntryInfo((MetaName)1654683326, PsoDataType.Float2, 636, 0, 0), - new PsoStructureEntryInfo((MetaName)1974814289, PsoDataType.Float2, 644, 0, 0), - new PsoStructureEntryInfo((MetaName)1778852906, PsoDataType.Float, 652, 0, 0), - new PsoStructureEntryInfo((MetaName)158553507, PsoDataType.Float, 656, 0, 0), - new PsoStructureEntryInfo((MetaName)3300166924, PsoDataType.Structure, 664, 0, MetaName.camThirdPersonCameraMetadataLookOverSettings), - new PsoStructureEntryInfo((MetaName)2793581079, PsoDataType.Bool, 688, 0, 0), - new PsoStructureEntryInfo((MetaName)2111969249, PsoDataType.Float2, 692, 0, 0), - new PsoStructureEntryInfo((MetaName)3068587259, PsoDataType.Float, 700, 0, 0), - new PsoStructureEntryInfo((MetaName)293341517, PsoDataType.Float, 704, 0, 0), - new PsoStructureEntryInfo((MetaName)3607038158, PsoDataType.Float, 708, 0, 0), - new PsoStructureEntryInfo((MetaName)4039533147, PsoDataType.Float2, 712, 0, 0), - new PsoStructureEntryInfo((MetaName)1356521412, PsoDataType.Float2, 720, 0, 0), - new PsoStructureEntryInfo((MetaName)3610920953, PsoDataType.Structure, 728, 0, MetaName.camThirdPersonCameraMetadataStealthZoomSettings), + new PsoStructureEntryInfo(MetaName.CollisionFallBackPosition, PsoDataType.Structure, 552, 0, MetaName.camThirdPersonCameraMetadataCollisionFallBackPosition), + new PsoStructureEntryInfo(MetaName.CollisionRootPositionFallBackToPivotBlendValue, PsoDataType.Float, 592, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldConstrainCollisionRootPositionAgainstClippingTypes, PsoDataType.Bool, 596, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionRootPositionSpringConstant, PsoDataType.Float, 600, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionRootPositionSpringDampingRatio, PsoDataType.Float, 604, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleOnTopOfVehicleCollisionSettings, PsoDataType.Structure, 608, 0, MetaName.camThirdPersonCameraMetadataVehicleOnTopOfVehicleCollisionSettings), + new PsoStructureEntryInfo(MetaName.IdealHeadingOffsetForLimiting, PsoDataType.Float, 632, 0, 0), + new PsoStructureEntryInfo(MetaName.RelativeOrbitHeadingLimits, PsoDataType.Float2, 636, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitPitchLimits, PsoDataType.Float2, 644, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseOrbitPitchOffset, PsoDataType.Float, 652, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseOrbitPitchOffsetInTightSpace, PsoDataType.Float, 656, 0, 0), + new PsoStructureEntryInfo(MetaName.LookOverSettings, PsoDataType.Structure, 664, 0, MetaName.camThirdPersonCameraMetadataLookOverSettings), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreAttachParentPitchForLookBehind, PsoDataType.Bool, 688, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceLimitsForBasePosition, PsoDataType.Float2, 692, 0, 0), + new PsoStructureEntryInfo(MetaName.PreToPostCollisionLookAtOrientationBlendValue, PsoDataType.Float, 700, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRollSpringConstant, PsoDataType.Float, 704, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRollSpringDampingRatio, PsoDataType.Float, 708, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRollDampingPitchSoftLimits, PsoDataType.Float2, 712, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRollDampingPitchHardLimits, PsoDataType.Float2, 720, 0, 0), + new PsoStructureEntryInfo(MetaName.StealthZoomSettings, PsoDataType.Structure, 728, 0, MetaName.camThirdPersonCameraMetadataStealthZoomSettings), new PsoStructureEntryInfo((MetaName)1947299079, PsoDataType.Structure, 752, 0, MetaName.camThirdPersonCameraMetadataQuadrupedalHeightSpring), - new PsoStructureEntryInfo((MetaName)490368749, PsoDataType.String, 776, 7, 0), + new PsoStructureEntryInfo(MetaName.MotionBlurSettings, PsoDataType.String, 776, 7, 0), new PsoStructureEntryInfo((MetaName)2122226771, PsoDataType.Bool, 780, 0, 0), - new PsoStructureEntryInfo((MetaName)2833081775, PsoDataType.String, 784, 7, 0), - new PsoStructureEntryInfo((MetaName)1348911901, PsoDataType.Bool, 788, 0, 0), - new PsoStructureEntryInfo((MetaName)870186590, PsoDataType.Bool, 789, 0, 0), - new PsoStructureEntryInfo((MetaName)4238055063, PsoDataType.Bool, 790, 0, 0), - new PsoStructureEntryInfo((MetaName)2917952843, PsoDataType.Bool, 791, 0, 0), - new PsoStructureEntryInfo((MetaName)1301399000, PsoDataType.Bool, 792, 0, 0), - new PsoStructureEntryInfo((MetaName)1419212045, PsoDataType.Bool, 793, 0, 0), - new PsoStructureEntryInfo((MetaName)114759485, PsoDataType.Bool, 794, 0, 0), - new PsoStructureEntryInfo((MetaName)1634093344, PsoDataType.Float, 796, 0, 0), - new PsoStructureEntryInfo((MetaName)2294924343, PsoDataType.Float, 800, 0, 0), - new PsoStructureEntryInfo((MetaName)9436207, PsoDataType.Float, 804, 0, 0), - new PsoStructureEntryInfo((MetaName)1350912934, PsoDataType.Float, 808, 0, 0), - new PsoStructureEntryInfo((MetaName)70391041, PsoDataType.Float, 812, 0, 0), - new PsoStructureEntryInfo((MetaName)2783842060, PsoDataType.Float, 816, 0, 0), - new PsoStructureEntryInfo((MetaName)3397272914, PsoDataType.UInt, 820, 0, 0), - new PsoStructureEntryInfo((MetaName)1807116888, PsoDataType.UInt, 824, 0, 0), - new PsoStructureEntryInfo((MetaName)3048647846, PsoDataType.UInt, 828, 0, 0), - new PsoStructureEntryInfo((MetaName)3132164856, PsoDataType.UInt, 832, 0, 0), - new PsoStructureEntryInfo((MetaName)4207333442, PsoDataType.Float, 836, 0, 0), - new PsoStructureEntryInfo((MetaName)1717370547, PsoDataType.Float, 840, 0, 0), - new PsoStructureEntryInfo((MetaName)447200092, PsoDataType.Float, 844, 0, 0), - new PsoStructureEntryInfo((MetaName)3347315427, PsoDataType.Float, 848, 0, 0), - new PsoStructureEntryInfo((MetaName)4137686847, PsoDataType.Bool, 852, 0, 0), - new PsoStructureEntryInfo((MetaName)3921296525, PsoDataType.Float, 856, 0, 0), - new PsoStructureEntryInfo((MetaName)2840529796, PsoDataType.Float, 860, 0, 0), - new PsoStructureEntryInfo((MetaName)2535634527, PsoDataType.Float, 864, 0, 0), - new PsoStructureEntryInfo((MetaName)1225855688, PsoDataType.Float, 868, 0, 0), - new PsoStructureEntryInfo((MetaName)2209545096, PsoDataType.String, 880, 7, 0), - new PsoStructureEntryInfo((MetaName)1635236307, PsoDataType.Structure, 888, 0, MetaName.camThirdPersonPedAimCameraMetadataLockOnTargetDampingSettings), - new PsoStructureEntryInfo((MetaName)4165908011, PsoDataType.Structure, 928, 0, MetaName.camThirdPersonPedAimCameraMetadataLockOnOrbitDistanceSettings), - new PsoStructureEntryInfo((MetaName)1399337810, PsoDataType.Float3, 976, 0, 0), - new PsoStructureEntryInfo((MetaName)442114217, PsoDataType.Float3, 992, 0, 0), - new PsoStructureEntryInfo((MetaName)575433612, PsoDataType.SInt, 1008, 0, 0), - new PsoStructureEntryInfo((MetaName)3180847895, PsoDataType.Bool, 1012, 0, 0), - new PsoStructureEntryInfo((MetaName)184490319, PsoDataType.Bool, 1013, 0, 0), - new PsoStructureEntryInfo((MetaName)1057367158, PsoDataType.String, 1016, 7, 0), + new PsoStructureEntryInfo(MetaName.LockOnEnvelopeRef, PsoDataType.String, 784, 7, 0), + new PsoStructureEntryInfo(MetaName.ShouldDisplayReticule, PsoDataType.Bool, 788, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldDisplayReticuleDuringInterpolation, PsoDataType.Bool, 789, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldAllowInterpolationSourceCameraToPersistReticule, PsoDataType.Bool, 790, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldApplyWeaponFov, PsoDataType.Bool, 791, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseLockOnAiming, PsoDataType.Bool, 792, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldLockOnToTargetEntityPosition, PsoDataType.Bool, 793, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldValidateLockOnTargetPosition, PsoDataType.Bool, 794, 0, 0), + new PsoStructureEntryInfo(MetaName.TripleHeadNearClip, PsoDataType.Float, 796, 0, 0), + new PsoStructureEntryInfo(MetaName.RecoilShakeAmplitudeScaling, PsoDataType.Float, 800, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceForLockOn, PsoDataType.Float, 804, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceForFineAimScaling, PsoDataType.Float, 808, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForFineAimScaling, PsoDataType.Float, 812, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAngleDeltaForLockOnSwitchBlendScaling, PsoDataType.Float, 816, 0, 0), + new PsoStructureEntryInfo(MetaName.MinBlendDurationForInitialLockOn, PsoDataType.UInt, 820, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxBlendDurationForInitialLockOn, PsoDataType.UInt, 824, 0, 0), + new PsoStructureEntryInfo(MetaName.MinBlendDurationForLockOnSwitch, PsoDataType.UInt, 828, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxBlendDurationForLockOnSwitch, PsoDataType.UInt, 832, 0, 0), + new PsoStructureEntryInfo(MetaName.FineAimBlendSpringConstant, PsoDataType.Float, 836, 0, 0), + new PsoStructureEntryInfo(MetaName.FineAimBlendSpringDampingRatio, PsoDataType.Float, 840, 0, 0), + new PsoStructureEntryInfo(MetaName.WeaponZoomFactorSpringConstant, PsoDataType.Float, 844, 0, 0), + new PsoStructureEntryInfo(MetaName.WeaponZoomFactorSpringDampingRatio, PsoDataType.Float, 848, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldFocusOnLockOnTarget, PsoDataType.Bool, 852, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseFovToEmulateWithFocalLengthMultiplier, PsoDataType.Float, 856, 0, 0), + new PsoStructureEntryInfo(MetaName.FocusParentToTargetBlendLevel, PsoDataType.Float, 860, 0, 0), + new PsoStructureEntryInfo(MetaName.SecondaryFocusParentToTargetBlendLevel, PsoDataType.Float, 864, 0, 0), + new PsoStructureEntryInfo(MetaName.MinFocusToSecondaryFocusDistance, PsoDataType.Float, 868, 0, 0), + new PsoStructureEntryInfo(MetaName.LockOnTargetStunnedEnvelopeRef, PsoDataType.String, 880, 7, 0), + new PsoStructureEntryInfo(MetaName.LockOnTargetDampingSettings, PsoDataType.Structure, 888, 0, MetaName.camThirdPersonPedAimCameraMetadataLockOnTargetDampingSettings), + new PsoStructureEntryInfo(MetaName.LockOnOrbitDistanceSettings, PsoDataType.Structure, 928, 0, MetaName.camThirdPersonPedAimCameraMetadataLockOnOrbitDistanceSettings), + new PsoStructureEntryInfo(MetaName.ParentRelativeAttachOffset, PsoDataType.Float3, 976, 0, 0), + new PsoStructureEntryInfo(MetaName.ParentRelativeAttachOffsetAtOrbitHeadingLimits, PsoDataType.Float3, 992, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachBoneTag, PsoDataType.SInt, 1008, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldScriptedAimTaskOverrideOrbitPitchLimits, PsoDataType.Bool, 1012, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldAimSweepOverrideOrbitPitchLimits, PsoDataType.Bool, 1013, 0, 0), + new PsoStructureEntryInfo(MetaName.DofSettingsForMobilePhoneShallowDofMode, PsoDataType.String, 1016, 7, 0), new PsoStructureEntryInfo((MetaName)309842601, PsoDataType.Float, 1020, 0, 0), new PsoStructureEntryInfo((MetaName)3770307856, PsoDataType.Bool, 1024, 0, 0), new PsoStructureEntryInfo((MetaName)2612404486, PsoDataType.Bool, 1040, 0, 0), @@ -4228,32 +4228,32 @@ namespace CodeWalker.GameFiles ); case MetaName.camThirdPersonPedAssistedAimCameraShakeActivityScalingSettings: return new PsoStructureInfo(MetaName.camThirdPersonPedAssistedAimCameraShakeActivityScalingSettings, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)2919368248, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2111282409, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)165735146, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.AmplitudeScale, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.BlendInSpringConstant, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.BlendOutSpringConstant, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringDampingRatio, PsoDataType.Float, 20, 0, 0) ); case MetaName.camThirdPersonPedAssistedAimCameraRunningShakeSettings: return new PsoStructureInfo(MetaName.camThirdPersonPedAssistedAimCameraRunningShakeSettings, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3172666582, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)272708601, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.MinAmplitude, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAmplitude, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo((MetaName)3083741385, PsoDataType.Bool, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2434404012, PsoDataType.Bool, 21, 0, 0), new PsoStructureEntryInfo((MetaName)1424595128, PsoDataType.Bool, 22, 0, 0) ); case MetaName.camThirdPersonPedAssistedAimCameraPivotScalingSettings: return new PsoStructureInfo(MetaName.camThirdPersonPedAssistedAimCameraPivotScalingSettings, 0, 0, 56, - new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringConstant, PsoDataType.Float, 8, 0, 0), new PsoStructureEntryInfo((MetaName)3290868314, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)3357849814, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxZoomFactor, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo((MetaName)1239610477, PsoDataType.Float, 20, 0, 0), new PsoStructureEntryInfo((MetaName)4266810853, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringDampingRatio, PsoDataType.Float, 28, 0, 0), new PsoStructureEntryInfo((MetaName)2490035552, PsoDataType.Float, 32, 0, 0), new PsoStructureEntryInfo((MetaName)1582111169, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)305674207, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2119254607, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.ErrorThreshold, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.SideOffset, PsoDataType.Float, 44, 0, 0), new PsoStructureEntryInfo((MetaName)3185812029, PsoDataType.Float, 48, 0, 0), new PsoStructureEntryInfo((MetaName)2740464011, PsoDataType.Float, 52, 0, 0) ); @@ -4261,15 +4261,15 @@ namespace CodeWalker.GameFiles return new PsoStructureInfo(MetaName.camThirdPersonPedAssistedAimCameraShootingFocusSettings, 0, 0, 56, new PsoStructureEntryInfo((MetaName)1778381348, PsoDataType.Bool, 8, 0, 0), new PsoStructureEntryInfo((MetaName)352609433, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)2111282409, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)165735146, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.BlendInSpringConstant, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.BlendOutSpringConstant, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringDampingRatio, PsoDataType.Float, 24, 0, 0), new PsoStructureEntryInfo((MetaName)2503271690, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2014345705, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)3982287448, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)2449849624, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)695725580, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)3357849814, PsoDataType.Float, 48, 0, 0) + new PsoStructureEntryInfo(MetaName.ScreenRatioForMinFootRoom, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMaxFootRoom, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMinFootRoomInTightSpace, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMaxFootRoomInTightSpace, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxZoomFactor, PsoDataType.Float, 48, 0, 0) ); case MetaName.camThirdPersonPedAssistedAimCameraCinematicMomentSettings: return new PsoStructureInfo(MetaName.camThirdPersonPedAssistedAimCameraCinematicMomentSettings, 0, 0, 184, @@ -4283,24 +4283,24 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)2011477591, PsoDataType.Float, 36, 0, 0), new PsoStructureEntryInfo((MetaName)3944656129, PsoDataType.UInt, 40, 0, 0), new PsoStructureEntryInfo((MetaName)3273599536, PsoDataType.String, 44, 7, 0), - new PsoStructureEntryInfo((MetaName)447392537, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.ZoomFactor, PsoDataType.Float, 48, 0, 0), new PsoStructureEntryInfo((MetaName)1293989475, PsoDataType.Float, 52, 0, 0), new PsoStructureEntryInfo((MetaName)3934763180, PsoDataType.Structure, 56, 0, MetaName.camThirdPersonPedAssistedAimCameraLockOnAlignmentSettings), new PsoStructureEntryInfo((MetaName)4209943355, PsoDataType.Float, 112, 0, 0), new PsoStructureEntryInfo((MetaName)3222932576, PsoDataType.Float, 116, 0, 0), new PsoStructureEntryInfo((MetaName)1411402256, PsoDataType.Structure, 120, 0, MetaName.camThirdPersonPedAssistedAimCameraPlayerFramingSettings), - new PsoStructureEntryInfo((MetaName)2014345705, PsoDataType.Float, 168, 0, 0), - new PsoStructureEntryInfo((MetaName)3982287448, PsoDataType.Float, 172, 0, 0), - new PsoStructureEntryInfo((MetaName)2449849624, PsoDataType.Float, 176, 0, 0), - new PsoStructureEntryInfo((MetaName)695725580, PsoDataType.Float, 180, 0, 0) + new PsoStructureEntryInfo(MetaName.ScreenRatioForMinFootRoom, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMaxFootRoom, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMinFootRoomInTightSpace, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMaxFootRoomInTightSpace, PsoDataType.Float, 180, 0, 0) ); case MetaName.camThirdPersonPedAssistedAimCameraLockOnAlignmentSettings: return new PsoStructureInfo(MetaName.camThirdPersonPedAssistedAimCameraLockOnAlignmentSettings, 0, 0, 56, - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo((MetaName)2192037365, PsoDataType.Float, 12, 0, 0), new PsoStructureEntryInfo((MetaName)1207772736, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo((MetaName)1953981041, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1252108818, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.IdleCmini, PsoDataType.Float, 24, 0, 0), new PsoStructureEntryInfo((MetaName)3067708566, PsoDataType.Float, 28, 0, 0), new PsoStructureEntryInfo((MetaName)3928624067, PsoDataType.Float, 32, 0, 0), new PsoStructureEntryInfo((MetaName)4117544351, PsoDataType.Float, 36, 0, 0), @@ -4310,11 +4310,11 @@ namespace CodeWalker.GameFiles ); case MetaName.camThirdPersonPedAssistedAimCameraPlayerFramingSettings: return new PsoStructureInfo(MetaName.camThirdPersonPedAssistedAimCameraPlayerFramingSettings, 0, 0, 48, - new PsoStructureEntryInfo((MetaName)1512162309, PsoDataType.UInt, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)75961662, PsoDataType.UInt, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)4289809678, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.AttackDelay, PsoDataType.UInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.AttackDuration, PsoDataType.UInt, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.ReleaseDelay, PsoDataType.UInt, 16, 0, 0), new PsoStructureEntryInfo((MetaName)1918481730, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2095341670, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.DesiredPitch, PsoDataType.Float, 24, 0, 0), new PsoStructureEntryInfo((MetaName)3067708566, PsoDataType.Float, 28, 0, 0), new PsoStructureEntryInfo((MetaName)3928624067, PsoDataType.Float, 32, 0, 0), new PsoStructureEntryInfo((MetaName)4117544351, PsoDataType.Float, 36, 0, 0), @@ -4330,10 +4330,10 @@ namespace CodeWalker.GameFiles ); case MetaName.camThirdPersonPedAssistedAimCameraInCoverSettings: return new PsoStructureInfo(MetaName.camThirdPersonPedAssistedAimCameraInCoverSettings, 0, 0, 112, - new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)2014345705, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3982287448, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringConstant, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringDampingRatio, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMinFootRoom, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMaxFootRoom, PsoDataType.Float, 20, 0, 0), new PsoStructureEntryInfo((MetaName)3044106186, PsoDataType.Bool, 24, 0, 0), new PsoStructureEntryInfo((MetaName)2342994624, PsoDataType.Float, 28, 0, 0), new PsoStructureEntryInfo((MetaName)2363962395, PsoDataType.Float, 32, 0, 0), @@ -4342,7 +4342,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)1163820100, PsoDataType.Float, 44, 0, 0), new PsoStructureEntryInfo((MetaName)1153320978, PsoDataType.Float, 48, 0, 0), new PsoStructureEntryInfo((MetaName)887750583, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)3579895798, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.parameterIntensity, PsoDataType.Float, 56, 0, 0), new PsoStructureEntryInfo((MetaName)3038154213, PsoDataType.Float, 60, 0, 0), new PsoStructureEntryInfo((MetaName)795086429, PsoDataType.Float, 64, 0, 0), new PsoStructureEntryInfo((MetaName)2305231569, PsoDataType.Float, 68, 0, 0), @@ -4360,131 +4360,131 @@ namespace CodeWalker.GameFiles case MetaName.camThirdPersonPedAimInCoverCameraMetadata: return new PsoStructureInfo(MetaName.camThirdPersonPedAimInCoverCameraMetadata, 0, 0, 1248, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2884954151, PsoDataType.String, 32, 7, 0), - new PsoStructureEntryInfo((MetaName)730193180, PsoDataType.String, 36, 7, 0), - new PsoStructureEntryInfo((MetaName)1443569911, PsoDataType.String, 40, 7, 0), - new PsoStructureEntryInfo((MetaName)60641442, PsoDataType.String, 44, 7, 0), - new PsoStructureEntryInfo((MetaName)1865815245, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2755051531, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ControlHelperRef, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo(MetaName.HintHelperRef, PsoDataType.String, 36, 7, 0), + new PsoStructureEntryInfo(MetaName.CatchUpHelperRef, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo(MetaName.BaseAttachVelocityToIgnoreEnvelopeRef, PsoDataType.String, 44, 7, 0), + new PsoStructureEntryInfo(MetaName.BaseFov, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseNearClip, PsoDataType.Float, 52, 0, 0), new PsoStructureEntryInfo((MetaName)3305154880, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)2846809829, PsoDataType.Bool, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)3002500493, PsoDataType.Bool, 61, 0, 0), - new PsoStructureEntryInfo((MetaName)2521592812, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)4067016949, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldOrbitRelativeToAttachParentOrientation, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldPersistOrbitOrientationRelativeToAttachParent, PsoDataType.Bool, 61, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentMatrixForRelativeOrbitSpringConstant, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentMatrixForRelativeOrbitSpringDampingRatio, PsoDataType.Float, 68, 0, 0), new PsoStructureEntryInfo((MetaName)2406229624, PsoDataType.Float, 72, 0, 0), new PsoStructureEntryInfo((MetaName)727876548, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)3039556728, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)1708190798, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)1190961214, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)897419234, PsoDataType.UInt, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)150825038, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)4033450681, PsoDataType.Bool, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)2058076685, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)488216999, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)1406371922, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)2814402846, PsoDataType.String, 116, 7, 0), - new PsoStructureEntryInfo((MetaName)372575308, PsoDataType.Bool, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)799910142, PsoDataType.Bool, 121, 0, 0), - new PsoStructureEntryInfo((MetaName)1933402526, PsoDataType.Bool, 122, 0, 0), - new PsoStructureEntryInfo((MetaName)1022007033, PsoDataType.Structure, 128, 0, MetaName.camThirdPersonCameraMetadataCustomBoundingBoxSettings), - new PsoStructureEntryInfo((MetaName)2861227361, PsoDataType.Bool, 152, 0, 0), - new PsoStructureEntryInfo((MetaName)1148495425, PsoDataType.Float, 156, 0, 0), - new PsoStructureEntryInfo((MetaName)536202543, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)1065618425, PsoDataType.Structure, 176, 0, MetaName.camThirdPersonCameraMetadataBasePivotPosition), - new PsoStructureEntryInfo((MetaName)3256568637, PsoDataType.Structure, 272, 0, MetaName.camThirdPersonCameraMetadataPivotPosition), - new PsoStructureEntryInfo((MetaName)588927535, PsoDataType.Structure, 320, 0, MetaName.camThirdPersonCameraMetadataPivotOverBoungingBoxSettings), - new PsoStructureEntryInfo((MetaName)2014345705, PsoDataType.Float, 344, 0, 0), - new PsoStructureEntryInfo((MetaName)3982287448, PsoDataType.Float, 348, 0, 0), - new PsoStructureEntryInfo((MetaName)2449849624, PsoDataType.Float, 352, 0, 0), - new PsoStructureEntryInfo((MetaName)695725580, PsoDataType.Float, 356, 0, 0), - new PsoStructureEntryInfo((MetaName)1397182427, PsoDataType.Float, 360, 0, 0), - new PsoStructureEntryInfo((MetaName)881872463, PsoDataType.Bool, 364, 0, 0), - new PsoStructureEntryInfo((MetaName)177572622, PsoDataType.Float, 368, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAttachParentSubmergedLevelToApplyFullAttachParentMatrixForRelativeOrbit, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAircraftGroundSpeedToApplyFullAttachParentMatrixForRelativeOrbit, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAircraftContactSpeedToApplyFullAttachParentMatrixForRelativeOrbit, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHoldTimeToBlockFullAttachParentMatrixForRelativeOrbit, PsoDataType.UInt, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAttachParentSpeedToClonePitchFromCinematicMountedCameras, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseCustomFramingInTightSpace, PsoDataType.Bool, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAttachSpeedToUpdateTightSpaceLevel, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.TightSpaceSpringConstant, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.TightSpaceSpringDampingRatio, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.DofSettingsInTightSpace, PsoDataType.String, 116, 7, 0), + new PsoStructureEntryInfo(MetaName.ShouldAttachToParentCentreOfGravity, PsoDataType.Bool, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseDynamicCentreOfGravity, PsoDataType.Bool, 121, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreVelocityOfAttachParentAttachEntity, PsoDataType.Bool, 122, 0, 0), + new PsoStructureEntryInfo(MetaName.CustomBoundingBoxSettings, PsoDataType.Structure, 128, 0, MetaName.camThirdPersonCameraMetadataCustomBoundingBoxSettings), + new PsoStructureEntryInfo(MetaName.ShouldApplyAttachPedPelvisOffset, PsoDataType.Bool, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachPedPelvisOffsetSpringConstant, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachPedPelvisOffsetSpringDampingRatio, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.BasePivotPosition, PsoDataType.Structure, 176, 0, MetaName.camThirdPersonCameraMetadataBasePivotPosition), + new PsoStructureEntryInfo(MetaName.PivotPosition, PsoDataType.Structure, 272, 0, MetaName.camThirdPersonCameraMetadataPivotPosition), + new PsoStructureEntryInfo(MetaName.PivotOverBoundingBoxSettings, PsoDataType.Structure, 320, 0, MetaName.camThirdPersonCameraMetadataPivotOverBoungingBoxSettings), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMinFootRoom, PsoDataType.Float, 344, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMaxFootRoom, PsoDataType.Float, 348, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMinFootRoomInTightSpace, PsoDataType.Float, 352, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMaxFootRoomInTightSpace, PsoDataType.Float, 356, 0, 0), + new PsoStructureEntryInfo(MetaName.BasePivotHeightScalingForFootRoom, PsoDataType.Float, 360, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreVerticalPivotOffsetForFootRoom, PsoDataType.Bool, 364, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSafeOrbitDistanceScalingForExtensions, PsoDataType.Float, 368, 0, 0), new PsoStructureEntryInfo((MetaName)560700931, PsoDataType.Float, 372, 0, 0), - new PsoStructureEntryInfo((MetaName)1828892401, PsoDataType.Float2, 376, 0, 0), - new PsoStructureEntryInfo((MetaName)2829148759, PsoDataType.Float, 384, 0, 0), - new PsoStructureEntryInfo((MetaName)1084689577, PsoDataType.Float, 388, 0, 0), - new PsoStructureEntryInfo((MetaName)3978450060, PsoDataType.Float, 392, 0, 0), - new PsoStructureEntryInfo((MetaName)1991191506, PsoDataType.Structure, 400, 0, MetaName.camThirdPersonCameraMetadataBuoyancySettings), - new PsoStructureEntryInfo((MetaName)1949881438, PsoDataType.Bool, 448, 0, 0), - new PsoStructureEntryInfo((MetaName)3863307203, PsoDataType.Bool, 449, 0, 0), - new PsoStructureEntryInfo((MetaName)3696538081, PsoDataType.Bool, 450, 0, 0), - new PsoStructureEntryInfo((MetaName)2213127338, PsoDataType.Bool, 451, 0, 0), - new PsoStructureEntryInfo((MetaName)724966028, PsoDataType.Bool, 452, 0, 0), - new PsoStructureEntryInfo((MetaName)2696635175, PsoDataType.Float, 456, 0, 0), - new PsoStructureEntryInfo((MetaName)1976571596, PsoDataType.Float, 460, 0, 0), - new PsoStructureEntryInfo((MetaName)551575094, PsoDataType.Float, 464, 0, 0), - new PsoStructureEntryInfo((MetaName)1557769430, PsoDataType.Float, 468, 0, 0), - new PsoStructureEntryInfo((MetaName)4155454260, PsoDataType.Float3, 480, 0, 0), + new PsoStructureEntryInfo(MetaName.CustomOrbitDistanceLimitsToForce, PsoDataType.Float2, 376, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceLimitSpringConstant, PsoDataType.Float, 384, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceLimitSpringDampingRatio, PsoDataType.Float, 388, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceScalingForCustomFirstPersonFallBack, PsoDataType.Float, 392, 0, 0), + new PsoStructureEntryInfo(MetaName.BuoyancySettings, PsoDataType.Structure, 400, 0, MetaName.camThirdPersonCameraMetadataBuoyancySettings), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreCollisionWithAttachParent, PsoDataType.Bool, 448, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreCollisionWithFollowVehicle, PsoDataType.Bool, 449, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreFollowVehicleForCollisionOrigin, PsoDataType.Bool, 450, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreFollowVehicleForCollisionRoot, PsoDataType.Bool, 451, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldPushBeyondAttachParentIfClipping, PsoDataType.Bool, 452, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxCollisionTestRadius, PsoDataType.Float, 456, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSafeRadiusReductionWithinPedMoverCapsule, PsoDataType.Float, 460, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionTestRadiusSpringConstant, PsoDataType.Float, 464, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionTestRadiusSpringDampingRatio, PsoDataType.Float, 468, 0, 0), + new PsoStructureEntryInfo(MetaName.CustomCollisionOriginRelativePosition, PsoDataType.Float3, 480, 0, 0), new PsoStructureEntryInfo((MetaName)4194152221, PsoDataType.Float3, 496, 0, 0), - new PsoStructureEntryInfo((MetaName)2702878862, PsoDataType.Bool, 512, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseCustomCollisionOrigin, PsoDataType.Bool, 512, 0, 0), new PsoStructureEntryInfo((MetaName)1998689777, PsoDataType.Bool, 513, 0, 0), new PsoStructureEntryInfo((MetaName)2235540893, PsoDataType.Bool, 514, 0, 0), new PsoStructureEntryInfo((MetaName)3479639237, PsoDataType.Float3, 528, 0, 0), new PsoStructureEntryInfo((MetaName)1496115250, PsoDataType.Float, 544, 0, 0), - new PsoStructureEntryInfo((MetaName)340312382, PsoDataType.Structure, 552, 0, MetaName.camThirdPersonCameraMetadataCollisionFallBackPosition), - new PsoStructureEntryInfo((MetaName)4279727627, PsoDataType.Float, 592, 0, 0), - new PsoStructureEntryInfo((MetaName)823526659, PsoDataType.Bool, 596, 0, 0), - new PsoStructureEntryInfo((MetaName)3507950586, PsoDataType.Float, 600, 0, 0), - new PsoStructureEntryInfo((MetaName)3397058689, PsoDataType.Float, 604, 0, 0), - new PsoStructureEntryInfo((MetaName)227846107, PsoDataType.Structure, 608, 0, MetaName.camThirdPersonCameraMetadataVehicleOnTopOfVehicleCollisionSettings), - new PsoStructureEntryInfo((MetaName)3658085406, PsoDataType.Float, 632, 0, 0), - new PsoStructureEntryInfo((MetaName)1654683326, PsoDataType.Float2, 636, 0, 0), - new PsoStructureEntryInfo((MetaName)1974814289, PsoDataType.Float2, 644, 0, 0), - new PsoStructureEntryInfo((MetaName)1778852906, PsoDataType.Float, 652, 0, 0), - new PsoStructureEntryInfo((MetaName)158553507, PsoDataType.Float, 656, 0, 0), - new PsoStructureEntryInfo((MetaName)3300166924, PsoDataType.Structure, 664, 0, MetaName.camThirdPersonCameraMetadataLookOverSettings), - new PsoStructureEntryInfo((MetaName)2793581079, PsoDataType.Bool, 688, 0, 0), - new PsoStructureEntryInfo((MetaName)2111969249, PsoDataType.Float2, 692, 0, 0), - new PsoStructureEntryInfo((MetaName)3068587259, PsoDataType.Float, 700, 0, 0), - new PsoStructureEntryInfo((MetaName)293341517, PsoDataType.Float, 704, 0, 0), - new PsoStructureEntryInfo((MetaName)3607038158, PsoDataType.Float, 708, 0, 0), - new PsoStructureEntryInfo((MetaName)4039533147, PsoDataType.Float2, 712, 0, 0), - new PsoStructureEntryInfo((MetaName)1356521412, PsoDataType.Float2, 720, 0, 0), - new PsoStructureEntryInfo((MetaName)3610920953, PsoDataType.Structure, 728, 0, MetaName.camThirdPersonCameraMetadataStealthZoomSettings), + new PsoStructureEntryInfo(MetaName.CollisionFallBackPosition, PsoDataType.Structure, 552, 0, MetaName.camThirdPersonCameraMetadataCollisionFallBackPosition), + new PsoStructureEntryInfo(MetaName.CollisionRootPositionFallBackToPivotBlendValue, PsoDataType.Float, 592, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldConstrainCollisionRootPositionAgainstClippingTypes, PsoDataType.Bool, 596, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionRootPositionSpringConstant, PsoDataType.Float, 600, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionRootPositionSpringDampingRatio, PsoDataType.Float, 604, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleOnTopOfVehicleCollisionSettings, PsoDataType.Structure, 608, 0, MetaName.camThirdPersonCameraMetadataVehicleOnTopOfVehicleCollisionSettings), + new PsoStructureEntryInfo(MetaName.IdealHeadingOffsetForLimiting, PsoDataType.Float, 632, 0, 0), + new PsoStructureEntryInfo(MetaName.RelativeOrbitHeadingLimits, PsoDataType.Float2, 636, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitPitchLimits, PsoDataType.Float2, 644, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseOrbitPitchOffset, PsoDataType.Float, 652, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseOrbitPitchOffsetInTightSpace, PsoDataType.Float, 656, 0, 0), + new PsoStructureEntryInfo(MetaName.LookOverSettings, PsoDataType.Structure, 664, 0, MetaName.camThirdPersonCameraMetadataLookOverSettings), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreAttachParentPitchForLookBehind, PsoDataType.Bool, 688, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceLimitsForBasePosition, PsoDataType.Float2, 692, 0, 0), + new PsoStructureEntryInfo(MetaName.PreToPostCollisionLookAtOrientationBlendValue, PsoDataType.Float, 700, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRollSpringConstant, PsoDataType.Float, 704, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRollSpringDampingRatio, PsoDataType.Float, 708, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRollDampingPitchSoftLimits, PsoDataType.Float2, 712, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRollDampingPitchHardLimits, PsoDataType.Float2, 720, 0, 0), + new PsoStructureEntryInfo(MetaName.StealthZoomSettings, PsoDataType.Structure, 728, 0, MetaName.camThirdPersonCameraMetadataStealthZoomSettings), new PsoStructureEntryInfo((MetaName)1947299079, PsoDataType.Structure, 752, 0, MetaName.camThirdPersonCameraMetadataQuadrupedalHeightSpring), - new PsoStructureEntryInfo((MetaName)490368749, PsoDataType.String, 776, 7, 0), + new PsoStructureEntryInfo(MetaName.MotionBlurSettings, PsoDataType.String, 776, 7, 0), new PsoStructureEntryInfo((MetaName)2122226771, PsoDataType.Bool, 780, 0, 0), - new PsoStructureEntryInfo((MetaName)2833081775, PsoDataType.String, 784, 7, 0), - new PsoStructureEntryInfo((MetaName)1348911901, PsoDataType.Bool, 788, 0, 0), - new PsoStructureEntryInfo((MetaName)870186590, PsoDataType.Bool, 789, 0, 0), - new PsoStructureEntryInfo((MetaName)4238055063, PsoDataType.Bool, 790, 0, 0), - new PsoStructureEntryInfo((MetaName)2917952843, PsoDataType.Bool, 791, 0, 0), - new PsoStructureEntryInfo((MetaName)1301399000, PsoDataType.Bool, 792, 0, 0), - new PsoStructureEntryInfo((MetaName)1419212045, PsoDataType.Bool, 793, 0, 0), - new PsoStructureEntryInfo((MetaName)114759485, PsoDataType.Bool, 794, 0, 0), - new PsoStructureEntryInfo((MetaName)1634093344, PsoDataType.Float, 796, 0, 0), - new PsoStructureEntryInfo((MetaName)2294924343, PsoDataType.Float, 800, 0, 0), - new PsoStructureEntryInfo((MetaName)9436207, PsoDataType.Float, 804, 0, 0), - new PsoStructureEntryInfo((MetaName)1350912934, PsoDataType.Float, 808, 0, 0), - new PsoStructureEntryInfo((MetaName)70391041, PsoDataType.Float, 812, 0, 0), - new PsoStructureEntryInfo((MetaName)2783842060, PsoDataType.Float, 816, 0, 0), - new PsoStructureEntryInfo((MetaName)3397272914, PsoDataType.UInt, 820, 0, 0), - new PsoStructureEntryInfo((MetaName)1807116888, PsoDataType.UInt, 824, 0, 0), - new PsoStructureEntryInfo((MetaName)3048647846, PsoDataType.UInt, 828, 0, 0), - new PsoStructureEntryInfo((MetaName)3132164856, PsoDataType.UInt, 832, 0, 0), - new PsoStructureEntryInfo((MetaName)4207333442, PsoDataType.Float, 836, 0, 0), - new PsoStructureEntryInfo((MetaName)1717370547, PsoDataType.Float, 840, 0, 0), - new PsoStructureEntryInfo((MetaName)447200092, PsoDataType.Float, 844, 0, 0), - new PsoStructureEntryInfo((MetaName)3347315427, PsoDataType.Float, 848, 0, 0), - new PsoStructureEntryInfo((MetaName)4137686847, PsoDataType.Bool, 852, 0, 0), - new PsoStructureEntryInfo((MetaName)3921296525, PsoDataType.Float, 856, 0, 0), - new PsoStructureEntryInfo((MetaName)2840529796, PsoDataType.Float, 860, 0, 0), - new PsoStructureEntryInfo((MetaName)2535634527, PsoDataType.Float, 864, 0, 0), - new PsoStructureEntryInfo((MetaName)1225855688, PsoDataType.Float, 868, 0, 0), - new PsoStructureEntryInfo((MetaName)2209545096, PsoDataType.String, 880, 7, 0), - new PsoStructureEntryInfo((MetaName)1635236307, PsoDataType.Structure, 888, 0, MetaName.camThirdPersonPedAimCameraMetadataLockOnTargetDampingSettings), - new PsoStructureEntryInfo((MetaName)4165908011, PsoDataType.Structure, 928, 0, MetaName.camThirdPersonPedAimCameraMetadataLockOnOrbitDistanceSettings), - new PsoStructureEntryInfo((MetaName)1399337810, PsoDataType.Float3, 976, 0, 0), - new PsoStructureEntryInfo((MetaName)442114217, PsoDataType.Float3, 992, 0, 0), - new PsoStructureEntryInfo((MetaName)575433612, PsoDataType.SInt, 1008, 0, 0), - new PsoStructureEntryInfo((MetaName)3180847895, PsoDataType.Bool, 1012, 0, 0), - new PsoStructureEntryInfo((MetaName)184490319, PsoDataType.Bool, 1013, 0, 0), - new PsoStructureEntryInfo((MetaName)1057367158, PsoDataType.String, 1016, 7, 0), + new PsoStructureEntryInfo(MetaName.LockOnEnvelopeRef, PsoDataType.String, 784, 7, 0), + new PsoStructureEntryInfo(MetaName.ShouldDisplayReticule, PsoDataType.Bool, 788, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldDisplayReticuleDuringInterpolation, PsoDataType.Bool, 789, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldAllowInterpolationSourceCameraToPersistReticule, PsoDataType.Bool, 790, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldApplyWeaponFov, PsoDataType.Bool, 791, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseLockOnAiming, PsoDataType.Bool, 792, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldLockOnToTargetEntityPosition, PsoDataType.Bool, 793, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldValidateLockOnTargetPosition, PsoDataType.Bool, 794, 0, 0), + new PsoStructureEntryInfo(MetaName.TripleHeadNearClip, PsoDataType.Float, 796, 0, 0), + new PsoStructureEntryInfo(MetaName.RecoilShakeAmplitudeScaling, PsoDataType.Float, 800, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceForLockOn, PsoDataType.Float, 804, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceForFineAimScaling, PsoDataType.Float, 808, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForFineAimScaling, PsoDataType.Float, 812, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAngleDeltaForLockOnSwitchBlendScaling, PsoDataType.Float, 816, 0, 0), + new PsoStructureEntryInfo(MetaName.MinBlendDurationForInitialLockOn, PsoDataType.UInt, 820, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxBlendDurationForInitialLockOn, PsoDataType.UInt, 824, 0, 0), + new PsoStructureEntryInfo(MetaName.MinBlendDurationForLockOnSwitch, PsoDataType.UInt, 828, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxBlendDurationForLockOnSwitch, PsoDataType.UInt, 832, 0, 0), + new PsoStructureEntryInfo(MetaName.FineAimBlendSpringConstant, PsoDataType.Float, 836, 0, 0), + new PsoStructureEntryInfo(MetaName.FineAimBlendSpringDampingRatio, PsoDataType.Float, 840, 0, 0), + new PsoStructureEntryInfo(MetaName.WeaponZoomFactorSpringConstant, PsoDataType.Float, 844, 0, 0), + new PsoStructureEntryInfo(MetaName.WeaponZoomFactorSpringDampingRatio, PsoDataType.Float, 848, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldFocusOnLockOnTarget, PsoDataType.Bool, 852, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseFovToEmulateWithFocalLengthMultiplier, PsoDataType.Float, 856, 0, 0), + new PsoStructureEntryInfo(MetaName.FocusParentToTargetBlendLevel, PsoDataType.Float, 860, 0, 0), + new PsoStructureEntryInfo(MetaName.SecondaryFocusParentToTargetBlendLevel, PsoDataType.Float, 864, 0, 0), + new PsoStructureEntryInfo(MetaName.MinFocusToSecondaryFocusDistance, PsoDataType.Float, 868, 0, 0), + new PsoStructureEntryInfo(MetaName.LockOnTargetStunnedEnvelopeRef, PsoDataType.String, 880, 7, 0), + new PsoStructureEntryInfo(MetaName.LockOnTargetDampingSettings, PsoDataType.Structure, 888, 0, MetaName.camThirdPersonPedAimCameraMetadataLockOnTargetDampingSettings), + new PsoStructureEntryInfo(MetaName.LockOnOrbitDistanceSettings, PsoDataType.Structure, 928, 0, MetaName.camThirdPersonPedAimCameraMetadataLockOnOrbitDistanceSettings), + new PsoStructureEntryInfo(MetaName.ParentRelativeAttachOffset, PsoDataType.Float3, 976, 0, 0), + new PsoStructureEntryInfo(MetaName.ParentRelativeAttachOffsetAtOrbitHeadingLimits, PsoDataType.Float3, 992, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachBoneTag, PsoDataType.SInt, 1008, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldScriptedAimTaskOverrideOrbitPitchLimits, PsoDataType.Bool, 1012, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldAimSweepOverrideOrbitPitchLimits, PsoDataType.Bool, 1013, 0, 0), + new PsoStructureEntryInfo(MetaName.DofSettingsForMobilePhoneShallowDofMode, PsoDataType.String, 1016, 7, 0), new PsoStructureEntryInfo((MetaName)309842601, PsoDataType.Float, 1020, 0, 0), new PsoStructureEntryInfo((MetaName)3770307856, PsoDataType.Bool, 1024, 0, 0), new PsoStructureEntryInfo((MetaName)124410885, PsoDataType.Float, 1040, 0, 0), @@ -4492,7 +4492,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)1914946004, PsoDataType.Float, 1048, 0, 0), new PsoStructureEntryInfo((MetaName)2125876256, PsoDataType.Float, 1052, 0, 0), new PsoStructureEntryInfo((MetaName)3456376985, PsoDataType.Float, 1056, 0, 0), - new PsoStructureEntryInfo((MetaName)4241737797, PsoDataType.Float, 1060, 0, 0), + new PsoStructureEntryInfo(MetaName.streamedMusc, PsoDataType.Float, 1060, 0, 0), new PsoStructureEntryInfo((MetaName)2791057952, PsoDataType.Float, 1064, 0, 0), new PsoStructureEntryInfo((MetaName)1336398630, PsoDataType.Bool, 1068, 0, 0), new PsoStructureEntryInfo((MetaName)1847527244, PsoDataType.Float, 1072, 0, 0), @@ -4519,158 +4519,158 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)3920880465, PsoDataType.Float, 1160, 0, 0), new PsoStructureEntryInfo((MetaName)1407257659, PsoDataType.UInt, 1164, 0, 0), new PsoStructureEntryInfo((MetaName)1350298358, PsoDataType.Structure, 1168, 0, MetaName.camThirdPersonPedAimInCoverCameraMetadataLowCoverSettings), - new PsoStructureEntryInfo((MetaName)85936843, PsoDataType.Structure, 1208, 0, MetaName.camThirdPersonPedAimInCoverCameraMetadataAimingSettings) + new PsoStructureEntryInfo(MetaName.AimingSettings, PsoDataType.Structure, 1208, 0, MetaName.camThirdPersonPedAimInCoverCameraMetadataAimingSettings) ); case MetaName.camThirdPersonPedAimInCoverCameraMetadataLowCoverSettings: return new PsoStructureInfo(MetaName.camThirdPersonPedAimInCoverCameraMetadataLowCoverSettings, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)2111282409, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.BlendInSpringConstant, PsoDataType.Float, 8, 0, 0), new PsoStructureEntryInfo((MetaName)2811394796, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)165735146, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.BlendOutSpringConstant, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo((MetaName)388057725, PsoDataType.Float, 20, 0, 0), new PsoStructureEntryInfo((MetaName)4026985674, PsoDataType.Float, 24, 0, 0), new PsoStructureEntryInfo((MetaName)2972801644, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2014345705, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)3982287448, PsoDataType.Float, 36, 0, 0) + new PsoStructureEntryInfo(MetaName.ScreenRatioForMinFootRoom, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMaxFootRoom, PsoDataType.Float, 36, 0, 0) ); case MetaName.camThirdPersonPedAimInCoverCameraMetadataAimingSettings: return new PsoStructureInfo(MetaName.camThirdPersonPedAimInCoverCameraMetadataAimingSettings, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)651835053, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo(MetaName.ShouldApply, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 12, 7, 0), new PsoStructureEntryInfo((MetaName)3794685898, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo((MetaName)3031220740, PsoDataType.Float, 20, 0, 0), new PsoStructureEntryInfo((MetaName)810186943, PsoDataType.Float, 24, 0, 0), new PsoStructureEntryInfo((MetaName)2302950975, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2014345705, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)3982287448, PsoDataType.Float, 36, 0, 0) + new PsoStructureEntryInfo(MetaName.ScreenRatioForMinFootRoom, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMaxFootRoom, PsoDataType.Float, 36, 0, 0) ); case MetaName.camThirdPersonPedMeleeAimCameraMetadata: return new PsoStructureInfo(MetaName.camThirdPersonPedMeleeAimCameraMetadata, 0, 0, 1088, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2884954151, PsoDataType.String, 32, 7, 0), - new PsoStructureEntryInfo((MetaName)730193180, PsoDataType.String, 36, 7, 0), - new PsoStructureEntryInfo((MetaName)1443569911, PsoDataType.String, 40, 7, 0), - new PsoStructureEntryInfo((MetaName)60641442, PsoDataType.String, 44, 7, 0), - new PsoStructureEntryInfo((MetaName)1865815245, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2755051531, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ControlHelperRef, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo(MetaName.HintHelperRef, PsoDataType.String, 36, 7, 0), + new PsoStructureEntryInfo(MetaName.CatchUpHelperRef, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo(MetaName.BaseAttachVelocityToIgnoreEnvelopeRef, PsoDataType.String, 44, 7, 0), + new PsoStructureEntryInfo(MetaName.BaseFov, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseNearClip, PsoDataType.Float, 52, 0, 0), new PsoStructureEntryInfo((MetaName)3305154880, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)2846809829, PsoDataType.Bool, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)3002500493, PsoDataType.Bool, 61, 0, 0), - new PsoStructureEntryInfo((MetaName)2521592812, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)4067016949, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldOrbitRelativeToAttachParentOrientation, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldPersistOrbitOrientationRelativeToAttachParent, PsoDataType.Bool, 61, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentMatrixForRelativeOrbitSpringConstant, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentMatrixForRelativeOrbitSpringDampingRatio, PsoDataType.Float, 68, 0, 0), new PsoStructureEntryInfo((MetaName)2406229624, PsoDataType.Float, 72, 0, 0), new PsoStructureEntryInfo((MetaName)727876548, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)3039556728, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)1708190798, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)1190961214, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)897419234, PsoDataType.UInt, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)150825038, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)4033450681, PsoDataType.Bool, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)2058076685, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)488216999, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)1406371922, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)2814402846, PsoDataType.String, 116, 7, 0), - new PsoStructureEntryInfo((MetaName)372575308, PsoDataType.Bool, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)799910142, PsoDataType.Bool, 121, 0, 0), - new PsoStructureEntryInfo((MetaName)1933402526, PsoDataType.Bool, 122, 0, 0), - new PsoStructureEntryInfo((MetaName)1022007033, PsoDataType.Structure, 128, 0, MetaName.camThirdPersonCameraMetadataCustomBoundingBoxSettings), - new PsoStructureEntryInfo((MetaName)2861227361, PsoDataType.Bool, 152, 0, 0), - new PsoStructureEntryInfo((MetaName)1148495425, PsoDataType.Float, 156, 0, 0), - new PsoStructureEntryInfo((MetaName)536202543, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)1065618425, PsoDataType.Structure, 176, 0, MetaName.camThirdPersonCameraMetadataBasePivotPosition), - new PsoStructureEntryInfo((MetaName)3256568637, PsoDataType.Structure, 272, 0, MetaName.camThirdPersonCameraMetadataPivotPosition), - new PsoStructureEntryInfo((MetaName)588927535, PsoDataType.Structure, 320, 0, MetaName.camThirdPersonCameraMetadataPivotOverBoungingBoxSettings), - new PsoStructureEntryInfo((MetaName)2014345705, PsoDataType.Float, 344, 0, 0), - new PsoStructureEntryInfo((MetaName)3982287448, PsoDataType.Float, 348, 0, 0), - new PsoStructureEntryInfo((MetaName)2449849624, PsoDataType.Float, 352, 0, 0), - new PsoStructureEntryInfo((MetaName)695725580, PsoDataType.Float, 356, 0, 0), - new PsoStructureEntryInfo((MetaName)1397182427, PsoDataType.Float, 360, 0, 0), - new PsoStructureEntryInfo((MetaName)881872463, PsoDataType.Bool, 364, 0, 0), - new PsoStructureEntryInfo((MetaName)177572622, PsoDataType.Float, 368, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAttachParentSubmergedLevelToApplyFullAttachParentMatrixForRelativeOrbit, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAircraftGroundSpeedToApplyFullAttachParentMatrixForRelativeOrbit, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAircraftContactSpeedToApplyFullAttachParentMatrixForRelativeOrbit, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHoldTimeToBlockFullAttachParentMatrixForRelativeOrbit, PsoDataType.UInt, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAttachParentSpeedToClonePitchFromCinematicMountedCameras, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseCustomFramingInTightSpace, PsoDataType.Bool, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAttachSpeedToUpdateTightSpaceLevel, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.TightSpaceSpringConstant, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.TightSpaceSpringDampingRatio, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.DofSettingsInTightSpace, PsoDataType.String, 116, 7, 0), + new PsoStructureEntryInfo(MetaName.ShouldAttachToParentCentreOfGravity, PsoDataType.Bool, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseDynamicCentreOfGravity, PsoDataType.Bool, 121, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreVelocityOfAttachParentAttachEntity, PsoDataType.Bool, 122, 0, 0), + new PsoStructureEntryInfo(MetaName.CustomBoundingBoxSettings, PsoDataType.Structure, 128, 0, MetaName.camThirdPersonCameraMetadataCustomBoundingBoxSettings), + new PsoStructureEntryInfo(MetaName.ShouldApplyAttachPedPelvisOffset, PsoDataType.Bool, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachPedPelvisOffsetSpringConstant, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachPedPelvisOffsetSpringDampingRatio, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.BasePivotPosition, PsoDataType.Structure, 176, 0, MetaName.camThirdPersonCameraMetadataBasePivotPosition), + new PsoStructureEntryInfo(MetaName.PivotPosition, PsoDataType.Structure, 272, 0, MetaName.camThirdPersonCameraMetadataPivotPosition), + new PsoStructureEntryInfo(MetaName.PivotOverBoundingBoxSettings, PsoDataType.Structure, 320, 0, MetaName.camThirdPersonCameraMetadataPivotOverBoungingBoxSettings), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMinFootRoom, PsoDataType.Float, 344, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMaxFootRoom, PsoDataType.Float, 348, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMinFootRoomInTightSpace, PsoDataType.Float, 352, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMaxFootRoomInTightSpace, PsoDataType.Float, 356, 0, 0), + new PsoStructureEntryInfo(MetaName.BasePivotHeightScalingForFootRoom, PsoDataType.Float, 360, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreVerticalPivotOffsetForFootRoom, PsoDataType.Bool, 364, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSafeOrbitDistanceScalingForExtensions, PsoDataType.Float, 368, 0, 0), new PsoStructureEntryInfo((MetaName)560700931, PsoDataType.Float, 372, 0, 0), - new PsoStructureEntryInfo((MetaName)1828892401, PsoDataType.Float2, 376, 0, 0), - new PsoStructureEntryInfo((MetaName)2829148759, PsoDataType.Float, 384, 0, 0), - new PsoStructureEntryInfo((MetaName)1084689577, PsoDataType.Float, 388, 0, 0), - new PsoStructureEntryInfo((MetaName)3978450060, PsoDataType.Float, 392, 0, 0), - new PsoStructureEntryInfo((MetaName)1991191506, PsoDataType.Structure, 400, 0, MetaName.camThirdPersonCameraMetadataBuoyancySettings), - new PsoStructureEntryInfo((MetaName)1949881438, PsoDataType.Bool, 448, 0, 0), - new PsoStructureEntryInfo((MetaName)3863307203, PsoDataType.Bool, 449, 0, 0), - new PsoStructureEntryInfo((MetaName)3696538081, PsoDataType.Bool, 450, 0, 0), - new PsoStructureEntryInfo((MetaName)2213127338, PsoDataType.Bool, 451, 0, 0), - new PsoStructureEntryInfo((MetaName)724966028, PsoDataType.Bool, 452, 0, 0), - new PsoStructureEntryInfo((MetaName)2696635175, PsoDataType.Float, 456, 0, 0), - new PsoStructureEntryInfo((MetaName)1976571596, PsoDataType.Float, 460, 0, 0), - new PsoStructureEntryInfo((MetaName)551575094, PsoDataType.Float, 464, 0, 0), - new PsoStructureEntryInfo((MetaName)1557769430, PsoDataType.Float, 468, 0, 0), - new PsoStructureEntryInfo((MetaName)4155454260, PsoDataType.Float3, 480, 0, 0), + new PsoStructureEntryInfo(MetaName.CustomOrbitDistanceLimitsToForce, PsoDataType.Float2, 376, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceLimitSpringConstant, PsoDataType.Float, 384, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceLimitSpringDampingRatio, PsoDataType.Float, 388, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceScalingForCustomFirstPersonFallBack, PsoDataType.Float, 392, 0, 0), + new PsoStructureEntryInfo(MetaName.BuoyancySettings, PsoDataType.Structure, 400, 0, MetaName.camThirdPersonCameraMetadataBuoyancySettings), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreCollisionWithAttachParent, PsoDataType.Bool, 448, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreCollisionWithFollowVehicle, PsoDataType.Bool, 449, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreFollowVehicleForCollisionOrigin, PsoDataType.Bool, 450, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreFollowVehicleForCollisionRoot, PsoDataType.Bool, 451, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldPushBeyondAttachParentIfClipping, PsoDataType.Bool, 452, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxCollisionTestRadius, PsoDataType.Float, 456, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSafeRadiusReductionWithinPedMoverCapsule, PsoDataType.Float, 460, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionTestRadiusSpringConstant, PsoDataType.Float, 464, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionTestRadiusSpringDampingRatio, PsoDataType.Float, 468, 0, 0), + new PsoStructureEntryInfo(MetaName.CustomCollisionOriginRelativePosition, PsoDataType.Float3, 480, 0, 0), new PsoStructureEntryInfo((MetaName)4194152221, PsoDataType.Float3, 496, 0, 0), - new PsoStructureEntryInfo((MetaName)2702878862, PsoDataType.Bool, 512, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseCustomCollisionOrigin, PsoDataType.Bool, 512, 0, 0), new PsoStructureEntryInfo((MetaName)1998689777, PsoDataType.Bool, 513, 0, 0), new PsoStructureEntryInfo((MetaName)2235540893, PsoDataType.Bool, 514, 0, 0), new PsoStructureEntryInfo((MetaName)3479639237, PsoDataType.Float3, 528, 0, 0), new PsoStructureEntryInfo((MetaName)1496115250, PsoDataType.Float, 544, 0, 0), - new PsoStructureEntryInfo((MetaName)340312382, PsoDataType.Structure, 552, 0, MetaName.camThirdPersonCameraMetadataCollisionFallBackPosition), - new PsoStructureEntryInfo((MetaName)4279727627, PsoDataType.Float, 592, 0, 0), - new PsoStructureEntryInfo((MetaName)823526659, PsoDataType.Bool, 596, 0, 0), - new PsoStructureEntryInfo((MetaName)3507950586, PsoDataType.Float, 600, 0, 0), - new PsoStructureEntryInfo((MetaName)3397058689, PsoDataType.Float, 604, 0, 0), - new PsoStructureEntryInfo((MetaName)227846107, PsoDataType.Structure, 608, 0, MetaName.camThirdPersonCameraMetadataVehicleOnTopOfVehicleCollisionSettings), - new PsoStructureEntryInfo((MetaName)3658085406, PsoDataType.Float, 632, 0, 0), - new PsoStructureEntryInfo((MetaName)1654683326, PsoDataType.Float2, 636, 0, 0), - new PsoStructureEntryInfo((MetaName)1974814289, PsoDataType.Float2, 644, 0, 0), - new PsoStructureEntryInfo((MetaName)1778852906, PsoDataType.Float, 652, 0, 0), - new PsoStructureEntryInfo((MetaName)158553507, PsoDataType.Float, 656, 0, 0), - new PsoStructureEntryInfo((MetaName)3300166924, PsoDataType.Structure, 664, 0, MetaName.camThirdPersonCameraMetadataLookOverSettings), - new PsoStructureEntryInfo((MetaName)2793581079, PsoDataType.Bool, 688, 0, 0), - new PsoStructureEntryInfo((MetaName)2111969249, PsoDataType.Float2, 692, 0, 0), - new PsoStructureEntryInfo((MetaName)3068587259, PsoDataType.Float, 700, 0, 0), - new PsoStructureEntryInfo((MetaName)293341517, PsoDataType.Float, 704, 0, 0), - new PsoStructureEntryInfo((MetaName)3607038158, PsoDataType.Float, 708, 0, 0), - new PsoStructureEntryInfo((MetaName)4039533147, PsoDataType.Float2, 712, 0, 0), - new PsoStructureEntryInfo((MetaName)1356521412, PsoDataType.Float2, 720, 0, 0), - new PsoStructureEntryInfo((MetaName)3610920953, PsoDataType.Structure, 728, 0, MetaName.camThirdPersonCameraMetadataStealthZoomSettings), + new PsoStructureEntryInfo(MetaName.CollisionFallBackPosition, PsoDataType.Structure, 552, 0, MetaName.camThirdPersonCameraMetadataCollisionFallBackPosition), + new PsoStructureEntryInfo(MetaName.CollisionRootPositionFallBackToPivotBlendValue, PsoDataType.Float, 592, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldConstrainCollisionRootPositionAgainstClippingTypes, PsoDataType.Bool, 596, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionRootPositionSpringConstant, PsoDataType.Float, 600, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionRootPositionSpringDampingRatio, PsoDataType.Float, 604, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleOnTopOfVehicleCollisionSettings, PsoDataType.Structure, 608, 0, MetaName.camThirdPersonCameraMetadataVehicleOnTopOfVehicleCollisionSettings), + new PsoStructureEntryInfo(MetaName.IdealHeadingOffsetForLimiting, PsoDataType.Float, 632, 0, 0), + new PsoStructureEntryInfo(MetaName.RelativeOrbitHeadingLimits, PsoDataType.Float2, 636, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitPitchLimits, PsoDataType.Float2, 644, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseOrbitPitchOffset, PsoDataType.Float, 652, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseOrbitPitchOffsetInTightSpace, PsoDataType.Float, 656, 0, 0), + new PsoStructureEntryInfo(MetaName.LookOverSettings, PsoDataType.Structure, 664, 0, MetaName.camThirdPersonCameraMetadataLookOverSettings), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreAttachParentPitchForLookBehind, PsoDataType.Bool, 688, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceLimitsForBasePosition, PsoDataType.Float2, 692, 0, 0), + new PsoStructureEntryInfo(MetaName.PreToPostCollisionLookAtOrientationBlendValue, PsoDataType.Float, 700, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRollSpringConstant, PsoDataType.Float, 704, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRollSpringDampingRatio, PsoDataType.Float, 708, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRollDampingPitchSoftLimits, PsoDataType.Float2, 712, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRollDampingPitchHardLimits, PsoDataType.Float2, 720, 0, 0), + new PsoStructureEntryInfo(MetaName.StealthZoomSettings, PsoDataType.Structure, 728, 0, MetaName.camThirdPersonCameraMetadataStealthZoomSettings), new PsoStructureEntryInfo((MetaName)1947299079, PsoDataType.Structure, 752, 0, MetaName.camThirdPersonCameraMetadataQuadrupedalHeightSpring), - new PsoStructureEntryInfo((MetaName)490368749, PsoDataType.String, 776, 7, 0), + new PsoStructureEntryInfo(MetaName.MotionBlurSettings, PsoDataType.String, 776, 7, 0), new PsoStructureEntryInfo((MetaName)2122226771, PsoDataType.Bool, 780, 0, 0), - new PsoStructureEntryInfo((MetaName)2833081775, PsoDataType.String, 784, 7, 0), - new PsoStructureEntryInfo((MetaName)1348911901, PsoDataType.Bool, 788, 0, 0), - new PsoStructureEntryInfo((MetaName)870186590, PsoDataType.Bool, 789, 0, 0), - new PsoStructureEntryInfo((MetaName)4238055063, PsoDataType.Bool, 790, 0, 0), - new PsoStructureEntryInfo((MetaName)2917952843, PsoDataType.Bool, 791, 0, 0), - new PsoStructureEntryInfo((MetaName)1301399000, PsoDataType.Bool, 792, 0, 0), - new PsoStructureEntryInfo((MetaName)1419212045, PsoDataType.Bool, 793, 0, 0), - new PsoStructureEntryInfo((MetaName)114759485, PsoDataType.Bool, 794, 0, 0), - new PsoStructureEntryInfo((MetaName)1634093344, PsoDataType.Float, 796, 0, 0), - new PsoStructureEntryInfo((MetaName)2294924343, PsoDataType.Float, 800, 0, 0), - new PsoStructureEntryInfo((MetaName)9436207, PsoDataType.Float, 804, 0, 0), - new PsoStructureEntryInfo((MetaName)1350912934, PsoDataType.Float, 808, 0, 0), - new PsoStructureEntryInfo((MetaName)70391041, PsoDataType.Float, 812, 0, 0), - new PsoStructureEntryInfo((MetaName)2783842060, PsoDataType.Float, 816, 0, 0), - new PsoStructureEntryInfo((MetaName)3397272914, PsoDataType.UInt, 820, 0, 0), - new PsoStructureEntryInfo((MetaName)1807116888, PsoDataType.UInt, 824, 0, 0), - new PsoStructureEntryInfo((MetaName)3048647846, PsoDataType.UInt, 828, 0, 0), - new PsoStructureEntryInfo((MetaName)3132164856, PsoDataType.UInt, 832, 0, 0), - new PsoStructureEntryInfo((MetaName)4207333442, PsoDataType.Float, 836, 0, 0), - new PsoStructureEntryInfo((MetaName)1717370547, PsoDataType.Float, 840, 0, 0), - new PsoStructureEntryInfo((MetaName)447200092, PsoDataType.Float, 844, 0, 0), - new PsoStructureEntryInfo((MetaName)3347315427, PsoDataType.Float, 848, 0, 0), - new PsoStructureEntryInfo((MetaName)4137686847, PsoDataType.Bool, 852, 0, 0), - new PsoStructureEntryInfo((MetaName)3921296525, PsoDataType.Float, 856, 0, 0), - new PsoStructureEntryInfo((MetaName)2840529796, PsoDataType.Float, 860, 0, 0), - new PsoStructureEntryInfo((MetaName)2535634527, PsoDataType.Float, 864, 0, 0), - new PsoStructureEntryInfo((MetaName)1225855688, PsoDataType.Float, 868, 0, 0), - new PsoStructureEntryInfo((MetaName)2209545096, PsoDataType.String, 880, 7, 0), - new PsoStructureEntryInfo((MetaName)1635236307, PsoDataType.Structure, 888, 0, MetaName.camThirdPersonPedAimCameraMetadataLockOnTargetDampingSettings), - new PsoStructureEntryInfo((MetaName)4165908011, PsoDataType.Structure, 928, 0, MetaName.camThirdPersonPedAimCameraMetadataLockOnOrbitDistanceSettings), - new PsoStructureEntryInfo((MetaName)1399337810, PsoDataType.Float3, 976, 0, 0), - new PsoStructureEntryInfo((MetaName)442114217, PsoDataType.Float3, 992, 0, 0), - new PsoStructureEntryInfo((MetaName)575433612, PsoDataType.SInt, 1008, 0, 0), - new PsoStructureEntryInfo((MetaName)3180847895, PsoDataType.Bool, 1012, 0, 0), - new PsoStructureEntryInfo((MetaName)184490319, PsoDataType.Bool, 1013, 0, 0), - new PsoStructureEntryInfo((MetaName)1057367158, PsoDataType.String, 1016, 7, 0), + new PsoStructureEntryInfo(MetaName.LockOnEnvelopeRef, PsoDataType.String, 784, 7, 0), + new PsoStructureEntryInfo(MetaName.ShouldDisplayReticule, PsoDataType.Bool, 788, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldDisplayReticuleDuringInterpolation, PsoDataType.Bool, 789, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldAllowInterpolationSourceCameraToPersistReticule, PsoDataType.Bool, 790, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldApplyWeaponFov, PsoDataType.Bool, 791, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseLockOnAiming, PsoDataType.Bool, 792, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldLockOnToTargetEntityPosition, PsoDataType.Bool, 793, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldValidateLockOnTargetPosition, PsoDataType.Bool, 794, 0, 0), + new PsoStructureEntryInfo(MetaName.TripleHeadNearClip, PsoDataType.Float, 796, 0, 0), + new PsoStructureEntryInfo(MetaName.RecoilShakeAmplitudeScaling, PsoDataType.Float, 800, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceForLockOn, PsoDataType.Float, 804, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceForFineAimScaling, PsoDataType.Float, 808, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForFineAimScaling, PsoDataType.Float, 812, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAngleDeltaForLockOnSwitchBlendScaling, PsoDataType.Float, 816, 0, 0), + new PsoStructureEntryInfo(MetaName.MinBlendDurationForInitialLockOn, PsoDataType.UInt, 820, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxBlendDurationForInitialLockOn, PsoDataType.UInt, 824, 0, 0), + new PsoStructureEntryInfo(MetaName.MinBlendDurationForLockOnSwitch, PsoDataType.UInt, 828, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxBlendDurationForLockOnSwitch, PsoDataType.UInt, 832, 0, 0), + new PsoStructureEntryInfo(MetaName.FineAimBlendSpringConstant, PsoDataType.Float, 836, 0, 0), + new PsoStructureEntryInfo(MetaName.FineAimBlendSpringDampingRatio, PsoDataType.Float, 840, 0, 0), + new PsoStructureEntryInfo(MetaName.WeaponZoomFactorSpringConstant, PsoDataType.Float, 844, 0, 0), + new PsoStructureEntryInfo(MetaName.WeaponZoomFactorSpringDampingRatio, PsoDataType.Float, 848, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldFocusOnLockOnTarget, PsoDataType.Bool, 852, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseFovToEmulateWithFocalLengthMultiplier, PsoDataType.Float, 856, 0, 0), + new PsoStructureEntryInfo(MetaName.FocusParentToTargetBlendLevel, PsoDataType.Float, 860, 0, 0), + new PsoStructureEntryInfo(MetaName.SecondaryFocusParentToTargetBlendLevel, PsoDataType.Float, 864, 0, 0), + new PsoStructureEntryInfo(MetaName.MinFocusToSecondaryFocusDistance, PsoDataType.Float, 868, 0, 0), + new PsoStructureEntryInfo(MetaName.LockOnTargetStunnedEnvelopeRef, PsoDataType.String, 880, 7, 0), + new PsoStructureEntryInfo(MetaName.LockOnTargetDampingSettings, PsoDataType.Structure, 888, 0, MetaName.camThirdPersonPedAimCameraMetadataLockOnTargetDampingSettings), + new PsoStructureEntryInfo(MetaName.LockOnOrbitDistanceSettings, PsoDataType.Structure, 928, 0, MetaName.camThirdPersonPedAimCameraMetadataLockOnOrbitDistanceSettings), + new PsoStructureEntryInfo(MetaName.ParentRelativeAttachOffset, PsoDataType.Float3, 976, 0, 0), + new PsoStructureEntryInfo(MetaName.ParentRelativeAttachOffsetAtOrbitHeadingLimits, PsoDataType.Float3, 992, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachBoneTag, PsoDataType.SInt, 1008, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldScriptedAimTaskOverrideOrbitPitchLimits, PsoDataType.Bool, 1012, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldAimSweepOverrideOrbitPitchLimits, PsoDataType.Bool, 1013, 0, 0), + new PsoStructureEntryInfo(MetaName.DofSettingsForMobilePhoneShallowDofMode, PsoDataType.String, 1016, 7, 0), new PsoStructureEntryInfo((MetaName)309842601, PsoDataType.Float, 1020, 0, 0), new PsoStructureEntryInfo((MetaName)3770307856, PsoDataType.Bool, 1024, 0, 0), new PsoStructureEntryInfo((MetaName)3195731427, PsoDataType.Float, 1040, 0, 0), @@ -4686,134 +4686,134 @@ namespace CodeWalker.GameFiles case MetaName.camThirdPersonVehicleAimCameraMetadata: return new PsoStructureInfo(MetaName.camThirdPersonVehicleAimCameraMetadata, 0, 0, 896, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2884954151, PsoDataType.String, 32, 7, 0), - new PsoStructureEntryInfo((MetaName)730193180, PsoDataType.String, 36, 7, 0), - new PsoStructureEntryInfo((MetaName)1443569911, PsoDataType.String, 40, 7, 0), - new PsoStructureEntryInfo((MetaName)60641442, PsoDataType.String, 44, 7, 0), - new PsoStructureEntryInfo((MetaName)1865815245, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2755051531, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ControlHelperRef, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo(MetaName.HintHelperRef, PsoDataType.String, 36, 7, 0), + new PsoStructureEntryInfo(MetaName.CatchUpHelperRef, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo(MetaName.BaseAttachVelocityToIgnoreEnvelopeRef, PsoDataType.String, 44, 7, 0), + new PsoStructureEntryInfo(MetaName.BaseFov, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseNearClip, PsoDataType.Float, 52, 0, 0), new PsoStructureEntryInfo((MetaName)3305154880, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)2846809829, PsoDataType.Bool, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)3002500493, PsoDataType.Bool, 61, 0, 0), - new PsoStructureEntryInfo((MetaName)2521592812, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)4067016949, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldOrbitRelativeToAttachParentOrientation, PsoDataType.Bool, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldPersistOrbitOrientationRelativeToAttachParent, PsoDataType.Bool, 61, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentMatrixForRelativeOrbitSpringConstant, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentMatrixForRelativeOrbitSpringDampingRatio, PsoDataType.Float, 68, 0, 0), new PsoStructureEntryInfo((MetaName)2406229624, PsoDataType.Float, 72, 0, 0), new PsoStructureEntryInfo((MetaName)727876548, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)3039556728, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)1708190798, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)1190961214, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)897419234, PsoDataType.UInt, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)150825038, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)4033450681, PsoDataType.Bool, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)2058076685, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)488216999, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)1406371922, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)2814402846, PsoDataType.String, 116, 7, 0), - new PsoStructureEntryInfo((MetaName)372575308, PsoDataType.Bool, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)799910142, PsoDataType.Bool, 121, 0, 0), - new PsoStructureEntryInfo((MetaName)1933402526, PsoDataType.Bool, 122, 0, 0), - new PsoStructureEntryInfo((MetaName)1022007033, PsoDataType.Structure, 128, 0, MetaName.camThirdPersonCameraMetadataCustomBoundingBoxSettings), - new PsoStructureEntryInfo((MetaName)2861227361, PsoDataType.Bool, 152, 0, 0), - new PsoStructureEntryInfo((MetaName)1148495425, PsoDataType.Float, 156, 0, 0), - new PsoStructureEntryInfo((MetaName)536202543, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)1065618425, PsoDataType.Structure, 176, 0, MetaName.camThirdPersonCameraMetadataBasePivotPosition), - new PsoStructureEntryInfo((MetaName)3256568637, PsoDataType.Structure, 272, 0, MetaName.camThirdPersonCameraMetadataPivotPosition), - new PsoStructureEntryInfo((MetaName)588927535, PsoDataType.Structure, 320, 0, MetaName.camThirdPersonCameraMetadataPivotOverBoungingBoxSettings), - new PsoStructureEntryInfo((MetaName)2014345705, PsoDataType.Float, 344, 0, 0), - new PsoStructureEntryInfo((MetaName)3982287448, PsoDataType.Float, 348, 0, 0), - new PsoStructureEntryInfo((MetaName)2449849624, PsoDataType.Float, 352, 0, 0), - new PsoStructureEntryInfo((MetaName)695725580, PsoDataType.Float, 356, 0, 0), - new PsoStructureEntryInfo((MetaName)1397182427, PsoDataType.Float, 360, 0, 0), - new PsoStructureEntryInfo((MetaName)881872463, PsoDataType.Bool, 364, 0, 0), - new PsoStructureEntryInfo((MetaName)177572622, PsoDataType.Float, 368, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAttachParentSubmergedLevelToApplyFullAttachParentMatrixForRelativeOrbit, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAircraftGroundSpeedToApplyFullAttachParentMatrixForRelativeOrbit, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAircraftContactSpeedToApplyFullAttachParentMatrixForRelativeOrbit, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHoldTimeToBlockFullAttachParentMatrixForRelativeOrbit, PsoDataType.UInt, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAttachParentSpeedToClonePitchFromCinematicMountedCameras, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseCustomFramingInTightSpace, PsoDataType.Bool, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAttachSpeedToUpdateTightSpaceLevel, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.TightSpaceSpringConstant, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.TightSpaceSpringDampingRatio, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.DofSettingsInTightSpace, PsoDataType.String, 116, 7, 0), + new PsoStructureEntryInfo(MetaName.ShouldAttachToParentCentreOfGravity, PsoDataType.Bool, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseDynamicCentreOfGravity, PsoDataType.Bool, 121, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreVelocityOfAttachParentAttachEntity, PsoDataType.Bool, 122, 0, 0), + new PsoStructureEntryInfo(MetaName.CustomBoundingBoxSettings, PsoDataType.Structure, 128, 0, MetaName.camThirdPersonCameraMetadataCustomBoundingBoxSettings), + new PsoStructureEntryInfo(MetaName.ShouldApplyAttachPedPelvisOffset, PsoDataType.Bool, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachPedPelvisOffsetSpringConstant, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachPedPelvisOffsetSpringDampingRatio, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.BasePivotPosition, PsoDataType.Structure, 176, 0, MetaName.camThirdPersonCameraMetadataBasePivotPosition), + new PsoStructureEntryInfo(MetaName.PivotPosition, PsoDataType.Structure, 272, 0, MetaName.camThirdPersonCameraMetadataPivotPosition), + new PsoStructureEntryInfo(MetaName.PivotOverBoundingBoxSettings, PsoDataType.Structure, 320, 0, MetaName.camThirdPersonCameraMetadataPivotOverBoungingBoxSettings), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMinFootRoom, PsoDataType.Float, 344, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMaxFootRoom, PsoDataType.Float, 348, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMinFootRoomInTightSpace, PsoDataType.Float, 352, 0, 0), + new PsoStructureEntryInfo(MetaName.ScreenRatioForMaxFootRoomInTightSpace, PsoDataType.Float, 356, 0, 0), + new PsoStructureEntryInfo(MetaName.BasePivotHeightScalingForFootRoom, PsoDataType.Float, 360, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreVerticalPivotOffsetForFootRoom, PsoDataType.Bool, 364, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSafeOrbitDistanceScalingForExtensions, PsoDataType.Float, 368, 0, 0), new PsoStructureEntryInfo((MetaName)560700931, PsoDataType.Float, 372, 0, 0), - new PsoStructureEntryInfo((MetaName)1828892401, PsoDataType.Float2, 376, 0, 0), - new PsoStructureEntryInfo((MetaName)2829148759, PsoDataType.Float, 384, 0, 0), - new PsoStructureEntryInfo((MetaName)1084689577, PsoDataType.Float, 388, 0, 0), - new PsoStructureEntryInfo((MetaName)3978450060, PsoDataType.Float, 392, 0, 0), - new PsoStructureEntryInfo((MetaName)1991191506, PsoDataType.Structure, 400, 0, MetaName.camThirdPersonCameraMetadataBuoyancySettings), - new PsoStructureEntryInfo((MetaName)1949881438, PsoDataType.Bool, 448, 0, 0), - new PsoStructureEntryInfo((MetaName)3863307203, PsoDataType.Bool, 449, 0, 0), - new PsoStructureEntryInfo((MetaName)3696538081, PsoDataType.Bool, 450, 0, 0), - new PsoStructureEntryInfo((MetaName)2213127338, PsoDataType.Bool, 451, 0, 0), - new PsoStructureEntryInfo((MetaName)724966028, PsoDataType.Bool, 452, 0, 0), - new PsoStructureEntryInfo((MetaName)2696635175, PsoDataType.Float, 456, 0, 0), - new PsoStructureEntryInfo((MetaName)1976571596, PsoDataType.Float, 460, 0, 0), - new PsoStructureEntryInfo((MetaName)551575094, PsoDataType.Float, 464, 0, 0), - new PsoStructureEntryInfo((MetaName)1557769430, PsoDataType.Float, 468, 0, 0), - new PsoStructureEntryInfo((MetaName)4155454260, PsoDataType.Float3, 480, 0, 0), + new PsoStructureEntryInfo(MetaName.CustomOrbitDistanceLimitsToForce, PsoDataType.Float2, 376, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceLimitSpringConstant, PsoDataType.Float, 384, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceLimitSpringDampingRatio, PsoDataType.Float, 388, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceScalingForCustomFirstPersonFallBack, PsoDataType.Float, 392, 0, 0), + new PsoStructureEntryInfo(MetaName.BuoyancySettings, PsoDataType.Structure, 400, 0, MetaName.camThirdPersonCameraMetadataBuoyancySettings), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreCollisionWithAttachParent, PsoDataType.Bool, 448, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreCollisionWithFollowVehicle, PsoDataType.Bool, 449, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreFollowVehicleForCollisionOrigin, PsoDataType.Bool, 450, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreFollowVehicleForCollisionRoot, PsoDataType.Bool, 451, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldPushBeyondAttachParentIfClipping, PsoDataType.Bool, 452, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxCollisionTestRadius, PsoDataType.Float, 456, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSafeRadiusReductionWithinPedMoverCapsule, PsoDataType.Float, 460, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionTestRadiusSpringConstant, PsoDataType.Float, 464, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionTestRadiusSpringDampingRatio, PsoDataType.Float, 468, 0, 0), + new PsoStructureEntryInfo(MetaName.CustomCollisionOriginRelativePosition, PsoDataType.Float3, 480, 0, 0), new PsoStructureEntryInfo((MetaName)4194152221, PsoDataType.Float3, 496, 0, 0), - new PsoStructureEntryInfo((MetaName)2702878862, PsoDataType.Bool, 512, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseCustomCollisionOrigin, PsoDataType.Bool, 512, 0, 0), new PsoStructureEntryInfo((MetaName)1998689777, PsoDataType.Bool, 513, 0, 0), new PsoStructureEntryInfo((MetaName)2235540893, PsoDataType.Bool, 514, 0, 0), new PsoStructureEntryInfo((MetaName)3479639237, PsoDataType.Float3, 528, 0, 0), new PsoStructureEntryInfo((MetaName)1496115250, PsoDataType.Float, 544, 0, 0), - new PsoStructureEntryInfo((MetaName)340312382, PsoDataType.Structure, 552, 0, MetaName.camThirdPersonCameraMetadataCollisionFallBackPosition), - new PsoStructureEntryInfo((MetaName)4279727627, PsoDataType.Float, 592, 0, 0), - new PsoStructureEntryInfo((MetaName)823526659, PsoDataType.Bool, 596, 0, 0), - new PsoStructureEntryInfo((MetaName)3507950586, PsoDataType.Float, 600, 0, 0), - new PsoStructureEntryInfo((MetaName)3397058689, PsoDataType.Float, 604, 0, 0), - new PsoStructureEntryInfo((MetaName)227846107, PsoDataType.Structure, 608, 0, MetaName.camThirdPersonCameraMetadataVehicleOnTopOfVehicleCollisionSettings), - new PsoStructureEntryInfo((MetaName)3658085406, PsoDataType.Float, 632, 0, 0), - new PsoStructureEntryInfo((MetaName)1654683326, PsoDataType.Float2, 636, 0, 0), - new PsoStructureEntryInfo((MetaName)1974814289, PsoDataType.Float2, 644, 0, 0), - new PsoStructureEntryInfo((MetaName)1778852906, PsoDataType.Float, 652, 0, 0), - new PsoStructureEntryInfo((MetaName)158553507, PsoDataType.Float, 656, 0, 0), - new PsoStructureEntryInfo((MetaName)3300166924, PsoDataType.Structure, 664, 0, MetaName.camThirdPersonCameraMetadataLookOverSettings), - new PsoStructureEntryInfo((MetaName)2793581079, PsoDataType.Bool, 688, 0, 0), - new PsoStructureEntryInfo((MetaName)2111969249, PsoDataType.Float2, 692, 0, 0), - new PsoStructureEntryInfo((MetaName)3068587259, PsoDataType.Float, 700, 0, 0), - new PsoStructureEntryInfo((MetaName)293341517, PsoDataType.Float, 704, 0, 0), - new PsoStructureEntryInfo((MetaName)3607038158, PsoDataType.Float, 708, 0, 0), - new PsoStructureEntryInfo((MetaName)4039533147, PsoDataType.Float2, 712, 0, 0), - new PsoStructureEntryInfo((MetaName)1356521412, PsoDataType.Float2, 720, 0, 0), - new PsoStructureEntryInfo((MetaName)3610920953, PsoDataType.Structure, 728, 0, MetaName.camThirdPersonCameraMetadataStealthZoomSettings), + new PsoStructureEntryInfo(MetaName.CollisionFallBackPosition, PsoDataType.Structure, 552, 0, MetaName.camThirdPersonCameraMetadataCollisionFallBackPosition), + new PsoStructureEntryInfo(MetaName.CollisionRootPositionFallBackToPivotBlendValue, PsoDataType.Float, 592, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldConstrainCollisionRootPositionAgainstClippingTypes, PsoDataType.Bool, 596, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionRootPositionSpringConstant, PsoDataType.Float, 600, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionRootPositionSpringDampingRatio, PsoDataType.Float, 604, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleOnTopOfVehicleCollisionSettings, PsoDataType.Structure, 608, 0, MetaName.camThirdPersonCameraMetadataVehicleOnTopOfVehicleCollisionSettings), + new PsoStructureEntryInfo(MetaName.IdealHeadingOffsetForLimiting, PsoDataType.Float, 632, 0, 0), + new PsoStructureEntryInfo(MetaName.RelativeOrbitHeadingLimits, PsoDataType.Float2, 636, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitPitchLimits, PsoDataType.Float2, 644, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseOrbitPitchOffset, PsoDataType.Float, 652, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseOrbitPitchOffsetInTightSpace, PsoDataType.Float, 656, 0, 0), + new PsoStructureEntryInfo(MetaName.LookOverSettings, PsoDataType.Structure, 664, 0, MetaName.camThirdPersonCameraMetadataLookOverSettings), + new PsoStructureEntryInfo(MetaName.ShouldIgnoreAttachParentPitchForLookBehind, PsoDataType.Bool, 688, 0, 0), + new PsoStructureEntryInfo(MetaName.OrbitDistanceLimitsForBasePosition, PsoDataType.Float2, 692, 0, 0), + new PsoStructureEntryInfo(MetaName.PreToPostCollisionLookAtOrientationBlendValue, PsoDataType.Float, 700, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRollSpringConstant, PsoDataType.Float, 704, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRollSpringDampingRatio, PsoDataType.Float, 708, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRollDampingPitchSoftLimits, PsoDataType.Float2, 712, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRollDampingPitchHardLimits, PsoDataType.Float2, 720, 0, 0), + new PsoStructureEntryInfo(MetaName.StealthZoomSettings, PsoDataType.Structure, 728, 0, MetaName.camThirdPersonCameraMetadataStealthZoomSettings), new PsoStructureEntryInfo((MetaName)1947299079, PsoDataType.Structure, 752, 0, MetaName.camThirdPersonCameraMetadataQuadrupedalHeightSpring), - new PsoStructureEntryInfo((MetaName)490368749, PsoDataType.String, 776, 7, 0), + new PsoStructureEntryInfo(MetaName.MotionBlurSettings, PsoDataType.String, 776, 7, 0), new PsoStructureEntryInfo((MetaName)2122226771, PsoDataType.Bool, 780, 0, 0), - new PsoStructureEntryInfo((MetaName)2833081775, PsoDataType.String, 784, 7, 0), - new PsoStructureEntryInfo((MetaName)1348911901, PsoDataType.Bool, 788, 0, 0), - new PsoStructureEntryInfo((MetaName)870186590, PsoDataType.Bool, 789, 0, 0), - new PsoStructureEntryInfo((MetaName)4238055063, PsoDataType.Bool, 790, 0, 0), - new PsoStructureEntryInfo((MetaName)2917952843, PsoDataType.Bool, 791, 0, 0), - new PsoStructureEntryInfo((MetaName)1301399000, PsoDataType.Bool, 792, 0, 0), - new PsoStructureEntryInfo((MetaName)1419212045, PsoDataType.Bool, 793, 0, 0), - new PsoStructureEntryInfo((MetaName)114759485, PsoDataType.Bool, 794, 0, 0), - new PsoStructureEntryInfo((MetaName)1634093344, PsoDataType.Float, 796, 0, 0), - new PsoStructureEntryInfo((MetaName)2294924343, PsoDataType.Float, 800, 0, 0), - new PsoStructureEntryInfo((MetaName)9436207, PsoDataType.Float, 804, 0, 0), - new PsoStructureEntryInfo((MetaName)1350912934, PsoDataType.Float, 808, 0, 0), - new PsoStructureEntryInfo((MetaName)70391041, PsoDataType.Float, 812, 0, 0), - new PsoStructureEntryInfo((MetaName)2783842060, PsoDataType.Float, 816, 0, 0), - new PsoStructureEntryInfo((MetaName)3397272914, PsoDataType.UInt, 820, 0, 0), - new PsoStructureEntryInfo((MetaName)1807116888, PsoDataType.UInt, 824, 0, 0), - new PsoStructureEntryInfo((MetaName)3048647846, PsoDataType.UInt, 828, 0, 0), - new PsoStructureEntryInfo((MetaName)3132164856, PsoDataType.UInt, 832, 0, 0), - new PsoStructureEntryInfo((MetaName)4207333442, PsoDataType.Float, 836, 0, 0), - new PsoStructureEntryInfo((MetaName)1717370547, PsoDataType.Float, 840, 0, 0), - new PsoStructureEntryInfo((MetaName)447200092, PsoDataType.Float, 844, 0, 0), - new PsoStructureEntryInfo((MetaName)3347315427, PsoDataType.Float, 848, 0, 0), - new PsoStructureEntryInfo((MetaName)4137686847, PsoDataType.Bool, 852, 0, 0), - new PsoStructureEntryInfo((MetaName)3921296525, PsoDataType.Float, 856, 0, 0), - new PsoStructureEntryInfo((MetaName)2840529796, PsoDataType.Float, 860, 0, 0), - new PsoStructureEntryInfo((MetaName)2535634527, PsoDataType.Float, 864, 0, 0), - new PsoStructureEntryInfo((MetaName)1225855688, PsoDataType.Float, 868, 0, 0), - new PsoStructureEntryInfo((MetaName)721433849, PsoDataType.Bool, 880, 0, 0), - new PsoStructureEntryInfo((MetaName)1821508366, PsoDataType.Bool, 881, 0, 0), - new PsoStructureEntryInfo((MetaName)2610056728, PsoDataType.Float, 884, 0, 0), - new PsoStructureEntryInfo((MetaName)843687785, PsoDataType.Float, 888, 0, 0) + new PsoStructureEntryInfo(MetaName.LockOnEnvelopeRef, PsoDataType.String, 784, 7, 0), + new PsoStructureEntryInfo(MetaName.ShouldDisplayReticule, PsoDataType.Bool, 788, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldDisplayReticuleDuringInterpolation, PsoDataType.Bool, 789, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldAllowInterpolationSourceCameraToPersistReticule, PsoDataType.Bool, 790, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldApplyWeaponFov, PsoDataType.Bool, 791, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseLockOnAiming, PsoDataType.Bool, 792, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldLockOnToTargetEntityPosition, PsoDataType.Bool, 793, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldValidateLockOnTargetPosition, PsoDataType.Bool, 794, 0, 0), + new PsoStructureEntryInfo(MetaName.TripleHeadNearClip, PsoDataType.Float, 796, 0, 0), + new PsoStructureEntryInfo(MetaName.RecoilShakeAmplitudeScaling, PsoDataType.Float, 800, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceForLockOn, PsoDataType.Float, 804, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceForFineAimScaling, PsoDataType.Float, 808, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForFineAimScaling, PsoDataType.Float, 812, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAngleDeltaForLockOnSwitchBlendScaling, PsoDataType.Float, 816, 0, 0), + new PsoStructureEntryInfo(MetaName.MinBlendDurationForInitialLockOn, PsoDataType.UInt, 820, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxBlendDurationForInitialLockOn, PsoDataType.UInt, 824, 0, 0), + new PsoStructureEntryInfo(MetaName.MinBlendDurationForLockOnSwitch, PsoDataType.UInt, 828, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxBlendDurationForLockOnSwitch, PsoDataType.UInt, 832, 0, 0), + new PsoStructureEntryInfo(MetaName.FineAimBlendSpringConstant, PsoDataType.Float, 836, 0, 0), + new PsoStructureEntryInfo(MetaName.FineAimBlendSpringDampingRatio, PsoDataType.Float, 840, 0, 0), + new PsoStructureEntryInfo(MetaName.WeaponZoomFactorSpringConstant, PsoDataType.Float, 844, 0, 0), + new PsoStructureEntryInfo(MetaName.WeaponZoomFactorSpringDampingRatio, PsoDataType.Float, 848, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldFocusOnLockOnTarget, PsoDataType.Bool, 852, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseFovToEmulateWithFocalLengthMultiplier, PsoDataType.Float, 856, 0, 0), + new PsoStructureEntryInfo(MetaName.FocusParentToTargetBlendLevel, PsoDataType.Float, 860, 0, 0), + new PsoStructureEntryInfo(MetaName.SecondaryFocusParentToTargetBlendLevel, PsoDataType.Float, 864, 0, 0), + new PsoStructureEntryInfo(MetaName.MinFocusToSecondaryFocusDistance, PsoDataType.Float, 868, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseLockOnAimingForDriver, PsoDataType.Bool, 880, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldUseLockOnAimingForPassenger, PsoDataType.Bool, 881, 0, 0), + new PsoStructureEntryInfo(MetaName.ExtraSideOffsetForHangingOnLeftSide, PsoDataType.Float, 884, 0, 0), + new PsoStructureEntryInfo(MetaName.ExtraSideOffsetForHangingOnRightSide, PsoDataType.Float, 888, 0, 0) ); case MetaName.camMarketingFreeCameraMetadata: return new PsoStructureInfo(MetaName.camMarketingFreeCameraMetadata, 0, 0, 200, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo((MetaName)3808044930, PsoDataType.Structure, 32, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), new PsoStructureEntryInfo((MetaName)2925373184, PsoDataType.Structure, 64, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), new PsoStructureEntryInfo((MetaName)31061142, PsoDataType.Structure, 96, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), @@ -4824,24 +4824,24 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)3141690306, PsoDataType.Float, 176, 0, 0), new PsoStructureEntryInfo((MetaName)4157311158, PsoDataType.Float, 180, 0, 0), new PsoStructureEntryInfo((MetaName)1989308054, PsoDataType.Float, 184, 0, 0), - new PsoStructureEntryInfo((MetaName)4261179401, PsoDataType.Float, 188, 0, 0), - new PsoStructureEntryInfo((MetaName)1361361101, PsoDataType.Float, 192, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxPitch, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRoll, PsoDataType.Float, 192, 0, 0) ); case MetaName.camMarketingFreeCameraMetadataInputResponse: return new PsoStructureInfo(MetaName.camMarketingFreeCameraMetadataInputResponse, 0, 0, 32, new PsoStructureEntryInfo((MetaName)3855676319, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)3265151949, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)455772583, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1627413096, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.InputMagPowerFactor, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.Acceleration, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.Deceleration, PsoDataType.Float, 20, 0, 0), new PsoStructureEntryInfo(MetaName.MaxSpeed, PsoDataType.Float, 24, 0, 0) ); case MetaName.camMarketingAToBCameraMetadata: return new PsoStructureInfo(MetaName.camMarketingAToBCameraMetadata, 0, 0, 216, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo((MetaName)3808044930, PsoDataType.Structure, 32, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), new PsoStructureEntryInfo((MetaName)2925373184, PsoDataType.Structure, 64, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), new PsoStructureEntryInfo((MetaName)31061142, PsoDataType.Structure, 96, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), @@ -4852,8 +4852,8 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)3141690306, PsoDataType.Float, 176, 0, 0), new PsoStructureEntryInfo((MetaName)4157311158, PsoDataType.Float, 180, 0, 0), new PsoStructureEntryInfo((MetaName)1989308054, PsoDataType.Float, 184, 0, 0), - new PsoStructureEntryInfo((MetaName)4261179401, PsoDataType.Float, 188, 0, 0), - new PsoStructureEntryInfo((MetaName)1361361101, PsoDataType.Float, 192, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPitch, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRoll, PsoDataType.Float, 192, 0, 0), new PsoStructureEntryInfo((MetaName)1044888659, PsoDataType.String, 200, 7, 0), new PsoStructureEntryInfo((MetaName)1147067733, PsoDataType.UInt, 204, 0, 0), new PsoStructureEntryInfo((MetaName)1825469896, PsoDataType.UInt, 208, 0, 0) @@ -4861,20 +4861,20 @@ namespace CodeWalker.GameFiles case MetaName.camTimedSplineCameraMetadata: return new PsoStructureInfo(MetaName.camTimedSplineCameraMetadata, 0, 0, 48, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1391977192, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultFov, PsoDataType.Float, 32, 0, 0), new PsoStructureEntryInfo((MetaName)3867080895, PsoDataType.SInt, 40, 0, 0) ); case MetaName.camMarketingOrbitCameraMetadata: return new PsoStructureInfo(MetaName.camMarketingOrbitCameraMetadata, 0, 0, 208, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo((MetaName)3808044930, PsoDataType.Structure, 32, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), new PsoStructureEntryInfo((MetaName)2925373184, PsoDataType.Structure, 64, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), new PsoStructureEntryInfo((MetaName)31061142, PsoDataType.Structure, 96, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), @@ -4885,18 +4885,18 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)3141690306, PsoDataType.Float, 176, 0, 0), new PsoStructureEntryInfo((MetaName)4157311158, PsoDataType.Float, 180, 0, 0), new PsoStructureEntryInfo((MetaName)1989308054, PsoDataType.Float, 184, 0, 0), - new PsoStructureEntryInfo((MetaName)4261179401, PsoDataType.Float, 188, 0, 0), - new PsoStructureEntryInfo((MetaName)1361361101, PsoDataType.Float, 192, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPitch, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRoll, PsoDataType.Float, 192, 0, 0), new PsoStructureEntryInfo((MetaName)2308368369, PsoDataType.Float, 200, 0, 0), - new PsoStructureEntryInfo((MetaName)4021873979, PsoDataType.String, 204, 7, 0) + new PsoStructureEntryInfo(MetaName.SpringMountRef, PsoDataType.String, 204, 7, 0) ); case MetaName.camMarketingMountedCameraMetadata: return new PsoStructureInfo(MetaName.camMarketingMountedCameraMetadata, 0, 0, 208, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo((MetaName)3808044930, PsoDataType.Structure, 32, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), new PsoStructureEntryInfo((MetaName)2925373184, PsoDataType.Structure, 64, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), new PsoStructureEntryInfo((MetaName)31061142, PsoDataType.Structure, 96, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), @@ -4907,18 +4907,18 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)3141690306, PsoDataType.Float, 176, 0, 0), new PsoStructureEntryInfo((MetaName)4157311158, PsoDataType.Float, 180, 0, 0), new PsoStructureEntryInfo((MetaName)1989308054, PsoDataType.Float, 184, 0, 0), - new PsoStructureEntryInfo((MetaName)4261179401, PsoDataType.Float, 188, 0, 0), - new PsoStructureEntryInfo((MetaName)1361361101, PsoDataType.Float, 192, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPitch, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRoll, PsoDataType.Float, 192, 0, 0), new PsoStructureEntryInfo((MetaName)2308368369, PsoDataType.Float, 200, 0, 0), - new PsoStructureEntryInfo((MetaName)4021873979, PsoDataType.String, 204, 7, 0) + new PsoStructureEntryInfo(MetaName.SpringMountRef, PsoDataType.String, 204, 7, 0) ); case MetaName.camMarketingStickyCameraMetadata: return new PsoStructureInfo(MetaName.camMarketingStickyCameraMetadata, 0, 0, 200, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo((MetaName)3808044930, PsoDataType.Structure, 32, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), new PsoStructureEntryInfo((MetaName)2925373184, PsoDataType.Structure, 64, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), new PsoStructureEntryInfo((MetaName)31061142, PsoDataType.Structure, 96, 0, MetaName.camMarketingFreeCameraMetadataInputResponse), @@ -4929,90 +4929,90 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)3141690306, PsoDataType.Float, 176, 0, 0), new PsoStructureEntryInfo((MetaName)4157311158, PsoDataType.Float, 180, 0, 0), new PsoStructureEntryInfo((MetaName)1989308054, PsoDataType.Float, 184, 0, 0), - new PsoStructureEntryInfo((MetaName)4261179401, PsoDataType.Float, 188, 0, 0), - new PsoStructureEntryInfo((MetaName)1361361101, PsoDataType.Float, 192, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxPitch, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRoll, PsoDataType.Float, 192, 0, 0) ); case MetaName.camScriptedCameraMetadata: return new PsoStructureInfo(MetaName.camScriptedCameraMetadata, 0, 0, 40, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1391977192, PsoDataType.Float, 32, 0, 0) + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultFov, PsoDataType.Float, 32, 0, 0) ); case MetaName.camScriptedFlyCameraMetadata: return new PsoStructureInfo(MetaName.camScriptedFlyCameraMetadata, 0, 0, 120, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1391977192, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultFov, PsoDataType.Float, 32, 0, 0), new PsoStructureEntryInfo((MetaName)1160500952, PsoDataType.Structure, 40, 0, MetaName.camScriptedFlyCameraMetadataInputResponse), new PsoStructureEntryInfo((MetaName)2802203540, PsoDataType.Structure, 64, 0, MetaName.camScriptedFlyCameraMetadataInputResponse), - new PsoStructureEntryInfo((MetaName)2266995505, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultPitch, PsoDataType.Float, 88, 0, 0), new PsoStructureEntryInfo((MetaName)1176855075, PsoDataType.Float, 92, 0, 0), new PsoStructureEntryInfo((MetaName)2736468652, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)4276410337, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxHeight, PsoDataType.Float, 100, 0, 0), new PsoStructureEntryInfo(MetaName.CapsuleRadius, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)851393034, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHeightAboveWater, PsoDataType.Float, 108, 0, 0), new PsoStructureEntryInfo((MetaName)2779060394, PsoDataType.UInt, 112, 0, 0) ); case MetaName.camScriptedFlyCameraMetadataInputResponse: return new PsoStructureInfo(MetaName.camScriptedFlyCameraMetadataInputResponse, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)3265151949, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2732255867, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)1689883019, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.InputMagPowerFactor, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAcceleration, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDeceleration, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo(MetaName.MaxSpeed, PsoDataType.Float, 20, 0, 0) ); case MetaName.camCustomTimedSplineCameraMetadata: return new PsoStructureInfo(MetaName.camCustomTimedSplineCameraMetadata, 0, 0, 48, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1391977192, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultFov, PsoDataType.Float, 32, 0, 0), new PsoStructureEntryInfo((MetaName)3867080895, PsoDataType.SInt, 40, 0, 0) ); case MetaName.camRoundedSplineCameraMetadata: return new PsoStructureInfo(MetaName.camRoundedSplineCameraMetadata, 0, 0, 40, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1391977192, PsoDataType.Float, 32, 0, 0) + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultFov, PsoDataType.Float, 32, 0, 0) ); case MetaName.camSmoothedSplineCameraMetadata: return new PsoStructureInfo(MetaName.camSmoothedSplineCameraMetadata, 0, 0, 48, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1391977192, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultFov, PsoDataType.Float, 32, 0, 0), new PsoStructureEntryInfo((MetaName)3867080895, PsoDataType.SInt, 40, 0, 0) ); case MetaName.camSwitchCameraMetadata: return new PsoStructureInfo(MetaName.camSwitchCameraMetadata, 0, 0, 144, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo((MetaName)1245276384, PsoDataType.String, 32, 7, 0), new PsoStructureEntryInfo((MetaName)2105074563, PsoDataType.Float3, 48, 0, 0), new PsoStructureEntryInfo(MetaName.Fov, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)1325746994, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)1859659636, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.NearClip, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.MotionBlurStrength, PsoDataType.Float, 72, 0, 0), new PsoStructureEntryInfo((MetaName)1056782751, PsoDataType.Float, 76, 0, 0), new PsoStructureEntryInfo((MetaName)341706306, PsoDataType.Float, 80, 0, 0), new PsoStructureEntryInfo((MetaName)1176855075, PsoDataType.Float, 84, 0, 0), new PsoStructureEntryInfo((MetaName)2303904065, PsoDataType.Float, 88, 0, 0), new PsoStructureEntryInfo((MetaName)978298090, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)2266995505, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultPitch, PsoDataType.Float, 96, 0, 0), new PsoStructureEntryInfo((MetaName)1771807090, PsoDataType.Float, 100, 0, 0), new PsoStructureEntryInfo((MetaName)1215756626, PsoDataType.Float, 104, 0, 0), new PsoStructureEntryInfo((MetaName)1181521957, PsoDataType.Float, 108, 0, 0), @@ -5026,33 +5026,33 @@ namespace CodeWalker.GameFiles case MetaName.camReplayRecordedCameraMetadata: return new PsoStructureInfo(MetaName.camReplayRecordedCameraMetadata, 0, 0, 40, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2696635175, PsoDataType.Float, 32, 0, 0) + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxCollisionTestRadius, PsoDataType.Float, 32, 0, 0) ); case MetaName.camReplayPresetCameraMetadata: return new PsoStructureInfo(MetaName.camReplayPresetCameraMetadata, 0, 0, 256, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2696635175, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxCollisionTestRadius, PsoDataType.Float, 32, 0, 0), new PsoStructureEntryInfo((MetaName)3243156997, PsoDataType.Float3, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)54415504, PsoDataType.Float3, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.RelativeLookAtPosition, PsoDataType.Float3, 64, 0, 0), new PsoStructureEntryInfo((MetaName)3869518259, PsoDataType.Structure, 80, 0, MetaName.camReplayBaseCameraMetadataInputResponse), new PsoStructureEntryInfo((MetaName)31061142, PsoDataType.Structure, 104, 0, MetaName.camReplayBaseCameraMetadataInputResponse), new PsoStructureEntryInfo((MetaName)3177251856, PsoDataType.Structure, 128, 0, MetaName.camReplayBaseCameraMetadataInputResponse), - new PsoStructureEntryInfo((MetaName)2006858266, PsoDataType.Float, 152, 0, 0), - new PsoStructureEntryInfo((MetaName)3615529910, PsoDataType.Float, 156, 0, 0), - new PsoStructureEntryInfo((MetaName)1391977192, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.MinFov, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxFov, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultFov, PsoDataType.Float, 160, 0, 0), new PsoStructureEntryInfo((MetaName)777402839, PsoDataType.Float, 164, 0, 0), new PsoStructureEntryInfo((MetaName)1557834870, PsoDataType.Float, 168, 0, 0), new PsoStructureEntryInfo((MetaName)1089474876, PsoDataType.Bool, 172, 0, 0), new PsoStructureEntryInfo((MetaName)2480397790, PsoDataType.Bool, 173, 0, 0), - new PsoStructureEntryInfo((MetaName)3762874292, PsoDataType.Structure, 176, 0, MetaName.camReplayBaseCameraMetadataCollisionSettings), + new PsoStructureEntryInfo(MetaName.CollisionSettings, PsoDataType.Structure, 176, 0, MetaName.camReplayBaseCameraMetadataCollisionSettings), new PsoStructureEntryInfo((MetaName)549109147, PsoDataType.Float, 224, 0, 0), new PsoStructureEntryInfo((MetaName)3394194196, PsoDataType.UInt, 228, 0, 0), new PsoStructureEntryInfo((MetaName)2704093958, PsoDataType.UInt, 232, 0, 0), @@ -5063,32 +5063,32 @@ namespace CodeWalker.GameFiles ); case MetaName.camReplayBaseCameraMetadataInputResponse: return new PsoStructureInfo(MetaName.camReplayBaseCameraMetadataInputResponse, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)3265151949, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2732255867, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)1689883019, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.InputMagPowerFactor, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAcceleration, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDeceleration, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo(MetaName.MaxSpeed, PsoDataType.Float, 20, 0, 0) ); case MetaName.camReplayBaseCameraMetadataCollisionSettings: return new PsoStructureInfo(MetaName.camReplayBaseCameraMetadataCollisionSettings, 0, 0, 48, new PsoStructureEntryInfo((MetaName)2162401385, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)3243646861, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)1976571596, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.WaterHeightSmoothRate, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSafeRadiusReductionWithinPedMoverCapsule, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo((MetaName)653804618, PsoDataType.Float, 20, 0, 0), new PsoStructureEntryInfo((MetaName)3232040475, PsoDataType.Float, 24, 0, 0), new PsoStructureEntryInfo((MetaName)819688366, PsoDataType.Float, 28, 0, 0), new PsoStructureEntryInfo((MetaName)122123361, PsoDataType.Float, 32, 0, 0), new PsoStructureEntryInfo((MetaName)557881422, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)724966028, PsoDataType.Bool, 40, 0, 0) + new PsoStructureEntryInfo(MetaName.ShouldPushBeyondAttachParentIfClipping, PsoDataType.Bool, 40, 0, 0) ); case MetaName.camReplayFreeCameraMetadata: return new PsoStructureInfo(MetaName.camReplayFreeCameraMetadata, 0, 0, 544, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3424608737, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3044898952, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2696635175, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1325746994, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CollisionRef, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.DofSettings, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxCollisionTestRadius, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.NearClip, PsoDataType.Float, 40, 0, 0), new PsoStructureEntryInfo((MetaName)1160500952, PsoDataType.Structure, 48, 0, MetaName.camReplayBaseCameraMetadataInputResponse), new PsoStructureEntryInfo((MetaName)2802203540, PsoDataType.Structure, 72, 0, MetaName.camReplayBaseCameraMetadataInputResponse), new PsoStructureEntryInfo((MetaName)2292446130, PsoDataType.Structure, 96, 0, MetaName.camReplayBaseCameraMetadataInputResponse), @@ -5097,13 +5097,13 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)1176189471, PsoDataType.Structure, 168, 0, MetaName.camReplayBaseCameraMetadataInputResponse), new PsoStructureEntryInfo((MetaName)4043692651, PsoDataType.Structure, 192, 0, MetaName.camReplayBaseCameraMetadataInputResponse), new PsoStructureEntryInfo((MetaName)2391928883, PsoDataType.Structure, 216, 0, MetaName.camReplayBaseCameraMetadataInputResponse), - new PsoStructureEntryInfo((MetaName)1466164024, PsoDataType.Structure, 240, 0, (MetaName)2380636687), - new PsoStructureEntryInfo((MetaName)3699879509, PsoDataType.Structure, 280, 0, (MetaName)2380636687), - new PsoStructureEntryInfo((MetaName)2461431150, PsoDataType.Structure, 320, 0, (MetaName)2380636687), - new PsoStructureEntryInfo((MetaName)4261179401, PsoDataType.Float, 360, 0, 0), - new PsoStructureEntryInfo((MetaName)2006858266, PsoDataType.Float, 364, 0, 0), - new PsoStructureEntryInfo((MetaName)3615529910, PsoDataType.Float, 368, 0, 0), - new PsoStructureEntryInfo((MetaName)1391977192, PsoDataType.Float, 372, 0, 0), + new PsoStructureEntryInfo((MetaName)1466164024, PsoDataType.Structure, 240, 0, MetaName.camInterpolatorMetadata), + new PsoStructureEntryInfo((MetaName)3699879509, PsoDataType.Structure, 280, 0, MetaName.camInterpolatorMetadata), + new PsoStructureEntryInfo((MetaName)2461431150, PsoDataType.Structure, 320, 0, MetaName.camInterpolatorMetadata), + new PsoStructureEntryInfo(MetaName.MaxPitch, PsoDataType.Float, 360, 0, 0), + new PsoStructureEntryInfo(MetaName.MinFov, PsoDataType.Float, 364, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxFov, PsoDataType.Float, 368, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultFov, PsoDataType.Float, 372, 0, 0), new PsoStructureEntryInfo(MetaName.CapsuleRadius, PsoDataType.Float, 376, 0, 0), new PsoStructureEntryInfo((MetaName)537337364, PsoDataType.Float, 380, 0, 0), new PsoStructureEntryInfo((MetaName)870756038, PsoDataType.Float, 384, 0, 0), @@ -5111,7 +5111,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)3629360459, PsoDataType.Float, 392, 0, 0), new PsoStructureEntryInfo((MetaName)479683481, PsoDataType.Float, 396, 0, 0), new PsoStructureEntryInfo((MetaName)2077539523, PsoDataType.Float3, 400, 0, 0), - new PsoStructureEntryInfo((MetaName)3762874292, PsoDataType.Structure, 416, 0, MetaName.camReplayBaseCameraMetadataCollisionSettings), + new PsoStructureEntryInfo(MetaName.CollisionSettings, PsoDataType.Structure, 416, 0, MetaName.camReplayBaseCameraMetadataCollisionSettings), new PsoStructureEntryInfo((MetaName)4113213041, PsoDataType.Float, 464, 0, 0), new PsoStructureEntryInfo((MetaName)2101093733, PsoDataType.Float, 468, 0, 0), new PsoStructureEntryInfo((MetaName)2090863388, PsoDataType.Float, 472, 0, 0), @@ -5140,24 +5140,24 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)1428204256, PsoDataType.Bool, 20, 0, 0), new PsoStructureEntryInfo((MetaName)3480173900, PsoDataType.Bool, 21, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camShakeMetadataFrameComponent), - new PsoStructureEntryInfo((MetaName)2102911583, PsoDataType.Array, 24, 0, (MetaName)4), - new PsoStructureEntryInfo((MetaName)3143512563, PsoDataType.Float, 40, 0, 0) + new PsoStructureEntryInfo(MetaName.FrameComponents, PsoDataType.Array, 24, 0, (MetaName)4), + new PsoStructureEntryInfo(MetaName.Vibration, PsoDataType.Float, 40, 0, 0) ); case MetaName.camShakeMetadataFrameComponent: return new PsoStructureInfo(MetaName.camShakeMetadataFrameComponent, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Component, PsoDataType.Enum, 8, 0, (MetaName)4206293824), new PsoStructureEntryInfo((MetaName)3866719227, PsoDataType.String, 12, 7, 0), - new PsoStructureEntryInfo((MetaName)1811750171, PsoDataType.String, 16, 7, 0) + new PsoStructureEntryInfo(MetaName.EnvelopeRef, PsoDataType.String, 16, 7, 0) ); case MetaName.camOscillatorMetadata: return new PsoStructureInfo(MetaName.camOscillatorMetadata, 0, 0, 40, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)579825085, PsoDataType.Enum, 16, 0, (MetaName)902027429), + new PsoStructureEntryInfo(MetaName.Waveform, PsoDataType.Enum, 16, 0, (MetaName)902027429), new PsoStructureEntryInfo(MetaName.Amplitude, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2554379728, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)369413731, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.Frequency, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.Phase, PsoDataType.Float, 28, 0, 0), new PsoStructureEntryInfo((MetaName)2974245218, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)398571259, PsoDataType.Float, 36, 0, 0) + new PsoStructureEntryInfo(MetaName.Decay, PsoDataType.Float, 36, 0, 0) ); case MetaName.camAnimatedShakeMetadata: return new PsoStructureInfo(MetaName.camAnimatedShakeMetadata, 0, 0, 24, @@ -5169,11 +5169,11 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicCameraManShotMetadata: return new PsoStructureInfo(MetaName.camCinematicCameraManShotMetadata, 0, 0, 72, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CameraRef, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), - new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo(MetaName.VehicleTypes, PsoDataType.Flags, 32, 0, (MetaName)786436), new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), @@ -5187,11 +5187,11 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicCraningCameraManShotMetadata: return new PsoStructureInfo(MetaName.camCinematicCraningCameraManShotMetadata, 0, 0, 104, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CameraRef, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), - new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo(MetaName.VehicleTypes, PsoDataType.Flags, 32, 0, (MetaName)786436), new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), @@ -5208,16 +5208,16 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)3516181833, PsoDataType.Float, 80, 0, 0), new PsoStructureEntryInfo((MetaName)3249173046, PsoDataType.Float2, 84, 0, 0), new PsoStructureEntryInfo((MetaName)2987455099, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)2723670760, PsoDataType.Float, 96, 0, 0) + new PsoStructureEntryInfo(MetaName.ScanRadius, PsoDataType.Float, 96, 0, 0) ); case MetaName.camCinematicInVehicleCrashShotMetadata: return new PsoStructureInfo(MetaName.camCinematicInVehicleCrashShotMetadata, 0, 0, 96, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CameraRef, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), - new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo(MetaName.VehicleTypes, PsoDataType.Flags, 32, 0, (MetaName)786436), new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), @@ -5227,21 +5227,21 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0), new PsoStructureEntryInfo((MetaName)4197822931, PsoDataType.Bool, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)1178479344, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.MinRoll, PsoDataType.Float, 68, 0, 0), new PsoStructureEntryInfo((MetaName)3669617802, PsoDataType.UInt, 72, 0, 0), new PsoStructureEntryInfo((MetaName)3100384106, PsoDataType.UInt, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)2073951791, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.MinVelocity, PsoDataType.Float, 80, 0, 0), new PsoStructureEntryInfo((MetaName)3730987855, PsoDataType.Float, 84, 0, 0), new PsoStructureEntryInfo((MetaName)4150416286, PsoDataType.UInt, 88, 0, 0) ); case MetaName.camCinematicVehiclePartShotMetadata: return new PsoStructureInfo(MetaName.camCinematicVehiclePartShotMetadata, 0, 0, 72, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CameraRef, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), - new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo(MetaName.VehicleTypes, PsoDataType.Flags, 32, 0, (MetaName)786436), new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), @@ -5255,11 +5255,11 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicHeliTrackingShotMetadata: return new PsoStructureInfo(MetaName.camCinematicHeliTrackingShotMetadata, 0, 0, 72, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CameraRef, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), - new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo(MetaName.VehicleTypes, PsoDataType.Flags, 32, 0, (MetaName)786436), new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), @@ -5273,11 +5273,11 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicVehicleOrbitShotMetadata: return new PsoStructureInfo(MetaName.camCinematicVehicleOrbitShotMetadata, 0, 0, 64, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CameraRef, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), - new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo(MetaName.VehicleTypes, PsoDataType.Flags, 32, 0, (MetaName)786436), new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), @@ -5290,11 +5290,11 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicVehicleLowOrbitShotMetadata: return new PsoStructureInfo(MetaName.camCinematicVehicleLowOrbitShotMetadata, 0, 0, 64, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CameraRef, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), - new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo(MetaName.VehicleTypes, PsoDataType.Flags, 32, 0, (MetaName)786436), new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), @@ -5307,11 +5307,11 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicTrainRoofMountedShotMetadata: return new PsoStructureInfo(MetaName.camCinematicTrainRoofMountedShotMetadata, 0, 0, 64, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CameraRef, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), - new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo(MetaName.VehicleTypes, PsoDataType.Flags, 32, 0, (MetaName)786436), new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), @@ -5324,11 +5324,11 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicTrainStationShotMetadata: return new PsoStructureInfo(MetaName.camCinematicTrainStationShotMetadata, 0, 0, 64, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CameraRef, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), - new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo(MetaName.VehicleTypes, PsoDataType.Flags, 32, 0, (MetaName)786436), new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), @@ -5341,11 +5341,11 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicTrainPassengerShotMetadata: return new PsoStructureInfo(MetaName.camCinematicTrainPassengerShotMetadata, 0, 0, 64, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CameraRef, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), - new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo(MetaName.VehicleTypes, PsoDataType.Flags, 32, 0, (MetaName)786436), new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), @@ -5358,11 +5358,11 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicTrainTrackShotMetadata: return new PsoStructureInfo(MetaName.camCinematicTrainTrackShotMetadata, 0, 0, 64, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CameraRef, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), - new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo(MetaName.VehicleTypes, PsoDataType.Flags, 32, 0, (MetaName)786436), new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), @@ -5372,14 +5372,14 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0) ); - case (MetaName)1537399056: - return new PsoStructureInfo((MetaName)1537399056, 0, 0, 112, + case MetaName.camCinematicPoliceCarMountedShotMetadata: + return new PsoStructureInfo(MetaName.camCinematicPoliceCarMountedShotMetadata, 0, 0, 112, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CameraRef, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), - new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo(MetaName.VehicleTypes, PsoDataType.Flags, 32, 0, (MetaName)786436), new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), @@ -5388,24 +5388,24 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)3700663941, PsoDataType.Float, 48, 0, 0), new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)2799648005, PsoDataType.Bool, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)4172426852, PsoDataType.Bool, 65, 0, 0), - new PsoStructureEntryInfo((MetaName)3436942647, PsoDataType.Float2, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)10648206, PsoDataType.Float2, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)113692134, PsoDataType.Float2, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)1115426652, PsoDataType.Float2, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)556138114, PsoDataType.String, 100, 7, 0), - new PsoStructureEntryInfo((MetaName)2538678656, PsoDataType.String, 104, 7, 0), + new PsoStructureEntryInfo(MetaName.LimitAttachParentRelativePitchAndHeading, PsoDataType.Bool, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldTerminateForPitchAndHeading, PsoDataType.Bool, 65, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRelativePitch, PsoDataType.Float2, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachParentRelativeHeading, PsoDataType.Float2, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.InitialRelativePitchLimits, PsoDataType.Float2, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.InitialRelativeHeadingLimits, PsoDataType.Float2, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.InVehicleLookAtDampingRef, PsoDataType.String, 100, 7, 0), + new PsoStructureEntryInfo(MetaName.OnFootLookAtDampingRef, PsoDataType.String, 104, 7, 0), new PsoStructureEntryInfo((MetaName)4197822931, PsoDataType.Bool, 108, 0, 0) ); case MetaName.camCinematicPoliceHeliMountedShotMetadata: return new PsoStructureInfo(MetaName.camCinematicPoliceHeliMountedShotMetadata, 0, 0, 72, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CameraRef, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), - new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo(MetaName.VehicleTypes, PsoDataType.Flags, 32, 0, (MetaName)786436), new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), @@ -5419,11 +5419,11 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicPoliceInCoverShotMetadata: return new PsoStructureInfo(MetaName.camCinematicPoliceInCoverShotMetadata, 0, 0, 72, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CameraRef, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), - new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo(MetaName.VehicleTypes, PsoDataType.Flags, 32, 0, (MetaName)786436), new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), @@ -5437,11 +5437,11 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicPoliceRoadBlockShotMetadata: return new PsoStructureInfo(MetaName.camCinematicPoliceRoadBlockShotMetadata, 0, 0, 80, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CameraRef, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), - new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo(MetaName.VehicleTypes, PsoDataType.Flags, 32, 0, (MetaName)786436), new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), @@ -5451,17 +5451,17 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0), new PsoStructureEntryInfo((MetaName)876494977, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)662073465, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.SpreadLimit, PsoDataType.Float, 68, 0, 0), new PsoStructureEntryInfo((MetaName)4197822931, PsoDataType.Bool, 72, 0, 0) ); case MetaName.camCinematicPoliceExitVehicleShotMetadata: return new PsoStructureInfo(MetaName.camCinematicPoliceExitVehicleShotMetadata, 0, 0, 72, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CameraRef, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), - new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo(MetaName.VehicleTypes, PsoDataType.Flags, 32, 0, (MetaName)786436), new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), @@ -5475,11 +5475,11 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicOnFootIdleShotMetadata: return new PsoStructureInfo(MetaName.camCinematicOnFootIdleShotMetadata, 0, 0, 64, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CameraRef, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), - new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo(MetaName.VehicleTypes, PsoDataType.Flags, 32, 0, (MetaName)786436), new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), @@ -5492,11 +5492,11 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicOnFootFirstPersonIdleShotMetadata: return new PsoStructureInfo(MetaName.camCinematicOnFootFirstPersonIdleShotMetadata, 0, 0, 80, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CameraRef, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), - new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo(MetaName.VehicleTypes, PsoDataType.Flags, 32, 0, (MetaName)786436), new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), @@ -5506,16 +5506,16 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)2275630497, PsoDataType.Bool, 52, 0, 0), new PsoStructureEntryInfo((MetaName)60485337, PsoDataType.UInt, 56, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo((MetaName)1331283328, PsoDataType.Array, 64, 0, (MetaName)14) + new PsoStructureEntryInfo(MetaName.Cameras, PsoDataType.Array, 64, 0, (MetaName)14) ); case MetaName.camCinematicStuntJumpShotMetadata: return new PsoStructureInfo(MetaName.camCinematicStuntJumpShotMetadata, 0, 0, 64, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CameraRef, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), - new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo(MetaName.VehicleTypes, PsoDataType.Flags, 32, 0, (MetaName)786436), new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), @@ -5528,11 +5528,11 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicParachuteHeliShotMetadata: return new PsoStructureInfo(MetaName.camCinematicParachuteHeliShotMetadata, 0, 0, 64, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CameraRef, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), - new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo(MetaName.VehicleTypes, PsoDataType.Flags, 32, 0, (MetaName)786436), new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), @@ -5545,11 +5545,11 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicParachuteCameraManShotMetadata: return new PsoStructureInfo(MetaName.camCinematicParachuteCameraManShotMetadata, 0, 0, 64, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CameraRef, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), - new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo(MetaName.VehicleTypes, PsoDataType.Flags, 32, 0, (MetaName)786436), new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), @@ -5562,11 +5562,11 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicOnFootAssistedAimingKillShotMetadata: return new PsoStructureInfo(MetaName.camCinematicOnFootAssistedAimingKillShotMetadata, 0, 0, 72, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CameraRef, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), - new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo(MetaName.VehicleTypes, PsoDataType.Flags, 32, 0, (MetaName)786436), new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), @@ -5581,11 +5581,11 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicOnFootMeleeShotMetadata: return new PsoStructureInfo(MetaName.camCinematicOnFootMeleeShotMetadata, 0, 0, 64, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CameraRef, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), - new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo(MetaName.VehicleTypes, PsoDataType.Flags, 32, 0, (MetaName)786436), new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), @@ -5598,11 +5598,11 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicVehicleBonnetShotMetadata: return new PsoStructureInfo(MetaName.camCinematicVehicleBonnetShotMetadata, 0, 0, 80, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CameraRef, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), - new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo(MetaName.VehicleTypes, PsoDataType.Flags, 32, 0, (MetaName)786436), new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), @@ -5618,11 +5618,11 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicBustedShotMetadata: return new PsoStructureInfo(MetaName.camCinematicBustedShotMetadata, 0, 0, 72, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CameraRef, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), - new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo(MetaName.VehicleTypes, PsoDataType.Flags, 32, 0, (MetaName)786436), new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), @@ -5636,11 +5636,11 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicVehicleGroupShotMetadata: return new PsoStructureInfo(MetaName.camCinematicVehicleGroupShotMetadata, 0, 0, 80, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CameraRef, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), - new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo(MetaName.VehicleTypes, PsoDataType.Flags, 32, 0, (MetaName)786436), new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), @@ -5656,11 +5656,11 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicMissileKillShotMetadata: return new PsoStructureInfo(MetaName.camCinematicMissileKillShotMetadata, 0, 0, 64, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CameraRef, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), - new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo(MetaName.VehicleTypes, PsoDataType.Flags, 32, 0, (MetaName)786436), new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), @@ -5673,11 +5673,11 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicWaterCrashShotMetadata: return new PsoStructureInfo(MetaName.camCinematicWaterCrashShotMetadata, 0, 0, 64, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CameraRef, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), - new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo(MetaName.VehicleTypes, PsoDataType.Flags, 32, 0, (MetaName)786436), new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), @@ -5690,11 +5690,11 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicFallFromHeliShotMetadata: return new PsoStructureInfo(MetaName.camCinematicFallFromHeliShotMetadata, 0, 0, 64, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CameraRef, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), - new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo(MetaName.VehicleTypes, PsoDataType.Flags, 32, 0, (MetaName)786436), new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), @@ -5707,11 +5707,11 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicVehicleConvertibleRoofShotMetadata: return new PsoStructureInfo(MetaName.camCinematicVehicleConvertibleRoofShotMetadata, 0, 0, 64, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CameraRef, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), - new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo(MetaName.VehicleTypes, PsoDataType.Flags, 32, 0, (MetaName)786436), new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), @@ -5724,11 +5724,11 @@ namespace CodeWalker.GameFiles case MetaName.camCinematicScriptRaceCheckPointShotMetadata: return new PsoStructureInfo(MetaName.camCinematicScriptRaceCheckPointShotMetadata, 0, 0, 64, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.CameraRef, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo((MetaName)3727857604, PsoDataType.Float2, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2997337835, PsoDataType.Bool, 28, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3529626013), - new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 32, 0, (MetaName)786436), + new PsoStructureEntryInfo(MetaName.VehicleTypes, PsoDataType.Flags, 32, 0, (MetaName)786436), new PsoStructureEntryInfo((MetaName)841129953, PsoDataType.Bool, 36, 0, 0), new PsoStructureEntryInfo((MetaName)1771050581, PsoDataType.Bool, 37, 0, 0), new PsoStructureEntryInfo((MetaName)2973786865, PsoDataType.Float, 40, 0, 0), @@ -5842,7 +5842,7 @@ namespace CodeWalker.GameFiles case MetaName.camVehicleCustomSettingsMetadata: return new PsoStructureInfo(MetaName.camVehicleCustomSettingsMetadata, 0, 0, 192, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3950418303, PsoDataType.Structure, 16, 0, MetaName.camVehicleCustomSettingsMetadataDoorAlignmentSettings), + new PsoStructureEntryInfo(MetaName.DoorAlignmentSettings, PsoDataType.Structure, 16, 0, MetaName.camVehicleCustomSettingsMetadataDoorAlignmentSettings), new PsoStructureEntryInfo((MetaName)2728784918, PsoDataType.Structure, 56, 0, MetaName.camVehicleCustomSettingsMetadataExitSeatPhaseForCameraExitSettings), new PsoStructureEntryInfo((MetaName)556143364, PsoDataType.Structure, 72, 0, MetaName.camVehicleCustomSettingsMetadataMultiplayerPassengerCameraHashSettings), new PsoStructureEntryInfo((MetaName)981761687, PsoDataType.Structure, 104, 0, MetaName.camVehicleCustomSettingsMetadataInvalidCinematcShotsRefsForVehicleSettings), @@ -5852,30 +5852,30 @@ namespace CodeWalker.GameFiles ); case MetaName.camVehicleCustomSettingsMetadataExitSeatPhaseForCameraExitSettings: return new PsoStructureInfo(MetaName.camVehicleCustomSettingsMetadataExitSeatPhaseForCameraExitSettings, 0, 0, 16, - new PsoStructureEntryInfo((MetaName)3663951405, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldConsiderData, PsoDataType.Bool, 8, 0, 0), new PsoStructureEntryInfo((MetaName)2549072274, PsoDataType.Float, 12, 0, 0) ); case MetaName.camVehicleCustomSettingsMetadataMultiplayerPassengerCameraHashSettings: return new PsoStructureInfo(MetaName.camVehicleCustomSettingsMetadataMultiplayerPassengerCameraHashSettings, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)3663951405, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldConsiderData, PsoDataType.Bool, 8, 0, 0), new PsoStructureEntryInfo((MetaName)109781807, PsoDataType.String, 12, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UInt, 0, 0, 0), new PsoStructureEntryInfo((MetaName)2400069518, PsoDataType.Array, 16, 0, (MetaName)2) ); case MetaName.camVehicleCustomSettingsMetadataInvalidCinematcShotsRefsForVehicleSettings: return new PsoStructureInfo(MetaName.camVehicleCustomSettingsMetadataInvalidCinematcShotsRefsForVehicleSettings, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)3663951405, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldConsiderData, PsoDataType.Bool, 8, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), new PsoStructureEntryInfo((MetaName)3579087558, PsoDataType.Array, 16, 0, (MetaName)1) ); case MetaName.camVehicleCustomSettingsMetadataAdditionalBoundScalingVehicleSettings: return new PsoStructureInfo(MetaName.camVehicleCustomSettingsMetadataAdditionalBoundScalingVehicleSettings, 0, 0, 16, - new PsoStructureEntryInfo((MetaName)3663951405, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1920226182, PsoDataType.Float, 12, 0, 0) + new PsoStructureEntryInfo(MetaName.ShouldConsiderData, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.HeightScaling, PsoDataType.Float, 12, 0, 0) ); case MetaName.camVehicleCustomSettingsMetadataSeatSpecficCameras: return new PsoStructureInfo(MetaName.camVehicleCustomSettingsMetadataSeatSpecficCameras, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)3663951405, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldConsiderData, PsoDataType.Bool, 8, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camSeatSpecificCameras), new PsoStructureEntryInfo((MetaName)1517635298, PsoDataType.Array, 16, 0, (MetaName)1) ); @@ -5890,14 +5890,14 @@ namespace CodeWalker.GameFiles case MetaName.camGameplayDirectorMetadata: return new PsoStructureInfo(MetaName.camGameplayDirectorMetadata, 0, 0, 608, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 16, 0, 0), new PsoStructureEntryInfo((MetaName)2089690180, PsoDataType.String, 24, 7, 0), new PsoStructureEntryInfo((MetaName)519684035, PsoDataType.String, 28, 7, 0), new PsoStructureEntryInfo((MetaName)4121580243, PsoDataType.String, 32, 7, 0), new PsoStructureEntryInfo((MetaName)3253949128, PsoDataType.String, 36, 7, 0), new PsoStructureEntryInfo((MetaName)3345137885, PsoDataType.String, 40, 7, 0), new PsoStructureEntryInfo((MetaName)2365172496, PsoDataType.String, 44, 7, 0), - new PsoStructureEntryInfo((MetaName)961264130, PsoDataType.String, 48, 7, 0), + new PsoStructureEntryInfo(MetaName.ThirdPersonVehicleAimCameraRef, PsoDataType.String, 48, 7, 0), new PsoStructureEntryInfo((MetaName)3734793071, PsoDataType.String, 52, 7, 0), new PsoStructureEntryInfo((MetaName)2936418982, PsoDataType.String, 56, 7, 0), new PsoStructureEntryInfo((MetaName)595399339, PsoDataType.String, 60, 7, 0), @@ -5956,7 +5956,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)924888517, PsoDataType.UInt, 288, 0, 0), new PsoStructureEntryInfo((MetaName)1870040536, PsoDataType.Float, 292, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camGameplayDirectorMetadataVehicleCustomSettings), - new PsoStructureEntryInfo((MetaName)3282527658, PsoDataType.Array, 296, 0, (MetaName)66), + new PsoStructureEntryInfo(MetaName.VehicleCustomSettingsList, PsoDataType.Array, 296, 0, (MetaName)66), new PsoStructureEntryInfo((MetaName)3559905910, PsoDataType.Float, 312, 0, 0), new PsoStructureEntryInfo((MetaName)259392755, PsoDataType.Float, 316, 0, 0), new PsoStructureEntryInfo((MetaName)1523938219, PsoDataType.Float, 320, 0, 0), @@ -6015,9 +6015,9 @@ namespace CodeWalker.GameFiles ); case MetaName.camGameplayDirectorMetadataExplosionShakeSettings: return new PsoStructureInfo(MetaName.camGameplayDirectorMetadataExplosionShakeSettings, 0, 0, 56, - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)335839296, PsoDataType.Float2, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)2118495770, PsoDataType.UInt, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.DistanceLimits, PsoDataType.Float2, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxInstances, PsoDataType.UInt, 20, 0, 0), new PsoStructureEntryInfo(MetaName.RumbleDuration, PsoDataType.UInt, 24, 0, 0), new PsoStructureEntryInfo((MetaName)3070197011, PsoDataType.UInt, 28, 0, 0), new PsoStructureEntryInfo((MetaName)2337695573, PsoDataType.Float, 32, 0, 0), @@ -6029,12 +6029,12 @@ namespace CodeWalker.GameFiles case MetaName.camGameplayDirectorMetadataVehicleCustomSettings: return new PsoStructureInfo(MetaName.camGameplayDirectorMetadataVehicleCustomSettings, 0, 0, 16, new PsoStructureEntryInfo(MetaName.ModelName, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)926775845, PsoDataType.String, 12, 7, 0) + new PsoStructureEntryInfo(MetaName.SettingsRef, PsoDataType.String, 12, 7, 0) ); case MetaName.camCinematicDirectorMetadata: return new PsoStructureInfo(MetaName.camCinematicDirectorMetadata, 0, 0, 104, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 16, 0, 0), new PsoStructureEntryInfo((MetaName)164388064, PsoDataType.UInt, 24, 0, 0), new PsoStructureEntryInfo((MetaName)1567199172, PsoDataType.Float, 28, 0, 0), new PsoStructureEntryInfo((MetaName)4027640984, PsoDataType.Float, 32, 0, 0), @@ -6050,14 +6050,14 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)425967458, PsoDataType.Float, 72, 0, 0), new PsoStructureEntryInfo((MetaName)2079587041, PsoDataType.Float, 76, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), - new PsoStructureEntryInfo((MetaName)1387858, PsoDataType.Array, 80, 0, MetaName.STRING), + new PsoStructureEntryInfo(MetaName.CinematicContexts, PsoDataType.Array, 80, 0, MetaName.STRING), new PsoStructureEntryInfo((MetaName)28440621, PsoDataType.UInt, 96, 0, 0) ); case MetaName.camCinematicInVehicleMultiplayerPassengerContextMetadata: return new PsoStructureInfo(MetaName.camCinematicInVehicleMultiplayerPassengerContextMetadata, 0, 0, 72, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), - new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.Shots, PsoDataType.Array, 16, 0, (MetaName)1), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), @@ -6072,15 +6072,15 @@ namespace CodeWalker.GameFiles ); case MetaName.camCinematicShots: return new PsoStructureInfo(MetaName.camCinematicShots, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)2213248546, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.Shot, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.Priority, PsoDataType.UInt, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)51557962, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.ProbabilityWeighting, PsoDataType.Float, 16, 0, 0) ); case MetaName.camCinematicSpectatorNewsChannelContextMetadata: return new PsoStructureInfo(MetaName.camCinematicSpectatorNewsChannelContextMetadata, 0, 0, 72, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), - new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.Shots, PsoDataType.Array, 16, 0, (MetaName)1), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), @@ -6097,7 +6097,7 @@ namespace CodeWalker.GameFiles return new PsoStructureInfo(MetaName.camCinematicScriptedMissionCreatorFailContextMetadata, 0, 0, 72, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), - new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.Shots, PsoDataType.Array, 16, 0, (MetaName)1), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), @@ -6114,7 +6114,7 @@ namespace CodeWalker.GameFiles return new PsoStructureInfo(MetaName.camCinematicScriptContextMetadata, 0, 0, 72, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), - new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.Shots, PsoDataType.Array, 16, 0, (MetaName)1), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), @@ -6131,7 +6131,7 @@ namespace CodeWalker.GameFiles return new PsoStructureInfo(MetaName.camCinematicScriptedRaceCheckPointContextMetadata, 0, 0, 80, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), - new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.Shots, PsoDataType.Array, 16, 0, (MetaName)1), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), @@ -6149,7 +6149,7 @@ namespace CodeWalker.GameFiles return new PsoStructureInfo(MetaName.camCinematicBustedContextMetadata, 0, 0, 72, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), - new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.Shots, PsoDataType.Array, 16, 0, (MetaName)1), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), @@ -6166,7 +6166,7 @@ namespace CodeWalker.GameFiles return new PsoStructureInfo(MetaName.camCinematicFallFromHeliContextMetadata, 0, 0, 72, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), - new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.Shots, PsoDataType.Array, 16, 0, (MetaName)1), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), @@ -6183,7 +6183,7 @@ namespace CodeWalker.GameFiles return new PsoStructureInfo(MetaName.camCinematicInVehicleOverriddenFirstPersonContextMetadata, 0, 0, 72, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), - new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.Shots, PsoDataType.Array, 16, 0, (MetaName)1), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), @@ -6200,7 +6200,7 @@ namespace CodeWalker.GameFiles return new PsoStructureInfo(MetaName.camCinematicInVehicleWantedContextMetadata, 0, 0, 72, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), - new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.Shots, PsoDataType.Array, 16, 0, (MetaName)1), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), @@ -6215,14 +6215,14 @@ namespace CodeWalker.GameFiles ); case MetaName.camPreferredShotSelectionType: return new PsoStructureInfo(MetaName.camPreferredShotSelectionType, 0, 0, 16, - new PsoStructureEntryInfo((MetaName)2213248546, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1445865118, PsoDataType.Enum, 12, 0, (MetaName)3889593720) + new PsoStructureEntryInfo(MetaName.Shot, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.InputType, PsoDataType.Enum, 12, 0, (MetaName)3889593720) ); case MetaName.camCinematicInVehicleContextMetadata: return new PsoStructureInfo(MetaName.camCinematicInVehicleContextMetadata, 0, 0, 72, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), - new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.Shots, PsoDataType.Array, 16, 0, (MetaName)1), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), @@ -6239,7 +6239,7 @@ namespace CodeWalker.GameFiles return new PsoStructureInfo(MetaName.camCinematicInTrainAtStationContextMetadata, 0, 0, 80, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), - new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.Shots, PsoDataType.Array, 16, 0, (MetaName)1), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), @@ -6258,7 +6258,7 @@ namespace CodeWalker.GameFiles return new PsoStructureInfo(MetaName.camCinematicInTrainContextMetadata, 0, 0, 72, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), - new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.Shots, PsoDataType.Array, 16, 0, (MetaName)1), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), @@ -6275,7 +6275,7 @@ namespace CodeWalker.GameFiles return new PsoStructureInfo(MetaName.camCinematicOnFootSpectatingContextMetadata, 0, 0, 72, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), - new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.Shots, PsoDataType.Array, 16, 0, (MetaName)1), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), @@ -6292,7 +6292,7 @@ namespace CodeWalker.GameFiles return new PsoStructureInfo(MetaName.camCinematicParachuteContextMetadata, 0, 0, 72, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), - new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.Shots, PsoDataType.Array, 16, 0, (MetaName)1), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), @@ -6309,7 +6309,7 @@ namespace CodeWalker.GameFiles return new PsoStructureInfo(MetaName.camCinematicStuntJumpContextMetadata, 0, 0, 72, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), - new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.Shots, PsoDataType.Array, 16, 0, (MetaName)1), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), @@ -6326,7 +6326,7 @@ namespace CodeWalker.GameFiles return new PsoStructureInfo(MetaName.camCinematicOnFootAssistedAimingContextMetadata, 0, 0, 72, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), - new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.Shots, PsoDataType.Array, 16, 0, (MetaName)1), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), @@ -6343,7 +6343,7 @@ namespace CodeWalker.GameFiles return new PsoStructureInfo(MetaName.camCinematicOnFootMeleeContextMetadata, 0, 0, 72, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), - new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.Shots, PsoDataType.Array, 16, 0, (MetaName)1), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), @@ -6360,7 +6360,7 @@ namespace CodeWalker.GameFiles return new PsoStructureInfo(MetaName.camCinematicInVehicleFirstPersonContextMetadata, 0, 0, 72, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), - new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.Shots, PsoDataType.Array, 16, 0, (MetaName)1), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), @@ -6377,7 +6377,7 @@ namespace CodeWalker.GameFiles return new PsoStructureInfo(MetaName.camCinematicOnFootIdleContextMetadata, 0, 0, 80, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camCinematicShots), - new PsoStructureEntryInfo((MetaName)4029364641, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.Shots, PsoDataType.Array, 16, 0, (MetaName)1), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camPreferredShotSelectionType), new PsoStructureEntryInfo((MetaName)2569180342, PsoDataType.Array, 32, 0, (MetaName)3), new PsoStructureEntryInfo((MetaName)2437129562, PsoDataType.Bool, 48, 0, 0), @@ -6395,13 +6395,13 @@ namespace CodeWalker.GameFiles case MetaName.camSyncedSceneDirectorMetadata: return new PsoStructureInfo(MetaName.camSyncedSceneDirectorMetadata, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 16, 0, 0), new PsoStructureEntryInfo((MetaName)2406434970, PsoDataType.String, 24, 7, 0) ); case MetaName.camScriptDirectorMetadata: return new PsoStructureInfo(MetaName.camScriptDirectorMetadata, 0, 0, 40, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 16, 0, 0), new PsoStructureEntryInfo((MetaName)3308601968, PsoDataType.String, 24, 7, 0), new PsoStructureEntryInfo((MetaName)1044888659, PsoDataType.String, 28, 7, 0), new PsoStructureEntryInfo((MetaName)609660376, PsoDataType.UInt, 32, 0, 0) @@ -6409,19 +6409,19 @@ namespace CodeWalker.GameFiles case MetaName.camSwitchDirectorMetadata: return new PsoStructureInfo(MetaName.camSwitchDirectorMetadata, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 16, 0, 0), new PsoStructureEntryInfo((MetaName)4284026199, PsoDataType.String, 24, 7, 0) ); case MetaName.camCutsceneDirectorMetadata: return new PsoStructureInfo(MetaName.camCutsceneDirectorMetadata, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 16, 0, 0), new PsoStructureEntryInfo((MetaName)1814055656, PsoDataType.String, 24, 7, 0) ); case MetaName.camReplayDirectorMetadata: return new PsoStructureInfo(MetaName.camReplayDirectorMetadata, 0, 0, 160, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 16, 0, 0), new PsoStructureEntryInfo((MetaName)2721634605, PsoDataType.String, 24, 7, 0), new PsoStructureEntryInfo((MetaName)2132680058, PsoDataType.String, 28, 7, 0), new PsoStructureEntryInfo((MetaName)491767013, PsoDataType.String, 32, 7, 0), @@ -6456,20 +6456,20 @@ namespace CodeWalker.GameFiles case MetaName.camDebugDirectorMetadata: return new PsoStructureInfo(MetaName.camDebugDirectorMetadata, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 16, 0, 0), new PsoStructureEntryInfo((MetaName)2750009688, PsoDataType.String, 24, 7, 0) ); case MetaName.camMarketingDirectorMetadata: return new PsoStructureInfo(MetaName.camMarketingDirectorMetadata, 0, 0, 40, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 16, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.camMarketingDirectorMetadataMode), - new PsoStructureEntryInfo((MetaName)945555571, PsoDataType.Array, 24, 0, (MetaName)2) + new PsoStructureEntryInfo(MetaName.Modes, PsoDataType.Array, 24, 0, (MetaName)2) ); case MetaName.camMarketingDirectorMetadataMode: return new PsoStructureInfo(MetaName.camMarketingDirectorMetadataMode, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)1055059023, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2047169098, PsoDataType.String, 12, 0, (MetaName)1048576) + new PsoStructureEntryInfo(MetaName.CameraRef, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.TextLabel, PsoDataType.String, 12, 0, (MetaName)1048576) ); case MetaName.CExplosionInfoManager: return new PsoStructureInfo(MetaName.CExplosionInfoManager, 0, 0, 24, @@ -6508,20 +6508,20 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.bNoOcclusion, PsoDataType.Bool, 110, 0, 0), new PsoStructureEntryInfo(MetaName.explodeAttachEntityWhenFinished, PsoDataType.Bool, 111, 0, 0), new PsoStructureEntryInfo(MetaName.bCanSetPedOnFire, PsoDataType.Bool, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)3710755331, PsoDataType.Bool, 113, 0, 0), + new PsoStructureEntryInfo(MetaName.bCanSetPlayerOnFire, PsoDataType.Bool, 113, 0, 0), new PsoStructureEntryInfo(MetaName.bSuppressCrime, PsoDataType.Bool, 114, 0, 0), new PsoStructureEntryInfo(MetaName.bUseDistanceDamageCalc, PsoDataType.Bool, 115, 0, 0), new PsoStructureEntryInfo(MetaName.bPreventWaterExplosionVFX, PsoDataType.Bool, 116, 0, 0), - new PsoStructureEntryInfo((MetaName)2400251666, PsoDataType.Bool, 117, 0, 0), - new PsoStructureEntryInfo((MetaName)2310120635, PsoDataType.Bool, 118, 0, 0), - new PsoStructureEntryInfo((MetaName)3312297335, PsoDataType.Bool, 119, 0, 0), - new PsoStructureEntryInfo((MetaName)3099411482, PsoDataType.Float, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)3010331635, PsoDataType.Float, 124, 0, 0), - new PsoStructureEntryInfo((MetaName)178952880, PsoDataType.Bool, 128, 0, 0), - new PsoStructureEntryInfo((MetaName)1236241772, PsoDataType.Bool, 129, 0, 0), - new PsoStructureEntryInfo((MetaName)1509365439, PsoDataType.Bool, 130, 0, 0), - new PsoStructureEntryInfo((MetaName)1334397542, PsoDataType.Bool, 131, 0, 0), - new PsoStructureEntryInfo((MetaName)3983992955, PsoDataType.Bool, 132, 0, 0) + new PsoStructureEntryInfo(MetaName.bIgnoreRatioCheckForFire, PsoDataType.Bool, 117, 0, 0), + new PsoStructureEntryInfo(MetaName.bAllowUnderwaterExplosion, PsoDataType.Bool, 118, 0, 0), + new PsoStructureEntryInfo(MetaName.bForceVehicleExplosion, PsoDataType.Bool, 119, 0, 0), + new PsoStructureEntryInfo(MetaName.midRadius, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.damageAtMid, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo(MetaName.bApplyVehicleEMP, PsoDataType.Bool, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.bApplyVehicleSlick, PsoDataType.Bool, 129, 0, 0), + new PsoStructureEntryInfo(MetaName.bApplyVehicleSlowdown, PsoDataType.Bool, 130, 0, 0), + new PsoStructureEntryInfo(MetaName.bApplyVehicleTyrePop, PsoDataType.Bool, 131, 0, 0), + new PsoStructureEntryInfo(MetaName.bForcePetrolTankDamage, PsoDataType.Bool, 132, 0, 0) ); case MetaName.CPedModelInfo__PersonalityDataList: return new PsoStructureInfo(MetaName.CPedModelInfo__PersonalityDataList, 0, 0, 88, @@ -6532,9 +6532,9 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)4185391031), new PsoStructureEntryInfo(MetaName.PedPersonalities, PsoDataType.Array, 40, 0, (MetaName)4), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)905918498), - new PsoStructureEntryInfo((MetaName)1481182292, PsoDataType.Array, 56, 0, (MetaName)6), + new PsoStructureEntryInfo(MetaName.BraveryTypes, PsoDataType.Array, 56, 0, (MetaName)6), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2072330808), - new PsoStructureEntryInfo((MetaName)1643851287, PsoDataType.Array, 72, 0, (MetaName)8) + new PsoStructureEntryInfo(MetaName.CriminalityTypes, PsoDataType.Array, 72, 0, (MetaName)8) ); case (MetaName)1111461724: return new PsoStructureInfo((MetaName)1111461724, 0, 0, 32, @@ -6554,8 +6554,8 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1727236615), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Array, 0, 0, (MetaName)1), new PsoStructureEntryInfo(MetaName.MovementModes, PsoDataType.Array, 16, 4, (MetaName)131074), - new PsoStructureEntryInfo((MetaName)271833144, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2064072700, PsoDataType.Float, 52, 0, 0) + new PsoStructureEntryInfo(MetaName.LastBattleEventHighEnergyStartTime, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.LastBattleEventHighEnergyEndTime, PsoDataType.Float, 52, 0, 0) ); case (MetaName)1727236615: return new PsoStructureInfo((MetaName)1727236615, 0, 0, 40, @@ -6581,71 +6581,71 @@ namespace CodeWalker.GameFiles ); case (MetaName)4185391031: return new PsoStructureInfo((MetaName)4185391031, 0, 0, 184, - new PsoStructureEntryInfo((MetaName)4206114216, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2744215759, PsoDataType.String, 12, 7, 0), - new PsoStructureEntryInfo((MetaName)2511674669, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3499834918, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)3808740257, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)1849624842, PsoDataType.String, 28, 7, 0), - new PsoStructureEntryInfo((MetaName)372913173, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo(MetaName.PersonalityName, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultWeaponLoadout, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo(MetaName.Bravery, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.AgitatedPersonality, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.Criminality, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.AgitationTriggers, PsoDataType.String, 28, 7, 0), + new PsoStructureEntryInfo(MetaName.HealthConfigHash, PsoDataType.String, 32, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), new PsoStructureEntryInfo(MetaName.WeaponAnimations, PsoDataType.Array, 40, 0, MetaName.POINTER), - new PsoStructureEntryInfo((MetaName)3268464789, PsoDataType.String, 56, 7, 0), - new PsoStructureEntryInfo((MetaName)1504162135, PsoDataType.String, 60, 7, 0), - new PsoStructureEntryInfo((MetaName)3039521267, PsoDataType.Structure, 64, 0, (MetaName)265080325), - new PsoStructureEntryInfo((MetaName)819954510, PsoDataType.Bool, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)2212592004, PsoDataType.Bool, 81, 0, 0), - new PsoStructureEntryInfo((MetaName)89900819, PsoDataType.Bool, 82, 0, 0), - new PsoStructureEntryInfo((MetaName)1945623796, PsoDataType.Bool, 83, 0, 0), - new PsoStructureEntryInfo((MetaName)622092394, PsoDataType.Bool, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)1025165367, PsoDataType.Bool, 85, 0, 0), - new PsoStructureEntryInfo((MetaName)1867113976, PsoDataType.Bool, 86, 0, 0), - new PsoStructureEntryInfo((MetaName)2821566375, PsoDataType.Bool, 87, 0, 0), - new PsoStructureEntryInfo((MetaName)2380425018, PsoDataType.Bool, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)3260171409, PsoDataType.Bool, 89, 0, 0), + new PsoStructureEntryInfo(MetaName.AmbientAudio, PsoDataType.String, 56, 7, 0), + new PsoStructureEntryInfo(MetaName.WitnessPersonality, PsoDataType.String, 60, 7, 0), + new PsoStructureEntryInfo(MetaName.Agility, PsoDataType.Structure, 64, 0, (MetaName)265080325), + new PsoStructureEntryInfo(MetaName.IsMale, PsoDataType.Bool, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.IsHuman, PsoDataType.Bool, 81, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldRewardMoneyOnDeath, PsoDataType.Bool, 82, 0, 0), + new PsoStructureEntryInfo(MetaName.IsGang, PsoDataType.Bool, 83, 0, 0), + new PsoStructureEntryInfo(MetaName.IsSecurity, PsoDataType.Bool, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.IsWeird, PsoDataType.Bool, 85, 0, 0), + new PsoStructureEntryInfo(MetaName.IsDangerousAnimal, PsoDataType.Bool, 86, 0, 0), + new PsoStructureEntryInfo(MetaName.CausesRumbleWhenCollidesWithPlayer, PsoDataType.Bool, 87, 0, 0), + new PsoStructureEntryInfo(MetaName.AllowSlowCruisingWithMusic, PsoDataType.Bool, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.AllowRoadCrossHurryOnLightChange, PsoDataType.Bool, 89, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)2920442291), - new PsoStructureEntryInfo((MetaName)101865872, PsoDataType.Flags, 92, 0, (MetaName)524310), - new PsoStructureEntryInfo((MetaName)2502152653, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)3806042807, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)1862920964, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)3330066831, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)2721388482, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)2530332272, PsoDataType.Float, 116, 0, 0), - new PsoStructureEntryInfo((MetaName)1873521687, PsoDataType.Float, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)3362977435, PsoDataType.Float, 124, 0, 0), - new PsoStructureEntryInfo((MetaName)167232035, PsoDataType.Float, 128, 0, 0), - new PsoStructureEntryInfo((MetaName)3370827836, PsoDataType.Float, 132, 0, 0), - new PsoStructureEntryInfo((MetaName)1960961110, PsoDataType.Float, 136, 0, 0), - new PsoStructureEntryInfo((MetaName)4238411479, PsoDataType.UInt, 140, 0, 0), - new PsoStructureEntryInfo((MetaName)2674738037, PsoDataType.UInt, 144, 0, 0), - new PsoStructureEntryInfo((MetaName)1569329370, PsoDataType.UByte, 148, 0, 0), - new PsoStructureEntryInfo((MetaName)866268907, PsoDataType.UByte, 149, 0, 0), - new PsoStructureEntryInfo((MetaName)1151027181, PsoDataType.UByte, 150, 0, 0), - new PsoStructureEntryInfo((MetaName)534710722, PsoDataType.UByte, 151, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleTypes, PsoDataType.Flags, 92, 0, (MetaName)524310), + new PsoStructureEntryInfo(MetaName.AttackStrengthMin, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.AttackStrengthMax, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.StaminaEfficiency, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.ArmourEfficiency, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.HealthRegenEfficiency, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.ExplosiveDamageMod, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.HandGunDamageMod, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.RifleDamageMod, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo(MetaName.SmgDamageMod, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.PopulationFleeMod, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo(MetaName.HotwireRate, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo(MetaName.MotivationMin, PsoDataType.UInt, 140, 0, 0), + new PsoStructureEntryInfo(MetaName.MotivationMax, PsoDataType.UInt, 144, 0, 0), + new PsoStructureEntryInfo(MetaName.DrivingAbilityMin, PsoDataType.UByte, 148, 0, 0), + new PsoStructureEntryInfo(MetaName.DrivingAbilityMax, PsoDataType.UByte, 149, 0, 0), + new PsoStructureEntryInfo(MetaName.DrivingAggressivenessMin, PsoDataType.UByte, 150, 0, 0), + new PsoStructureEntryInfo(MetaName.DrivingAggressivenessMax, PsoDataType.UByte, 151, 0, 0), new PsoStructureEntryInfo(MetaName.Affluence, PsoDataType.Enum, 152, 0, MetaName.Affluence), new PsoStructureEntryInfo(MetaName.TechSavvy, PsoDataType.Enum, 156, 0, MetaName.TechSavvy), new PsoStructureEntryInfo(MetaName.MovementModes, PsoDataType.String, 160, 7, 0), - new PsoStructureEntryInfo((MetaName)961290246, PsoDataType.String, 164, 7, 0), - new PsoStructureEntryInfo((MetaName)2940814298, PsoDataType.String, 168, 7, 0), - new PsoStructureEntryInfo((MetaName)3087874789, PsoDataType.String, 172, 7, 0), - new PsoStructureEntryInfo((MetaName)1227904788, PsoDataType.String, 176, 7, 0) + new PsoStructureEntryInfo(MetaName.WeaponAnimsFPSIdle, PsoDataType.String, 164, 7, 0), + new PsoStructureEntryInfo(MetaName.WeaponAnimsFPSRNG, PsoDataType.String, 168, 7, 0), + new PsoStructureEntryInfo(MetaName.WeaponAnimsFPSLT, PsoDataType.String, 172, 7, 0), + new PsoStructureEntryInfo(MetaName.WeaponAnimsFPSScope, PsoDataType.String, 176, 7, 0) ); case (MetaName)265080325: return new PsoStructureInfo((MetaName)265080325, 0, 0, 16, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)2675594832), new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.Flags, 8, 0, (MetaName)2097152), - new PsoStructureEntryInfo((MetaName)1366066164, PsoDataType.Float, 12, 0, 0) + new PsoStructureEntryInfo(MetaName.MovementCostModifier, PsoDataType.Float, 12, 0, 0) ); case (MetaName)905918498: return new PsoStructureInfo((MetaName)905918498, 0, 0, 256, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3079935216), new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.Flags, 12, 0, (MetaName)2097153), - new PsoStructureEntryInfo((MetaName)3234488441, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1368196689, PsoDataType.Structure, 24, 0, (MetaName)3637970520), - new PsoStructureEntryInfo((MetaName)2782470584, PsoDataType.Structure, 96, 0, (MetaName)3637970520), - new PsoStructureEntryInfo((MetaName)1842245065, PsoDataType.Structure, 168, 0, (MetaName)3637970520), - new PsoStructureEntryInfo((MetaName)1811637113, PsoDataType.Structure, 240, 0, (MetaName)651017172) + new PsoStructureEntryInfo(MetaName.TakedownProbability, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ThreatResponseUnarmed, PsoDataType.Structure, 24, 0, (MetaName)3637970520), + new PsoStructureEntryInfo(MetaName.ThreatResponseMelee, PsoDataType.Structure, 96, 0, (MetaName)3637970520), + new PsoStructureEntryInfo(MetaName.ThreatResponseArmed, PsoDataType.Structure, 168, 0, (MetaName)3637970520), + new PsoStructureEntryInfo(MetaName.FleeDuringCombat, PsoDataType.Structure, 240, 0, (MetaName)651017172) ); case (MetaName)3637970520: return new PsoStructureInfo((MetaName)3637970520, 0, 0, 72, @@ -6654,7 +6654,7 @@ namespace CodeWalker.GameFiles ); case (MetaName)3450423538: return new PsoStructureInfo((MetaName)3450423538, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)3025359898, PsoDataType.Structure, 8, 0, (MetaName)3954379444) + new PsoStructureEntryInfo(MetaName.Weights, PsoDataType.Structure, 8, 0, (MetaName)3954379444) ); case (MetaName)3954379444: return new PsoStructureInfo((MetaName)3954379444, 0, 0, 16, @@ -6663,19 +6663,19 @@ namespace CodeWalker.GameFiles ); case (MetaName)301719986: return new PsoStructureInfo((MetaName)301719986, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)3025359898, PsoDataType.Structure, 8, 0, (MetaName)272028034), - new PsoStructureEntryInfo((MetaName)1774223506, PsoDataType.Float, 32, 0, 0) + new PsoStructureEntryInfo(MetaName.Weights, PsoDataType.Structure, 8, 0, (MetaName)272028034), + new PsoStructureEntryInfo(MetaName.ProbabilityDrawWeaponWhenLosing, PsoDataType.Float, 32, 0, 0) ); case (MetaName)272028034: return new PsoStructureInfo((MetaName)272028034, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)1218243798, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2028274881, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)962329419, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.KeepWeapon, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MatchTargetWeapon, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.EquipBestWeapon, PsoDataType.Float, 16, 0, 0) ); case (MetaName)651017172: return new PsoStructureInfo((MetaName)651017172, 0, 0, 16, new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)52194177, PsoDataType.Float, 12, 0, 0) + new PsoStructureEntryInfo(MetaName.ChancesWhenBuddyKilledWithScaryWeapon, PsoDataType.Float, 12, 0, 0) ); case (MetaName)2072330808: return new PsoStructureInfo((MetaName)2072330808, 0, 0, 16, @@ -6686,16 +6686,16 @@ namespace CodeWalker.GameFiles case MetaName.sStatsMetadataTuning: return new PsoStructureInfo(MetaName.sStatsMetadataTuning, 0, 0, 72, new PsoStructureEntryInfo((MetaName)1063717096, PsoDataType.UInt, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1801522365, PsoDataType.UInt, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)1740411412, PsoDataType.UInt, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)803970846, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2099608654, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2222926220, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3662021366, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2301583602, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)3004548533, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)3235406138, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)3958481819, PsoDataType.Structure, 48, 0, (MetaName)665455491) + new PsoStructureEntryInfo(MetaName.AwardVehicleJumpTime, PsoDataType.UInt, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.AwardParachuteJumpTime, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.SPLargeAccidenThresold, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MPLargeAccidenThresold, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.FreefallThresold, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.AwardVehicleJumpDistanceA, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.AwardVehicleJumpDistanceB, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.AwardParachuteJumpDistanceA, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.AwardParachuteJumpDistanceB, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.nonFlyableAreas, PsoDataType.Structure, 48, 0, MetaName.NonFlyableAreaArray) ); case MetaName.CFiringPatternInfoManager: return new PsoStructureInfo(MetaName.CFiringPatternInfoManager, 0, 0, 24, @@ -6705,266 +6705,266 @@ namespace CodeWalker.GameFiles case MetaName.CFiringPatternInfo: return new PsoStructureInfo(MetaName.CFiringPatternInfo, 0, 0, 56, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)236118490, PsoDataType.SShort, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)3616069026, PsoDataType.SShort, 14, 0, 0), - new PsoStructureEntryInfo((MetaName)2577107356, PsoDataType.SShort, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)428905168, PsoDataType.SShort, 18, 0, 0), - new PsoStructureEntryInfo((MetaName)965484170, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2449042043, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)4134391333, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1007771611, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1662854346, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)913069912, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)1761265942, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)6520997, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.NumberOfBurstsMin, PsoDataType.SShort, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.NumberOfBurstsMax, PsoDataType.SShort, 14, 0, 0), + new PsoStructureEntryInfo(MetaName.NumberOfShotsPerBurstMin, PsoDataType.SShort, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.NumberOfShotsPerBurstMax, PsoDataType.SShort, 18, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenShotsMin, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenShotsMax, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenShotsAbsoluteMin, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenBurstsMin, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenBurstsMax, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenBurstsAbsoluteMin, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBeforeFiringMin, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBeforeFiringMax, PsoDataType.Float, 48, 0, 0), new PsoStructureEntryInfo((MetaName)2922044807, PsoDataType.Bool, 52, 0, 0) ); - case (MetaName)2828759280: - return new PsoStructureInfo((MetaName)2828759280, 0, 0, 16, + case MetaName.CTuningFile: + return new PsoStructureInfo(MetaName.CTuningFile, 0, 0, 16, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), new PsoStructureEntryInfo(MetaName.Tunables, PsoDataType.Array, 0, 0, 0) ); case MetaName.CCombatTaskManager__Tunables: return new PsoStructureInfo(MetaName.CCombatTaskManager__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)4202105817, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)269064650, PsoDataType.SInt, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.fTimeBetweenUpdates, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.iMaxPedsInCombatTask, PsoDataType.SInt, 20, 0, 0) ); case MetaName.CTaskAnimatedHitByExplosion__Tunables: return new PsoStructureInfo(MetaName.CTaskAnimatedHitByExplosion__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1901527010, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3861069366, PsoDataType.Bool, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.InitialRagdollDelay, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.AllowPitchAndRoll, PsoDataType.Bool, 20, 0, 0) ); case MetaName.CTaskStandGuard__Tunables: return new PsoStructureInfo(MetaName.CTaskStandGuard__Tunables, 0, 0, 48, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1521808097, PsoDataType.SInt, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3857242043, PsoDataType.SInt, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3250827903, PsoDataType.SInt, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3128562978, PsoDataType.SInt, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1521803727, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1708395848, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)4261831117, PsoDataType.Float, 40, 0, 0) + new PsoStructureEntryInfo(MetaName.MinStandWaitTimeMS, PsoDataType.SInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxStandWaitTimeMS, PsoDataType.SInt, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDefendPointWaitTimeMS, PsoDataType.SInt, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDefendPointWaitTimeMS, PsoDataType.SInt, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MinNavmeshPatrolRadiusFactor, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxNavmeshPatrolRadiusFactor, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.RouteRadiusFactor, PsoDataType.Float, 40, 0, 0) ); case MetaName.CTaskCombatAdditionalTask__Tunables: return new PsoStructureInfo(MetaName.CTaskCombatAdditionalTask__Tunables, 0, 0, 88, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2255380962, PsoDataType.SInt, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)7313110, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1721763990, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)1959218646, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)599255143, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2829098503, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)1719840119, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2930793396, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)547548618, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2899412417, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)1894206862, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)2587275512, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)3866357326, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)630125920, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)1041070680, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)679941746, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.iBulletEventResponseLengthMs, PsoDataType.SInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.fChanceOfDynamicRun, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxDynamicStrafeDistance, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinTimeInState, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.fMoveBlendRatioLerpTime, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinDistanceToClearCorner, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxDistanceFromCorner, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxLeavingCornerDistance, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.fBlockedLosAimTime, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.fStartAimingDistance, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.fStopAimingDistance, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinOtherPedDistanceDiff, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinTimeBetweenRunDirectlyChecks, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxTimeStrafing, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinTimeRunning, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.fForceStrafeDistance, PsoDataType.Float, 76, 0, 0), new PsoStructureEntryInfo((MetaName)2878670581, PsoDataType.Float, 80, 0, 0) ); case MetaName.CTaskCombatFlank__Tunables: return new PsoStructureInfo(MetaName.CTaskCombatFlank__Tunables, 0, 0, 48, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3016470091, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)983725397, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3585286231, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2889725249, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)304969557, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2500728149, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)3835533225, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)1893361518, PsoDataType.Float, 44, 0, 0) + new PsoStructureEntryInfo(MetaName.fInfluenceSphereInnerWeight, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.fInfluenceSphereOuterWeight, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.fInfluenceSphereRequestRadius, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.fInfluenceSphereCheckRouteRadius, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.fSmallInfluenceSphereRadius, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.fDistanceBetweenInfluenceSpheres, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.fAbsoluteMinDistanceToTarget, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.fCoverPointScoreMultiplier, PsoDataType.Float, 44, 0, 0) ); case MetaName.CTaskHelicopterStrafe__Tunables: return new PsoStructureInfo(MetaName.CTaskHelicopterStrafe__Tunables, 0, 0, 80, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2016619356, PsoDataType.SInt, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2018929951, PsoDataType.SInt, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3431388800, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.FlightHeightAboveTarget, PsoDataType.SInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHeightAboveTerrain, PsoDataType.SInt, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.TargetDirectionMinDot, PsoDataType.Float, 24, 0, 0), new PsoStructureEntryInfo(MetaName.TargetOffset, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3344078648, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2121954925, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)4228837765, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2249292417, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)2919714320, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)4211240273, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)3025087075, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)1512295050, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)2760165709, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)2688788428, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)4288775642, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)4157008494, PsoDataType.Float, 76, 0, 0) + new PsoStructureEntryInfo(MetaName.TargetMinSpeedToIgnore, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.TargetMaxSpeedToStrafe, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeToAvoidTargetAfterDamaged, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.AvoidOffsetXY, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.AvoidOffsetZ, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDotToBeConsideredInFront, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.BehindRotateAngleLookAhead, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.SearchRotateAngleLookAhead, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.CircleRotateAngleLookAhead, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.BehindTargetAngle, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.TargetOffsetFilter, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeBetweenStrafeDirectionChanges, PsoDataType.Float, 76, 0, 0) ); case MetaName.CTaskMeleeActionResult__Tunables: return new PsoStructureInfo(MetaName.CTaskMeleeActionResult__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)258368020, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)111777931, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.ActionModeTime, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ForceRunDelayTime, PsoDataType.Float, 20, 0, 0) ); case MetaName.CTaskMoveCombatMounted__Tunables: return new PsoStructureInfo(MetaName.CTaskMoveCombatMounted__Tunables, 0, 0, 64, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Float, 0, 0, 0), - new PsoStructureEntryInfo((MetaName)1409114490, PsoDataType.Array, 16, 0, (MetaName)1), - new PsoStructureEntryInfo((MetaName)3404462, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)4160428671, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)1038805177, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)4282065899, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)3146864305, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)3555988495, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)1160010076, PsoDataType.UInt, 56, 0, 0) + new PsoStructureEntryInfo(MetaName.CircleTestRadii, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.CircleTestsMoveDistToTestNewPos, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeSinceAnyCircleJoined, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeSinceSameCircleJoined, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.TransitionReactionTime, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.VelStartCircling, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.VelStopCircling, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeWaitingForCircleMs, PsoDataType.UInt, 56, 0, 0) ); case MetaName.CTaskDyingDead__Tunables: return new PsoStructureInfo(MetaName.CTaskDyingDead__Tunables, 0, 0, 56, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)99981148, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)399270735, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2802719757, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)71889384, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1632351140, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2511398250, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)1562486689, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)445822306, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)4154063324, PsoDataType.UInt, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2820766976, PsoDataType.UInt, 52, 0, 0) + new PsoStructureEntryInfo(MetaName.VehicleForwardInitialScale, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleForwardScale, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeToApplyPushFromVehicleForce, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.ForceToApply, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MinFallingSpeedForAnimatedDyingFall, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.SphereTestRadiusForDeadWaterSettle, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.RagdollAbortPoseDistanceThreshold, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.RagdollAbortPoseMaxVelocity, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeToThrowWeaponMS, PsoDataType.UInt, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeToThrowWeaponPlayerMS, PsoDataType.UInt, 52, 0, 0) ); case MetaName.CTaskDamageElectric__Tunables: return new PsoStructureInfo(MetaName.CTaskDamageElectric__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2846727445, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.FallsOutofVehicleVelocity, PsoDataType.Float, 16, 0, 0) ); case MetaName.CTaskInvestigate__Tunables: return new PsoStructureInfo(MetaName.CTaskInvestigate__Tunables, 0, 0, 40, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1751162602, PsoDataType.SInt, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3455250403, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3352862788, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2009665019, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)445998819, PsoDataType.Float, 32, 0, 0) + new PsoStructureEntryInfo(MetaName.iTimeToStandAtSearchPoint, PsoDataType.SInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinDistanceToUseVehicle, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinDistanceSavingToUseVehicle, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.fTimeToStandAtPerimeter, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.fNewPositionThreshold, PsoDataType.Float, 32, 0, 0) ); case MetaName.CTaskCombat__Tunables: return new PsoStructureInfo(MetaName.CTaskCombat__Tunables, 0, 0, 704, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1747672916, PsoDataType.Structure, 16, 0, (MetaName)4144542252), - new PsoStructureEntryInfo((MetaName)2857118825, PsoDataType.Structure, 48, 0, (MetaName)455065356), - new PsoStructureEntryInfo((MetaName)3589303034, PsoDataType.Structure, 144, 0, (MetaName)1818844971), - new PsoStructureEntryInfo((MetaName)612012739, PsoDataType.Structure, 168, 0, (MetaName)3736726978), - new PsoStructureEntryInfo((MetaName)3088747583, PsoDataType.Structure, 240, 0, (MetaName)1530415684), - new PsoStructureEntryInfo((MetaName)2187323127, PsoDataType.Float, 288, 0, 0), - new PsoStructureEntryInfo((MetaName)2157843494, PsoDataType.Float, 292, 0, 0), - new PsoStructureEntryInfo((MetaName)2971689701, PsoDataType.Float, 296, 0, 0), - new PsoStructureEntryInfo((MetaName)2501949685, PsoDataType.Float, 300, 0, 0), - new PsoStructureEntryInfo((MetaName)2145163833, PsoDataType.Float, 304, 0, 0), - new PsoStructureEntryInfo((MetaName)3652101978, PsoDataType.Float, 308, 0, 0), - new PsoStructureEntryInfo((MetaName)884701582, PsoDataType.Float, 312, 0, 0), - new PsoStructureEntryInfo((MetaName)593698055, PsoDataType.Float, 316, 0, 0), - new PsoStructureEntryInfo((MetaName)3273513642, PsoDataType.Float, 320, 0, 0), - new PsoStructureEntryInfo((MetaName)1947279181, PsoDataType.Float, 324, 0, 0), - new PsoStructureEntryInfo((MetaName)449264633, PsoDataType.Float, 328, 0, 0), - new PsoStructureEntryInfo((MetaName)3581780763, PsoDataType.Float, 332, 0, 0), - new PsoStructureEntryInfo((MetaName)1975275563, PsoDataType.Float, 336, 0, 0), - new PsoStructureEntryInfo((MetaName)1192276059, PsoDataType.Float, 340, 0, 0), - new PsoStructureEntryInfo((MetaName)4116440083, PsoDataType.Float, 344, 0, 0), - new PsoStructureEntryInfo((MetaName)919558869, PsoDataType.Float, 348, 0, 0), - new PsoStructureEntryInfo((MetaName)2786807653, PsoDataType.Float, 352, 0, 0), - new PsoStructureEntryInfo((MetaName)2224359067, PsoDataType.Float, 356, 0, 0), - new PsoStructureEntryInfo((MetaName)970868308, PsoDataType.Float, 360, 0, 0), - new PsoStructureEntryInfo((MetaName)2673669317, PsoDataType.Float, 364, 0, 0), - new PsoStructureEntryInfo((MetaName)4141996221, PsoDataType.Float, 368, 0, 0), - new PsoStructureEntryInfo((MetaName)379663563, PsoDataType.Float, 372, 0, 0), - new PsoStructureEntryInfo((MetaName)1187764077, PsoDataType.Float, 376, 0, 0), - new PsoStructureEntryInfo((MetaName)2226395755, PsoDataType.Float, 380, 0, 0), - new PsoStructureEntryInfo((MetaName)1257619633, PsoDataType.Float, 384, 0, 0), - new PsoStructureEntryInfo((MetaName)697272720, PsoDataType.Float, 388, 0, 0), - new PsoStructureEntryInfo((MetaName)610577934, PsoDataType.Float, 392, 0, 0), - new PsoStructureEntryInfo((MetaName)3340527808, PsoDataType.Float, 396, 0, 0), - new PsoStructureEntryInfo((MetaName)3243108638, PsoDataType.Float, 400, 0, 0), - new PsoStructureEntryInfo((MetaName)3128077167, PsoDataType.Float, 404, 0, 0), - new PsoStructureEntryInfo((MetaName)687676716, PsoDataType.Float, 408, 0, 0), - new PsoStructureEntryInfo((MetaName)3683572550, PsoDataType.Float, 412, 0, 0), - new PsoStructureEntryInfo((MetaName)2278473263, PsoDataType.Float, 416, 0, 0), - new PsoStructureEntryInfo((MetaName)2756383457, PsoDataType.Float, 420, 0, 0), - new PsoStructureEntryInfo((MetaName)3389707560, PsoDataType.Float, 424, 0, 0), - new PsoStructureEntryInfo((MetaName)1148925964, PsoDataType.Float, 428, 0, 0), - new PsoStructureEntryInfo((MetaName)853543838, PsoDataType.Float, 432, 0, 0), - new PsoStructureEntryInfo((MetaName)562041905, PsoDataType.Float, 436, 0, 0), - new PsoStructureEntryInfo((MetaName)1249935741, PsoDataType.Float, 440, 0, 0), - new PsoStructureEntryInfo((MetaName)3136547752, PsoDataType.Float, 444, 0, 0), - new PsoStructureEntryInfo((MetaName)1473938462, PsoDataType.Float, 448, 0, 0), - new PsoStructureEntryInfo((MetaName)2237966956, PsoDataType.Float, 452, 0, 0), - new PsoStructureEntryInfo((MetaName)4258831091, PsoDataType.Float, 456, 0, 0), - new PsoStructureEntryInfo((MetaName)1679184192, PsoDataType.Float, 460, 0, 0), - new PsoStructureEntryInfo((MetaName)4246707502, PsoDataType.Float, 464, 0, 0), - new PsoStructureEntryInfo((MetaName)1578284711, PsoDataType.Float, 468, 0, 0), - new PsoStructureEntryInfo((MetaName)1032956977, PsoDataType.Float, 472, 0, 0), - new PsoStructureEntryInfo((MetaName)1074424476, PsoDataType.Float, 476, 0, 0), - new PsoStructureEntryInfo((MetaName)3914650526, PsoDataType.Float, 480, 0, 0), - new PsoStructureEntryInfo((MetaName)1201850831, PsoDataType.Float, 484, 0, 0), - new PsoStructureEntryInfo((MetaName)2423717597, PsoDataType.Float, 488, 0, 0), - new PsoStructureEntryInfo((MetaName)1848729150, PsoDataType.Float, 492, 0, 0), - new PsoStructureEntryInfo((MetaName)3390705532, PsoDataType.Float, 496, 0, 0), - new PsoStructureEntryInfo((MetaName)3200641731, PsoDataType.Float, 500, 0, 0), - new PsoStructureEntryInfo((MetaName)4164431042, PsoDataType.Float, 504, 0, 0), - new PsoStructureEntryInfo((MetaName)1927524225, PsoDataType.Float, 508, 0, 0), - new PsoStructureEntryInfo((MetaName)4182891936, PsoDataType.Float, 512, 0, 0), - new PsoStructureEntryInfo((MetaName)3826933504, PsoDataType.Float, 516, 0, 0), - new PsoStructureEntryInfo((MetaName)1336699435, PsoDataType.Float, 520, 0, 0), - new PsoStructureEntryInfo((MetaName)1022323136, PsoDataType.Float, 524, 0, 0), - new PsoStructureEntryInfo((MetaName)189140842, PsoDataType.Float, 528, 0, 0), - new PsoStructureEntryInfo((MetaName)2154434340, PsoDataType.Float, 532, 0, 0), - new PsoStructureEntryInfo((MetaName)3875303030, PsoDataType.Float, 536, 0, 0), - new PsoStructureEntryInfo((MetaName)2374284734, PsoDataType.Float, 540, 0, 0), - new PsoStructureEntryInfo((MetaName)3887134676, PsoDataType.Float, 544, 0, 0), - new PsoStructureEntryInfo((MetaName)889613745, PsoDataType.UByte, 548, 0, 0), - new PsoStructureEntryInfo((MetaName)4116865999, PsoDataType.UInt, 552, 0, 0), - new PsoStructureEntryInfo((MetaName)3405855740, PsoDataType.UInt, 556, 0, 0), - new PsoStructureEntryInfo((MetaName)1511702574, PsoDataType.Float, 560, 0, 0), - new PsoStructureEntryInfo((MetaName)2540858782, PsoDataType.UByte, 564, 0, 0), - new PsoStructureEntryInfo((MetaName)1579430656, PsoDataType.Float, 568, 0, 0), - new PsoStructureEntryInfo((MetaName)254417857, PsoDataType.Float, 572, 0, 0), - new PsoStructureEntryInfo((MetaName)3078439303, PsoDataType.Float, 576, 0, 0), - new PsoStructureEntryInfo((MetaName)475196801, PsoDataType.Float, 580, 0, 0), - new PsoStructureEntryInfo((MetaName)1135781765, PsoDataType.Float, 584, 0, 0), - new PsoStructureEntryInfo((MetaName)1909915037, PsoDataType.Float, 588, 0, 0), - new PsoStructureEntryInfo((MetaName)655626928, PsoDataType.Float, 592, 0, 0), - new PsoStructureEntryInfo((MetaName)259290858, PsoDataType.Float, 596, 0, 0), - new PsoStructureEntryInfo((MetaName)1325474651, PsoDataType.Float, 600, 0, 0), - new PsoStructureEntryInfo((MetaName)615112755, PsoDataType.UInt, 604, 0, 0), - new PsoStructureEntryInfo((MetaName)4012970274, PsoDataType.Bool, 608, 0, 0), - new PsoStructureEntryInfo((MetaName)1435641288, PsoDataType.Float, 612, 0, 0), - new PsoStructureEntryInfo((MetaName)1120297675, PsoDataType.Float, 616, 0, 0), - new PsoStructureEntryInfo((MetaName)1561898282, PsoDataType.Float, 620, 0, 0), - new PsoStructureEntryInfo((MetaName)1133862058, PsoDataType.Float, 624, 0, 0), - new PsoStructureEntryInfo((MetaName)1232297261, PsoDataType.Float, 628, 0, 0), - new PsoStructureEntryInfo((MetaName)1845309081, PsoDataType.Float, 632, 0, 0), - new PsoStructureEntryInfo((MetaName)2117446694, PsoDataType.Float, 636, 0, 0), - new PsoStructureEntryInfo((MetaName)813193409, PsoDataType.Float, 640, 0, 0), + new PsoStructureEntryInfo(MetaName.BuddyShot, PsoDataType.Structure, 16, 0, (MetaName)4144542252), + new PsoStructureEntryInfo(MetaName.LackOfHostility, PsoDataType.Structure, 48, 0, (MetaName)455065356), + new PsoStructureEntryInfo(MetaName.EnemyAccuracyScaling, PsoDataType.Structure, 144, 0, (MetaName)1818844971), + new PsoStructureEntryInfo(MetaName.ChargeTuning, PsoDataType.Structure, 168, 0, (MetaName)3736726978), + new PsoStructureEntryInfo(MetaName.ThrowSmokeGrenadeTuning, PsoDataType.Structure, 240, 0, (MetaName)1530415684), + new PsoStructureEntryInfo(MetaName.MaxDistToCoverZ, PsoDataType.Float, 288, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistToCoverXY, PsoDataType.Float, 292, 0, 0), + new PsoStructureEntryInfo(MetaName.fAmbientAnimsMinDistToTargetSq, PsoDataType.Float, 296, 0, 0), + new PsoStructureEntryInfo(MetaName.fAmbientAnimsMaxDistToTargetSq, PsoDataType.Float, 300, 0, 0), + new PsoStructureEntryInfo(MetaName.fGoToDefAreaTimeOut, PsoDataType.Float, 304, 0, 0), + new PsoStructureEntryInfo(MetaName.fFireContinuouslyDistMin, PsoDataType.Float, 308, 0, 0), + new PsoStructureEntryInfo(MetaName.fFireContinuouslyDistMax, PsoDataType.Float, 312, 0, 0), + new PsoStructureEntryInfo(MetaName.fLostTargetTime, PsoDataType.Float, 316, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinTimeAfterAimPoseForStateChange, PsoDataType.Float, 320, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxAttemptMoveToCoverDelay, PsoDataType.Float, 324, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinAttemptMoveToCoverDelay, PsoDataType.Float, 328, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxAttemptMoveToCoverDelayGlobal, PsoDataType.Float, 332, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinAttemptMoveToCoverDelayGlobal, PsoDataType.Float, 336, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinDistanceForAltCover, PsoDataType.Float, 340, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinTimeStandingAtCover, PsoDataType.Float, 344, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinTimeBetweenFrustratedPeds, PsoDataType.Float, 348, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxTimeBetweenFrustratedPeds, PsoDataType.Float, 352, 0, 0), + new PsoStructureEntryInfo(MetaName.fRetreatTime, PsoDataType.Float, 356, 0, 0), + new PsoStructureEntryInfo(MetaName.fTargetTooCloseDistance, PsoDataType.Float, 360, 0, 0), + new PsoStructureEntryInfo(MetaName.fTimeBetweenJackingAttempts, PsoDataType.Float, 364, 0, 0), + new PsoStructureEntryInfo(MetaName.fTimeBetweenCoverSearchesMin, PsoDataType.Float, 368, 0, 0), + new PsoStructureEntryInfo(MetaName.fTimeBetweenCoverSearchesMax, PsoDataType.Float, 372, 0, 0), + new PsoStructureEntryInfo(MetaName.fTimeBetweenAltCoverSearches, PsoDataType.Float, 376, 0, 0), + new PsoStructureEntryInfo(MetaName.fShoutTargetPositionInterval, PsoDataType.Float, 380, 0, 0), + new PsoStructureEntryInfo(MetaName.fShoutBlockingLosInterval, PsoDataType.Float, 384, 0, 0), + new PsoStructureEntryInfo(MetaName.fTimeBetweenDragsMin, PsoDataType.Float, 388, 0, 0), + new PsoStructureEntryInfo(MetaName.fTimeBetweenSecondaryTargetUsesMin, PsoDataType.Float, 392, 0, 0), + new PsoStructureEntryInfo(MetaName.fTimeBetweenSecondaryTargetUsesMax, PsoDataType.Float, 396, 0, 0), + new PsoStructureEntryInfo(MetaName.fTimeToUseSecondaryTargetMin, PsoDataType.Float, 400, 0, 0), + new PsoStructureEntryInfo(MetaName.fTimeToUseSecondaryTargetMax, PsoDataType.Float, 404, 0, 0), + new PsoStructureEntryInfo(MetaName.fTimeBetweenCombatDirectorUpdates, PsoDataType.Float, 408, 0, 0), + new PsoStructureEntryInfo(MetaName.fTimeBetweenPassiveAnimsMin, PsoDataType.Float, 412, 0, 0), + new PsoStructureEntryInfo(MetaName.fTimeBetweenPassiveAnimsMax, PsoDataType.Float, 416, 0, 0), + new PsoStructureEntryInfo(MetaName.fTimeBetweenQuickGlancesMin, PsoDataType.Float, 420, 0, 0), + new PsoStructureEntryInfo(MetaName.fTimeBetweenQuickGlancesMax, PsoDataType.Float, 424, 0, 0), + new PsoStructureEntryInfo(MetaName.fTimeBetweenGestureAnimsMin, PsoDataType.Float, 428, 0, 0), + new PsoStructureEntryInfo(MetaName.fTimeBetweenGestureAnimsMax, PsoDataType.Float, 432, 0, 0), + new PsoStructureEntryInfo(MetaName.fTimeBetweenFailedGestureMin, PsoDataType.Float, 436, 0, 0), + new PsoStructureEntryInfo(MetaName.fTimeBetweenFailedGestureMax, PsoDataType.Float, 440, 0, 0), + new PsoStructureEntryInfo(MetaName.fTimeBetweenGesturesMinGlobal, PsoDataType.Float, 444, 0, 0), + new PsoStructureEntryInfo(MetaName.fTimeBetweenGesturesMaxGlobal, PsoDataType.Float, 448, 0, 0), + new PsoStructureEntryInfo(MetaName.fTimeSinceLastAimedAtForGesture, PsoDataType.Float, 452, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinTimeBeforeReactToExplosion, PsoDataType.Float, 456, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxTimeBeforeReactToExplosion, PsoDataType.Float, 460, 0, 0), + new PsoStructureEntryInfo(MetaName.TargetInfluenceSphereRadius, PsoDataType.Float, 464, 0, 0), + new PsoStructureEntryInfo(MetaName.TargetMinDistanceToRoute, PsoDataType.Float, 468, 0, 0), + new PsoStructureEntryInfo(MetaName.TargetMinDistanceToAwayFacingNavLink, PsoDataType.Float, 472, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxWaitForCoverExitTime, PsoDataType.Float, 476, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxDstanceToMoveAwayFromAlly, PsoDataType.Float, 480, 0, 0), + new PsoStructureEntryInfo(MetaName.fTimeBetweenAllyProximityChecks, PsoDataType.Float, 484, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinDistanceFromPrimaryTarget, PsoDataType.Float, 488, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxAngleBetweenTargets, PsoDataType.Float, 492, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceFromPedToHelpPed, PsoDataType.Float, 496, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDotToTargetToHelpPed, PsoDataType.Float, 500, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxHeadingDifferenceForQuickGlanceInSameDirection, PsoDataType.Float, 504, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeBetweenQuickGlancesInSameDirection, PsoDataType.Float, 508, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSpeedToStartJackingVehicle, PsoDataType.Float, 512, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSpeedToContinueJackingVehicle, PsoDataType.Float, 516, 0, 0), + new PsoStructureEntryInfo(MetaName.TargetJackRadius, PsoDataType.Float, 520, 0, 0), + new PsoStructureEntryInfo(MetaName.SafetyProportionInDefensiveAreaMin, PsoDataType.Float, 524, 0, 0), + new PsoStructureEntryInfo(MetaName.SafetyProportionInDefensiveAreaMax, PsoDataType.Float, 528, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxMoveToDefensiveAreaAngleVariation, PsoDataType.Float, 532, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceToEnterVehicleIfTargetEntersVehicle, PsoDataType.Float, 536, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceToMyVehicleToChase, PsoDataType.Float, 540, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceToVehicleForCommandeer, PsoDataType.Float, 544, 0, 0), + new PsoStructureEntryInfo(MetaName.NumEarlyVehicleEntryDriversAllowed, PsoDataType.UByte, 548, 0, 0), + new PsoStructureEntryInfo(MetaName.SafeTimeBeforeLeavingCover, PsoDataType.UInt, 552, 0, 0), + new PsoStructureEntryInfo(MetaName.WaitTimeForJackingSlowedVehicle, PsoDataType.UInt, 556, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxInjuredTargetTimerVariation, PsoDataType.Float, 560, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxNumPedsChasingOnFoot, PsoDataType.UByte, 564, 0, 0), + new PsoStructureEntryInfo(MetaName.FireTimeAfterStaticMovementAbort, PsoDataType.Float, 568, 0, 0), + new PsoStructureEntryInfo(MetaName.MinMovingToCoverTimeToStop, PsoDataType.Float, 572, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceToCoverToStop, PsoDataType.Float, 576, 0, 0), + new PsoStructureEntryInfo(MetaName.FireTimeAfterStoppingMoveToCover, PsoDataType.Float, 580, 0, 0), + new PsoStructureEntryInfo(MetaName.ApproachingTargetVehicleHoldFireDistance, PsoDataType.Float, 584, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDefensiveAreaRadiusForWillAdvance, PsoDataType.Float, 588, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceToHoldFireForArrest, PsoDataType.Float, 592, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeToDelayChaseOnFoot, PsoDataType.Float, 596, 0, 0), + new PsoStructureEntryInfo(MetaName.FireTimeAfterChaseOnFoot, PsoDataType.Float, 600, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeToChangeChaseOnFootSpeed, PsoDataType.UInt, 604, 0, 0), + new PsoStructureEntryInfo(MetaName.EnableForcedFireForTargetProximity, PsoDataType.Bool, 608, 0, 0), + new PsoStructureEntryInfo(MetaName.MinForceFiringStateTime, PsoDataType.Float, 612, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxForceFiringStateTime, PsoDataType.Float, 616, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBeforeInitialForcedFire, PsoDataType.Float, 620, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenForcedFireStates, PsoDataType.Float, 624, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeInStateForForcedFire, PsoDataType.Float, 628, 0, 0), + new PsoStructureEntryInfo(MetaName.MinForceFiringDistance, PsoDataType.Float, 632, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxForceFiringDistance, PsoDataType.Float, 636, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceForAimIntro, PsoDataType.Float, 640, 0, 0), new PsoStructureEntryInfo((MetaName)3129989164, PsoDataType.Float, 644, 0, 0), new PsoStructureEntryInfo((MetaName)4269476531, PsoDataType.Float, 648, 0, 0), - new PsoStructureEntryInfo((MetaName)1095839119, PsoDataType.Float, 652, 0, 0), - new PsoStructureEntryInfo((MetaName)1777999076, PsoDataType.UInt, 656, 0, 0), - new PsoStructureEntryInfo((MetaName)3218253966, PsoDataType.UInt, 660, 0, 0), - new PsoStructureEntryInfo((MetaName)2144745273, PsoDataType.Bool, 664, 0, 0), - new PsoStructureEntryInfo((MetaName)2874514021, PsoDataType.Float, 668, 0, 0), - new PsoStructureEntryInfo((MetaName)4106127787, PsoDataType.UInt, 672, 0, 0), - new PsoStructureEntryInfo((MetaName)1911699676, PsoDataType.UInt, 676, 0, 0), - new PsoStructureEntryInfo((MetaName)2545130112, PsoDataType.Float, 680, 0, 0), - new PsoStructureEntryInfo((MetaName)2157137274, PsoDataType.UInt, 684, 0, 0), - new PsoStructureEntryInfo((MetaName)871647294, PsoDataType.Float, 688, 0, 0), - new PsoStructureEntryInfo((MetaName)115479140, PsoDataType.Float, 692, 0, 0), + new PsoStructureEntryInfo(MetaName.AmbientAnimLengthBuffer, PsoDataType.Float, 652, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenPlayerArrestAttempts, PsoDataType.UInt, 656, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenArmedMeleeAttemptsInMs, PsoDataType.UInt, 660, 0, 0), + new PsoStructureEntryInfo(MetaName.AllowMovingArmedMeleeAttack, PsoDataType.Bool, 664, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeToHoldFireAfterJack, PsoDataType.Float, 668, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeBetweenMeleeJackAttempts, PsoDataType.UInt, 672, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeBetweenMeleeJackAttemptsOnNetworkClone, PsoDataType.UInt, 676, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeToHoldFireAtTaskInitialization, PsoDataType.Float, 680, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeToRejectRespawnedTarget, PsoDataType.UInt, 684, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceForLawToFleeFromCombat, PsoDataType.Float, 688, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForLawToReturnToCombatFromFlee, PsoDataType.Float, 692, 0, 0), new PsoStructureEntryInfo((MetaName)2186966715, PsoDataType.Float, 696, 0, 0) ); case (MetaName)4144542252: return new PsoStructureInfo((MetaName)4144542252, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)3183040402, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)3193578838, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3302572334, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeBeforeReact, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeBeforeReact, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeSinceShot, PsoDataType.Float, 20, 0, 0), new PsoStructureEntryInfo(MetaName.MaxDistance, PsoDataType.Float, 24, 0, 0) ); case (MetaName)455065356: @@ -6974,63 +6974,63 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.WantedLevel3, PsoDataType.Structure, 40, 0, (MetaName)2841666617), new PsoStructureEntryInfo(MetaName.WantedLevel4, PsoDataType.Structure, 56, 0, (MetaName)2841666617), new PsoStructureEntryInfo(MetaName.WantedLevel5, PsoDataType.Structure, 72, 0, (MetaName)2841666617), - new PsoStructureEntryInfo((MetaName)2486108674, PsoDataType.Float, 88, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxSpeedForVehicle, PsoDataType.Float, 88, 0, 0) ); case (MetaName)2841666617: return new PsoStructureInfo((MetaName)2841666617, 0, 0, 16, new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1740762106, PsoDataType.Float, 12, 0, 0) + new PsoStructureEntryInfo(MetaName.MinTimeSinceLastHostileAction, PsoDataType.Float, 12, 0, 0) ); case (MetaName)1818844971: return new PsoStructureInfo((MetaName)1818844971, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)2189340328, PsoDataType.SInt, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)887750836, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)552287921, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.iMinNumEnemiesForScaling, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.fAccuracyReductionPerEnemy, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.fAccuracyReductionFloor, PsoDataType.Float, 16, 0, 0) ); case (MetaName)3736726978: return new PsoStructureInfo((MetaName)3736726978, 0, 0, 72, - new PsoStructureEntryInfo((MetaName)3037590705, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1678873512, PsoDataType.UByte, 9, 0, 0), - new PsoStructureEntryInfo((MetaName)698042866, PsoDataType.UInt, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)2705750728, PsoDataType.UInt, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)921957248, PsoDataType.UInt, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1748071312, PsoDataType.UInt, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)197521501, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2783817407, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)624502137, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)3283971281, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)3248381180, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)1408109790, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)1373272095, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)3325627586, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)2120328830, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)2002565392, PsoDataType.Float, 64, 0, 0) + new PsoStructureEntryInfo(MetaName.bChargeTargetEnabled, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.uMaxNumActiveChargers, PsoDataType.UByte, 9, 0, 0), + new PsoStructureEntryInfo(MetaName.uConsiderRecentChargeAsActiveTimeoutMS, PsoDataType.UInt, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.uMinTimeBetweenChargesAtSameTargetMS, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.uMinTimeForSamePedToChargeAgainMS, PsoDataType.UInt, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.uCheckForChargeTargetPeriodMS, PsoDataType.UInt, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinTimeInCombatSeconds, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinDistanceToTarget, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxDistanceToTarget, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinDistToNonTargetEnemy, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinDistBetweenTargetAndOtherEnemies, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.fDistToHidingTarget_Outer, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.fDistToHidingTarget_Inner, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.fChargeGoalCompletionRadius, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.fCancelTargetOutOfCoverMovedDist, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.fCancelTargetInCoverMovedDist, PsoDataType.Float, 64, 0, 0) ); case (MetaName)1530415684: return new PsoStructureInfo((MetaName)1530415684, 0, 0, 48, - new PsoStructureEntryInfo((MetaName)2007829514, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2870486361, PsoDataType.UByte, 9, 0, 0), - new PsoStructureEntryInfo((MetaName)865965443, PsoDataType.UInt, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)4240191943, PsoDataType.UInt, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2208519322, PsoDataType.UInt, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1637328324, PsoDataType.UInt, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2783817407, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)624502137, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1053509475, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)2196178671, PsoDataType.Float, 40, 0, 0) + new PsoStructureEntryInfo(MetaName.bThrowSmokeGrenadeEnabled, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.uMaxNumActiveThrowers, PsoDataType.UByte, 9, 0, 0), + new PsoStructureEntryInfo(MetaName.uConsiderRecentThrowAsActiveTimeoutMS, PsoDataType.UInt, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.uMinTimeBetweenThrowsAtSameTargetMS, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.uMinTimeForSamePedToThrowAgainMS, PsoDataType.UInt, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.uCheckForSmokeThrowPeriodMS, PsoDataType.UInt, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinDistanceToTarget, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxDistanceToTarget, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.fDotMinThrowerToTarget, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinLoiteringTimeSeconds, PsoDataType.Float, 40, 0, 0) ); case MetaName.CTaskReactAimWeapon__Tunables: return new PsoStructureInfo(MetaName.CTaskReactAimWeapon__Tunables, 0, 0, 680, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2673189131, PsoDataType.Structure, 16, 0, (MetaName)3326118529), - new PsoStructureEntryInfo((MetaName)931067397, PsoDataType.Structure, 344, 0, (MetaName)3326118529), + new PsoStructureEntryInfo(MetaName.Professional, PsoDataType.Structure, 16, 0, (MetaName)3326118529), + new PsoStructureEntryInfo(MetaName.NotProfessional, PsoDataType.Structure, 344, 0, (MetaName)3326118529), new PsoStructureEntryInfo(MetaName.Rate, PsoDataType.Float, 672, 0, 0), - new PsoStructureEntryInfo((MetaName)2016189169, PsoDataType.Float, 676, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxRateVariance, PsoDataType.Float, 676, 0, 0) ); case (MetaName)3326118529: return new PsoStructureInfo((MetaName)3326118529, 0, 0, 328, - new PsoStructureEntryInfo((MetaName)764802101, PsoDataType.Structure, 8, 0, (MetaName)2563725968), - new PsoStructureEntryInfo((MetaName)730897041, PsoDataType.Structure, 88, 0, (MetaName)2563725968), + new PsoStructureEntryInfo(MetaName.Flinch, PsoDataType.Structure, 8, 0, (MetaName)2563725968), + new PsoStructureEntryInfo(MetaName.Surprised, PsoDataType.Structure, 88, 0, (MetaName)2563725968), new PsoStructureEntryInfo(MetaName.Sniper, PsoDataType.Structure, 168, 0, (MetaName)2563725968), new PsoStructureEntryInfo(MetaName.None, PsoDataType.Structure, 248, 0, (MetaName)2563725968) ); @@ -7038,63 +7038,63 @@ namespace CodeWalker.GameFiles return new PsoStructureInfo((MetaName)2563725968, 0, 0, 80, new PsoStructureEntryInfo(MetaName.Pistol, PsoDataType.Structure, 8, 0, (MetaName)3972028972), new PsoStructureEntryInfo(MetaName.Rifle, PsoDataType.Structure, 32, 0, (MetaName)3972028972), - new PsoStructureEntryInfo((MetaName)1685333671, PsoDataType.Structure, 56, 0, (MetaName)3972028972) + new PsoStructureEntryInfo(MetaName.MicroSMG, PsoDataType.Structure, 56, 0, (MetaName)3972028972) ); case (MetaName)3972028972: return new PsoStructureInfo((MetaName)3972028972, 0, 0, 24, new PsoStructureEntryInfo(MetaName.ClipSetId, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.Rate, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)3697908634, PsoDataType.Bool, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3631567393, PsoDataType.Bool, 17, 0, 0), - new PsoStructureEntryInfo((MetaName)1944180374, PsoDataType.Bool, 18, 0, 0) + new PsoStructureEntryInfo(MetaName.HasSixDirections, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.HasCreateWeaponTag, PsoDataType.Bool, 17, 0, 0), + new PsoStructureEntryInfo(MetaName.HasInterruptTag, PsoDataType.Bool, 18, 0, 0) ); case MetaName.CTaskSearch__Tunables: return new PsoStructureInfo(MetaName.CTaskSearch__Tunables, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3623978511, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeToStare, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo(MetaName.MoveBlendRatio, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2955443375, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2895901568, PsoDataType.Float, 28, 0, 0) + new PsoStructureEntryInfo(MetaName.TargetReached, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.CruiseSpeed, PsoDataType.Float, 28, 0, 0) ); case MetaName.CTaskSearchForUnknownThreat__Tunables: return new PsoStructureInfo(MetaName.CTaskSearchForUnknownThreat__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3618288355, PsoDataType.SInt, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3217586928, PsoDataType.SInt, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.iMinTimeBeforeSearchingForNewHidingPlace, PsoDataType.SInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.iMaxTimeBeforeSearchingForNewHidingPlace, PsoDataType.SInt, 20, 0, 0) ); case MetaName.CTaskSharkCircle__Tunables: return new PsoStructureInfo(MetaName.CTaskSharkCircle__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)898987704, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3469377736, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.AdvanceDistanceSquared, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MoveRateOverride, PsoDataType.Float, 20, 0, 0) ); case MetaName.CTaskSharkAttack__Tunables: return new PsoStructureInfo(MetaName.CTaskSharkAttack__Tunables, 0, 0, 112, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2147768117, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2629938407, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2503381867, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)4190486872, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)432972202, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)3257642822, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)3815425058, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)4203587509, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)3492375078, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)639055889, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)3392297418, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)2768935848, PsoDataType.SInt, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)284429428, PsoDataType.SInt, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)614448068, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)2740115372, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)3783579394, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)1585455214, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)2981439007, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)2187967175, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)1895961621, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)647976226, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)2205933583, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)309425308, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)3147934542, PsoDataType.Float, 108, 0, 0) + new PsoStructureEntryInfo(MetaName.SurfaceProjectionDistance, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.SurfaceZOffset, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDepthBelowSurface, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.CirclingAngularSpeed, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeToCircle, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MinCircleRadius, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxCircleRadius, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.CirclingMBR, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.DiveProjectionDistance, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.DiveDepth, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.DiveMBR, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.MinNumberFakeApproaches, PsoDataType.SInt, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxNumberFakeApproaches, PsoDataType.SInt, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.FakeLungeOffset, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.LungeForwardOffset, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.LungeZOffset, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.LungeChangeDistance, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.LungeTargetRadius, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.FollowTimeout, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.FollowYOffset, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.FollowZOffset, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.LandProbeLength, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.MovingVehicleVelocityThreshold, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.SharkFleeDist, PsoDataType.Float, 108, 0, 0) ); case MetaName.CTaskCover__Tunables: return new PsoStructureInfo(MetaName.CTaskCover__Tunables, 0, 0, 192, @@ -7107,118 +7107,118 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)1235126752, PsoDataType.Float, 36, 0, 0), new PsoStructureEntryInfo((MetaName)1335048013, PsoDataType.Float, 40, 0, 0), new PsoStructureEntryInfo((MetaName)2787523036, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)1292700163, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)1431242126, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)3402563167, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)1241525786, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)647728646, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)2472038331, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)1511298321, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)235129999, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)2896892589, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)2175660835, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)4030958526, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.PriorityCoverWeighting, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.AngleToCameraWeighting, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.AngleToDynamicCoverWeighting, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.DistanceWeighting, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.AngleToCoverWeighting, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.AngleOfCoverWeighting, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.EdgeWeighting, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.NetworkBlendOutDurationRun, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.NetworkBlendOutDurationRunStart, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.NetworkBlendOutDuration, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPlayerToCoverDist, PsoDataType.Float, 88, 0, 0), new PsoStructureEntryInfo((MetaName)1534623417, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)2761743161, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)2676905487, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)2744819135, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)449945587, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)997332238, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)2215019044, PsoDataType.Float, 116, 0, 0), - new PsoStructureEntryInfo((MetaName)1216157443, PsoDataType.Float, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)2892923069, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAngularDiffBetweenDynamicAndStaticCover, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.RangeToUseDynamicCoverPointMin, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.RangeToUseDynamicCoverPointMax, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistToCoverAnyDir, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistToPriorityCoverToForce, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistToCoverSpecificDir, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.BehindPedToCoverCosTolerance, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.SearchToCoverCosTolerance, PsoDataType.Float, 124, 0, 0), new PsoStructureEntryInfo(MetaName.CapsuleZOffset, PsoDataType.Float, 128, 0, 0), - new PsoStructureEntryInfo((MetaName)4076542446, PsoDataType.Float, 132, 0, 0), - new PsoStructureEntryInfo((MetaName)2168923712, PsoDataType.Float, 136, 0, 0), - new PsoStructureEntryInfo((MetaName)4196658405, PsoDataType.Float, 140, 0, 0), - new PsoStructureEntryInfo((MetaName)3920545059, PsoDataType.Float, 144, 0, 0), - new PsoStructureEntryInfo((MetaName)324489357, PsoDataType.Float, 148, 0, 0), - new PsoStructureEntryInfo((MetaName)2569732609, PsoDataType.Bool, 152, 0, 0), - new PsoStructureEntryInfo((MetaName)3141671110, PsoDataType.String, 156, 7, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenTestSpheresIntersectingRoute, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistToCoverWhenPlayerIsClose, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo(MetaName.MinCoverToPlayerCoverDist, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo(MetaName.MinMoveToCoverDistForCoverMeAudio, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSecondsAsTopLevelTask, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo(MetaName.ForceStreamingFailure, PsoDataType.Bool, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.StreamedUnarmedCoverMovementClipSetId, PsoDataType.String, 156, 7, 0), new PsoStructureEntryInfo((MetaName)1804897490, PsoDataType.String, 160, 7, 0), - new PsoStructureEntryInfo((MetaName)3568457068, PsoDataType.String, 164, 7, 0), - new PsoStructureEntryInfo((MetaName)1351184833, PsoDataType.String, 168, 7, 0), - new PsoStructureEntryInfo((MetaName)1837001601, PsoDataType.String, 172, 7, 0), - new PsoStructureEntryInfo((MetaName)1024291853, PsoDataType.String, 176, 7, 0), + new PsoStructureEntryInfo(MetaName.StreamedOneHandedCoverMovementClipSetId, PsoDataType.String, 164, 7, 0), + new PsoStructureEntryInfo(MetaName.AIOneHandedAimingClipSetId, PsoDataType.String, 168, 7, 0), + new PsoStructureEntryInfo(MetaName.AITwoHandedAimingClipSetId, PsoDataType.String, 172, 7, 0), + new PsoStructureEntryInfo(MetaName.CoreWeaponClipSetId, PsoDataType.String, 176, 7, 0), new PsoStructureEntryInfo((MetaName)3902347552, PsoDataType.String, 180, 7, 0), new PsoStructureEntryInfo((MetaName)2620277506, PsoDataType.String, 184, 7, 0) ); case MetaName.CTaskEnterCover__Tunables: return new PsoStructureInfo(MetaName.CTaskEnterCover__Tunables, 0, 0, 368, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)443908416, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2901436256, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)14209833, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)1607017826, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1011440787, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1748900014, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)1391743069, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)1307601741, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)4070109213, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)3523536193, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)1608065887, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)1162149057, PsoDataType.SInt, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)3426925695, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)647951209, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)1436746072, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)2504179355, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)8008463, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)3441446008, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)3115377094, PsoDataType.Bool, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)2493304798, PsoDataType.Bool, 89, 0, 0), - new PsoStructureEntryInfo((MetaName)243919456, PsoDataType.Bool, 90, 0, 0), - new PsoStructureEntryInfo((MetaName)914424597, PsoDataType.Bool, 91, 0, 0), - new PsoStructureEntryInfo((MetaName)1466859809, PsoDataType.Bool, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)3088085048, PsoDataType.Bool, 93, 0, 0), - new PsoStructureEntryInfo((MetaName)570011198, PsoDataType.Bool, 94, 0, 0), - new PsoStructureEntryInfo((MetaName)634174859, PsoDataType.Bool, 95, 0, 0), - new PsoStructureEntryInfo((MetaName)311045516, PsoDataType.Bool, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)3946058806, PsoDataType.Bool, 97, 0, 0), - new PsoStructureEntryInfo((MetaName)525431756, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)3131955124, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverEntryRatePlayer, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverEntryRateAI, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverEntryShortDistanceAI, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverEntryShortDistancePlayer, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverEntryStandDistance, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverEntryStandStrafeDistance, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverEntryMinDistance, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverEntryMaxDistance, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverEntryMinDistanceAI, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverEntryMaxDistanceAI, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverEntryMaxDirectDistance, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverEntryMinTimeNavigatingAI, PsoDataType.SInt, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverEntryMinAngleToScale, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverEntryHeadingReachedTol, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverEntryPositionReachedTol, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.FromCoverExitDistance, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.NetworkBlendInDuration, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.DistFromCoverToAllowReloadCache, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.WaitForFootPlant, PsoDataType.Bool, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.EnableFootTagSyncing, PsoDataType.Bool, 89, 0, 0), + new PsoStructureEntryInfo(MetaName.ForceToTarget, PsoDataType.Bool, 90, 0, 0), + new PsoStructureEntryInfo(MetaName.EnableInitialHeadingBlend, PsoDataType.Bool, 91, 0, 0), + new PsoStructureEntryInfo(MetaName.EnableTranslationScaling, PsoDataType.Bool, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.EnableRotationScaling, PsoDataType.Bool, 93, 0, 0), + new PsoStructureEntryInfo(MetaName.PreventTranslationOvershoot, PsoDataType.Bool, 94, 0, 0), + new PsoStructureEntryInfo(MetaName.PreventRotationOvershoot, PsoDataType.Bool, 95, 0, 0), + new PsoStructureEntryInfo(MetaName.DoInitialHeadingBlend, PsoDataType.Bool, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.DoFinalHeadingFixUp, PsoDataType.Bool, 97, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistToPlayEntryAnim, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistToScale, PsoDataType.Float, 104, 0, 0), new PsoStructureEntryInfo(MetaName.MaxSpeed, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)2343716985, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)1999362333, PsoDataType.Float, 116, 0, 0), - new PsoStructureEntryInfo((MetaName)2917519651, PsoDataType.Float, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)614907799, PsoDataType.Float, 124, 0, 0), - new PsoStructureEntryInfo((MetaName)3906575696, PsoDataType.Float, 128, 0, 0), - new PsoStructureEntryInfo((MetaName)2032147920, PsoDataType.Float, 132, 0, 0), - new PsoStructureEntryInfo((MetaName)1511471000, PsoDataType.Float, 136, 0, 0), - new PsoStructureEntryInfo((MetaName)3073391680, PsoDataType.Float, 140, 0, 0), - new PsoStructureEntryInfo((MetaName)2527222356, PsoDataType.Float, 144, 0, 0), - new PsoStructureEntryInfo((MetaName)661599637, PsoDataType.Bool, 148, 0, 0), - new PsoStructureEntryInfo((MetaName)3380579615, PsoDataType.Bool, 149, 0, 0), - new PsoStructureEntryInfo((MetaName)2589136465, PsoDataType.Bool, 150, 0, 0), - new PsoStructureEntryInfo((MetaName)2504995190, PsoDataType.Bool, 151, 0, 0), - new PsoStructureEntryInfo((MetaName)3490225320, PsoDataType.Float, 152, 0, 0), - new PsoStructureEntryInfo((MetaName)3968028188, PsoDataType.Float, 156, 0, 0), - new PsoStructureEntryInfo((MetaName)762985941, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)2645460108, PsoDataType.Float, 164, 0, 0), - new PsoStructureEntryInfo((MetaName)976189127, PsoDataType.Float, 168, 0, 0), - new PsoStructureEntryInfo((MetaName)1168875174, PsoDataType.Float, 172, 0, 0), - new PsoStructureEntryInfo((MetaName)2787336412, PsoDataType.Float, 176, 0, 0), - new PsoStructureEntryInfo((MetaName)2445300354, PsoDataType.Float, 180, 0, 0), - new PsoStructureEntryInfo((MetaName)3171601208, PsoDataType.Float, 184, 0, 0), - new PsoStructureEntryInfo((MetaName)2408710412, PsoDataType.Float, 188, 0, 0), - new PsoStructureEntryInfo((MetaName)3889498778, PsoDataType.Float, 192, 0, 0), - new PsoStructureEntryInfo((MetaName)1874728809, PsoDataType.Float, 196, 0, 0), - new PsoStructureEntryInfo((MetaName)3084434327, PsoDataType.Float, 200, 0, 0), - new PsoStructureEntryInfo((MetaName)3320233516, PsoDataType.Float, 204, 0, 0), - new PsoStructureEntryInfo((MetaName)2304671979, PsoDataType.Float, 208, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRotSpeed, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTransScale, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTransScale, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.MinRotScale, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRotScale, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.DeltaTolerance, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo(MetaName.MinRotDelta, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAngleToSetDirectly, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo(MetaName.AiEntryHalfAngleTolerance, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo(MetaName.EnableNewAICoverEntry, PsoDataType.Bool, 148, 0, 0), + new PsoStructureEntryInfo(MetaName.EnableUseSwatClipSet, PsoDataType.Bool, 149, 0, 0), + new PsoStructureEntryInfo(MetaName.UseShortDistAngleRotation, PsoDataType.Bool, 150, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableAiCoverEntryStreamCheck, PsoDataType.Bool, 151, 0, 0), + new PsoStructureEntryInfo(MetaName.DistToUseShortestRotation, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.InCoverTolerance, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo(MetaName.DotThresholdForCenterEnter, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.AiEntryMinRate, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo(MetaName.AiEntryMaxRate, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo(MetaName.PlayerSprintEntryRate, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultPlayerStandEntryStartMovementPhase, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultPlayerStandEntryEndMovementPhase, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAngleToBeginRotationScale, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDefaultAngularVelocity, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo(MetaName.EnterCoverInterruptMinTime, PsoDataType.Float, 192, 0, 0), + new PsoStructureEntryInfo(MetaName.EnterCoverInterruptDistanceTolerance, PsoDataType.Float, 196, 0, 0), + new PsoStructureEntryInfo(MetaName.EnterCoverInterruptHeadingTolerance, PsoDataType.Float, 200, 0, 0), + new PsoStructureEntryInfo(MetaName.EnterCoverAimInterruptDistanceTolerance, PsoDataType.Float, 204, 0, 0), + new PsoStructureEntryInfo(MetaName.EnterCoverAimInterruptHeadingTolerance, PsoDataType.Float, 208, 0, 0), new PsoStructureEntryInfo((MetaName)3920645611, PsoDataType.Structure, 216, 0, (MetaName)1285383250), new PsoStructureEntryInfo((MetaName)80713034, PsoDataType.Structure, 256, 0, (MetaName)1285383250), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)711010751), - new PsoStructureEntryInfo((MetaName)102329791, PsoDataType.Array, 296, 0, (MetaName)62), + new PsoStructureEntryInfo(MetaName.AIEnterCoverClips, PsoDataType.Array, 296, 0, (MetaName)62), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3590219800), - new PsoStructureEntryInfo((MetaName)3619734025, PsoDataType.Array, 312, 0, (MetaName)64), + new PsoStructureEntryInfo(MetaName.AIStandEnterCoverClips, PsoDataType.Array, 312, 0, (MetaName)64), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)711010751), - new PsoStructureEntryInfo((MetaName)2915894063, PsoDataType.Array, 328, 0, (MetaName)66), - new PsoStructureEntryInfo((MetaName)1405654072, PsoDataType.String, 344, 7, 0), - new PsoStructureEntryInfo((MetaName)2519142628, PsoDataType.String, 348, 7, 0), - new PsoStructureEntryInfo((MetaName)4262460027, PsoDataType.String, 352, 7, 0), - new PsoStructureEntryInfo((MetaName)2653796808, PsoDataType.String, 356, 7, 0), - new PsoStructureEntryInfo((MetaName)1017470219, PsoDataType.String, 360, 7, 0), - new PsoStructureEntryInfo((MetaName)1163390260, PsoDataType.String, 364, 7, 0) + new PsoStructureEntryInfo(MetaName.AIEnterTransitionClips, PsoDataType.Array, 328, 0, (MetaName)66), + new PsoStructureEntryInfo(MetaName.EnterCoverAIAimingBase1H, PsoDataType.String, 344, 7, 0), + new PsoStructureEntryInfo(MetaName.EnterCoverAIAimingBase2H, PsoDataType.String, 348, 7, 0), + new PsoStructureEntryInfo(MetaName.EnterCoverAIAimingSwat1H, PsoDataType.String, 352, 7, 0), + new PsoStructureEntryInfo(MetaName.EnterCoverAIAimingSwat2H, PsoDataType.String, 356, 7, 0), + new PsoStructureEntryInfo(MetaName.EnterCoverAITransition1H, PsoDataType.String, 360, 7, 0), + new PsoStructureEntryInfo(MetaName.EnterCoverAITransition2H, PsoDataType.String, 364, 7, 0) ); case (MetaName)1285383250: return new PsoStructureInfo((MetaName)1285383250, 0, 0, 40, @@ -7230,21 +7230,21 @@ namespace CodeWalker.GameFiles case (MetaName)3038580099: return new PsoStructureInfo((MetaName)3038580099, 0, 0, 32, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo((MetaName)3647518623, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.Clips, PsoDataType.Array, 8, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)1559228487), new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.Flags, 24, 0, (MetaName)2097154) ); case (MetaName)711010751: return new PsoStructureInfo((MetaName)711010751, 0, 0, 16, - new PsoStructureEntryInfo((MetaName)517541874, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.EnterClipId, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)1559228487), new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.Flags, 12, 0, (MetaName)2097153) ); case (MetaName)3590219800: return new PsoStructureInfo((MetaName)3590219800, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)2845656216, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1744028122, PsoDataType.String, 12, 7, 0), - new PsoStructureEntryInfo((MetaName)1441580086, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.StandClip0Id, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.StandClip1Id, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo(MetaName.StandClip2Id, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)1559228487), new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.Flags, 20, 0, (MetaName)2097155) ); @@ -7252,16 +7252,16 @@ namespace CodeWalker.GameFiles return new PsoStructureInfo(MetaName.CTaskExitCover__Tunables, 0, 0, 120, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)4010326834), - new PsoStructureEntryInfo((MetaName)353989914, PsoDataType.Array, 16, 0, (MetaName)1), - new PsoStructureEntryInfo((MetaName)150770804, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo(MetaName.CornerExitClips, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ExitCoverBaseClipSetId, PsoDataType.String, 32, 7, 0), new PsoStructureEntryInfo((MetaName)2123164199, PsoDataType.String, 36, 7, 0), - new PsoStructureEntryInfo((MetaName)395871171, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo(MetaName.ExitCoverExtraClipSetId, PsoDataType.String, 40, 7, 0), new PsoStructureEntryInfo((MetaName)1757551615, PsoDataType.String, 44, 7, 0), - new PsoStructureEntryInfo((MetaName)3378374324, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2292594697, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)3182801896, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)1366592047, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)498927550, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.MinInputToInterruptIdle, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.CornerExitHeadingModifier, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.ExitCornerZOffset, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.ExitCornerYOffset, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.ExitCornerDirOffset, PsoDataType.Float, 64, 0, 0), new PsoStructureEntryInfo((MetaName)3920645611, PsoDataType.Structure, 72, 0, (MetaName)246682624), new PsoStructureEntryInfo((MetaName)80713034, PsoDataType.Structure, 96, 0, (MetaName)246682624) ); @@ -7272,151 +7272,151 @@ namespace CodeWalker.GameFiles ); case (MetaName)4010326834: return new PsoStructureInfo((MetaName)4010326834, 0, 0, 16, - new PsoStructureEntryInfo((MetaName)2518432971, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ExitClipId, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)1559228487), new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.Flags, 12, 0, (MetaName)2097153) ); case MetaName.CTaskInCover__Tunables: return new PsoStructureInfo(MetaName.CTaskInCover__Tunables, 0, 0, 536, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)4205396201, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)849148447, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2059966079, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2129665503, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3419184861, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)3872178927, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)2886272257, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)1147737070, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)2904615002, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)1261300416, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)2609438296, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.MovementClipRate, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.TurnClipRate, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxInputForIdleExit, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.InputYAxisCornerExitValue, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ControlDebugXPos, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.ControlDebugYPos, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.ControlDebugRadius, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.ControlDebugBeginAngle, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.ControlDebugEndAngle, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.MinStickInputToMoveInCover, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.MinStickInputXAxisToTurnInCover, PsoDataType.Float, 56, 0, 0), new PsoStructureEntryInfo((MetaName)927329696, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)1147378819, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)2633188230, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)3005241839, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)1551121369, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)2359940104, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)2688479781, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)3881315855, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)2188704570, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)796885552, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)26449222, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)4049257140, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)3317722172, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)1513492849, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)4100289588, PsoDataType.Float, 116, 0, 0), - new PsoStructureEntryInfo((MetaName)772858715, PsoDataType.Float, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)1469301844, PsoDataType.Float, 124, 0, 0), - new PsoStructureEntryInfo((MetaName)3446268000, PsoDataType.Float, 128, 0, 0), - new PsoStructureEntryInfo((MetaName)38963063, PsoDataType.Float, 132, 0, 0), - new PsoStructureEntryInfo((MetaName)2653769818, PsoDataType.Float, 136, 0, 0), - new PsoStructureEntryInfo((MetaName)1733226917, PsoDataType.Float, 140, 0, 0), - new PsoStructureEntryInfo((MetaName)3453306812, PsoDataType.Float, 144, 0, 0), - new PsoStructureEntryInfo((MetaName)2533938546, PsoDataType.Float, 148, 0, 0), - new PsoStructureEntryInfo((MetaName)3014744113, PsoDataType.Float, 152, 0, 0), - new PsoStructureEntryInfo((MetaName)3586592245, PsoDataType.Float, 156, 0, 0), - new PsoStructureEntryInfo((MetaName)4019978349, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)1508442808, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo(MetaName.InputYAxisQuitValue, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.StartExtendedProbeTime, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeToSpendInTask, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.DesiredDistanceToCover, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.DesiredDistanceToCoverToRequestStep, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.OptimumDistToRightCoverEdgeCrouched, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.OptimumDistToLeftCoverEdgeCrouched, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.OptimumDistToRightCoverEdge, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.OptimumDistToLeftCoverEdge, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.MinMovingProbeOffset, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxMovingProbeOffset, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTurnProbeOffset, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTurnProbeOffset, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultProbeOffset, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.MinStoppingEdgeCheckProbeOffset, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxStoppingEdgeCheckProbeOffset, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo(MetaName.MinStoppingProbeOffset, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxStoppingProbeOffset, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo(MetaName.HeadingChangeRate, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeBeforeAllowingCornerMove, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo(MetaName.CrouchedLeftFireOffset, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo(MetaName.CrouchedRightFireOffset, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverLeftFireModifier, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverRightFireModifier, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverLeftFireModifierLow, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverRightFireModifierLow, PsoDataType.Float, 164, 0, 0), new PsoStructureEntryInfo((MetaName)2625425324, PsoDataType.Float, 168, 0, 0), - new PsoStructureEntryInfo((MetaName)754458458, PsoDataType.Float, 172, 0, 0), - new PsoStructureEntryInfo((MetaName)314817266, PsoDataType.Float, 176, 0, 0), - new PsoStructureEntryInfo((MetaName)1620272884, PsoDataType.Float, 180, 0, 0), - new PsoStructureEntryInfo((MetaName)2821466544, PsoDataType.Float, 184, 0, 0), - new PsoStructureEntryInfo((MetaName)1291062567, PsoDataType.Float, 188, 0, 0), - new PsoStructureEntryInfo((MetaName)3787797455, PsoDataType.Float, 192, 0, 0), - new PsoStructureEntryInfo((MetaName)2296590808, PsoDataType.Float, 196, 0, 0), - new PsoStructureEntryInfo((MetaName)1366091002, PsoDataType.Bool, 200, 0, 0), - new PsoStructureEntryInfo((MetaName)4276335920, PsoDataType.Bool, 201, 0, 0), - new PsoStructureEntryInfo((MetaName)3417116793, PsoDataType.Float, 204, 0, 0), - new PsoStructureEntryInfo((MetaName)3106353871, PsoDataType.Float, 208, 0, 0), - new PsoStructureEntryInfo((MetaName)3356016298, PsoDataType.Float, 212, 0, 0), - new PsoStructureEntryInfo((MetaName)1400174762, PsoDataType.Float, 216, 0, 0), - new PsoStructureEntryInfo((MetaName)2250358383, PsoDataType.Float, 220, 0, 0), - new PsoStructureEntryInfo((MetaName)1982386380, PsoDataType.Float, 224, 0, 0), - new PsoStructureEntryInfo((MetaName)2408138725, PsoDataType.Float, 228, 0, 0), - new PsoStructureEntryInfo((MetaName)1055186370, PsoDataType.Float, 232, 0, 0), - new PsoStructureEntryInfo((MetaName)2121459739, PsoDataType.Float, 236, 0, 0), - new PsoStructureEntryInfo((MetaName)2929248824, PsoDataType.Float, 240, 0, 0), - new PsoStructureEntryInfo((MetaName)1784425794, PsoDataType.Float, 244, 0, 0), - new PsoStructureEntryInfo((MetaName)420444049, PsoDataType.Float, 248, 0, 0), - new PsoStructureEntryInfo((MetaName)1632533833, PsoDataType.Float, 252, 0, 0), - new PsoStructureEntryInfo((MetaName)1813675586, PsoDataType.Float, 256, 0, 0), - new PsoStructureEntryInfo((MetaName)1396197980, PsoDataType.Float, 260, 0, 0), - new PsoStructureEntryInfo((MetaName)2168664060, PsoDataType.Float, 264, 0, 0), - new PsoStructureEntryInfo((MetaName)1678354404, PsoDataType.Float, 268, 0, 0), - new PsoStructureEntryInfo((MetaName)189580395, PsoDataType.Float, 272, 0, 0), - new PsoStructureEntryInfo((MetaName)2470298407, PsoDataType.Float, 276, 0, 0), - new PsoStructureEntryInfo((MetaName)545166509, PsoDataType.Float, 280, 0, 0), - new PsoStructureEntryInfo((MetaName)1342115678, PsoDataType.Float, 284, 0, 0), - new PsoStructureEntryInfo((MetaName)2621555533, PsoDataType.Float, 288, 0, 0), - new PsoStructureEntryInfo((MetaName)1759052099, PsoDataType.Float, 292, 0, 0), - new PsoStructureEntryInfo((MetaName)1933569235, PsoDataType.Float, 296, 0, 0), - new PsoStructureEntryInfo((MetaName)919529730, PsoDataType.Float, 300, 0, 0), - new PsoStructureEntryInfo((MetaName)3480207128, PsoDataType.Float, 304, 0, 0), - new PsoStructureEntryInfo((MetaName)3457829957, PsoDataType.Float, 308, 0, 0), - new PsoStructureEntryInfo((MetaName)3256121602, PsoDataType.Float, 312, 0, 0), - new PsoStructureEntryInfo((MetaName)3488557674, PsoDataType.Float, 316, 0, 0), - new PsoStructureEntryInfo((MetaName)1504716899, PsoDataType.Float, 320, 0, 0), - new PsoStructureEntryInfo((MetaName)3608928929, PsoDataType.Float, 324, 0, 0), - new PsoStructureEntryInfo((MetaName)4050756282, PsoDataType.Bool, 328, 0, 0), - new PsoStructureEntryInfo((MetaName)1073641398, PsoDataType.Float, 332, 0, 0), - new PsoStructureEntryInfo((MetaName)1553721673, PsoDataType.Float, 336, 0, 0), - new PsoStructureEntryInfo((MetaName)588986036, PsoDataType.Float, 340, 0, 0), - new PsoStructureEntryInfo((MetaName)4047811579, PsoDataType.Float, 344, 0, 0), - new PsoStructureEntryInfo((MetaName)1685929346, PsoDataType.Float, 348, 0, 0), + new PsoStructureEntryInfo(MetaName.CFriendlyIssues, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverLeftIncreaseModifier, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverRightIncreaseModifier, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo(MetaName.AimTurnCosAngleTolerance, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo(MetaName.InCoverMovementSpeedEnterCover, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo(MetaName.InCoverMovementSpeed, PsoDataType.Float, 192, 0, 0), + new PsoStructureEntryInfo(MetaName.SteppingMovementSpeed, PsoDataType.Float, 196, 0, 0), + new PsoStructureEntryInfo(MetaName.UseAutoPeekAimFromCoverControls, PsoDataType.Bool, 200, 0, 0), + new PsoStructureEntryInfo(MetaName.ComeBackInWhenAimDirectChangeInHighCover, PsoDataType.Bool, 201, 0, 0), + new PsoStructureEntryInfo(MetaName.AlternateControlStickInputThreshold, PsoDataType.Float, 204, 0, 0), + new PsoStructureEntryInfo(MetaName.EdgeCapsuleRadius, PsoDataType.Float, 208, 0, 0), + new PsoStructureEntryInfo(MetaName.EdgeStartXOffset, PsoDataType.Float, 212, 0, 0), + new PsoStructureEntryInfo(MetaName.EdgeEndXOffset, PsoDataType.Float, 216, 0, 0), + new PsoStructureEntryInfo(MetaName.EdgeStartYOffset, PsoDataType.Float, 220, 0, 0), + new PsoStructureEntryInfo(MetaName.EdgeEndYOffset, PsoDataType.Float, 224, 0, 0), + new PsoStructureEntryInfo(MetaName.InsideEdgeStartYOffset, PsoDataType.Float, 228, 0, 0), + new PsoStructureEntryInfo(MetaName.InsideEdgeEndYOffset, PsoDataType.Float, 232, 0, 0), + new PsoStructureEntryInfo(MetaName.InsideEdgeStartXOffset, PsoDataType.Float, 236, 0, 0), + new PsoStructureEntryInfo(MetaName.InsideEdgeEndXOffset, PsoDataType.Float, 240, 0, 0), + new PsoStructureEntryInfo(MetaName.WallTestYOffset, PsoDataType.Float, 244, 0, 0), + new PsoStructureEntryInfo(MetaName.InitialLowEdgeWallTestYOffset, PsoDataType.Float, 248, 0, 0), + new PsoStructureEntryInfo(MetaName.HighCloseEdgeWallTestYOffset, PsoDataType.Float, 252, 0, 0), + new PsoStructureEntryInfo(MetaName.WallTestStartXOffset, PsoDataType.Float, 256, 0, 0), + new PsoStructureEntryInfo(MetaName.WallTestEndXOffset, PsoDataType.Float, 260, 0, 0), + new PsoStructureEntryInfo(MetaName.WallHighTestZOffset, PsoDataType.Float, 264, 0, 0), + new PsoStructureEntryInfo(MetaName.MovingEdgeTestStartYOffset, PsoDataType.Float, 268, 0, 0), + new PsoStructureEntryInfo(MetaName.MovingEdgeTestEndYOffset, PsoDataType.Float, 272, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverToCoverEdgeTestStartYOffset, PsoDataType.Float, 276, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverToCoverEdgeTestEndYOffset, PsoDataType.Float, 280, 0, 0), + new PsoStructureEntryInfo(MetaName.SteppingEdgeTestStartYOffset, PsoDataType.Float, 284, 0, 0), + new PsoStructureEntryInfo(MetaName.SteppingEdgeTestEndYOffset, PsoDataType.Float, 288, 0, 0), + new PsoStructureEntryInfo(MetaName.InitialLowEdgeTestStartYOffset, PsoDataType.Float, 292, 0, 0), + new PsoStructureEntryInfo(MetaName.InitialLowEdgeTestEndYOffset, PsoDataType.Float, 296, 0, 0), + new PsoStructureEntryInfo(MetaName.EdgeHighZOffset, PsoDataType.Float, 300, 0, 0), + new PsoStructureEntryInfo(MetaName.EdgeLowZOffset, PsoDataType.Float, 304, 0, 0), + new PsoStructureEntryInfo(MetaName.EdgeMinimumOffsetDiff, PsoDataType.Float, 308, 0, 0), + new PsoStructureEntryInfo(MetaName.EdgeMaximumOffsetDiff, PsoDataType.Float, 312, 0, 0), + new PsoStructureEntryInfo(MetaName.PinnedDownPeekChance, PsoDataType.Float, 316, 0, 0), + new PsoStructureEntryInfo(MetaName.PinnedDownBlindFireChance, PsoDataType.Float, 320, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeBeforeAllowingAutoPeek, PsoDataType.Float, 324, 0, 0), + new PsoStructureEntryInfo(MetaName.EnableAimDirectlyIntros, PsoDataType.Bool, 328, 0, 0), + new PsoStructureEntryInfo(MetaName.PedDirToPedCoverCosAngleTol, PsoDataType.Float, 332, 0, 0), + new PsoStructureEntryInfo(MetaName.CamToPedDirCosAngleTol, PsoDataType.Float, 336, 0, 0), + new PsoStructureEntryInfo(MetaName.CamToCoverDirCosAngleTol, PsoDataType.Float, 340, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceToTargetForPeek, PsoDataType.Float, 344, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenPeeksWithoutLOS, PsoDataType.Float, 348, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1466791495), - new PsoStructureEntryInfo((MetaName)1011459206, PsoDataType.Array, 352, 0, (MetaName)86), - new PsoStructureEntryInfo((MetaName)3706230533, PsoDataType.SInt, 368, 0, 0), - new PsoStructureEntryInfo((MetaName)1565596444, PsoDataType.Float, 372, 0, 0), - new PsoStructureEntryInfo((MetaName)3950076744, PsoDataType.Float, 376, 0, 0), - new PsoStructureEntryInfo((MetaName)2828343094, PsoDataType.Bool, 380, 0, 0), - new PsoStructureEntryInfo((MetaName)3367723943, PsoDataType.Bool, 381, 0, 0), - new PsoStructureEntryInfo((MetaName)3231686180, PsoDataType.Float, 384, 0, 0), - new PsoStructureEntryInfo((MetaName)1089147792, PsoDataType.Float, 388, 0, 0), - new PsoStructureEntryInfo((MetaName)1887154148, PsoDataType.Float, 392, 0, 0), - new PsoStructureEntryInfo((MetaName)2938880609, PsoDataType.Float, 396, 0, 0), - new PsoStructureEntryInfo((MetaName)3144065170, PsoDataType.Float, 400, 0, 0), - new PsoStructureEntryInfo((MetaName)1630578621, PsoDataType.Float, 404, 0, 0), - new PsoStructureEntryInfo((MetaName)4055554934, PsoDataType.Float, 408, 0, 0), - new PsoStructureEntryInfo((MetaName)360559002, PsoDataType.Float, 412, 0, 0), - new PsoStructureEntryInfo((MetaName)263823852, PsoDataType.Float, 416, 0, 0), - new PsoStructureEntryInfo((MetaName)3909527233, PsoDataType.Float, 420, 0, 0), + new PsoStructureEntryInfo(MetaName.ThrowProjectileClips, PsoDataType.Array, 352, 0, (MetaName)86), + new PsoStructureEntryInfo(MetaName.RecreateWeaponTime, PsoDataType.SInt, 368, 0, 0), + new PsoStructureEntryInfo(MetaName.BlindFireHighCoverMinPitchLimit, PsoDataType.Float, 372, 0, 0), + new PsoStructureEntryInfo(MetaName.BlindFireHighCoverMaxPitchLimit, PsoDataType.Float, 376, 0, 0), + new PsoStructureEntryInfo(MetaName.EnableLeftHandIkInCover, PsoDataType.Bool, 380, 0, 0), + new PsoStructureEntryInfo(MetaName.EnableReloadingWhilstMovingInCover, PsoDataType.Bool, 381, 0, 0), + new PsoStructureEntryInfo(MetaName.AimIntroRateForAi, PsoDataType.Float, 384, 0, 0), + new PsoStructureEntryInfo(MetaName.AimOutroRateForAi, PsoDataType.Float, 388, 0, 0), + new PsoStructureEntryInfo(MetaName.MinReactToFireRate, PsoDataType.Float, 392, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxReactToFireRate, PsoDataType.Float, 396, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxReactToFireDelay, PsoDataType.Float, 400, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeUntilReturnToIdleFromAimAfterAimedAt, PsoDataType.Float, 404, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeUntilReturnToIdleFromAimAfterAimedAt, PsoDataType.Float, 408, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeUntilReturnToIdleFromAimDefault, PsoDataType.Float, 412, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeUntilReturnToIdleFromAimDefault, PsoDataType.Float, 416, 0, 0), + new PsoStructureEntryInfo(MetaName.GlobalLateralTorsoOffsetInLeftCover, PsoDataType.Float, 420, 0, 0), new PsoStructureEntryInfo((MetaName)3668359056, PsoDataType.Float, 424, 0, 0), - new PsoStructureEntryInfo((MetaName)1090704787, PsoDataType.Float, 428, 0, 0), + new PsoStructureEntryInfo(MetaName.WeaponLongBlockingOffsetInLeftCover, PsoDataType.Float, 428, 0, 0), new PsoStructureEntryInfo((MetaName)2805643991, PsoDataType.Float, 432, 0, 0), - new PsoStructureEntryInfo((MetaName)1375297558, PsoDataType.Float, 436, 0, 0), + new PsoStructureEntryInfo(MetaName.WeaponBlockingOffsetInLeftCover, PsoDataType.Float, 436, 0, 0), new PsoStructureEntryInfo((MetaName)3824828934, PsoDataType.Float, 440, 0, 0), - new PsoStructureEntryInfo((MetaName)2238616520, PsoDataType.Float, 444, 0, 0), + new PsoStructureEntryInfo(MetaName.WeaponBlockingOffsetInRightCover, PsoDataType.Float, 444, 0, 0), new PsoStructureEntryInfo((MetaName)3593181124, PsoDataType.Float, 448, 0, 0), new PsoStructureEntryInfo((MetaName)1214766569, PsoDataType.Float, 452, 0, 0), new PsoStructureEntryInfo((MetaName)2018978213, PsoDataType.Float, 456, 0, 0), - new PsoStructureEntryInfo((MetaName)68994958, PsoDataType.Float, 460, 0, 0), + new PsoStructureEntryInfo(MetaName.WeaponBlockingLengthOffset, PsoDataType.Float, 460, 0, 0), new PsoStructureEntryInfo((MetaName)2717483602, PsoDataType.Float, 464, 0, 0), - new PsoStructureEntryInfo((MetaName)2450446524, PsoDataType.String, 468, 7, 0), - new PsoStructureEntryInfo((MetaName)2529898856, PsoDataType.Float, 472, 0, 0), - new PsoStructureEntryInfo((MetaName)3456533073, PsoDataType.Float, 476, 0, 0), - new PsoStructureEntryInfo((MetaName)866380197, PsoDataType.Float, 480, 0, 0), - new PsoStructureEntryInfo((MetaName)1098445330, PsoDataType.Float, 484, 0, 0), - new PsoStructureEntryInfo((MetaName)3328891889, PsoDataType.Float, 488, 0, 0), - new PsoStructureEntryInfo((MetaName)2317940667, PsoDataType.Float, 492, 0, 0), - new PsoStructureEntryInfo((MetaName)473976041, PsoDataType.Float, 496, 0, 0), - new PsoStructureEntryInfo((MetaName)3650240986, PsoDataType.UInt, 500, 0, 0), - new PsoStructureEntryInfo((MetaName)3041121812, PsoDataType.Float, 504, 0, 0), - new PsoStructureEntryInfo((MetaName)2973722662, PsoDataType.UInt, 508, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverStepClipSetId, PsoDataType.String, 468, 7, 0), + new PsoStructureEntryInfo(MetaName.PinnedDownTakeCoverAmount, PsoDataType.Float, 472, 0, 0), + new PsoStructureEntryInfo(MetaName.AmountPinnedDownByDamage, PsoDataType.Float, 476, 0, 0), + new PsoStructureEntryInfo(MetaName.AmountPinnedDownByBullet, PsoDataType.Float, 480, 0, 0), + new PsoStructureEntryInfo(MetaName.AmountPinnedDownByWitnessKill, PsoDataType.Float, 484, 0, 0), + new PsoStructureEntryInfo(MetaName.PinnedDownByBulletRange, PsoDataType.Float, 488, 0, 0), + new PsoStructureEntryInfo(MetaName.PinnedDownDecreaseAmountPerSecond, PsoDataType.Float, 492, 0, 0), + new PsoStructureEntryInfo(MetaName.AimIntroTaskBlendOutDuration, PsoDataType.Float, 496, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeToBePinnedDown, PsoDataType.UInt, 500, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenBurstsMaxRandomPercent, PsoDataType.Float, 504, 0, 0), + new PsoStructureEntryInfo(MetaName.AimOutroDelayTime, PsoDataType.UInt, 508, 0, 0), new PsoStructureEntryInfo((MetaName)3531438516, PsoDataType.UInt, 512, 0, 0), new PsoStructureEntryInfo((MetaName)796325569, PsoDataType.UInt, 516, 0, 0), new PsoStructureEntryInfo((MetaName)2152868269, PsoDataType.Bool, 520, 0, 0), new PsoStructureEntryInfo((MetaName)1536785516, PsoDataType.Bool, 521, 0, 0), - new PsoStructureEntryInfo((MetaName)76855168, PsoDataType.String, 524, 7, 0), + new PsoStructureEntryInfo(MetaName.ThrowProjectileClipSetId, PsoDataType.String, 524, 7, 0), new PsoStructureEntryInfo((MetaName)3576155857, PsoDataType.String, 528, 7, 0) ); case (MetaName)1466791495: return new PsoStructureInfo((MetaName)1466791495, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)3802470907, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)547753211, PsoDataType.String, 12, 7, 0), - new PsoStructureEntryInfo((MetaName)1993756531, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)2511572601, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)573759163, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.IntroClipId, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.PullPinClipId, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo(MetaName.BaseClipId, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.ThrowLongClipId, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.ThrowShortClipId, PsoDataType.String, 24, 7, 0), new PsoStructureEntryInfo((MetaName)1925480184, PsoDataType.String, 28, 7, 0), new PsoStructureEntryInfo((MetaName)3487669030, PsoDataType.String, 32, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)1559228487), @@ -7425,124 +7425,124 @@ namespace CodeWalker.GameFiles case MetaName.CTaskMotionInCover__Tunables: return new PsoStructureInfo(MetaName.CTaskMotionInCover__Tunables, 0, 0, 1112, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1687761193, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2876044804, PsoDataType.Bool, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1227928250, PsoDataType.Bool, 21, 0, 0), - new PsoStructureEntryInfo((MetaName)92660424, PsoDataType.Bool, 22, 0, 0), - new PsoStructureEntryInfo((MetaName)1136710348, PsoDataType.Bool, 23, 0, 0), - new PsoStructureEntryInfo((MetaName)2560019435, PsoDataType.Bool, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3781531198, PsoDataType.Bool, 25, 0, 0), - new PsoStructureEntryInfo((MetaName)2498623969, PsoDataType.Bool, 26, 0, 0), - new PsoStructureEntryInfo((MetaName)288573626, PsoDataType.Bool, 27, 0, 0), - new PsoStructureEntryInfo((MetaName)3117448440, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3544497884, PsoDataType.UByte, 29, 0, 0), - new PsoStructureEntryInfo((MetaName)4067447650, PsoDataType.UInt, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2855575670, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)3719483743, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2308421233, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)818416092, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2906996848, PsoDataType.UInt, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)5986942, PsoDataType.Bool, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)1823873460, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)2643024561, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)3648216318, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)1797303037, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)1573385593, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)2015526511, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)462269180, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)2919445883, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)4228398614, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)321218444, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)372008448, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)502763290, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)2507965951, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)2511576109, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)1887369799, PsoDataType.Float, 116, 0, 0), - new PsoStructureEntryInfo((MetaName)629671162, PsoDataType.Float, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)863732031, PsoDataType.Float, 124, 0, 0), - new PsoStructureEntryInfo((MetaName)691235540, PsoDataType.Float, 128, 0, 0), - new PsoStructureEntryInfo((MetaName)2681841281, PsoDataType.Float, 132, 0, 0), - new PsoStructureEntryInfo((MetaName)148125195, PsoDataType.Float, 136, 0, 0), - new PsoStructureEntryInfo((MetaName)205550242, PsoDataType.Float, 140, 0, 0), - new PsoStructureEntryInfo((MetaName)2267264803, PsoDataType.Float, 144, 0, 0), - new PsoStructureEntryInfo((MetaName)483457094, PsoDataType.Float, 148, 0, 0), - new PsoStructureEntryInfo((MetaName)3382987159, PsoDataType.Float, 152, 0, 0), - new PsoStructureEntryInfo((MetaName)2651943117, PsoDataType.Float, 156, 0, 0), - new PsoStructureEntryInfo((MetaName)2125677956, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)19390938, PsoDataType.Float, 164, 0, 0), - new PsoStructureEntryInfo((MetaName)1570059814, PsoDataType.Float, 168, 0, 0), - new PsoStructureEntryInfo((MetaName)446471957, PsoDataType.Float, 172, 0, 0), - new PsoStructureEntryInfo((MetaName)3143775651, PsoDataType.Float, 176, 0, 0), - new PsoStructureEntryInfo((MetaName)3395179822, PsoDataType.Float, 180, 0, 0), - new PsoStructureEntryInfo((MetaName)1009232455, PsoDataType.Float, 184, 0, 0), - new PsoStructureEntryInfo((MetaName)392526062, PsoDataType.Float, 188, 0, 0), - new PsoStructureEntryInfo((MetaName)452418176, PsoDataType.Float, 192, 0, 0), - new PsoStructureEntryInfo((MetaName)2500851482, PsoDataType.Float, 196, 0, 0), - new PsoStructureEntryInfo((MetaName)3341714290, PsoDataType.Float, 200, 0, 0), - new PsoStructureEntryInfo((MetaName)488807312, PsoDataType.Float, 204, 0, 0), - new PsoStructureEntryInfo((MetaName)52868234, PsoDataType.Float, 208, 0, 0), - new PsoStructureEntryInfo((MetaName)2380669878, PsoDataType.Float, 212, 0, 0), - new PsoStructureEntryInfo((MetaName)1307353498, PsoDataType.Float, 216, 0, 0), - new PsoStructureEntryInfo((MetaName)3203547922, PsoDataType.Float, 220, 0, 0), - new PsoStructureEntryInfo((MetaName)1163008630, PsoDataType.Float, 224, 0, 0), - new PsoStructureEntryInfo((MetaName)2814625688, PsoDataType.Float, 228, 0, 0), - new PsoStructureEntryInfo((MetaName)1251038941, PsoDataType.Float, 232, 0, 0), - new PsoStructureEntryInfo((MetaName)4236998281, PsoDataType.Bool, 236, 0, 0), - new PsoStructureEntryInfo((MetaName)2597341356, PsoDataType.Bool, 237, 0, 0), - new PsoStructureEntryInfo((MetaName)2618193402, PsoDataType.Bool, 238, 0, 0), - new PsoStructureEntryInfo((MetaName)2878139548, PsoDataType.String, 240, 7, 0), + new PsoStructureEntryInfo(MetaName.CoverToCoverClipRate, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableCoverToCoverTranslationScaling, PsoDataType.Bool, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableCoverToCoverRotationScaling, PsoDataType.Bool, 21, 0, 0), + new PsoStructureEntryInfo(MetaName.UseButtonToMoveAroundCorner, PsoDataType.Bool, 22, 0, 0), + new PsoStructureEntryInfo(MetaName.EnableCoverToCover, PsoDataType.Bool, 23, 0, 0), + new PsoStructureEntryInfo(MetaName.EnableWalkStops, PsoDataType.Bool, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.EnableCoverPeekingVariations, PsoDataType.Bool, 25, 0, 0), + new PsoStructureEntryInfo(MetaName.EnableCoverPinnedVariations, PsoDataType.Bool, 26, 0, 0), + new PsoStructureEntryInfo(MetaName.EnableCoverIdleVariations, PsoDataType.Bool, 27, 0, 0), + new PsoStructureEntryInfo(MetaName.UseSprintButtonForCoverToCover, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.VerifyCoverInterval, PsoDataType.UByte, 29, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeForCornerMove, PsoDataType.UInt, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultSettleBlendDuration, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.HeightChangeSettleBlendDuration, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeStayPinned, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeStayPinned, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.PinnedDownThreshold, PsoDataType.UInt, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.ForcePinnedDown, PsoDataType.Bool, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceToTargetForIdleVariations, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeBetweenIdleVariations, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeBetweenIdleVariations, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.MinWaitTimeToPlayPlayerIdleVariations, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeBetweenPlayerIdleVariations, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeBetweenPlayerIdleVariations, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverToCoverDuration, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverToCoverMinScalePhase, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverToCoverMaxScalePhase, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverToCoverMinRotScalePhase, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverToCoverMaxRotScalePhase, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRotationalSpeedScale, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRotationalSpeed, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.MinStickInputToEnableMoveAroundCorner, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.MinStickInputToEnableCoverToCover, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.MinStickInputToMoveAroundCorner, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxStoppingDuration, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo(MetaName.MinStoppingDist, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeToScale, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo(MetaName.CTCDepthDistanceCompletionOffset, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo(MetaName.EdgeLowCoverMoveTime, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeToStandUp, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverToCoverMinDistToScale, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverToCoverMinAngToScale, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverToCoverMinAng, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverToCoverDistTol, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverToCoverMaxDistToStep, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverToCoverAngTol, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverToCoverMaxAngToStep, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverToCoverMaxAccel, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo(MetaName.ForwardDistToStartSideScale, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverToCoverMinDepthToScale, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverToCoverSmallAnimDist, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo(MetaName.HeadingReachedTolerance, PsoDataType.Float, 192, 0, 0), + new PsoStructureEntryInfo(MetaName.BlendToIdleTime, PsoDataType.Float, 196, 0, 0), + new PsoStructureEntryInfo(MetaName.InsideCornerStopDistance, PsoDataType.Float, 200, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverHeadingCloseEnough, PsoDataType.Float, 204, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverHeadingCloseEnoughTurn, PsoDataType.Float, 208, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverPositionCloseEnough, PsoDataType.Float, 212, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultStillToTurnBlendDuration, PsoDataType.Float, 216, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultEdgeTurnBlendDuration, PsoDataType.Float, 220, 0, 0), + new PsoStructureEntryInfo(MetaName.PeekToEdgeTurnBlendDuration, PsoDataType.Float, 224, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxMoveSpeedInCover, PsoDataType.Float, 228, 0, 0), + new PsoStructureEntryInfo(MetaName.MinEdgeDistanceForStoppingAnim, PsoDataType.Float, 232, 0, 0), + new PsoStructureEntryInfo(MetaName.UseNewStepAndWalkStarts, PsoDataType.Bool, 236, 0, 0), + new PsoStructureEntryInfo(MetaName.UseNewTurns, PsoDataType.Bool, 237, 0, 0), + new PsoStructureEntryInfo(MetaName.UseNewTurnWalkStarts, PsoDataType.Bool, 238, 0, 0), + new PsoStructureEntryInfo(MetaName.CoreMotionClipSetId, PsoDataType.String, 240, 7, 0), new PsoStructureEntryInfo((MetaName)1642317087, PsoDataType.String, 244, 7, 0), - new PsoStructureEntryInfo((MetaName)2782502123, PsoDataType.String, 248, 7, 0), + new PsoStructureEntryInfo(MetaName.CoreAIMotionClipSetId, PsoDataType.String, 248, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), - new PsoStructureEntryInfo((MetaName)2572412881, PsoDataType.Array, 256, 0, (MetaName)69), + new PsoStructureEntryInfo(MetaName.PeekingVariationAnimStateInfos, PsoDataType.Array, 256, 0, (MetaName)69), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo((MetaName)3656589599, PsoDataType.Array, 272, 0, (MetaName)71), + new PsoStructureEntryInfo(MetaName.PeekingLow1HVariationClipsets, PsoDataType.Array, 272, 0, (MetaName)71), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo((MetaName)4084903537, PsoDataType.Array, 288, 0, (MetaName)73), + new PsoStructureEntryInfo(MetaName.PeekingLow2HVariationClipsets, PsoDataType.Array, 288, 0, (MetaName)73), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo((MetaName)86703483, PsoDataType.Array, 304, 0, (MetaName)75), + new PsoStructureEntryInfo(MetaName.PeekingHigh1HVariationClipsets, PsoDataType.Array, 304, 0, (MetaName)75), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo((MetaName)1692855661, PsoDataType.Array, 320, 0, (MetaName)77), + new PsoStructureEntryInfo(MetaName.PeekingHigh2HVariationClipsets, PsoDataType.Array, 320, 0, (MetaName)77), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo((MetaName)1337721029, PsoDataType.Array, 336, 0, (MetaName)79), + new PsoStructureEntryInfo(MetaName.PinnedLow1HVariationClipsets, PsoDataType.Array, 336, 0, (MetaName)79), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo((MetaName)3647756430, PsoDataType.Array, 352, 0, (MetaName)81), + new PsoStructureEntryInfo(MetaName.PinnedLow2HVariationClipsets, PsoDataType.Array, 352, 0, (MetaName)81), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo((MetaName)186750731, PsoDataType.Array, 368, 0, (MetaName)83), + new PsoStructureEntryInfo(MetaName.PinnedHigh1HVariationClipsets, PsoDataType.Array, 368, 0, (MetaName)83), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo((MetaName)1643071074, PsoDataType.Array, 384, 0, (MetaName)85), + new PsoStructureEntryInfo(MetaName.PinnedHigh2HVariationClipsets, PsoDataType.Array, 384, 0, (MetaName)85), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo((MetaName)1976510010, PsoDataType.Array, 400, 0, (MetaName)87), + new PsoStructureEntryInfo(MetaName.OutroReact1HVariationClipsets, PsoDataType.Array, 400, 0, (MetaName)87), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo((MetaName)1754157237, PsoDataType.Array, 416, 0, (MetaName)89), + new PsoStructureEntryInfo(MetaName.OutroReact2HVariationClipsets, PsoDataType.Array, 416, 0, (MetaName)89), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo((MetaName)229574996, PsoDataType.Array, 432, 0, (MetaName)91), + new PsoStructureEntryInfo(MetaName.IdleLow1HVariationClipsets, PsoDataType.Array, 432, 0, (MetaName)91), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo((MetaName)754984064, PsoDataType.Array, 448, 0, (MetaName)93), + new PsoStructureEntryInfo(MetaName.IdleLow2HVariationClipsets, PsoDataType.Array, 448, 0, (MetaName)93), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo((MetaName)2565051320, PsoDataType.Array, 464, 0, (MetaName)95), + new PsoStructureEntryInfo(MetaName.IdleHigh1HVariationClipsets, PsoDataType.Array, 464, 0, (MetaName)95), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo((MetaName)616197965, PsoDataType.Array, 480, 0, (MetaName)97), + new PsoStructureEntryInfo(MetaName.IdleHigh2HVariationClipsets, PsoDataType.Array, 480, 0, (MetaName)97), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo((MetaName)1469086565, PsoDataType.Array, 496, 0, (MetaName)99), + new PsoStructureEntryInfo(MetaName.PlayerIdleLow0HVariationClipsets, PsoDataType.Array, 496, 0, (MetaName)99), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo((MetaName)421291191, PsoDataType.Array, 512, 0, (MetaName)101), + new PsoStructureEntryInfo(MetaName.PlayerIdleLow1HVariationClipsets, PsoDataType.Array, 512, 0, (MetaName)101), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo((MetaName)2423980252, PsoDataType.Array, 528, 0, (MetaName)103), + new PsoStructureEntryInfo(MetaName.PlayerIdleLow2HVariationClipsets, PsoDataType.Array, 528, 0, (MetaName)103), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo((MetaName)3420717239, PsoDataType.Array, 544, 0, (MetaName)105), + new PsoStructureEntryInfo(MetaName.PlayerIdleHigh0HVariationClipsets, PsoDataType.Array, 544, 0, (MetaName)105), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo((MetaName)2643498096, PsoDataType.Array, 560, 0, (MetaName)107), + new PsoStructureEntryInfo(MetaName.PlayerIdleHigh1HVariationClipsets, PsoDataType.Array, 560, 0, (MetaName)107), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo((MetaName)1210186805, PsoDataType.Array, 576, 0, (MetaName)109), + new PsoStructureEntryInfo(MetaName.PlayerIdleHigh2HVariationClipsets, PsoDataType.Array, 576, 0, (MetaName)109), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), - new PsoStructureEntryInfo((MetaName)2080360880, PsoDataType.Array, 592, 0, (MetaName)111), + new PsoStructureEntryInfo(MetaName.PinnedIntroAnimStateInfos, PsoDataType.Array, 592, 0, (MetaName)111), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), - new PsoStructureEntryInfo((MetaName)430330313, PsoDataType.Array, 608, 0, (MetaName)113), + new PsoStructureEntryInfo(MetaName.PinnedIdleAnimStateInfos, PsoDataType.Array, 608, 0, (MetaName)113), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), - new PsoStructureEntryInfo((MetaName)3262741183, PsoDataType.Array, 624, 0, (MetaName)115), + new PsoStructureEntryInfo(MetaName.PinnedOutroAnimStateInfos, PsoDataType.Array, 624, 0, (MetaName)115), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), - new PsoStructureEntryInfo((MetaName)1977186530, PsoDataType.Array, 640, 0, (MetaName)117), + new PsoStructureEntryInfo(MetaName.IdleVariationAnimStateInfos, PsoDataType.Array, 640, 0, (MetaName)117), new PsoStructureEntryInfo((MetaName)3920645611, PsoDataType.Structure, 656, 0, (MetaName)2625948332), new PsoStructureEntryInfo((MetaName)80713034, PsoDataType.Structure, 880, 0, (MetaName)2625948332), new PsoStructureEntryInfo((MetaName)1230607954, PsoDataType.Bool, 1104, 0, 0), @@ -7553,147 +7553,147 @@ namespace CodeWalker.GameFiles case (MetaName)2625948332: return new PsoStructureInfo((MetaName)2625948332, 0, 0, 224, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), - new PsoStructureEntryInfo((MetaName)3037289130, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.IdleAnimStateInfos, PsoDataType.Array, 8, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), - new PsoStructureEntryInfo((MetaName)1367701780, PsoDataType.Array, 24, 0, (MetaName)2), + new PsoStructureEntryInfo(MetaName.AtEdgeAnimStateInfos, PsoDataType.Array, 24, 0, (MetaName)2), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), - new PsoStructureEntryInfo((MetaName)1958652331, PsoDataType.Array, 40, 0, (MetaName)4), + new PsoStructureEntryInfo(MetaName.PeekingAnimStateInfos, PsoDataType.Array, 40, 0, (MetaName)4), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), - new PsoStructureEntryInfo((MetaName)2080209369, PsoDataType.Array, 56, 0, (MetaName)6), + new PsoStructureEntryInfo(MetaName.StoppingAnimStateInfos, PsoDataType.Array, 56, 0, (MetaName)6), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), - new PsoStructureEntryInfo((MetaName)2676261337, PsoDataType.Array, 72, 0, (MetaName)8), + new PsoStructureEntryInfo(MetaName.MovingAnimStateInfos, PsoDataType.Array, 72, 0, (MetaName)8), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), - new PsoStructureEntryInfo((MetaName)896061089, PsoDataType.Array, 88, 0, (MetaName)10), + new PsoStructureEntryInfo(MetaName.EdgeTurnAnimStateInfos, PsoDataType.Array, 88, 0, (MetaName)10), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), - new PsoStructureEntryInfo((MetaName)3577768695, PsoDataType.Array, 104, 0, MetaName.PsoPOINTER), + new PsoStructureEntryInfo(MetaName.CoverToCoverAnimStateInfos, PsoDataType.Array, 104, 0, MetaName.PsoPOINTER), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), - new PsoStructureEntryInfo((MetaName)3007867016, PsoDataType.Array, 120, 0, (MetaName)14), + new PsoStructureEntryInfo(MetaName.SteppingAnimStateInfos, PsoDataType.Array, 120, 0, (MetaName)14), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), - new PsoStructureEntryInfo((MetaName)3590260370, PsoDataType.Array, 136, 0, MetaName.STRING), + new PsoStructureEntryInfo(MetaName.WalkStartAnimStateInfos, PsoDataType.Array, 136, 0, MetaName.STRING), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), - new PsoStructureEntryInfo((MetaName)260425135, PsoDataType.Array, 152, 0, (MetaName)18), + new PsoStructureEntryInfo(MetaName.SettleAnimStateInfos, PsoDataType.Array, 152, 0, (MetaName)18), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), - new PsoStructureEntryInfo((MetaName)313911161, PsoDataType.Array, 168, 0, (MetaName)20), + new PsoStructureEntryInfo(MetaName.TurnEnterAnimStateInfos, PsoDataType.Array, 168, 0, (MetaName)20), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), - new PsoStructureEntryInfo((MetaName)2833513553, PsoDataType.Array, 184, 0, (MetaName)22), + new PsoStructureEntryInfo(MetaName.TurnEndAnimStateInfos, PsoDataType.Array, 184, 0, (MetaName)22), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3038580099), - new PsoStructureEntryInfo((MetaName)2132068389, PsoDataType.Array, 200, 0, (MetaName)24), + new PsoStructureEntryInfo(MetaName.TurnWalkStartAnimStateInfos, PsoDataType.Array, 200, 0, (MetaName)24), new PsoStructureEntryInfo((MetaName)3535710087, PsoDataType.String, 216, 7, 0) ); case MetaName.CTaskAimGunFromCoverIntro__Tunables: return new PsoStructureInfo(MetaName.CTaskAimGunFromCoverIntro__Tunables, 0, 0, 312, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1388147608, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3673514744, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1465904835, PsoDataType.Bool, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)800236883, PsoDataType.Bool, 25, 0, 0), - new PsoStructureEntryInfo((MetaName)3598945794, PsoDataType.Bool, 26, 0, 0), - new PsoStructureEntryInfo((MetaName)1930123256, PsoDataType.Bool, 27, 0, 0), - new PsoStructureEntryInfo((MetaName)4249860971, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3262184677, PsoDataType.Bool, 29, 0, 0), - new PsoStructureEntryInfo((MetaName)3860983555, PsoDataType.Bool, 30, 0, 0), - new PsoStructureEntryInfo((MetaName)800840705, PsoDataType.Bool, 31, 0, 0), - new PsoStructureEntryInfo((MetaName)3134002215, PsoDataType.Bool, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1686516854, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)3371499882, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)4206558217, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)1515476732, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)1894035381, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)295831481, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)3352731897, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)427371079, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)899299281, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)842076929, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)1649508716, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.UpperBodyAimBlendInDuration, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.IntroMovementDuration, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableIntroScaling, PsoDataType.Bool, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableRotationScaling, PsoDataType.Bool, 25, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableIntroOverShootCheck, PsoDataType.Bool, 26, 0, 0), + new PsoStructureEntryInfo(MetaName.UseConstantIntroScaling, PsoDataType.Bool, 27, 0, 0), + new PsoStructureEntryInfo(MetaName.RenderArcsAtCoverPosition, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.RenderAimArcDebug, PsoDataType.Bool, 29, 0, 0), + new PsoStructureEntryInfo(MetaName.UseMoverPositionWhilePeeking, PsoDataType.Bool, 30, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableWeaponBlocking, PsoDataType.Bool, 31, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableTranslationScaling, PsoDataType.Bool, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.ArcRadius, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.IntroScalingDefaultStartPhase, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.IntroScalingDefaultEndPhase, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.IntroRotScalingDefaultStartPhase, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.IntroRotScalingDefaultEndPhase, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.AiAimIntroCloseEnoughTolerance, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxStepBackDist, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.MinStepOutDist, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxStepOutDist, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.IntroMaxScale, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.IntroRate, PsoDataType.Float, 76, 0, 0), new PsoStructureEntryInfo((MetaName)2875886470, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)2260414033, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.OutroRate, PsoDataType.Float, 84, 0, 0), new PsoStructureEntryInfo((MetaName)2575356761, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)4027315230, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)2556798213, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)1705449547, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)4090917343, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)2167006115, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)502763290, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)452418176, PsoDataType.Float, 116, 0, 0), - new PsoStructureEntryInfo((MetaName)2554062878, PsoDataType.Float, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)3060249921, PsoDataType.Float, 124, 0, 0), - new PsoStructureEntryInfo((MetaName)1144003052, PsoDataType.Float, 128, 0, 0), - new PsoStructureEntryInfo((MetaName)3683453861, PsoDataType.Float, 132, 0, 0), - new PsoStructureEntryInfo((MetaName)4255892364, PsoDataType.Float, 136, 0, 0), - new PsoStructureEntryInfo((MetaName)2818774649, PsoDataType.Float, 140, 0, 0), - new PsoStructureEntryInfo((MetaName)3545526197, PsoDataType.Float, 144, 0, 0), - new PsoStructureEntryInfo((MetaName)717814241, PsoDataType.Float, 148, 0, 0), - new PsoStructureEntryInfo((MetaName)2260315698, PsoDataType.Float, 152, 0, 0), - new PsoStructureEntryInfo((MetaName)568360986, PsoDataType.Float, 156, 0, 0), - new PsoStructureEntryInfo((MetaName)4015224528, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)4111569262, PsoDataType.Float2, 164, 0, 0), - new PsoStructureEntryInfo((MetaName)4205427545, PsoDataType.Float2, 172, 0, 0), - new PsoStructureEntryInfo((MetaName)2527050941, PsoDataType.Float, 180, 0, 0), - new PsoStructureEntryInfo((MetaName)842428202, PsoDataType.Float, 184, 0, 0), - new PsoStructureEntryInfo((MetaName)3532419784, PsoDataType.Float, 188, 0, 0), - new PsoStructureEntryInfo((MetaName)2531405930, PsoDataType.Float, 192, 0, 0), - new PsoStructureEntryInfo((MetaName)2343990340, PsoDataType.Float, 196, 0, 0), - new PsoStructureEntryInfo((MetaName)8574286, PsoDataType.Float, 200, 0, 0), - new PsoStructureEntryInfo((MetaName)298303912, PsoDataType.Float, 204, 0, 0), - new PsoStructureEntryInfo((MetaName)3516373800, PsoDataType.Float, 208, 0, 0), - new PsoStructureEntryInfo((MetaName)3372482096, PsoDataType.Float, 212, 0, 0), - new PsoStructureEntryInfo((MetaName)1655026590, PsoDataType.Float, 216, 0, 0), - new PsoStructureEntryInfo((MetaName)2297046941, PsoDataType.Float, 220, 0, 0), - new PsoStructureEntryInfo((MetaName)2185200792, PsoDataType.Float, 224, 0, 0), - new PsoStructureEntryInfo((MetaName)3617904707, PsoDataType.Float, 228, 0, 0), - new PsoStructureEntryInfo((MetaName)4125755684, PsoDataType.Float, 232, 0, 0), - new PsoStructureEntryInfo((MetaName)63113045, PsoDataType.Float, 236, 0, 0), - new PsoStructureEntryInfo((MetaName)1486772652, PsoDataType.Float, 240, 0, 0), - new PsoStructureEntryInfo((MetaName)80679158, PsoDataType.Structure, 248, 0, (MetaName)791301518), - new PsoStructureEntryInfo((MetaName)2338326271, PsoDataType.Structure, 272, 0, (MetaName)791301518), + new PsoStructureEntryInfo(MetaName.SteppingApproachRateSlow, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.SteppingApproachRate, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.SteppingApproachRateFast, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.SteppingHeadingApproachRate, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.MinRotationalSpeedScale, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRotationalSpeedScale, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.HeadingReachedTolerance, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.StepOutCapsuleRadiusScale, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.AimDirectlyMaxAngle, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo(MetaName.StepOutLeftX, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.StepOutRightX, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo(MetaName.StepOutY, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo(MetaName.LowXClearOffsetCapsuleTest, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo(MetaName.LowXOffsetCapsuleTest, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo(MetaName.LowYOffsetCapsuleTest, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo(MetaName.LowZOffsetCapsuleTest, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.LowOffsetCapsuleLength, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo(MetaName.LowOffsetCapsuleRadius, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.LowLeftStep, PsoDataType.Float2, 164, 0, 0), + new PsoStructureEntryInfo(MetaName.LowRightStep, PsoDataType.Float2, 172, 0, 0), + new PsoStructureEntryInfo(MetaName.LowBlockedBlend, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo(MetaName.LowStepOutLeftXBlocked, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo(MetaName.LowStepOutLeftYBlocked, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo(MetaName.LowStepBackLeftXBlocked, PsoDataType.Float, 192, 0, 0), + new PsoStructureEntryInfo(MetaName.LowStepBackLeftYBlocked, PsoDataType.Float, 196, 0, 0), + new PsoStructureEntryInfo(MetaName.LowStepOutRightXBlocked, PsoDataType.Float, 200, 0, 0), + new PsoStructureEntryInfo(MetaName.LowStepOutRightYBlocked, PsoDataType.Float, 204, 0, 0), + new PsoStructureEntryInfo(MetaName.LowStepBackRightXBlocked, PsoDataType.Float, 208, 0, 0), + new PsoStructureEntryInfo(MetaName.LowStepBackRightYBlocked, PsoDataType.Float, 212, 0, 0), + new PsoStructureEntryInfo(MetaName.LowSideZOffset, PsoDataType.Float, 216, 0, 0), + new PsoStructureEntryInfo(MetaName.DistConsideredAtAimPosition, PsoDataType.Float, 220, 0, 0), + new PsoStructureEntryInfo(MetaName.MinPhaseToApplyExtraHeadingAi, PsoDataType.Float, 224, 0, 0), + new PsoStructureEntryInfo(MetaName.MinPhaseToApplyExtraHeadingPlayer, PsoDataType.Float, 228, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAngularHeadingVelocityAi, PsoDataType.Float, 232, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAngularHeadingVelocityPlayer, PsoDataType.Float, 236, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAngularHeadingVelocityPlayerForcedStandAim, PsoDataType.Float, 240, 0, 0), + new PsoStructureEntryInfo(MetaName.HighLeftAimStepInfoSet, PsoDataType.Structure, 248, 0, (MetaName)791301518), + new PsoStructureEntryInfo(MetaName.HighRightAimStepInfoSet, PsoDataType.Structure, 272, 0, (MetaName)791301518), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)4162893736), - new PsoStructureEntryInfo((MetaName)1512682432, PsoDataType.Array, 296, 0, (MetaName)64) + new PsoStructureEntryInfo(MetaName.AimIntroClips, PsoDataType.Array, 296, 0, (MetaName)64) ); case (MetaName)791301518: return new PsoStructureInfo((MetaName)791301518, 0, 0, 24, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2996437115), - new PsoStructureEntryInfo((MetaName)1592390985, PsoDataType.Array, 8, 0, 0) + new PsoStructureEntryInfo(MetaName.StepInfos, PsoDataType.Array, 8, 0, 0) ); case (MetaName)2996437115: return new PsoStructureInfo((MetaName)2996437115, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)259942193, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)4255892364, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)2533820819, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1584333756, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2390268263, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2392693984, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)681665994, PsoDataType.String, 32, 7, 0), - new PsoStructureEntryInfo((MetaName)3399412192, PsoDataType.String, 36, 7, 0) + new PsoStructureEntryInfo(MetaName.StepOutX, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.StepOutY, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.StepTransitionMinAngle, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.StepTransitionMaxAngle, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.PreviousTransitionExtraScalar, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.NextTransitionExtraScalar, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.PreviousTransitionClipId, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo(MetaName.NextTransitionClipId, PsoDataType.String, 36, 7, 0) ); case (MetaName)4162893736: return new PsoStructureInfo((MetaName)4162893736, 0, 0, 32, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo((MetaName)3647518623, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.Clips, PsoDataType.Array, 8, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)1559228487), new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.Flags, 24, 0, (MetaName)2097154) ); case MetaName.CTaskAimGunFromCoverOutro__Tunables: return new PsoStructureInfo(MetaName.CTaskAimGunFromCoverOutro__Tunables, 0, 0, 128, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1212343445, PsoDataType.Bool, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)800236883, PsoDataType.Bool, 17, 0, 0), - new PsoStructureEntryInfo((MetaName)2745801756, PsoDataType.Bool, 18, 0, 0), - new PsoStructureEntryInfo((MetaName)28269420, PsoDataType.Bool, 19, 0, 0), - new PsoStructureEntryInfo((MetaName)2960195918, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)4246951180, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3467497537, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1459623344, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2206745704, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)3164975884, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2243016084, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)1551121369, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)3787797455, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)2943938244, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)870279090, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)4125755684, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)63113045, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableOutroScaling, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableRotationScaling, PsoDataType.Bool, 17, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableOutroOverShootCheck, PsoDataType.Bool, 18, 0, 0), + new PsoStructureEntryInfo(MetaName.UseConstantOutroScaling, PsoDataType.Bool, 19, 0, 0), + new PsoStructureEntryInfo(MetaName.OutroRotationScalingDefaultStartPhase, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.OutroRotationScalingDefaultEndPhase, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.OutroScalingDefaultStartPhase, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.OutroScalingDefaultEndPhase, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.OutroMaxScale, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.AdditionalModifier, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.EndHeadingTolerance, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.DesiredDistanceToCover, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.InCoverMovementSpeed, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.OutroMovementDuration, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.UpperBodyAimBlendOutDuration, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAngularHeadingVelocityAi, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAngularHeadingVelocityPlayer, PsoDataType.Float, 68, 0, 0), new PsoStructureEntryInfo((MetaName)2412106599, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)1486772652, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAngularHeadingVelocityPlayerForcedStandAim, PsoDataType.Float, 76, 0, 0), new PsoStructureEntryInfo((MetaName)3920645611, PsoDataType.Structure, 80, 0, (MetaName)1280972310), new PsoStructureEntryInfo((MetaName)80713034, PsoDataType.Structure, 104, 0, (MetaName)1280972310) ); @@ -7705,239 +7705,239 @@ namespace CodeWalker.GameFiles case MetaName.CTaskAimGunBlindFire__Tunables: return new PsoStructureInfo(MetaName.CTaskAimGunBlindFire__Tunables, 0, 0, 48, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3024014754, PsoDataType.Bool, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)4136330299, PsoDataType.Bool, 17, 0, 0), - new PsoStructureEntryInfo((MetaName)2323225479, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)298108981, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.RemoveReticuleDuringBlindFire, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.DontRemoveReticuleDuringBlindFireNew, PsoDataType.Bool, 17, 0, 0), + new PsoStructureEntryInfo(MetaName.LowBlindFireAimingDirectlyLimitAngle, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.HighBlindFireAimingDirectlyLimitAngle, PsoDataType.Float, 24, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)994532516), - new PsoStructureEntryInfo((MetaName)2740917805, PsoDataType.Array, 32, 0, (MetaName)5) + new PsoStructureEntryInfo(MetaName.BlindFireAnimStateNewInfos, PsoDataType.Array, 32, 0, (MetaName)5) ); case (MetaName)994532516: return new PsoStructureInfo((MetaName)994532516, 0, 0, 112, - new PsoStructureEntryInfo((MetaName)4104220306, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)430012531, PsoDataType.String, 12, 7, 0), - new PsoStructureEntryInfo((MetaName)3630917852, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3117869494, PsoDataType.String, 20, 7, 0), - new PsoStructureEntryInfo((MetaName)4068466847, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)3585249404, PsoDataType.String, 28, 7, 0), + new PsoStructureEntryInfo(MetaName.IntroClip0Id, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.IntroClip1Id, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo(MetaName.SweepClip0Id, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.SweepClip1Id, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.SweepClip2Id, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.OutroClip0Id, PsoDataType.String, 28, 7, 0), new PsoStructureEntryInfo((MetaName)2291961208, PsoDataType.String, 32, 7, 0), new PsoStructureEntryInfo((MetaName)3610728325, PsoDataType.String, 36, 7, 0), new PsoStructureEntryInfo((MetaName)1018316975, PsoDataType.String, 40, 7, 0), - new PsoStructureEntryInfo((MetaName)2737802101, PsoDataType.String, 44, 7, 0), + new PsoStructureEntryInfo(MetaName.CockGunWeaponClipId, PsoDataType.String, 44, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)1559228487), new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.Flags, 48, 0, (MetaName)2097162), - new PsoStructureEntryInfo((MetaName)2186047470, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)3669858468, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHeadingAngle, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxHeadingAngle, PsoDataType.Float, 56, 0, 0), new PsoStructureEntryInfo((MetaName)3127121455, PsoDataType.Structure, 64, 0, (MetaName)4209697792), new PsoStructureEntryInfo((MetaName)465339689, PsoDataType.Structure, 88, 0, (MetaName)4209697792) ); case (MetaName)4209697792: return new PsoStructureInfo((MetaName)4209697792, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)3480847079, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1021608480, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)2669496770, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2966888023, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.MinPitchAngle, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPitchAngle, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MinPitchAngle2H, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPitchAngle2H, PsoDataType.Float, 20, 0, 0) ); case MetaName.CAiCoverClipVariationHelper__Tunables: return new PsoStructureInfo(MetaName.CAiCoverClipVariationHelper__Tunables, 0, 0, 48, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1848963111, PsoDataType.UInt, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2265825010, PsoDataType.UInt, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3203888722, PsoDataType.UInt, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)1988933435, PsoDataType.UInt, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1069071024, PsoDataType.UInt, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2728975961, PsoDataType.UInt, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)3007638827, PsoDataType.UInt, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)3247168097, PsoDataType.UInt, 44, 0, 0) + new PsoStructureEntryInfo(MetaName.MinUsesForPeekingVariationChange, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxUsesForPeekingVariationChange, PsoDataType.UInt, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MinUsesForPinnedVariationChange, PsoDataType.UInt, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxUsesForPinnedVariationChange, PsoDataType.UInt, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MinUsesForOutroReactVariationChange, PsoDataType.UInt, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxUsesForOutroReactVariationChange, PsoDataType.UInt, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MinUsesForIdleVariationChange, PsoDataType.UInt, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxUsesForIdleVariationChange, PsoDataType.UInt, 44, 0, 0) ); case MetaName.CPlayerCoverClipVariationHelper__Tunables: return new PsoStructureInfo(MetaName.CPlayerCoverClipVariationHelper__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3007638827, PsoDataType.UInt, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3247168097, PsoDataType.UInt, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.MinUsesForIdleVariationChange, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxUsesForIdleVariationChange, PsoDataType.UInt, 20, 0, 0) ); case MetaName.CDynamicCoverHelper__Tunables: return new PsoStructureInfo(MetaName.CDynamicCoverHelper__Tunables, 0, 0, 176, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3464583782, PsoDataType.Bool, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3891560208, PsoDataType.Bool, 17, 0, 0), - new PsoStructureEntryInfo((MetaName)4175251844, PsoDataType.UInt, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)488214823, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3262493116, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2656290976, PsoDataType.Bool, 29, 0, 0), - new PsoStructureEntryInfo((MetaName)4080484940, PsoDataType.Bool, 30, 0, 0), - new PsoStructureEntryInfo((MetaName)692748984, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2650603299, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)575575803, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)1318415761, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)3832321302, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)1249475394, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)4269848077, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)852914750, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)2079300420, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)461310715, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)708594816, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)2512599606, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)3727526506, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)3036685456, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)4258697085, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)3651490612, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)1038229473, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)4155982221, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)1565700819, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)837246042, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)4089643980, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)3077258891, PsoDataType.Float, 116, 0, 0), - new PsoStructureEntryInfo((MetaName)1328526529, PsoDataType.Float, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)2044226047, PsoDataType.Float, 124, 0, 0), - new PsoStructureEntryInfo((MetaName)348835470, PsoDataType.Float, 128, 0, 0), - new PsoStructureEntryInfo((MetaName)1461993132, PsoDataType.Float, 132, 0, 0), - new PsoStructureEntryInfo((MetaName)370845448, PsoDataType.Float, 136, 0, 0), - new PsoStructureEntryInfo((MetaName)2570702388, PsoDataType.Float, 140, 0, 0), - new PsoStructureEntryInfo((MetaName)4136133905, PsoDataType.Float, 144, 0, 0), - new PsoStructureEntryInfo((MetaName)225620543, PsoDataType.Float, 148, 0, 0), - new PsoStructureEntryInfo((MetaName)60938529, PsoDataType.Float, 152, 0, 0), - new PsoStructureEntryInfo((MetaName)1271601300, PsoDataType.Float, 156, 0, 0), - new PsoStructureEntryInfo((MetaName)649298289, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)3234046643, PsoDataType.Float, 164, 0, 0), - new PsoStructureEntryInfo((MetaName)3646563039, PsoDataType.Float, 168, 0, 0) + new PsoStructureEntryInfo(MetaName.EnableConflictingNormalCollisionRemoval, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.UseStickHistoryForCoverSearch, PsoDataType.Bool, 17, 0, 0), + new PsoStructureEntryInfo(MetaName.StickDownDuration, PsoDataType.UInt, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.StickDownMinRange, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.UseCameraOrientationWeighting, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.UseCameraOrientationWhenStill, PsoDataType.Bool, 29, 0, 0), + new PsoStructureEntryInfo(MetaName.UseCameraOrientationForBackwardsDirection, PsoDataType.Bool, 30, 0, 0), + new PsoStructureEntryInfo(MetaName.BehindThreshold, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.DistanceToWallStanding, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.DistanceToWallCrouching, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.DistanceToWallCoverToCover, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.OCMCrouchedForwardClearanceOffset, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.OCMStandingForwardClearanceOffset, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.OCMSideClearanceDepth, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.OCMClearanceCapsuleRadius, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.OCMSideTestDepth, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.OCMCrouchedHeightOffset, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.OCMStandingHeightOffset, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.CTCSideOffset, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.CTCProbeDepth, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.CTCForwardOffset, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.CTCSpacingOffset, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.CTCCapsuleRadius, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.CTCHeightOffset, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.LowCoverProbeHeight, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.HighCoverProbeHeight, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.CTCClearanceCapsuleRadius, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.CTCClearanceCapsuleStartForwardOffset, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.CTCClearanceCapsuleEndForwardOffset, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.CTCClearanceCapsuleStartZOffset, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.CTCClearanceCapsuleEndZOffset, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo(MetaName.CTCMinDistance, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleEdgeProbeXOffset, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleEdgeProbeZOffset, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxZDiffBetweenCoverPoints, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxZDiffBetweenPedPos, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxHeadingDiffBetweenCTCPoints, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo(MetaName.PedToCoverCapsuleRadius, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.PedToCoverEndPullBackDistance, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo(MetaName.PedToCoverEndZOffset, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxStickInputAngleInfluence, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo(MetaName.IdleYStartOffset, PsoDataType.Float, 168, 0, 0) ); case MetaName.CClipScalingHelper__Tunables: return new PsoStructureInfo(MetaName.CClipScalingHelper__Tunables, 0, 0, 64, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)800236883, PsoDataType.Bool, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3253125136, PsoDataType.Bool, 17, 0, 0), - new PsoStructureEntryInfo((MetaName)3134002215, PsoDataType.Bool, 18, 0, 0), - new PsoStructureEntryInfo((MetaName)2434177980, PsoDataType.Bool, 19, 0, 0), - new PsoStructureEntryInfo((MetaName)3538596479, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)766404597, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2357080007, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3718056384, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)99937628, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)478065483, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)273784445, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)3714157750, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)4071659392, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)589616650, PsoDataType.Float, 56, 0, 0) + new PsoStructureEntryInfo(MetaName.DisableRotationScaling, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableRotationOvershoot, PsoDataType.Bool, 17, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableTranslationScaling, PsoDataType.Bool, 18, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableTranslationOvershoot, PsoDataType.Bool, 19, 0, 0), + new PsoStructureEntryInfo(MetaName.MinVelocityToScale, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTransVelocity, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MinRemainingAnimDurationToScale, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAnimRotationDeltaToScale, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAnimTranslationDeltaToScale, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MinCurrentRotationDeltaToScale, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultMinRotationScalingValue, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultMaxRotationScalingValue, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultMinTranslationScalingValue, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultMaxTranslationScalingValue, PsoDataType.Float, 56, 0, 0) ); case MetaName.CTaskAdvance__Tunables: return new PsoStructureInfo(MetaName.CTaskAdvance__Tunables, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3070881148, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)933911179, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2565736146, PsoDataType.Float, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.TimeToWaitAtPosition, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenPointUpdates, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenSeekChecksAtTacticalPoint, PsoDataType.Float, 24, 0, 0) ); case MetaName.CTaskAimFromGround__Tunables: return new PsoStructureInfo(MetaName.CTaskAimFromGround__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3996785209, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxAimFromGroundTime, PsoDataType.Float, 16, 0, 0) ); case MetaName.CTaskBoatChase__Tunables: return new PsoStructureInfo(MetaName.CTaskBoatChase__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)514678423, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.IdealDistanceForPursue, PsoDataType.Float, 16, 0, 0) ); case MetaName.CTaskBoatCombat__Tunables: return new PsoStructureInfo(MetaName.CTaskBoatCombat__Tunables, 0, 0, 48, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)67050499, PsoDataType.Structure, 16, 0, (MetaName)384450892), - new PsoStructureEntryInfo((MetaName)1337026297, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1222335592, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)1901477334, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)1118835093, PsoDataType.Float, 44, 0, 0) + new PsoStructureEntryInfo(MetaName.Rendering, PsoDataType.Structure, 16, 0, (MetaName)384450892), + new PsoStructureEntryInfo(MetaName.MinSpeedForChase, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeToLookAheadForCollision, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.DepthForLandProbe, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeToWait, PsoDataType.Float, 44, 0, 0) ); case (MetaName)384450892: return new PsoStructureInfo((MetaName)384450892, 0, 0, 16, new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)961255660, PsoDataType.Bool, 9, 0, 0), - new PsoStructureEntryInfo((MetaName)1166908668, PsoDataType.Bool, 10, 0, 0) + new PsoStructureEntryInfo(MetaName.CollisionProbe, PsoDataType.Bool, 9, 0, 0), + new PsoStructureEntryInfo(MetaName.LandProbe, PsoDataType.Bool, 10, 0, 0) ); case MetaName.CTaskBoatStrafe__Tunables: return new PsoStructureInfo(MetaName.CTaskBoatStrafe__Tunables, 0, 0, 40, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3311720447, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3249320190, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2482756980, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3143134944, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)4125886772, PsoDataType.Float, 32, 0, 0) + new PsoStructureEntryInfo(MetaName.AdditionalDistanceForApproach, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.AdditionalDistanceForStrafe, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.CruiseSpeedForStrafe, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.RotationLookAhead, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAdjustmentLookAhead, PsoDataType.Float, 32, 0, 0) ); case MetaName.CTaskDraggingToSafety__Tunables: return new PsoStructureInfo(MetaName.CTaskDraggingToSafety__Tunables, 0, 0, 208, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1865732807, PsoDataType.Structure, 16, 0, (MetaName)1469164696), - new PsoStructureEntryInfo((MetaName)67050499, PsoDataType.Structure, 40, 0, (MetaName)512689970), - new PsoStructureEntryInfo((MetaName)122331865, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)417867439, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)4142738100, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)1858185525, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)3780096928, PsoDataType.SInt, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)3336702639, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)3908973904, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)2465106291, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)383086153, PsoDataType.Float3, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)3440934413, PsoDataType.Float3, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)4100111705, PsoDataType.Float3, 128, 0, 0), - new PsoStructureEntryInfo((MetaName)2471124155, PsoDataType.Float, 144, 0, 0), - new PsoStructureEntryInfo((MetaName)2346320415, PsoDataType.Float, 148, 0, 0), - new PsoStructureEntryInfo((MetaName)1046969538, PsoDataType.Float, 152, 0, 0), - new PsoStructureEntryInfo((MetaName)3926218692, PsoDataType.Float, 156, 0, 0), - new PsoStructureEntryInfo((MetaName)3273119465, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)1481327584, PsoDataType.SInt, 164, 0, 0), - new PsoStructureEntryInfo((MetaName)2294664490, PsoDataType.Float, 168, 0, 0), - new PsoStructureEntryInfo((MetaName)2521320953, PsoDataType.Float, 172, 0, 0), - new PsoStructureEntryInfo((MetaName)3348150388, PsoDataType.Float, 176, 0, 0), - new PsoStructureEntryInfo((MetaName)4029768824, PsoDataType.Float, 180, 0, 0), - new PsoStructureEntryInfo((MetaName)1288859935, PsoDataType.Float, 184, 0, 0), - new PsoStructureEntryInfo((MetaName)2074438621, PsoDataType.Float, 188, 0, 0), - new PsoStructureEntryInfo((MetaName)3272441861, PsoDataType.Float, 192, 0, 0) + new PsoStructureEntryInfo(MetaName.ObstructionProbe, PsoDataType.Structure, 16, 0, (MetaName)1469164696), + new PsoStructureEntryInfo(MetaName.Rendering, PsoDataType.Structure, 40, 0, (MetaName)512689970), + new PsoStructureEntryInfo(MetaName.MaxTimeForStream, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverMinDistance, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverMaxDistance, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.LookAtUpdateTime, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.LookAtTime, PsoDataType.SInt, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverWeightDistance, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverWeightUsage, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverWeightValue, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.SeparationPickup, PsoDataType.Float3, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.SeparationDrag, PsoDataType.Float3, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.SeparationPutdown, PsoDataType.Float3, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.AbortAimedAtMinDistance, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverResponseTimeout, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDotForPickupDirection, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForHolster, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForPedToBeVeryCloseToCover, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxNumPedsAllowedToBeVeryCloseToCover, PsoDataType.SInt, 164, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenCoverPointSearches, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceToSetApproachPosition, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceToConsiderTooClose, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceToAlwaysLookAtTarget, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxHeightDifferenceToApproachTarget, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxXYDistanceToApproachTarget, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeToBeObstructed, PsoDataType.Float, 192, 0, 0) ); case (MetaName)1469164696: return new PsoStructureInfo((MetaName)1469164696, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Height, PsoDataType.Float, 8, 0, 0), new PsoStructureEntryInfo(MetaName.Radius, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)4011421405, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.ExtraHeightForGround, PsoDataType.Float, 16, 0, 0) ); case (MetaName)512689970: return new PsoStructureInfo((MetaName)512689970, 0, 0, 16, new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1865732807, PsoDataType.Bool, 9, 0, 0) + new PsoStructureEntryInfo(MetaName.ObstructionProbe, PsoDataType.Bool, 9, 0, 0) ); case MetaName.CTaskHeliChase__Tunables: return new PsoStructureInfo(MetaName.CTaskHeliChase__Tunables, 0, 0, 112, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1925470428, PsoDataType.Structure, 16, 0, (MetaName)1407012688), - new PsoStructureEntryInfo((MetaName)4083276309, PsoDataType.Structure, 40, 0, (MetaName)1407012688), - new PsoStructureEntryInfo((MetaName)422585777, PsoDataType.Structure, 64, 0, (MetaName)1407012688), - new PsoStructureEntryInfo((MetaName)2018929951, PsoDataType.SInt, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)947493336, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)1781466093, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)2895901568, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)3358534575, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)4175205823, PsoDataType.Float, 108, 0, 0) + new PsoStructureEntryInfo(MetaName.DriftX, PsoDataType.Structure, 16, 0, (MetaName)1407012688), + new PsoStructureEntryInfo(MetaName.DriftY, PsoDataType.Structure, 40, 0, (MetaName)1407012688), + new PsoStructureEntryInfo(MetaName.DriftZ, PsoDataType.Structure, 64, 0, (MetaName)1407012688), + new PsoStructureEntryInfo(MetaName.MinHeightAboveTerrain, PsoDataType.SInt, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.SlowDownDistanceMin, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.SlowDownDistanceMax, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.CruiseSpeed, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForOrientation, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.NearDistanceForOrientation, PsoDataType.Float, 108, 0, 0) ); case (MetaName)1407012688: return new PsoStructureInfo((MetaName)1407012688, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)2782043564, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)4282800535, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)1240074404, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1154906885, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.MinValueForCorrection, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxValueForCorrection, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MinRate, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRate, PsoDataType.Float, 20, 0, 0) ); case MetaName.CTaskHeliCombat__Tunables: return new PsoStructureInfo(MetaName.CTaskHeliCombat__Tunables, 0, 0, 64, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2342544226, PsoDataType.Structure, 16, 0, (MetaName)960897278) + new PsoStructureEntryInfo(MetaName.Chase, PsoDataType.Structure, 16, 0, (MetaName)960897278) ); case (MetaName)960897278: return new PsoStructureInfo((MetaName)960897278, 0, 0, 48, - new PsoStructureEntryInfo((MetaName)1724998945, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)69361213, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)4229384679, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3996070487, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)4066129521, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3765475034, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3764687490, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)3515816840, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)3283771357, PsoDataType.Float, 40, 0, 0) + new PsoStructureEntryInfo(MetaName.MinSpeed, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTargetOffsetX, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTargetOffsetX, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTargetOffsetY, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTargetOffsetY, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTargetOffsetZ, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTargetOffsetZ, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTargetOffsetZ_TargetInAir, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTargetOffsetZ_TargetInAir, PsoDataType.Float, 40, 0, 0) ); case MetaName.CTaskPlaneChase__Tunables: return new PsoStructureInfo(MetaName.CTaskPlaneChase__Tunables, 0, 0, 16, @@ -7950,45 +7950,45 @@ namespace CodeWalker.GameFiles case MetaName.CTaskVariedAimPose__Tunables: return new PsoStructureInfo(MetaName.CTaskVariedAimPose__Tunables, 0, 0, 120, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2658395586, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3603257907, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1274013705, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3601324404, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)858243059, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2710536525, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)868109097, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2430060993, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeBeforeCanChooseNewPose, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeBeforeNewPose, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeBeforeNewPose, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.DistanceForMinTimeBeforeNewPose, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.DistanceForMaxTimeBeforeNewPose, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.AvoidNearbyPedHorizontal, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.AvoidNearbyPedVertical, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.AvoidNearbyPedDotThreshold, PsoDataType.Float, 44, 0, 0), new PsoStructureEntryInfo(MetaName.TargetRadius, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)3817763328, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)2661194585, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeBetweenReactions, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAnimOffsetMagnitude, PsoDataType.Float, 56, 0, 0), new PsoStructureEntryInfo(MetaName.Rate, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)803259673, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)2236196658, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)2561996113, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)1752177996, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)1942207582, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)1435927021, PsoDataType.SInt, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)2418474749, PsoDataType.Bool, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)836857486, PsoDataType.String, 92, 7, 0), - new PsoStructureEntryInfo((MetaName)607364341, PsoDataType.String, 96, 7, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceToCareAboutBlockingLineOfSight, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceToUseUrgentTransitions, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeToUseUrgentTransitionsWhenThreatened, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeBetweenReactionChecksForGunAimedAt, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.ChancesToReactForGunAimedAt, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxClipsToCheckPerFrame, PsoDataType.SInt, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.DebugDraw, PsoDataType.Bool, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultStandingPose, PsoDataType.String, 92, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultCrouchingPose, PsoDataType.String, 96, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)896772506), - new PsoStructureEntryInfo((MetaName)877489286, PsoDataType.Array, 104, 0, (MetaName)22) + new PsoStructureEntryInfo(MetaName.AimPoses, PsoDataType.Array, 104, 0, (MetaName)22) ); case (MetaName)896772506: return new PsoStructureInfo((MetaName)896772506, 0, 0, 40, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1674350800, PsoDataType.Bool, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)4172129738, PsoDataType.Bool, 13, 0, 0), - new PsoStructureEntryInfo((MetaName)3859145463, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3333920819, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.IsCrouching, PsoDataType.Bool, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.IsStationary, PsoDataType.Bool, 13, 0, 0), + new PsoStructureEntryInfo(MetaName.LoopClipSetId, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.LoopClipId, PsoDataType.String, 20, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2263463390), - new PsoStructureEntryInfo((MetaName)2275723194, PsoDataType.Array, 24, 0, (MetaName)5) + new PsoStructureEntryInfo(MetaName.Transitions, PsoDataType.Array, 24, 0, (MetaName)5) ); case (MetaName)2263463390: return new PsoStructureInfo((MetaName)2263463390, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)1765007258, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ToPose, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.ClipSetId, PsoDataType.String, 12, 7, 0), - new PsoStructureEntryInfo((MetaName)1300775131, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.ClipId, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo(MetaName.Rate, PsoDataType.Float, 20, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)966624441), new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.Flags, 24, 2, (MetaName)524292) @@ -7996,119 +7996,119 @@ namespace CodeWalker.GameFiles case MetaName.CTaskVehicleChase__Tunables: return new PsoStructureInfo(MetaName.CTaskVehicleChase__Tunables, 0, 0, 264, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2443685244, PsoDataType.Structure, 16, 0, (MetaName)653343499), - new PsoStructureEntryInfo((MetaName)2210395489, PsoDataType.Structure, 32, 0, (MetaName)45194904), - new PsoStructureEntryInfo((MetaName)2777285984, PsoDataType.Structure, 56, 0, (MetaName)2956630463), - new PsoStructureEntryInfo((MetaName)3087082769, PsoDataType.Structure, 80, 0, (MetaName)533527745), - new PsoStructureEntryInfo((MetaName)1954107545, PsoDataType.Structure, 104, 0, (MetaName)2379651736), - new PsoStructureEntryInfo((MetaName)2022288628, PsoDataType.Structure, 128, 0, (MetaName)3309127383), - new PsoStructureEntryInfo((MetaName)625597120, PsoDataType.Structure, 152, 0, (MetaName)2082149421), - new PsoStructureEntryInfo((MetaName)766857224, PsoDataType.Structure, 216, 0, (MetaName)3284002922), - new PsoStructureEntryInfo((MetaName)1930122576, PsoDataType.Float, 248, 0, 0), - new PsoStructureEntryInfo((MetaName)2475600241, PsoDataType.Float, 252, 0, 0), - new PsoStructureEntryInfo((MetaName)1719190513, PsoDataType.Float, 256, 0, 0) + new PsoStructureEntryInfo(MetaName.CloseDistance, PsoDataType.Structure, 16, 0, (MetaName)653343499), + new PsoStructureEntryInfo(MetaName.Block, PsoDataType.Structure, 32, 0, (MetaName)45194904), + new PsoStructureEntryInfo(MetaName.Pursue, PsoDataType.Structure, 56, 0, (MetaName)2956630463), + new PsoStructureEntryInfo(MetaName.Ram, PsoDataType.Structure, 80, 0, (MetaName)533527745), + new PsoStructureEntryInfo(MetaName.SpinOut, PsoDataType.Structure, 104, 0, (MetaName)2379651736), + new PsoStructureEntryInfo(MetaName.PullAlongside, PsoDataType.Structure, 128, 0, (MetaName)3309127383), + new PsoStructureEntryInfo(MetaName.AggressiveMove, PsoDataType.Structure, 152, 0, (MetaName)2082149421), + new PsoStructureEntryInfo(MetaName.Cheat, PsoDataType.Structure, 216, 0, (MetaName)3284002922), + new PsoStructureEntryInfo(MetaName.MaxDotForHandBrake, PsoDataType.Float, 248, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenCarChaseShockingEvents, PsoDataType.Float, 252, 0, 0), + new PsoStructureEntryInfo(MetaName.DistanceForCarChaseShockingEvents, PsoDataType.Float, 256, 0, 0) ); case (MetaName)653343499: return new PsoStructureInfo((MetaName)653343499, 0, 0, 16, - new PsoStructureEntryInfo((MetaName)3423985846, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)3514547823, PsoDataType.Float, 12, 0, 0) + new PsoStructureEntryInfo(MetaName.MinDistanceToStart, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceToContinue, PsoDataType.Float, 12, 0, 0) ); case (MetaName)45194904: return new PsoStructureInfo((MetaName)45194904, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)1082929500, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)126845285, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)4080325939, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1829902171, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxDotToStartFromAnalyze, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDotToContinueFromAnalyze, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTargetSpeedToStartFromPursue, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTargetSpeedToContinueFromPursue, PsoDataType.Float, 20, 0, 0) ); case (MetaName)2956630463: return new PsoStructureInfo((MetaName)2956630463, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)2497181955, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)158897950, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)2913237777, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.MinDotToStartFromAnalyze, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDotToContinueFromAnalyze, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.IdealDistance, PsoDataType.Float, 16, 0, 0) ); case (MetaName)533527745: return new PsoStructureInfo((MetaName)533527745, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)474269749, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)4080325939, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)1829902171, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.StraightLineDistance, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTargetSpeedToStartFromPursue, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTargetSpeedToContinueFromPursue, PsoDataType.Float, 16, 0, 0) ); case (MetaName)2379651736: return new PsoStructureInfo((MetaName)2379651736, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)474269749, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)4080325939, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)1829902171, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.StraightLineDistance, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTargetSpeedToStartFromPursue, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTargetSpeedToContinueFromPursue, PsoDataType.Float, 16, 0, 0) ); case (MetaName)3309127383: return new PsoStructureInfo((MetaName)3309127383, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)474269749, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)4080325939, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)1829902171, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.StraightLineDistance, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTargetSpeedToStartFromPursue, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTargetSpeedToContinueFromPursue, PsoDataType.Float, 16, 0, 0) ); case (MetaName)2082149421: return new PsoStructureInfo((MetaName)2082149421, 0, 0, 64, - new PsoStructureEntryInfo((MetaName)648063710, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1707529261, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)2231898585, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2501833676, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3842476462, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2146950936, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1655056873, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)3306631916, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)3403479156, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)509314747, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)355255193, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)46040720, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)1145877267, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)3622347383, PsoDataType.Float, 60, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxDistanceToStartFromPursue, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDotToStartFromPursue, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSpeedLeewayToStartFromPursue, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTargetSteerAngleToStartFromPursue, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceToContinueFromPursue, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDotToContinueFromPursue, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeInStateToContinueFromPursue, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTargetSteerAngleToContinueFromPursue, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDelay, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDelay, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.WeightToRamFromPursue, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.WeightToBlockFromPursue, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.WeightToSpinOutFromPursue, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.WeightToPullAlongsideFromPursue, PsoDataType.Float, 60, 0, 0) ); case (MetaName)3284002922: return new PsoStructureInfo((MetaName)3284002922, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)3207905455, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1861379728, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)4239471096, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3574337729, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1745227706, PsoDataType.Float, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.MinSpeedDifferenceForPowerAdjustment, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSpeedDifferenceForPowerAdjustment, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.PowerForMinAdjustment, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.PowerForMaxAdjustment, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.destroySuppressor, PsoDataType.Float, 24, 0, 0) ); case MetaName.CTaskVehiclePersuit__Tunables: return new PsoStructureInfo(MetaName.CTaskVehiclePersuit__Tunables, 0, 0, 184, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)432947414, PsoDataType.Structure, 16, 0, (MetaName)2385857407), - new PsoStructureEntryInfo((MetaName)3742382496, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)3275063787, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)4169133183, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)2051473778, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)1876514812, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)922557972, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)2541599029, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)150170926, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)13763777, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)2798838940, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)3823614053, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)979399865, PsoDataType.Float, 116, 0, 0), - new PsoStructureEntryInfo((MetaName)1223491754, PsoDataType.Float, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)3023143341, PsoDataType.Float, 124, 0, 0), - new PsoStructureEntryInfo((MetaName)3439953457, PsoDataType.Float, 128, 0, 0), - new PsoStructureEntryInfo((MetaName)3100475498, PsoDataType.Float, 132, 0, 0), - new PsoStructureEntryInfo((MetaName)4258519451, PsoDataType.Float, 136, 0, 0), - new PsoStructureEntryInfo((MetaName)3352329382, PsoDataType.Float, 140, 0, 0), - new PsoStructureEntryInfo((MetaName)3458993355, PsoDataType.Float, 144, 0, 0), - new PsoStructureEntryInfo((MetaName)48543250, PsoDataType.Float, 148, 0, 0), - new PsoStructureEntryInfo((MetaName)746970568, PsoDataType.Float, 152, 0, 0), - new PsoStructureEntryInfo((MetaName)3151657361, PsoDataType.Float, 156, 0, 0), - new PsoStructureEntryInfo((MetaName)3125460893, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)1174072295, PsoDataType.Float, 164, 0, 0), - new PsoStructureEntryInfo((MetaName)1727051436, PsoDataType.Float, 168, 0, 0), - new PsoStructureEntryInfo((MetaName)3385636076, PsoDataType.Float, 172, 0, 0), - new PsoStructureEntryInfo((MetaName)3856148267, PsoDataType.SInt, 176, 0, 0) + new PsoStructureEntryInfo(MetaName.ApproachTarget, PsoDataType.Structure, 16, 0, (MetaName)2385857407), + new PsoStructureEntryInfo(MetaName.ObstructionProbeAngleA, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.ObstructionProbeAngleB, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.ObstructionProbeAngleC, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.IdealDistanceOnBikeAndTargetUnarmed, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.IdealDistanceOnBikeAndTargetArmed, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.IdealDistanceInVehicleAndTargetUnarmed, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.IdealDistanceInVehicleAndTargetArmed, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.IdealDistanceShotAt, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.IdealDistanceCouldLeaveCar, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.DistanceToStopMultiplier, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.DistanceToStopMassIdeal, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.DistanceToStopMassWeight, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDriverTimeToLeaveVehicle, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDriverTimeToLeaveVehicle, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo(MetaName.MinPassengerTimeToLeaveVehicle, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPassengerTimeToLeaveVehicle, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSpeedForEarlyCombatExit, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSpeedToJumpOutOfVehicle, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeBoatOutOfWaterForExit, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo(MetaName.AvoidanceMarginForOtherLawEnforcementVehicles, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeToWaitForOtherPedToExit, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDelayExitTime, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDelayExitTime, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.PreventShufflingExtraRange, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeWaitForExitBeforeWarp, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTargetStandingOnTrainSpeed, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo(MetaName.DistanceToFollowInCar, PsoDataType.SInt, 176, 0, 0) ); case (MetaName)2385857407: return new PsoStructureInfo((MetaName)2385857407, 0, 0, 56, - new PsoStructureEntryInfo((MetaName)3935882297, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2895901568, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)1501439076, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)587550606, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1914453083, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)1604976859, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.TargetArriveDist, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.CruiseSpeed, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceToConsiderClose, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.CruiseSpeedWhenClose, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.CruiseSpeedWhenObstructedByLawEnforcementPed, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.CruiseSpeedWhenObstructedByLawEnforcementVehicle, PsoDataType.Float, 28, 0, 0), new PsoStructureEntryInfo((MetaName)1208093369, PsoDataType.Float, 32, 0, 0), new PsoStructureEntryInfo((MetaName)4019091857, PsoDataType.Float, 36, 0, 0), new PsoStructureEntryInfo((MetaName)2510151940, PsoDataType.Float, 40, 0, 0), @@ -8118,27 +8118,27 @@ namespace CodeWalker.GameFiles case MetaName.CTaskVehicleCombat__Tunables: return new PsoStructureInfo(MetaName.CTaskVehicleCombat__Tunables, 0, 0, 48, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)470555105, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)283868640, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1335171882, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)730951251, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)4058868243, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)3427043837, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)535072586, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeBetweenShootOutTiresGlobal, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeBetweenShootOutTiresGlobal, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeInCombatToShootOutTires, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeInCombatToShootOutTires, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ChancesToApplyReactionWhenShootingOutTire, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeToPrepareWeapon, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeToPrepareWeapon, PsoDataType.Float, 40, 0, 0), new PsoStructureEntryInfo((MetaName)1726607124, PsoDataType.UInt, 44, 0, 0) ); case MetaName.CTaskSearchBase__Tunables: return new PsoStructureInfo(MetaName.CTaskSearchBase__Tunables, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2406795129, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2240856053, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3433998695, PsoDataType.Float, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.TimeToGiveUp, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPositionVariance, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDirectionVariance, PsoDataType.Float, 24, 0, 0) ); case MetaName.CTaskSearchInAutomobile__Tunables: return new PsoStructureInfo(MetaName.CTaskSearchInAutomobile__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)335985570, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2895901568, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.FleeOffset, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.CruiseSpeed, PsoDataType.Float, 20, 0, 0) ); case MetaName.CTaskSearchInBoat__Tunables: return new PsoStructureInfo(MetaName.CTaskSearchInBoat__Tunables, 0, 0, 16, @@ -8147,322 +8147,322 @@ namespace CodeWalker.GameFiles case MetaName.CTaskSearchInHeli__Tunables: return new PsoStructureInfo(MetaName.CTaskSearchInHeli__Tunables, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)335985570, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2895901568, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2018929951, PsoDataType.SInt, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.FleeOffset, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.CruiseSpeed, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHeightAboveTerrain, PsoDataType.SInt, 24, 0, 0) ); case MetaName.CTaskSearchOnFoot__Tunables: return new PsoStructureInfo(MetaName.CTaskSearchOnFoot__Tunables, 0, 0, 40, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)335985570, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.FleeOffset, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo(MetaName.TargetRadius, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1468879986, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)4110448569, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)846083482, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.CompletionRadius, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.SlowDownDistance, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.FleeSafeDistance, PsoDataType.Float, 32, 0, 0), new PsoStructureEntryInfo(MetaName.MoveBlendRatio, PsoDataType.Float, 36, 0, 0) ); case MetaName.CTaskShootOutTire__Tunables: return new PsoStructureInfo(MetaName.CTaskShootOutTire__Tunables, 0, 0, 48, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3438052999, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2480389571, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2789360544, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)1841691026, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2658068209, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)3748385313, PsoDataType.SInt, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)672649965, PsoDataType.Float, 40, 0, 0) + new PsoStructureEntryInfo(MetaName.MinTimeoutToAcquireLineOfSight, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeoutToAcquireLineOfSight, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenLineOfSightChecks, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeToWaitForShot, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeToWaitForShot, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxWaitForShotFailures, PsoDataType.SInt, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSpeedToApplyReaction, PsoDataType.Float, 40, 0, 0) ); case MetaName.CTaskTargetUnreachable__Tunables: return new PsoStructureInfo(MetaName.CTaskTargetUnreachable__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1932437978, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.fTimeBetweenRouteSearches, PsoDataType.Float, 16, 0, 0) ); case MetaName.CTaskTargetUnreachableInInterior__Tunables: return new PsoStructureInfo(MetaName.CTaskTargetUnreachableInInterior__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2195773039, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.fDirectionTestProbeLength, PsoDataType.Float, 16, 0, 0) ); case MetaName.CTaskTargetUnreachableInExterior__Tunables: return new PsoStructureInfo(MetaName.CTaskTargetUnreachableInExterior__Tunables, 0, 0, 48, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2083139838, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1798086221, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.RangePercentage, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceFromNavMesh, PsoDataType.Float, 20, 0, 0), new PsoStructureEntryInfo(MetaName.TargetRadius, PsoDataType.Float, 24, 0, 0), new PsoStructureEntryInfo(MetaName.MoveBlendRatio, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1468879986, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)460015891, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)2597134309, PsoDataType.Float, 40, 0, 0) + new PsoStructureEntryInfo(MetaName.CompletionRadius, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeToWait, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeToWait, PsoDataType.Float, 40, 0, 0) ); case MetaName.CPedTargetting__Tunables: return new PsoStructureInfo(MetaName.CPedTargetting__Tunables, 0, 0, 64, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1679672363, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3550430565, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1239531869, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3653083064, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2927479807, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.fExistingTargetScoreWeight, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.fTargetingInactiveDisableTime, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.fBlockedLosWeighting, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.fTimeToIgnoreBlockedLosWeighting, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.fPlayerHighThreatWeighting, PsoDataType.Float, 32, 0, 0), new PsoStructureEntryInfo((MetaName)1742395925, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)3270779927, PsoDataType.SInt, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)1772648844, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)4134350078, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)3975640219, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)653564341, PsoDataType.SInt, 56, 0, 0) + new PsoStructureEntryInfo(MetaName.iTargetNotSeenIgnoreTimeMs, PsoDataType.SInt, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.fPlayerThreatDistance, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.fPlayerDirectThreatDistance, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.fPlayerBeingTargetedExtraDistance, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.iPlayerDirectThreatTimeMs, PsoDataType.SInt, 56, 0, 0) ); case MetaName.CTaskPursueCriminal__Tunables: return new PsoStructureInfo(MetaName.CTaskPursueCriminal__Tunables, 0, 0, 64, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)4037909654, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)702493934, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3332963351, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2732547664, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1100440084, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)459862259, PsoDataType.SInt, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)783802328, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)972295474, PsoDataType.SInt, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)3952273225, PsoDataType.SInt, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2958876793, PsoDataType.Bool, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)1975950903, PsoDataType.Bool, 53, 0, 0), - new PsoStructureEntryInfo((MetaName)4063126636, PsoDataType.Float, 56, 0, 0) + new PsoStructureEntryInfo(MetaName.MinDistanceToFindVehicle, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceToFindVehicle, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxHeightDifference, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.DotProductFacing, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.DotProductBehind, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.DistanceToFollowVehicleBeforeFlee, PsoDataType.SInt, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.DistanceToSignalVehiclePursuitToCriminal, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeToSignalVehiclePursuitToCriminalMin, PsoDataType.SInt, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeToSignalVehiclePursuitToCriminalMax, PsoDataType.SInt, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.DrawDebug, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.AllowPursuePlayer, PsoDataType.Bool, 53, 0, 0), + new PsoStructureEntryInfo(MetaName.CriminalVehicleMinStartSpeed, PsoDataType.Float, 56, 0, 0) ); case MetaName.CTaskReactToPursuit__Tunables: return new PsoStructureInfo(MetaName.CTaskReactToPursuit__Tunables, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3344957179, PsoDataType.SInt, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)454716601, PsoDataType.SInt, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1520777858, PsoDataType.Float, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.MinTimeToFleeInVehicle, PsoDataType.SInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeToFleeInVehicle, PsoDataType.SInt, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.FleeSpeedInVehicle, PsoDataType.Float, 24, 0, 0) ); case MetaName.CTaskStealVehicle__Tunables: return new PsoStructureInfo(MetaName.CTaskStealVehicle__Tunables, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)702493934, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1506267647, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1289358659, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3564233674, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3908221492, PsoDataType.Bool, 29, 0, 0), - new PsoStructureEntryInfo((MetaName)3993007617, PsoDataType.Bool, 30, 0, 0), - new PsoStructureEntryInfo((MetaName)1365518895, PsoDataType.Bool, 31, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxDistanceToFindVehicle, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceToPursueVehicle, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.DistanceToRunToVehicle, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.CanStealPlayersVehicle, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.CanStealCarsAtLights, PsoDataType.Bool, 29, 0, 0), + new PsoStructureEntryInfo(MetaName.CanStealParkedCars, PsoDataType.Bool, 30, 0, 0), + new PsoStructureEntryInfo(MetaName.CanStealStationaryCars, PsoDataType.Bool, 31, 0, 0) ); case MetaName.CLookAtHistory__Tunables: return new PsoStructureInfo(MetaName.CLookAtHistory__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3400740468, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1743809398, PsoDataType.UInt, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.HistoryCosineThreshold, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MemoryDuration, PsoDataType.UInt, 20, 0, 0) ); case MetaName.CAmbientLookAt__Tunables: return new PsoStructureInfo(MetaName.CAmbientLookAt__Tunables, 0, 0, 416, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2539614217, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2251904831, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)769039659, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)491173128, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2905104124, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1036503478, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)825960985, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2542169368, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)408684949, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)831935567, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)3266178324, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)95380765, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)1173793332, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)2718645532, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)2407947760, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)835021064, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)3463312294, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)1313622498, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)214316948, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)2396547402, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)4057155416, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)1209452937, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)2209113178, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)2538889403, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)2688373686, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)420424724, PsoDataType.Float, 116, 0, 0), - new PsoStructureEntryInfo((MetaName)645696278, PsoDataType.Float, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)2883008619, PsoDataType.Float, 124, 0, 0), - new PsoStructureEntryInfo((MetaName)2714692767, PsoDataType.Float, 128, 0, 0), - new PsoStructureEntryInfo((MetaName)2278997613, PsoDataType.Float, 132, 0, 0), - new PsoStructureEntryInfo((MetaName)3120269183, PsoDataType.Float, 136, 0, 0), - new PsoStructureEntryInfo((MetaName)3099253594, PsoDataType.Float, 140, 0, 0), - new PsoStructureEntryInfo((MetaName)1493940343, PsoDataType.Float, 144, 0, 0), - new PsoStructureEntryInfo((MetaName)1573945112, PsoDataType.Float, 148, 0, 0), - new PsoStructureEntryInfo((MetaName)3445942281, PsoDataType.Float, 152, 0, 0), - new PsoStructureEntryInfo((MetaName)1578175347, PsoDataType.Float, 156, 0, 0), - new PsoStructureEntryInfo((MetaName)813645662, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)975579249, PsoDataType.Float, 164, 0, 0), - new PsoStructureEntryInfo((MetaName)2971794167, PsoDataType.Float, 168, 0, 0), - new PsoStructureEntryInfo((MetaName)786235913, PsoDataType.Float, 172, 0, 0), - new PsoStructureEntryInfo((MetaName)3388322333, PsoDataType.Float, 176, 0, 0), - new PsoStructureEntryInfo((MetaName)592353395, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultLookAtThreshold, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultDistanceFromWorldCenter, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.ExtendedDistanceFromWorldCenter, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceToScanLookAts, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.BaseTimeToLook, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.AITimeBetweenLookAtsFailureMin, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.AITimeBetweenLookAtsFailureMax, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.PlayerTimeBetweenLookAtsMin, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.PlayerTimeBetweenLookAtsMax, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.PlayerTimeMyVehicleLookAtsMin, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.PlayerTimeMyVehicleLookAtsMax, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenScenarioScans, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.ScenarioScanOffsetDistance, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.ScenarioScanRadius, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPlayerScore, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.BasicPedScore, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.BasicVehicleScore, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.BasicObjectScore, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.BehindPedModifier, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.PlayerPedModifier, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.WalkingRoundPedModifier, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.RunningPedModifier, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.ClimbingOrJumpingPedModifier, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.FightingModifier, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.JackingModifier, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.HangingAroundVehicleModifier, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.ScenarioToScenarioPedModifier, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.GangScenarioPedToPlayerModifier, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo(MetaName.ApproachingPlayerModifier, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.ClosePlayerModifier, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo(MetaName.InRangePlayerModifier, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo(MetaName.InRangeDrivingPlayerModifier, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo(MetaName.HoldingWeaponPlayerModifier, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo(MetaName.CoveredInBloodPlayerModifier, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo(MetaName.RagdollingModifier, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.PickingUpBikeModifier, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo(MetaName.RecklessCarModifier, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.RecentlyLookedAtPlayerModifier, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo(MetaName.RecentlyLookedAtEntityModifier, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo(MetaName.HighImportanceModifier, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo(MetaName.MediumImportanceModifier, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo(MetaName.LowImportanceModifier, PsoDataType.Float, 180, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo((MetaName)1071210221, PsoDataType.Array, 184, 0, (MetaName)43), - new PsoStructureEntryInfo((MetaName)1168459099, PsoDataType.Float, 200, 0, 0), - new PsoStructureEntryInfo((MetaName)199234802, PsoDataType.Float, 204, 0, 0), - new PsoStructureEntryInfo((MetaName)3642651832, PsoDataType.Float, 208, 0, 0), - new PsoStructureEntryInfo((MetaName)4108478935, PsoDataType.Float, 212, 0, 0), - new PsoStructureEntryInfo((MetaName)390614501, PsoDataType.Float, 216, 0, 0), - new PsoStructureEntryInfo((MetaName)1078762608, PsoDataType.Float, 220, 0, 0), - new PsoStructureEntryInfo((MetaName)1479577695, PsoDataType.Float, 224, 0, 0), - new PsoStructureEntryInfo((MetaName)3008009434, PsoDataType.Float, 228, 0, 0), - new PsoStructureEntryInfo((MetaName)334092093, PsoDataType.Float, 232, 0, 0), - new PsoStructureEntryInfo((MetaName)2831412815, PsoDataType.Float, 236, 0, 0), - new PsoStructureEntryInfo((MetaName)101327813, PsoDataType.Float, 240, 0, 0), - new PsoStructureEntryInfo((MetaName)1194287595, PsoDataType.Float, 244, 0, 0), - new PsoStructureEntryInfo((MetaName)3233483053, PsoDataType.Float, 248, 0, 0), - new PsoStructureEntryInfo((MetaName)395317425, PsoDataType.Float, 252, 0, 0), - new PsoStructureEntryInfo((MetaName)1849354099, PsoDataType.Float, 256, 0, 0), - new PsoStructureEntryInfo((MetaName)2302698674, PsoDataType.Float, 260, 0, 0), - new PsoStructureEntryInfo((MetaName)1461747338, PsoDataType.Float, 264, 0, 0), - new PsoStructureEntryInfo((MetaName)372581586, PsoDataType.Float, 268, 0, 0), - new PsoStructureEntryInfo((MetaName)3324445918, PsoDataType.Float, 272, 0, 0), - new PsoStructureEntryInfo((MetaName)1018069509, PsoDataType.Float, 276, 0, 0), - new PsoStructureEntryInfo((MetaName)1245516390, PsoDataType.Float, 280, 0, 0), - new PsoStructureEntryInfo((MetaName)369519904, PsoDataType.UByte, 284, 0, 0), - new PsoStructureEntryInfo((MetaName)3873670579, PsoDataType.UByte, 285, 0, 0), - new PsoStructureEntryInfo((MetaName)248477757, PsoDataType.Bool, 286, 0, 0), - new PsoStructureEntryInfo((MetaName)674468988, PsoDataType.Bool, 287, 0, 0), - new PsoStructureEntryInfo((MetaName)1289065068, PsoDataType.Float, 288, 0, 0), - new PsoStructureEntryInfo((MetaName)894057762, PsoDataType.Float, 292, 0, 0), - new PsoStructureEntryInfo((MetaName)2806951563, PsoDataType.Float, 296, 0, 0), - new PsoStructureEntryInfo((MetaName)1078877377, PsoDataType.Float, 300, 0, 0), - new PsoStructureEntryInfo((MetaName)527596719, PsoDataType.Float, 304, 0, 0), - new PsoStructureEntryInfo((MetaName)389125880, PsoDataType.Float, 308, 0, 0), - new PsoStructureEntryInfo((MetaName)3709479259, PsoDataType.Float, 312, 0, 0), - new PsoStructureEntryInfo((MetaName)2179898613, PsoDataType.Bool, 316, 0, 0), - new PsoStructureEntryInfo((MetaName)3589690545, PsoDataType.Enum, 320, 0, (MetaName)454750378), - new PsoStructureEntryInfo((MetaName)1321758856, PsoDataType.Enum, 324, 0, (MetaName)454750378), - new PsoStructureEntryInfo((MetaName)1972120707, PsoDataType.Enum, 328, 0, (MetaName)454750378), - new PsoStructureEntryInfo((MetaName)3786041740, PsoDataType.Enum, 332, 0, (MetaName)454750378), - new PsoStructureEntryInfo((MetaName)3198525203, PsoDataType.Enum, 336, 0, (MetaName)1931302076), - new PsoStructureEntryInfo((MetaName)1217360623, PsoDataType.Enum, 340, 0, (MetaName)1931302076), - new PsoStructureEntryInfo((MetaName)1566172518, PsoDataType.Enum, 344, 0, (MetaName)1931302076), - new PsoStructureEntryInfo((MetaName)3988230675, PsoDataType.Enum, 348, 0, (MetaName)1931302076), - new PsoStructureEntryInfo((MetaName)3701159057, PsoDataType.Enum, 352, 0, (MetaName)4044698613), - new PsoStructureEntryInfo((MetaName)3819703101, PsoDataType.Enum, 356, 0, (MetaName)4044698613), - new PsoStructureEntryInfo((MetaName)3198801841, PsoDataType.Enum, 360, 0, (MetaName)4044698613), - new PsoStructureEntryInfo((MetaName)299126851, PsoDataType.Float, 364, 0, 0), - new PsoStructureEntryInfo((MetaName)242751779, PsoDataType.Float, 368, 0, 0), - new PsoStructureEntryInfo((MetaName)2740963979, PsoDataType.Float, 372, 0, 0), - new PsoStructureEntryInfo((MetaName)2521394702, PsoDataType.Float, 376, 0, 0), - new PsoStructureEntryInfo((MetaName)4188496022, PsoDataType.UInt, 380, 0, 0), - new PsoStructureEntryInfo((MetaName)383049694, PsoDataType.Float, 384, 0, 0), - new PsoStructureEntryInfo((MetaName)891569975, PsoDataType.UInt, 388, 0, 0), - new PsoStructureEntryInfo((MetaName)3027972140, PsoDataType.UInt, 392, 0, 0), - new PsoStructureEntryInfo((MetaName)1015010494, PsoDataType.UInt, 396, 0, 0), - new PsoStructureEntryInfo((MetaName)2204270248, PsoDataType.Float, 400, 0, 0), - new PsoStructureEntryInfo((MetaName)867760403, PsoDataType.Float, 404, 0, 0), - new PsoStructureEntryInfo((MetaName)3299346053, PsoDataType.Float, 408, 0, 0), + new PsoStructureEntryInfo(MetaName.ModelNamesToConsiderPlayersForScoringPurposes, PsoDataType.Array, 184, 0, (MetaName)43), + new PsoStructureEntryInfo(MetaName.RecklessCarSpeedMin, PsoDataType.Float, 200, 0, 0), + new PsoStructureEntryInfo(MetaName.RecklessCarSpeedMax, PsoDataType.Float, 204, 0, 0), + new PsoStructureEntryInfo(MetaName.CarSirenModifier, PsoDataType.Float, 208, 0, 0), + new PsoStructureEntryInfo(MetaName.PlayerCopModifier, PsoDataType.Float, 212, 0, 0), + new PsoStructureEntryInfo(MetaName.PlayerSexyPedModifier, PsoDataType.Float, 216, 0, 0), + new PsoStructureEntryInfo(MetaName.PlayerSwankyCarModifier, PsoDataType.Float, 220, 0, 0), + new PsoStructureEntryInfo(MetaName.PlayerCopCarModifier, PsoDataType.Float, 224, 0, 0), + new PsoStructureEntryInfo(MetaName.PlayerHasslingModifier, PsoDataType.Float, 228, 0, 0), + new PsoStructureEntryInfo(MetaName.HotPedMinDistance, PsoDataType.Float, 232, 0, 0), + new PsoStructureEntryInfo(MetaName.HotPedMaxDistance, PsoDataType.Float, 236, 0, 0), + new PsoStructureEntryInfo(MetaName.HotPedMinDotAngle, PsoDataType.Float, 240, 0, 0), + new PsoStructureEntryInfo(MetaName.HotPedMaxDotAngle, PsoDataType.Float, 244, 0, 0), + new PsoStructureEntryInfo(MetaName.HotPedMaxHeightDifference, PsoDataType.Float, 248, 0, 0), + new PsoStructureEntryInfo(MetaName.InRangePlayerDistanceThreshold, PsoDataType.Float, 252, 0, 0), + new PsoStructureEntryInfo(MetaName.InRangePlayerInRaceDistanceThreshold, PsoDataType.Float, 256, 0, 0), + new PsoStructureEntryInfo(MetaName.ClosePlayerDistanceThreshold, PsoDataType.Float, 260, 0, 0), + new PsoStructureEntryInfo(MetaName.ApproachingPlayerDistanceThreshold, PsoDataType.Float, 264, 0, 0), + new PsoStructureEntryInfo(MetaName.ApproachingPlayerCosineThreshold, PsoDataType.Float, 268, 0, 0), + new PsoStructureEntryInfo(MetaName.RagdollPlayerDistanceThreshold, PsoDataType.Float, 272, 0, 0), + new PsoStructureEntryInfo(MetaName.LookingInRangePlayerMaxDotAngle, PsoDataType.Float, 276, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxVelocityForVehicleLookAtSqr, PsoDataType.Float, 280, 0, 0), + new PsoStructureEntryInfo(MetaName.PlayerSwankyCarMin, PsoDataType.UByte, 284, 0, 0), + new PsoStructureEntryInfo(MetaName.PlayerSwankyCarMax, PsoDataType.UByte, 285, 0, 0), + new PsoStructureEntryInfo(MetaName.HotPedRenderDebug, PsoDataType.Bool, 286, 0, 0), + new PsoStructureEntryInfo(MetaName.HotPedDisableSexinessFlagChecks, PsoDataType.Bool, 287, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeBeforeSwitchLookAt, PsoDataType.Float, 288, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxLookBackAngle, PsoDataType.Float, 292, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTurnSpeedMotionOverPOI, PsoDataType.Float, 296, 0, 0), + new PsoStructureEntryInfo(MetaName.SpeedForNarrowestAnglePickPOI, PsoDataType.Float, 300, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAnglePickPOI, PsoDataType.Float, 304, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAnglePickPOI, PsoDataType.Float, 308, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPitchingAnglePickPOI, PsoDataType.Float, 312, 0, 0), + new PsoStructureEntryInfo(MetaName.PlayerLookAtDebugDraw, PsoDataType.Bool, 316, 0, 0), + new PsoStructureEntryInfo(MetaName.CameraLookAtTurnRate, PsoDataType.Enum, 320, 0, (MetaName)454750378), + new PsoStructureEntryInfo(MetaName.POILookAtTurnRate, PsoDataType.Enum, 324, 0, (MetaName)454750378), + new PsoStructureEntryInfo(MetaName.MotionLookAtTurnRate, PsoDataType.Enum, 328, 0, (MetaName)454750378), + new PsoStructureEntryInfo(MetaName.VehicleJumpLookAtTurnRate, PsoDataType.Enum, 332, 0, (MetaName)454750378), + new PsoStructureEntryInfo(MetaName.CameraLookAtBlendRate, PsoDataType.Enum, 336, 0, (MetaName)1931302076), + new PsoStructureEntryInfo(MetaName.POILookAtBlendRate, PsoDataType.Enum, 340, 0, (MetaName)1931302076), + new PsoStructureEntryInfo(MetaName.MotionLookAtBlendRate, PsoDataType.Enum, 344, 0, (MetaName)1931302076), + new PsoStructureEntryInfo(MetaName.VehicleJumpLookAtBlendRate, PsoDataType.Enum, 348, 0, (MetaName)1931302076), + new PsoStructureEntryInfo(MetaName.CameraLookAtRotationLimit, PsoDataType.Enum, 352, 0, (MetaName)4044698613), + new PsoStructureEntryInfo(MetaName.POILookAtRotationLimit, PsoDataType.Enum, 356, 0, (MetaName)4044698613), + new PsoStructureEntryInfo(MetaName.MotionLookAtRotationLimit, PsoDataType.Enum, 360, 0, (MetaName)4044698613), + new PsoStructureEntryInfo(MetaName.AITimeWaitingToCrossRoadMin, PsoDataType.Float, 364, 0, 0), + new PsoStructureEntryInfo(MetaName.AITimeWaitingToCrossRoadMax, PsoDataType.Float, 368, 0, 0), + new PsoStructureEntryInfo(MetaName.fAIGreetingDistanceMin, PsoDataType.Float, 372, 0, 0), + new PsoStructureEntryInfo(MetaName.fAIGreetingDistanceMax, PsoDataType.Float, 376, 0, 0), + new PsoStructureEntryInfo(MetaName.uAITimeBetweenGreeting, PsoDataType.UInt, 380, 0, 0), + new PsoStructureEntryInfo(MetaName.fAIGreetingPedModifier, PsoDataType.Float, 384, 0, 0), + new PsoStructureEntryInfo(MetaName.uTimeBetweenLookBacks, PsoDataType.UInt, 388, 0, 0), + new PsoStructureEntryInfo(MetaName.uTimeToLookBack, PsoDataType.UInt, 392, 0, 0), + new PsoStructureEntryInfo(MetaName.uAimToIdleLookAtTime, PsoDataType.UInt, 396, 0, 0), + new PsoStructureEntryInfo(MetaName.fAimToIdleBreakOutAngle, PsoDataType.Float, 400, 0, 0), + new PsoStructureEntryInfo(MetaName.fAimToIdleAngleLimitLeft, PsoDataType.Float, 404, 0, 0), + new PsoStructureEntryInfo(MetaName.fAimToIdleAngleLimitRight, PsoDataType.Float, 408, 0, 0), new PsoStructureEntryInfo((MetaName)3044687592, PsoDataType.UInt, 412, 0, 0) ); case MetaName.CTaskAmbientClips__Tunables: return new PsoStructureInfo(MetaName.CTaskAmbientClips__Tunables, 0, 0, 88, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)664477457, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)3714303368, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1544265672, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)1718176557, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3057149274, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)724033442, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)232011649, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2302651663, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)1876536698, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)3493766854, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)3211610412, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)3495687858, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)1299890657, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)2863765530, PsoDataType.UInt, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.LowLodBaseClipSetId, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultChanceOfStandingWhileMoving, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultTimeBetweenIdles, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeAfterGunshotToPlayIdles, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeAfterGunshotForPlayerToPlayIdles, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.playerNearToHangoutDistanceInMetersSquared, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.minSecondsNearPlayerUntilHangoutQuit, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.maxSecondsNearPlayerUntilHangoutQuit, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.maxHangoutChatDistSq, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.VFXCullRangeScaleNotVisible, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.SecondsSinceInWaterThatCountsAsWet, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxVehicleVelocityForAmbientIdles, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSteeringAngleForAmbientIdles, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeSinceGetUpForAmbientIdles, PsoDataType.UInt, 68, 0, 0), new PsoStructureEntryInfo((MetaName)110858295, PsoDataType.Float, 72, 0, 0), new PsoStructureEntryInfo((MetaName)990057437, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)2595564437, PsoDataType.Float, 80, 0, 0) + new PsoStructureEntryInfo(MetaName.fArgumentProbability, PsoDataType.Float, 80, 0, 0) ); case MetaName.CTaskChat__Tunables: return new PsoStructureInfo(MetaName.CTaskChat__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3997955765, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)295850963, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.HeadingToleranceDegrees, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxWaitTime, PsoDataType.Float, 20, 0, 0) ); - case (MetaName)918124422: - return new PsoStructureInfo((MetaName)918124422, 0, 0, 24, + case MetaName.CTaskCuffed__Tunables: + return new PsoStructureInfo(MetaName.CTaskCuffed__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1015537615, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)2803702095, PsoDataType.String, 20, 7, 0) + new PsoStructureEntryInfo(MetaName.HandcuffedClipSetId, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.ActionsHandcuffedNetworkId, PsoDataType.String, 20, 7, 0) ); - case (MetaName)2117468048: - return new PsoStructureInfo((MetaName)2117468048, 0, 0, 48, + case MetaName.CTaskInCustody__Tunables: + return new PsoStructureInfo(MetaName.CTaskInCustody__Tunables, 0, 0, 48, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3316020555, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)353087997, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3967034351, PsoDataType.Float3, 32, 0, 0) + new PsoStructureEntryInfo(MetaName.AbandonDistance, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.FollowRadius, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.FollowOffset, PsoDataType.Float3, 32, 0, 0) ); case MetaName.CTaskFlyingWander__Tunables: return new PsoStructureInfo(MetaName.CTaskFlyingWander__Tunables, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3211719875, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3829108144, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.RangeOffset, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.HeadingWanderChange, PsoDataType.Float, 20, 0, 0), new PsoStructureEntryInfo(MetaName.TargetRadius, PsoDataType.Float, 24, 0, 0) ); case MetaName.CTaskPlayerOnFoot__Tunables: return new PsoStructureInfo(MetaName.CTaskPlayerOnFoot__Tunables, 0, 0, 368, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2636443310, PsoDataType.Structure, 16, 0, (MetaName)810561649), - new PsoStructureEntryInfo((MetaName)7473239, PsoDataType.Structure, 88, 0, (MetaName)4252665724), + new PsoStructureEntryInfo(MetaName.ParachutePack, PsoDataType.Structure, 16, 0, (MetaName)810561649), + new PsoStructureEntryInfo(MetaName.ScubaGear, PsoDataType.Structure, 88, 0, (MetaName)4252665724), new PsoStructureEntryInfo((MetaName)973020790, PsoDataType.Structure, 152, 0, (MetaName)2770060121), - new PsoStructureEntryInfo((MetaName)4040000084, PsoDataType.Bool, 208, 0, 0), - new PsoStructureEntryInfo((MetaName)1056793189, PsoDataType.Bool, 209, 0, 0), + new PsoStructureEntryInfo(MetaName.EvaluateThreatFromCoverPoints, PsoDataType.Bool, 208, 0, 0), + new PsoStructureEntryInfo(MetaName.UseThreatWeighting, PsoDataType.Bool, 209, 0, 0), new PsoStructureEntryInfo((MetaName)1978058747, PsoDataType.Bool, 210, 0, 0), new PsoStructureEntryInfo((MetaName)3319528567, PsoDataType.Bool, 211, 0, 0), - new PsoStructureEntryInfo((MetaName)684815089, PsoDataType.Float, 212, 0, 0), - new PsoStructureEntryInfo((MetaName)1800609114, PsoDataType.Float, 216, 0, 0), - new PsoStructureEntryInfo((MetaName)4241887050, PsoDataType.Float, 220, 0, 0), - new PsoStructureEntryInfo((MetaName)1979246139, PsoDataType.Float, 224, 0, 0), - new PsoStructureEntryInfo((MetaName)116998034, PsoDataType.Float, 228, 0, 0), - new PsoStructureEntryInfo((MetaName)85726558, PsoDataType.Float, 232, 0, 0), - new PsoStructureEntryInfo((MetaName)1179075662, PsoDataType.Float, 236, 0, 0), - new PsoStructureEntryInfo((MetaName)2101568980, PsoDataType.Float, 240, 0, 0), - new PsoStructureEntryInfo((MetaName)3786622949, PsoDataType.Float, 244, 0, 0), - new PsoStructureEntryInfo((MetaName)2013288531, PsoDataType.Float, 248, 0, 0), - new PsoStructureEntryInfo((MetaName)1955233508, PsoDataType.Float, 252, 0, 0), - new PsoStructureEntryInfo((MetaName)184089910, PsoDataType.Float, 256, 0, 0), - new PsoStructureEntryInfo((MetaName)1348626108, PsoDataType.Float, 260, 0, 0), - new PsoStructureEntryInfo((MetaName)3734777024, PsoDataType.Float, 264, 0, 0), - new PsoStructureEntryInfo((MetaName)3910547157, PsoDataType.Float, 268, 0, 0), - new PsoStructureEntryInfo((MetaName)3255589803, PsoDataType.Float, 272, 0, 0), - new PsoStructureEntryInfo((MetaName)2279531977, PsoDataType.Float, 276, 0, 0), - new PsoStructureEntryInfo((MetaName)2996089454, PsoDataType.Float, 280, 0, 0), - new PsoStructureEntryInfo((MetaName)3671850988, PsoDataType.Float, 284, 0, 0), - new PsoStructureEntryInfo((MetaName)3278990871, PsoDataType.Float, 288, 0, 0), - new PsoStructureEntryInfo((MetaName)2932059417, PsoDataType.Float, 292, 0, 0), - new PsoStructureEntryInfo((MetaName)1242729948, PsoDataType.Float, 296, 0, 0), - new PsoStructureEntryInfo((MetaName)3141504902, PsoDataType.Float, 300, 0, 0), - new PsoStructureEntryInfo((MetaName)3121364054, PsoDataType.Float, 304, 0, 0), - new PsoStructureEntryInfo((MetaName)2777705971, PsoDataType.Float, 308, 0, 0), - new PsoStructureEntryInfo((MetaName)302988723, PsoDataType.Float, 312, 0, 0), - new PsoStructureEntryInfo((MetaName)428630826, PsoDataType.Float, 316, 0, 0), - new PsoStructureEntryInfo((MetaName)3645928265, PsoDataType.Float, 320, 0, 0), - new PsoStructureEntryInfo((MetaName)3768160914, PsoDataType.Float, 324, 0, 0), - new PsoStructureEntryInfo((MetaName)4218123581, PsoDataType.Float, 328, 0, 0), - new PsoStructureEntryInfo((MetaName)2749521042, PsoDataType.Float, 332, 0, 0), - new PsoStructureEntryInfo((MetaName)4086815177, PsoDataType.Float, 336, 0, 0), - new PsoStructureEntryInfo((MetaName)706571699, PsoDataType.Float, 340, 0, 0), - new PsoStructureEntryInfo((MetaName)3378257781, PsoDataType.Float, 344, 0, 0), - new PsoStructureEntryInfo((MetaName)1824902254, PsoDataType.Float, 348, 0, 0), - new PsoStructureEntryInfo((MetaName)3681430863, PsoDataType.Float, 352, 0, 0), - new PsoStructureEntryInfo((MetaName)1574888900, PsoDataType.Float, 356, 0, 0), + new PsoStructureEntryInfo(MetaName.ArrestDistance, PsoDataType.Float, 212, 0, 0), + new PsoStructureEntryInfo(MetaName.ArrestDot, PsoDataType.Float, 216, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxEncumberedClimbHeight, PsoDataType.Float, 220, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTrainClimbHeight, PsoDataType.Float, 224, 0, 0), + new PsoStructureEntryInfo(MetaName.TakeCustodyDistance, PsoDataType.Float, 228, 0, 0), + new PsoStructureEntryInfo(MetaName.UncuffDistance, PsoDataType.Float, 232, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceToTalk, PsoDataType.Float, 236, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDotToTalk, PsoDataType.Float, 240, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenPlayerEvents, PsoDataType.Float, 244, 0, 0), + new PsoStructureEntryInfo(MetaName.DistanceBetweenAiPedsCoverAndPlayersCover, PsoDataType.Float, 248, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceAiPedFromTheirCoverToAbortPlayerEnterCover, PsoDataType.Float, 252, 0, 0), + new PsoStructureEntryInfo(MetaName.SmallCapsuleCoverPenalty, PsoDataType.Float, 256, 0, 0), + new PsoStructureEntryInfo(MetaName.SmallCapsuleCoverRadius, PsoDataType.Float, 260, 0, 0), + new PsoStructureEntryInfo(MetaName.PriorityCoverWeight, PsoDataType.Float, 264, 0, 0), + new PsoStructureEntryInfo(MetaName.EdgeCoverWeight, PsoDataType.Float, 268, 0, 0), + new PsoStructureEntryInfo(MetaName.DistToCoverWeightThreat, PsoDataType.Float, 272, 0, 0), + new PsoStructureEntryInfo(MetaName.DistToCoverWeight, PsoDataType.Float, 276, 0, 0), + new PsoStructureEntryInfo(MetaName.DistToCoverWeightNoStickBonus, PsoDataType.Float, 280, 0, 0), + new PsoStructureEntryInfo(MetaName.VeryCloseToCoverDist, PsoDataType.Float, 284, 0, 0), + new PsoStructureEntryInfo(MetaName.VeryCloseToCoverWeight, PsoDataType.Float, 288, 0, 0), + new PsoStructureEntryInfo(MetaName.DesiredDirToCoverWeight, PsoDataType.Float, 292, 0, 0), + new PsoStructureEntryInfo(MetaName.DesiredDirToCoverAimingWeight, PsoDataType.Float, 296, 0, 0), + new PsoStructureEntryInfo(MetaName.ThreatDirWeight, PsoDataType.Float, 300, 0, 0), + new PsoStructureEntryInfo(MetaName.ThreatEngageDirWeight, PsoDataType.Float, 304, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverDirToCameraWeightMin, PsoDataType.Float, 308, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverDirToCameraWeightMax, PsoDataType.Float, 312, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverDirToCameraWeightMaxAimGun, PsoDataType.Float, 316, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverDirToCameraWeightMaxScaleDist, PsoDataType.Float, 320, 0, 0), + new PsoStructureEntryInfo(MetaName.DesiredDirToCoverMinDot, PsoDataType.Float, 324, 0, 0), + new PsoStructureEntryInfo(MetaName.CameraDirToCoverMinDot, PsoDataType.Float, 328, 0, 0), + new PsoStructureEntryInfo(MetaName.StaticLosTest1Offset, PsoDataType.Float, 332, 0, 0), + new PsoStructureEntryInfo(MetaName.StaticLosTest2Offset, PsoDataType.Float, 336, 0, 0), + new PsoStructureEntryInfo(MetaName.CollisionLosHeightOffset, PsoDataType.Float, 340, 0, 0), + new PsoStructureEntryInfo(MetaName.VeryCloseIgnoreDesAndCamToleranceDist, PsoDataType.Float, 344, 0, 0), + new PsoStructureEntryInfo(MetaName.VeryCloseIgnoreDesAndCamToleranceDistAimGun, PsoDataType.Float, 348, 0, 0), + new PsoStructureEntryInfo(MetaName.DeadZoneStickNorm, PsoDataType.Float, 352, 0, 0), + new PsoStructureEntryInfo(MetaName.SearchThreatMaxDot, PsoDataType.Float, 356, 0, 0), new PsoStructureEntryInfo((MetaName)3328482583, PsoDataType.String, 360, 7, 0), new PsoStructureEntryInfo((MetaName)1221942053, PsoDataType.Bool, 364, 0, 0), new PsoStructureEntryInfo((MetaName)1138836382, PsoDataType.Bool, 365, 0, 0) ); case (MetaName)810561649: return new PsoStructureInfo((MetaName)810561649, 0, 0, 72, - new PsoStructureEntryInfo((MetaName)3529865731, PsoDataType.Structure, 8, 0, (MetaName)1276417684), - new PsoStructureEntryInfo((MetaName)1914687253, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1407750823, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)1694184652, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2711684267, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)2941689878, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)1795856235, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)1293637123, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)639648672, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)4149318965, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.VelocityInheritance, PsoDataType.Structure, 8, 0, (MetaName)1276417684), + new PsoStructureEntryInfo(MetaName.AttachOffsetX, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachOffsetY, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachOffsetZ, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachOrientationX, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachOrientationY, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachOrientationZ, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.BlendInDeltaForPed, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.BlendInDeltaForProp, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.PhaseToBlendOut, PsoDataType.Float, 64, 0, 0), new PsoStructureEntryInfo(MetaName.BlendOutDelta, PsoDataType.Float, 68, 0, 0) ); case (MetaName)1276417684: @@ -8474,14 +8474,14 @@ namespace CodeWalker.GameFiles ); case (MetaName)4252665724: return new PsoStructureInfo((MetaName)4252665724, 0, 0, 64, - new PsoStructureEntryInfo((MetaName)3529865731, PsoDataType.Structure, 8, 0, (MetaName)2201360486), - new PsoStructureEntryInfo((MetaName)1914687253, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1407750823, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)1694184652, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2711684267, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)2941689878, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)1795856235, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)4149318965, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.VelocityInheritance, PsoDataType.Structure, 8, 0, (MetaName)2201360486), + new PsoStructureEntryInfo(MetaName.AttachOffsetX, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachOffsetY, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachOffsetZ, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachOrientationX, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachOrientationY, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachOrientationZ, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.PhaseToBlendOut, PsoDataType.Float, 56, 0, 0), new PsoStructureEntryInfo(MetaName.BlendOutDelta, PsoDataType.Float, 60, 0, 0) ); case (MetaName)2201360486: @@ -8493,8 +8493,8 @@ namespace CodeWalker.GameFiles ); case (MetaName)2770060121: return new PsoStructureInfo((MetaName)2770060121, 0, 0, 56, - new PsoStructureEntryInfo((MetaName)3529865731, PsoDataType.Structure, 8, 0, (MetaName)549752042), - new PsoStructureEntryInfo((MetaName)4149318965, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.VelocityInheritance, PsoDataType.Structure, 8, 0, (MetaName)549752042), + new PsoStructureEntryInfo(MetaName.PhaseToBlendOut, PsoDataType.Float, 32, 0, 0), new PsoStructureEntryInfo(MetaName.BlendOutDelta, PsoDataType.Float, 36, 0, 0), new PsoStructureEntryInfo((MetaName)3586541171, PsoDataType.Float, 40, 0, 0), new PsoStructureEntryInfo((MetaName)4160387967, PsoDataType.String, 44, 7, 0), @@ -8511,74 +8511,74 @@ namespace CodeWalker.GameFiles case MetaName.CTaskSwimmingWander__Tunables: return new PsoStructureInfo(MetaName.CTaskSwimmingWander__Tunables, 0, 0, 48, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1405419534, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1606727990, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)715859273, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3266740728, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3847609025, PsoDataType.UInt, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)3581037895, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)4060945649, PsoDataType.UInt, 40, 0, 0) + new PsoStructureEntryInfo(MetaName.SurfaceSkimmerDepth, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.NormalPreferredDepth, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.AvoidanceProbeLength, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.AvoidanceProbePullback, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.AvoidanceProbeInterval, PsoDataType.UInt, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.AvoidanceSteerAngleDegrees, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.InstantProbeDurationMin, PsoDataType.UInt, 40, 0, 0) ); case MetaName.CTaskUnalerted__Tunables: return new PsoStructureInfo(MetaName.CTaskUnalerted__Tunables, 0, 0, 80, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)4004750790, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)4009937054, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1166603434, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2129795449, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1467495810, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2887992243, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)2307005569, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)1049520739, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)2064516214, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2148143287, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)3697919373, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)3167164487, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)3609661010, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)637992620, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)1770714176, PsoDataType.Float, 72, 0, 0) + new PsoStructureEntryInfo(MetaName.ScenarioDelayAfterFailureMin, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ScenarioDelayAfterFailureMax, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.ScenarioDelayAfterFailureWhenStationary, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.ScenarioDelayAfterNotAbleToSearch, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ScenarioDelayAfterSuccessMin, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.ScenarioDelayAfterSuccessMax, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.ScenarioDelayInitialMin, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.ScenarioDelayInitialMax, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBeforeDriverAnimCheck, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenSearchesForNextScenarioInChain, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeMinBeforeLastPoint, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeMinBeforeLastPointType, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.PavementFloodFillSearchRadius, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.WaitTimeAfterFailedVehExit, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceToReturnToLastUsedVehicle, PsoDataType.Float, 72, 0, 0) ); case MetaName.CTaskWander__Tunables: return new PsoStructureInfo(MetaName.CTaskWander__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3616711897, PsoDataType.UInt, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3510850224, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.uNumPedsToTransitionToRainPerPeriod, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.fSecondsInRainTransitionPeriod, PsoDataType.Float, 20, 0, 0) ); case MetaName.CTaskWanderInArea__Tunables: return new PsoStructureInfo(MetaName.CTaskWanderInArea__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3965435915, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)295850963, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.MinWaitTime, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxWaitTime, PsoDataType.Float, 20, 0, 0) ); case MetaName.CDispatchSpawnHelper__Tunables: return new PsoStructureInfo(MetaName.CDispatchSpawnHelper__Tunables, 0, 0, 72, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3321094558, PsoDataType.Structure, 16, 0, (MetaName)2369454477), - new PsoStructureEntryInfo((MetaName)67050499, PsoDataType.Structure, 32, 0, (MetaName)3541869149), - new PsoStructureEntryInfo((MetaName)652074796, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)890881625, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)713008535, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)2329813458, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)43531000, PsoDataType.Float, 64, 0, 0) + new PsoStructureEntryInfo(MetaName.Restrictions, PsoDataType.Structure, 16, 0, (MetaName)2369454477), + new PsoStructureEntryInfo(MetaName.Rendering, PsoDataType.Structure, 32, 0, (MetaName)3541869149), + new PsoStructureEntryInfo(MetaName.IdealSpawnDistance, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDotForInFront, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceTraveledMultiplier, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSpeedToBeConsideredEscapingInVehicle, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForDispatchPosition, PsoDataType.Float, 64, 0, 0) ); case (MetaName)2369454477: return new PsoStructureInfo((MetaName)2369454477, 0, 0, 16, - new PsoStructureEntryInfo((MetaName)3017247137, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)3808847755, PsoDataType.Float, 12, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxDistanceFromCameraForViewportChecks, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.RadiusForViewportCheck, PsoDataType.Float, 12, 0, 0) ); case (MetaName)3541869149: return new PsoStructureInfo((MetaName)3541869149, 0, 0, 16, new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)3360212191, PsoDataType.Bool, 9, 0, 0), - new PsoStructureEntryInfo((MetaName)3455230182, PsoDataType.Bool, 10, 0, 0), - new PsoStructureEntryInfo((MetaName)2790865931, PsoDataType.Bool, 11, 0, 0) + new PsoStructureEntryInfo(MetaName.DispatchNode, PsoDataType.Bool, 9, 0, 0), + new PsoStructureEntryInfo(MetaName.FindSpawnPointInDirection, PsoDataType.Bool, 10, 0, 0), + new PsoStructureEntryInfo(MetaName.IncidentLocation, PsoDataType.Bool, 11, 0, 0) ); case MetaName.CDispatchAdvancedSpawnHelper__Tunables: return new PsoStructureInfo(MetaName.CDispatchAdvancedSpawnHelper__Tunables, 0, 0, 40, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)67050499, PsoDataType.Structure, 16, 0, (MetaName)3744572044), - new PsoStructureEntryInfo((MetaName)606050838, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2966580682, PsoDataType.Float, 36, 0, 0) + new PsoStructureEntryInfo(MetaName.Rendering, PsoDataType.Structure, 16, 0, (MetaName)3744572044), + new PsoStructureEntryInfo(MetaName.TimeBetweenInvalidateInvalidDispatchVehicles, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenMarkDispatchVehiclesForDespawn, PsoDataType.Float, 36, 0, 0) ); case (MetaName)3744572044: return new PsoStructureInfo((MetaName)3744572044, 0, 0, 16, @@ -8588,81 +8588,81 @@ namespace CodeWalker.GameFiles return new PsoStructureInfo(MetaName.CDispatchHelperSearchOnFoot__Tunables, 0, 0, 40, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2350715434), - new PsoStructureEntryInfo((MetaName)1591913012, PsoDataType.Array, 16, 0, (MetaName)1), - new PsoStructureEntryInfo((MetaName)1798086221, PsoDataType.Float, 32, 0, 0) + new PsoStructureEntryInfo(MetaName.Constraints, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.MaxDistanceFromNavMesh, PsoDataType.Float, 32, 0, 0) ); case (MetaName)2350715434: return new PsoStructureInfo((MetaName)2350715434, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)3151249820, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1171478055, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)679039028, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)208554060, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)4276410337, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3503009483, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2888264108, PsoDataType.Bool, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)3330866903, PsoDataType.Bool, 33, 0, 0), - new PsoStructureEntryInfo((MetaName)759464384, PsoDataType.Bool, 34, 0, 0) + new PsoStructureEntryInfo(MetaName.MinTimeSinceLastSpotted, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeSinceLastSpotted, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRadiusForMinTimeSinceLastSpotted, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRadiusForMaxTimeSinceLastSpotted, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxHeight, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAngle, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.UseLastSeenPosition, PsoDataType.Bool, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.UseByDefault, PsoDataType.Bool, 33, 0, 0), + new PsoStructureEntryInfo(MetaName.UseEnclosedSearchRegions, PsoDataType.Bool, 34, 0, 0) ); case MetaName.CDispatchHelperSearchInAutomobile__Tunables: return new PsoStructureInfo(MetaName.CDispatchHelperSearchInAutomobile__Tunables, 0, 0, 40, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2350715434), - new PsoStructureEntryInfo((MetaName)1591913012, PsoDataType.Array, 16, 0, (MetaName)1), - new PsoStructureEntryInfo((MetaName)4277520254, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2895901568, PsoDataType.Float, 36, 0, 0) + new PsoStructureEntryInfo(MetaName.Constraints, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.MaxDistanceFromRoadNode, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.CruiseSpeed, PsoDataType.Float, 36, 0, 0) ); case MetaName.CDispatchHelperSearchInBoat__Tunables: return new PsoStructureInfo(MetaName.CDispatchHelperSearchInBoat__Tunables, 0, 0, 40, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2350715434), - new PsoStructureEntryInfo((MetaName)1591913012, PsoDataType.Array, 16, 0, (MetaName)1), - new PsoStructureEntryInfo((MetaName)2895901568, PsoDataType.Float, 32, 0, 0) + new PsoStructureEntryInfo(MetaName.Constraints, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.CruiseSpeed, PsoDataType.Float, 32, 0, 0) ); case MetaName.CDispatchHelperSearchInHeli__Tunables: return new PsoStructureInfo(MetaName.CDispatchHelperSearchInHeli__Tunables, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2350715434), - new PsoStructureEntryInfo((MetaName)1591913012, PsoDataType.Array, 16, 0, (MetaName)1) + new PsoStructureEntryInfo(MetaName.Constraints, PsoDataType.Array, 16, 0, (MetaName)1) ); case MetaName.CDispatchHelperVolumes__Tunables: return new PsoStructureInfo(MetaName.CDispatchHelperVolumes__Tunables, 0, 0, 152, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)67050499, PsoDataType.Structure, 16, 0, (MetaName)3452608618), - new PsoStructureEntryInfo((MetaName)3346068581, PsoDataType.Structure, 32, 0, (MetaName)3249772165), - new PsoStructureEntryInfo((MetaName)937610588, PsoDataType.Structure, 72, 0, (MetaName)898276026), - new PsoStructureEntryInfo((MetaName)20824415, PsoDataType.Structure, 112, 0, (MetaName)2312163633) + new PsoStructureEntryInfo(MetaName.Rendering, PsoDataType.Structure, 16, 0, (MetaName)3452608618), + new PsoStructureEntryInfo(MetaName.LocationForNearestCarNodeOverrides, PsoDataType.Structure, 32, 0, (MetaName)3249772165), + new PsoStructureEntryInfo(MetaName.EnclosedSearchRegions, PsoDataType.Structure, 72, 0, (MetaName)898276026), + new PsoStructureEntryInfo(MetaName.BlockingAreas, PsoDataType.Structure, 112, 0, (MetaName)2312163633) ); case (MetaName)3452608618: return new PsoStructureInfo((MetaName)3452608618, 0, 0, 16, new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)3346068581, PsoDataType.Bool, 9, 0, 0), - new PsoStructureEntryInfo((MetaName)937610588, PsoDataType.Bool, 10, 0, 0), - new PsoStructureEntryInfo((MetaName)20824415, PsoDataType.Bool, 11, 0, 0) + new PsoStructureEntryInfo(MetaName.LocationForNearestCarNodeOverrides, PsoDataType.Bool, 9, 0, 0), + new PsoStructureEntryInfo(MetaName.EnclosedSearchRegions, PsoDataType.Bool, 10, 0, 0), + new PsoStructureEntryInfo(MetaName.BlockingAreas, PsoDataType.Bool, 11, 0, 0) ); case (MetaName)3249772165: return new PsoStructureInfo((MetaName)3249772165, 0, 0, 40, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1419890352), - new PsoStructureEntryInfo((MetaName)3530189928, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.AngledAreas, PsoDataType.Array, 8, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3809247475), new PsoStructureEntryInfo(MetaName.Spheres, PsoDataType.Array, 24, 0, (MetaName)2) ); case (MetaName)898276026: return new PsoStructureInfo((MetaName)898276026, 0, 0, 40, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2129766809), - new PsoStructureEntryInfo((MetaName)3530189928, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.AngledAreas, PsoDataType.Array, 8, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)253441159), new PsoStructureEntryInfo(MetaName.Spheres, PsoDataType.Array, 24, 0, (MetaName)2) ); case (MetaName)2312163633: return new PsoStructureInfo((MetaName)2312163633, 0, 0, 40, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3558216355), - new PsoStructureEntryInfo((MetaName)3530189928, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.AngledAreas, PsoDataType.Array, 8, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1335944774), new PsoStructureEntryInfo(MetaName.Spheres, PsoDataType.Array, 24, 0, (MetaName)2) ); case (MetaName)1419890352: return new PsoStructureInfo((MetaName)1419890352, 0, 0, 96, - new PsoStructureEntryInfo((MetaName)2592513975, PsoDataType.Structure, 8, 0, (MetaName)3558216355), + new PsoStructureEntryInfo(MetaName.AngledArea, PsoDataType.Structure, 8, 0, (MetaName)3558216355), new PsoStructureEntryInfo(MetaName.Position, PsoDataType.Structure, 72, 0, (MetaName)2431379611) ); case (MetaName)3558216355: @@ -8679,26 +8679,26 @@ namespace CodeWalker.GameFiles ); case (MetaName)2129766809: return new PsoStructureInfo((MetaName)2129766809, 0, 0, 80, - new PsoStructureEntryInfo((MetaName)2592513975, PsoDataType.Structure, 8, 0, (MetaName)3558216355), + new PsoStructureEntryInfo(MetaName.AngledArea, PsoDataType.Structure, 8, 0, (MetaName)3558216355), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)4002001992), new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.Flags, 72, 0, (MetaName)2097153) ); case MetaName.CWantedHelicopterDispatch__Tunables: return new PsoStructureInfo(MetaName.CWantedHelicopterDispatch__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3078950392, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)4153560394, PsoDataType.UInt, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.TimeBetweenSpawnAttempts, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSpawnTimeForPoliceHeliAfterDestroyed, PsoDataType.UInt, 20, 0, 0) ); case MetaName.CPoliceBoatDispatch__Tunables: return new PsoStructureInfo(MetaName.CPoliceBoatDispatch__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3078950392, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.TimeBetweenSpawnAttempts, PsoDataType.Float, 16, 0, 0) ); case MetaName.CEventPedJackingMyVehicle__Tunables: return new PsoStructureInfo(MetaName.CEventPedJackingMyVehicle__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)564420500, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2906908712, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.MinDelayTimer, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDelayTimer, PsoDataType.Float, 20, 0, 0) ); case MetaName.CEventEncroachingPed__Tunables: return new PsoStructureInfo(MetaName.CEventEncroachingPed__Tunables, 0, 0, 16, @@ -8707,9 +8707,9 @@ namespace CodeWalker.GameFiles case MetaName.CEventRequestHelp__Tunables: return new PsoStructureInfo(MetaName.CEventRequestHelp__Tunables, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2602588680, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)564420500, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2906908712, PsoDataType.Float, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxRangeWithoutRadioForFistFights, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDelayTimer, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDelayTimer, PsoDataType.Float, 24, 0, 0) ); case MetaName.CEventCrimeCryForHelp__Tunables: return new PsoStructureInfo(MetaName.CEventCrimeCryForHelp__Tunables, 0, 0, 40, @@ -8724,137 +8724,137 @@ namespace CodeWalker.GameFiles case MetaName.CEventSuspiciousActivity__Tunables: return new PsoStructureInfo(MetaName.CEventSuspiciousActivity__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)4233735310, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.fMinDistanceToBeConsideredSameEvent, PsoDataType.Float, 16, 0, 0) ); case MetaName.CEventAgitated__Tunables: return new PsoStructureInfo(MetaName.CEventAgitated__Tunables, 0, 0, 48, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)4175948694, PsoDataType.UInt, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1941376054, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)449694767, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)946719330, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2167383018, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1295611070, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)2937486448, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)1507389089, PsoDataType.Enum, 44, 0, (MetaName)1507389089) + new PsoStructureEntryInfo(MetaName.TimeToLive, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.AmbientEventLifetime, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.TriggerAmbientReactionChances, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceForAmbientReaction, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForAmbientReaction, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeForAmbientReaction, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeForAmbientReaction, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.AmbientEventType, PsoDataType.Enum, 44, 0, MetaName.AmbientEventType) ); case MetaName.CEventRespondedToThreat__Tunables: return new PsoStructureInfo(MetaName.CEventRespondedToThreat__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)564420500, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2906908712, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.MinDelayTimer, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDelayTimer, PsoDataType.Float, 20, 0, 0) ); case MetaName.CTaskCallPolice__Tunables: return new PsoStructureInfo(MetaName.CTaskCallPolice__Tunables, 0, 0, 48, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1927499316, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3385798684, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2919871050, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)4048361920, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)4230329614, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2980295761, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)2423924604, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)854541557, PsoDataType.Float, 44, 0, 0) + new PsoStructureEntryInfo(MetaName.MinTimeMovingAwayToGiveToWitness, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeSinceTalkingEndedToMakeCall, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeSinceTargetTalkingEndedToMakeCall, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeTargetHasBeenTalkingToMakeCall, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeSinceTalkingEndedToSayContextForCall, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeSpentInEarLoopToSayContextForCall, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeToSpendInEarLoopToPutDownPhone, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeToSpendInEarLoopToPutDownPhone, PsoDataType.Float, 44, 0, 0) ); case MetaName.CTaskConversationHelper__Tunables: return new PsoStructureInfo(MetaName.CTaskConversationHelper__Tunables, 0, 0, 64, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2156082331, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3637331931, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3930402274, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)1048379145, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)4242148097, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1878691053, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)784723777, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2295557741, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)1037671842, PsoDataType.UInt, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)3917563062, PsoDataType.UInt, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)1968341934, PsoDataType.UByte, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)1226852111, PsoDataType.UByte, 57, 0, 0) + new PsoStructureEntryInfo(MetaName.fMinSecondsDelayBetweenPhoneLines, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxSecondsDelayBetweenPhoneLines, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinSecondsDelayBetweenChatLines, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxSecondsDelayBetweenChatLines, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinDistanceSquaredToPlayerForAudio, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.fChanceOfConversationRant, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.fChanceOfArgumentChallenge, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.fChanceOfArgumentChallengeBeingAccepted, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.uTimeInMSUntilNewWeirdPedComment, PsoDataType.UInt, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.uMaxTimeInMSToPlayRingTone, PsoDataType.UInt, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.uTimeToWaitAfterNewSayFailureInSeconds, PsoDataType.UByte, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.uTicksUntilHangoutConversationCheck, PsoDataType.UByte, 57, 0, 0) ); case MetaName.CLegIkSolver__Tunables: return new PsoStructureInfo(MetaName.CLegIkSolver__Tunables, 0, 0, 392, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2837302706, PsoDataType.Structure, 16, 0, (MetaName)1560218317), - new PsoStructureEntryInfo((MetaName)115587354, PsoDataType.Structure, 40, 0, (MetaName)1560218317), - new PsoStructureEntryInfo((MetaName)2709476201, PsoDataType.Structure, 64, 0, (MetaName)1560218317), - new PsoStructureEntryInfo((MetaName)1745248481, PsoDataType.Structure, 88, 0, (MetaName)1560218317), - new PsoStructureEntryInfo((MetaName)1545915544, PsoDataType.Structure, 112, 0, (MetaName)1560218317), - new PsoStructureEntryInfo((MetaName)1979344219, PsoDataType.Structure, 136, 0, (MetaName)1560218317), - new PsoStructureEntryInfo((MetaName)3264564387, PsoDataType.Structure, 160, 0, (MetaName)1560218317), - new PsoStructureEntryInfo((MetaName)67151581, PsoDataType.Structure, 184, 0, (MetaName)1560218317), - new PsoStructureEntryInfo((MetaName)2577533666, PsoDataType.Structure, 208, 0, (MetaName)1560218317), - new PsoStructureEntryInfo((MetaName)2302577809, PsoDataType.Structure, 232, 0, (MetaName)1560218317), - new PsoStructureEntryInfo((MetaName)1271955779, PsoDataType.Structure, 256, 0, (MetaName)1560218317), - new PsoStructureEntryInfo((MetaName)3289881556, PsoDataType.Structure, 280, 0, (MetaName)1560218317), - new PsoStructureEntryInfo((MetaName)3671506242, PsoDataType.Structure, 304, 0, (MetaName)1560218317), - new PsoStructureEntryInfo((MetaName)2144071841, PsoDataType.Structure, 328, 0, (MetaName)1560218317), - new PsoStructureEntryInfo((MetaName)2784569431, PsoDataType.Float, 352, 0, 0), - new PsoStructureEntryInfo((MetaName)1210483821, PsoDataType.Float, 356, 0, 0), - new PsoStructureEntryInfo((MetaName)2173480721, PsoDataType.Float, 360, 0, 0), - new PsoStructureEntryInfo((MetaName)1295091688, PsoDataType.Float, 364, 0, 0), - new PsoStructureEntryInfo((MetaName)3894253961, PsoDataType.Float, 368, 0, 0), - new PsoStructureEntryInfo((MetaName)1875736055, PsoDataType.Float, 372, 0, 0), - new PsoStructureEntryInfo((MetaName)1652778083, PsoDataType.Float, 376, 0, 0), - new PsoStructureEntryInfo((MetaName)369470094, PsoDataType.Float, 380, 0, 0), - new PsoStructureEntryInfo((MetaName)816343475, PsoDataType.Float, 384, 0, 0) + new PsoStructureEntryInfo(MetaName.PelvisInterp, PsoDataType.Structure, 16, 0, (MetaName)1560218317), + new PsoStructureEntryInfo(MetaName.PelvisInterpMoving, PsoDataType.Structure, 40, 0, (MetaName)1560218317), + new PsoStructureEntryInfo(MetaName.PelvisInterpOnDynamic, PsoDataType.Structure, 64, 0, (MetaName)1560218317), + new PsoStructureEntryInfo(MetaName.FootInterp, PsoDataType.Structure, 88, 0, (MetaName)1560218317), + new PsoStructureEntryInfo(MetaName.FootInterpIntersecting, PsoDataType.Structure, 112, 0, (MetaName)1560218317), + new PsoStructureEntryInfo(MetaName.FootInterpMoving, PsoDataType.Structure, 136, 0, (MetaName)1560218317), + new PsoStructureEntryInfo(MetaName.FootInterpIntersectingMoving, PsoDataType.Structure, 160, 0, (MetaName)1560218317), + new PsoStructureEntryInfo(MetaName.FootInterpOnDynamic, PsoDataType.Structure, 184, 0, (MetaName)1560218317), + new PsoStructureEntryInfo(MetaName.StairsPelvisInterp, PsoDataType.Structure, 208, 0, (MetaName)1560218317), + new PsoStructureEntryInfo(MetaName.StairsPelvisInterpMoving, PsoDataType.Structure, 232, 0, (MetaName)1560218317), + new PsoStructureEntryInfo(MetaName.StairsPelvisInterpCoverAim, PsoDataType.Structure, 256, 0, (MetaName)1560218317), + new PsoStructureEntryInfo(MetaName.StairsFootInterp, PsoDataType.Structure, 280, 0, (MetaName)1560218317), + new PsoStructureEntryInfo(MetaName.StairsFootInterpIntersecting, PsoDataType.Structure, 304, 0, (MetaName)1560218317), + new PsoStructureEntryInfo(MetaName.StairsFootInterpCoverAim, PsoDataType.Structure, 328, 0, (MetaName)1560218317), + new PsoStructureEntryInfo(MetaName.UpStairsPelvisMaxDeltaZMoving, PsoDataType.Float, 352, 0, 0), + new PsoStructureEntryInfo(MetaName.UpStairsPelvisMaxNegativeDeltaZMoving, PsoDataType.Float, 356, 0, 0), + new PsoStructureEntryInfo(MetaName.DownStairsPelvisMaxDeltaZMoving, PsoDataType.Float, 360, 0, 0), + new PsoStructureEntryInfo(MetaName.DownStairsPelvisMaxNegativeDeltaZMoving, PsoDataType.Float, 364, 0, 0), + new PsoStructureEntryInfo(MetaName.StairsPelvisMaxNegativeDeltaZCoverAim, PsoDataType.Float, 368, 0, 0), + new PsoStructureEntryInfo(MetaName.VelMagStairsSpringMin, PsoDataType.Float, 372, 0, 0), + new PsoStructureEntryInfo(MetaName.VelMagStairsSpringMax, PsoDataType.Float, 376, 0, 0), + new PsoStructureEntryInfo(MetaName.StairsSpringMultiplierMin, PsoDataType.Float, 380, 0, 0), + new PsoStructureEntryInfo(MetaName.StairsSpringMultiplierMax, PsoDataType.Float, 384, 0, 0) ); case (MetaName)1560218317: return new PsoStructureInfo((MetaName)1560218317, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Rate, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1199000829, PsoDataType.Bool, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)801104139, PsoDataType.Bool, 13, 0, 0), - new PsoStructureEntryInfo((MetaName)3627404834, PsoDataType.Bool, 14, 0, 0), - new PsoStructureEntryInfo((MetaName)1799363495, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.AccelerationBased, PsoDataType.Bool, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.ScaleAccelWithDelta, PsoDataType.Bool, 13, 0, 0), + new PsoStructureEntryInfo(MetaName.ZeroRateOnDirectionChange, PsoDataType.Bool, 14, 0, 0), + new PsoStructureEntryInfo(MetaName.AccelRate, PsoDataType.Float, 16, 0, 0) ); case MetaName.CMiniMap__Tunables: return new PsoStructureInfo(MetaName.CMiniMap__Tunables, 0, 0, 352, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)409760750, PsoDataType.Structure, 16, 0, (MetaName)53366421), - new PsoStructureEntryInfo((MetaName)133430210, PsoDataType.Structure, 132, 0, (MetaName)1902464991), - new PsoStructureEntryInfo((MetaName)3540307690, PsoDataType.Structure, 140, 0, (MetaName)2026887270), + new PsoStructureEntryInfo(MetaName.Sonar, PsoDataType.Structure, 16, 0, (MetaName)53366421), + new PsoStructureEntryInfo(MetaName.HealthBar, PsoDataType.Structure, 132, 0, (MetaName)1902464991), + new PsoStructureEntryInfo(MetaName.Bitmap, PsoDataType.Structure, 140, 0, (MetaName)2026887270), new PsoStructureEntryInfo((MetaName)1791333322, PsoDataType.Structure, 172, 0, (MetaName)1690619373), new PsoStructureEntryInfo(MetaName.Camera, PsoDataType.Structure, 200, 0, (MetaName)283649933), - new PsoStructureEntryInfo((MetaName)2501703395, PsoDataType.Structure, 300, 0, (MetaName)3031405081), - new PsoStructureEntryInfo((MetaName)370428790, PsoDataType.Structure, 320, 0, (MetaName)2449081679), - new PsoStructureEntryInfo((MetaName)2360416497, PsoDataType.Structure, 340, 0, (MetaName)1640186987) + new PsoStructureEntryInfo(MetaName.Tiles, PsoDataType.Structure, 300, 0, (MetaName)3031405081), + new PsoStructureEntryInfo(MetaName.Overlay, PsoDataType.Structure, 320, 0, (MetaName)2449081679), + new PsoStructureEntryInfo(MetaName.Display, PsoDataType.Structure, 340, 0, (MetaName)1640186987) ); case (MetaName)53366421: return new PsoStructureInfo((MetaName)53366421, 0, 0, 116, - new PsoStructureEntryInfo((MetaName)347298932, PsoDataType.Float, 0, 0, 0), - new PsoStructureEntryInfo((MetaName)1166640595, PsoDataType.Float, 4, 0, 0), - new PsoStructureEntryInfo((MetaName)2698396339, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1593818711, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)496127271, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2190165672, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)121379805, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3197086918, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1578589400, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1197726055, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)3329995088, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)3813597325, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)4073295642, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)3759114450, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.fSoundRange_BarelyAudible, PsoDataType.Float, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.fSoundRange_MostlyAudible, PsoDataType.Float, 4, 0, 0), + new PsoStructureEntryInfo(MetaName.fSoundRange_ClearlyAudible, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.fSoundRange_Whisper, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.fSoundRange_Talking, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.fSoundRange_Shouting, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.fSoundRange_Megaphone, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.fSoundRange_FootstepBase, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.fSoundRange_HeavyFootstep, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.fSoundRange_FootstepFoliage, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.fSoundRange_LandFromFall, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.fSoundRange_WeaponSpinUp, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.fSoundRange_Gunshot, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.fSoundRange_SilencedGunshot, PsoDataType.Float, 52, 0, 0), new PsoStructureEntryInfo((MetaName)60903513, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)1114733078, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)819051225, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)1070205007, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)2428401420, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)871660954, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)29182579, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)1532863616, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)807986206, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)2604348013, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)801070127, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)1747790072, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)1838053251, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)3201590411, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)1212129799, PsoDataType.Float, 112, 0, 0) + new PsoStructureEntryInfo(MetaName.fSoundRange_Explosion, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.fSoundRange_ObjectCollision, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.fSoundRange_GlassBreak, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.fSoundRange_CarHorn, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.fSoundRange_CarLowSpeed, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.fSoundRange_CarHighSpeed, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.fSoundRange_WaterSplashSmall, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.fSoundRange_WaterSplashLarge, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinListenerRangeToDrawSonarBlips, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.fRainSnowSoundReductionAmount, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.fRadioSoundReductionAmount, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.fRadioSoundReductionDistance, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.fConversationSoundReductionAmount, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.fConversationSoundReductionDistance, PsoDataType.Float, 112, 0, 0) ); case (MetaName)1902464991: return new PsoStructureInfo((MetaName)1902464991, 0, 0, 8, - new PsoStructureEntryInfo((MetaName)420083265, PsoDataType.Float, 0, 0, 0), - new PsoStructureEntryInfo((MetaName)4066516916, PsoDataType.SInt, 4, 0, 0) + new PsoStructureEntryInfo(MetaName.fStaminaDepletionBlinkPercentage, PsoDataType.Float, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.iHealthDepletionBlinkPercentage, PsoDataType.SInt, 4, 0, 0) ); case (MetaName)2026887270: return new PsoStructureInfo((MetaName)2026887270, 0, 0, 32, @@ -8868,11 +8868,11 @@ namespace CodeWalker.GameFiles ); case (MetaName)1690619373: return new PsoStructureInfo((MetaName)1690619373, 0, 0, 28, - new PsoStructureEntryInfo((MetaName)4115899538, PsoDataType.Float, 0, 0, 0), - new PsoStructureEntryInfo((MetaName)70992481, PsoDataType.Float, 4, 0, 0), - new PsoStructureEntryInfo((MetaName)3885599006, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2995953429, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)3124083955, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.fWorldX, PsoDataType.Float, 0, 0, 0), + new PsoStructureEntryInfo(MetaName.fWorldY, PsoDataType.Float, 4, 0, 0), + new PsoStructureEntryInfo(MetaName.fWorldW, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.fWorldH, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.fBaseAlpha, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo((MetaName)2170322240, PsoDataType.Float, 20, 0, 0), new PsoStructureEntryInfo((MetaName)1452712925, PsoDataType.Float, 24, 0, 0) ); @@ -8889,14 +8889,14 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)3533921583, PsoDataType.Float, 32, 0, 0), new PsoStructureEntryInfo((MetaName)2652932444, PsoDataType.Float, 36, 0, 0), new PsoStructureEntryInfo((MetaName)2075786872, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)105068200, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.fParachutingZoom, PsoDataType.Float, 44, 0, 0), new PsoStructureEntryInfo((MetaName)2402173156, PsoDataType.Float, 48, 0, 0), new PsoStructureEntryInfo((MetaName)3692711717, PsoDataType.Float, 52, 0, 0), new PsoStructureEntryInfo((MetaName)4088397509, PsoDataType.Float, 56, 0, 0), new PsoStructureEntryInfo((MetaName)709315443, PsoDataType.Float, 60, 0, 0), new PsoStructureEntryInfo((MetaName)1734631491, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)382138818, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)285457106, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.fVehicleTilt, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.fVehicleOffset, PsoDataType.Float, 72, 0, 0), new PsoStructureEntryInfo((MetaName)1912611271, PsoDataType.Float, 76, 0, 0), new PsoStructureEntryInfo((MetaName)4158832075, PsoDataType.Float, 80, 0, 0), new PsoStructureEntryInfo((MetaName)2229181525, PsoDataType.Float, 84, 0, 0), @@ -8914,8 +8914,8 @@ namespace CodeWalker.GameFiles case (MetaName)2449081679: return new PsoStructureInfo((MetaName)2449081679, 0, 0, 20, new PsoStructureEntryInfo(MetaName.vPos, PsoDataType.Float2, 0, 0, 0), - new PsoStructureEntryInfo((MetaName)1805863696, PsoDataType.Float2, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)806477731, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.vScale, PsoDataType.Float2, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.fDisplayZ, PsoDataType.Float, 16, 0, 0) ); case (MetaName)1640186987: return new PsoStructureInfo((MetaName)1640186987, 0, 0, 12, @@ -8927,33 +8927,33 @@ namespace CodeWalker.GameFiles case MetaName.CTaskMotionAiming__Tunables: return new PsoStructureInfo(MetaName.CTaskMotionAiming__Tunables, 0, 0, 144, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3051090926, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1886735419, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1030928652, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)1966094123, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2358855400, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)214999846, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)469859232, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.PlayerMoveAccel, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.PlayerMoveDecel, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.PedMoveAccel, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.PedMoveDecel, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.FromOnFootAccelerationMod, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.WalkAngAccel, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.RunAngAccel, PsoDataType.Float, 40, 0, 0), new PsoStructureEntryInfo((MetaName)1722146938, PsoDataType.Float, 44, 0, 0), new PsoStructureEntryInfo((MetaName)1350763236, PsoDataType.Float, 48, 0, 0), new PsoStructureEntryInfo((MetaName)3375971933, PsoDataType.Float, 52, 0, 0), new PsoStructureEntryInfo((MetaName)3611401160, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)956068907, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)997046562, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.Turn180ActivationAngle, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.Turn180ConsistentAngleTolerance, PsoDataType.Float, 64, 0, 0), new PsoStructureEntryInfo(MetaName.Turn, PsoDataType.Structure, 72, 0, (MetaName)150934045), new PsoStructureEntryInfo(MetaName.PitchChangeRate, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)724740943, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)2955289081, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)1952772149, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)1545452032, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)2752952312, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)3521301980, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)2967257859, PsoDataType.Float, 116, 0, 0), - new PsoStructureEntryInfo((MetaName)2563588038, PsoDataType.Float, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)1051732090, PsoDataType.Float, 124, 0, 0), - new PsoStructureEntryInfo((MetaName)3381710529, PsoDataType.Float, 128, 0, 0), - new PsoStructureEntryInfo((MetaName)2949921986, PsoDataType.Bool, 132, 0, 0), - new PsoStructureEntryInfo((MetaName)138117989, PsoDataType.Bool, 133, 0, 0), + new PsoStructureEntryInfo(MetaName.PitchChangeRateAcceleration, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.OverwriteMaxPitch, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.AimIntroMaxAngleChangeRate, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.AimIntroMinPhaseChangeRate, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.AimIntroMaxPhaseChangeRate, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.AimIntroMaxTimedOutPhaseChangeRate, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.PlayerIdleIntroAnimRate, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.MovingWalkAnimRateMin, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.MovingWalkAnimRateMax, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo(MetaName.MovingWalkAnimRateAcceleration, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.DoPostCameraClipUpdateForPlayer, PsoDataType.Bool, 132, 0, 0), + new PsoStructureEntryInfo(MetaName.EnableIkForAI, PsoDataType.Bool, 133, 0, 0), new PsoStructureEntryInfo((MetaName)122800807, PsoDataType.Bool, 134, 0, 0), new PsoStructureEntryInfo((MetaName)259313148, PsoDataType.Bool, 135, 0, 0), new PsoStructureEntryInfo((MetaName)2900191858, PsoDataType.Float, 136, 0, 0), @@ -8961,28 +8961,28 @@ namespace CodeWalker.GameFiles ); case (MetaName)150934045: return new PsoStructureInfo((MetaName)150934045, 0, 0, 16, - new PsoStructureEntryInfo((MetaName)2853820726, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1403610920, PsoDataType.Float, 12, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxVariationForCurrentPitch, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxVariationForDesiredPitch, PsoDataType.Float, 12, 0, 0) ); - case (MetaName)1099459847: - return new PsoStructureInfo((MetaName)1099459847, 0, 0, 136, + case MetaName.CTaskBirdLocomotion__Tunables: + return new PsoStructureInfo(MetaName.CTaskBirdLocomotion__Tunables, 0, 0, 136, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3519366748, PsoDataType.UInt, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)626958998, PsoDataType.UInt, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1117824032, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3524235412, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)72858195, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2210871472, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MinWaitTimeBetweenTakeOffsMS, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxWaitTimeBetweenTakeOffsMS, PsoDataType.UInt, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTakeOffRate, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTakeOffRate, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTakeOffHeadingChangeRate, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTakeOffHeadingChangeRate, PsoDataType.Float, 36, 0, 0), new PsoStructureEntryInfo((MetaName)2759154614, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2321281590, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)177240921, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeToFlapMin, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeToFlapMax, PsoDataType.Float, 48, 0, 0), new PsoStructureEntryInfo((MetaName)1388183900, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)810486897, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)2955815816, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)731604244, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)2942205087, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)2391787980, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)3008826210, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.ForceNoTimeslicingHeadingDiff, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceFromPlayerToDeleteStuckBird, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeUntilDeletionWhenStuckOffscreen, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeWhenStuckToIgnoreBird, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.HighLodWalkHeadingLerpRate, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.LowLodWalkHeadingLerpRate, PsoDataType.Float, 76, 0, 0), new PsoStructureEntryInfo((MetaName)325409255, PsoDataType.Float, 80, 0, 0), new PsoStructureEntryInfo((MetaName)2032071225, PsoDataType.Float, 84, 0, 0), new PsoStructureEntryInfo((MetaName)171073592, PsoDataType.Float, 88, 0, 0), @@ -9001,12 +9001,12 @@ namespace CodeWalker.GameFiles case MetaName.CTaskMotionSwimming__Tunables: return new PsoStructureInfo(MetaName.CTaskMotionSwimming__Tunables, 0, 0, 56, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2829230620, PsoDataType.SInt, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2216234163, PsoDataType.SInt, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MinStruggleTime, PsoDataType.SInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxStruggleTime, PsoDataType.SInt, 20, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)4258712195), - new PsoStructureEntryInfo((MetaName)1092654765, PsoDataType.Array, 24, 0, (MetaName)3), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)304399001), - new PsoStructureEntryInfo((MetaName)2321693669, PsoDataType.Array, 40, 0, (MetaName)5) + new PsoStructureEntryInfo(MetaName.ScubaGearVariations, PsoDataType.Array, 24, 0, (MetaName)3), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.fCargoFuel), + new PsoStructureEntryInfo(MetaName.ScubaMaskProps, PsoDataType.Array, 40, 0, (MetaName)5) ); case (MetaName)4258712195: return new PsoStructureInfo((MetaName)4258712195, 0, 0, 32, @@ -9017,60 +9017,60 @@ namespace CodeWalker.GameFiles case (MetaName)3020467458: return new PsoStructureInfo((MetaName)3020467458, 0, 0, 72, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2469984956), - new PsoStructureEntryInfo((MetaName)4006165571, PsoDataType.Array, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1478092361, PsoDataType.Structure, 24, 0, (MetaName)2354064210), - new PsoStructureEntryInfo((MetaName)505931244, PsoDataType.Structure, 48, 0, (MetaName)2354064210) + new PsoStructureEntryInfo(MetaName.Wearing, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ScubaGearWithLightsOn, PsoDataType.Structure, 24, 0, (MetaName)2354064210), + new PsoStructureEntryInfo(MetaName.ScubaGearWithLightsOff, PsoDataType.Structure, 48, 0, (MetaName)2354064210) ); case (MetaName)2354064210: return new PsoStructureInfo((MetaName)2354064210, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Component, PsoDataType.Enum, 8, 0, (MetaName)884254308), new PsoStructureEntryInfo(MetaName.DrawableId, PsoDataType.UInt, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)3029420796, PsoDataType.UInt, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.DrawableAltId, PsoDataType.UInt, 16, 0, 0) ); case (MetaName)2469984956: return new PsoStructureInfo((MetaName)2469984956, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Component, PsoDataType.Enum, 8, 0, (MetaName)884254308), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UInt, 0, 0, 0), - new PsoStructureEntryInfo((MetaName)4176789291, PsoDataType.Array, 16, 0, (MetaName)1) + new PsoStructureEntryInfo(MetaName.DrawableIds, PsoDataType.Array, 16, 0, (MetaName)1) ); - case (MetaName)304399001: - return new PsoStructureInfo((MetaName)304399001, 0, 0, 16, + case MetaName.fCargoFuel: + return new PsoStructureInfo(MetaName.fCargoFuel, 0, 0, 16, new PsoStructureEntryInfo(MetaName.ModelName, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.Index, PsoDataType.SInt, 12, 0, 0) ); case MetaName.CTaskMotionBasicLocomotionLowLod__Tunables: return new PsoStructureInfo(MetaName.CTaskMotionBasicLocomotionLowLod__Tunables, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)830448667, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)932904484, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3756162272, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)1213035272, PsoDataType.Float, 28, 0, 0) + new PsoStructureEntryInfo(MetaName.MovingExtraHeadingChangeRate, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MovingExtraHeadingChangeRateAcceleration, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.ForceUpdatesWhenTurningStartThresholdRadians, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.ForceUpdatesWhenTurningStopThresholdRadians, PsoDataType.Float, 28, 0, 0) ); case MetaName.CTaskFishLocomotion__Tunables: return new PsoStructureInfo(MetaName.CTaskFishLocomotion__Tunables, 0, 0, 120, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1138520829, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1142247737, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1055045198, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)1298540281, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.StartTurnThresholdDegrees, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.StopTurnThresholdDegrees, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTurnApproachRate, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.IdealTurnApproachRate, PsoDataType.Float, 28, 0, 0), new PsoStructureEntryInfo((MetaName)190400066, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)660335017, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.TurnAcceleration, PsoDataType.Float, 36, 0, 0), new PsoStructureEntryInfo((MetaName)2035076014, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)4133472264, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.PitchAcceleration, PsoDataType.Float, 44, 0, 0), new PsoStructureEntryInfo((MetaName)2691956573, PsoDataType.Float, 48, 0, 0), new PsoStructureEntryInfo((MetaName)1242076965, PsoDataType.Float, 52, 0, 0), new PsoStructureEntryInfo((MetaName)2945548240, PsoDataType.Float, 56, 0, 0), new PsoStructureEntryInfo((MetaName)3350282721, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)3728756551, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.FishOutOfWaterDelay, PsoDataType.Float, 64, 0, 0), new PsoStructureEntryInfo((MetaName)1246801857, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)763241052, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)1444953847, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)1909345264, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)1086011957, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)61986925, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)3431403282, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)1039725890, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)3742890223, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.AssistanceAngle, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.ExtraHeadingRate, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.SurfaceProbeHead, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.SurfaceProbeTail, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.SurfacePitchLerpRate, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.SurfaceHeightFallingLerpRate, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.SurfaceHeightRisingLerpRate, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.SurfaceHeightFollowingTriggerRange, PsoDataType.Float, 100, 0, 0), new PsoStructureEntryInfo((MetaName)2334883967, PsoDataType.Float, 104, 0, 0), new PsoStructureEntryInfo((MetaName)487169156, PsoDataType.Float, 108, 0, 0), new PsoStructureEntryInfo((MetaName)951644869, PsoDataType.String, 112, 7, 0), @@ -9079,108 +9079,108 @@ namespace CodeWalker.GameFiles case MetaName.CTaskHumanLocomotion__Tunables: return new PsoStructureInfo(MetaName.CTaskHumanLocomotion__Tunables, 0, 0, 864, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3782895898, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1302286994, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2741511192, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3394605993, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)971520507, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1182689916, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)806948898, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)3959772122, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)843042981, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2165656152, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)684879272, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)956068907, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)997046562, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)183241195, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)1662197919, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)985371239, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)2545261234, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)1926561545, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)639925745, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)1990190949, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.Player_MBRAcceleration, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.Player_MBRDeceleration, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.AI_MBRAcceleration, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.AI_MBRDeceleration, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.FromStrafeAccelerationMod, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.FastWalkRateMin, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.FastWalkRateMax, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.SlowRunRateMin, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.SlowRunRateMax, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.FastRunRateMin, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.FastRunRateMax, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.Turn180ActivationAngle, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.Turn180ConsistentAngleTolerance, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.IdleHeadingLerpRate, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.Player_IdleTurnRate, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.AI_IdleTurnRate, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.FromStrafe_WeightRate, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.FromStrafe_MovingBlendOutTime, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.IdleTransitionBlendTimeFromActionMode, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.IdleTransitionBlendTimeFromStealth, PsoDataType.Float, 92, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2557519583), - new PsoStructureEntryInfo((MetaName)2593822105, PsoDataType.Array, 96, 4, (MetaName)196629) + new PsoStructureEntryInfo(MetaName.MovingVarsSet, PsoDataType.Array, 96, 4, (MetaName)196629) ); case (MetaName)2557519583: return new PsoStructureInfo((MetaName)2557519583, 0, 0, 256, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.Standard, PsoDataType.Structure, 16, 0, (MetaName)1246324819), - new PsoStructureEntryInfo((MetaName)1367672446, PsoDataType.Structure, 96, 0, (MetaName)1246324819), - new PsoStructureEntryInfo((MetaName)2775606479, PsoDataType.Structure, 176, 0, (MetaName)1246324819) + new PsoStructureEntryInfo(MetaName.StandardAI, PsoDataType.Structure, 96, 0, (MetaName)1246324819), + new PsoStructureEntryInfo(MetaName.TighterTurn, PsoDataType.Structure, 176, 0, (MetaName)1246324819) ); case (MetaName)1246324819: return new PsoStructureInfo((MetaName)1246324819, 0, 0, 80, - new PsoStructureEntryInfo((MetaName)3163856764, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)916804787, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)2151433465, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2584063876, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2229072832, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)4203477475, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1021183862, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)817979133, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)4229364158, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)4209639571, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)206173392, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)243413468, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)3031402448, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)3334261987, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)2979286721, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)2172130562, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)3423772986, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)1171907848, PsoDataType.Bool, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)26697373, PsoDataType.Bool, 77, 0, 0) + new PsoStructureEntryInfo(MetaName.MovingDirectionSmoothingAngleMin, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MovingDirectionSmoothingAngleMax, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MovingDirectionSmoothingRateMin, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MovingDirectionSmoothingRateMaxWalk, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MovingDirectionSmoothingRateMaxRun, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MovingDirectionSmoothingRateAccelerationMin, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MovingDirectionSmoothingRateAccelerationMax, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MovingDirectionSmoothingForwardAngleWalk, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MovingDirectionSmoothingForwardAngleRun, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.MovingDirectionSmoothingForwardRateMod, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.MovingDirectionSmoothingForwardRateAccelerationMod, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.MovingExtraHeadingChangeAngleMin, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.MovingExtraHeadingChangeAngleMax, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.MovingExtraHeadingChangeRateWalk, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.MovingExtraHeadingChangeRateRun, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.MovingExtraHeadingChangeRateAccelerationMin, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.MovingExtraHeadingChangeRateAccelerationMax, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.UseExtraHeading, PsoDataType.Bool, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.UseMovingDirectionDiff, PsoDataType.Bool, 77, 0, 0) ); case MetaName.CTaskMotionTennis__Tunables: return new PsoStructureInfo(MetaName.CTaskMotionTennis__Tunables, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2509399696, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1204182041, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1932572913, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2769179410, PsoDataType.Float, 28, 0, 0) + new PsoStructureEntryInfo(MetaName.StrafeDirectionLerpRateMinAI, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.StrafeDirectionLerpRateMaxAI, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.StrafeDirectionLerpRateMinPlayer, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.StrafeDirectionLerpRateMaxPlayer, PsoDataType.Float, 28, 0, 0) ); case MetaName.CTaskQuadLocomotion__Tunables: return new PsoStructureInfo(MetaName.CTaskQuadLocomotion__Tunables, 0, 0, 184, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3129761256, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1268028398, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3543637314, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)246989054, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2582103758, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1722856329, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)3054410305, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)891286257, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)3646294886, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2324978953, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)545188344, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)3696984410, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)892232162, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)3661307080, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)1148310117, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)3928052593, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)305608474, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)3939547333, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)2123652996, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)484878979, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)3846215494, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)1243932439, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)562952832, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)1266064609, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)1010088937, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)3914009351, PsoDataType.Float, 116, 0, 0), - new PsoStructureEntryInfo((MetaName)1107407285, PsoDataType.Float, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)265096732, PsoDataType.Float, 124, 0, 0), - new PsoStructureEntryInfo((MetaName)1913804545, PsoDataType.Float, 128, 0, 0), - new PsoStructureEntryInfo((MetaName)326250284, PsoDataType.Float, 132, 0, 0), - new PsoStructureEntryInfo((MetaName)3846643666, PsoDataType.Float, 136, 0, 0), - new PsoStructureEntryInfo((MetaName)2496636494, PsoDataType.Float, 140, 0, 0), - new PsoStructureEntryInfo((MetaName)792142948, PsoDataType.Float, 144, 0, 0), - new PsoStructureEntryInfo((MetaName)2508724347, PsoDataType.Float, 148, 0, 0), - new PsoStructureEntryInfo((MetaName)3764305197, PsoDataType.Float, 152, 0, 0), - new PsoStructureEntryInfo((MetaName)577153356, PsoDataType.Float, 156, 0, 0), - new PsoStructureEntryInfo((MetaName)1520516679, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)2282663253, PsoDataType.Float, 164, 0, 0), - new PsoStructureEntryInfo((MetaName)1345455105, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo(MetaName.StartAnimatedTurnsD, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.StopAnimatedTurnsD, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.TurnTransitionDelay, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.TurnToIdleTransitionDelay, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.SteepSlopeStartAnimatedTurnsD, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.SteepSlopeStopAnimatedTurnsD, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.SteepSlopeThresholdD, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.InMotionAlignmentVelocityTolerance, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.InMotionTighterTurnsVelocityTolerance, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.InPlaceAlignmentVelocityTolerance, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.TurnSpeedMBRThreshold, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.SlowMinTurnApproachRate, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.FastMinTurnApproachRate, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.SlowTurnApproachRate, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.FastTurnApproachRate, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.SlowTurnAcceleration, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.FastTurnAcceleration, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.TurnResetThresholdD, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.ProcessPhysicsApproachRate, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableTimeslicingHeadingThresholdD, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.LowLodExtraHeadingAdjustmentRate, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.StartLocomotionBlendoutThreshold, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.StartLocomotionHeadingDeltaBlendoutThreshold, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.StartLocomotionDefaultBlendDuration, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.StartLocomotionDefaultBlendOutDuration, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.StartLocomotionEarlyOutBlendOutDuration, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.StartLocomotionWalkRunBoundary, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.StartToIdleDirectlyPhaseThreshold, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo(MetaName.MovementAcceleration, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.MinMBRToStop, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo(MetaName.PursuitModeGallopRateFactor, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo(MetaName.PursuitModeExtraHeadingRate, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo(MetaName.StoppingDistanceWalkMBR, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo(MetaName.StoppingDistanceRunMBR, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo(MetaName.StoppingDistanceGallopMBR, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.StoppingGotoPointRemainingDist, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo(MetaName.StopPhaseThreshold, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.MinStopPhaseToResumeMovement, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxStopPhaseToResumeMovement, PsoDataType.Float, 168, 0, 0), new PsoStructureEntryInfo((MetaName)951644869, PsoDataType.String, 172, 7, 0), new PsoStructureEntryInfo((MetaName)3492404675, PsoDataType.Float, 176, 0, 0), new PsoStructureEntryInfo((MetaName)3330274310, PsoDataType.Float, 180, 0, 0) @@ -9195,13 +9195,13 @@ namespace CodeWalker.GameFiles case MetaName.CEventPotentialGetRunOver__Tunables: return new PsoStructureInfo(MetaName.CEventPotentialGetRunOver__Tunables, 0, 0, 48, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)152364693, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2913264363, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)4063222790, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3174431501, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSpeedToDive, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.SpeedToAlwaysDive, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSpeedToDive, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.ChancesToDive, PsoDataType.Float, 28, 0, 0), new PsoStructureEntryInfo((MetaName)4246045187, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)3403479156, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)509314747, PsoDataType.Float, 40, 0, 0) + new PsoStructureEntryInfo(MetaName.MinDelay, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDelay, PsoDataType.Float, 40, 0, 0) ); case MetaName.CEventPotentialBlast__Tunables: return new PsoStructureInfo(MetaName.CEventPotentialBlast__Tunables, 0, 0, 16, @@ -9215,40 +9215,40 @@ namespace CodeWalker.GameFiles case MetaName.CTaskFall__Tunables: return new PsoStructureInfo(MetaName.CTaskFall__Tunables, 0, 0, 176, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)187177991, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)696030652, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)934569024, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.ImmediateHighFallSpeedPlayer, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ImmediateHighFallSpeedAi, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.HighFallProbeLength, PsoDataType.Float, 24, 0, 0), new PsoStructureEntryInfo((MetaName)1694135928, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1425777632, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.ContinuousGapHighFallTime, PsoDataType.Float, 32, 0, 0), new PsoStructureEntryInfo((MetaName)3844027585, PsoDataType.Float, 36, 0, 0), new PsoStructureEntryInfo((MetaName)3197570465, PsoDataType.Float, 40, 0, 0), new PsoStructureEntryInfo((MetaName)391736247, PsoDataType.Float, 44, 0, 0), new PsoStructureEntryInfo((MetaName)2495576534, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)712615227, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)1308347600, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)2498638030, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)1347777197, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)176941965, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)2788362157, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)4199432698, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)2760872373, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)1208994934, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)2222398831, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)2333975606, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)3639487949, PsoDataType.UInt, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)2836403845, PsoDataType.UInt, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.InAirHeadingRate, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.InAirMovementRate, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.InAirMovementApproachRate, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.LandHeadingModifier, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.StandingLandHeadingModifier, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.FallLandThreshold, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.ReenterFallLandThreshold, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.PadShakeMinIntensity, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.PadShakeMaxIntensity, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.PadShakeMinHeight, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.PadShakeMaxHeight, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.PadShakeMinDuration, PsoDataType.UInt, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.PadShakeMaxDuration, PsoDataType.UInt, 100, 0, 0), new PsoStructureEntryInfo((MetaName)2719065213, PsoDataType.Float, 104, 0, 0), new PsoStructureEntryInfo((MetaName)358840176, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)1723088470, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)793837940, PsoDataType.Float, 116, 0, 0), - new PsoStructureEntryInfo((MetaName)1882364948, PsoDataType.Float, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)3177202947, PsoDataType.Float, 124, 0, 0), - new PsoStructureEntryInfo((MetaName)145933303, PsoDataType.Float, 128, 0, 0), - new PsoStructureEntryInfo((MetaName)4164582757, PsoDataType.Float, 132, 0, 0), - new PsoStructureEntryInfo((MetaName)2538011040, PsoDataType.Float, 136, 0, 0), - new PsoStructureEntryInfo((MetaName)2847920310, PsoDataType.Float, 140, 0, 0), - new PsoStructureEntryInfo((MetaName)3337751765, PsoDataType.Float, 144, 0, 0), - new PsoStructureEntryInfo((MetaName)3897556344, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo(MetaName.VaultFallTestAngle, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.JumpFallTestAngle, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.FallTestAngleBlendOutTime, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.DiveControlMaxFallDistance, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo(MetaName.DiveControlExtraDistanceForDiveFromVehicle, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.DiveControlExtraDistanceBlendOutSpeed, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo(MetaName.DiveWaterOffsetToHitFullyInControlWeight, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo(MetaName.LandRollHeightFromJump, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo(MetaName.LandRollHeightFromVault, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo(MetaName.LandRollHeight, PsoDataType.Float, 148, 0, 0), new PsoStructureEntryInfo((MetaName)4229439207, PsoDataType.Float, 152, 0, 0), new PsoStructureEntryInfo((MetaName)2581310221, PsoDataType.Float, 156, 0, 0), new PsoStructureEntryInfo((MetaName)3807299066, PsoDataType.Float, 160, 0, 0), @@ -9258,372 +9258,372 @@ namespace CodeWalker.GameFiles case MetaName.CTaskFlyToPoint__Tunables: return new PsoStructureInfo(MetaName.CTaskFlyToPoint__Tunables, 0, 0, 40, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1983182002, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)552115106, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3968352519, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)4040142753, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)530164593, PsoDataType.Float, 32, 0, 0) + new PsoStructureEntryInfo(MetaName.HeightMapDelta, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.HeightMapLookAheadDist, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.InitialTerrainAvoidanceAngleD, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.ProgressiveTerrainAvoidanceAngleD, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenIncreasingAvoidanceAngle, PsoDataType.Float, 32, 0, 0) ); case MetaName.CTaskGetUp__Tunables: return new PsoStructureInfo(MetaName.CTaskGetUp__Tunables, 0, 0, 72, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1193017389, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)461478411, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)266220607, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)4255515242, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)992799658, PsoDataType.Bool, 29, 0, 0), - new PsoStructureEntryInfo((MetaName)2093200171, PsoDataType.SInt, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1512271781, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.fPreferInjuredGetupPlayerHealthThreshold, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.fInjuredGetupImpulseMag2, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinTimeInGetUpToAllowCover, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.AllowNonPlayerHighFallAbort, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.AllowOffScreenHighFallAbort, PsoDataType.Bool, 29, 0, 0), + new PsoStructureEntryInfo(MetaName.FallTimeBeforeHighFallAbort, PsoDataType.SInt, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MinFallSpeedForHighFallAbort, PsoDataType.Float, 36, 0, 0), new PsoStructureEntryInfo((MetaName)866980885, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)1887702115, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)3215816764, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)1412213192, PsoDataType.SInt, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)123069407, PsoDataType.SInt, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)774340160, PsoDataType.SInt, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)4110175468, PsoDataType.SInt, 64, 0, 0) + new PsoStructureEntryInfo(MetaName.PlayerMoverFixupMaxExtraHeadingChange, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.AiMoverFixupMaxExtraHeadingChange, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.StartClipWaitTimePlayer, PsoDataType.SInt, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.StartClipWaitTime, PsoDataType.SInt, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.StuckWaitTime, PsoDataType.SInt, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.StuckWaitTimeMp, PsoDataType.SInt, 64, 0, 0) ); case MetaName.CTaskGoToScenario__Tunables: return new PsoStructureInfo(MetaName.CTaskGoToScenario__Tunables, 0, 0, 48, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2832422495, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2874710517, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1440906110, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)126173811, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2433763429, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2212250161, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)1732510557, PsoDataType.Float, 40, 0, 0) + new PsoStructureEntryInfo(MetaName.ClosePointDistanceSquared, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ClosePointCounterMax, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.HeadingDiffStartBlendDegrees, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.PositionDiffStartBlend, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ExactStopTargetRadius, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.PreferNearWaterSurfaceArrivalRadius, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenBrokenPointChecks, PsoDataType.Float, 40, 0, 0) ); case MetaName.CTaskMoveToTacticalPoint__Tunables: return new PsoStructureInfo(MetaName.CTaskMoveToTacticalPoint__Tunables, 0, 0, 224, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3333387022, PsoDataType.Structure, 16, 0, (MetaName)2164459263), - new PsoStructureEntryInfo((MetaName)4292170157, PsoDataType.Float, 208, 0, 0), - new PsoStructureEntryInfo((MetaName)331709996, PsoDataType.Float, 212, 0, 0), - new PsoStructureEntryInfo((MetaName)2494967040, PsoDataType.Float, 216, 0, 0), - new PsoStructureEntryInfo((MetaName)847783567, PsoDataType.Float, 220, 0, 0) + new PsoStructureEntryInfo(MetaName.Scoring, PsoDataType.Structure, 16, 0, (MetaName)2164459263), + new PsoStructureEntryInfo(MetaName.TargetRadiusForMoveToPosition, PsoDataType.Float, 208, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeUntilRelease, PsoDataType.Float, 212, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceToConsiderCloseToPositionToMoveTo, PsoDataType.Float, 216, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenInfluenceSphereChecks, PsoDataType.Float, 220, 0, 0) ); case (MetaName)2164459263: return new PsoStructureInfo((MetaName)2164459263, 0, 0, 192, - new PsoStructureEntryInfo((MetaName)2523520621, PsoDataType.Structure, 8, 0, (MetaName)3018405043), - new PsoStructureEntryInfo((MetaName)680699981, PsoDataType.Structure, 88, 0, (MetaName)1211016943), + new PsoStructureEntryInfo(MetaName.CoverPoint, PsoDataType.Structure, 8, 0, (MetaName)3018405043), + new PsoStructureEntryInfo(MetaName.NavMeshPoint, PsoDataType.Structure, 88, 0, (MetaName)1211016943), new PsoStructureEntryInfo(MetaName.Position, PsoDataType.Structure, 160, 0, (MetaName)3791189200) ); case (MetaName)3018405043: return new PsoStructureInfo((MetaName)3018405043, 0, 0, 80, - new PsoStructureEntryInfo((MetaName)212355988, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2733810571, PsoDataType.Structure, 16, 0, (MetaName)1890577968), - new PsoStructureEntryInfo((MetaName)581818714, PsoDataType.Structure, 32, 0, (MetaName)3436208238) + new PsoStructureEntryInfo(MetaName.Base, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.Bonus, PsoDataType.Structure, 16, 0, (MetaName)1890577968), + new PsoStructureEntryInfo(MetaName.Penalty, PsoDataType.Structure, 32, 0, (MetaName)3436208238) ); case (MetaName)1890577968: return new PsoStructureInfo((MetaName)1890577968, 0, 0, 16, - new PsoStructureEntryInfo((MetaName)2479092473, PsoDataType.Float, 8, 0, 0) + new PsoStructureEntryInfo(MetaName.Current, PsoDataType.Float, 8, 0, 0) ); case (MetaName)3436208238: return new PsoStructureInfo((MetaName)3436208238, 0, 0, 48, - new PsoStructureEntryInfo((MetaName)1572599387, PsoDataType.Structure, 8, 0, (MetaName)532562236), - new PsoStructureEntryInfo((MetaName)1995960590, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2250254670, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)3709090817, PsoDataType.Float, 40, 0, 0) + new PsoStructureEntryInfo(MetaName.BadRoute, PsoDataType.Structure, 8, 0, (MetaName)532562236), + new PsoStructureEntryInfo(MetaName.Arc, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.LineOfSight, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.Nearby, PsoDataType.Float, 40, 0, 0) ); case (MetaName)532562236: return new PsoStructureInfo((MetaName)532562236, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)2828335077, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1433159873, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.ValueForMin, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ValueForMax, PsoDataType.Float, 12, 0, 0), new PsoStructureEntryInfo(MetaName.Min, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo(MetaName.Max, PsoDataType.Float, 20, 0, 0) ); case (MetaName)1211016943: return new PsoStructureInfo((MetaName)1211016943, 0, 0, 72, - new PsoStructureEntryInfo((MetaName)212355988, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2733810571, PsoDataType.Structure, 16, 0, (MetaName)1762528765), - new PsoStructureEntryInfo((MetaName)581818714, PsoDataType.Structure, 32, 0, (MetaName)2194913513) + new PsoStructureEntryInfo(MetaName.Base, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.Bonus, PsoDataType.Structure, 16, 0, (MetaName)1762528765), + new PsoStructureEntryInfo(MetaName.Penalty, PsoDataType.Structure, 32, 0, (MetaName)2194913513) ); case (MetaName)1762528765: return new PsoStructureInfo((MetaName)1762528765, 0, 0, 16, - new PsoStructureEntryInfo((MetaName)2479092473, PsoDataType.Float, 8, 0, 0) + new PsoStructureEntryInfo(MetaName.Current, PsoDataType.Float, 8, 0, 0) ); case (MetaName)2194913513: return new PsoStructureInfo((MetaName)2194913513, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)1572599387, PsoDataType.Structure, 8, 0, (MetaName)333617339), - new PsoStructureEntryInfo((MetaName)2250254670, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)3709090817, PsoDataType.Float, 36, 0, 0) + new PsoStructureEntryInfo(MetaName.BadRoute, PsoDataType.Structure, 8, 0, (MetaName)333617339), + new PsoStructureEntryInfo(MetaName.LineOfSight, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.Nearby, PsoDataType.Float, 36, 0, 0) ); case (MetaName)333617339: return new PsoStructureInfo((MetaName)333617339, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)2828335077, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1433159873, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.ValueForMin, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ValueForMax, PsoDataType.Float, 12, 0, 0), new PsoStructureEntryInfo(MetaName.Min, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo(MetaName.Max, PsoDataType.Float, 20, 0, 0) ); case (MetaName)3791189200: return new PsoStructureInfo((MetaName)3791189200, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)1011332177, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2889265507, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)1140912184, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2733041160, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)502596100, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)744506381, PsoDataType.Float, 28, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxDistanceFromPed, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ValueForMaxDistanceFromPed, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.ValueForMinDistanceFromPed, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceFromOptimal, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.ValueForMaxDistanceFromOptimal, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.ValueForMinDistanceFromOptimal, PsoDataType.Float, 28, 0, 0) ); case MetaName.CTaskMoveCrossRoadAtTrafficLights__Tunables: return new PsoStructureInfo(MetaName.CTaskMoveCrossRoadAtTrafficLights__Tunables, 0, 0, 64, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)956704533, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.bTrafficLightPositioning, PsoDataType.Bool, 16, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)645072887), - new PsoStructureEntryInfo((MetaName)2967055211, PsoDataType.Array, 24, 0, (MetaName)2), - new PsoStructureEntryInfo((MetaName)3623500230, PsoDataType.UInt, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)398266299, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)1248305822, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2115554015, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)2354781986, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)1991353814, PsoDataType.Bool, 60, 0, 0) + new PsoStructureEntryInfo(MetaName.WaitingOffsets, PsoDataType.Array, 24, 0, (MetaName)2), + new PsoStructureEntryInfo(MetaName.iMaxPedsAtTrafficLights, PsoDataType.UInt, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinDistanceBetweenPeds, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.fDecideToRunChance, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.fPlayerObstructionCheckRadius, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.fPlayerObstructionRadius, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.bDebugRender, PsoDataType.Bool, 60, 0, 0) ); case (MetaName)645072887: return new PsoStructureInfo((MetaName)645072887, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)4135922358, PsoDataType.Float3, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.Pos, PsoDataType.Float3, 16, 0, 0) ); case MetaName.CTaskMoveWithinAttackWindow__Tunables: return new PsoStructureInfo(MetaName.CTaskMoveWithinAttackWindow__Tunables, 0, 0, 48, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3595841120, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1154727971, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1305363589, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3574291632, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)685847089, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1415555709, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)328649625, PsoDataType.Float, 40, 0, 0) + new PsoStructureEntryInfo(MetaName.fMaxAngleOffset, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinAlliesForMaxAngleOffset, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxAllyDistance, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxRandomAdditionalOffset, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxRouteDistanceModifier, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinTimeToWait, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxTimeToWait, PsoDataType.Float, 40, 0, 0) ); case MetaName.CTaskMoveFollowNavMesh__Tunables: return new PsoStructureInfo(MetaName.CTaskMoveFollowNavMesh__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3188916891, PsoDataType.UByte, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.uRepeatedAttemptsBeforeTeleportToLeader, PsoDataType.UByte, 16, 0, 0) ); case MetaName.CTaskParachute__Tunables: return new PsoStructureInfo(MetaName.CTaskParachute__Tunables, 0, 0, 1312, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)143335713, PsoDataType.Structure, 16, 0, (MetaName)2342773550), - new PsoStructureEntryInfo((MetaName)2700491627, PsoDataType.Structure, 40, 0, (MetaName)1918103038), - new PsoStructureEntryInfo((MetaName)4264481693, PsoDataType.Structure, 64, 0, (MetaName)3788337195), - new PsoStructureEntryInfo((MetaName)960147082, PsoDataType.Structure, 96, 0, (MetaName)4209854321), - new PsoStructureEntryInfo((MetaName)2890662262, PsoDataType.Structure, 144, 0, (MetaName)4209854321), - new PsoStructureEntryInfo((MetaName)2243095299, PsoDataType.Structure, 192, 0, (MetaName)3009185102), - new PsoStructureEntryInfo((MetaName)1126598037, PsoDataType.Structure, 208, 0, (MetaName)560894723), - new PsoStructureEntryInfo((MetaName)590082074, PsoDataType.Structure, 264, 0, (MetaName)2934924657), - new PsoStructureEntryInfo((MetaName)3248104514, PsoDataType.Structure, 280, 0, (MetaName)2046463254), - new PsoStructureEntryInfo((MetaName)1163966079, PsoDataType.Structure, 464, 0, (MetaName)2206940602), - new PsoStructureEntryInfo((MetaName)3151745571, PsoDataType.Structure, 552, 0, (MetaName)954219518), + new PsoStructureEntryInfo(MetaName.ChangeRatesForSkydiving, PsoDataType.Structure, 16, 0, (MetaName)2342773550), + new PsoStructureEntryInfo(MetaName.ChangeRatesForParachuting, PsoDataType.Structure, 40, 0, (MetaName)1918103038), + new PsoStructureEntryInfo(MetaName.FlightAngleLimitsForSkydiving, PsoDataType.Structure, 64, 0, (MetaName)3788337195), + new PsoStructureEntryInfo(MetaName.FlightAngleLimitsForParachutingNormal, PsoDataType.Structure, 96, 0, (MetaName)4209854321), + new PsoStructureEntryInfo(MetaName.FlightAngleLimitsForParachutingBraking, PsoDataType.Structure, 144, 0, (MetaName)4209854321), + new PsoStructureEntryInfo(MetaName.PedAngleLimitsForSkydiving, PsoDataType.Structure, 192, 0, (MetaName)3009185102), + new PsoStructureEntryInfo(MetaName.MoveParameters, PsoDataType.Structure, 208, 0, (MetaName)560894723), + new PsoStructureEntryInfo(MetaName.ForcesForSkydiving, PsoDataType.Structure, 264, 0, (MetaName)2934924657), + new PsoStructureEntryInfo(MetaName.ParachutingAi, PsoDataType.Structure, 280, 0, (MetaName)2046463254), + new PsoStructureEntryInfo(MetaName.Landing, PsoDataType.Structure, 464, 0, (MetaName)2206940602), + new PsoStructureEntryInfo(MetaName.CrashLanding, PsoDataType.Structure, 552, 0, (MetaName)954219518), new PsoStructureEntryInfo(MetaName.Allow, PsoDataType.Structure, 592, 0, (MetaName)202257215), - new PsoStructureEntryInfo((MetaName)3095142060, PsoDataType.Structure, 616, 0, (MetaName)892940524), - new PsoStructureEntryInfo((MetaName)3256630458, PsoDataType.Structure, 640, 0, (MetaName)3266862316), - new PsoStructureEntryInfo((MetaName)1349337627, PsoDataType.Structure, 656, 0, (MetaName)889782022), - new PsoStructureEntryInfo((MetaName)67050499, PsoDataType.Structure, 1008, 0, (MetaName)629460530), - new PsoStructureEntryInfo((MetaName)3357299335, PsoDataType.Structure, 1024, 0, (MetaName)196547756), - new PsoStructureEntryInfo((MetaName)3328657748, PsoDataType.Structure, 1040, 0, (MetaName)1078023650), - new PsoStructureEntryInfo((MetaName)3260617242, PsoDataType.Structure, 1144, 0, (MetaName)2787675897), - new PsoStructureEntryInfo((MetaName)2667671232, PsoDataType.Structure, 1160, 0, (MetaName)947557087), - new PsoStructureEntryInfo((MetaName)3149009694, PsoDataType.Float, 1216, 0, 0), - new PsoStructureEntryInfo((MetaName)4258663913, PsoDataType.Float, 1220, 0, 0), - new PsoStructureEntryInfo((MetaName)950864184, PsoDataType.Float, 1224, 0, 0), - new PsoStructureEntryInfo((MetaName)119610653, PsoDataType.Float, 1228, 0, 0), - new PsoStructureEntryInfo((MetaName)2724758116, PsoDataType.Float, 1232, 0, 0), - new PsoStructureEntryInfo((MetaName)3041351606, PsoDataType.Float, 1236, 0, 0), - new PsoStructureEntryInfo((MetaName)135326749, PsoDataType.Float, 1240, 0, 0), - new PsoStructureEntryInfo((MetaName)332728501, PsoDataType.Float, 1244, 0, 0), - new PsoStructureEntryInfo((MetaName)3323891652, PsoDataType.Float, 1248, 0, 0), - new PsoStructureEntryInfo((MetaName)4131153122, PsoDataType.Float, 1252, 0, 0), - new PsoStructureEntryInfo((MetaName)3018517000, PsoDataType.Float, 1256, 0, 0), - new PsoStructureEntryInfo((MetaName)2027520168, PsoDataType.Float, 1260, 0, 0), - new PsoStructureEntryInfo((MetaName)87152394, PsoDataType.Float, 1264, 0, 0), - new PsoStructureEntryInfo((MetaName)1753140963, PsoDataType.String, 1268, 7, 0), - new PsoStructureEntryInfo((MetaName)745109363, PsoDataType.String, 1272, 7, 0), + new PsoStructureEntryInfo(MetaName.CameraSettings, PsoDataType.Structure, 616, 0, (MetaName)892940524), + new PsoStructureEntryInfo(MetaName.ParachutePhysics, PsoDataType.Structure, 640, 0, (MetaName)3266862316), + new PsoStructureEntryInfo(MetaName.ExtraForces, PsoDataType.Structure, 656, 0, (MetaName)889782022), + new PsoStructureEntryInfo(MetaName.Rendering, PsoDataType.Structure, 1008, 0, (MetaName)629460530), + new PsoStructureEntryInfo(MetaName.LowLod, PsoDataType.Structure, 1024, 0, (MetaName)196547756), + new PsoStructureEntryInfo(MetaName.ParachuteBones, PsoDataType.Structure, 1040, 0, (MetaName)1078023650), + new PsoStructureEntryInfo(MetaName.Aiming, PsoDataType.Structure, 1144, 0, (MetaName)2787675897), + new PsoStructureEntryInfo(MetaName.PadShake, PsoDataType.Structure, 1160, 0, (MetaName)947557087), + new PsoStructureEntryInfo(MetaName.BrakingDifferenceForLinearVZMin, PsoDataType.Float, 1216, 0, 0), + new PsoStructureEntryInfo(MetaName.BrakingDifferenceForLinearVZMax, PsoDataType.Float, 1220, 0, 0), + new PsoStructureEntryInfo(MetaName.LinearVZForBrakingDifferenceMin, PsoDataType.Float, 1224, 0, 0), + new PsoStructureEntryInfo(MetaName.LinearVZForBrakingDifferenceMax, PsoDataType.Float, 1228, 0, 0), + new PsoStructureEntryInfo(MetaName.PitchRatioForLinearVZMin, PsoDataType.Float, 1232, 0, 0), + new PsoStructureEntryInfo(MetaName.PitchRatioForLinearVZMax, PsoDataType.Float, 1236, 0, 0), + new PsoStructureEntryInfo(MetaName.LinearVZForPitchRatioMin, PsoDataType.Float, 1240, 0, 0), + new PsoStructureEntryInfo(MetaName.LinearVZForPitchRatioMax, PsoDataType.Float, 1244, 0, 0), + new PsoStructureEntryInfo(MetaName.MinBrakeForCloseUpCamera, PsoDataType.Float, 1248, 0, 0), + new PsoStructureEntryInfo(MetaName.ParachuteMass, PsoDataType.Float, 1252, 0, 0), + new PsoStructureEntryInfo(MetaName.ParachuteMassReduced, PsoDataType.Float, 1256, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeToLookAheadForFutureTargetPosition, PsoDataType.Float, 1260, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDifferenceToAverageBrakes, PsoDataType.Float, 1264, 0, 0), + new PsoStructureEntryInfo(MetaName.ModelForParachuteInSP, PsoDataType.String, 1268, 7, 0), + new PsoStructureEntryInfo(MetaName.ModelForParachuteInMP, PsoDataType.String, 1272, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)974228846), - new PsoStructureEntryInfo((MetaName)1735940634, PsoDataType.Array, 1280, 0, (MetaName)36), + new PsoStructureEntryInfo(MetaName.ParachutePackVariations, PsoDataType.Array, 1280, 0, (MetaName)36), new PsoStructureEntryInfo(MetaName.FirstPersonDriveByIKOffset, PsoDataType.Float3, 1296, 0, 0) ); case (MetaName)2342773550: return new PsoStructureInfo((MetaName)2342773550, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Pitch, PsoDataType.Float, 8, 0, 0), new PsoStructureEntryInfo(MetaName.Roll, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)2514469802, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.Yaw, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo(MetaName.Heading, PsoDataType.Float, 20, 0, 0) ); case (MetaName)1918103038: return new PsoStructureInfo((MetaName)1918103038, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Pitch, PsoDataType.Float, 8, 0, 0), new PsoStructureEntryInfo(MetaName.Roll, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)2514469802, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3493497994, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.Yaw, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.Brake, PsoDataType.Float, 20, 0, 0) ); case (MetaName)3788337195: return new PsoStructureInfo((MetaName)3788337195, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)509392339, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1035721466, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)4261179401, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1361361101, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2297479061, PsoDataType.Float, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.MinPitch, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.InflectionPitch, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPitch, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRoll, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxYaw, PsoDataType.Float, 24, 0, 0) ); case (MetaName)4209854321: return new PsoStructureInfo((MetaName)4209854321, 0, 0, 48, - new PsoStructureEntryInfo((MetaName)509392339, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)4261179401, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)4013155074, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2707471304, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1361361101, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)430837016, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)494928189, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1128820245, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)1251049479, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2297479061, PsoDataType.Float, 44, 0, 0) + new PsoStructureEntryInfo(MetaName.MinPitch, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPitch, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRollFromStick, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRollFromBrake, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRoll, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxYawFromStick, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxYawFromRoll, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.RollForMinYaw, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.RollForMaxYaw, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxYaw, PsoDataType.Float, 44, 0, 0) ); case (MetaName)3009185102: return new PsoStructureInfo((MetaName)3009185102, 0, 0, 16, - new PsoStructureEntryInfo((MetaName)509392339, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)4261179401, PsoDataType.Float, 12, 0, 0) + new PsoStructureEntryInfo(MetaName.MinPitch, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPitch, PsoDataType.Float, 12, 0, 0) ); case (MetaName)560894723: return new PsoStructureInfo((MetaName)560894723, 0, 0, 56, - new PsoStructureEntryInfo((MetaName)2611998079, PsoDataType.Structure, 8, 0, (MetaName)801836577) + new PsoStructureEntryInfo(MetaName.Parachuting, PsoDataType.Structure, 8, 0, (MetaName)801836577) ); case (MetaName)801836577: return new PsoStructureInfo((MetaName)801836577, 0, 0, 48, - new PsoStructureEntryInfo((MetaName)78660797, PsoDataType.Structure, 8, 0, (MetaName)2238420428), - new PsoStructureEntryInfo((MetaName)1228835903, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1610340719, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)888388965, PsoDataType.Float, 40, 0, 0) + new PsoStructureEntryInfo(MetaName.InterpRates, PsoDataType.Structure, 8, 0, (MetaName)2238420428), + new PsoStructureEntryInfo(MetaName.MinParachutePitch, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxParachutePitch, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxParachuteRoll, PsoDataType.Float, 40, 0, 0) ); case (MetaName)2238420428: return new PsoStructureInfo((MetaName)2238420428, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)1871798248, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1965746967, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)4050970672, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)413002367, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.StickX, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.StickY, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.TotalStickInput, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.CurrentHeading, PsoDataType.Float, 20, 0, 0) ); case (MetaName)2934924657: return new PsoStructureInfo((MetaName)2934924657, 0, 0, 16, - new PsoStructureEntryInfo((MetaName)3597427549, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)489565795, PsoDataType.Float, 12, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxThrust, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxLift, PsoDataType.Float, 12, 0, 0) ); case (MetaName)2046463254: return new PsoStructureInfo((MetaName)2046463254, 0, 0, 184, new PsoStructureEntryInfo(MetaName.Target, PsoDataType.Structure, 8, 0, (MetaName)4228543633), - new PsoStructureEntryInfo((MetaName)3493497994, PsoDataType.Structure, 24, 0, (MetaName)1021020250), - new PsoStructureEntryInfo((MetaName)3016943843, PsoDataType.Structure, 56, 0, (MetaName)1305267132), - new PsoStructureEntryInfo((MetaName)3154540810, PsoDataType.Structure, 80, 0, (MetaName)1305267132), - new PsoStructureEntryInfo((MetaName)2757465295, PsoDataType.Structure, 104, 0, (MetaName)2131363216), - new PsoStructureEntryInfo((MetaName)2154895854, PsoDataType.Structure, 128, 0, (MetaName)2131363216), - new PsoStructureEntryInfo((MetaName)2901180925, PsoDataType.Structure, 152, 0, (MetaName)209420440) + new PsoStructureEntryInfo(MetaName.Brake, PsoDataType.Structure, 24, 0, (MetaName)1021020250), + new PsoStructureEntryInfo(MetaName.RollForNormal, PsoDataType.Structure, 56, 0, (MetaName)1305267132), + new PsoStructureEntryInfo(MetaName.RollForBraking, PsoDataType.Structure, 80, 0, (MetaName)1305267132), + new PsoStructureEntryInfo(MetaName.PitchForNormal, PsoDataType.Structure, 104, 0, (MetaName)2131363216), + new PsoStructureEntryInfo(MetaName.PitchForBraking, PsoDataType.Structure, 128, 0, (MetaName)2131363216), + new PsoStructureEntryInfo(MetaName.Drop, PsoDataType.Structure, 152, 0, (MetaName)209420440) ); case (MetaName)4228543633: return new PsoStructureInfo((MetaName)4228543633, 0, 0, 16, - new PsoStructureEntryInfo((MetaName)4143621306, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1514279376, PsoDataType.Float, 12, 0, 0) + new PsoStructureEntryInfo(MetaName.MinDistanceToAdjust, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.Adjustment, PsoDataType.Float, 12, 0, 0) ); case (MetaName)1021020250: return new PsoStructureInfo((MetaName)1021020250, 0, 0, 32, new PsoStructureEntryInfo(MetaName.MaxDistance, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)64309451, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)3884700100, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)485092302, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)760576493, PsoDataType.Float, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.DistanceToStart, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.DistanceForFull, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.AngleForMin, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.AngleForMax, PsoDataType.Float, 24, 0, 0) ); case (MetaName)1305267132: return new PsoStructureInfo((MetaName)1305267132, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)3784903261, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2207962562, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)1576728196, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2536907014, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.AngleDifferenceForMin, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.AngleDifferenceForMax, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.StickValueForMin, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.StickValueForMax, PsoDataType.Float, 20, 0, 0) ); case (MetaName)2131363216: return new PsoStructureInfo((MetaName)2131363216, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)2923527027, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2339537570, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)1936752322, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.DesiredTimeToResolveAngleDifference, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.DeltaForMaxStickChange, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxStickChangePerSecond, PsoDataType.Float, 16, 0, 0) ); case (MetaName)209420440: return new PsoStructureInfo((MetaName)209420440, 0, 0, 32, new PsoStructureEntryInfo(MetaName.MinDistance, PsoDataType.Float, 8, 0, 0), new PsoStructureEntryInfo(MetaName.MaxDistance, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)1206332797, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)4276410337, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3500436404, PsoDataType.Float, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.MinHeight, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxHeight, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDot, PsoDataType.Float, 24, 0, 0) ); case (MetaName)2206940602: return new PsoStructureInfo((MetaName)2206940602, 0, 0, 88, - new PsoStructureEntryInfo((MetaName)3543710223, PsoDataType.Structure, 8, 0, (MetaName)3954319942), - new PsoStructureEntryInfo((MetaName)2650334467, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2876804674, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)4118156471, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)2039762038, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)1260903928, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)4197363947, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)2103581552, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)1293732320, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)3113590399, PsoDataType.Float, 80, 0, 0) + new PsoStructureEntryInfo(MetaName.NormalThresholds, PsoDataType.Structure, 8, 0, (MetaName)3954319942), + new PsoStructureEntryInfo(MetaName.MaxVelocityForSlow, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.MinVelocityForFast, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.ParachuteProbeRadius, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.MinStickMagnitudeForEarlyOutMovement, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.FramesToLookAheadForProbe, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.BlendDurationForEarlyOut, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.AngleForRunway, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.LookAheadForRunway, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.DropForRunway, PsoDataType.Float, 80, 0, 0) ); case (MetaName)3954319942: return new PsoStructureInfo((MetaName)3954319942, 0, 0, 40, new PsoStructureEntryInfo(MetaName.Normal, PsoDataType.Structure, 8, 0, (MetaName)1558938460), - new PsoStructureEntryInfo((MetaName)3150145630, PsoDataType.Structure, 24, 0, (MetaName)1558938460) + new PsoStructureEntryInfo(MetaName.Braking, PsoDataType.Structure, 24, 0, (MetaName)1558938460) ); case (MetaName)1558938460: return new PsoStructureInfo((MetaName)1558938460, 0, 0, 16, new PsoStructureEntryInfo(MetaName.Forward, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2519270732, PsoDataType.Float, 12, 0, 0) + new PsoStructureEntryInfo(MetaName.Collision, PsoDataType.Float, 12, 0, 0) ); case (MetaName)954219518: return new PsoStructureInfo((MetaName)954219518, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)336137001, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1928060490, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)4262842160, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2440882257, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)4118156471, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)739494681, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1260903928, PsoDataType.Float, 32, 0, 0) + new PsoStructureEntryInfo(MetaName.NoParachuteTimeForMinCollisionNormalThreshold, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.NoParachuteMaxCollisionNormalThreshold, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.NoParachuteMinCollisionNormalThreshold, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.NoParachuteMaxPitch, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.ParachuteProbeRadius, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.ParachuteUpThreshold, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.FramesToLookAheadForProbe, PsoDataType.Float, 32, 0, 0) ); case (MetaName)202257215: return new PsoStructureInfo((MetaName)202257215, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)3563387020, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1694228856, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)3903892409, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.MinClearDistanceBelow, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MinFallingSpeedInRagdoll, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeInRagdoll, PsoDataType.Float, 16, 0, 0) ); case (MetaName)892940524: return new PsoStructureInfo((MetaName)892940524, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)365994391, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3869597064, PsoDataType.String, 12, 7, 0), - new PsoStructureEntryInfo((MetaName)2309595247, PsoDataType.String, 16, 7, 0) + new PsoStructureEntryInfo(MetaName.SkyDivingCamera, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ParachuteCamera, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo(MetaName.ParachuteCloseUpCamera, PsoDataType.String, 16, 7, 0) ); case (MetaName)3266862316: return new PsoStructureInfo((MetaName)3266862316, 0, 0, 16, - new PsoStructureEntryInfo((MetaName)1202762864, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)904794347, PsoDataType.Float, 12, 0, 0) + new PsoStructureEntryInfo(MetaName.ParachuteInitialVelocityY, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ParachuteInitialVelocityZ, PsoDataType.Float, 12, 0, 0) ); case (MetaName)889782022: return new PsoStructureInfo((MetaName)889782022, 0, 0, 352, - new PsoStructureEntryInfo((MetaName)2611998079, PsoDataType.Structure, 8, 0, (MetaName)1386112053) + new PsoStructureEntryInfo(MetaName.Parachuting, PsoDataType.Structure, 8, 0, (MetaName)1386112053) ); case (MetaName)1386112053: return new PsoStructureInfo((MetaName)1386112053, 0, 0, 344, new PsoStructureEntryInfo(MetaName.Normal, PsoDataType.Structure, 8, 0, (MetaName)899207522), - new PsoStructureEntryInfo((MetaName)3150145630, PsoDataType.Structure, 224, 0, (MetaName)3310740500) + new PsoStructureEntryInfo(MetaName.Braking, PsoDataType.Structure, 224, 0, (MetaName)3310740500) ); case (MetaName)899207522: return new PsoStructureInfo((MetaName)899207522, 0, 0, 216, - new PsoStructureEntryInfo((MetaName)914788843, PsoDataType.Structure, 8, 0, (MetaName)3387028743), - new PsoStructureEntryInfo((MetaName)320841962, PsoDataType.Structure, 120, 0, (MetaName)3597070589) + new PsoStructureEntryInfo(MetaName.TurnFromStick, PsoDataType.Structure, 8, 0, (MetaName)3387028743), + new PsoStructureEntryInfo(MetaName.TurnFromRoll, PsoDataType.Structure, 120, 0, (MetaName)3597070589) ); case (MetaName)3387028743: return new PsoStructureInfo((MetaName)3387028743, 0, 0, 112, - new PsoStructureEntryInfo((MetaName)3814756382, PsoDataType.Structure, 8, 0, (MetaName)3597070589), - new PsoStructureEntryInfo((MetaName)2547715741, PsoDataType.Bool, 104, 0, 0) + new PsoStructureEntryInfo(MetaName.FromValue, PsoDataType.Structure, 8, 0, (MetaName)3597070589), + new PsoStructureEntryInfo(MetaName.UseVerticalAxis, PsoDataType.Bool, 104, 0, 0) ); case (MetaName)3597070589: return new PsoStructureInfo((MetaName)3597070589, 0, 0, 96, - new PsoStructureEntryInfo((MetaName)2828335077, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1433159873, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)324547252, PsoDataType.Structure, 16, 0, (MetaName)162458425), - new PsoStructureEntryInfo((MetaName)1611654117, PsoDataType.Structure, 40, 0, (MetaName)162458425), - new PsoStructureEntryInfo((MetaName)3107625217, PsoDataType.Structure, 64, 0, (MetaName)162458425), - new PsoStructureEntryInfo((MetaName)3419197588, PsoDataType.Bool, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)2795607090, PsoDataType.Bool, 89, 0, 0) + new PsoStructureEntryInfo(MetaName.ValueForMin, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ValueForMax, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MinValue, PsoDataType.Structure, 16, 0, (MetaName)162458425), + new PsoStructureEntryInfo(MetaName.ZeroValue, PsoDataType.Structure, 40, 0, (MetaName)162458425), + new PsoStructureEntryInfo(MetaName.MaxValue, PsoDataType.Structure, 64, 0, (MetaName)162458425), + new PsoStructureEntryInfo(MetaName.IsLocal, PsoDataType.Bool, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.ClearZ, PsoDataType.Bool, 89, 0, 0) ); case (MetaName)162458425: return new PsoStructureInfo((MetaName)162458425, 0, 0, 24, @@ -9633,33 +9633,33 @@ namespace CodeWalker.GameFiles ); case (MetaName)3310740500: return new PsoStructureInfo((MetaName)3310740500, 0, 0, 120, - new PsoStructureEntryInfo((MetaName)914788843, PsoDataType.Structure, 8, 0, (MetaName)3387028743) + new PsoStructureEntryInfo(MetaName.TurnFromStick, PsoDataType.Structure, 8, 0, (MetaName)3387028743) ); case (MetaName)629460530: return new PsoStructureInfo((MetaName)629460530, 0, 0, 16, new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)731090194, PsoDataType.Bool, 9, 0, 0), - new PsoStructureEntryInfo((MetaName)1879187973, PsoDataType.Bool, 10, 0, 0) + new PsoStructureEntryInfo(MetaName.RunwayProbes, PsoDataType.Bool, 9, 0, 0), + new PsoStructureEntryInfo(MetaName.ValidityProbes, PsoDataType.Bool, 10, 0, 0) ); case (MetaName)196547756: return new PsoStructureInfo((MetaName)196547756, 0, 0, 16, new PsoStructureEntryInfo(MetaName.MinDistance, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)715231316, PsoDataType.Bool, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)2562048776, PsoDataType.Bool, 13, 0, 0) + new PsoStructureEntryInfo(MetaName.AlwaysUse, PsoDataType.Bool, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.NeverUse, PsoDataType.Bool, 13, 0, 0) ); case (MetaName)1078023650: return new PsoStructureInfo((MetaName)1078023650, 0, 0, 104, - new PsoStructureEntryInfo((MetaName)102733762, PsoDataType.Structure, 8, 0, (MetaName)2874150626), - new PsoStructureEntryInfo((MetaName)2936843542, PsoDataType.Structure, 32, 0, (MetaName)2874150626), - new PsoStructureEntryInfo((MetaName)2742077142, PsoDataType.Structure, 56, 0, (MetaName)2874150626), - new PsoStructureEntryInfo((MetaName)2577801154, PsoDataType.Structure, 80, 0, (MetaName)2874150626) + new PsoStructureEntryInfo(MetaName.LeftGrip, PsoDataType.Structure, 8, 0, (MetaName)2874150626), + new PsoStructureEntryInfo(MetaName.RightGrip, PsoDataType.Structure, 32, 0, (MetaName)2874150626), + new PsoStructureEntryInfo(MetaName.LeftWire, PsoDataType.Structure, 56, 0, (MetaName)2874150626), + new PsoStructureEntryInfo(MetaName.RightWire, PsoDataType.Structure, 80, 0, (MetaName)2874150626) ); case (MetaName)2874150626: return new PsoStructureInfo((MetaName)2874150626, 0, 0, 24, new PsoStructureEntryInfo(MetaName.X, PsoDataType.Float, 8, 0, 0), new PsoStructureEntryInfo(MetaName.Y, PsoDataType.Float, 12, 0, 0), new PsoStructureEntryInfo(MetaName.Z, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3610904814, PsoDataType.Bool, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.UseOrientationFromParachuteBone, PsoDataType.Bool, 20, 0, 0) ); case (MetaName)2787675897: return new PsoStructureInfo((MetaName)2787675897, 0, 0, 16, @@ -9668,15 +9668,15 @@ namespace CodeWalker.GameFiles case (MetaName)947557087: return new PsoStructureInfo((MetaName)947557087, 0, 0, 56, new PsoStructureEntryInfo(MetaName.Falling, PsoDataType.Structure, 8, 0, (MetaName)3452040071), - new PsoStructureEntryInfo((MetaName)325816429, PsoDataType.Structure, 40, 0, (MetaName)2930279050) + new PsoStructureEntryInfo(MetaName.Deploy, PsoDataType.Structure, 40, 0, (MetaName)2930279050) ); case (MetaName)3452040071: return new PsoStructureInfo((MetaName)3452040071, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Duration, PsoDataType.UInt, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)4133137923, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)2952102575, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1509127932, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1137728512, PsoDataType.Float, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.PitchForMinIntensity, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.PitchForMaxIntensity, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MinIntensity, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxIntensity, PsoDataType.Float, 24, 0, 0) ); case (MetaName)2930279050: return new PsoStructureInfo((MetaName)2930279050, 0, 0, 16, @@ -9692,26 +9692,26 @@ namespace CodeWalker.GameFiles case (MetaName)1192596872: return new PsoStructureInfo((MetaName)1192596872, 0, 0, 48, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3788247444), - new PsoStructureEntryInfo((MetaName)4006165571, PsoDataType.Array, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2636443310, PsoDataType.Structure, 24, 0, (MetaName)3901274641) + new PsoStructureEntryInfo(MetaName.Wearing, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ParachutePack, PsoDataType.Structure, 24, 0, (MetaName)3901274641) ); case (MetaName)3901274641: return new PsoStructureInfo((MetaName)3901274641, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Component, PsoDataType.Enum, 8, 0, (MetaName)884254308), new PsoStructureEntryInfo(MetaName.DrawableId, PsoDataType.UInt, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)3029420796, PsoDataType.UInt, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1424942312, PsoDataType.UInt, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.DrawableAltId, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.TexId, PsoDataType.UInt, 20, 0, 0) ); case (MetaName)3788247444: return new PsoStructureInfo((MetaName)3788247444, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Component, PsoDataType.Enum, 8, 0, (MetaName)884254308), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UInt, 0, 0, 0), - new PsoStructureEntryInfo((MetaName)4176789291, PsoDataType.Array, 16, 0, (MetaName)1) + new PsoStructureEntryInfo(MetaName.DrawableIds, PsoDataType.Array, 16, 0, (MetaName)1) ); case MetaName.CTaskParachuteObject__Tunables: return new PsoStructureInfo(MetaName.CTaskParachuteObject__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1259738869, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.PhaseDuringDeployToConsiderOut, PsoDataType.Float, 16, 0, 0) ); case MetaName.CTaskTakeOffPedVariation__Tunables: return new PsoStructureInfo(MetaName.CTaskTakeOffPedVariation__Tunables, 0, 0, 16, @@ -9720,130 +9720,130 @@ namespace CodeWalker.GameFiles case MetaName.CTaskHeliPassengerRappel__Tunables: return new PsoStructureInfo(MetaName.CTaskHeliPassengerRappel__Tunables, 0, 0, 48, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1491518630, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2199025334, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2768160631, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)1487680899, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2804961359, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2890096206, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)2869375884, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)210693397, PsoDataType.Float, 44, 0, 0) + new PsoStructureEntryInfo(MetaName.fDefaultRopeLength, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.fExtraRopeLength, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.fExitDescendRate, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.fDefaultDescendRate, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.fStartDescendingDistToTargetSq, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.fRopeUnwindRate, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinHeightToRappel, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxHeliSpeedForRappel, PsoDataType.Float, 44, 0, 0) ); case MetaName.CTaskRappel__Tunables: return new PsoStructureInfo(MetaName.CTaskRappel__Tunables, 0, 0, 72, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)564993371, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1357105096, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3670878450, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2330528087, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3096283176, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)425134671, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)1851998260, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2105176291, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)3567409373, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2130522201, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)1608634776, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)4109388444, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)2841425601, PsoDataType.Bool, 64, 0, 0) + new PsoStructureEntryInfo(MetaName.fJumpDescendRate, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.fLongJumpDescendRate, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.fJumpToSmashWindowPhaseChange, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinJumpPhaseAllowDescend, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxJumpPhaseAllowDescend, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinJumpPhaseAllowSmashWindow, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxJumpPhaseAllowSmashWindow, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinSmashWindowPhase, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.fGlassBreakRadius, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.fGlassDamage, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinDistanceToBreakWindow, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinStickValueAllowDescend, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.bAllowSmashDuringJump, PsoDataType.Bool, 64, 0, 0) ); case MetaName.CTaskVault__Tunables: return new PsoStructureInfo(MetaName.CTaskVault__Tunables, 0, 0, 40, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3158074083, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2856025533, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)360286196, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2762624828, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1893591066, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)4171416824, PsoDataType.Float, 36, 0, 0) + new PsoStructureEntryInfo(MetaName.AngledClimbTheshold, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAngleForScaleVelocityExtension, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAngleForScaleVelocityExtension, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.AngledClimbScaleVelocityExtensionMax, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableVaultForwardDot, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.SlideWalkAnimRate, PsoDataType.Float, 36, 0, 0) ); case MetaName.CTaskJump__Tunables: return new PsoStructureInfo(MetaName.CTaskJump__Tunables, 0, 0, 104, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)4057741743, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)988692459, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSuperJumpInitialVelocity, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSuperJumpInitialVelocity, PsoDataType.Float, 20, 0, 0), new PsoStructureEntryInfo((MetaName)3568425813, PsoDataType.Float, 24, 0, 0), new PsoStructureEntryInfo((MetaName)1477129396, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)910411457, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2289178459, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)1943815238, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)3965084574, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)1258832245, PsoDataType.Bool, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)3734083336, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)787384491, PsoDataType.Bool, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)1816652759, PsoDataType.Bool, 57, 0, 0), - new PsoStructureEntryInfo((MetaName)69785967, PsoDataType.Bool, 58, 0, 0), - new PsoStructureEntryInfo((MetaName)1351443366, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)3163116709, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)2158524964, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)1609589815, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)2469517273, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)1011217048, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)1107591412, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)3462282137, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)1048227809, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)503191318, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)2170844885, PsoDataType.Float, 100, 0, 0) + new PsoStructureEntryInfo(MetaName.HighJumpMinAngleForVelScale, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.HighJumpMaxAngleForVelScale, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.HighJumpMinVelScale, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.HighJumpMaxVelScale, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableJumpOnSteepStairs, PsoDataType.Bool, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxStairsJumpAngle, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.bEnableJumpCollisions, PsoDataType.Bool, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.bEnableJumpCollisionsMp, PsoDataType.Bool, 57, 0, 0), + new PsoStructureEntryInfo(MetaName.bBlockJumpCollisionAgainstRagdollBlocked, PsoDataType.Bool, 58, 0, 0), + new PsoStructureEntryInfo(MetaName.PredictiveProbeZOffset, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.PredictiveBraceStartDelay, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.PredictiveBraceProbeLength, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.PredictiveBraceBlendInDuration, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.PredictiveBraceBlendOutDuration, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.PredictiveBraceMaxUpDotSlope, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.PredictiveRagdollIntersectionDot, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.PredictiveRagdollStartDelay, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.PredictiveRagdollProbeLength, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.PredictiveRagdollProbeRadius, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.PredictiveRagdollRequiredVelocityMag, PsoDataType.Float, 100, 0, 0) ); case MetaName.CPedTargetEvaluator__Tunables: return new PsoStructureInfo(MetaName.CPedTargetEvaluator__Tunables, 0, 0, 232, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3817163838, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2076997846, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)908567944, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultTargetAngularLimitMelee, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultTargetAngularLimitMeleeLockOnNoStick, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultTargetDistanceWeightMelee, PsoDataType.Float, 24, 0, 0), new PsoStructureEntryInfo((MetaName)2485794835, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)118717170, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultTargetDistanceWeightMeleeRunning, PsoDataType.Float, 32, 0, 0), new PsoStructureEntryInfo((MetaName)2082223604, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)3338545377, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultTargetHeadingWeightMelee, PsoDataType.Float, 40, 0, 0), new PsoStructureEntryInfo((MetaName)3532059041, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)3833299605, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultTargetHeadingWeightMeleeRunning, PsoDataType.Float, 48, 0, 0), new PsoStructureEntryInfo((MetaName)1974328161, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)2675889779, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)2608892368, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)2159755352, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)3188195832, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)2452287190, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)3537128593, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)2861651580, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)354050193, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)2239503730, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)1168690220, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)1044442786, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)647449150, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)521885682, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)3895688789, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)2061852453, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)762484474, PsoDataType.Float, 116, 0, 0), - new PsoStructureEntryInfo((MetaName)1964865895, PsoDataType.Float, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)1986201193, PsoDataType.Float, 124, 0, 0), - new PsoStructureEntryInfo((MetaName)1053617936, PsoDataType.Float, 128, 0, 0), - new PsoStructureEntryInfo((MetaName)2219818555, PsoDataType.Float, 132, 0, 0), - new PsoStructureEntryInfo((MetaName)3520267510, PsoDataType.Float, 136, 0, 0), - new PsoStructureEntryInfo((MetaName)3711072717, PsoDataType.Float, 140, 0, 0), - new PsoStructureEntryInfo((MetaName)2459910426, PsoDataType.Float, 144, 0, 0), - new PsoStructureEntryInfo((MetaName)1405902341, PsoDataType.Float, 148, 0, 0), - new PsoStructureEntryInfo((MetaName)1975453329, PsoDataType.Float, 152, 0, 0), - new PsoStructureEntryInfo((MetaName)3770142196, PsoDataType.Float, 156, 0, 0), - new PsoStructureEntryInfo((MetaName)1432381156, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)4259971013, PsoDataType.Float, 164, 0, 0), - new PsoStructureEntryInfo((MetaName)2260731941, PsoDataType.Float, 168, 0, 0), - new PsoStructureEntryInfo((MetaName)3977716086, PsoDataType.Float, 172, 0, 0), - new PsoStructureEntryInfo((MetaName)318279589, PsoDataType.Float, 176, 0, 0), - new PsoStructureEntryInfo((MetaName)4286470540, PsoDataType.Float, 180, 0, 0), - new PsoStructureEntryInfo((MetaName)1298342428, PsoDataType.Float, 184, 0, 0), - new PsoStructureEntryInfo((MetaName)379592677, PsoDataType.Float, 188, 0, 0), - new PsoStructureEntryInfo((MetaName)2894102221, PsoDataType.UInt, 192, 0, 0), - new PsoStructureEntryInfo((MetaName)780951691, PsoDataType.Float, 196, 0, 0), - new PsoStructureEntryInfo((MetaName)2509546906, PsoDataType.Float, 200, 0, 0), - new PsoStructureEntryInfo((MetaName)655402948, PsoDataType.Float, 204, 0, 0), - new PsoStructureEntryInfo((MetaName)155512302, PsoDataType.Float, 208, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultTargetAngularLimitVehicleWeapon, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.MeleeLockOnStickWeighting, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.MeleeLockOnCameraWeighting, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.MeleeLockOnCameraWeightingNoStick, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.MeleeLockOnPedWeightingNoStick, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.PrioHarmless, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.PrioNeutral, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.PrioNeutralInjured, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.PrioIngangOrFriend, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.PrioPotentialThreat, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.PrioMissionThreat, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.PrioMissionThreatCuffed, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.DownedThreatModifier, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.PrioPlayer2PlayerEveryone, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.PrioPlayer2PlayerStrangers, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.PrioPlayer2PlayerAttackers, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.PrioPlayer2Player, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.PrioPlayer2PlayerCuffed, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo(MetaName.PrioScriptedHighPriority, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.PrioMeleeDead, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo(MetaName.PrioMeleeCombatThreat, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo(MetaName.PrioMeleeDownedCombatThreat, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo(MetaName.PrioMeleeInjured, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo(MetaName.PrioMeleePotentialThreat, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo(MetaName.InCoverScoreModifier, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.ClosestPointToLineDist, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo(MetaName.ClosestPointToLineBonusModifier, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.MeleeHeadingOverride, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo(MetaName.MeleeHeadingOverrideRunning, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo(MetaName.MeleeHeadingFalloffPowerRunning, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultMeleeRange, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo(MetaName.TargetDistanceWeightingMin, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo(MetaName.TargetDistanceWeightingMax, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo(MetaName.TargetHeadingWeighting, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo(MetaName.TargetDistanceMaxWeightingAimTime, PsoDataType.UInt, 192, 0, 0), + new PsoStructureEntryInfo(MetaName.TargetDistanceFallOffMin, PsoDataType.Float, 196, 0, 0), + new PsoStructureEntryInfo(MetaName.TargetDistanceFallOffMax, PsoDataType.Float, 200, 0, 0), + new PsoStructureEntryInfo(MetaName.RejectLockonHeadingTheshold, PsoDataType.Float, 204, 0, 0), + new PsoStructureEntryInfo(MetaName.HeadingScoreForCoverLockOnRejection, PsoDataType.Float, 208, 0, 0), new PsoStructureEntryInfo((MetaName)680689338, PsoDataType.Float, 212, 0, 0), - new PsoStructureEntryInfo((MetaName)2979929207, PsoDataType.UInt, 216, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeForTakedownTargetAcquiry, PsoDataType.UInt, 216, 0, 0), new PsoStructureEntryInfo((MetaName)3508597107, PsoDataType.UInt, 220, 0, 0), - new PsoStructureEntryInfo((MetaName)2400008353, PsoDataType.Bool, 224, 0, 0), - new PsoStructureEntryInfo((MetaName)1169108573, PsoDataType.Bool, 225, 0, 0), - new PsoStructureEntryInfo((MetaName)4090546975, PsoDataType.Bool, 226, 0, 0), - new PsoStructureEntryInfo((MetaName)1619169047, PsoDataType.Bool, 227, 0, 0), - new PsoStructureEntryInfo((MetaName)3603478229, PsoDataType.Bool, 228, 0, 0) + new PsoStructureEntryInfo(MetaName.UseMeleeHeadingOverride, PsoDataType.Bool, 224, 0, 0), + new PsoStructureEntryInfo(MetaName.LimitMeleeRangeToDefault, PsoDataType.Bool, 225, 0, 0), + new PsoStructureEntryInfo(MetaName.DebugTargetting, PsoDataType.Bool, 226, 0, 0), + new PsoStructureEntryInfo(MetaName.UseNonNormalisedScoringForPlayer, PsoDataType.Bool, 227, 0, 0), + new PsoStructureEntryInfo(MetaName.RejectLockIfBestTargetIsInCover, PsoDataType.Bool, 228, 0, 0) ); case MetaName.CGrabHelper__Tunables: return new PsoStructureInfo(MetaName.CGrabHelper__Tunables, 0, 0, 48, @@ -9862,15 +9862,15 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.Priority, PsoDataType.SInt, 12, 0, 0), new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 16, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), - new PsoStructureEntryInfo((MetaName)605698999, PsoDataType.Array, 24, 0, (MetaName)3) + new PsoStructureEntryInfo(MetaName.Messages, PsoDataType.Array, 24, 0, (MetaName)3) ); case MetaName.CNmMessage: return new PsoStructureInfo(MetaName.CNmMessage, 0, 0, 40, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 8, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), - new PsoStructureEntryInfo((MetaName)1933425356, PsoDataType.Array, 16, 0, (MetaName)1), - new PsoStructureEntryInfo((MetaName)3330375348, PsoDataType.Bool, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)191752587, PsoDataType.Bool, 33, 0, 0) + new PsoStructureEntryInfo(MetaName.Params, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.ForceNewMessage, PsoDataType.Bool, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.TaskMessage, PsoDataType.Bool, 33, 0, 0) ); case MetaName.CNmParameterBool: return new PsoStructureInfo(MetaName.CNmParameterBool, 0, 0, 24, @@ -9896,19 +9896,19 @@ namespace CodeWalker.GameFiles case MetaName.CTaskNMControl__Tunables: return new PsoStructureInfo(MetaName.CTaskNMControl__Tunables, 0, 0, 128, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1589180219, PsoDataType.Structure, 16, 0, (MetaName)3336326859), - new PsoStructureEntryInfo((MetaName)609938430, PsoDataType.Structure, 48, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)553250717, PsoDataType.Structure, 88, 0, MetaName.CNmTuningSet) + new PsoStructureEntryInfo(MetaName.DriveToGetup, PsoDataType.Structure, 16, 0, (MetaName)3336326859), + new PsoStructureEntryInfo(MetaName.OnEnableDriveToGetup, PsoDataType.Structure, 48, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.OnDisableDriveToGetup, PsoDataType.Structure, 88, 0, MetaName.CNmTuningSet) ); case (MetaName)3336326859: return new PsoStructureInfo((MetaName)3336326859, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)2492839498, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)3256506769, PsoDataType.Bool, 9, 0, 0), - new PsoStructureEntryInfo((MetaName)2018281497, PsoDataType.Bool, 10, 0, 0), - new PsoStructureEntryInfo((MetaName)1280594926, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.AllowDriveToGetup, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.OnlyAllowForShot, PsoDataType.Bool, 9, 0, 0), + new PsoStructureEntryInfo(MetaName.AllowWhenBalanced, PsoDataType.Bool, 10, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHealth, PsoDataType.Float, 12, 0, 0), new PsoStructureEntryInfo(MetaName.MaxSpeed, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2171339313, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)219280121, PsoDataType.UInt, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxUprightRatio, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MatchTimer, PsoDataType.UInt, 24, 0, 0) ); case MetaName.CNmParameterString: return new PsoStructureInfo(MetaName.CNmParameterString, 0, 0, 24, @@ -9918,190 +9918,190 @@ namespace CodeWalker.GameFiles case MetaName.CTaskNMBehaviour__Tunables: return new PsoStructureInfo(MetaName.CTaskNMBehaviour__Tunables, 0, 0, 936, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)325894988, PsoDataType.Bool, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1794949754, PsoDataType.SInt, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2482945086, PsoDataType.SInt, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2584307454, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)503115024, PsoDataType.Bool, 29, 0, 0), - new PsoStructureEntryInfo((MetaName)3172335713, PsoDataType.SInt, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1068424255, PsoDataType.SInt, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)75381461, PsoDataType.Bool, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)83217879, PsoDataType.Bool, 41, 0, 0), - new PsoStructureEntryInfo((MetaName)2870540718, PsoDataType.Bool, 42, 0, 0), - new PsoStructureEntryInfo((MetaName)89764064, PsoDataType.Bool, 43, 0, 0), - new PsoStructureEntryInfo((MetaName)1435456656, PsoDataType.Bool, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)3639122208, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)1934953324, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)2370073816, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)3827728081, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)3990938220, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)2851995582, PsoDataType.Structure, 72, 0, (MetaName)3979439077), + new PsoStructureEntryInfo(MetaName.EnableRagdollPooling, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxGameplayNmAgents, PsoDataType.SInt, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRageRagdolls, PsoDataType.SInt, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.ReserveLocalPlayerNmAgent, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.EnableRagdollPoolingMp, PsoDataType.Bool, 29, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxGameplayNmAgentsMp, PsoDataType.SInt, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRageRagdollsMp, PsoDataType.SInt, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.ReserveLocalPlayerNmAgentMp, PsoDataType.Bool, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.BlockOffscreenShotReactions, PsoDataType.Bool, 41, 0, 0), + new PsoStructureEntryInfo(MetaName.UsePreEmptiveEdgeActivation, PsoDataType.Bool, 42, 0, 0), + new PsoStructureEntryInfo(MetaName.UsePreEmptiveEdgeActivationMp, PsoDataType.Bool, 43, 0, 0), + new PsoStructureEntryInfo(MetaName.UseBalanceForEdgeActivation, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.PreEmptiveEdgeActivationMaxVel, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.PreEmptiveEdgeActivationMaxHeadingDiff, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.PreEmptiveEdgeActivationMinDotVel, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.PreEmptiveEdgeActivationMaxDistance, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.PreEmptiveEdgeActivationMinDesiredMBR2, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.StandardBlendOutThresholds, PsoDataType.Structure, 72, 0, (MetaName)3979439077), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)4115910995), - new PsoStructureEntryInfo((MetaName)1291841671, PsoDataType.Array, 176, 0, MetaName.USHORT), - new PsoStructureEntryInfo((MetaName)1742296994, PsoDataType.Structure, 192, 0, (MetaName)2720813484), - new PsoStructureEntryInfo((MetaName)755518553, PsoDataType.Structure, 272, 0, (MetaName)2720813484), - new PsoStructureEntryInfo((MetaName)3611321062, PsoDataType.Float, 352, 0, 0), - new PsoStructureEntryInfo((MetaName)1036094636, PsoDataType.Float, 356, 0, 0), - new PsoStructureEntryInfo((MetaName)2745991583, PsoDataType.Float, 360, 0, 0), - new PsoStructureEntryInfo((MetaName)2007819517, PsoDataType.Float, 364, 0, 0), - new PsoStructureEntryInfo((MetaName)3476926475, PsoDataType.Float, 368, 0, 0), - new PsoStructureEntryInfo((MetaName)1115174900, PsoDataType.Float, 372, 0, 0), - new PsoStructureEntryInfo((MetaName)4064358618, PsoDataType.Float, 376, 0, 0), - new PsoStructureEntryInfo((MetaName)4163982628, PsoDataType.Float, 380, 0, 0), - new PsoStructureEntryInfo((MetaName)999125689, PsoDataType.Float, 384, 0, 0), - new PsoStructureEntryInfo((MetaName)2568028856, PsoDataType.Float, 388, 0, 0), - new PsoStructureEntryInfo((MetaName)1493712076, PsoDataType.Float, 392, 0, 0), - new PsoStructureEntryInfo((MetaName)3804386946, PsoDataType.Float, 396, 0, 0), - new PsoStructureEntryInfo((MetaName)3383227946, PsoDataType.Float, 400, 0, 0), - new PsoStructureEntryInfo((MetaName)3356594861, PsoDataType.Float, 404, 0, 0), - new PsoStructureEntryInfo((MetaName)1953114585, PsoDataType.Float, 408, 0, 0), - new PsoStructureEntryInfo((MetaName)1598687789, PsoDataType.Float, 412, 0, 0), - new PsoStructureEntryInfo((MetaName)2070345117, PsoDataType.Float, 416, 0, 0), - new PsoStructureEntryInfo((MetaName)1538253009, PsoDataType.Float, 420, 0, 0), - new PsoStructureEntryInfo((MetaName)2575088986, PsoDataType.Float, 424, 0, 0), - new PsoStructureEntryInfo((MetaName)1027107196, PsoDataType.Float, 428, 0, 0), - new PsoStructureEntryInfo((MetaName)2815969152, PsoDataType.Float, 432, 0, 0), - new PsoStructureEntryInfo((MetaName)1298279329, PsoDataType.Float, 436, 0, 0), - new PsoStructureEntryInfo((MetaName)4060868299, PsoDataType.Bool, 440, 0, 0), - new PsoStructureEntryInfo((MetaName)3758147000, PsoDataType.Float, 444, 0, 0), - new PsoStructureEntryInfo((MetaName)602234407, PsoDataType.Float, 448, 0, 0), - new PsoStructureEntryInfo((MetaName)116532981, PsoDataType.Float, 452, 0, 0), - new PsoStructureEntryInfo((MetaName)2253067348, PsoDataType.SInt, 456, 0, 0), - new PsoStructureEntryInfo((MetaName)3679622218, PsoDataType.Float, 460, 0, 0), - new PsoStructureEntryInfo((MetaName)1360661757, PsoDataType.Float, 464, 0, 0), - new PsoStructureEntryInfo((MetaName)2482984819, PsoDataType.Structure, 472, 0, (MetaName)3979439077), + new PsoStructureEntryInfo(MetaName.CamAttachPositionWeights, PsoDataType.Array, 176, 0, MetaName.USHORT), + new PsoStructureEntryInfo(MetaName.SpActivationModifiers, PsoDataType.Structure, 192, 0, (MetaName)2720813484), + new PsoStructureEntryInfo(MetaName.MpActivationModifiers, PsoDataType.Structure, 272, 0, (MetaName)2720813484), + new PsoStructureEntryInfo(MetaName.PlayerBumpedByCloneCarActivationModifier, PsoDataType.Float, 352, 0, 0), + new PsoStructureEntryInfo(MetaName.ClonePlayerBumpedByCarActivationModifier, PsoDataType.Float, 356, 0, 0), + new PsoStructureEntryInfo(MetaName.ClonePlayerBumpedByCloneCarActivationModifier, PsoDataType.Float, 360, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxVehicleCapsulePushTimeForRagdollActivation, PsoDataType.Float, 364, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxVehicleCapsulePushTimeForPlayerRagdollActivation, PsoDataType.Float, 368, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleMinSpeedForContinuousPushActivation, PsoDataType.Float, 372, 0, 0), + new PsoStructureEntryInfo(MetaName.MinContactDepthForContinuousPushActivation, PsoDataType.Float, 376, 0, 0), + new PsoStructureEntryInfo(MetaName.DurationRampDownCapsulePushedByVehicle, PsoDataType.Float, 380, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleMinSpeedForAiActivation, PsoDataType.Float, 384, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleMinSpeedForStationaryAiActivation, PsoDataType.Float, 388, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleMinSpeedForPlayerActivation, PsoDataType.Float, 392, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleMinSpeedForStationaryPlayerActivation, PsoDataType.Float, 396, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleMinSpeedForWarningActivation, PsoDataType.Float, 400, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleFallingSpeedWeight, PsoDataType.Float, 404, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleActivationForceMultiplierDefault, PsoDataType.Float, 408, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleActivationForceMultiplierBicycle, PsoDataType.Float, 412, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleActivationForceMultiplierBike, PsoDataType.Float, 416, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleActivationForceMultiplierBoat, PsoDataType.Float, 420, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleActivationForceMultiplierPlane, PsoDataType.Float, 424, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleActivationForceMultiplierQuadBike, PsoDataType.Float, 428, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleActivationForceMultiplierHeli, PsoDataType.Float, 432, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleActivationForceMultiplierTrain, PsoDataType.Float, 436, 0, 0), + new PsoStructureEntryInfo(MetaName.ExcludePedBumpAngleFromPushCalculation, PsoDataType.Bool, 440, 0, 0), + new PsoStructureEntryInfo(MetaName.PedActivationForceMultiplier, PsoDataType.Float, 444, 0, 0), + new PsoStructureEntryInfo(MetaName.ObjectMinSpeedForActivation, PsoDataType.Float, 448, 0, 0), + new PsoStructureEntryInfo(MetaName.ObjectActivationForceMultiplier, PsoDataType.Float, 452, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPlayerCapsulePushTimeForRagdollActivation, PsoDataType.SInt, 456, 0, 0), + new PsoStructureEntryInfo(MetaName.PlayerCapsuleMinSpeedForContinuousPushActivation, PsoDataType.Float, 460, 0, 0), + new PsoStructureEntryInfo(MetaName.StuckOnVehicleMaxTime, PsoDataType.Float, 464, 0, 0), + new PsoStructureEntryInfo(MetaName.StuckOnVehicleBlendOutThresholds, PsoDataType.Structure, 472, 0, (MetaName)3979439077), new PsoStructureEntryInfo(MetaName.Start, PsoDataType.Structure, 576, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)2265693971, PsoDataType.Structure, 616, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)1916209420, PsoDataType.Structure, 656, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)1043632907, PsoDataType.Structure, 696, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3798182907, PsoDataType.Structure, 736, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)2725274669, PsoDataType.Structure, 776, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)569763335, PsoDataType.Structure, 816, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)2982454130, PsoDataType.Structure, 856, 0, (MetaName)267001783), - new PsoStructureEntryInfo((MetaName)1543515715, PsoDataType.Structure, 880, 0, (MetaName)2578171686), - new PsoStructureEntryInfo((MetaName)1834701470, PsoDataType.Structure, 896, 0, (MetaName)1040069698) + new PsoStructureEntryInfo(MetaName.TeeterControl, PsoDataType.Structure, 616, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.animPoseDefault, PsoDataType.Structure, 656, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.animPoseAttachDefault, PsoDataType.Structure, 696, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.animPoseAttachToVehicle, PsoDataType.Structure, 736, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.animPoseHandsCuffed, PsoDataType.Structure, 776, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.forceFall, PsoDataType.Structure, 816, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.RagdollUnderWheelTuning, PsoDataType.Structure, 856, 0, (MetaName)267001783), + new PsoStructureEntryInfo(MetaName.KickOnGroundTuning, PsoDataType.Structure, 880, 0, (MetaName)2578171686), + new PsoStructureEntryInfo(MetaName.CapsuleVehicleHitTuning, PsoDataType.Structure, 896, 0, (MetaName)1040069698) ); case (MetaName)3979439077: return new PsoStructureInfo((MetaName)3979439077, 0, 0, 104, - new PsoStructureEntryInfo((MetaName)237851371, PsoDataType.Structure, 8, 0, (MetaName)3749122641), + new PsoStructureEntryInfo(MetaName.Ai, PsoDataType.Structure, 8, 0, (MetaName)3749122641), new PsoStructureEntryInfo(MetaName.Player, PsoDataType.Structure, 40, 0, (MetaName)3749122641), - new PsoStructureEntryInfo((MetaName)410406055, PsoDataType.Structure, 72, 0, (MetaName)3749122641) + new PsoStructureEntryInfo(MetaName.PlayerMp, PsoDataType.Structure, 72, 0, (MetaName)3749122641) ); case (MetaName)3749122641: return new PsoStructureInfo((MetaName)3749122641, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)1416568288, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1393994109, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)2088054141, PsoDataType.SInt, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2400689426, PsoDataType.Bool, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2229954249, PsoDataType.SInt, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxLinearVelocity, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAngularVelocity, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.SettledTimeMS, PsoDataType.SInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.RandomiseSettledTime, PsoDataType.Bool, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.SettledTimeMinMS, PsoDataType.SInt, 24, 0, 0) ); case (MetaName)2720813484: return new PsoStructureInfo((MetaName)2720813484, 0, 0, 80, - new PsoStructureEntryInfo((MetaName)19643947, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1912045929, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)3418860704, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)798220376, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)974350285, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)1234302495, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3386895833, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1980284711, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)2004593632, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)121419715, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)1002558306, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)3428812559, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)3122448379, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)3805238957, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)2194212345, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)83737662, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)1737477488, PsoDataType.Float, 72, 0, 0) + new PsoStructureEntryInfo(MetaName.BumpedByCar, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.BumpedByCarFriendly, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.PlayerBumpedByCar, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MinVehicleWarning, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.BumpedByPedMinVel, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.BumpedByPedMinDotVel, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.BumpedByPed, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.BumpedByPlayerRagdoll, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.BumpedByPedRagdoll, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.BumpedByPedFriendly, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.BumpedByPedIsQuadruped, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.BumpedByObject, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.Walking, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.Running, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.Sprinting, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPlayerActivationLimit, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAiActivationLimit, PsoDataType.Float, 72, 0, 0) ); case (MetaName)267001783: return new PsoStructureInfo((MetaName)267001783, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)2222583561, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2449600555, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)1105441606, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2370876339, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.fImpulseMultLimbs, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.fImpulseMultSpine, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinSpeedForPush, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.fFastCarPushImpulseMult, PsoDataType.Float, 20, 0, 0) ); case (MetaName)2578171686: return new PsoStructureInfo((MetaName)2578171686, 0, 0, 16, - new PsoStructureEntryInfo((MetaName)2891493908, PsoDataType.Float, 8, 0, 0) + new PsoStructureEntryInfo(MetaName.fPronePedKickImpulse, PsoDataType.Float, 8, 0, 0) ); case (MetaName)1040069698: return new PsoStructureInfo((MetaName)1040069698, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)3247587106, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)670176362, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)2716995625, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.EnableActivationsFromCapsuleImpacts, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleVelToImpactNormalMinDot, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.EnableSideSwipeActivations, PsoDataType.Bool, 16, 0, 0), new PsoStructureEntryInfo((MetaName)2302810051, PsoDataType.Bool, 17, 0, 0), - new PsoStructureEntryInfo((MetaName)48284945, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1658632009, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3443143875, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3804354300, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)3048137979, PsoDataType.Float, 36, 0, 0) + new PsoStructureEntryInfo(MetaName.MinSideNormalForSideSwipe, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MinVelThroughNormalForSideSwipe, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAccumulatedImpactForSideSwipe, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MinVehVelMagForSideSwipe, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MinVehVelMagForBicycleSideSwipe, PsoDataType.Float, 36, 0, 0) ); case (MetaName)4115910995: return new PsoStructureInfo((MetaName)4115910995, 0, 0, 16, - new PsoStructureEntryInfo((MetaName)2111641000, PsoDataType.Enum, 8, 0, (MetaName)3509057257), - new PsoStructureEntryInfo((MetaName)2283156278, PsoDataType.Float, 12, 0, 0) + new PsoStructureEntryInfo(MetaName.Bound, PsoDataType.Enum, 8, 0, (MetaName)3509057257), + new PsoStructureEntryInfo(MetaName.Weight, PsoDataType.Float, 12, 0, 0) ); case MetaName.CTaskNMBalance__Tunables: return new PsoStructureInfo(MetaName.CTaskNMBalance__Tunables, 0, 0, 912, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)406034015, PsoDataType.Enum, 16, 0, (MetaName)3509057257), - new PsoStructureEntryInfo((MetaName)2701068933, PsoDataType.Structure, 24, 0, (MetaName)760338219), - new PsoStructureEntryInfo((MetaName)1000319425, PsoDataType.Float3, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)3892109820, PsoDataType.Bool, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)930009703, PsoDataType.Float, 116, 0, 0), - new PsoStructureEntryInfo((MetaName)2245023424, PsoDataType.Float, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)3524092362, PsoDataType.Float, 124, 0, 0), - new PsoStructureEntryInfo((MetaName)66577426, PsoDataType.Float, 128, 0, 0), - new PsoStructureEntryInfo((MetaName)1708224645, PsoDataType.Float, 132, 0, 0), - new PsoStructureEntryInfo((MetaName)3171415609, PsoDataType.Float, 136, 0, 0), - new PsoStructureEntryInfo((MetaName)2588071080, PsoDataType.Float, 140, 0, 0), - new PsoStructureEntryInfo((MetaName)1502498286, PsoDataType.Float, 144, 0, 0), - new PsoStructureEntryInfo((MetaName)3223569917, PsoDataType.Float, 148, 0, 0), - new PsoStructureEntryInfo((MetaName)729908938, PsoDataType.Float, 152, 0, 0), - new PsoStructureEntryInfo((MetaName)3628130093, PsoDataType.Float, 156, 0, 0), - new PsoStructureEntryInfo((MetaName)3439106982, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)3990998153, PsoDataType.Float, 164, 0, 0), - new PsoStructureEntryInfo((MetaName)3459663346, PsoDataType.SInt, 168, 0, 0), - new PsoStructureEntryInfo((MetaName)382034967, PsoDataType.SInt, 172, 0, 0), - new PsoStructureEntryInfo((MetaName)2862149771, PsoDataType.Structure, 176, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)987294494, PsoDataType.Structure, 216, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)385444229, PsoDataType.Structure, 256, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3386895833, PsoDataType.Structure, 296, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3396170193, PsoDataType.Structure, 336, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3705331241, PsoDataType.Structure, 376, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)4192987078, PsoDataType.Structure, 416, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)944999838, PsoDataType.Structure, 456, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.InitialBumpComponent, PsoDataType.Enum, 16, 0, (MetaName)3509057257), + new PsoStructureEntryInfo(MetaName.InitialBumpForce, PsoDataType.Structure, 24, 0, (MetaName)760338219), + new PsoStructureEntryInfo(MetaName.InitialBumpOffset, PsoDataType.Float3, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.ScaleStayUprightWithVel, PsoDataType.Bool, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.StayUprightAtMaxVel, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxVel, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.StayUprightAtMinVel, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo(MetaName.MinVel, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.lookAtVelProbIfNoBumpTarget, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxTargetDistToUpdateFlinch, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxTargetDistToUpdateFlinchOnGround, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo(MetaName.fFlinchTargetZOffset, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo(MetaName.fFlinchTargetZOffsetOnGround, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinForwardVectorToFlinch, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinForwardVectorToFlinchOnGround, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo(MetaName.fHeadLookZOffset, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.fHeadLookZOffsetOnGround, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSteps, PsoDataType.SInt, 168, 0, 0), + new PsoStructureEntryInfo(MetaName.timeToCatchfallMS, PsoDataType.SInt, 172, 0, 0), + new PsoStructureEntryInfo(MetaName.StartWeak, PsoDataType.Structure, 176, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.StartAggressive, PsoDataType.Structure, 216, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.StartDefault, PsoDataType.Structure, 256, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.BumpedByPed, PsoDataType.Structure, 296, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.OnStairs, PsoDataType.Structure, 336, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.OnSteepSlope, PsoDataType.Structure, 376, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.OnMovingGround, PsoDataType.Structure, 416, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.LostBalanceAndGrabbing, PsoDataType.Structure, 456, 0, MetaName.CNmTuningSet), new PsoStructureEntryInfo(MetaName.Teeter, PsoDataType.Structure, 496, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)1639523711, PsoDataType.Structure, 536, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)2787586299, PsoDataType.Structure, 576, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)4093402329, PsoDataType.Structure, 616, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3974797120, PsoDataType.Structure, 656, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)4123949353, PsoDataType.SInt, 696, 0, 0), - new PsoStructureEntryInfo((MetaName)739931697, PsoDataType.SInt, 700, 0, 0), - new PsoStructureEntryInfo((MetaName)952442515, PsoDataType.SInt, 704, 0, 0), - new PsoStructureEntryInfo((MetaName)577683658, PsoDataType.Structure, 712, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)258986085, PsoDataType.Structure, 752, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)256038063, PsoDataType.Structure, 792, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)1444135973, PsoDataType.Structure, 832, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)476585181, PsoDataType.Structure, 872, 0, (MetaName)3749122641) + new PsoStructureEntryInfo(MetaName.FallOffAMovingCar, PsoDataType.Structure, 536, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.RollingFall, PsoDataType.Structure, 576, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.CatchFall, PsoDataType.Structure, 616, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.OnBalanceFailed, PsoDataType.Structure, 656, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.NotBeingPushedDelayMS, PsoDataType.SInt, 696, 0, 0), + new PsoStructureEntryInfo(MetaName.NotBeingPushedOnGroundDelayMS, PsoDataType.SInt, 700, 0, 0), + new PsoStructureEntryInfo(MetaName.BeingPushedOnGroundTooLongMS, PsoDataType.SInt, 704, 0, 0), + new PsoStructureEntryInfo(MetaName.OnBeingPushed, PsoDataType.Structure, 712, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.OnBeingPushedOnGround, PsoDataType.Structure, 752, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.OnNotBeingPushed, PsoDataType.Structure, 792, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.OnBeingPushedOnGroundTooLong, PsoDataType.Structure, 832, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.PushedThresholdOnGround, PsoDataType.Structure, 872, 0, (MetaName)3749122641) ); case (MetaName)760338219: return new PsoStructureInfo((MetaName)760338219, 0, 0, 64, new PsoStructureEntryInfo(MetaName.Enable, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2130375977, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)2708100865, PsoDataType.Bool, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3439766974, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3727574793, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)1864398785, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2377779348, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1180195582, PsoDataType.Bool, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)675904337, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)1400954876, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)4112497335, PsoDataType.SInt, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.Mag, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.ScaleWithVelocity, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.VelocityMin, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.VelocityMax, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.ForceAtMinVelocity, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ForceAtMaxVelocity, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.ClampImpulse, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MinImpulse, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxImpulse, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.Delay, PsoDataType.SInt, 48, 0, 0), new PsoStructureEntryInfo(MetaName.Duration, PsoDataType.SInt, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)1033385210, PsoDataType.Bool, 56, 0, 0) + new PsoStructureEntryInfo(MetaName.ScaleWithUpright, PsoDataType.Bool, 56, 0, 0) ); case MetaName.CNmParameterVector: return new PsoStructureInfo(MetaName.CNmParameterVector, 0, 0, 32, @@ -10111,44 +10111,44 @@ namespace CodeWalker.GameFiles case MetaName.CTaskNMBrace__Tunables: return new PsoStructureInfo(MetaName.CTaskNMBrace__Tunables, 0, 0, 1568, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2892094444, PsoDataType.Structure, 16, 0, (MetaName)2216090795), - new PsoStructureEntryInfo((MetaName)172669903, PsoDataType.Structure, 40, 0, (MetaName)1267291753), - new PsoStructureEntryInfo((MetaName)1247412006, PsoDataType.Structure, 64, 0, (MetaName)238499603), - new PsoStructureEntryInfo((MetaName)2966151540, PsoDataType.Structure, 144, 0, (MetaName)2808943365), - new PsoStructureEntryInfo((MetaName)2102302469, PsoDataType.Structure, 176, 0, (MetaName)3816043274), - new PsoStructureEntryInfo((MetaName)1163046056, PsoDataType.Structure, 232, 0, (MetaName)3816043274), - new PsoStructureEntryInfo((MetaName)2143662100, PsoDataType.Structure, 288, 0, (MetaName)3816043274), - new PsoStructureEntryInfo((MetaName)3224113269, PsoDataType.Structure, 344, 0, (MetaName)3816043274), - new PsoStructureEntryInfo((MetaName)883555571, PsoDataType.Structure, 400, 0, (MetaName)3816043274), - new PsoStructureEntryInfo((MetaName)3413603413, PsoDataType.Structure, 456, 0, (MetaName)3816043274), - new PsoStructureEntryInfo((MetaName)2074671276, PsoDataType.Bool, 512, 0, 0), - new PsoStructureEntryInfo((MetaName)599992998, PsoDataType.Bool, 513, 0, 0), - new PsoStructureEntryInfo((MetaName)347021105, PsoDataType.Float, 516, 0, 0), - new PsoStructureEntryInfo((MetaName)4197576600, PsoDataType.Bool, 520, 0, 0), - new PsoStructureEntryInfo((MetaName)2079428645, PsoDataType.Float, 524, 0, 0), - new PsoStructureEntryInfo((MetaName)3699124688, PsoDataType.Float, 528, 0, 0), - new PsoStructureEntryInfo((MetaName)4203888010, PsoDataType.Float, 532, 0, 0), - new PsoStructureEntryInfo((MetaName)1270097093, PsoDataType.Float, 536, 0, 0), - new PsoStructureEntryInfo((MetaName)1698949999, PsoDataType.Float, 540, 0, 0), - new PsoStructureEntryInfo((MetaName)760529768, PsoDataType.Float, 544, 0, 0), - new PsoStructureEntryInfo((MetaName)2616874064, PsoDataType.SInt, 548, 0, 0), - new PsoStructureEntryInfo((MetaName)2452951318, PsoDataType.SInt, 552, 0, 0), - new PsoStructureEntryInfo((MetaName)112556840, PsoDataType.SInt, 556, 0, 0), - new PsoStructureEntryInfo((MetaName)2235898070, PsoDataType.SInt, 560, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleOverrides, PsoDataType.Structure, 16, 0, (MetaName)2216090795), + new PsoStructureEntryInfo(MetaName.InverseMassScales, PsoDataType.Structure, 40, 0, (MetaName)1267291753), + new PsoStructureEntryInfo(MetaName.AngularVelocityLimits, PsoDataType.Structure, 64, 0, (MetaName)238499603), + new PsoStructureEntryInfo(MetaName.InitialForce, PsoDataType.Structure, 144, 0, (MetaName)2808943365), + new PsoStructureEntryInfo(MetaName.ChestForce, PsoDataType.Structure, 176, 0, (MetaName)3816043274), + new PsoStructureEntryInfo(MetaName.FeetLiftForce, PsoDataType.Structure, 232, 0, (MetaName)3816043274), + new PsoStructureEntryInfo(MetaName.RootLiftForce, PsoDataType.Structure, 288, 0, (MetaName)3816043274), + new PsoStructureEntryInfo(MetaName.FlipForce, PsoDataType.Structure, 344, 0, (MetaName)3816043274), + new PsoStructureEntryInfo(MetaName.CapsuleHitForce, PsoDataType.Structure, 400, 0, (MetaName)3816043274), + new PsoStructureEntryInfo(MetaName.SideSwipeForce, PsoDataType.Structure, 456, 0, (MetaName)3816043274), + new PsoStructureEntryInfo(MetaName.ForceUnderVehicle, PsoDataType.Bool, 512, 0, 0), + new PsoStructureEntryInfo(MetaName.ForceOverVehicle, PsoDataType.Bool, 513, 0, 0), + new PsoStructureEntryInfo(MetaName.ChestForcePitch, PsoDataType.Float, 516, 0, 0), + new PsoStructureEntryInfo(MetaName.AllowWarningActivations, PsoDataType.Bool, 520, 0, 0), + new PsoStructureEntryInfo(MetaName.LowVelocityReactionThreshold, PsoDataType.Float, 524, 0, 0), + new PsoStructureEntryInfo(MetaName.FallingSpeedForHighFall, PsoDataType.Float, 528, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleCollisionElasticityMult, PsoDataType.Float, 532, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleCollisionFrictionMult, PsoDataType.Float, 536, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleCollisionNormalPitchOverVehicle, PsoDataType.Float, 540, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleCollisionNormalPitchUnderVehicle, PsoDataType.Float, 544, 0, 0), + new PsoStructureEntryInfo(MetaName.AiClearedVehicleDelay, PsoDataType.SInt, 548, 0, 0), + new PsoStructureEntryInfo(MetaName.AiClearedVehicleSmartFallDelay, PsoDataType.SInt, 552, 0, 0), + new PsoStructureEntryInfo(MetaName.PlayerClearedVehicleDelay, PsoDataType.SInt, 556, 0, 0), + new PsoStructureEntryInfo(MetaName.PlayerClearedVehicleSmartFallDelay, PsoDataType.SInt, 560, 0, 0), new PsoStructureEntryInfo(MetaName.Start, PsoDataType.Structure, 568, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3396170193, PsoDataType.Structure, 608, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.OnStairs, PsoDataType.Structure, 608, 0, MetaName.CNmTuningSet), new PsoStructureEntryInfo(MetaName.Weak, PsoDataType.Structure, 648, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3974797120, PsoDataType.Structure, 688, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)1418190490, PsoDataType.Structure, 728, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)4250665956, PsoDataType.Structure, 768, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)1218193578, PsoDataType.Float, 808, 0, 0), - new PsoStructureEntryInfo((MetaName)648899635, PsoDataType.Structure, 816, 0, (MetaName)1649426998), + new PsoStructureEntryInfo(MetaName.OnBalanceFailed, PsoDataType.Structure, 688, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.OnBalanceFailedStairs, PsoDataType.Structure, 728, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.HighVelocity, PsoDataType.Structure, 768, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.StuckUnderVehicleMaxUpright, PsoDataType.Float, 808, 0, 0), + new PsoStructureEntryInfo(MetaName.StuckOnVehicle, PsoDataType.Structure, 816, 0, (MetaName)1649426998), new PsoStructureEntryInfo(MetaName.Update, PsoDataType.Structure, 1256, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)2865917470, PsoDataType.Structure, 1296, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)2691364124, PsoDataType.Structure, 1336, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3262694177, PsoDataType.Structure, 1376, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3612199348, PsoDataType.Structure, 1416, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)468457579, PsoDataType.Structure, 1456, 0, (MetaName)3979439077) + new PsoStructureEntryInfo(MetaName.Dead, PsoDataType.Structure, 1296, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.OverVehicle, PsoDataType.Structure, 1336, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.UnderVehicle, PsoDataType.Structure, 1376, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.ClearedVehicle, PsoDataType.Structure, 1416, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.HighVelocityBlendOut, PsoDataType.Structure, 1456, 0, (MetaName)3979439077) ); case (MetaName)2216090795: return new PsoStructureInfo((MetaName)2216090795, 0, 0, 24, @@ -10157,90 +10157,90 @@ namespace CodeWalker.GameFiles ); case (MetaName)1267291753: return new PsoStructureInfo((MetaName)1267291753, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)3650822252, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ApplyVehicleScale, PsoDataType.Bool, 8, 0, 0), new PsoStructureEntryInfo(MetaName.VehicleScale, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)1737474230, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ApplyPedScale, PsoDataType.Bool, 16, 0, 0), new PsoStructureEntryInfo(MetaName.PedScale, PsoDataType.Float, 20, 0, 0) ); case (MetaName)238499603: return new PsoStructureInfo((MetaName)238499603, 0, 0, 80, new PsoStructureEntryInfo(MetaName.Apply, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2414966970, PsoDataType.Float3, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.Constant, PsoDataType.Float3, 16, 0, 0), new PsoStructureEntryInfo(MetaName.Velocity, PsoDataType.Float3, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2944635386, PsoDataType.Float3, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.Velocity2, PsoDataType.Float3, 48, 0, 0), new PsoStructureEntryInfo(MetaName.Max, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)4112497335, PsoDataType.SInt, 68, 0, 0) + new PsoStructureEntryInfo(MetaName.Delay, PsoDataType.SInt, 68, 0, 0) ); case (MetaName)2808943365: return new PsoStructureInfo((MetaName)2808943365, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)3439766974, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)3727574793, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)1864398785, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2377779348, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1033385210, PsoDataType.Bool, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.VelocityMin, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.VelocityMax, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.ForceAtMinVelocity, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ForceAtMaxVelocity, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.ScaleWithUpright, PsoDataType.Bool, 24, 0, 0) ); case (MetaName)3816043274: return new PsoStructureInfo((MetaName)3816043274, 0, 0, 56, new PsoStructureEntryInfo(MetaName.Apply, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2708100865, PsoDataType.Bool, 9, 0, 0), - new PsoStructureEntryInfo((MetaName)3891030916, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)1711478621, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3279914945, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3255660709, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)1033385210, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2640302727, PsoDataType.Bool, 29, 0, 0), - new PsoStructureEntryInfo((MetaName)1660316244, PsoDataType.Bool, 30, 0, 0), - new PsoStructureEntryInfo((MetaName)3126754678, PsoDataType.Bool, 31, 0, 0), - new PsoStructureEntryInfo((MetaName)4063846733, PsoDataType.Bool, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)122191424, PsoDataType.Bool, 33, 0, 0), - new PsoStructureEntryInfo((MetaName)3327649992, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)1967662718, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)3421300414, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.ScaleWithVelocity, PsoDataType.Bool, 9, 0, 0), + new PsoStructureEntryInfo(MetaName.MinVelThreshold, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxVelThreshold, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MinVelMag, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxVelMag, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.ScaleWithUpright, PsoDataType.Bool, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ScaleWithMass, PsoDataType.Bool, 29, 0, 0), + new PsoStructureEntryInfo(MetaName.ReduceWithPedVelocity, PsoDataType.Bool, 30, 0, 0), + new PsoStructureEntryInfo(MetaName.ReduceWithPedAngularVelocity, PsoDataType.Bool, 31, 0, 0), + new PsoStructureEntryInfo(MetaName.OnlyInContact, PsoDataType.Bool, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.OnlyNotInContact, PsoDataType.Bool, 33, 0, 0), + new PsoStructureEntryInfo(MetaName.ForceMag, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MinMag, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxMag, PsoDataType.Float, 44, 0, 0), new PsoStructureEntryInfo(MetaName.Duration, PsoDataType.SInt, 48, 0, 0) ); case (MetaName)1649426998: return new PsoStructureInfo((MetaName)1649426998, 0, 0, 440, - new PsoStructureEntryInfo((MetaName)1832992496, PsoDataType.SInt, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2055428725, PsoDataType.SInt, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)3597443216, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1174887920, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1061400063, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3606585778, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3776343247, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)648899635, PsoDataType.Structure, 40, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3136215640, PsoDataType.Structure, 80, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)2664008333, PsoDataType.Structure, 120, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)1316017959, PsoDataType.Structure, 160, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)2222643548, PsoDataType.Structure, 200, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)2880735205, PsoDataType.Structure, 240, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)2353506762, PsoDataType.Structure, 280, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)2214161412, PsoDataType.Structure, 320, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)600771112, PsoDataType.Structure, 360, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3275734390, PsoDataType.Structure, 400, 0, MetaName.CNmTuningSet) + new PsoStructureEntryInfo(MetaName.InitialDelay, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.UnderVehicleInitialDelay, PsoDataType.SInt, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.VelocityThreshold, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ContinuousContactTime, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.UnderVehicleVelocityThreshold, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.UnderVehicleContinuousContactTime, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.UnderCarMaxVelocity, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.StuckOnVehicle, PsoDataType.Structure, 40, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.EndStuckOnVehicle, PsoDataType.Structure, 80, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.UpdateOnVehicle, PsoDataType.Structure, 120, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.StuckUnderVehicle, PsoDataType.Structure, 160, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.EndStuckUnderVehicle, PsoDataType.Structure, 200, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.StuckOnVehiclePlayer, PsoDataType.Structure, 240, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.EndStuckOnVehiclePlayer, PsoDataType.Structure, 280, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.UpdateOnVehiclePlayer, PsoDataType.Structure, 320, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.StuckUnderVehiclePlayer, PsoDataType.Structure, 360, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.EndStuckUnderVehiclePlayer, PsoDataType.Structure, 400, 0, MetaName.CNmTuningSet) ); case (MetaName)1768633733: return new PsoStructureInfo((MetaName)1768633733, 0, 0, 736, new PsoStructureEntryInfo(MetaName.Id, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)143477949, PsoDataType.Bool, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)172669903, PsoDataType.Structure, 16, 0, (MetaName)1267291753), - new PsoStructureEntryInfo((MetaName)1094485493, PsoDataType.Bool, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2074671276, PsoDataType.Bool, 41, 0, 0), - new PsoStructureEntryInfo((MetaName)599992998, PsoDataType.Bool, 42, 0, 0), - new PsoStructureEntryInfo((MetaName)3606813162, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)1333505912, PsoDataType.Bool, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2143662100, PsoDataType.Structure, 56, 0, (MetaName)3816043274), - new PsoStructureEntryInfo((MetaName)2230782934, PsoDataType.Bool, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)3224113269, PsoDataType.Structure, 120, 0, (MetaName)3816043274), - new PsoStructureEntryInfo((MetaName)3258479231, PsoDataType.Bool, 176, 0, 0), - new PsoStructureEntryInfo((MetaName)2966151540, PsoDataType.Structure, 184, 0, (MetaName)2808943365), - new PsoStructureEntryInfo((MetaName)134807671, PsoDataType.Bool, 216, 0, 0), - new PsoStructureEntryInfo((MetaName)4203888010, PsoDataType.Float, 220, 0, 0), - new PsoStructureEntryInfo((MetaName)3907466188, PsoDataType.Bool, 224, 0, 0), - new PsoStructureEntryInfo((MetaName)1270097093, PsoDataType.Float, 228, 0, 0), - new PsoStructureEntryInfo((MetaName)2100597904, PsoDataType.Structure, 232, 0, (MetaName)3816043274), - new PsoStructureEntryInfo((MetaName)2561285304, PsoDataType.Bool, 288, 0, 0), - new PsoStructureEntryInfo((MetaName)4027713155, PsoDataType.Bool, 289, 0, 0), - new PsoStructureEntryInfo((MetaName)648899635, PsoDataType.Structure, 296, 0, (MetaName)1649426998) + new PsoStructureEntryInfo(MetaName.OverrideInverseMassScales, PsoDataType.Bool, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.InverseMassScales, PsoDataType.Structure, 16, 0, (MetaName)1267291753), + new PsoStructureEntryInfo(MetaName.OverrideReactionType, PsoDataType.Bool, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.ForceUnderVehicle, PsoDataType.Bool, 41, 0, 0), + new PsoStructureEntryInfo(MetaName.ForceOverVehicle, PsoDataType.Bool, 42, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleCentreZOffset, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.OverrideRootLiftForce, PsoDataType.Bool, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.RootLiftForce, PsoDataType.Structure, 56, 0, (MetaName)3816043274), + new PsoStructureEntryInfo(MetaName.OverrideFlipForce, PsoDataType.Bool, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.FlipForce, PsoDataType.Structure, 120, 0, (MetaName)3816043274), + new PsoStructureEntryInfo(MetaName.OverrideInitialForce, PsoDataType.Bool, 176, 0, 0), + new PsoStructureEntryInfo(MetaName.InitialForce, PsoDataType.Structure, 184, 0, (MetaName)2808943365), + new PsoStructureEntryInfo(MetaName.OverrideElasticity, PsoDataType.Bool, 216, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleCollisionElasticityMult, PsoDataType.Float, 220, 0, 0), + new PsoStructureEntryInfo(MetaName.OverrideFriction, PsoDataType.Bool, 224, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleCollisionFrictionMult, PsoDataType.Float, 228, 0, 0), + new PsoStructureEntryInfo(MetaName.LateralForce, PsoDataType.Structure, 232, 0, (MetaName)3816043274), + new PsoStructureEntryInfo(MetaName.OverrideStuckOnVehicleSets, PsoDataType.Bool, 288, 0, 0), + new PsoStructureEntryInfo(MetaName.AddToBaseStuckOnVehicleSets, PsoDataType.Bool, 289, 0, 0), + new PsoStructureEntryInfo(MetaName.StuckOnVehicle, PsoDataType.Structure, 296, 0, (MetaName)1649426998) ); case MetaName.CNmParameterResetMessage: return new PsoStructureInfo(MetaName.CNmParameterResetMessage, 0, 0, 16, @@ -10250,21 +10250,21 @@ namespace CodeWalker.GameFiles return new PsoStructureInfo(MetaName.CTaskNMDraggingToSafety__Tunables, 0, 0, 160, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.Stiffness, PsoDataType.Structure, 16, 0, (MetaName)2241487041), - new PsoStructureEntryInfo((MetaName)989307764, PsoDataType.Structure, 48, 0, (MetaName)1214269741), - new PsoStructureEntryInfo((MetaName)1591913012, PsoDataType.Structure, 96, 0, (MetaName)2410537644), - new PsoStructureEntryInfo((MetaName)3184237865, PsoDataType.Structure, 112, 0, (MetaName)2059054874) + new PsoStructureEntryInfo(MetaName.DraggerArmIk, PsoDataType.Structure, 48, 0, (MetaName)1214269741), + new PsoStructureEntryInfo(MetaName.Constraints, PsoDataType.Structure, 96, 0, (MetaName)2410537644), + new PsoStructureEntryInfo(MetaName.Forces, PsoDataType.Structure, 112, 0, (MetaName)2059054874) ); case (MetaName)2241487041: return new PsoStructureInfo((MetaName)2241487041, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)1783791261, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)3404836153, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)3435621206, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.Relaxation, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.HeadAndNeck, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.AnkleAndWrist, PsoDataType.Float, 16, 0, 0) ); case (MetaName)1214269741: return new PsoStructureInfo((MetaName)1214269741, 0, 0, 48, new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)416915558, PsoDataType.Float3, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)697293397, PsoDataType.Float3, 32, 0, 0) + new PsoStructureEntryInfo(MetaName.LeftBoneOffset, PsoDataType.Float3, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.RightBoneOffset, PsoDataType.Float3, 32, 0, 0) ); case (MetaName)2410537644: return new PsoStructureInfo((MetaName)2410537644, 0, 0, 16, @@ -10273,128 +10273,128 @@ namespace CodeWalker.GameFiles case (MetaName)2059054874: return new PsoStructureInfo((MetaName)2059054874, 0, 0, 48, new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2557494577, PsoDataType.Float3, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)4292584457, PsoDataType.Float3, 32, 0, 0) + new PsoStructureEntryInfo(MetaName.LeftHandOffset, PsoDataType.Float3, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.RightHandOffset, PsoDataType.Float3, 32, 0, 0) ); case MetaName.CTaskNMDrunk__Tunables: return new PsoStructureInfo(MetaName.CTaskNMDrunk__Tunables, 0, 0, 256, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1358716283, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1290250752, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)15793390, PsoDataType.SInt, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)72944862, PsoDataType.SInt, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)481812193, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)615835079, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)3439085926, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2515092116, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)1337934970, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)1747662930, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)1333092266, PsoDataType.SInt, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)3088121500, PsoDataType.SInt, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)890221191, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)971008663, PsoDataType.SInt, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)230707381, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)603776431, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)604632997, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)906382083, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)2778976875, PsoDataType.Bool, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)2274869694, PsoDataType.Bool, 89, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinHeadingDeltaToFixTurn, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.fHeadingRandomizationRange, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.iHeadingRandomizationTimeMin, PsoDataType.SInt, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.iHeadingRandomizationTimeMax, PsoDataType.SInt, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.fForceLeanInDirectionAmountMin, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.fForceLeanInDirectionAmountMax, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.fForceRampMinSpeed, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.fForceRampMaxSpeed, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.fHeadLookHeadingRandomizationRange, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.fHeadLookPitchRandomizationRange, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.iHeadLookRandomizationTimeMin, PsoDataType.SInt, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.iHeadlookRandomizationTimeMax, PsoDataType.SInt, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinHeadingDeltaToIdleTurn, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.iRunningTimeForVelocityBasedStayupright, PsoDataType.SInt, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.fStayUprightForceNonVelocityBased, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.fStayUprightForceMoving, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.fStayUprightForceIdle, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.fFallingSpeedForHighFall, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.bUseStayUpright, PsoDataType.Bool, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.bDrawIdleHeadLookTarget, PsoDataType.Bool, 89, 0, 0), new PsoStructureEntryInfo(MetaName.Start, PsoDataType.Structure, 96, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)212355988, PsoDataType.Structure, 136, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3575677823, PsoDataType.Structure, 176, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.Base, PsoDataType.Structure, 136, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.Moving, PsoDataType.Structure, 176, 0, MetaName.CNmTuningSet), new PsoStructureEntryInfo(MetaName.Idle, PsoDataType.Structure, 216, 0, MetaName.CNmTuningSet) ); case MetaName.CTaskNMElectrocute__Tunables: return new PsoStructureInfo(MetaName.CTaskNMElectrocute__Tunables, 0, 0, 400, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)871993282, PsoDataType.Enum, 16, 0, (MetaName)3509057257), - new PsoStructureEntryInfo((MetaName)2966151540, PsoDataType.Structure, 24, 0, (MetaName)760338219), - new PsoStructureEntryInfo((MetaName)279094028, PsoDataType.Float3, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)3699124688, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.InitialForceComponent, PsoDataType.Enum, 16, 0, (MetaName)3509057257), + new PsoStructureEntryInfo(MetaName.InitialForce, PsoDataType.Structure, 24, 0, (MetaName)760338219), + new PsoStructureEntryInfo(MetaName.InitialForceOffset, PsoDataType.Float3, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.FallingSpeedForHighFall, PsoDataType.Float, 112, 0, 0), new PsoStructureEntryInfo(MetaName.Start, PsoDataType.Structure, 120, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3122448379, PsoDataType.Structure, 160, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3805238957, PsoDataType.Structure, 200, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)2194212345, PsoDataType.Structure, 240, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3974797120, PsoDataType.Structure, 280, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)4246526405, PsoDataType.Structure, 320, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3413282736, PsoDataType.Structure, 360, 0, MetaName.CNmTuningSet) + new PsoStructureEntryInfo(MetaName.Walking, PsoDataType.Structure, 160, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.Running, PsoDataType.Structure, 200, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.Sprinting, PsoDataType.Structure, 240, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.OnBalanceFailed, PsoDataType.Structure, 280, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.OnCatchFallSuccess, PsoDataType.Structure, 320, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.OnElectrocuteFinished, PsoDataType.Structure, 360, 0, MetaName.CNmTuningSet) ); case MetaName.CTaskNMExplosion__Tunables: return new PsoStructureInfo(MetaName.CTaskNMExplosion__Tunables, 0, 0, 344, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3100954165, PsoDataType.SInt, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3892117779, PsoDataType.SInt, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3993091983, PsoDataType.Bool, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2811070889, PsoDataType.Bool, 25, 0, 0), - new PsoStructureEntryInfo((MetaName)2106002013, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2088499253, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)3140918872, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)1581787136, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)3622461286, PsoDataType.UInt, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)2616410929, PsoDataType.UInt, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2414092533, PsoDataType.Bool, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)4249251885, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)2221851990, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)3439568038, PsoDataType.SInt, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)478429586, PsoDataType.SInt, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)4260165656, PsoDataType.SInt, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)127971633, PsoDataType.SInt, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)1703031604, PsoDataType.Bool, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)3831760128, PsoDataType.Bool, 81, 0, 0), - new PsoStructureEntryInfo((MetaName)776602752, PsoDataType.Structure, 88, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)1213801104, PsoDataType.Structure, 128, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)2633206880, PsoDataType.Structure, 168, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.MinStunnedTime, PsoDataType.SInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxStunnedTime, PsoDataType.SInt, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.AllowPlayerStunned, PsoDataType.Bool, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.UseRelaxBehaviour, PsoDataType.Bool, 25, 0, 0), + new PsoStructureEntryInfo(MetaName.RollUpHeightThreshold, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.CatchFallHeightThresholdRollUp, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.CatchFallHeightThresholdWindmill, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.CatchFallHeightThresholdClipPose, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeToStartCatchFall, PsoDataType.UInt, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeToStartCatchFallPlayer, PsoDataType.UInt, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.DoCatchFallRelax, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.CatchFallRelaxHeight, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.HeightToStartWrithe, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeForInitialState, PsoDataType.SInt, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeForInitialState, PsoDataType.SInt, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.MinWritheTime, PsoDataType.SInt, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxWritheTime, PsoDataType.SInt, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.ForceRollUp, PsoDataType.Bool, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.ForceWindmill, PsoDataType.Bool, 81, 0, 0), + new PsoStructureEntryInfo(MetaName.StartWindmill, PsoDataType.Structure, 88, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.StartCatchFall, PsoDataType.Structure, 128, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.StartRollDownStairs, PsoDataType.Structure, 168, 0, MetaName.CNmTuningSet), new PsoStructureEntryInfo(MetaName.Update, PsoDataType.Structure, 208, 0, MetaName.CNmTuningSet), new PsoStructureEntryInfo(MetaName.Explosion, PsoDataType.Structure, 248, 0, (MetaName)3490848491) ); case (MetaName)3490848491: return new PsoStructureInfo((MetaName)3490848491, 0, 0, 96, - new PsoStructureEntryInfo((MetaName)380014673, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)3219752194, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)938878998, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)670734777, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2267090113, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3667685650, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)4074006169, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1446526858, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)1615867498, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)1654280371, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)1388744206, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)4112643692, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)3388239219, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)1948575789, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)107265024, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)2554943154, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)3768610799, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)4071693543, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)1612043114, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)1833631034, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)868220978, PsoDataType.Float, 88, 0, 0) + new PsoStructureEntryInfo(MetaName.NMBodyScale, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.HumanBodyScale, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.HumanPelvisScale, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.HumanSpine0Scale, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.HumanSpine1Scale, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.AnimalBodyScale, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.AnimalPelvisScale, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.StrongBlastMagnitude, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.FastMovingPedSpeed, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceAbovePedPositionToClampPitch, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.PitchClampMin, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.PitchClampMax, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.MagnitudeClamp, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.SideScale, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.PitchSideAngle, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.PitchTorqueMin, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.PitchTorqueMax, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.BlanketForceScale, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.ExtraTorqueTwistMax, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableInjuredBehaviorImpulseLimit, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableInjuredBehaviorDistLimit, PsoDataType.Float, 88, 0, 0) ); case MetaName.CTaskNMFlinch__Tunables: return new PsoStructureInfo(MetaName.CTaskNMFlinch__Tunables, 0, 0, 624, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.Start, PsoDataType.Structure, 16, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)1672543877, PsoDataType.Structure, 56, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3460531080, PsoDataType.Structure, 96, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)264772538, PsoDataType.Structure, 136, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3396170193, PsoDataType.Structure, 176, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)4148786995, PsoDataType.Structure, 216, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)62148721, PsoDataType.Structure, 256, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)2720032072, PsoDataType.Structure, 296, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3291888789, PsoDataType.Structure, 336, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3720463376, PsoDataType.Structure, 376, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.Passive, PsoDataType.Structure, 56, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.WaterCannon, PsoDataType.Structure, 96, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.Armoured, PsoDataType.Structure, 136, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.OnStairs, PsoDataType.Structure, 176, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.BoundAnkles, PsoDataType.Structure, 216, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.FatallyInjured, PsoDataType.Structure, 256, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.PlayerDeath, PsoDataType.Structure, 296, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.HoldingTwoHandedWeapon, PsoDataType.Structure, 336, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.HoldingSingleHandedWeapon, PsoDataType.Structure, 376, 0, MetaName.CNmTuningSet), new PsoStructureEntryInfo(MetaName.Update, PsoDataType.Structure, 416, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3974797120, PsoDataType.Structure, 456, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)1418190490, PsoDataType.Structure, 496, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)1399921457, PsoDataType.Structure, 536, 0, (MetaName)2070432509), - new PsoStructureEntryInfo((MetaName)4009202106, PsoDataType.Structure, 568, 0, (MetaName)2070432509), - new PsoStructureEntryInfo((MetaName)2410986509, PsoDataType.Bool, 600, 0, 0), - new PsoStructureEntryInfo((MetaName)4237013150, PsoDataType.SInt, 604, 0, 0), - new PsoStructureEntryInfo((MetaName)2519882664, PsoDataType.SInt, 608, 0, 0), - new PsoStructureEntryInfo((MetaName)1706111854, PsoDataType.Float, 612, 0, 0), - new PsoStructureEntryInfo((MetaName)913654553, PsoDataType.Float, 616, 0, 0), - new PsoStructureEntryInfo((MetaName)2189152686, PsoDataType.Float, 620, 0, 0) + new PsoStructureEntryInfo(MetaName.OnBalanceFailed, PsoDataType.Structure, 456, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.OnBalanceFailedStairs, PsoDataType.Structure, 496, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.WeaponSets, PsoDataType.Structure, 536, 0, (MetaName)2070432509), + new PsoStructureEntryInfo(MetaName.ActionSets, PsoDataType.Structure, 568, 0, (MetaName)2070432509), + new PsoStructureEntryInfo(MetaName.RandomiseLeadingHand, PsoDataType.Bool, 600, 0, 0), + new PsoStructureEntryInfo(MetaName.MinLeanInDirectionTime, PsoDataType.SInt, 604, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxLeanInDirectionTime, PsoDataType.SInt, 608, 0, 0), + new PsoStructureEntryInfo(MetaName.fImpulseReductionScaleMax, PsoDataType.Float, 612, 0, 0), + new PsoStructureEntryInfo(MetaName.fSpecialAbilityRageKickImpulseModifier, PsoDataType.Float, 616, 0, 0), + new PsoStructureEntryInfo(MetaName.fCounterImpulseScale, PsoDataType.Float, 620, 0, 0) ); case MetaName.CNmParameterRandomInt: return new PsoStructureInfo(MetaName.CNmParameterRandomInt, 0, 0, 24, @@ -10405,63 +10405,63 @@ namespace CodeWalker.GameFiles case MetaName.CTaskNMHighFall__Tunables: return new PsoStructureInfo(MetaName.CTaskNMHighFall__Tunables, 0, 0, 1112, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2459418685, PsoDataType.Structure, 16, 0, (MetaName)760338219), - new PsoStructureEntryInfo((MetaName)3608118347, PsoDataType.SInt, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)2619863448, PsoDataType.Structure, 88, 0, (MetaName)760338219), - new PsoStructureEntryInfo((MetaName)2080285568, PsoDataType.SInt, 152, 0, 0), - new PsoStructureEntryInfo((MetaName)1503093096, PsoDataType.SInt, 156, 0, 0), + new PsoStructureEntryInfo(MetaName.PitchInDirectionForce, PsoDataType.Structure, 16, 0, (MetaName)760338219), + new PsoStructureEntryInfo(MetaName.PitchInDirectionComponent, PsoDataType.SInt, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.StuntJumpPitchInDirectionForce, PsoDataType.Structure, 88, 0, (MetaName)760338219), + new PsoStructureEntryInfo(MetaName.StuntJumpPitchInDirectionComponent, PsoDataType.SInt, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.HighFallTimeToBlockInjuredOnGround, PsoDataType.SInt, 156, 0, 0), new PsoStructureEntryInfo(MetaName.Start, PsoDataType.Structure, 160, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)1916434556, PsoDataType.Structure, 200, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)224741676, PsoDataType.Structure, 240, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)1362978742, PsoDataType.Structure, 280, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)862016535, PsoDataType.Structure, 320, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)1040810614, PsoDataType.Structure, 360, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)29931670, PsoDataType.Structure, 400, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)1017102101, PsoDataType.Structure, 440, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)2578429326, PsoDataType.Structure, 480, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3419269985, PsoDataType.Structure, 520, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3533734703, PsoDataType.Bool, 560, 0, 0), + new PsoStructureEntryInfo(MetaName.InAir, PsoDataType.Structure, 200, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.Vault, PsoDataType.Structure, 240, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.FromCarHit, PsoDataType.Structure, 280, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.SlopeSlide, PsoDataType.Structure, 320, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.TeeterEdge, PsoDataType.Structure, 360, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.SprintExhausted, PsoDataType.Structure, 400, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.JumpCollision, PsoDataType.Structure, 440, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.StuntJump, PsoDataType.Structure, 480, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.OnBalanceFailedSprintExhausted, PsoDataType.Structure, 520, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.DisableStartMessageForSprintExhausted, PsoDataType.Bool, 560, 0, 0), new PsoStructureEntryInfo(MetaName.Update, PsoDataType.Structure, 568, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)4265715862, PsoDataType.Structure, 608, 0, (MetaName)3979439077), - new PsoStructureEntryInfo((MetaName)2430282312, PsoDataType.Structure, 712, 0, (MetaName)3749122641), - new PsoStructureEntryInfo((MetaName)558729515, PsoDataType.Structure, 744, 0, (MetaName)3749122641), - new PsoStructureEntryInfo((MetaName)1165801413, PsoDataType.Float, 776, 0, 0), - new PsoStructureEntryInfo((MetaName)3891222055, PsoDataType.Float, 780, 0, 0), - new PsoStructureEntryInfo((MetaName)1666177823, PsoDataType.Float, 784, 0, 0), - new PsoStructureEntryInfo((MetaName)888956679, PsoDataType.Float, 788, 0, 0), - new PsoStructureEntryInfo((MetaName)3956869012, PsoDataType.Bool, 792, 0, 0), - new PsoStructureEntryInfo((MetaName)2331611470, PsoDataType.SInt, 796, 0, 0), - new PsoStructureEntryInfo((MetaName)3919163430, PsoDataType.SInt, 800, 0, 0), - new PsoStructureEntryInfo((MetaName)1342466268, PsoDataType.Structure, 808, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)2200596271, PsoDataType.Structure, 848, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)1799229733, PsoDataType.Structure, 888, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)220567909, PsoDataType.UByte, 928, 0, 0), - new PsoStructureEntryInfo((MetaName)4004286054, PsoDataType.Float, 932, 0, 0), - new PsoStructureEntryInfo((MetaName)1373544668, PsoDataType.Float, 936, 0, 0), - new PsoStructureEntryInfo((MetaName)2767003073, PsoDataType.Float, 940, 0, 0), + new PsoStructureEntryInfo(MetaName.BlendOut, PsoDataType.Structure, 608, 0, (MetaName)3979439077), + new PsoStructureEntryInfo(MetaName.PlayerQuickBlendOut, PsoDataType.Structure, 712, 0, (MetaName)3749122641), + new PsoStructureEntryInfo(MetaName.MpPlayerQuickBlendOut, PsoDataType.Structure, 744, 0, (MetaName)3749122641), + new PsoStructureEntryInfo(MetaName.MaxHealthLossForQuickGetup, PsoDataType.Float, 776, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHealthForQuickGetup, PsoDataType.Float, 780, 0, 0), + new PsoStructureEntryInfo(MetaName.MpMaxHealthLossForQuickGetup, PsoDataType.Float, 784, 0, 0), + new PsoStructureEntryInfo(MetaName.MpMinHealthForQuickGetup, PsoDataType.Float, 788, 0, 0), + new PsoStructureEntryInfo(MetaName.UseRemainingMinTimeForGroundWrithe, PsoDataType.Bool, 792, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeRemainingForGroundWrithe, PsoDataType.SInt, 796, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeElapsedForGroundWrithe, PsoDataType.SInt, 800, 0, 0), + new PsoStructureEntryInfo(MetaName.HighHighFallStart, PsoDataType.Structure, 808, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.SuperHighFallStart, PsoDataType.Structure, 848, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.HighHighFallEnd, PsoDataType.Structure, 888, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.AirResistanceOption, PsoDataType.UByte, 928, 0, 0), + new PsoStructureEntryInfo(MetaName.DistanceZThresholdForHighHighFall, PsoDataType.Float, 932, 0, 0), + new PsoStructureEntryInfo(MetaName.VelocityZThresholdForHighHighFall, PsoDataType.Float, 936, 0, 0), + new PsoStructureEntryInfo(MetaName.VelocityZThresholdForSuperHighFall, PsoDataType.Float, 940, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Float, 0, 0, 0), - new PsoStructureEntryInfo((MetaName)1187767114, PsoDataType.Array, 944, 4, (MetaName)1376291), + new PsoStructureEntryInfo(MetaName.RagdollComponentAirResistanceForce, PsoDataType.Array, 944, 4, (MetaName)1376291), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Float, 0, 0, 0), - new PsoStructureEntryInfo((MetaName)3808435735, PsoDataType.Array, 1028, 4, (MetaName)1310757) + new PsoStructureEntryInfo(MetaName.RagdollComponentAirResistanceMinStiffness, PsoDataType.Array, 1028, 4, (MetaName)1310757) ); case MetaName.CTaskNMInjuredOnGround__Tunables: return new PsoStructureInfo(MetaName.CTaskNMInjuredOnGround__Tunables, 0, 0, 40, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3434153865, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)715813748, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)18835671, PsoDataType.SInt, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2620945991, PsoDataType.SInt, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2495781827, PsoDataType.SInt, 32, 0, 0) + new PsoStructureEntryInfo(MetaName.fDoInjuredOnGroundChance, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.fFallingSpeedThreshold, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.iRandomDurationMin, PsoDataType.SInt, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.iRandomDurationMax, PsoDataType.SInt, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.iMaxNumInjuredOnGroundAgents, PsoDataType.SInt, 32, 0, 0) ); case MetaName.CTaskNMJumpRollFromRoadVehicle__Tunables: return new PsoStructureInfo(MetaName.CTaskNMJumpRollFromRoadVehicle__Tunables, 0, 0, 304, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1393168468, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2371670611, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.GravityScale, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.StartForceDownHeight, PsoDataType.Float, 20, 0, 0), new PsoStructureEntryInfo(MetaName.Start, PsoDataType.Structure, 24, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)769744308, PsoDataType.Structure, 64, 0, (MetaName)2070432509), - new PsoStructureEntryInfo((MetaName)4265715862, PsoDataType.Structure, 96, 0, (MetaName)3979439077), - new PsoStructureEntryInfo((MetaName)784154981, PsoDataType.Structure, 200, 0, (MetaName)3979439077) + new PsoStructureEntryInfo(MetaName.EntryPointSets, PsoDataType.Structure, 64, 0, (MetaName)2070432509), + new PsoStructureEntryInfo(MetaName.BlendOut, PsoDataType.Structure, 96, 0, (MetaName)3979439077), + new PsoStructureEntryInfo(MetaName.QuickBlendOut, PsoDataType.Structure, 200, 0, (MetaName)3979439077) ); case MetaName.CTaskNMOnFire__Tunables: return new PsoStructureInfo(MetaName.CTaskNMOnFire__Tunables, 0, 0, 176, @@ -10469,249 +10469,249 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.Start, PsoDataType.Structure, 16, 0, MetaName.CNmTuningSet), new PsoStructureEntryInfo(MetaName.Weak, PsoDataType.Structure, 56, 0, MetaName.CNmTuningSet), new PsoStructureEntryInfo(MetaName.Update, PsoDataType.Structure, 96, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3974797120, PsoDataType.Structure, 136, 0, MetaName.CNmTuningSet) + new PsoStructureEntryInfo(MetaName.OnBalanceFailed, PsoDataType.Structure, 136, 0, MetaName.CNmTuningSet) ); case MetaName.CTaskNMPrototype__Tunables: return new PsoStructureInfo(MetaName.CTaskNMPrototype__Tunables, 0, 0, 288, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)4079974935, PsoDataType.Bool, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3281708108, PsoDataType.SInt, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2224677187, PsoDataType.Bool, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.RunForever, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.SimulationTimeInMs, PsoDataType.SInt, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.CheckForMovingGround, PsoDataType.Bool, 24, 0, 0), new PsoStructureEntryInfo(MetaName.Start, PsoDataType.Structure, 32, 0, MetaName.CNmTuningSet), new PsoStructureEntryInfo(MetaName.Update, PsoDataType.Structure, 72, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3974797120, PsoDataType.Structure, 112, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.OnBalanceFailed, PsoDataType.Structure, 112, 0, MetaName.CNmTuningSet), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CTaskNMPrototype__Tunables__TimedTuning), - new PsoStructureEntryInfo((MetaName)2683667002, PsoDataType.Array, 152, 0, MetaName.POINTER), - new PsoStructureEntryInfo((MetaName)2970224816, PsoDataType.Structure, 168, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3261705071, PsoDataType.Structure, 208, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3903387629, PsoDataType.Structure, 248, 0, MetaName.CNmTuningSet) + new PsoStructureEntryInfo(MetaName.TimedMessages, PsoDataType.Array, 152, 0, MetaName.POINTER), + new PsoStructureEntryInfo(MetaName.DynamicSet1, PsoDataType.Structure, 168, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.DynamicSet2, PsoDataType.Structure, 208, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.DynamicSet3, PsoDataType.Structure, 248, 0, MetaName.CNmTuningSet) ); case MetaName.CTaskNMPrototype__Tunables__TimedTuning: return new PsoStructureInfo(MetaName.CTaskNMPrototype__Tunables__TimedTuning, 0, 0, 56, - new PsoStructureEntryInfo((MetaName)704872957, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1887945139, PsoDataType.Bool, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)605698999, PsoDataType.Structure, 16, 0, MetaName.CNmTuningSet) + new PsoStructureEntryInfo(MetaName.TimeInSeconds, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.Periodic, PsoDataType.Bool, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.Messages, PsoDataType.Structure, 16, 0, MetaName.CNmTuningSet) ); case MetaName.CTaskNMRiverRapids__Tunables: return new PsoStructureInfo(MetaName.CTaskNMRiverRapids__Tunables, 0, 0, 272, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)978248567, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2761683393, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2237132872, PsoDataType.Bool, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3772786175, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3419496233, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1056777533, PsoDataType.Bool, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)3868696870, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)1372422790, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinRiverFlowForRapids, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinRiverGroundClearanceForRapids, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.bHorizontalRighting, PsoDataType.Bool, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.fHorizontalRightingStrength, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.fHorizontalRightingTime, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.bVerticalRighting, PsoDataType.Bool, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.fVerticalRightingStrength, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.fVerticalRightingTime, PsoDataType.Float, 44, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Float, 0, 0, 0), - new PsoStructureEntryInfo((MetaName)2460325000, PsoDataType.Array, 48, 4, (MetaName)1376265), - new PsoStructureEntryInfo((MetaName)1990395340, PsoDataType.Structure, 136, 0, (MetaName)2361842970), + new PsoStructureEntryInfo(MetaName.fRagdollComponentBuoyancy, PsoDataType.Array, 48, 4, (MetaName)1376265), + new PsoStructureEntryInfo(MetaName.BodyWrithe, PsoDataType.Structure, 136, 0, (MetaName)2361842970), new PsoStructureEntryInfo(MetaName.Start, PsoDataType.Structure, 192, 0, MetaName.CNmTuningSet), new PsoStructureEntryInfo(MetaName.Update, PsoDataType.Structure, 232, 0, MetaName.CNmTuningSet) ); case (MetaName)2361842970: return new PsoStructureInfo((MetaName)2361842970, 0, 0, 56, - new PsoStructureEntryInfo((MetaName)3904393624, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1774619724, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)3679690700, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)966292507, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3395352877, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2926397774, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2396268986, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1198151288, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)2122555922, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)3789430640, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)2562294840, PsoDataType.Float, 48, 0, 0) + new PsoStructureEntryInfo(MetaName.bControlledByPlayerSprintInput, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinArmAmplitude, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxArmAmplitude, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinArmStiffness, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxArmStiffness, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinArmPeriod, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxArmPeriod, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinStroke, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxStroke, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinBuoyancy, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxBuoyancy, PsoDataType.Float, 48, 0, 0) ); case MetaName.CTaskNMShot__Tunables: return new PsoStructureInfo(MetaName.CTaskNMShot__Tunables, 0, 0, 2304, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3405078066, PsoDataType.SInt, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1078427012, PsoDataType.SInt, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2006791804, PsoDataType.Bool, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3665067262, PsoDataType.Bool, 25, 0, 0), - new PsoStructureEntryInfo((MetaName)2987127575, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3437539423, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)100413071, PsoDataType.Enum, 36, 0, (MetaName)3509057257), - new PsoStructureEntryInfo((MetaName)3985239087, PsoDataType.SInt, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)3639036861, PsoDataType.SInt, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)3419541350, PsoDataType.SInt, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)655022274, PsoDataType.SInt, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)3609300401, PsoDataType.SInt, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)4263173023, PsoDataType.SInt, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)3295848876, PsoDataType.SInt, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)2382871963, PsoDataType.SInt, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)2977969682, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)3753244842, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)3872529888, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)336969407, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)1471062121, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)1412443494, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)1950052429, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)125672080, PsoDataType.Bool, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)709707651, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)2464589752, PsoDataType.Structure, 112, 0, (MetaName)2342621138), - new PsoStructureEntryInfo((MetaName)3968865312, PsoDataType.Float, 144, 0, 0), - new PsoStructureEntryInfo((MetaName)245896742, PsoDataType.Structure, 152, 0, (MetaName)209088469), - new PsoStructureEntryInfo((MetaName)3061537468, PsoDataType.Structure, 352, 0, (MetaName)996969243), - new PsoStructureEntryInfo((MetaName)4009335731, PsoDataType.Structure, 392, 0, (MetaName)996969243), - new PsoStructureEntryInfo((MetaName)509938192, PsoDataType.Structure, 432, 0, (MetaName)1001943080), - new PsoStructureEntryInfo((MetaName)3674358794, PsoDataType.Structure, 464, 0, (MetaName)2149258416), - new PsoStructureEntryInfo((MetaName)3699124688, PsoDataType.Float, 504, 0, 0), - new PsoStructureEntryInfo((MetaName)1128285975, PsoDataType.Bool, 508, 0, 0), - new PsoStructureEntryInfo((MetaName)3571595842, PsoDataType.SInt, 512, 0, 0), - new PsoStructureEntryInfo((MetaName)3769959610, PsoDataType.Float, 516, 0, 0), - new PsoStructureEntryInfo((MetaName)4015640822, PsoDataType.Float, 520, 0, 0), - new PsoStructureEntryInfo((MetaName)3055246492, PsoDataType.Float, 524, 0, 0), - new PsoStructureEntryInfo((MetaName)417172126, PsoDataType.Float, 528, 0, 0), - new PsoStructureEntryInfo((MetaName)2286694021, PsoDataType.Float, 532, 0, 0), - new PsoStructureEntryInfo((MetaName)1056935054, PsoDataType.SInt, 536, 0, 0), - new PsoStructureEntryInfo((MetaName)3537415104, PsoDataType.SInt, 540, 0, 0), - new PsoStructureEntryInfo((MetaName)1779515548, PsoDataType.Bool, 544, 0, 0), - new PsoStructureEntryInfo((MetaName)3717266986, PsoDataType.Bool, 545, 0, 0), - new PsoStructureEntryInfo((MetaName)390630339, PsoDataType.Bool, 546, 0, 0), - new PsoStructureEntryInfo((MetaName)3271496489, PsoDataType.SInt, 548, 0, 0), - new PsoStructureEntryInfo((MetaName)702711221, PsoDataType.SInt, 552, 0, 0), - new PsoStructureEntryInfo((MetaName)249145917, PsoDataType.Bool, 556, 0, 0), - new PsoStructureEntryInfo((MetaName)3192396779, PsoDataType.SInt, 560, 0, 0), - new PsoStructureEntryInfo((MetaName)266530001, PsoDataType.SInt, 564, 0, 0), - new PsoStructureEntryInfo((MetaName)315966693, PsoDataType.Structure, 568, 0, (MetaName)436100430), - new PsoStructureEntryInfo((MetaName)1399921457, PsoDataType.Structure, 2136, 0, (MetaName)2070432509), - new PsoStructureEntryInfo((MetaName)124792981, PsoDataType.Structure, 2168, 0, (MetaName)3979439077), - new PsoStructureEntryInfo((MetaName)3512832436, PsoDataType.Structure, 2272, 0, (MetaName)3749122641) + new PsoStructureEntryInfo(MetaName.MinimumShotReactionTimePlayerMS, PsoDataType.SInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MinimumShotReactionTimeAIMS, PsoDataType.SInt, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.bUseClipPoseHelper, PsoDataType.Bool, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.bEnableDebugDraw, PsoDataType.Bool, 25, 0, 0), + new PsoStructureEntryInfo(MetaName.fImpactConeAngleFront, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.fImpactConeAngleBack, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.eImpactConeRagdollComponent, PsoDataType.Enum, 36, 0, (MetaName)3509057257), + new PsoStructureEntryInfo(MetaName.iShotMinTimeBeforeGunThreaten, PsoDataType.SInt, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.iShotMaxTimeBeforeGunThreaten, PsoDataType.SInt, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.iShotMinTimeBetweenFireGun, PsoDataType.SInt, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.iShotMaxTimeBetweenFireGun, PsoDataType.SInt, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.iShotMaxBlindFireTimeL, PsoDataType.SInt, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.iShotMaxBlindFireTimeH, PsoDataType.SInt, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.BlendOutDelayStanding, PsoDataType.SInt, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.BlendOutDelayBalanceFailed, PsoDataType.SInt, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.fShotBlindFireProbability, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.fShotWeaponAngleToFireGun, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.fShotHeadAngleToFireGun, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.fFireWeaponStrengthForceMultiplier, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinFinisherShotgunTotalImpulseNormal, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinFinisherShotgunTotalImpulseBraced, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.fFinisherShotgunBonusArmedSpeedModifier, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.ScaleSnapWithSpineOrientation, PsoDataType.Bool, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSnap, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.ShotAgainstWall, PsoDataType.Structure, 112, 0, (MetaName)2342621138), + new PsoStructureEntryInfo(MetaName.BCRExclusionZone, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo(MetaName.Impulses, PsoDataType.Structure, 152, 0, (MetaName)209088469), + new PsoStructureEntryInfo(MetaName.HitRandomisation, PsoDataType.Structure, 352, 0, (MetaName)996969243), + new PsoStructureEntryInfo(MetaName.HitRandomisationAutomatic, PsoDataType.Structure, 392, 0, (MetaName)996969243), + new PsoStructureEntryInfo(MetaName.StayUpright, PsoDataType.Structure, 432, 0, (MetaName)1001943080), + new PsoStructureEntryInfo(MetaName.ArmShot, PsoDataType.Structure, 464, 0, (MetaName)2149258416), + new PsoStructureEntryInfo(MetaName.FallingSpeedForHighFall, PsoDataType.Float, 504, 0, 0), + new PsoStructureEntryInfo(MetaName.ReduceDownedTimeByPerformanceTime, PsoDataType.Bool, 508, 0, 0), + new PsoStructureEntryInfo(MetaName.MinimumDownedTime, PsoDataType.SInt, 512, 0, 0), + new PsoStructureEntryInfo(MetaName.ChanceOfFallToKneesOnCollapse, PsoDataType.Float, 516, 0, 0), + new PsoStructureEntryInfo(MetaName.ChanceOfFallToKneesAfterLastStand, PsoDataType.Float, 520, 0, 0), + new PsoStructureEntryInfo(MetaName.ChanceForGutShotKnockdown, PsoDataType.Float, 524, 0, 0), + new PsoStructureEntryInfo(MetaName.LastStandMaxTotalTime, PsoDataType.Float, 528, 0, 0), + new PsoStructureEntryInfo(MetaName.LastStandMaxArmouredTotalTime, PsoDataType.Float, 532, 0, 0), + new PsoStructureEntryInfo(MetaName.RapidHitCount, PsoDataType.SInt, 536, 0, 0), + new PsoStructureEntryInfo(MetaName.ArmouredRapidHitCount, PsoDataType.SInt, 540, 0, 0), + new PsoStructureEntryInfo(MetaName.AllowArmouredLegShot, PsoDataType.Bool, 544, 0, 0), + new PsoStructureEntryInfo(MetaName.AllowArmouredKnockdown, PsoDataType.Bool, 545, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableReachForWoundOnHeadShot, PsoDataType.Bool, 546, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableReachForWoundOnHeadShotMinDelay, PsoDataType.SInt, 548, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableReachForWoundOnHeadShotMaxDelay, PsoDataType.SInt, 552, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableReachForWoundOnNeckShot, PsoDataType.Bool, 556, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableReachForWoundOnNeckShotMinDelay, PsoDataType.SInt, 560, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableReachForWoundOnNeckShotMaxDelay, PsoDataType.SInt, 564, 0, 0), + new PsoStructureEntryInfo(MetaName.ParamSets, PsoDataType.Structure, 568, 0, (MetaName)436100430), + new PsoStructureEntryInfo(MetaName.WeaponSets, PsoDataType.Structure, 2136, 0, (MetaName)2070432509), + new PsoStructureEntryInfo(MetaName.BlendOutThreshold, PsoDataType.Structure, 2168, 0, (MetaName)3979439077), + new PsoStructureEntryInfo(MetaName.SubmergedBlendOutThreshold, PsoDataType.Structure, 2272, 0, (MetaName)3749122641) ); case (MetaName)2342621138: return new PsoStructureInfo((MetaName)2342621138, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)2392243130, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)3138282762, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)180206572, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1229015521, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)959886766, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2100915621, PsoDataType.Float, 28, 0, 0) + new PsoStructureEntryInfo(MetaName.HealthRatioLimit, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.WallProbeRadius, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.WallProbeDistance, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ProbeHeightAbovePelvis, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.ImpulseMult, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxWallAngle, PsoDataType.Float, 28, 0, 0) ); case (MetaName)209088469: return new PsoStructureInfo((MetaName)209088469, 0, 0, 200, - new PsoStructureEntryInfo((MetaName)1393173723, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)3969466346, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)3839056884, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)4101332336, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)253998194, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)167326155, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)4025040637, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1810182352, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)1035940220, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2071204131, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)3207843175, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)3825480237, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)3579666943, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)3764669870, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)4071309368, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)3217262184, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)895546582, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)2406131077, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)926832193, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)3069940419, PsoDataType.SInt, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)2456570730, PsoDataType.SInt, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)4026600462, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)3040120990, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxArmourImpulseMult, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MinArmourImpulseMult, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxHealthImpulseMult, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHealthImpulseMult, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDamageTakenImpulseMult, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDamageTakenImpulseMult, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDamageTakenThreshold, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDamageTakenThreshold, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultKillShotImpulseMult, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultRapidFireKillShotImpulseMult, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultMPKillShotImpulseMult, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultMPRapidFireKillShotImpulseMult, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.ShotgunMaxSpeedForLiftImpulse, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.ShotgunMaxLiftImpulse, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.ShotgunLiftNearThreshold, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.ShotgunChanceToMoveSpine3ImpulseToSpine2, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.ShotgunChanceToMoveNeckImpulseToSpine2, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.ShotgunChanceToMoveHeadImpulseToSpine2, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.RapidFireBoostShotImpulseMult, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.RapidFireBoostShotMinRandom, PsoDataType.SInt, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.RapidFireBoostShotMaxRandom, PsoDataType.SInt, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.EqualizeAmount, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.COMImpulseScale, PsoDataType.Float, 96, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)3509057257), - new PsoStructureEntryInfo((MetaName)3129842207, PsoDataType.Flags, 100, 0, (MetaName)2097175), - new PsoStructureEntryInfo((MetaName)2681040368, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)2187976068, PsoDataType.Bool, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)3053385153, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)1084989136, PsoDataType.Float, 116, 0, 0), - new PsoStructureEntryInfo((MetaName)1833987390, PsoDataType.Bool, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)3084941871, PsoDataType.Float, 124, 0, 0), - new PsoStructureEntryInfo((MetaName)1689181219, PsoDataType.Float, 128, 0, 0), - new PsoStructureEntryInfo((MetaName)2148964650, PsoDataType.Float, 132, 0, 0), - new PsoStructureEntryInfo((MetaName)1454653034, PsoDataType.Float, 136, 0, 0), - new PsoStructureEntryInfo((MetaName)930478842, PsoDataType.Float, 140, 0, 0), - new PsoStructureEntryInfo((MetaName)2892741044, PsoDataType.Float, 144, 0, 0), - new PsoStructureEntryInfo((MetaName)188546747, PsoDataType.Float, 148, 0, 0), - new PsoStructureEntryInfo((MetaName)4252723795, PsoDataType.Float, 152, 0, 0), - new PsoStructureEntryInfo((MetaName)184133535, PsoDataType.Float, 156, 0, 0), - new PsoStructureEntryInfo((MetaName)3585973980, PsoDataType.Structure, 160, 0, (MetaName)3192684380) + new PsoStructureEntryInfo(MetaName.COMImpulseComponent, PsoDataType.Flags, 100, 0, (MetaName)2097175), + new PsoStructureEntryInfo(MetaName.COMImpulseMaxRootVelocityMagnitude, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.COMImpulseOnlyWhileBalancing, PsoDataType.Bool, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.HeadShotImpulseMultiplier, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.HeadShotMPImpulseMultiplier, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.ScaleHeadShotImpulseWithSpineOrientation, PsoDataType.Bool, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHeadShotImpulseMultiplier, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo(MetaName.AutomaticInitialSnapMult, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.BurstFireInitialSnapMult, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo(MetaName.FinalShotImpulseClampMax, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo(MetaName.RunningAgainstBulletImpulseMult, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo(MetaName.RunningAgainstBulletImpulseMultMax, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo(MetaName.RunningWithBulletImpulseMult, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo(MetaName.LegShotFallRootImpulseMinUpright, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.LegShotFallRootImpulseMult, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo(MetaName.SniperImpulses, PsoDataType.Structure, 160, 0, (MetaName)3192684380) ); case (MetaName)3192684380: return new PsoStructureInfo((MetaName)3192684380, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)3839056884, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)4101332336, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)253998194, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)167326155, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)4025040637, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)1810182352, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1035940220, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)3207843175, PsoDataType.Float, 36, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxHealthImpulseMult, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHealthImpulseMult, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDamageTakenImpulseMult, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDamageTakenImpulseMult, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDamageTakenThreshold, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDamageTakenThreshold, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultKillShotImpulseMult, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultMPKillShotImpulseMult, PsoDataType.Float, 36, 0, 0) ); case (MetaName)996969243: return new PsoStructureInfo((MetaName)996969243, 0, 0, 40, new PsoStructureEntryInfo(MetaName.Enable, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1191223326, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)4172681798, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.TopSpread, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.BottomSpread, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo(MetaName.Blend, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)883722394, PsoDataType.Enum, 24, 0, (MetaName)3509057257), - new PsoStructureEntryInfo((MetaName)2168296036, PsoDataType.Enum, 28, 0, (MetaName)3509057257), - new PsoStructureEntryInfo((MetaName)1744405318, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2827348378, PsoDataType.UInt, 36, 0, 0) + new PsoStructureEntryInfo(MetaName.TopComponent, PsoDataType.Enum, 24, 0, (MetaName)3509057257), + new PsoStructureEntryInfo(MetaName.BottomComponent, PsoDataType.Enum, 28, 0, (MetaName)3509057257), + new PsoStructureEntryInfo(MetaName.BiasSide, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.BiasSideTime, PsoDataType.UInt, 36, 0, 0) ); case (MetaName)1001943080: return new PsoStructureInfo((MetaName)1001943080, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)4170306057, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1120630761, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)81171216, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)474003950, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2121757492, PsoDataType.Float, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.HoldingWeaponBonus, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.UnarmedBonus, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.ArmouredBonus, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MovingMultiplierBonus, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.HealthMultiplierBonus, PsoDataType.Float, 24, 0, 0) ); case (MetaName)2149258416: return new PsoStructureInfo((MetaName)2149258416, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)1894293331, PsoDataType.SInt, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2663144521, PsoDataType.SInt, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)3575120372, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3002630191, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1905000551, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3342224597, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2054532609, PsoDataType.Float, 32, 0, 0) + new PsoStructureEntryInfo(MetaName.MinLookAtArmWoundTime, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxLookAtArmWoundTime, PsoDataType.SInt, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.UpperArmImpulseCap, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.LowerArmImpulseCap, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.ClavicleImpulseScale, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.UpperArmNoTorsoHitImpulseCap, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.LowerArmNoTorseHitImpulseCap, PsoDataType.Float, 32, 0, 0) ); case (MetaName)436100430: return new PsoStructureInfo((MetaName)436100430, 0, 0, 1568, - new PsoStructureEntryInfo((MetaName)212355988, PsoDataType.Structure, 8, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)2945330295, PsoDataType.Structure, 48, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3856838428, PsoDataType.Structure, 88, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)1190774472, PsoDataType.Structure, 128, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3676971081, PsoDataType.Structure, 168, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)2194212345, PsoDataType.Structure, 208, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)478190306, PsoDataType.Structure, 248, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)800099441, PsoDataType.Structure, 288, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)451773670, PsoDataType.Structure, 328, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)256476042, PsoDataType.Structure, 368, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3003938851, PsoDataType.Structure, 408, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)2675545657, PsoDataType.Structure, 448, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3674358794, PsoDataType.Structure, 488, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3495314353, PsoDataType.Structure, 528, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3260924144, PsoDataType.Structure, 568, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)1203310844, PsoDataType.Structure, 608, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)264772538, PsoDataType.Structure, 648, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)4148786995, PsoDataType.Structure, 688, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)62148721, PsoDataType.Structure, 728, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3600525461, PsoDataType.Structure, 768, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)1586436866, PsoDataType.Structure, 808, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3396170193, PsoDataType.Structure, 848, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)2464589752, PsoDataType.Structure, 888, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)1877343639, PsoDataType.Structure, 928, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)745594459, PsoDataType.Structure, 968, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3103279089, PsoDataType.Structure, 1008, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)1740552960, PsoDataType.Structure, 1048, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.Base, PsoDataType.Structure, 8, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.Melee, PsoDataType.Structure, 48, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.Electrocute, PsoDataType.Structure, 88, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.SprintingLegShot, PsoDataType.Structure, 128, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.SprintingDeath, PsoDataType.Structure, 168, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.Sprinting, PsoDataType.Structure, 208, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.AutomaticHeadShot, PsoDataType.Structure, 248, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.HeadShot, PsoDataType.Structure, 288, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.AutomaticNeckShot, PsoDataType.Structure, 328, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.NeckShot, PsoDataType.Structure, 368, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.SniperLegShot, PsoDataType.Structure, 408, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.LegShot, PsoDataType.Structure, 448, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.ArmShot, PsoDataType.Structure, 488, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.BackShot, PsoDataType.Structure, 528, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.Underwater, PsoDataType.Structure, 568, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.UnderwaterRelax, PsoDataType.Structure, 608, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.Armoured, PsoDataType.Structure, 648, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.BoundAnkles, PsoDataType.Structure, 688, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.FatallyInjured, PsoDataType.Structure, 728, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.PlayerDeathSP, PsoDataType.Structure, 768, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.PlayerDeathMP, PsoDataType.Structure, 808, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.OnStairs, PsoDataType.Structure, 848, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.ShotAgainstWall, PsoDataType.Structure, 888, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.LastStand, PsoDataType.Structure, 928, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.LastStandArmoured, PsoDataType.Structure, 968, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.HeadLook, PsoDataType.Structure, 1008, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.FallToKnees, PsoDataType.Structure, 1048, 0, MetaName.CNmTuningSet), new PsoStructureEntryInfo(MetaName.StaggerFall, PsoDataType.Structure, 1088, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)4093402329, PsoDataType.Structure, 1128, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)1126347982, PsoDataType.Structure, 1168, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3814409847, PsoDataType.Structure, 1208, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3571002906, PsoDataType.Structure, 1248, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)246824093, PsoDataType.Structure, 1288, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3062524360, PsoDataType.Structure, 1328, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.CatchFall, PsoDataType.Structure, 1128, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.SetFallingReactionHealthy, PsoDataType.Structure, 1168, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.SetFallingReactionInjured, PsoDataType.Structure, 1208, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.SetFallingReactionFallOverWall, PsoDataType.Structure, 1248, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.SetFallingReactionFallOverVehicle, PsoDataType.Structure, 1288, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.RubberBulletKnockdown, PsoDataType.Structure, 1328, 0, MetaName.CNmTuningSet), new PsoStructureEntryInfo(MetaName.Teeter, PsoDataType.Structure, 1368, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3291888789, PsoDataType.Structure, 1408, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3720463376, PsoDataType.Structure, 1448, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)3072964466, PsoDataType.Structure, 1488, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.HoldingTwoHandedWeapon, PsoDataType.Structure, 1408, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.HoldingSingleHandedWeapon, PsoDataType.Structure, 1448, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.CrouchedOrLowCover, PsoDataType.Structure, 1488, 0, MetaName.CNmTuningSet), new PsoStructureEntryInfo(MetaName.Female, PsoDataType.Structure, 1528, 0, MetaName.CNmTuningSet) ); case MetaName.CTaskNMSimple__Tunables: @@ -10723,196 +10723,196 @@ namespace CodeWalker.GameFiles ); case (MetaName)2610655349: return new PsoStructureInfo((MetaName)2610655349, 0, 0, 176, - new PsoStructureEntryInfo((MetaName)4168588760, PsoDataType.SInt, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2235294119, PsoDataType.SInt, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)4246262885, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.iMinTime, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.iMaxTime, PsoDataType.SInt, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.fRagdollScore, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo(MetaName.Start, PsoDataType.Structure, 24, 0, MetaName.CNmTuningSet), new PsoStructureEntryInfo(MetaName.Update, PsoDataType.Structure, 64, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)494965274, PsoDataType.Structure, 104, 0, MetaName.CNmTuningSet), - new PsoStructureEntryInfo((MetaName)124792981, PsoDataType.Structure, 144, 0, (MetaName)3749122641) + new PsoStructureEntryInfo(MetaName.OnBalanceFailure, PsoDataType.Structure, 104, 0, MetaName.CNmTuningSet), + new PsoStructureEntryInfo(MetaName.BlendOutThreshold, PsoDataType.Structure, 144, 0, (MetaName)3749122641) ); case MetaName.CTaskNMThroughWindscreen__Tunables: return new PsoStructureInfo(MetaName.CTaskNMThroughWindscreen__Tunables, 0, 0, 232, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1393168468, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2371670611, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2251372495, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2466946069, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3963787762, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2641066262, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)164203436, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2962336026, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)2854807360, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2357933858, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)4180033042, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)3242658957, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)301898848, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)3996231382, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)4245738856, PsoDataType.SInt, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)1575645985, PsoDataType.Structure, 80, 0, (MetaName)1267291753), - new PsoStructureEntryInfo((MetaName)3654250561, PsoDataType.Structure, 104, 0, (MetaName)1267291753), - new PsoStructureEntryInfo((MetaName)3619347977, PsoDataType.Structure, 128, 0, (MetaName)1267291753), + new PsoStructureEntryInfo(MetaName.GravityScale, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.StartForceDownHeight, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.KnockOffBikeForwardMinComponent, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.KnockOffBikeForwardMaxComponent, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.KnockOffBikeUpMinComponent, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.KnockOffBikeUpMaxComponent, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.KnockOffBikePitchMinComponent, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.KnockOffBikePitchMaxComponent, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.KnockOffBikeMinSpeed, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.KnockOffBikeMaxSpeed, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.KnockOffBikeMinUpright, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.KnockOffBikeMaxUpright, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.KnockOffBikeEjectMaxImpactDepth, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.KnockOffBikeEjectImpactFriction, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.ClearVehicleTimeMS, PsoDataType.SInt, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultInverseMassScales, PsoDataType.Structure, 80, 0, (MetaName)1267291753), + new PsoStructureEntryInfo(MetaName.BicycleInverseMassScales, PsoDataType.Structure, 104, 0, (MetaName)1267291753), + new PsoStructureEntryInfo(MetaName.BikeInverseMassScales, PsoDataType.Structure, 128, 0, (MetaName)1267291753), new PsoStructureEntryInfo(MetaName.Start, PsoDataType.Structure, 152, 0, MetaName.CNmTuningSet), new PsoStructureEntryInfo(MetaName.Update, PsoDataType.Structure, 192, 0, MetaName.CNmTuningSet) ); case MetaName.CTaskRageRagdoll__Tunables: return new PsoStructureInfo(MetaName.CTaskRageRagdoll__Tunables, 0, 0, 168, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2573019437, PsoDataType.Structure, 16, 0, (MetaName)2579680791), - new PsoStructureEntryInfo((MetaName)2519031107, PsoDataType.Structure, 48, 0, (MetaName)2579680791), - new PsoStructureEntryInfo((MetaName)2622719195, PsoDataType.Structure, 80, 0, (MetaName)2579680791), - new PsoStructureEntryInfo((MetaName)3405457664, PsoDataType.Structure, 112, 0, (MetaName)2715073781), - new PsoStructureEntryInfo((MetaName)3498784443, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)3163227947, PsoDataType.Float, 164, 0, 0) + new PsoStructureEntryInfo(MetaName.SpineStrengthTuning, PsoDataType.Structure, 16, 0, (MetaName)2579680791), + new PsoStructureEntryInfo(MetaName.NeckStrengthTuning, PsoDataType.Structure, 48, 0, (MetaName)2579680791), + new PsoStructureEntryInfo(MetaName.LimbStrengthTuning, PsoDataType.Structure, 80, 0, (MetaName)2579680791), + new PsoStructureEntryInfo(MetaName.RageRagdollImpulseTuning, PsoDataType.Structure, 112, 0, (MetaName)2715073781), + new PsoStructureEntryInfo(MetaName.fMuscleAngleStrengthRampDownRate, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.fMuscleSpeedStrengthRampDownRate, PsoDataType.Float, 164, 0, 0) ); case (MetaName)2579680791: return new PsoStructureInfo((MetaName)2579680791, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)79279568, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2901808706, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)494142166, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)649526198, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3898851432, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)498117381, PsoDataType.Float, 28, 0, 0) + new PsoStructureEntryInfo(MetaName.fInitialDelay, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.fStartStrength, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.fMidStrength, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.fEndStrength, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.fDurationStage1, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.fDurationStage2, PsoDataType.Float, 28, 0, 0) ); case (MetaName)2715073781: return new PsoStructureInfo((MetaName)2715073781, 0, 0, 48, - new PsoStructureEntryInfo((MetaName)702174865, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)3098879897, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)628688906, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)4043035065, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3072803950, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3121676006, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3679879803, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)3492529421, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)3454936156, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)664247322, PsoDataType.Float, 44, 0, 0) + new PsoStructureEntryInfo(MetaName.fImpulseReductionPerShot, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.fImpulseRecoveryPerSecond, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxImpulseModifier, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinImpulseModifier, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.fCounterImpulseRatio, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.fTempInitialStiffnessWhenShot, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.fAnimalMassMult, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.fAnimalImpulseMultMin, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.fAnimalImpulseMultMax, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.fInitialHitImpulseMult, PsoDataType.Float, 44, 0, 0) ); case MetaName.CPlayerInfo__Tunables: return new PsoStructureInfo(MetaName.CPlayerInfo__Tunables, 0, 0, 992, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2545446674, PsoDataType.Structure, 16, 0, (MetaName)2968011987), - new PsoStructureEntryInfo((MetaName)3029474439, PsoDataType.Structure, 48, 0, (MetaName)2859355160), - new PsoStructureEntryInfo((MetaName)1127062988, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)86779191, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)2451123132, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)1576858885, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)2104384861, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)3615351832, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.EnemyCharging, PsoDataType.Structure, 16, 0, (MetaName)2968011987), + new PsoStructureEntryInfo(MetaName.CombatLoitering, PsoDataType.Structure, 48, 0, (MetaName)2859355160), + new PsoStructureEntryInfo(MetaName.MinVehicleCollisionDamageScale, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxVehicleCollisionDamageScale, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAngleConsidered, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDotToConsiderVehicleValid, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistToConsiderVehicleValid, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.SprintReplenishFinishedPercentage, PsoDataType.Float, 84, 0, 0), new PsoStructureEntryInfo((MetaName)3763989739, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)3211960089, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)600117053, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)1353421746, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)420979855, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)3684109243, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)164620332, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)3579116253, PsoDataType.Float, 116, 0, 0), - new PsoStructureEntryInfo((MetaName)1351646535, PsoDataType.Float, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)1241525786, PsoDataType.Float, 124, 0, 0), - new PsoStructureEntryInfo((MetaName)328254695, PsoDataType.Float, 128, 0, 0), - new PsoStructureEntryInfo((MetaName)3990545757, PsoDataType.Float, 132, 0, 0), - new PsoStructureEntryInfo((MetaName)1793159754, PsoDataType.Float, 136, 0, 0), - new PsoStructureEntryInfo((MetaName)1613714646, PsoDataType.Float, 140, 0, 0), - new PsoStructureEntryInfo((MetaName)3746655905, PsoDataType.Float, 144, 0, 0), - new PsoStructureEntryInfo((MetaName)4019573548, PsoDataType.Float, 148, 0, 0), - new PsoStructureEntryInfo((MetaName)1929662760, PsoDataType.Float, 152, 0, 0), - new PsoStructureEntryInfo((MetaName)2709145468, PsoDataType.Float, 156, 0, 0), - new PsoStructureEntryInfo((MetaName)4027241659, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)3428727331, PsoDataType.Float, 164, 0, 0), - new PsoStructureEntryInfo((MetaName)4176468490, PsoDataType.Float, 168, 0, 0), - new PsoStructureEntryInfo((MetaName)2465303084, PsoDataType.Float, 172, 0, 0), - new PsoStructureEntryInfo((MetaName)1171875727, PsoDataType.Float, 176, 0, 0), - new PsoStructureEntryInfo((MetaName)2109232134, PsoDataType.UInt, 180, 0, 0), - new PsoStructureEntryInfo((MetaName)3942172091, PsoDataType.UInt, 184, 0, 0), - new PsoStructureEntryInfo((MetaName)560650271, PsoDataType.String, 188, 7, 0), - new PsoStructureEntryInfo((MetaName)1651229959, PsoDataType.Bool, 192, 0, 0), + new PsoStructureEntryInfo(MetaName.SprintReplenishRateMultiplier, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.SprintReplenishRateMultiplierBike, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxWorldLimitsPlayerX, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxWorldLimitsPlayerY, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.MinWorldLimitsPlayerX, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.MinWorldLimitsPlayerY, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeToTrespassWhileSwimmingBeforeDeath, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.MovementAwayWeighting, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.DistanceWeighting, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo(MetaName.HeadingWeighting, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.CameraWeighting, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo(MetaName.DistanceWeightingNoStick, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo(MetaName.HeadingWeightingNoStick, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo(MetaName.OnFireWeightingMult, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo(MetaName.BikeMaxRestoreDuration, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo(MetaName.BikeMinRestoreDuration, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.BicycleDepletionMinMult, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo(MetaName.BicycleDepletionMidMult, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.BicycleDepletionMaxMult, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo(MetaName.BicycleMinDepletionLimit, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo(MetaName.BicycleMidDepletionLimit, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo(MetaName.BicycleMaxDepletionLimit, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenSwitchToClearTasks, PsoDataType.UInt, 180, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenShoutTargetPosition, PsoDataType.UInt, 184, 0, 0), + new PsoStructureEntryInfo(MetaName.TrespassGuardModelName, PsoDataType.String, 188, 7, 0), + new PsoStructureEntryInfo(MetaName.GuardWorldExtents, PsoDataType.Bool, 192, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CPlayerInfo__sSprintControlData), - new PsoStructureEntryInfo((MetaName)3828880770, PsoDataType.Array, 200, 1, (MetaName)262180), + new PsoStructureEntryInfo(MetaName.SprintControlData, PsoDataType.Array, 200, 1, (MetaName)262180), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CPlayerInfo__sPlayerStatInfo), - new PsoStructureEntryInfo((MetaName)977451662, PsoDataType.Array, 336, 1, (MetaName)524326), + new PsoStructureEntryInfo(MetaName.PlayerStatInfos, PsoDataType.Array, 336, 1, (MetaName)524326), new PsoStructureEntryInfo((MetaName)4178328957, PsoDataType.Float, 984, 0, 0), new PsoStructureEntryInfo((MetaName)1447073898, PsoDataType.Float, 988, 0, 0) ); case (MetaName)2968011987: return new PsoStructureInfo((MetaName)2968011987, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)1417010304, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1507206306, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)2183058530, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1141048876, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1014164585, PsoDataType.Float, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.fChargeGoalBehindCoverCentralOffset, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.fChargeGoalLateralOffset, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.fChargeGoalRearOffset, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.fChargeGoalMaxAdjustRadius, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.fPlayerMoveDistToResetChargeGoals, PsoDataType.Float, 24, 0, 0) ); case (MetaName)2859355160: return new PsoStructureInfo((MetaName)2859355160, 0, 0, 16, - new PsoStructureEntryInfo((MetaName)2426887593, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2454614730, PsoDataType.UInt, 12, 0, 0) + new PsoStructureEntryInfo(MetaName.fPlayerMoveDistToResetLoiterPosition, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.uDistanceCheckPeriodMS, PsoDataType.UInt, 12, 0, 0) ); case MetaName.CPlayerInfo__sSprintControlData: return new PsoStructureInfo(MetaName.CPlayerInfo__sSprintControlData, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)3672071413, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1878184186, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)2933611601, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1066024874, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)597877266, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2301637192, PsoDataType.Float, 28, 0, 0) + new PsoStructureEntryInfo(MetaName.TapAdd, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.HoldSub, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.ReleaseSub, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.Threshhold, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxLimit, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.ResultMult, PsoDataType.Float, 28, 0, 0) ); case MetaName.CPlayerInfo__sPlayerStatInfo: return new PsoStructureInfo(MetaName.CPlayerInfo__sPlayerStatInfo, 0, 0, 80, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1051647876, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)1624872472, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)299633947, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1166926746, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)1924165020, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3607524859, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1670377462, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)1011508514, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)3955578614, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)353529649, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2239295053, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)3700594697, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)3171739573, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)355034181, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)1331483625, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)2479363241, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)3048005225, PsoDataType.Float, 76, 0, 0) + new PsoStructureEntryInfo(MetaName.MinStaminaDuration, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxStaminaDuration, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHoldBreathDuration, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxHoldBreathDuration, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MinWheelieAbility, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxWheelieAbility, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MinPlaneControlAbility, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPlaneControlAbility, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.MinPlaneDamping, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPlaneDamping, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHeliDamping, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxHeliDamping, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.MinFallHeight, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxFallHeight, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDiveHeight, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDiveHeight, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.DiveRampPow, PsoDataType.Float, 76, 0, 0) ); case MetaName.CAnimSpeedUps__Tunables: return new PsoStructureInfo(MetaName.CAnimSpeedUps__Tunables, 0, 0, 56, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)367433608, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2530564765, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)935832867, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)891602871, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2900803312, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1245165468, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)674066505, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2570857418, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)2345403785, PsoDataType.Bool, 48, 0, 0) + new PsoStructureEntryInfo(MetaName.MultiplayerClimbStandRateModifier, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MultiplayerClimbRunningRateModifier, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MultiplayerClimbClamberRateModifier, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MultiplayerEnterExitJackVehicleRateModifier, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MultiplayerLadderRateModifier, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MultiplayerReloadRateModifier, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MultiplayerCoverIntroRateModifier, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.MultiplayerIdleTurnRateModifier, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.ForceMPAnimRatesInSP, PsoDataType.Bool, 48, 0, 0) ); case MetaName.CPlayerPedTargeting__Tunables: return new PsoStructureInfo(MetaName.CPlayerPedTargeting__Tunables, 0, 0, 3776, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1046040592, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)925392687, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1845591318, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)1369945566, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.fTargetableDistance, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.fTargetThreatOverride, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.ArrestHardLockDistance, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.UnarmedInCoverTargetingDistance, PsoDataType.Float, 28, 0, 0), new PsoStructureEntryInfo((MetaName)1109599945, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)3651791969, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)694461643, PsoDataType.UInt, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2930848614, PsoDataType.Bool, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)3783727678, PsoDataType.Bool, 45, 0, 0), - new PsoStructureEntryInfo((MetaName)3215957770, PsoDataType.Bool, 46, 0, 0), - new PsoStructureEntryInfo((MetaName)2995853681, PsoDataType.Bool, 47, 0, 0), + new PsoStructureEntryInfo(MetaName.MeleeLostLOSBreakTime, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeToAllowCachedStickInputForMelee, PsoDataType.UInt, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.DoAynchronousProbesWhenFindingFreeAimAssistTarget, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.AllowDriverLockOnToAmbientPeds, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo(MetaName.AllowDriverLockOnToAmbientPedsInSP, PsoDataType.Bool, 46, 0, 0), + new PsoStructureEntryInfo(MetaName.DisplayAimAssistIntersections, PsoDataType.Bool, 47, 0, 0), new PsoStructureEntryInfo((MetaName)2235947157, PsoDataType.Bool, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)216413736, PsoDataType.Bool, 49, 0, 0), - new PsoStructureEntryInfo((MetaName)208459187, PsoDataType.Bool, 50, 0, 0), - new PsoStructureEntryInfo((MetaName)951183830, PsoDataType.Bool, 51, 0, 0), - new PsoStructureEntryInfo((MetaName)1909407402, PsoDataType.Bool, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)315412703, PsoDataType.Bool, 53, 0, 0), - new PsoStructureEntryInfo((MetaName)3853036348, PsoDataType.Bool, 54, 0, 0), - new PsoStructureEntryInfo((MetaName)2837888679, PsoDataType.Bool, 55, 0, 0), - new PsoStructureEntryInfo((MetaName)1791816512, PsoDataType.Bool, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)1097471232, PsoDataType.Structure, 64, 0, MetaName.CTargettingDifficultyInfo), - new PsoStructureEntryInfo((MetaName)3104062807, PsoDataType.Structure, 528, 0, MetaName.CTargettingDifficultyInfo), + new PsoStructureEntryInfo(MetaName.DisplayAimAssistCurves, PsoDataType.Bool, 49, 0, 0), + new PsoStructureEntryInfo(MetaName.DisplayLockOnDistRanges, PsoDataType.Bool, 50, 0, 0), + new PsoStructureEntryInfo(MetaName.DisplayLockOnAngularRanges, PsoDataType.Bool, 51, 0, 0), + new PsoStructureEntryInfo(MetaName.DisplaySoftLockDebug, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.DisplayFreeAimTargetDebug, PsoDataType.Bool, 53, 0, 0), + new PsoStructureEntryInfo(MetaName.DebugLockOnTargets, PsoDataType.Bool, 54, 0, 0), + new PsoStructureEntryInfo(MetaName.UseRagdollTargetIfNoAssistTarget, PsoDataType.Bool, 55, 0, 0), + new PsoStructureEntryInfo(MetaName.UseReticuleSlowDownStrafeClamp, PsoDataType.Bool, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.EasyTargettingDifficultyInfo, PsoDataType.Structure, 64, 0, MetaName.CTargettingDifficultyInfo), + new PsoStructureEntryInfo(MetaName.NormalTargettingDifficultyInfo, PsoDataType.Structure, 528, 0, MetaName.CTargettingDifficultyInfo), new PsoStructureEntryInfo((MetaName)2843442022, PsoDataType.Structure, 992, 0, MetaName.CTargettingDifficultyInfo), new PsoStructureEntryInfo((MetaName)933644170, PsoDataType.Structure, 1456, 0, MetaName.CTargettingDifficultyInfo), new PsoStructureEntryInfo((MetaName)1051298047, PsoDataType.Structure, 1920, 0, MetaName.CTargettingDifficultyInfo), @@ -10922,74 +10922,74 @@ namespace CodeWalker.GameFiles ); case MetaName.CTargettingDifficultyInfo: return new PsoStructureInfo(MetaName.CTargettingDifficultyInfo, 0, 0, 464, - new PsoStructureEntryInfo((MetaName)4263854907, PsoDataType.Enum, 8, 0, (MetaName)4263854907), + new PsoStructureEntryInfo(MetaName.LockType, PsoDataType.Enum, 8, 0, MetaName.LockType), new PsoStructureEntryInfo((MetaName)3742855719, PsoDataType.Bool, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)2942037123, PsoDataType.Bool, 13, 0, 0), - new PsoStructureEntryInfo((MetaName)2667436072, PsoDataType.Bool, 14, 0, 0), - new PsoStructureEntryInfo((MetaName)3139641677, PsoDataType.Bool, 15, 0, 0), - new PsoStructureEntryInfo((MetaName)1473266781, PsoDataType.Bool, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)297555324, PsoDataType.Bool, 17, 0, 0), - new PsoStructureEntryInfo((MetaName)1815260878, PsoDataType.Bool, 18, 0, 0), - new PsoStructureEntryInfo((MetaName)1214053169, PsoDataType.Bool, 19, 0, 0), - new PsoStructureEntryInfo((MetaName)3032938120, PsoDataType.Bool, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2834495058, PsoDataType.Bool, 21, 0, 0), + new PsoStructureEntryInfo(MetaName.UseLockOnTargetSwitching, PsoDataType.Bool, 13, 0, 0), + new PsoStructureEntryInfo(MetaName.UseReticuleSlowDownForRunAndGun, PsoDataType.Bool, 14, 0, 0), + new PsoStructureEntryInfo(MetaName.UseReticuleSlowDown, PsoDataType.Bool, 15, 0, 0), + new PsoStructureEntryInfo(MetaName.EnableBulletBending, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.AllowSoftLockFineAim, PsoDataType.Bool, 17, 0, 0), + new PsoStructureEntryInfo(MetaName.UseFineAimSpring, PsoDataType.Bool, 18, 0, 0), + new PsoStructureEntryInfo(MetaName.UseNewSlowDownCode, PsoDataType.Bool, 19, 0, 0), + new PsoStructureEntryInfo(MetaName.UseCapsuleTests, PsoDataType.Bool, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.UseDriveByAssistedAim, PsoDataType.Bool, 21, 0, 0), new PsoStructureEntryInfo((MetaName)3708089905, PsoDataType.Bool, 22, 0, 0), - new PsoStructureEntryInfo((MetaName)3927328861, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)1424095429, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)494811143, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1217679840, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)361676600, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)3274621266, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)2598900761, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2015184340, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)1280045894, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)1394170274, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)3789965859, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)3751177723, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)3414965475, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)3583828968, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)2308178823, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)4232341165, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)4081370038, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)2946314787, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)3453384537, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)1235721286, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)3025537526, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)2510305536, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)1940999374, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)3411810706, PsoDataType.Float, 116, 0, 0), - new PsoStructureEntryInfo((MetaName)2012228463, PsoDataType.Float, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)1649684365, PsoDataType.Float, 124, 0, 0), - new PsoStructureEntryInfo((MetaName)3539954611, PsoDataType.Float, 128, 0, 0), - new PsoStructureEntryInfo((MetaName)2357834650, PsoDataType.Float, 132, 0, 0), - new PsoStructureEntryInfo((MetaName)1661550302, PsoDataType.Float, 136, 0, 0), - new PsoStructureEntryInfo((MetaName)2224486137, PsoDataType.Float, 140, 0, 0), - new PsoStructureEntryInfo((MetaName)1340511632, PsoDataType.Float, 144, 0, 0), - new PsoStructureEntryInfo((MetaName)64509274, PsoDataType.Float, 148, 0, 0), - new PsoStructureEntryInfo((MetaName)2809571307, PsoDataType.Float, 152, 0, 0), - new PsoStructureEntryInfo((MetaName)2827935386, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo(MetaName.LockOnRangeModifier, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.ReticuleSlowDownRadius, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ReticuleSlowDownCapsuleRadius, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.ReticuleSlowDownCapsuleLength, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultTargetAngularLimit, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultTargetAngularLimitClose, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultTargetAngularLimitCloseDistMin, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultTargetAngularLimitCloseDistMax, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.WideTargetAngularLimit, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.CycleTargetAngularLimit, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.CycleTargetAngularLimitMelee, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultTargetAimPitchMin, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultTargetAimPitchMax, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.NoReticuleLockOnRangeModifier, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.NoReticuleMaxLockOnRange, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.NoReticuleTargetAngularLimit, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.NoReticuleTargetAngularLimitClose, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.NoReticuleTargetAngularLimitCloseDistMin, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.NoReticuleTargetAngularLimitCloseDistMax, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.NoReticuleTargetAimPitchLimit, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.MinVelocityForDriveByAssistedAim, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.LockOnDistanceRejectionModifier, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.FineAimVerticalMovement, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.FineAimDownwardsVerticalMovement, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.FineAimSidewaysScale, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSoftLockBreakTime, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSoftLockBreakTimeCloseRange, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSoftLockBreakAtMaxXStickTime, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo(MetaName.SoftLockBreakDistanceMin, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo(MetaName.SoftLockBreakDistanceMax, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo(MetaName.MinFineAimTime, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo(MetaName.MinFineAimTimeHoldingStick, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo(MetaName.MinNoReticuleAimTime, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.AimAssistCapsuleRadius, PsoDataType.Float, 156, 0, 0), new PsoStructureEntryInfo((MetaName)2152729841, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)134284951, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo(MetaName.AimAssistCapsuleMaxLength, PsoDataType.Float, 164, 0, 0), new PsoStructureEntryInfo((MetaName)1099784311, PsoDataType.Float, 168, 0, 0), - new PsoStructureEntryInfo((MetaName)505547665, PsoDataType.Float, 172, 0, 0), - new PsoStructureEntryInfo((MetaName)3649321767, PsoDataType.Float, 176, 0, 0), - new PsoStructureEntryInfo((MetaName)1403902499, PsoDataType.Float, 180, 0, 0), - new PsoStructureEntryInfo((MetaName)3553881274, PsoDataType.Float, 184, 0, 0), - new PsoStructureEntryInfo((MetaName)352361634, PsoDataType.Float, 188, 0, 0), - new PsoStructureEntryInfo((MetaName)1117580274, PsoDataType.Float, 192, 0, 0), - new PsoStructureEntryInfo((MetaName)4067802571, PsoDataType.Float, 196, 0, 0), - new PsoStructureEntryInfo((MetaName)2124028122, PsoDataType.Float, 200, 0, 0), - new PsoStructureEntryInfo((MetaName)3433060120, PsoDataType.Float, 204, 0, 0), + new PsoStructureEntryInfo(MetaName.AimAssistBlendInTime, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo(MetaName.AimAssistBlendOutTime, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo(MetaName.SoftLockFineAimBreakXYValue, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo(MetaName.SoftLockFineAimBreakZValue, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo(MetaName.SoftLockFineAimXYAbsoluteValue, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo(MetaName.SoftLockFineAimXYAbsoluteValueClose, PsoDataType.Float, 192, 0, 0), + new PsoStructureEntryInfo(MetaName.SoftLockBreakValue, PsoDataType.Float, 196, 0, 0), + new PsoStructureEntryInfo(MetaName.SoftLockTime, PsoDataType.Float, 200, 0, 0), + new PsoStructureEntryInfo(MetaName.SoftLockTimeToAcquireTarget, PsoDataType.Float, 204, 0, 0), new PsoStructureEntryInfo((MetaName)2167138628, PsoDataType.Float, 208, 0, 0), - new PsoStructureEntryInfo((MetaName)2633888729, PsoDataType.Float, 212, 0, 0), - new PsoStructureEntryInfo((MetaName)1036145679, PsoDataType.Float, 216, 0, 0), - new PsoStructureEntryInfo((MetaName)2689623744, PsoDataType.Float, 220, 0, 0), - new PsoStructureEntryInfo((MetaName)3282516112, PsoDataType.Float, 224, 0, 0), - new PsoStructureEntryInfo((MetaName)2407796767, PsoDataType.Float, 228, 0, 0), - new PsoStructureEntryInfo((MetaName)2444069349, PsoDataType.Float, 232, 0, 0), - new PsoStructureEntryInfo((MetaName)2679873658, PsoDataType.Float, 236, 0, 0), - new PsoStructureEntryInfo((MetaName)767482079, PsoDataType.Float, 240, 0, 0), - new PsoStructureEntryInfo((MetaName)286043552, PsoDataType.Float, 244, 0, 0), + new PsoStructureEntryInfo(MetaName.FineAimHorSpeedMin, PsoDataType.Float, 212, 0, 0), + new PsoStructureEntryInfo(MetaName.FineAimHorSpeedMax, PsoDataType.Float, 216, 0, 0), + new PsoStructureEntryInfo(MetaName.FineAimVerSpeed, PsoDataType.Float, 220, 0, 0), + new PsoStructureEntryInfo(MetaName.FineAimSpeedMultiplier, PsoDataType.Float, 224, 0, 0), + new PsoStructureEntryInfo(MetaName.FineAimHorWeightSpeedMultiplier, PsoDataType.Float, 228, 0, 0), + new PsoStructureEntryInfo(MetaName.FineAimHorSpeedPower, PsoDataType.Float, 232, 0, 0), + new PsoStructureEntryInfo(MetaName.FineAimSpeedMultiplierClose, PsoDataType.Float, 236, 0, 0), + new PsoStructureEntryInfo(MetaName.FineAimSpeedMultiplierCloseDistMin, PsoDataType.Float, 240, 0, 0), + new PsoStructureEntryInfo(MetaName.FineAimSpeedMultiplierCloseDistMax, PsoDataType.Float, 244, 0, 0), new PsoStructureEntryInfo((MetaName)1715236167, PsoDataType.Float, 248, 0, 0), new PsoStructureEntryInfo((MetaName)1204531501, PsoDataType.Float, 252, 0, 0), new PsoStructureEntryInfo((MetaName)2894104098, PsoDataType.Float, 256, 0, 0), @@ -10998,91 +10998,91 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)3926385305, PsoDataType.Float, 268, 0, 0), new PsoStructureEntryInfo((MetaName)493048149, PsoDataType.Float, 272, 0, 0), new PsoStructureEntryInfo((MetaName)2549641570, PsoDataType.Float, 276, 0, 0), - new PsoStructureEntryInfo((MetaName)1952125540, PsoDataType.UInt, 280, 0, 0), - new PsoStructureEntryInfo((MetaName)2774244387, PsoDataType.UInt, 284, 0, 0), + new PsoStructureEntryInfo(MetaName.LockOnSwitchTimeExtensionBreakLock, PsoDataType.UInt, 280, 0, 0), + new PsoStructureEntryInfo(MetaName.LockOnSwitchTimeExtensionKillTarget, PsoDataType.UInt, 284, 0, 0), new PsoStructureEntryInfo((MetaName)3957255740, PsoDataType.Float, 288, 0, 0), new PsoStructureEntryInfo((MetaName)3799655237, PsoDataType.Float, 292, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CCurveSet), - new PsoStructureEntryInfo((MetaName)4116334946, PsoDataType.Array, 296, 1, (MetaName)262224), - new PsoStructureEntryInfo((MetaName)390534438, PsoDataType.Structure, 432, 0, MetaName.CCurveSet) + new PsoStructureEntryInfo(MetaName.CurveSets, PsoDataType.Array, 296, 1, (MetaName)262224), + new PsoStructureEntryInfo(MetaName.AimAssistDistanceCurve, PsoDataType.Structure, 432, 0, MetaName.CCurveSet) ); case MetaName.CCurveSet: return new PsoStructureInfo(MetaName.CCurveSet, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CCurve), - new PsoStructureEntryInfo((MetaName)1403691063, PsoDataType.Array, 16, 0, (MetaName)1) + new PsoStructureEntryInfo(MetaName.curves, PsoDataType.Array, 16, 0, (MetaName)1) ); case MetaName.CCurve: return new PsoStructureInfo(MetaName.CCurve, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)541735427, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2372087104, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)2680890523, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.fInputMax, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.fResultMax, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.fPow, PsoDataType.Float, 16, 0, 0) ); case MetaName.CRandomEventManager__Tunables: return new PsoStructureInfo(MetaName.CRandomEventManager__Tunables, 0, 0, 96, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3284686610, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.RenderDebug, PsoDataType.Bool, 16, 0, 0), new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 17, 0, 0), - new PsoStructureEntryInfo((MetaName)1727634143, PsoDataType.Bool, 18, 0, 0), - new PsoStructureEntryInfo((MetaName)95033849, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3561980965, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.ForceCrime, PsoDataType.Bool, 18, 0, 0), + new PsoStructureEntryInfo(MetaName.EventInterval, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.EventInitInterval, PsoDataType.Float, 24, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1980648971), - new PsoStructureEntryInfo((MetaName)2154193106, PsoDataType.Array, 32, 0, (MetaName)6), + new PsoStructureEntryInfo(MetaName.RandomEventType, PsoDataType.Array, 32, 0, (MetaName)6), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)2790883352), - new PsoStructureEntryInfo((MetaName)4113341331, PsoDataType.Array, 48, 0, (MetaName)8), - new PsoStructureEntryInfo((MetaName)1201683089, PsoDataType.Bool, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)1965911345, PsoDataType.SInt, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)2463315253, PsoDataType.SInt, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)3549282925, PsoDataType.SInt, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)1676424772, PsoDataType.SInt, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)1696043144, PsoDataType.String, 84, 7, 0), - new PsoStructureEntryInfo((MetaName)2549257506, PsoDataType.String, 88, 7, 0) + new PsoStructureEntryInfo(MetaName.RandomEventData, PsoDataType.Array, 48, 0, (MetaName)8), + new PsoStructureEntryInfo(MetaName.SpawningChasesEnabled, PsoDataType.Bool, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxNumberCopVehiclesInChase, PsoDataType.SInt, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.ProbSpawnHeli, PsoDataType.SInt, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAmbientVehiclesToSpawnChase, PsoDataType.SInt, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.MinPlayerMoveDistanceToSpawnChase, PsoDataType.SInt, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.HeliVehicleModelId, PsoDataType.String, 84, 7, 0), + new PsoStructureEntryInfo(MetaName.HeliPedModelId, PsoDataType.String, 88, 7, 0) ); case (MetaName)1980648971: return new PsoStructureInfo((MetaName)1980648971, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)2873713085, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2347950667, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)2841351028, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)397262754, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.RandomEventTypeName, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.RandomEventTimeIntervalMin, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.RandomEventTimeIntervalMax, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.DeltaScaleWhenPlayerStationary, PsoDataType.Float, 20, 0, 0) ); case (MetaName)2790883352: return new PsoStructureInfo((MetaName)2790883352, 0, 0, 16, - new PsoStructureEntryInfo((MetaName)790968462, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2154193106, PsoDataType.Enum, 12, 0, (MetaName)3799765345) + new PsoStructureEntryInfo(MetaName.RandomEventName, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.RandomEventType, PsoDataType.Enum, 12, 0, (MetaName)3799765345) ); case MetaName.CEventExplosionHeard__Tunables: return new PsoStructureInfo(MetaName.CEventExplosionHeard__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3413677046, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxCombineDistThresholdSquared, PsoDataType.Float, 16, 0, 0) ); case MetaName.CRelationshipManager__Tunables: return new PsoStructureInfo(MetaName.CRelationshipManager__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1828214902, PsoDataType.Bool, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.DisplayRemovedGroups, PsoDataType.Bool, 16, 0, 0) ); case MetaName.CTaskAgitated__Tunables: return new PsoStructureInfo(MetaName.CTaskAgitated__Tunables, 0, 0, 40, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)67050499, PsoDataType.Structure, 16, 0, (MetaName)588501678), - new PsoStructureEntryInfo((MetaName)3284365585, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1549370724, PsoDataType.Float, 36, 0, 0) + new PsoStructureEntryInfo(MetaName.Rendering, PsoDataType.Structure, 16, 0, (MetaName)588501678), + new PsoStructureEntryInfo(MetaName.TimeBetweenLookAts, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MovingAwayVelocityMSThreshold, PsoDataType.Float, 36, 0, 0) ); case (MetaName)588501678: return new PsoStructureInfo((MetaName)588501678, 0, 0, 16, new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)4197530443, PsoDataType.Bool, 9, 0, 0), - new PsoStructureEntryInfo((MetaName)2753590613, PsoDataType.Bool, 10, 0, 0), - new PsoStructureEntryInfo((MetaName)3024574816, PsoDataType.Bool, 11, 0, 0) + new PsoStructureEntryInfo(MetaName.Info, PsoDataType.Bool, 9, 0, 0), + new PsoStructureEntryInfo(MetaName.Hashes, PsoDataType.Bool, 10, 0, 0), + new PsoStructureEntryInfo(MetaName.History, PsoDataType.Bool, 11, 0, 0) ); case MetaName.CTaskConfront__Tunables: return new PsoStructureInfo(MetaName.CTaskConfront__Tunables, 0, 0, 40, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)172591904, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3291058825, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1348357381, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)466062419, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2212321440, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2214254758, PsoDataType.Float, 36, 0, 0) + new PsoStructureEntryInfo(MetaName.IdealDistanceIfUnarmed, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.IdealDistanceIfArmed, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceToMove, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRadius, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ChancesToIntimidateArmedTarget, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.ChancesToIntimidateUnarmedTarget, PsoDataType.Float, 36, 0, 0) ); case MetaName.CTaskSmartFlee__Tunables: return new PsoStructureInfo(MetaName.CTaskSmartFlee__Tunables, 0, 0, 136, @@ -11100,56 +11100,56 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)4172340609, PsoDataType.Float, 52, 0, 0), new PsoStructureEntryInfo((MetaName)916666022, PsoDataType.Float, 56, 0, 0), new PsoStructureEntryInfo((MetaName)1653710895, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)2200934401, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)1946412733, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)1422617106, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)4172879726, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)2520530295, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)1376968536, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)3487053313, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)3267921887, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)2049624973, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)1276762529, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)225841828, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)3858374889, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)9265257, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)882826582, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.ExitVehicleMaxDistance, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.ExitVehicleRouteMinDistance, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenHandsUpChecks, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenExitVehicleDueToRouteChecks, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeToCower, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeForHandsUp, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeForHandsUp, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDelayTimeForExitVehicle, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDelayTimeForExitVehicle, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.ChanceToDeleteOnExitVehicle, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistFromPlayerToDeleteOnExitVehicle, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRouteLengthForCower, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistFromTargetWhenCoweringToCheckForExit, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.FleeTargetTooCloseDistance, PsoDataType.Float, 116, 0, 0), new PsoStructureEntryInfo((MetaName)945475130, PsoDataType.Float, 120, 0, 0), new PsoStructureEntryInfo((MetaName)909291779, PsoDataType.Float, 124, 0, 0), - new PsoStructureEntryInfo((MetaName)325049815, PsoDataType.SInt, 128, 0, 0), - new PsoStructureEntryInfo((MetaName)4045684189, PsoDataType.Bool, 132, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxRouteSizeForCower, PsoDataType.SInt, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.ForceCower, PsoDataType.Bool, 132, 0, 0) ); case MetaName.CTaskScenarioFlee__Tunables: return new PsoStructureInfo(MetaName.CTaskScenarioFlee__Tunables, 0, 0, 56, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1574250361, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2790363538, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2543804780, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3314827784, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3546053113, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.fFleeProjectRange, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.fInitialSearchRadius, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.fSearchScaler, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.fSearchRangeMax, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.fFleeRange, PsoDataType.Float, 32, 0, 0), new PsoStructureEntryInfo((MetaName)1817496588, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)1578763478, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)586057169, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.fTargetScenarioRadius, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.fProbeLength, PsoDataType.Float, 44, 0, 0), new PsoStructureEntryInfo((MetaName)3328108206, PsoDataType.UInt, 48, 0, 0) ); case MetaName.CTaskExhaustedFlee__Tunables: return new PsoStructureInfo(MetaName.CTaskExhaustedFlee__Tunables, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3024832208, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3136810971, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2366160443, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2348909882, PsoDataType.Float, 28, 0, 0) + new PsoStructureEntryInfo(MetaName.StartingEnergy, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.EnergyLostPerSecond, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.OuterDistanceThreshold, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.InnerDistanceThreshold, PsoDataType.Float, 28, 0, 0) ); case MetaName.CTaskWalkAway__Tunables: return new PsoStructureInfo(MetaName.CTaskWalkAway__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2538781855, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)368954988, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.SafeDistance, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenRouteAdjustments, PsoDataType.Float, 20, 0, 0) ); case MetaName.CTaskGrowlAndFlee__Tunables: return new PsoStructureInfo(MetaName.CTaskGrowlAndFlee__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1024232437, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.FleeMBR, PsoDataType.Float, 16, 0, 0) ); case MetaName.CTaskIntimidate__Tunables: return new PsoStructureInfo(MetaName.CTaskIntimidate__Tunables, 0, 0, 24, @@ -11159,16 +11159,16 @@ namespace CodeWalker.GameFiles case MetaName.CTaskReactAndFlee__Tunables: return new PsoStructureInfo(MetaName.CTaskReactAndFlee__Tunables, 0, 0, 56, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)859826315, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2916287204, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)198397458, PsoDataType.Bool, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3275732457, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3320627039, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2030474037, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)1240074404, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)1154906885, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)2653769818, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)1359604368, PsoDataType.Float, 52, 0, 0) + new PsoStructureEntryInfo(MetaName.MinFleeMoveBlendRatio, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxFleeMoveBlendRatio, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.OverrideDirections, PsoDataType.Bool, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.OverrideReactDirection, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.OverrideFleeDirection, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxReactionTime, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MinRate, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRate, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.HeadingChangeRate, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeToRepeatLastAnimation, PsoDataType.Float, 52, 0, 0) ); case MetaName.CTaskReactInDirection__Tunables: return new PsoStructureInfo(MetaName.CTaskReactInDirection__Tunables, 0, 0, 16, @@ -11177,122 +11177,122 @@ namespace CodeWalker.GameFiles case MetaName.CTaskReactToExplosion__Tunables: return new PsoStructureInfo(MetaName.CTaskReactToExplosion__Tunables, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1811470108, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1218603971, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2034399215, PsoDataType.Float, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxShellShockedDistance, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxFlinchDistance, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxLookAtDistance, PsoDataType.Float, 24, 0, 0) ); case MetaName.CTaskReactToImminentExplosion__Tunables: return new PsoStructureInfo(MetaName.CTaskReactToImminentExplosion__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1872481699, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1218603971, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxEscapeDistance, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxFlinchDistance, PsoDataType.Float, 20, 0, 0) ); case MetaName.CTaskShockingEvent__Tunables: return new PsoStructureInfo(MetaName.CTaskShockingEvent__Tunables, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1379047521, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)40347237, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3006329763, PsoDataType.Float, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.MinRemainingRotationForScaling, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAngularVelocityScaleFactor, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAngularVelocityScaleFactor, PsoDataType.Float, 24, 0, 0) ); case MetaName.CTaskShockingEventGoto__Tunables: return new PsoStructureInfo(MetaName.CTaskShockingEventGoto__Tunables, 0, 0, 48, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3622532239, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3859213332, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)803081093, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2347754539, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1071466356, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1440512567, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)1670586696, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)3333208061, PsoDataType.Float, 44, 0, 0) + new PsoStructureEntryInfo(MetaName.DistSquaredThresholdAtCrowdRoundPos, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.DistSquaredThresholdMovingToCrowdRoundPos, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.DistVicinityOfCrowd, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.ExtraDistForGoto, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistFromOtherPeds, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MoveBlendRatioForFarGoto, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.TargetRadiusForCloseNavMeshTask, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.ExtraToleranceForStopWatchDistance, PsoDataType.Float, 44, 0, 0) ); case MetaName.CTaskShockingEventHurryAway__Tunables: return new PsoStructureInfo(MetaName.CTaskShockingEventHurryAway__Tunables, 0, 0, 80, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1706779012, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2723841400, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)821642865, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3706002780, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1757042582, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1713122871, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)551070027, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2458557466, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)2097584563, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)1339551933, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)2071699275, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)2708798326, PsoDataType.UInt, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)2385841716, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)1980022811, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)3508977239, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)4026550489, PsoDataType.Float, 76, 0, 0) + new PsoStructureEntryInfo(MetaName.LookAheadDistanceForBackAway, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ChancesToCallPolice, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeToCallPolice, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeToCallPolice, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ChancePlayingInitalTurnAnimSmallReact, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.ChancePlayingCustomBackAwayAnimSmallReact, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.ChancePlayingInitalTurnAnimBigReact, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.ChancePlayingCustomBackAwayAnimBigReact, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldFleeDistance, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldFleeVehicleDistance, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldFleeFilmingDistance, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.EvasionThreshold, PsoDataType.UInt, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.ClosePlayerSpeedupDistanceSquaredThreshold, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.ClosePlayerSpeedupTimeThreshold, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceFromPlayerToDeleteHurriedPed, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeUntilDeletionWhenHurrying, PsoDataType.Float, 76, 0, 0) ); case MetaName.CTaskShockingEventWatch__Tunables: return new PsoStructureInfo(MetaName.CTaskShockingEventWatch__Tunables, 0, 0, 40, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3193923873, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1236817557, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3056724293, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2758358422, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTargetAngularMovementForWatch, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ThresholdWatchAfterFace, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.ThresholdWatchStop, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceBetweenFilmingPeds, PsoDataType.Float, 28, 0, 0), new PsoStructureEntryInfo((MetaName)1440458015, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)334429677, PsoDataType.Float, 36, 0, 0) + new PsoStructureEntryInfo(MetaName.MinDistanceAwayForFilming, PsoDataType.Float, 36, 0, 0) ); case MetaName.CTaskShockingEventReact__Tunables: return new PsoStructureInfo(MetaName.CTaskShockingEventReact__Tunables, 0, 0, 48, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3607448121, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2265632345, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3891776628, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2301662345, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1003164741, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1213974814, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)160395732, PsoDataType.Float, 40, 0, 0) + new PsoStructureEntryInfo(MetaName.TurningTolerance, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.TurningRate, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.TurningEnergyUpperThreshold, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.TurningEnergyLowerThreshold, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenReactionIdlesMin, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenReactionIdlesMax, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.BlendoutPhase, PsoDataType.Float, 40, 0, 0) ); case MetaName.CTaskShockingEventBackAway__Tunables: return new PsoStructureInfo(MetaName.CTaskShockingEventBackAway__Tunables, 0, 0, 56, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1871838464, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3690289360, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3382384728, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)780063382, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)4112548279, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1858039250, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)2509346908, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2592101241, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)3402152282, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)3550098093, PsoDataType.Float, 52, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxHeadingAdjustmentRate, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHeadingAlignmentCosThreshold, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxHeadingAlignmentCosThreshold, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MoveNetworkBlendoutDuration, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultBackwardsProjectionRange, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.AxesFacingTolerance, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceForBackAway, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForBackAway, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxWptAngle, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.BlendOutPhase, PsoDataType.Float, 52, 0, 0) ); case MetaName.CTaskShockingEventReactToAircraft__Tunables: return new PsoStructureInfo(MetaName.CTaskShockingEventReactToAircraft__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3695837863, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)317231619, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.ThresholdWatch, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ThresholdRun, PsoDataType.Float, 20, 0, 0) ); case MetaName.CTaskShockingPoliceInvestigate__Tunables: return new PsoStructureInfo(MetaName.CTaskShockingPoliceInvestigate__Tunables, 0, 0, 40, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2347754539, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1440512567, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)162655462, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2782271258, PsoDataType.UInt, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2066926080, PsoDataType.UInt, 32, 0, 0) + new PsoStructureEntryInfo(MetaName.ExtraDistForGoto, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MoveBlendRatioForFarGoto, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistFromPlayerToDeleteOffscreen, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.DeleteOffscreenTimeMS_MIN, PsoDataType.UInt, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.DeleteOffscreenTimeMS_MAX, PsoDataType.UInt, 32, 0, 0) ); case MetaName.CTaskShockingEventStopAndStare__Tunables: return new PsoStructureInfo(MetaName.CTaskShockingEventStopAndStare__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)157002911, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.BringVehicleToHaltDistance, PsoDataType.Float, 16, 0, 0) ); case MetaName.CTaskShove__Tunables: return new PsoStructureInfo(MetaName.CTaskShove__Tunables, 0, 0, 48, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)67050499, PsoDataType.Structure, 16, 0, (MetaName)838054604), + new PsoStructureEntryInfo(MetaName.Rendering, PsoDataType.Structure, 16, 0, (MetaName)838054604), new PsoStructureEntryInfo(MetaName.MaxDistance, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1241644828, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)1978969151, PsoDataType.Float, 40, 0, 0) + new PsoStructureEntryInfo(MetaName.MinDot, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.RadiusForContact, PsoDataType.Float, 40, 0, 0) ); case (MetaName)838054604: return new PsoStructureInfo((MetaName)838054604, 0, 0, 16, new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)3061072832, PsoDataType.Bool, 9, 0, 0) + new PsoStructureEntryInfo(MetaName.Contact, PsoDataType.Bool, 9, 0, 0) ); case MetaName.CTaskShoved__Tunables: return new PsoStructureInfo(MetaName.CTaskShoved__Tunables, 0, 0, 16, @@ -11305,133 +11305,133 @@ namespace CodeWalker.GameFiles case MetaName.CVehicleScenarioManager__AttractorTuning__Tunables: return new PsoStructureInfo(MetaName.CVehicleScenarioManager__AttractorTuning__Tunables, 0, 0, 56, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)745911052, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)819069056, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1250203641, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)722704686, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)575445590, PsoDataType.SInt, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)3415237781, PsoDataType.UInt, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)884187023, PsoDataType.UInt, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)281170344, PsoDataType.UInt, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)2108114328, PsoDataType.UInt, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)3561917245, PsoDataType.UShort, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)865654234, PsoDataType.UShort, 54, 0, 0) + new PsoStructureEntryInfo(MetaName.ForwardDirectionThresholdCosSquared, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistToPathDefault, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistToVehicle, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistToVehicle, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.NumToUpdatePerFrame, PsoDataType.SInt, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeAfterAttractionMs, PsoDataType.UInt, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeAfterChainTestFailedMs, PsoDataType.UInt, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeAfterFailedConditionsMs, PsoDataType.UInt, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeAfterNoBoundsMs, PsoDataType.UInt, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.MinPassengersForAttraction, PsoDataType.UShort, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPassengersForAttraction, PsoDataType.UShort, 54, 0, 0) ); case MetaName.CTaskCoupleScenario__Tunables: return new PsoStructureInfo(MetaName.CTaskCoupleScenario__Tunables, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)810755963, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1791608761, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2300691636, PsoDataType.Float, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.ResumeDistSq, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.StopDistSq, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.TargetDistance, PsoDataType.Float, 24, 0, 0) ); case MetaName.CTaskCowerScenario__Tunables: return new PsoStructureInfo(MetaName.CTaskCowerScenario__Tunables, 0, 0, 64, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2722629246, PsoDataType.UInt, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)829574868, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1673427683, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)619528635, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1865528825, PsoDataType.UInt, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)3437799044, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)3668424542, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)1966243013, PsoDataType.UInt, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)263563417, PsoDataType.UInt, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)1944104863, PsoDataType.UInt, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)2271449308, PsoDataType.UInt, 56, 0, 0) + new PsoStructureEntryInfo(MetaName.EventDecayTimeMS, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ReturnToNormalDistanceSq, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.BackHeadingInterpRate, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.EventlessSwitchStateTimeRequirement, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.EventlessSwitchInactivityTimeRequirement, PsoDataType.UInt, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.EventlessSwitchDistanceRequirement, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistFromPlayerToDeleteCoweringForever, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.CoweringForeverDeleteOffscreenTimeMS_MIN, PsoDataType.UInt, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.CoweringForeverDeleteOffscreenTimeMS_MAX, PsoDataType.UInt, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.FlinchDecayTime, PsoDataType.UInt, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeBetweenFlinches, PsoDataType.UInt, 56, 0, 0) ); case MetaName.CTaskUseScenario__Tunables: return new PsoStructureInfo(MetaName.CTaskUseScenario__Tunables, 0, 0, 152, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)652219771, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3465127340, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)365892591, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)788433631, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)394374347, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1712423423, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)1532444703, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2055075186, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)4290867387, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)695930878, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)1136341997, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)2568949102, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)2442429563, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)884159106, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)851779527, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)5170829, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)643049118, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)2913322701, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)3638708710, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)3090913677, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)3609661010, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)4087190680, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)1822017225, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)1178169613, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)1596520127, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)3452202501, PsoDataType.Float, 116, 0, 0), - new PsoStructureEntryInfo((MetaName)3836158716, PsoDataType.Float, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)699708569, PsoDataType.Float, 124, 0, 0), - new PsoStructureEntryInfo((MetaName)790344800, PsoDataType.Float, 128, 0, 0), - new PsoStructureEntryInfo((MetaName)2090002900, PsoDataType.Float, 132, 0, 0), - new PsoStructureEntryInfo((MetaName)1666523442, PsoDataType.SInt, 136, 0, 0), - new PsoStructureEntryInfo((MetaName)471524408, PsoDataType.SInt, 140, 0, 0), - new PsoStructureEntryInfo((MetaName)2237139323, PsoDataType.SByte, 144, 0, 0) + new PsoStructureEntryInfo(MetaName.AdvanceUseTimeRandomMaxProportion, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.BreakAttachmentMoveSpeedThreshold, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.BreakAttachmentOrientationThreshold, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.ExitAttachmentMoveSpeedThreshold, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.RouteLengthThresholdForFinalApproach, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.ZThresholdForApproachOffset, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.DetachExitDefaultPhaseThreshold, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.FastExitDefaultPhaseThreshold, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.RouteLengthThresholdForApproachOffset, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.ExtraFleeDistance, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.FindPropInEnvironmentDist, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.MinRateToPlayCowerReaction, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRateToPlayCowerReaction, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDifferenceBetweenCowerReactionRates, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.ReactAndFleeBlendOutPhase, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.RegularExitDefaultPhaseThreshold, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeOfDayRandomnessHours, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeToLeaveMinBetweenAnybody, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeToLeaveRandomAmount, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeToLeaveRandomFraction, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.PavementFloodFillSearchRadius, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.DelayBetweenPavementFloodFillSearches, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.FleeMBRMin, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.FleeMBRMax, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.MinPathLengthForValidExit, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceNavmeshMayAdjustPath, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenChecksToLeaveCowering, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.SkipGotoXYDist, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo(MetaName.SkipGotoZDist, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.SkipGotoHeadingDeltaDegrees, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo(MetaName.MinExtraMoney, PsoDataType.SInt, 136, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxExtraMoney, PsoDataType.SInt, 140, 0, 0), + new PsoStructureEntryInfo(MetaName.UpdatesBeforeShiftingBounds, PsoDataType.SByte, 144, 0, 0) ); case MetaName.CTaskUseVehicleScenario__Tunables: return new PsoStructureInfo(MetaName.CTaskUseVehicleScenario__Tunables, 0, 0, 72, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)157002911, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2115224183, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2685821768, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2686150441, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2409655710, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)3935882297, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)370645093, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2931101691, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)3249924134, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)1118749782, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)1499169614, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)26476902, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)1252284298, PsoDataType.UShort, 64, 0, 0) + new PsoStructureEntryInfo(MetaName.BringVehicleToHaltDistance, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.IdleTimeRandomFactor, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.SlowDownDist, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.SlowDownSpeed, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.SwitchToStraightLineDist, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.TargetArriveDist, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.PlaneTargetArriveDist, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.HeliTargetArriveDist, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.BoatTargetArriveDist, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.PlaneTargetArriveDistTaxiOnGround, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.PlaneDrivingSubtaskArrivalDist, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.BoatMaxAvoidanceAngle, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSearchDistance, PsoDataType.UShort, 64, 0, 0) ); case MetaName.CTaskWanderingScenario__Tunables: return new PsoStructureInfo(MetaName.CTaskWanderingScenario__Tunables, 0, 0, 40, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1799405168, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1010415847, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)4287996365, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2212250161, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3384585290, PsoDataType.UInt, 32, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxTimeWaitingForBlockingArea, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.SwitchToNextPointDistWalking, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.SwitchToNextPointDistJogging, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.PreferNearWaterSurfaceArrivalRadius, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenBlockingAreaChecksMS, PsoDataType.UInt, 32, 0, 0) ); case MetaName.CTaskPoliceOrderResponse__Tunables: return new PsoStructureInfo(MetaName.CTaskPoliceOrderResponse__Tunables, 0, 0, 56, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2597134309, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)408114095, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1059555640, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)847675324, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3069250390, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)3640126549, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)3243012891, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeToWait, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSpeedForVehicleMovingSlowly, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSpeedForVehicleMovingQuickly, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBeforeOvertakeToMatchSpeedWhenPulledOver, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBeforeOvertakeToMatchSpeedWhenCruising, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.CheatPowerIncreaseForMatchSpeed, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.HashOrdering, PsoDataType.Float, 40, 0, 0), new PsoStructureEntryInfo((MetaName)683308669, PsoDataType.Float, 44, 0, 0), new PsoStructureEntryInfo((MetaName)527303977, PsoDataType.Float, 48, 0, 0) ); case MetaName.CTaskArrestPed__Tunables: return new PsoStructureInfo(MetaName.CTaskArrestPed__Tunables, 0, 0, 56, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3825720952, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)684815089, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1433360068, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)1359250131, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2654770325, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.AimDistance, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ArrestDistance, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.ArrestInVehicleDistance, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MoveToDistanceInVehicle, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.TargetDistanceFromVehicleEntry, PsoDataType.Float, 32, 0, 0), new PsoStructureEntryInfo((MetaName)1425198943, PsoDataType.Float, 36, 0, 0), new PsoStructureEntryInfo((MetaName)4218266421, PsoDataType.Float, 40, 0, 0), new PsoStructureEntryInfo((MetaName)305536610, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)605981827, PsoDataType.UInt, 48, 0, 0) + new PsoStructureEntryInfo(MetaName.RegainComet, PsoDataType.UInt, 48, 0, 0) ); case MetaName.CTaskSwatOrderResponse__Tunables: return new PsoStructureInfo(MetaName.CTaskSwatOrderResponse__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3243012891, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.HashOrdering, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo((MetaName)683308669, PsoDataType.Float, 20, 0, 0) ); case MetaName.CTaskHeliOrderResponse__Tunables: @@ -11447,667 +11447,667 @@ namespace CodeWalker.GameFiles case MetaName.CTaskWitness__Tunables: return new PsoStructureInfo(MetaName.CTaskWitness__Tunables, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)897487244, PsoDataType.UInt, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1736715102, PsoDataType.UInt, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3450986312, PsoDataType.UInt, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2062768994, PsoDataType.UInt, 28, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxTimeMoveNearCrimeMs, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeMoveToLawMs, PsoDataType.UInt, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeSearchMs, PsoDataType.UInt, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeMoveToLawFailedPathfindingMs, PsoDataType.UInt, 28, 0, 0) ); case MetaName.CEventShocking__Tunables: return new PsoStructureInfo(MetaName.CEventShocking__Tunables, 0, 0, 224, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.LifeTime, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2272290579, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2651939713, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)17870529, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1284602455, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)760739523, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)2651403585, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2181133548, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)162073420, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2978098349, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)1287855842, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)199132405, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)3010798658, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)424721387, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)4262514281, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)3859810396, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)3939134595, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)273885309, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)1169941758, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)3084950400, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)1926295578, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)2306714989, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)4002374438, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)3928192642, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)3384130276, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)449694767, PsoDataType.Float, 116, 0, 0), - new PsoStructureEntryInfo((MetaName)946719330, PsoDataType.Float, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)2167383018, PsoDataType.Float, 124, 0, 0), - new PsoStructureEntryInfo((MetaName)1941376054, PsoDataType.Float, 128, 0, 0), - new PsoStructureEntryInfo((MetaName)1295611070, PsoDataType.Float, 132, 0, 0), - new PsoStructureEntryInfo((MetaName)2937486448, PsoDataType.Float, 136, 0, 0), - new PsoStructureEntryInfo((MetaName)3170606833, PsoDataType.Float, 140, 0, 0), - new PsoStructureEntryInfo((MetaName)1805287691, PsoDataType.Float, 144, 0, 0), - new PsoStructureEntryInfo((MetaName)564420500, PsoDataType.Float, 148, 0, 0), - new PsoStructureEntryInfo((MetaName)2906908712, PsoDataType.Float, 152, 0, 0), - new PsoStructureEntryInfo((MetaName)735659884, PsoDataType.Float, 156, 0, 0), - new PsoStructureEntryInfo((MetaName)143794235, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)2597491379, PsoDataType.Float, 164, 0, 0), - new PsoStructureEntryInfo((MetaName)1799800134, PsoDataType.UInt, 168, 0, 0), - new PsoStructureEntryInfo((MetaName)1621558076, PsoDataType.UInt, 172, 0, 0), - new PsoStructureEntryInfo((MetaName)1884622848, PsoDataType.String, 176, 7, 0), - new PsoStructureEntryInfo((MetaName)1372129940, PsoDataType.String, 180, 7, 0), + new PsoStructureEntryInfo(MetaName.VisualReactionRange, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.CopInVehicleVisualReactionRange, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.AudioReactionRange, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.AIOnlyReactionRangeScaleFactor, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.DuckAndCoverCanTriggerForPlayerTime, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.GotoWatchRange, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.StopWatchDistance, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.HurryAwayMBRChangeDelay, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.HurryAwayMBRChangeRange, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.HurryAwayInitialMBR, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.HurryAwayMoveBlendRatioWhenFar, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.HurryAwayMoveBlendRatioWhenNear, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.MinWatchTime, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxWatchTime, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.MinWatchTimeHurryAway, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxWatchTimeHurryAway, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.ChanceOfWatchRatherThanHurryAway, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.MinPhoneFilmTime, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPhoneFilmTime, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.MinPhoneFilmTimeHurryAway, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPhoneFilmTimeHurryAway, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.ChanceOfFilmingEventOnPhoneIfWatching, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.PedGenBlockedAreaMinRadius, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.WanderInfluenceSphereRadius, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.TriggerAmbientReactionChances, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceForAmbientReaction, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForAmbientReaction, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo(MetaName.AmbientEventLifetime, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeForAmbientReaction, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeForAmbientReaction, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo(MetaName.PedFearImpact, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo(MetaName.ShockingSpeechChance, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDelayTimer, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDelayTimer, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.DuplicateDistanceCheck, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeForAudioReaction, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.DistanceToUseGunfireReactAndFleeAnimations, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo(MetaName.PedGenBlockingAreaLifeTimeMS, PsoDataType.UInt, 168, 0, 0), + new PsoStructureEntryInfo(MetaName.DuplicateTimeCheck, PsoDataType.UInt, 172, 0, 0), + new PsoStructureEntryInfo(MetaName.ShockingSpeechHash, PsoDataType.String, 176, 7, 0), + new PsoStructureEntryInfo(MetaName.ShockingFilmSpeechHash, PsoDataType.String, 180, 7, 0), new PsoStructureEntryInfo(MetaName.Priority, PsoDataType.SInt, 184, 0, 0), - new PsoStructureEntryInfo((MetaName)1507389089, PsoDataType.Enum, 188, 0, (MetaName)1507389089), - new PsoStructureEntryInfo((MetaName)3664766217, PsoDataType.Bool, 192, 0, 0), - new PsoStructureEntryInfo((MetaName)1030055336, PsoDataType.Bool, 193, 0, 0), - new PsoStructureEntryInfo((MetaName)3215420778, PsoDataType.Bool, 194, 0, 0), - new PsoStructureEntryInfo((MetaName)387027865, PsoDataType.Bool, 195, 0, 0), - new PsoStructureEntryInfo((MetaName)1307368391, PsoDataType.Bool, 196, 0, 0), - new PsoStructureEntryInfo((MetaName)3611561302, PsoDataType.Bool, 197, 0, 0), - new PsoStructureEntryInfo((MetaName)1434985449, PsoDataType.Bool, 198, 0, 0), - new PsoStructureEntryInfo((MetaName)1461520922, PsoDataType.Bool, 199, 0, 0), - new PsoStructureEntryInfo((MetaName)3973997152, PsoDataType.Bool, 200, 0, 0), - new PsoStructureEntryInfo((MetaName)144280219, PsoDataType.Bool, 201, 0, 0), - new PsoStructureEntryInfo((MetaName)4035148525, PsoDataType.Bool, 202, 0, 0), + new PsoStructureEntryInfo(MetaName.AmbientEventType, PsoDataType.Enum, 188, 0, MetaName.AmbientEventType), + new PsoStructureEntryInfo(MetaName.AddPedGenBlockedArea, PsoDataType.Bool, 192, 0, 0), + new PsoStructureEntryInfo(MetaName.CausesVehicleAvoidance, PsoDataType.Bool, 193, 0, 0), + new PsoStructureEntryInfo(MetaName.AllowIgnoreAsLowPriority, PsoDataType.Bool, 194, 0, 0), + new PsoStructureEntryInfo(MetaName.DebugDisplayAlwaysUseEventPosition, PsoDataType.Bool, 195, 0, 0), + new PsoStructureEntryInfo(MetaName.DebugDisplayListPlayerInfo, PsoDataType.Bool, 196, 0, 0), + new PsoStructureEntryInfo(MetaName.HurryAwayWatchFirst, PsoDataType.Bool, 197, 0, 0), + new PsoStructureEntryInfo(MetaName.MobileChatScenarioMayAbort, PsoDataType.Bool, 198, 0, 0), + new PsoStructureEntryInfo(MetaName.WatchSayFightCheers, PsoDataType.Bool, 199, 0, 0), + new PsoStructureEntryInfo(MetaName.WatchSayShocked, PsoDataType.Bool, 200, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleSlowDown, PsoDataType.Bool, 201, 0, 0), + new PsoStructureEntryInfo(MetaName.IgnoreIfSensingPedIsOtherEntity, PsoDataType.Bool, 202, 0, 0), new PsoStructureEntryInfo(MetaName.IgnorePavementChecks, PsoDataType.Bool, 203, 0, 0), - new PsoStructureEntryInfo((MetaName)3118021097, PsoDataType.Bool, 204, 0, 0), - new PsoStructureEntryInfo((MetaName)3828609944, PsoDataType.Enum, 208, 0, (MetaName)1809724872), - new PsoStructureEntryInfo((MetaName)2309582193, PsoDataType.Bool, 212, 0, 0), - new PsoStructureEntryInfo((MetaName)1542742362, PsoDataType.Bool, 213, 0, 0), - new PsoStructureEntryInfo((MetaName)2924272020, PsoDataType.Bool, 214, 0, 0), - new PsoStructureEntryInfo((MetaName)3833488932, PsoDataType.Bool, 215, 0, 0), - new PsoStructureEntryInfo((MetaName)2404066730, PsoDataType.Bool, 216, 0, 0), - new PsoStructureEntryInfo((MetaName)409978509, PsoDataType.Bool, 217, 0, 0) + new PsoStructureEntryInfo(MetaName.AllowScanningEvenIfPreviouslyReacted, PsoDataType.Bool, 204, 0, 0), + new PsoStructureEntryInfo(MetaName.ReactionMode, PsoDataType.Enum, 208, 0, (MetaName)1809724872), + new PsoStructureEntryInfo(MetaName.StopResponseWhenExpired, PsoDataType.Bool, 212, 0, 0), + new PsoStructureEntryInfo(MetaName.FleeIfApproachedByOtherEntity, PsoDataType.Bool, 213, 0, 0), + new PsoStructureEntryInfo(MetaName.FleeIfApproachedBySourceEntity, PsoDataType.Bool, 214, 0, 0), + new PsoStructureEntryInfo(MetaName.CanCallPolice, PsoDataType.Bool, 215, 0, 0), + new PsoStructureEntryInfo(MetaName.IgnoreFovForHeadIk, PsoDataType.Bool, 216, 0, 0), + new PsoStructureEntryInfo(MetaName.ReactToOtherEntity, PsoDataType.Bool, 217, 0, 0) ); case MetaName.CSituationalClipSetStreamer__Tunables: return new PsoStructureInfo(MetaName.CSituationalClipSetStreamer__Tunables, 0, 0, 88, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)394023184, PsoDataType.Structure, 16, 0, (MetaName)2341712397), - new PsoStructureEntryInfo((MetaName)603736164, PsoDataType.Structure, 48, 0, (MetaName)178027873) + new PsoStructureEntryInfo(MetaName.Avoids, PsoDataType.Structure, 16, 0, (MetaName)2341712397), + new PsoStructureEntryInfo(MetaName.FleeReactions, PsoDataType.Structure, 48, 0, MetaName.iVectorDefault) ); case (MetaName)2341712397: return new PsoStructureInfo((MetaName)2341712397, 0, 0, 32, new PsoStructureEntryInfo(MetaName.ClipSet, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2787113182, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo(MetaName.ClipSetForCasual, PsoDataType.String, 12, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1095110195), new PsoStructureEntryInfo(MetaName.Variations, PsoDataType.Array, 16, 0, (MetaName)2) ); - case (MetaName)178027873: - return new PsoStructureInfo((MetaName)178027873, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)2755047550, PsoDataType.String, 8, 7, 0), + case MetaName.iVectorDefault: + return new PsoStructureInfo(MetaName.iVectorDefault, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.ClipSetForIntro, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo((MetaName)3696584734, PsoDataType.String, 12, 7, 0), new PsoStructureEntryInfo((MetaName)4027846555, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)4017342285, PsoDataType.String, 20, 7, 0), + new PsoStructureEntryInfo(MetaName.ClipSetForRuns, PsoDataType.String, 20, 7, 0), new PsoStructureEntryInfo((MetaName)3482724306, PsoDataType.String, 24, 7, 0), new PsoStructureEntryInfo((MetaName)551602790, PsoDataType.String, 28, 7, 0), - new PsoStructureEntryInfo((MetaName)2838084369, PsoDataType.Float, 32, 0, 0) + new PsoStructureEntryInfo(MetaName.MinTimeInCombatToNotStreamIn, PsoDataType.Float, 32, 0, 0) ); case (MetaName)1095110195: return new PsoStructureInfo((MetaName)1095110195, 0, 0, 24, new PsoStructureEntryInfo(MetaName.ClipSet, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3169257000, PsoDataType.Bool, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.IsCasual, PsoDataType.Bool, 12, 0, 0), new PsoStructureEntryInfo(MetaName.Chances, PsoDataType.Float, 16, 0, 0) ); case MetaName.CEventFootStepHeard__Tunables: return new PsoStructureInfo(MetaName.CEventFootStepHeard__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)564420500, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2906908712, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.MinDelayTimer, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDelayTimer, PsoDataType.Float, 20, 0, 0) ); case MetaName.CTacticalAnalysisNavMeshPoints__Tunables: return new PsoStructureInfo(MetaName.CTacticalAnalysisNavMeshPoints__Tunables, 0, 0, 72, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.MinDistance, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo(MetaName.MaxDistance, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2084497360, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)765310, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)967712511, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2714855430, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)861953935, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2410167662, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)579362303, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)72559400, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)2086611921, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)1731877118, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)1638764838, PsoDataType.SInt, 64, 0, 0) + new PsoStructureEntryInfo(MetaName.BufferDistance, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeBetweenAttemptsToFindNewPosition, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeBetweenLineOfSightTests, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeBetweenAttemptsToFindNearby, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSearchRadiusForNavMesh, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.RadiusForFindNearby, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceBetweenPositionsWithClearLineOfSight, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceBetweenPositionsWithoutClearLineOfSightInExteriors, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceBetweenPositionsWithoutClearLineOfSightInInteriors, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxXYDistanceForNewPosition, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxNearbyToFindPerFrame, PsoDataType.SInt, 64, 0, 0) ); case MetaName.CTacticalAnalysisCoverPointSearch__Tunables: return new PsoStructureInfo(MetaName.CTacticalAnalysisCoverPointSearch__Tunables, 0, 0, 56, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3333387022, PsoDataType.Structure, 16, 0, (MetaName)850484111), - new PsoStructureEntryInfo((MetaName)1815040418, PsoDataType.SInt, 48, 0, 0) + new PsoStructureEntryInfo(MetaName.Scoring, PsoDataType.Structure, 16, 0, (MetaName)850484111), + new PsoStructureEntryInfo(MetaName.ScoreCalculationsPerFrame, PsoDataType.SInt, 48, 0, 0) ); case (MetaName)850484111: return new PsoStructureInfo((MetaName)850484111, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)1339021909, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1420062864, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)2637460797, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)4180445694, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1883452103, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2980335366, PsoDataType.Float, 28, 0, 0) + new PsoStructureEntryInfo(MetaName.Occupied, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.Scripted, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.PointOnMap, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceToBeConsideredOptimal, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceToBeConsideredOptimal, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.Optimal, PsoDataType.Float, 28, 0, 0) ); case MetaName.CTacticalAnalysisCoverPoints__Tunables: return new PsoStructureInfo(MetaName.CTacticalAnalysisCoverPoints__Tunables, 0, 0, 56, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)4233283909, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)110388555, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2124766118, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2973796969, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)967712511, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2714855430, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)1814559575, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2410167662, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)1638764838, PsoDataType.SInt, 48, 0, 0) + new PsoStructureEntryInfo(MetaName.MinDistanceMovedToStartSearch, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeBetweenSearches, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceForSearch, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForSearch, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeBetweenLineOfSightTests, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeBetweenAttemptsToFindNearby, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeBetweenStatusUpdates, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.RadiusForFindNearby, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxNearbyToFindPerFrame, PsoDataType.SInt, 48, 0, 0) ); case MetaName.CTacticalAnalysis__Tunables: return new PsoStructureInfo(MetaName.CTacticalAnalysis__Tunables, 0, 0, 80, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1572599387, PsoDataType.Structure, 16, 0, (MetaName)1310298123), - new PsoStructureEntryInfo((MetaName)67050499, PsoDataType.Structure, 40, 0, (MetaName)1230349399), - new PsoStructureEntryInfo((MetaName)3555945363, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)3815175242, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)1570040321, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.BadRoute, PsoDataType.Structure, 16, 0, (MetaName)1310298123), + new PsoStructureEntryInfo(MetaName.Rendering, PsoDataType.Structure, 40, 0, (MetaName)1230349399), + new PsoStructureEntryInfo(MetaName.MaxSpeedToActivate, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSpeedToDeactivate, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeWithNoReferences, PsoDataType.Float, 72, 0, 0), new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 76, 0, 0) ); case (MetaName)1310298123: return new PsoStructureInfo((MetaName)1310298123, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)1083242382, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)3390301810, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)688870759, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1564203967, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.ValueForUnableToFind, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ValueForTooCloseToTarget, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForTaint, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.DecayRate, PsoDataType.Float, 20, 0, 0) ); case (MetaName)1230349399: return new PsoStructureInfo((MetaName)1230349399, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)3053199956, PsoDataType.Bool, 9, 0, 0), - new PsoStructureEntryInfo((MetaName)2288844751, PsoDataType.Bool, 10, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverPoints, PsoDataType.Bool, 9, 0, 0), + new PsoStructureEntryInfo(MetaName.NavMeshPoints, PsoDataType.Bool, 10, 0, 0), new PsoStructureEntryInfo(MetaName.Position, PsoDataType.Bool, 11, 0, 0), - new PsoStructureEntryInfo((MetaName)682590761, PsoDataType.Bool, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)743861760, PsoDataType.Bool, 13, 0, 0), - new PsoStructureEntryInfo((MetaName)4030133267, PsoDataType.Bool, 14, 0, 0), - new PsoStructureEntryInfo((MetaName)3709090817, PsoDataType.Bool, 15, 0, 0), - new PsoStructureEntryInfo((MetaName)3663294436, PsoDataType.Bool, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3702072617, PsoDataType.Bool, 17, 0, 0), - new PsoStructureEntryInfo((MetaName)728351840, PsoDataType.Bool, 18, 0, 0) + new PsoStructureEntryInfo(MetaName.LineOfSightStatus, PsoDataType.Bool, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.ArcStatus, PsoDataType.Bool, 13, 0, 0), + new PsoStructureEntryInfo(MetaName.Reserved, PsoDataType.Bool, 14, 0, 0), + new PsoStructureEntryInfo(MetaName.Nearby, PsoDataType.Bool, 15, 0, 0), + new PsoStructureEntryInfo(MetaName.BadRouteValue, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.Reservations, PsoDataType.Bool, 17, 0, 0), + new PsoStructureEntryInfo(MetaName.LineOfSightTests, PsoDataType.Bool, 18, 0, 0) ); case MetaName.CTaskVehicleApproach__Tunables: return new PsoStructureInfo(MetaName.CTaskVehicleApproach__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1354574680, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxDistanceAroundClosestRoadNode, PsoDataType.Float, 16, 0, 0) ); case MetaName.CTaskVehicleBlock__Tunables: return new PsoStructureInfo(MetaName.CTaskVehicleBlock__Tunables, 0, 0, 80, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3093267843, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3739118103, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3139639651, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2229910851, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3717085729, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1577260290, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)4094305061, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)1212941547, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)737095977, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)1917200737, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)935837869, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)67415689, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)2713817702, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)3682638304, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)1195737890, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)2961114452, PsoDataType.Float, 76, 0, 0) + new PsoStructureEntryInfo(MetaName.DistanceToCapSpeed, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.DistanceToStartCappingSpeed, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.AdditionalSpeedCap, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceFromTargetToForceStraightLineMode, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeToLookAhead, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceToLookAhead, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDotTargetMovingTowardsUsToStartBackAndForth, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDotTargetMovingTowardsOurSideToStartBackAndForth, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDotTargetMovingTowardsUsToContinueBackAndForth, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDotTargetMovingTowardsUsToStartBrakeInFront, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDotMovingTowardsTargetToStartBrakeInFront, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDotTargetMovingTowardsUsToContinueBrakeInFront, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDotMovingTowardsTargetToContinueBrakeInFront, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDotTargetMovingTowardsUsToStartCruiseInFront, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDotMovingAwayFromTargetToStartCruiseInFront, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDotTargetMovingTowardsUsToContinueCruiseInFront, PsoDataType.Float, 76, 0, 0) ); case MetaName.CTaskVehicleBlockCruiseInFront__Tunables: return new PsoStructureInfo(MetaName.CTaskVehicleBlockCruiseInFront__Tunables, 0, 0, 128, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1934123857, PsoDataType.Structure, 16, 0, (MetaName)3985328803), - new PsoStructureEntryInfo((MetaName)67050499, PsoDataType.Structure, 56, 0, (MetaName)999261493), - new PsoStructureEntryInfo((MetaName)474269749, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)3717085729, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)1577260290, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)2841547079, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)4284975454, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)2085906895, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)2016261853, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)2690108566, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)2913237777, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)1514235773, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)2070026726, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)2635294172, PsoDataType.Float, 116, 0, 0), - new PsoStructureEntryInfo((MetaName)4219085548, PsoDataType.Float, 120, 0, 0) + new PsoStructureEntryInfo(MetaName.Probes, PsoDataType.Structure, 16, 0, (MetaName)3985328803), + new PsoStructureEntryInfo(MetaName.Rendering, PsoDataType.Structure, 56, 0, (MetaName)999261493), + new PsoStructureEntryInfo(MetaName.StraightLineDistance, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeToLookAhead, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceToLookAhead, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDotForSlowdown, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceForSlowdown, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForSlowdown, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.CruiseSpeedMultiplierForMinSlowdown, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.CruiseSpeedMultiplierForMaxSlowdown, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.IdealDistance, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceToAdjustSpeed, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceToAdjustSpeed, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.MinCruiseSpeedMultiplier, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxCruiseSpeedMultiplier, PsoDataType.Float, 120, 0, 0) ); case (MetaName)3985328803: return new PsoStructureInfo((MetaName)3985328803, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)2519270732, PsoDataType.Structure, 8, 0, (MetaName)1883924946) + new PsoStructureEntryInfo(MetaName.Collision, PsoDataType.Structure, 8, 0, (MetaName)1883924946) ); case (MetaName)1883924946: return new PsoStructureInfo((MetaName)1883924946, 0, 0, 32, new PsoStructureEntryInfo((MetaName)2241187664, PsoDataType.Float, 8, 0, 0), new PsoStructureEntryInfo((MetaName)3879165256, PsoDataType.Float, 12, 0, 0), new PsoStructureEntryInfo((MetaName)4154217054, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1352021757, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)977032494, PsoDataType.Float, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.MinLength, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxLength, PsoDataType.Float, 24, 0, 0) ); case (MetaName)999261493: return new PsoStructureInfo((MetaName)999261493, 0, 0, 16, new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)217069262, PsoDataType.Bool, 9, 0, 0), - new PsoStructureEntryInfo((MetaName)3041273548, PsoDataType.Bool, 10, 0, 0), + new PsoStructureEntryInfo(MetaName.Probe, PsoDataType.Bool, 9, 0, 0), + new PsoStructureEntryInfo(MetaName.ProbeResults, PsoDataType.Bool, 10, 0, 0), new PsoStructureEntryInfo((MetaName)2932215080, PsoDataType.Bool, 11, 0, 0), new PsoStructureEntryInfo((MetaName)1537468920, PsoDataType.Bool, 12, 0, 0) ); case MetaName.CTaskVehicleBlockBrakeInFront__Tunables: return new PsoStructureInfo(MetaName.CTaskVehicleBlockBrakeInFront__Tunables, 0, 0, 64, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1751757949, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1340388073, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1369613048, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3279921996, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)110293208, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2361783730, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)1786731261, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)1580566536, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)1823449253, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)3954141229, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)3775809407, PsoDataType.Float, 56, 0, 0) + new PsoStructureEntryInfo(MetaName.TimeAheadForGetInPosition, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MinOffsetForGetInPosition, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeAheadForBrake, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeAheadForBrakeOnWideRoads, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeForBrake, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.FutureDistanceForMinSteerAngle, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.FutureDistanceForMaxSteerAngle, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSpeedToUseHandBrake, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDotToClampCruiseSpeed, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceToClampCruiseSpeed, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxCruiseSpeedWhenClamped, PsoDataType.Float, 56, 0, 0) ); case MetaName.CTaskVehicleBlockBackAndForth__Tunables: return new PsoStructureInfo(MetaName.CTaskVehicleBlockBackAndForth__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2515377448, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.ThrottleMultiplier, PsoDataType.Float, 16, 0, 0) ); case MetaName.CTaskVehicleFlee__Tunables: return new PsoStructureInfo(MetaName.CTaskVehicleFlee__Tunables, 0, 0, 48, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1825428191, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2981979817, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1907731990, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2288728578, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1095332633, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)3303023161, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)3189387953, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)3164535731, PsoDataType.Float, 44, 0, 0) + new PsoStructureEntryInfo(MetaName.ChancesForSwerve, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSpeedForSwerve, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeToSwerve, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeToSwerve, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ChancesForHesitate, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSpeedForHesitate, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeToHesitate, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeToHesitate, PsoDataType.Float, 44, 0, 0) ); case MetaName.CTaskVehicleCruiseBoat__Tunables: return new PsoStructureInfo(MetaName.CTaskVehicleCruiseBoat__Tunables, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)330577879, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3620765866, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2679850916, PsoDataType.Float, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.fTimeToPickNewPoint, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.fDistToPickNewPoint, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.fDistSearch, PsoDataType.Float, 24, 0, 0) ); case MetaName.CTaskVehicleDeadDriver__Tunables: return new PsoStructureInfo(MetaName.CTaskVehicleDeadDriver__Tunables, 0, 0, 64, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3588251070, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3605734753, PsoDataType.Enum, 20, 0, (MetaName)888350649), - new PsoStructureEntryInfo((MetaName)168285857, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3758934792, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1718221861, PsoDataType.Enum, 32, 0, (MetaName)2055586340), - new PsoStructureEntryInfo((MetaName)1568208081, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)64513465, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2512256335, PsoDataType.Enum, 44, 0, (MetaName)3374036042), - new PsoStructureEntryInfo((MetaName)3259827294, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)1676250682, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)1151983218, PsoDataType.Enum, 56, 0, (MetaName)4001255574) + new PsoStructureEntryInfo(MetaName.SwerveTime, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.SteerAngleControl, PsoDataType.Enum, 20, 0, (MetaName)888350649), + new PsoStructureEntryInfo(MetaName.MinSteerAngle, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSteerAngle, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ThrottleControl, PsoDataType.Enum, 32, 0, (MetaName)2055586340), + new PsoStructureEntryInfo(MetaName.MinThrottle, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxThrottle, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.BrakeControl, PsoDataType.Enum, 44, 0, (MetaName)3374036042), + new PsoStructureEntryInfo(MetaName.MinBrake, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxBrake, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.HandBrakeControl, PsoDataType.Enum, 56, 0, (MetaName)4001255574) ); case MetaName.CTaskVehicleFleeBoat__Tunables: return new PsoStructureInfo(MetaName.CTaskVehicleFleeBoat__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)191817975, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.FleeDistance, PsoDataType.Float, 16, 0, 0) ); case MetaName.CTaskVehicleCrash__Tunables: return new PsoStructureInfo(MetaName.CTaskVehicleCrash__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2743225815, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.MinSpeedForWreck, PsoDataType.Float, 16, 0, 0) ); case MetaName.CTaskVehicleGoToPointWithAvoidanceAutomobile__Tunables: return new PsoStructureInfo(MetaName.CTaskVehicleGoToPointWithAvoidanceAutomobile__Tunables, 0, 0, 104, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)10772112, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3101610967, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3640450256, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2435522850, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)94249946, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)3105879189, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)315595788, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)252789847, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)724928304, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)1592953719, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)1319056930, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)3043121072, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)2493712752, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)1721238833, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)44796921, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)462717652, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)508750981, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)2304242044, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)3887812374, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)4090325919, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)2371258779, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)1016024123, PsoDataType.Float, 100, 0, 0) + new PsoStructureEntryInfo(MetaName.TailgateDistanceMax, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.TailgateIdealDistanceMin, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.TailgateIdealDistanceMax, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.TailgateSpeedMultiplierMin, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.TailgateSpeedMultiplierMax, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.TailgateVelocityMin, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.ChanceOfPedSeeingCarFromBehind, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSpeedForAvoid, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceForAvoid, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSpeedForAvoid, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForAvoid, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceForAvoidDirected, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSpeedForAvoidDirected, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceForAvoidDirected, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSpeedForAvoidDirected, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAbsDotForAvoidDirected, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSpeedForBrace, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSpeedForDive, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeToConsiderDangerousDriving, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.MultiplierForDangerousDriving, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceToSideOnPavement, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceToSideOnPavement, PsoDataType.Float, 100, 0, 0) ); case MetaName.CTaskVehicleGoToBoat__Tunables: return new PsoStructureInfo(MetaName.CTaskVehicleGoToBoat__Tunables, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3943951078, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)157944410, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1396210696, PsoDataType.Float, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.SlowdownDistance, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.RouteArrivalDistance, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.RouteLookAheadDistance, PsoDataType.Float, 24, 0, 0) ); case MetaName.CTaskVehicleGoToHelicopter__Tunables: return new PsoStructureInfo(MetaName.CTaskVehicleGoToHelicopter__Tunables, 0, 0, 152, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2171885531, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3454970252, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)139171723, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2384591971, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2222663190, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)814841404, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)664693842, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)922081581, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)1366920760, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)3266080932, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)2573768812, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)974150069, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)528950431, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)4280868953, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)3367104276, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)369724672, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)2043681017, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)1412479638, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)1518108829, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)3036720225, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)1623304217, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)1597259961, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)3551843612, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.slowDistance, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.maxCruiseSpeed, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.maxPitchRoll, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.maxThrottle, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.leanKp, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.leanKi, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.leanKd, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.yawKp, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.yawKi, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.yawKd, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.throttleKp, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.throttleKi, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.throttleKd, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.whiskerForwardTestDistance, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.whiskerForwardSpeedScale, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.whiskerLateralTestDistance, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.whiskerVerticalTestDistance, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.whiskerTestAngle, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.avoidHeadingChangeSpeed, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.avoidHeadingJump, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.avoidPitchChangeSpeed, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.avoidPitchJump, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.avoidLockDuration, PsoDataType.Float, 104, 0, 0), new PsoStructureEntryInfo((MetaName)2436197334, PsoDataType.Float, 108, 0, 0), new PsoStructureEntryInfo((MetaName)1438517312, PsoDataType.Float, 112, 0, 0), new PsoStructureEntryInfo((MetaName)444775360, PsoDataType.Float, 116, 0, 0), new PsoStructureEntryInfo((MetaName)3623227512, PsoDataType.Float, 120, 0, 0), new PsoStructureEntryInfo((MetaName)3009403254, PsoDataType.Float, 124, 0, 0), - new PsoStructureEntryInfo((MetaName)1335540990, PsoDataType.SInt, 128, 0, 0), - new PsoStructureEntryInfo((MetaName)892450737, PsoDataType.Float, 132, 0, 0), - new PsoStructureEntryInfo((MetaName)1504259891, PsoDataType.Float, 136, 0, 0), - new PsoStructureEntryInfo((MetaName)2393149687, PsoDataType.Float, 140, 0, 0), - new PsoStructureEntryInfo((MetaName)47710483, PsoDataType.UInt, 144, 0, 0) + new PsoStructureEntryInfo(MetaName.numHeightmapFutureSamples, PsoDataType.SInt, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.futureHeightmapSampleTime, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo(MetaName.DistanceXYToUseHeightMapAvoidance, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo(MetaName.TimesliceMinDistToTarget, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo(MetaName.TimesliceTimeAfterAvoidanceMs, PsoDataType.UInt, 144, 0, 0) ); case MetaName.CTaskVehicleGoToPlane__Tunables: return new PsoStructureInfo(MetaName.CTaskVehicleGoToPlane__Tunables, 0, 0, 112, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)54155191, PsoDataType.SInt, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2996388896, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3035684229, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)1673702936, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1731534963, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2986015914, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)502368761, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2791696823, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)4244700983, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2569057742, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)682642275, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)2384591971, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)922081581, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)1366920760, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)3266080932, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)2427028852, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)665138033, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)1584865556, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)3696891742, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)1158342846, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)2739053876, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)2573768812, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)974150069, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)528950431, PsoDataType.Float, 108, 0, 0) + new PsoStructureEntryInfo(MetaName.numFutureSamples, PsoDataType.SInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.futureSampleTime, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.maxDesiredAngleYawDegrees, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.maxDesiredAnglePitchDegrees, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.maxDesiredAngleRollDegrees, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.angleToTargetDegreesToNotUseMinRadius, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.minMinDistanceForRollComputation, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.maxMinDistanceForRollComputation, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.maxYaw, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.maxPitch, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.maxRoll, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.maxThrottle, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.yawKp, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.yawKi, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.yawKd, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.pitchKp, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.pitchKi, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.pitchKd, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.rollKp, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.rollKi, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.rollKd, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.throttleKp, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.throttleKi, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.throttleKd, PsoDataType.Float, 108, 0, 0) ); case MetaName.CTaskVehicleLandPlane__Tunables: return new PsoStructureInfo(MetaName.CTaskVehicleLandPlane__Tunables, 0, 0, 40, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)4110448569, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)4081532692, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3067654195, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)564764161, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3983307371, PsoDataType.Float, 32, 0, 0) + new PsoStructureEntryInfo(MetaName.SlowDownDistance, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeOnGroundToDrive, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.HeightToStartLanding, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.LandSlopeNoseUpMin, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.LandSlopeNoseUpMax, PsoDataType.Float, 32, 0, 0) ); case MetaName.CTaskVehicleMissionBase__Tunables: return new PsoStructureInfo(MetaName.CTaskVehicleMissionBase__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2478597497, PsoDataType.UInt, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.MinTimeToKeepEngineAndLightsOnWhileParked, PsoDataType.UInt, 16, 0, 0) ); case MetaName.CTaskVehicleParkNew__Tunables: return new PsoStructureInfo(MetaName.CTaskVehicleParkNew__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1316038287, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)4245532224, PsoDataType.UByte, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.ParkingSpaceBlockedWaitTimePerAttempt, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ParkingSpaceBlockedMaxAttempts, PsoDataType.UByte, 20, 0, 0) ); case MetaName.CTaskVehiclePlaneChase__Tunables: return new PsoStructureInfo(MetaName.CTaskVehiclePlaneChase__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1724998945, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSpeed, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo(MetaName.MaxSpeed, PsoDataType.Float, 20, 0, 0) ); case MetaName.CTaskVehiclePullAlongside__Tunables: return new PsoStructureInfo(MetaName.CTaskVehiclePullAlongside__Tunables, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3717085729, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1577260290, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2358940861, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)1143414935, PsoDataType.Float, 28, 0, 0) + new PsoStructureEntryInfo(MetaName.TimeToLookAhead, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceToLookAhead, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.OverlapSpeedMultiplier, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSpeedDifference, PsoDataType.Float, 28, 0, 0) ); case MetaName.CTaskVehiclePursue__Tunables: return new PsoStructureInfo(MetaName.CTaskVehiclePursue__Tunables, 0, 0, 120, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1925470428, PsoDataType.Structure, 16, 0, (MetaName)42267357), - new PsoStructureEntryInfo((MetaName)4083276309, PsoDataType.Structure, 40, 0, (MetaName)42267357), - new PsoStructureEntryInfo((MetaName)2632846246, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)3533260791, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)2025348338, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)1979699436, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)820982755, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)2246107998, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)3659936455, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)628879039, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)2850579408, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)1301007976, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)2789360544, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)2986369414, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)1150609584, PsoDataType.Float, 112, 0, 0) + new PsoStructureEntryInfo(MetaName.DriftX, PsoDataType.Structure, 16, 0, (MetaName)42267357), + new PsoStructureEntryInfo(MetaName.DriftY, PsoDataType.Structure, 40, 0, (MetaName)42267357), + new PsoStructureEntryInfo(MetaName.TimeToLookBehind, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceToLookBehind, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.SpeedDifferenceForMinDistanceToStartMatchingSpeed, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.SpeedDifferenceForMaxDistanceToStartMatchingSpeed, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceToStartMatchingSpeed, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceToStartMatchingSpeed, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.CruiseSpeedMultiplierForBackOff, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.DotToClampSpeedToMinimum, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.DotToClampSpeedToMaximum, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.SpeedForMinimumDot, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenLineOfSightChecks, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.DistanceForStraightLineModeAlways, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.DistanceForStraightLineModeIfLos, PsoDataType.Float, 112, 0, 0) ); case (MetaName)42267357: return new PsoStructureInfo((MetaName)42267357, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)2782043564, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)4282800535, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)1240074404, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1154906885, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.MinValueForCorrection, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxValueForCorrection, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MinRate, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRate, PsoDataType.Float, 20, 0, 0) ); case MetaName.CTaskVehicleRam__Tunables: return new PsoStructureInfo(MetaName.CTaskVehicleRam__Tunables, 0, 0, 40, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3890964100, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1492713734, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2075820886, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3537928320, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2134482011, PsoDataType.Float, 32, 0, 0) + new PsoStructureEntryInfo(MetaName.BackOffTimer, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MinBackOffDistance, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxBackOffDistance, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.CruiseSpeedMultiplierForMinBackOffDistance, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.CruiseSpeedMultiplierForMaxBackOffDistance, PsoDataType.Float, 32, 0, 0) ); case MetaName.CTaskVehicleShotTire__Tunables: return new PsoStructureInfo(MetaName.CTaskVehicleShotTire__Tunables, 0, 0, 40, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)4163863357, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1487496534, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)601372446, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)403672092, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2183062202, PsoDataType.Float, 32, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxTimeInSwerve, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSpeedInSwerve, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSpeedToApplyTorque, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDotToApplyTorque, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.TorqueMultiplier, PsoDataType.Float, 32, 0, 0) ); case MetaName.CTaskVehicleSpinOut__Tunables: return new PsoStructureInfo(MetaName.CTaskVehicleSpinOut__Tunables, 0, 0, 56, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3717085729, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1577260290, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3083236924, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2926405391, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)730064409, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1688870175, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)3250501977, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)992439102, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)514198685, PsoDataType.Float, 48, 0, 0) + new PsoStructureEntryInfo(MetaName.TimeToLookAhead, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceToLookAhead, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.BumperOverlapForMaxSpeed, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.BumperOverlapForMinSpeed, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.CatchUpSpeed, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.BumperOverlapToBeInPosition, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSidePaddingForTurn, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.TurnTime, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.InvMassScale, PsoDataType.Float, 48, 0, 0) ); case MetaName.CPrioritizedClipSetRequestManager__Tunables: return new PsoStructureInfo(MetaName.CPrioritizedClipSetRequestManager__Tunables, 0, 0, 40, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2797308174, PsoDataType.Bool, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2514516235, PsoDataType.Float2, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3956347885, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1337224709, PsoDataType.SInt, 32, 0, 0) + new PsoStructureEntryInfo(MetaName.RenderDebugDraw, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.vScroll, PsoDataType.Float2, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.fIndent, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxNumRequestsPerContext, PsoDataType.SInt, 32, 0, 0) ); case MetaName.CVehicleClipRequestHelper__Tunables: return new PsoStructureInfo(MetaName.CVehicleClipRequestHelper__Tunables, 0, 0, 56, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)868829697, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2354829088, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)475173943, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3216270742, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3089390809, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1000280571, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)2704081606, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)1599003681, PsoDataType.Bool, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)3950304880, PsoDataType.Bool, 45, 0, 0), - new PsoStructureEntryInfo((MetaName)3726126567, PsoDataType.Bool, 46, 0, 0), - new PsoStructureEntryInfo((MetaName)774087018, PsoDataType.Bool, 47, 0, 0), - new PsoStructureEntryInfo((MetaName)2305444416, PsoDataType.Bool, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)3147840041, PsoDataType.Bool, 49, 0, 0), - new PsoStructureEntryInfo((MetaName)4236803127, PsoDataType.Bool, 50, 0, 0), - new PsoStructureEntryInfo((MetaName)1924248769, PsoDataType.Bool, 51, 0, 0) + new PsoStructureEntryInfo(MetaName.MinDistanceToScanForNearbyVehicle, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceToScanForNearbyVehicle, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistUpdateFrequency, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistUpdateFrequency, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistPercentageToScaleScanArc, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistScanArc, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistScanArc, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableVehicleDependencies, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableStreamedVehicleAnimRequestHelper, PsoDataType.Bool, 45, 0, 0), + new PsoStructureEntryInfo(MetaName.EnableStreamedEntryAnims, PsoDataType.Bool, 46, 0, 0), + new PsoStructureEntryInfo(MetaName.EnableStreamedInVehicleAnims, PsoDataType.Bool, 47, 0, 0), + new PsoStructureEntryInfo(MetaName.EnableStreamedEntryVariationAnims, PsoDataType.Bool, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.StreamConnectedSeatAnims, PsoDataType.Bool, 49, 0, 0), + new PsoStructureEntryInfo(MetaName.StreamInVehicleAndEntryAnimsTogether, PsoDataType.Bool, 50, 0, 0), + new PsoStructureEntryInfo(MetaName.StreamEntryAndInVehicleAnimsTogether, PsoDataType.Bool, 51, 0, 0) ); case MetaName.CTaskInVehicleBasic__Tunables: return new PsoStructureInfo(MetaName.CTaskInVehicleBasic__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)156254164, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.fSecondsInAirBeforePassengerComment, PsoDataType.Float, 16, 0, 0) ); case MetaName.CTaskPlayerDrive__Tunables: return new PsoStructureInfo(MetaName.CTaskPlayerDrive__Tunables, 0, 0, 48, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2280670656, PsoDataType.UInt, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)324788932, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2089726799, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)897691679, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2863410559, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2485839112, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)3877124457, PsoDataType.Float, 40, 0, 0) + new PsoStructureEntryInfo(MetaName.StealthNoisePeriodMS, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.StealthSpeedThresholdLow, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.StealthSpeedThresholdHigh, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.StealthVehicleTypeFactorBicycles, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MinPlayerJumpOutSpeedBike, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MinPlayerJumpOutSpeedCar, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenAddingDangerousVehicleEvents, PsoDataType.Float, 40, 0, 0) ); case MetaName.CTaskCarReactToVehicleCollision__Tunables: return new PsoStructureInfo(MetaName.CTaskCarReactToVehicleCollision__Tunables, 0, 0, 64, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1251865784, PsoDataType.Structure, 16, 0, (MetaName)3933935552), - new PsoStructureEntryInfo((MetaName)2744941697, PsoDataType.Float, 56, 0, 0) + new PsoStructureEntryInfo(MetaName.SlowDown, PsoDataType.Structure, 16, 0, (MetaName)3933935552), + new PsoStructureEntryInfo(MetaName.MaxDamageToIgnore, PsoDataType.Float, 56, 0, 0) ); case (MetaName)3933935552: return new PsoStructureInfo((MetaName)3933935552, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)3649567479, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)512026668, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)2890274297, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)4171049765, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1871327732, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2395375846, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeToReact, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeToReact, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxCruiseSpeed, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ChancesToHonk, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.ChancesToHonkHeldDown, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.ChancesToFlipOff, PsoDataType.Float, 28, 0, 0), new PsoStructureEntryInfo(MetaName.MinTime, PsoDataType.Float, 32, 0, 0), new PsoStructureEntryInfo(MetaName.MaxTime, PsoDataType.Float, 36, 0, 0) ); case MetaName.CTaskEnterVehicle__Tunables: return new PsoStructureInfo(MetaName.CTaskEnterVehicle__Tunables, 0, 0, 408, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2341452292, PsoDataType.Bool, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)583417184, PsoDataType.Bool, 17, 0, 0), - new PsoStructureEntryInfo((MetaName)4238205678, PsoDataType.Bool, 18, 0, 0), - new PsoStructureEntryInfo((MetaName)1131247892, PsoDataType.Bool, 19, 0, 0), - new PsoStructureEntryInfo((MetaName)2336701139, PsoDataType.Bool, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)609083866, PsoDataType.Bool, 21, 0, 0), - new PsoStructureEntryInfo((MetaName)1336261201, PsoDataType.Bool, 22, 0, 0), - new PsoStructureEntryInfo((MetaName)454797365, PsoDataType.Bool, 23, 0, 0), - new PsoStructureEntryInfo((MetaName)3299231528, PsoDataType.Bool, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2101205108, PsoDataType.Bool, 25, 0, 0), - new PsoStructureEntryInfo((MetaName)2067979515, PsoDataType.Bool, 26, 0, 0), - new PsoStructureEntryInfo((MetaName)2377829258, PsoDataType.Bool, 27, 0, 0), + new PsoStructureEntryInfo(MetaName.UseCombatEntryForAiJack, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.EnableJackRateOverride, PsoDataType.Bool, 17, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableDoorHandleArmIk, PsoDataType.Bool, 18, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableBikeHandleArmIk, PsoDataType.Bool, 19, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableSeatBoneArmIk, PsoDataType.Bool, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableTagSyncIntoAlign, PsoDataType.Bool, 21, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableMoverFixups, PsoDataType.Bool, 22, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableBikePickPullUpOffsetScale, PsoDataType.Bool, 23, 0, 0), + new PsoStructureEntryInfo(MetaName.EnableNewBikeEntry, PsoDataType.Bool, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.ForcedDoorHandleArmIk, PsoDataType.Bool, 25, 0, 0), + new PsoStructureEntryInfo(MetaName.IgnoreRotationBlend, PsoDataType.Bool, 26, 0, 0), + new PsoStructureEntryInfo(MetaName.EnableBikePickUpAlign, PsoDataType.Bool, 27, 0, 0), new PsoStructureEntryInfo((MetaName)192421777, PsoDataType.Float, 28, 0, 0), new PsoStructureEntryInfo((MetaName)509809270, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)3899294511, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)1556614668, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)667864712, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)3475018274, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)1021030104, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)132682005, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)2541408088, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)2420294542, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)3006117682, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)3341844967, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)1493908582, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)428832696, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)3626807160, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)1828436652, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)3911832280, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)354147533, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)4195927131, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)2320755313, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)1933869525, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)58162742, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)1089127336, PsoDataType.Float, 116, 0, 0), - new PsoStructureEntryInfo((MetaName)2264946778, PsoDataType.Float, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)706443375, PsoDataType.Float, 124, 0, 0), - new PsoStructureEntryInfo((MetaName)3597820233, PsoDataType.Float, 128, 0, 0), - new PsoStructureEntryInfo((MetaName)2664369195, PsoDataType.Float, 132, 0, 0), - new PsoStructureEntryInfo((MetaName)3214386681, PsoDataType.Float, 136, 0, 0), - new PsoStructureEntryInfo((MetaName)3395959775, PsoDataType.Float, 140, 0, 0), - new PsoStructureEntryInfo((MetaName)4109701939, PsoDataType.Float, 144, 0, 0), - new PsoStructureEntryInfo((MetaName)149985112, PsoDataType.Float, 148, 0, 0), - new PsoStructureEntryInfo((MetaName)3699582686, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.BikePickUpAlignBlendDuration, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.GetInRate, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.MinMagForBikeToBeOnSide, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.DistanceToEvaluateDoors, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.NetworkBlendDuration, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.NetworkBlendDurationOpenDoorCombat, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.DoorRatioToConsiderDoorOpenSteps, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.DoorRatioToConsiderDoorOpen, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.DoorRatioToConsiderDoorOpenCombat, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.DoorRatioToConsiderDoorClosed, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.DistToEntryToAllowForcedActionMode, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.VaultDepth, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.VaultHorizClearance, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.VaultVertClearance, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.LeftPickUpTargetLerpPhaseStart, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.LeftPickUpTargetLerpPhaseEnd, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.LeftPullUpTargetLerpPhaseStart, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.LeftPullUpTargetLerpPhaseEnd, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.RightPickUpTargetLerpPhaseStart, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.RightPickUpTargetLerpPhaseEnd, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.RightPullUpTargetLerpPhaseStart, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.RightPullUpTargetLerpPhaseEnd, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.LeftPickUpTargetLerpPhaseStartBicycle, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo(MetaName.LeftPickUpTargetLerpPhaseEndBicycle, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.LeftPullUpTargetLerpPhaseStartBicycle, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo(MetaName.LeftPullUpTargetLerpPhaseEndBicycle, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo(MetaName.RightPickUpTargetLerpPhaseStartBicycle, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo(MetaName.RightPickUpTargetLerpPhaseEndBicycle, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo(MetaName.RightPullUpTargetLerpPhaseStartBicycle, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo(MetaName.RightPullUpTargetLerpPhaseEndBicycle, PsoDataType.Float, 152, 0, 0), new PsoStructureEntryInfo((MetaName)3408785399, PsoDataType.Float, 156, 0, 0), - new PsoStructureEntryInfo((MetaName)492953913, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)3831454313, PsoDataType.Float, 164, 0, 0), - new PsoStructureEntryInfo((MetaName)2387057259, PsoDataType.Float, 168, 0, 0), - new PsoStructureEntryInfo((MetaName)3555981726, PsoDataType.Float, 172, 0, 0), - new PsoStructureEntryInfo((MetaName)820682935, PsoDataType.Float, 176, 0, 0), - new PsoStructureEntryInfo((MetaName)1024103431, PsoDataType.Float, 180, 0, 0), - new PsoStructureEntryInfo((MetaName)4256000061, PsoDataType.Float, 184, 0, 0), - new PsoStructureEntryInfo((MetaName)356015597, PsoDataType.Float, 188, 0, 0), - new PsoStructureEntryInfo((MetaName)1607735267, PsoDataType.Float, 192, 0, 0), - new PsoStructureEntryInfo((MetaName)1506926002, PsoDataType.Float, 196, 0, 0), - new PsoStructureEntryInfo((MetaName)1172728662, PsoDataType.Float, 200, 0, 0), - new PsoStructureEntryInfo((MetaName)4222207562, PsoDataType.Float, 204, 0, 0), - new PsoStructureEntryInfo((MetaName)1484783860, PsoDataType.Float, 208, 0, 0), - new PsoStructureEntryInfo((MetaName)1118824342, PsoDataType.Float, 212, 0, 0), - new PsoStructureEntryInfo((MetaName)4028760366, PsoDataType.Float, 216, 0, 0), - new PsoStructureEntryInfo((MetaName)2427558104, PsoDataType.Float, 220, 0, 0), - new PsoStructureEntryInfo((MetaName)2206944099, PsoDataType.Float, 224, 0, 0), - new PsoStructureEntryInfo((MetaName)1348653070, PsoDataType.Float, 228, 0, 0), - new PsoStructureEntryInfo((MetaName)114247175, PsoDataType.Float, 232, 0, 0), - new PsoStructureEntryInfo((MetaName)3271021322, PsoDataType.Float, 236, 0, 0), - new PsoStructureEntryInfo((MetaName)2555911368, PsoDataType.Float, 240, 0, 0), - new PsoStructureEntryInfo((MetaName)3839836820, PsoDataType.Float, 244, 0, 0), - new PsoStructureEntryInfo((MetaName)2153531751, PsoDataType.Float, 248, 0, 0), - new PsoStructureEntryInfo((MetaName)1243230599, PsoDataType.Float, 252, 0, 0), - new PsoStructureEntryInfo((MetaName)3836837046, PsoDataType.Float, 256, 0, 0), - new PsoStructureEntryInfo((MetaName)3089447490, PsoDataType.Float, 260, 0, 0), - new PsoStructureEntryInfo((MetaName)3652074424, PsoDataType.Float, 264, 0, 0), - new PsoStructureEntryInfo((MetaName)910622893, PsoDataType.Float, 268, 0, 0), - new PsoStructureEntryInfo((MetaName)2172495855, PsoDataType.Bool, 272, 0, 0), - new PsoStructureEntryInfo((MetaName)1615640364, PsoDataType.Float, 276, 0, 0), - new PsoStructureEntryInfo((MetaName)754839673, PsoDataType.Float, 280, 0, 0), - new PsoStructureEntryInfo((MetaName)3439162962, PsoDataType.Float, 284, 0, 0), - new PsoStructureEntryInfo((MetaName)2050658669, PsoDataType.Float, 288, 0, 0), - new PsoStructureEntryInfo((MetaName)2525435888, PsoDataType.Float, 292, 0, 0), - new PsoStructureEntryInfo((MetaName)3760186281, PsoDataType.Float, 296, 0, 0), - new PsoStructureEntryInfo((MetaName)4219594699, PsoDataType.Float, 300, 0, 0), - new PsoStructureEntryInfo((MetaName)3663548072, PsoDataType.Float, 304, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSpeedToAbortOpenDoor, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSpeedToAbortOpenDoorCombat, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSpeedToAbortOpenDoorPlayer, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSpeedToRagdollOpenDoor, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSpeedToRagdollOpenDoorCombat, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSpeedToRagdollOpenDoorPlayer, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultJackRate, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo(MetaName.BikeEnterForce, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo(MetaName.BicycleEnterForce, PsoDataType.Float, 192, 0, 0), + new PsoStructureEntryInfo(MetaName.FastEnterExitRate, PsoDataType.Float, 196, 0, 0), + new PsoStructureEntryInfo(MetaName.TargetRearDoorOpenRatio, PsoDataType.Float, 200, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxOpenRatioForOpenDoorInitialOutside, PsoDataType.Float, 204, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxOpenRatioForOpenDoorOutside, PsoDataType.Float, 208, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxOscillationDisplacementOutside, PsoDataType.Float, 212, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxOpenRatioForOpenDoorInitialInside, PsoDataType.Float, 216, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxOpenRatioForOpenDoorInside, PsoDataType.Float, 220, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxOscillationDisplacementInside, PsoDataType.Float, 224, 0, 0), + new PsoStructureEntryInfo(MetaName.BikeEnterLeanAngleOvershootAmt, PsoDataType.Float, 228, 0, 0), + new PsoStructureEntryInfo(MetaName.BikeEnterLeanAngleOvershootRate, PsoDataType.Float, 232, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceToCheckEntryCollisionWhenIgnoring, PsoDataType.Float, 236, 0, 0), + new PsoStructureEntryInfo(MetaName.CombatEntryBlendDuration, PsoDataType.Float, 240, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceToReactToJackForGoToDoor, PsoDataType.Float, 244, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeStreamClipSetInBeforeWarpSP, PsoDataType.Float, 248, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeStreamClipSetInBeforeWarpMP, PsoDataType.Float, 252, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeStreamClipSetInBeforeSkippingCloseDoor, PsoDataType.Float, 256, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeStreamShuffleClipSetInBeforeWarp, PsoDataType.Float, 260, 0, 0), + new PsoStructureEntryInfo(MetaName.ClimbAlignTolerance, PsoDataType.Float, 264, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenDoorChecks, PsoDataType.Float, 268, 0, 0), + new PsoStructureEntryInfo(MetaName.UseSlowInOut, PsoDataType.Bool, 272, 0, 0), + new PsoStructureEntryInfo(MetaName.OpenDoorBlendDurationFromNormalAlign, PsoDataType.Float, 276, 0, 0), + new PsoStructureEntryInfo(MetaName.OpenDoorBlendDurationFromOnVehicleAlign, PsoDataType.Float, 280, 0, 0), + new PsoStructureEntryInfo(MetaName.OpenDoorToJackBlendDuration, PsoDataType.Float, 284, 0, 0), + new PsoStructureEntryInfo(MetaName.GroupMemberWaitMinTime, PsoDataType.Float, 288, 0, 0), + new PsoStructureEntryInfo(MetaName.GroupMemberSlowDownDistance, PsoDataType.Float, 292, 0, 0), + new PsoStructureEntryInfo(MetaName.GroupMemberWalkCloseDistance, PsoDataType.Float, 296, 0, 0), + new PsoStructureEntryInfo(MetaName.GroupMemberWaitDistance, PsoDataType.Float, 300, 0, 0), + new PsoStructureEntryInfo(MetaName.SecondsBeforeWarpToLeader, PsoDataType.Float, 304, 0, 0), new PsoStructureEntryInfo((MetaName)119275101, PsoDataType.Float, 308, 0, 0), new PsoStructureEntryInfo((MetaName)2217815195, PsoDataType.UInt, 312, 0, 0), - new PsoStructureEntryInfo((MetaName)2689559592, PsoDataType.UInt, 316, 0, 0), - new PsoStructureEntryInfo((MetaName)2624279103, PsoDataType.String, 320, 7, 0), + new PsoStructureEntryInfo(MetaName.DurationHeldDownEnterButtonToJackFriendly, PsoDataType.UInt, 316, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultJackAlivePedFromOutsideClipId, PsoDataType.String, 320, 7, 0), new PsoStructureEntryInfo((MetaName)3431653792, PsoDataType.String, 324, 7, 0), - new PsoStructureEntryInfo((MetaName)1755247816, PsoDataType.String, 328, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultJackDeadPedFromOutsideClipId, PsoDataType.String, 328, 7, 0), new PsoStructureEntryInfo((MetaName)1983954745, PsoDataType.String, 332, 7, 0), - new PsoStructureEntryInfo((MetaName)2379662115, PsoDataType.String, 336, 7, 0), - new PsoStructureEntryInfo((MetaName)2061479056, PsoDataType.String, 340, 7, 0), - new PsoStructureEntryInfo((MetaName)807201844, PsoDataType.String, 344, 7, 0), - new PsoStructureEntryInfo((MetaName)1982208210, PsoDataType.String, 348, 7, 0), - new PsoStructureEntryInfo((MetaName)1866652328, PsoDataType.String, 352, 7, 0), - new PsoStructureEntryInfo((MetaName)3508843174, PsoDataType.String, 356, 7, 0), - new PsoStructureEntryInfo((MetaName)2993991731, PsoDataType.String, 360, 7, 0), - new PsoStructureEntryInfo((MetaName)4167965920, PsoDataType.String, 364, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultJackAlivePedFromWaterClipId, PsoDataType.String, 336, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultJackDeadPedFromWaterClipId, PsoDataType.String, 340, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultJackPedFromOnVehicleClipId, PsoDataType.String, 344, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultJackDeadPedFromOnVehicleClipId, PsoDataType.String, 348, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultJackPedOnVehicleIntoWaterClipId, PsoDataType.String, 352, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultJackDeadPedOnVehicleIntoWaterClipId, PsoDataType.String, 356, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultClimbUpClipId, PsoDataType.String, 360, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultClimbUpNoDoorClipId, PsoDataType.String, 364, 7, 0), new PsoStructureEntryInfo((MetaName)1857752806, PsoDataType.String, 368, 7, 0), new PsoStructureEntryInfo((MetaName)536807372, PsoDataType.String, 372, 7, 0), new PsoStructureEntryInfo((MetaName)298521545, PsoDataType.String, 376, 7, 0), @@ -12123,163 +12123,163 @@ namespace CodeWalker.GameFiles case MetaName.CTaskEnterVehicleAlign__Tunables: return new PsoStructureInfo(MetaName.CTaskEnterVehicleAlign__Tunables, 0, 0, 136, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1827422982, PsoDataType.Bool, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3670985951, PsoDataType.Bool, 17, 0, 0), - new PsoStructureEntryInfo((MetaName)142881218, PsoDataType.Bool, 18, 0, 0), - new PsoStructureEntryInfo((MetaName)2981016968, PsoDataType.Bool, 19, 0, 0), - new PsoStructureEntryInfo((MetaName)3699526709, PsoDataType.Bool, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2679767269, PsoDataType.Bool, 21, 0, 0), - new PsoStructureEntryInfo((MetaName)1175770299, PsoDataType.Bool, 22, 0, 0), - new PsoStructureEntryInfo((MetaName)1408347563, PsoDataType.Bool, 23, 0, 0), - new PsoStructureEntryInfo((MetaName)86992154, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3669742245, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2555216789, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2551900503, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)1557395660, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)1946397601, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)996663150, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2661149439, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)717764835, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)1305634921, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)3904376533, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)2898549300, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)2167006115, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)502763290, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)2507965951, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)2870050188, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)3484537704, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)840729400, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)4264959731, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)452418176, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)2300124116, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)4059105444, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)3090504223, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)2571589718, PsoDataType.Float, 116, 0, 0), - new PsoStructureEntryInfo((MetaName)24914513, PsoDataType.Float, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)158501595, PsoDataType.Float, 124, 0, 0), - new PsoStructureEntryInfo((MetaName)1420291822, PsoDataType.Float, 128, 0, 0) + new PsoStructureEntryInfo(MetaName.UseAttachDuringAlign, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.RenderDebugToTTY, PsoDataType.Bool, 17, 0, 0), + new PsoStructureEntryInfo(MetaName.ApplyRotationScaling, PsoDataType.Bool, 18, 0, 0), + new PsoStructureEntryInfo(MetaName.ApplyTranslationScaling, PsoDataType.Bool, 19, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableRotationOvershootCheck, PsoDataType.Bool, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableTranslationOvershootCheck, PsoDataType.Bool, 21, 0, 0), + new PsoStructureEntryInfo(MetaName.ReverseLeftFootAlignAnims, PsoDataType.Bool, 22, 0, 0), + new PsoStructureEntryInfo(MetaName.ForceStandEnterOnly, PsoDataType.Bool, 23, 0, 0), + new PsoStructureEntryInfo(MetaName.TranslationChangeRate, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.RotationChangeRate, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultAlignRate, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.FastAlignRate, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.CombatAlignRate, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.ActionCombatAlignRate, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.StandAlignMaxDist, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.AlignSuccessMaxDist, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultAlignStartFixupPhase, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultAlignEndFixupPhase, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.TargetRadiusForOrientatedAlignWalk, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.TargetRadiusForOrientatedAlignRun, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.MinRotationalSpeedScale, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRotationalSpeedScale, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRotationalSpeed, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTranslationalScale, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTranslationalScale, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTranslationalStandSpeed, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTranslationalMoveSpeed, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.HeadingReachedTolerance, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.StdVehicleMinPhaseToStartRotFixup, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.BikeVehicleMinPhaseToStartRotFixup, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.VaultExtraZGroundTest, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSqdDistToSetPos, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistAwayFromEntryPointToConsiderFinished, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.MinPedFwdToEntryDotToClampInitialOrientation, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistToAlwaysClampInitialOrientation, PsoDataType.Float, 128, 0, 0) ); case MetaName.CTaskOpenVehicleDoorFromOutside__Tunables: return new PsoStructureInfo(MetaName.CTaskOpenVehicleDoorFromOutside__Tunables, 0, 0, 80, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2861302055, PsoDataType.Bool, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)462320915, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1506371742, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2878218804, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2631224923, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)3370177558, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)350729378, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)1408201742, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)3933910603, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)474312049, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)757048139, PsoDataType.String, 56, 7, 0), - new PsoStructureEntryInfo((MetaName)3849261684, PsoDataType.String, 60, 7, 0), - new PsoStructureEntryInfo((MetaName)118829386, PsoDataType.String, 64, 7, 0), - new PsoStructureEntryInfo((MetaName)2087055883, PsoDataType.String, 68, 7, 0), - new PsoStructureEntryInfo((MetaName)4187378175, PsoDataType.String, 72, 7, 0), + new PsoStructureEntryInfo(MetaName.EnableOpenDoorHandIk, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultOpenDoorStartPhase, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultOpenDoorEndPhase, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultOpenDoorStartIkPhase, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultOpenDoorEndIkPhase, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MinBlendWeightToUseHighClipEvents, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultOpenDoorRate, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHandleHeightDiffVan, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxHandleHeightDiffVan, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxHandleHeightDiff, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultOpenDoorClipId, PsoDataType.String, 56, 7, 0), + new PsoStructureEntryInfo(MetaName.HighOpenDoorClipId, PsoDataType.String, 60, 7, 0), + new PsoStructureEntryInfo(MetaName.CombatOpenDoorClipId, PsoDataType.String, 64, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultTryLockedDoorClipId, PsoDataType.String, 68, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultForcedEntryClipId, PsoDataType.String, 72, 7, 0), new PsoStructureEntryInfo((MetaName)26377711, PsoDataType.String, 76, 7, 0) ); case MetaName.CTaskCloseVehicleDoorFromInside__Tunables: return new PsoStructureInfo(MetaName.CTaskCloseVehicleDoorFromInside__Tunables, 0, 0, 72, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)734813238, PsoDataType.Bool, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2181733270, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)444144670, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3092993621, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)932416743, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2057785224, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)2238708643, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2994929358, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)763167134, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)3960625221, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)1752043243, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)480380605, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)2802682741, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)2696374786, PsoDataType.Float, 68, 0, 0) + new PsoStructureEntryInfo(MetaName.EnableCloseDoorHandIk, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultCloseDoorStartPhase, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultCloseDoorEndPhase, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultCloseDoorStartIkPhase, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultCloseDoorEndIkPhase, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MinBlendWeightToUseFarClipEvents, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.CloseDoorForceMultiplier, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.VehicleSpeedToAbortCloseDoor, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.PedTestXOffset, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.PedTestYOffset, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.PedTestZStartOffset, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.PedTestZOffset, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.PedTestRadius, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.MinOpenDoorRatioToUseArmIk, PsoDataType.Float, 68, 0, 0) ); case MetaName.CTaskEnterVehicleSeat__Tunables: return new PsoStructureInfo(MetaName.CTaskEnterVehicleSeat__Tunables, 0, 0, 48, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)52645552, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2759646652, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1776336338, PsoDataType.String, 24, 7, 0), - new PsoStructureEntryInfo((MetaName)923017874, PsoDataType.String, 28, 7, 0), - new PsoStructureEntryInfo((MetaName)2521753678, PsoDataType.String, 32, 7, 0), - new PsoStructureEntryInfo((MetaName)2593531090, PsoDataType.String, 36, 7, 0), - new PsoStructureEntryInfo((MetaName)427276467, PsoDataType.String, 40, 7, 0) + new PsoStructureEntryInfo(MetaName.MinVelocityToRagdollPed, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxVelocityToEnterBike, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultGetInClipId, PsoDataType.String, 24, 7, 0), + new PsoStructureEntryInfo(MetaName.GetOnQuickClipId, PsoDataType.String, 28, 7, 0), + new PsoStructureEntryInfo(MetaName.GetInFromWaterClipId, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo(MetaName.GetInStandOnClipId, PsoDataType.String, 36, 7, 0), + new PsoStructureEntryInfo(MetaName.GetInCombatClipId, PsoDataType.String, 40, 7, 0) ); case MetaName.CTaskExitVehicle__Tunables: return new PsoStructureInfo(MetaName.CTaskExitVehicle__Tunables, 0, 0, 88, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3885866805, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2885633587, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3090579301, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)1384973258, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3420274436, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)873885486, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)95286584, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2378492841, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)676285031, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)4256472352, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)3093573752, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)1266778169, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)52645552, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)3107868104, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)1326750951, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)2102914796, PsoDataType.UInt, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)2758806077, PsoDataType.String, 80, 7, 0), - new PsoStructureEntryInfo((MetaName)374589004, PsoDataType.String, 84, 7, 0) + new PsoStructureEntryInfo(MetaName.TimeSinceLastSpottedToLeaveEngineOn, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.BeJackedBlendInDuration, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.ExitVehicleBlendInDuration, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.ThroughWindScreenBlendInDuration, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.ExitVehicleBlendOutDuration, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.ExitVehicleUnderWaterBlendOutDuration, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.ExitVehicleAttempToFireBlendOutDuration, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.FleeExitVehicleBlendOutDuration, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.LeaderExitVehicleDistance, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.ExitProbeDistance, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.ExitDistance, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.RearExitSideOffset, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.MinVelocityToRagdollPed, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeToReserveComponentBeforeWarp, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.ExtraOffsetForGroundCheck, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.JumpOutofSubNeutralBuoyancyTime, PsoDataType.UInt, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultClimbDownClipId, PsoDataType.String, 80, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultClimbDownNoDoorClipId, PsoDataType.String, 84, 7, 0) ); case MetaName.CTaskExitVehicleSeat__Tunables: return new PsoStructureInfo(MetaName.CTaskExitVehicleSeat__Tunables, 0, 0, 232, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo((MetaName)3909498748, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1948944372, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3235771585, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)343578348, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3752389553, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)4096940896, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)1332340783, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)1768336421, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)553575729, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2218133629, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)3739360652, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)2470385571, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)2090607393, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)91246296, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)1443265623, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)828622422, PsoDataType.String, 76, 7, 0), - new PsoStructureEntryInfo((MetaName)3819225408, PsoDataType.String, 80, 7, 0), + new PsoStructureEntryInfo(MetaName.AdditionalWindscreenRagdollForceFwd, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.AdditionalWindscreenRagdollForceUp, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.SkyDiveProbeDistance, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.InAirProbeDistance, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.ArrestProbeDistance, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.InWaterExitDepth, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.InWaterExitProbeLength, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.BikeVelocityToUseAnimatedJumpOff, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.BicycleVelocityToUseAnimatedJumpOff, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultGetOutBlendDuration, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultGetOutNoWindBlendDuration, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeForArrestBreakout, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.ThroughWindscreenDamagePlayer, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.ThroughWindscreenDamageAi, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultCrashExitOnSideClipId, PsoDataType.String, 76, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultBeJackedAlivePedFromOutsideClipId, PsoDataType.String, 80, 7, 0), new PsoStructureEntryInfo((MetaName)2529144140, PsoDataType.String, 84, 7, 0), - new PsoStructureEntryInfo((MetaName)2626413479, PsoDataType.String, 88, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultBeJackedDeadPedFromOutsideClipId, PsoDataType.String, 88, 7, 0), new PsoStructureEntryInfo((MetaName)3459414413, PsoDataType.String, 92, 7, 0), - new PsoStructureEntryInfo((MetaName)3745870995, PsoDataType.String, 96, 7, 0), - new PsoStructureEntryInfo((MetaName)542641977, PsoDataType.String, 100, 7, 0), - new PsoStructureEntryInfo((MetaName)2307365987, PsoDataType.String, 104, 7, 0), - new PsoStructureEntryInfo((MetaName)988275496, PsoDataType.String, 108, 7, 0), - new PsoStructureEntryInfo((MetaName)2347965860, PsoDataType.String, 112, 7, 0), - new PsoStructureEntryInfo((MetaName)824689766, PsoDataType.String, 116, 7, 0), - new PsoStructureEntryInfo((MetaName)1085529957, PsoDataType.String, 120, 7, 0), - new PsoStructureEntryInfo((MetaName)1983795837, PsoDataType.String, 124, 7, 0), - new PsoStructureEntryInfo((MetaName)4109561514, PsoDataType.String, 128, 7, 0), - new PsoStructureEntryInfo((MetaName)2498096438, PsoDataType.String, 132, 7, 0), - new PsoStructureEntryInfo((MetaName)90808597, PsoDataType.String, 136, 7, 0), - new PsoStructureEntryInfo((MetaName)1640661523, PsoDataType.String, 140, 7, 0), - new PsoStructureEntryInfo((MetaName)1583960251, PsoDataType.String, 144, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultBeJackedAlivePedFromWaterClipId, PsoDataType.String, 96, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultBeJackedDeadPedFromWaterClipId, PsoDataType.String, 100, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultBeJackedAlivePedOnVehicleClipId, PsoDataType.String, 104, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultBeJackedDeadPedOnVehicleClipId, PsoDataType.String, 108, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultBeJackedAlivePedOnVehicleIntoWaterClipId, PsoDataType.String, 112, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultBeJackedDeadPedOnVehicleIntoWaterClipId, PsoDataType.String, 116, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultFleeExitClipId, PsoDataType.String, 120, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultGetOutClipId, PsoDataType.String, 124, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultGetOutToWaterClipId, PsoDataType.String, 128, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultGetOutOnToVehicleClipId, PsoDataType.String, 132, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultGetOutNoWingId, PsoDataType.String, 136, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultJumpOutClipId, PsoDataType.String, 140, 7, 0), + new PsoStructureEntryInfo(MetaName.DeadFallOutClipId, PsoDataType.String, 144, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)609992288), - new PsoStructureEntryInfo((MetaName)3606683380, PsoDataType.Array, 152, 0, (MetaName)34), + new PsoStructureEntryInfo(MetaName.ExitToAimClipSets, PsoDataType.Array, 152, 0, (MetaName)34), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3736014569), - new PsoStructureEntryInfo((MetaName)2503125343, PsoDataType.Array, 168, 0, (MetaName)36), - new PsoStructureEntryInfo((MetaName)3130040539, PsoDataType.Float, 184, 0, 0), - new PsoStructureEntryInfo((MetaName)477015084, PsoDataType.Float, 188, 0, 0), - new PsoStructureEntryInfo((MetaName)4272192282, PsoDataType.Float, 192, 0, 0), - new PsoStructureEntryInfo((MetaName)1434272564, PsoDataType.Float, 196, 0, 0), - new PsoStructureEntryInfo((MetaName)3416772737, PsoDataType.Float, 200, 0, 0), - new PsoStructureEntryInfo((MetaName)93138639, PsoDataType.Float, 204, 0, 0), - new PsoStructureEntryInfo((MetaName)667507334, PsoDataType.Float, 208, 0, 0), - new PsoStructureEntryInfo((MetaName)207811054, PsoDataType.Float, 212, 0, 0), - new PsoStructureEntryInfo((MetaName)4193052421, PsoDataType.Float, 216, 0, 0), - new PsoStructureEntryInfo((MetaName)4180330400, PsoDataType.Float, 220, 0, 0), + new PsoStructureEntryInfo(MetaName.ExitToAimVehicleInfos, PsoDataType.Array, 168, 0, (MetaName)36), + new PsoStructureEntryInfo(MetaName.BikeExitForce, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo(MetaName.RagdollIntoWaterVelocity, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo(MetaName.GroundFixupHeight, PsoDataType.Float, 192, 0, 0), + new PsoStructureEntryInfo(MetaName.GroundFixupHeightLarge, PsoDataType.Float, 196, 0, 0), + new PsoStructureEntryInfo(MetaName.GroundFixupHeightLargeOffset, PsoDataType.Float, 200, 0, 0), + new PsoStructureEntryInfo(MetaName.GroundFixupHeightBoatInWaterInitial, PsoDataType.Float, 204, 0, 0), + new PsoStructureEntryInfo(MetaName.GroundFixupHeightBoatInWater, PsoDataType.Float, 208, 0, 0), + new PsoStructureEntryInfo(MetaName.ExtraWaterZGroundFixup, PsoDataType.Float, 212, 0, 0), + new PsoStructureEntryInfo(MetaName.FleeExitExtraRotationSpeed, PsoDataType.Float, 216, 0, 0), + new PsoStructureEntryInfo(MetaName.FleeExitExtraTranslationSpeed, PsoDataType.Float, 220, 0, 0), new PsoStructureEntryInfo((MetaName)1345368814, PsoDataType.String, 224, 7, 0), new PsoStructureEntryInfo((MetaName)1495472466, PsoDataType.String, 228, 7, 0) ); @@ -12287,7 +12287,7 @@ namespace CodeWalker.GameFiles return new PsoStructureInfo((MetaName)609992288, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo((MetaName)3647518623, PsoDataType.Array, 16, 0, (MetaName)1) + new PsoStructureEntryInfo(MetaName.Clips, PsoDataType.Array, 16, 0, (MetaName)1) ); case (MetaName)3736014569: return new PsoStructureInfo((MetaName)3736014569, 0, 0, 32, @@ -12297,188 +12297,188 @@ namespace CodeWalker.GameFiles ); case (MetaName)1118518303: return new PsoStructureInfo((MetaName)1118518303, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)1926032835, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)448596277, PsoDataType.String, 12, 7, 0), - new PsoStructureEntryInfo((MetaName)646946550, PsoDataType.String, 16, 7, 0), - new PsoStructureEntryInfo((MetaName)788888146, PsoDataType.Enum, 20, 0, (MetaName)894416699) + new PsoStructureEntryInfo(MetaName.ExitToAimClipsName, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.OneHandedClipSetName, PsoDataType.String, 12, 7, 0), + new PsoStructureEntryInfo(MetaName.TwoHandedClipSetName, PsoDataType.String, 16, 7, 0), + new PsoStructureEntryInfo(MetaName.SeatPosition, PsoDataType.Enum, 20, 0, (MetaName)894416699) ); case MetaName.CTaskReactToBeingAskedToLeaveVehicle__Tunables: return new PsoStructureInfo(MetaName.CTaskReactToBeingAskedToLeaveVehicle__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3652981848, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3050367607, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.MaxTimeToWatchVehicle, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceToWatchVehicle, PsoDataType.Float, 20, 0, 0) ); case MetaName.CTaskRideTrain__Tunables: return new PsoStructureInfo(MetaName.CTaskRideTrain__Tunables, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2811169447, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1867895091, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1143137996, PsoDataType.Float, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.MinDelayForGetOff, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDelayForGetOff, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxWaitSeconds, PsoDataType.Float, 24, 0, 0) ); case MetaName.CTaskTrainBase__Tunables: return new PsoStructureInfo(MetaName.CTaskTrainBase__Tunables, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.TargetRadius, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1468879986, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)4110448569, PsoDataType.Float, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.CompletionRadius, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.SlowDownDistance, PsoDataType.Float, 24, 0, 0) ); case MetaName.CTaskTryToGrabVehicleDoor__Tunables: return new PsoStructureInfo(MetaName.CTaskTryToGrabVehicleDoor__Tunables, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1433408101, PsoDataType.UInt, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2123286016, PsoDataType.UInt, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2222197615, PsoDataType.Float, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.MinGrabTime, PsoDataType.UInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxGrabTime, PsoDataType.UInt, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxHandToHandleDistance, PsoDataType.Float, 24, 0, 0) ); case MetaName.CTaskVehicleFSM__Tunables: return new PsoStructureInfo(MetaName.CTaskVehicleFSM__Tunables, 0, 0, 80, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)4265363743, PsoDataType.Bool, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2569732609, PsoDataType.Bool, 17, 0, 0), - new PsoStructureEntryInfo((MetaName)1293114690, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3263047395, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)1699227528, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)7853624, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1213730703, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)4167152455, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2914709570, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)423470112, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2361725074, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)4213098799, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.AllowEntryToMPWarpInSeats, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ForceStreamingFailure, PsoDataType.Bool, 17, 0, 0), + new PsoStructureEntryInfo(MetaName.PushAngleDotTolerance, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.TowardsDoorPushAngleDotTolerance, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.DeadZoneAnyInputDirection, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.DisallowGroundProbeVelocity, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MinPedSpeedToActivateRagdoll, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MinPhysSpeedToActivateRagdoll, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxHoverHeightDistToWarpIntoHeli, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeToConsiderPedGoingToDoorPriority, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeToConsiderPedGoingToDoorPriority, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistToConsiderPedGoingToDoorPriority, PsoDataType.Float, 56, 0, 0), new PsoStructureEntryInfo((MetaName)1835160785, PsoDataType.Float, 60, 0, 0), new PsoStructureEntryInfo((MetaName)1964009554, PsoDataType.Float, 64, 0, 0), new PsoStructureEntryInfo((MetaName)2552082535, PsoDataType.Float, 68, 0, 0), new PsoStructureEntryInfo((MetaName)3034610967, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)195183113, PsoDataType.UInt, 76, 0, 0) + new PsoStructureEntryInfo(MetaName.TimeToConsiderEnterInputValid, PsoDataType.UInt, 76, 0, 0) ); case MetaName.CTaskMotionInVehicle__Tunables: return new PsoStructureInfo(MetaName.CTaskMotionInVehicle__Tunables, 0, 0, 208, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)4046635601, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableCloseDoor, PsoDataType.Bool, 16, 0, 0), new PsoStructureEntryInfo((MetaName)3306188437, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)4258377742, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3562480846, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1359095251, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)935626028, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)438194982, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)4219653521, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)2551415238, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)1807337106, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)1568293823, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)3752389553, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)4171402878, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)1054799563, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)3807823759, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)2469007968, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)422547942, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)3114188164, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)4270612236, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)1515003340, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)908927858, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)2115168466, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)301666014, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)830782336, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)1079251923, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)2495843356, PsoDataType.Float, 116, 0, 0), - new PsoStructureEntryInfo((MetaName)946605886, PsoDataType.Float, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)1058383858, PsoDataType.Float, 124, 0, 0), - new PsoStructureEntryInfo((MetaName)1717140709, PsoDataType.Float, 128, 0, 0), - new PsoStructureEntryInfo((MetaName)2871611248, PsoDataType.Float, 132, 0, 0), - new PsoStructureEntryInfo((MetaName)3976993041, PsoDataType.Float, 136, 0, 0), - new PsoStructureEntryInfo((MetaName)1346841624, PsoDataType.Float, 140, 0, 0), - new PsoStructureEntryInfo((MetaName)419181205, PsoDataType.Float, 144, 0, 0), - new PsoStructureEntryInfo((MetaName)2317632829, PsoDataType.Float, 148, 0, 0), - new PsoStructureEntryInfo((MetaName)3982029176, PsoDataType.Float, 152, 0, 0), - new PsoStructureEntryInfo((MetaName)3047698562, PsoDataType.Float, 156, 0, 0), - new PsoStructureEntryInfo((MetaName)1917995403, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)3020055197, PsoDataType.Float, 164, 0, 0), - new PsoStructureEntryInfo((MetaName)3200053693, PsoDataType.Float, 168, 0, 0), - new PsoStructureEntryInfo((MetaName)1734471519, PsoDataType.Float, 172, 0, 0), - new PsoStructureEntryInfo((MetaName)3267312723, PsoDataType.Float, 176, 0, 0), - new PsoStructureEntryInfo((MetaName)3503503802, PsoDataType.Float, 180, 0, 0), - new PsoStructureEntryInfo((MetaName)1165173355, PsoDataType.Float, 184, 0, 0), - new PsoStructureEntryInfo((MetaName)2444940549, PsoDataType.Float, 188, 0, 0), - new PsoStructureEntryInfo((MetaName)3252894044, PsoDataType.Float, 192, 0, 0), - new PsoStructureEntryInfo((MetaName)559307397, PsoDataType.Float, 196, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSpeedForVehicleToBeConsideredStillSqr, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.VelocityDeltaThrownOut, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.VelocityDeltaThrownOutPlayerSP, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.VelocityDeltaThrownOutPlayerMP, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MinRateForInVehicleAnims, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRateForInVehicleAnims, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.HeavyBrakeYAcceleration, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.MinRatioForClosingDoor, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.InAirZAccelTrigger, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.InAirProbeDistance, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.InAirProbeForwardOffset, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.MinPitchDefault, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPitchDefault, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.MinPitchInAir, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPitchInAir, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultPitchSmoothingRate, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.BikePitchSmoothingRate, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.BikePitchSmoothingPassengerRate, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.WheelieAccelerateControlThreshold, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.WheelieMaxSpeedThreshold, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.WheelieUpDownControlThreshold, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.WheelieDesiredLeanAngleTol, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.StillAccTol, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.StillPitchAngleTol, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.AccelerationSmoothing, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.AccelerationSmoothingBike, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo(MetaName.AccelerationScaleBike, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeInCurrentStateForStill, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo(MetaName.AccelerationToStartLeaning, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo(MetaName.ZAccelerationToStartLeaning, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAccelerationForLean, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxXYAccelerationForLeanBike, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxZAccelerationForLeanBike, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.StillDelayTime, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo(MetaName.ShuntAccelerateMag, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.ShuntAccelerateMagBike, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeInShuntStateBeforeRestart, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAbsThrottleForCloseDoor, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxVehSpeedToConsiderClosingDoor, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDoorSpeedToConsiderClosingDoor, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo(MetaName.MinVehVelocityToGoThroughWindscreen, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo(MetaName.MinVehVelocityToGoThroughWindscreenMP, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxZComponentForCollisionNormal, PsoDataType.Float, 192, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeStreamInVehicleClipSetBeforeStartingEngine, PsoDataType.Float, 196, 0, 0), new PsoStructureEntryInfo((MetaName)599372255, PsoDataType.UInt, 200, 0, 0) ); case MetaName.CTaskMotionInAutomobile__Tunables: return new PsoStructureInfo(MetaName.CTaskMotionInAutomobile__Tunables, 0, 0, 536, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)718713683, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.TestLowLodIdle, PsoDataType.Bool, 16, 0, 0), new PsoStructureEntryInfo((MetaName)3645563068, PsoDataType.Float, 20, 0, 0), new PsoStructureEntryInfo((MetaName)2286839301, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3070028166, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3221129138, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2737592779, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)3234674890, PsoDataType.UInt, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)525349387, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)1540399603, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)1551960100, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)4159734133, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)4058717361, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)1082826303, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)3223119611, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)4228832635, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)1495829016, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)2758926922, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)2682740739, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)819470063, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)3275703461, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)3852741535, PsoDataType.Bool, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)4247487957, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)2142946869, PsoDataType.SInt, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)2167334901, PsoDataType.String, 108, 7, 0), - new PsoStructureEntryInfo((MetaName)3305089148, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)166726527, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeInHornState, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxVelocityForSitIdles, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSteeringAngleForSitIdles, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MinCentredSteeringAngleTimeForSitIdles, PsoDataType.UInt, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.LeanSidewaysAngleSmoothingRateMin, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.LeanSidewaysAngleSmoothingRateMax, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.LeanSidewaysAngleSmoothingAcc, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.LeanSidewaysAngleMinAccAngle, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.LeanSidewaysAngleMaxAccAngle, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.LeftRightStickInputSmoothingRate, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.LeftRightStickInputMin, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.LeanForwardsAngleSmoothingRate, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.UpDownStickInputSmoothingRate, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.UpDownStickInputMin, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.ZAccForLowImpact, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.ZAccForMedImpact, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.ZAccForHighImpact, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.UseLegIkOnBikes, PsoDataType.Bool, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.LargeVerticalAccelerationDelta, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.NumFramesToPersistLargeVerticalAcceleration, PsoDataType.SInt, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.LowLodIdleClipSetId, PsoDataType.String, 108, 7, 0), + new PsoStructureEntryInfo(MetaName.SeatDisplacementSmoothingRateDriver, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.SeatDisplacementSmoothingRatePassenger, PsoDataType.Float, 116, 0, 0), new PsoStructureEntryInfo((MetaName)3038905403, PsoDataType.Float, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)3175914177, PsoDataType.Float, 124, 0, 0), - new PsoStructureEntryInfo((MetaName)2116015636, PsoDataType.Float, 128, 0, 0), - new PsoStructureEntryInfo((MetaName)1260039600, PsoDataType.Float, 132, 0, 0), - new PsoStructureEntryInfo((MetaName)3525415799, PsoDataType.Float, 136, 0, 0), - new PsoStructureEntryInfo((MetaName)2058043106, PsoDataType.Float, 140, 0, 0), - new PsoStructureEntryInfo((MetaName)2654954309, PsoDataType.Float, 144, 0, 0), - new PsoStructureEntryInfo((MetaName)3271949585, PsoDataType.Float, 148, 0, 0), - new PsoStructureEntryInfo((MetaName)2198401741, PsoDataType.Float, 152, 0, 0), - new PsoStructureEntryInfo((MetaName)1825055764, PsoDataType.Float, 156, 0, 0), - new PsoStructureEntryInfo((MetaName)4250418611, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)3517975074, PsoDataType.Float, 164, 0, 0), - new PsoStructureEntryInfo((MetaName)705106159, PsoDataType.Float, 168, 0, 0), - new PsoStructureEntryInfo((MetaName)3949027340, PsoDataType.Float, 172, 0, 0), - new PsoStructureEntryInfo((MetaName)1535257534, PsoDataType.Float, 176, 0, 0), - new PsoStructureEntryInfo((MetaName)2330583994, PsoDataType.Float, 180, 0, 0), - new PsoStructureEntryInfo((MetaName)2363497120, PsoDataType.Float, 184, 0, 0), - new PsoStructureEntryInfo((MetaName)1223047739, PsoDataType.Float, 188, 0, 0), - new PsoStructureEntryInfo((MetaName)1728172908, PsoDataType.Float, 192, 0, 0), - new PsoStructureEntryInfo((MetaName)663934809, PsoDataType.Float, 196, 0, 0), - new PsoStructureEntryInfo((MetaName)158324629, PsoDataType.Float, 200, 0, 0), - new PsoStructureEntryInfo((MetaName)851764695, PsoDataType.Float, 204, 0, 0), - new PsoStructureEntryInfo((MetaName)2405402680, PsoDataType.Float, 208, 0, 0), - new PsoStructureEntryInfo((MetaName)2721586149, PsoDataType.Float, 212, 0, 0), - new PsoStructureEntryInfo((MetaName)2132426494, PsoDataType.Float, 216, 0, 0), - new PsoStructureEntryInfo((MetaName)2190188961, PsoDataType.Float, 220, 0, 0), - new PsoStructureEntryInfo((MetaName)4042046110, PsoDataType.Float, 224, 0, 0), - new PsoStructureEntryInfo((MetaName)663937180, PsoDataType.Float, 228, 0, 0), - new PsoStructureEntryInfo((MetaName)1466872193, PsoDataType.Float, 232, 0, 0), - new PsoStructureEntryInfo((MetaName)1503418851, PsoDataType.UInt, 236, 0, 0), - new PsoStructureEntryInfo((MetaName)1683629424, PsoDataType.UInt, 240, 0, 0), - new PsoStructureEntryInfo((MetaName)2532196566, PsoDataType.Float, 244, 0, 0), - new PsoStructureEntryInfo((MetaName)2406738390, PsoDataType.Float, 248, 0, 0), - new PsoStructureEntryInfo((MetaName)3912339645, PsoDataType.Float, 252, 0, 0), - new PsoStructureEntryInfo((MetaName)3426806263, PsoDataType.Float, 256, 0, 0), - new PsoStructureEntryInfo((MetaName)580774094, PsoDataType.Float, 260, 0, 0), - new PsoStructureEntryInfo((MetaName)682602058, PsoDataType.Float, 264, 0, 0), - new PsoStructureEntryInfo((MetaName)2988949625, PsoDataType.Float, 268, 0, 0), - new PsoStructureEntryInfo((MetaName)2175562542, PsoDataType.Float, 272, 0, 0), - new PsoStructureEntryInfo((MetaName)2821506258, PsoDataType.Float, 276, 0, 0), - new PsoStructureEntryInfo((MetaName)4038428233, PsoDataType.Float, 280, 0, 0), - new PsoStructureEntryInfo((MetaName)514772223, PsoDataType.Float, 284, 0, 0), - new PsoStructureEntryInfo((MetaName)765288989, PsoDataType.Float, 288, 0, 0), - new PsoStructureEntryInfo((MetaName)333974259, PsoDataType.Float, 292, 0, 0), - new PsoStructureEntryInfo((MetaName)4108731380, PsoDataType.Float, 296, 0, 0), - new PsoStructureEntryInfo((MetaName)380529072, PsoDataType.Float, 300, 0, 0), - new PsoStructureEntryInfo((MetaName)3403073366, PsoDataType.Float, 304, 0, 0), - new PsoStructureEntryInfo((MetaName)2671402641, PsoDataType.Float, 308, 0, 0), - new PsoStructureEntryInfo((MetaName)3023759131, PsoDataType.Float, 312, 0, 0), + new PsoStructureEntryInfo(MetaName.StartEngineForce, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo(MetaName.MinForwardsPitchSlope, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxForwardsPitchSlope, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo(MetaName.MinForwardsPitchSlopeBalance, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxForwardsPitchSlopeBalance, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeInWheelieToEnforceMinPitch, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo(MetaName.MinForwardsPitchWheelieBalance, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxForwardsPitchWheelieBalance, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.MinForwardsPitchWheelieBegin, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo(MetaName.SlowFastSpeedThreshold, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.MinForwardsPitchSlowSpeed, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxForwardsPitchSlowSpeed, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo(MetaName.MinForwardsPitchFastSpeed, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxForwardsPitchFastSpeed, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo(MetaName.SlowApproachRate, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo(MetaName.FastApproachRate, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo(MetaName.WheelieApproachRate, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo(MetaName.NewLeanSteerApproachRate, PsoDataType.Float, 192, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeBetweenCloseDoorAttempts, PsoDataType.Float, 196, 0, 0), + new PsoStructureEntryInfo(MetaName.ShuntDamageMultiplierAI, PsoDataType.Float, 200, 0, 0), + new PsoStructureEntryInfo(MetaName.ShuntDamageMultiplierPlayer, PsoDataType.Float, 204, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDamageTakenToApplyDamageAI, PsoDataType.Float, 208, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDamageTakenToApplyDamagePlayer, PsoDataType.Float, 212, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeInTaskToCheckForDamage, PsoDataType.Float, 216, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDamageToCheckForRandomDeath, PsoDataType.Float, 220, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDamageToCheckForRandomDeath, PsoDataType.Float, 224, 0, 0), + new PsoStructureEntryInfo(MetaName.MinHeavyCrashDeathChance, PsoDataType.Float, 228, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxHeavyCrashDeathChance, PsoDataType.Float, 232, 0, 0), + new PsoStructureEntryInfo(MetaName.SteeringDeadZoneCentreTimeMS, PsoDataType.UInt, 236, 0, 0), + new PsoStructureEntryInfo(MetaName.SteeringDeadZoneTimeMS, PsoDataType.UInt, 240, 0, 0), + new PsoStructureEntryInfo(MetaName.SteeringDeadZone, PsoDataType.Float, 244, 0, 0), + new PsoStructureEntryInfo(MetaName.SteeringChangeToStartProcessMoveSignals, PsoDataType.Float, 248, 0, 0), + new PsoStructureEntryInfo(MetaName.SteeringChangeToStopProcessMoveSignals, PsoDataType.Float, 252, 0, 0), + new PsoStructureEntryInfo(MetaName.SeatBlendLinSpeed, PsoDataType.Float, 256, 0, 0), + new PsoStructureEntryInfo(MetaName.SeatBlendAngSpeed, PsoDataType.Float, 260, 0, 0), + new PsoStructureEntryInfo(MetaName.HoldLegOutVelocity, PsoDataType.Float, 264, 0, 0), + new PsoStructureEntryInfo(MetaName.MinVelStillStart, PsoDataType.Float, 268, 0, 0), + new PsoStructureEntryInfo(MetaName.MinVelStillStop, PsoDataType.Float, 272, 0, 0), + new PsoStructureEntryInfo(MetaName.ForcedLegUpVelocity, PsoDataType.Float, 276, 0, 0), + new PsoStructureEntryInfo(MetaName.BurnOutBlendInTol, PsoDataType.Float, 280, 0, 0), + new PsoStructureEntryInfo(MetaName.BurnOutBlendInSpeed, PsoDataType.Float, 284, 0, 0), + new PsoStructureEntryInfo(MetaName.BurnOutBlendOutSpeed, PsoDataType.Float, 288, 0, 0), + new PsoStructureEntryInfo(MetaName.BikeInAirDriveToStandUpTimeMin, PsoDataType.Float, 292, 0, 0), + new PsoStructureEntryInfo(MetaName.BikeInAirDriveToStandUpTimeMax, PsoDataType.Float, 296, 0, 0), + new PsoStructureEntryInfo(MetaName.MinSpeedToBlendInDriveFastFacial, PsoDataType.Float, 300, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDisplacementScale, PsoDataType.Float, 304, 0, 0), + new PsoStructureEntryInfo(MetaName.DisplacementScaleApproachRateIn, PsoDataType.Float, 308, 0, 0), + new PsoStructureEntryInfo(MetaName.DisplacementScaleApproachRateOut, PsoDataType.Float, 312, 0, 0), new PsoStructureEntryInfo((MetaName)640640576, PsoDataType.Float, 316, 0, 0), new PsoStructureEntryInfo((MetaName)445721091, PsoDataType.Float, 320, 0, 0), new PsoStructureEntryInfo((MetaName)2001571571, PsoDataType.Float, 324, 0, 0), @@ -12497,22 +12497,22 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)7898446, PsoDataType.UInt, 376, 0, 0), new PsoStructureEntryInfo((MetaName)56684479, PsoDataType.UInt, 380, 0, 0), new PsoStructureEntryInfo((MetaName)345487015, PsoDataType.UInt, 384, 0, 0), - new PsoStructureEntryInfo((MetaName)723740105, PsoDataType.String, 388, 7, 0), + new PsoStructureEntryInfo(MetaName.StartEngineClipId, PsoDataType.String, 388, 7, 0), new PsoStructureEntryInfo((MetaName)2195918560, PsoDataType.String, 392, 7, 0), - new PsoStructureEntryInfo((MetaName)2232368689, PsoDataType.String, 396, 7, 0), + new PsoStructureEntryInfo(MetaName.HotwireClipId, PsoDataType.String, 396, 7, 0), new PsoStructureEntryInfo((MetaName)1348667163, PsoDataType.String, 400, 7, 0), - new PsoStructureEntryInfo((MetaName)2026680640, PsoDataType.String, 404, 7, 0), + new PsoStructureEntryInfo(MetaName.PutOnHelmetClipId, PsoDataType.String, 404, 7, 0), new PsoStructureEntryInfo((MetaName)1430534928, PsoDataType.String, 408, 7, 0), new PsoStructureEntryInfo((MetaName)1851449258, PsoDataType.String, 412, 7, 0), new PsoStructureEntryInfo((MetaName)2091354753, PsoDataType.String, 416, 7, 0), new PsoStructureEntryInfo((MetaName)1023392893, PsoDataType.String, 420, 7, 0), new PsoStructureEntryInfo((MetaName)2273702662, PsoDataType.String, 424, 7, 0), - new PsoStructureEntryInfo((MetaName)2867244273, PsoDataType.String, 428, 7, 0), - new PsoStructureEntryInfo((MetaName)1322656239, PsoDataType.String, 432, 7, 0), - new PsoStructureEntryInfo((MetaName)3951489866, PsoDataType.String, 436, 7, 0), - new PsoStructureEntryInfo((MetaName)1402571365, PsoDataType.String, 440, 7, 0), + new PsoStructureEntryInfo(MetaName.ChangeStationClipId, PsoDataType.String, 428, 7, 0), + new PsoStructureEntryInfo(MetaName.StillToSitClipId, PsoDataType.String, 432, 7, 0), + new PsoStructureEntryInfo(MetaName.SitToStillClipId, PsoDataType.String, 436, 7, 0), + new PsoStructureEntryInfo(MetaName.BurnOutClipId, PsoDataType.String, 440, 7, 0), new PsoStructureEntryInfo((MetaName)1920935636, PsoDataType.String, 444, 7, 0), - new PsoStructureEntryInfo((MetaName)1786685138, PsoDataType.String, 448, 7, 0), + new PsoStructureEntryInfo(MetaName.BikeHornClipId, PsoDataType.String, 448, 7, 0), new PsoStructureEntryInfo((MetaName)4017603423, PsoDataType.String, 452, 7, 0), new PsoStructureEntryInfo((MetaName)1797630730, PsoDataType.Float, 456, 0, 0), new PsoStructureEntryInfo((MetaName)2658529211, PsoDataType.Float, 460, 0, 0), @@ -12538,121 +12538,121 @@ namespace CodeWalker.GameFiles case MetaName.CTaskMotionOnBicycle__Tunables: return new PsoStructureInfo(MetaName.CTaskMotionOnBicycle__Tunables, 0, 0, 224, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)541806245, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.LeanAngleSmoothingRate, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo(MetaName.StillToSitPedalGearApproachRate, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2418985851, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)514488562, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3869148508, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1916394191, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)1906306837, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)811691519, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)1900606204, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)1735614949, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)651496609, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)3504747140, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)221837246, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)1599024557, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)3553993325, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.PedalGearApproachRate, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MinXYVelForWantsToMove, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSpeedForStill, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSpeedForStillReverse, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxThrottleForStill, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultPedalToFreewheelBlendDuration, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.SlowPedalToFreewheelBlendDuration, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxRateForSlowBlendDuration, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.StillToSitLeanRate, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.StillToSitApproachRate, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.UpHillMinPitchToStandUp, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.DownHillMinPitchToStandUp, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeInStandState, PsoDataType.Float, 72, 0, 0), new PsoStructureEntryInfo((MetaName)1621924028, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)3302557202, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)2103453391, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)524252818, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)1054799563, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)3807823759, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)2116015636, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)1260039600, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)1801923157, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)1962859811, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)4228525959, PsoDataType.Float, 116, 0, 0), - new PsoStructureEntryInfo((MetaName)373069342, PsoDataType.Float, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)1466153272, PsoDataType.Float, 124, 0, 0), - new PsoStructureEntryInfo((MetaName)1333345561, PsoDataType.Float, 128, 0, 0), - new PsoStructureEntryInfo((MetaName)4004042226, PsoDataType.Float, 132, 0, 0), - new PsoStructureEntryInfo((MetaName)1157744908, PsoDataType.Float, 136, 0, 0), - new PsoStructureEntryInfo((MetaName)3608841595, PsoDataType.Float, 140, 0, 0), - new PsoStructureEntryInfo((MetaName)2455313637, PsoDataType.Float, 144, 0, 0), - new PsoStructureEntryInfo((MetaName)1137589274, PsoDataType.Float, 148, 0, 0), - new PsoStructureEntryInfo((MetaName)2587752772, PsoDataType.Float, 152, 0, 0), - new PsoStructureEntryInfo((MetaName)3469844948, PsoDataType.Float, 156, 0, 0), - new PsoStructureEntryInfo((MetaName)3389614983, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)1025905604, PsoDataType.Bool, 164, 0, 0), - new PsoStructureEntryInfo((MetaName)2966685819, PsoDataType.String, 168, 7, 0), - new PsoStructureEntryInfo((MetaName)628124008, PsoDataType.String, 172, 7, 0), - new PsoStructureEntryInfo((MetaName)2298295044, PsoDataType.String, 176, 7, 0), - new PsoStructureEntryInfo((MetaName)2443433960, PsoDataType.String, 180, 7, 0), - new PsoStructureEntryInfo((MetaName)2199245470, PsoDataType.String, 184, 7, 0), - new PsoStructureEntryInfo((MetaName)4170136432, PsoDataType.String, 188, 7, 0), - new PsoStructureEntryInfo((MetaName)896939326, PsoDataType.String, 192, 7, 0), - new PsoStructureEntryInfo((MetaName)450274249, PsoDataType.String, 196, 7, 0), - new PsoStructureEntryInfo((MetaName)2341866800, PsoDataType.String, 200, 7, 0), - new PsoStructureEntryInfo((MetaName)1718435094, PsoDataType.String, 204, 7, 0), - new PsoStructureEntryInfo((MetaName)1736721816, PsoDataType.String, 208, 7, 0), - new PsoStructureEntryInfo((MetaName)2145122814, PsoDataType.String, 212, 7, 0), - new PsoStructureEntryInfo((MetaName)2306546493, PsoDataType.String, 216, 7, 0), - new PsoStructureEntryInfo((MetaName)2112680596, PsoDataType.String, 220, 7, 0) + new PsoStructureEntryInfo(MetaName.MinSprintResultToStand, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeSinceShiftedWeightForwardToAllowWheelie, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.WheelieShiftThreshold, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.MinPitchDefault, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPitchDefault, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.MinForwardsPitchSlope, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxForwardsPitchSlope, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.OnSlopeThreshold, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxJumpHeightForSmallImpact, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.LongitudinalBodyLeanApproachRateSlope, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.LongitudinalBodyLeanApproachRate, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.LongitudinalBodyLeanApproachRateSlow, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo(MetaName.SideZoneThreshold, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.ReturnZoneThreshold, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxYIntentionToUseSlowApproach, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeToStayUprightAfterImpact, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultSitToStandBlendDuration, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo(MetaName.WheelieSitToStandBlendDuration, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo(MetaName.WheelieStickPullBackMinIntention, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeSinceNotWantingToTrackStandToAllowStillTransition, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeInSitToStillStateToReverse, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.PreventDirectTransitionToReverseFromSit, PsoDataType.Bool, 164, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultSmallImpactCharClipId, PsoDataType.String, 168, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultImpactCharClipId, PsoDataType.String, 172, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultSmallImpactBikeClipId, PsoDataType.String, 176, 7, 0), + new PsoStructureEntryInfo(MetaName.DefaultImpactBikeClipId, PsoDataType.String, 180, 7, 0), + new PsoStructureEntryInfo(MetaName.DownHillSmallImpactCharClipId, PsoDataType.String, 184, 7, 0), + new PsoStructureEntryInfo(MetaName.DownHillImpactCharClipId, PsoDataType.String, 188, 7, 0), + new PsoStructureEntryInfo(MetaName.DownHillSmallImpactBikeClipId, PsoDataType.String, 192, 7, 0), + new PsoStructureEntryInfo(MetaName.DownHillImpactBikeClipId, PsoDataType.String, 196, 7, 0), + new PsoStructureEntryInfo(MetaName.SitToStillCharClipId, PsoDataType.String, 200, 7, 0), + new PsoStructureEntryInfo(MetaName.SitToStillBikeClipId, PsoDataType.String, 204, 7, 0), + new PsoStructureEntryInfo(MetaName.TrackStandToStillLeftCharClipId, PsoDataType.String, 208, 7, 0), + new PsoStructureEntryInfo(MetaName.TrackStandToStillLeftBikeClipId, PsoDataType.String, 212, 7, 0), + new PsoStructureEntryInfo(MetaName.TrackStandToStillRightCharClipId, PsoDataType.String, 216, 7, 0), + new PsoStructureEntryInfo(MetaName.TrackStandToStillRightBikeClipId, PsoDataType.String, 220, 7, 0) ); case MetaName.CTaskMotionOnBicycleController__Tunables: return new PsoStructureInfo(MetaName.CTaskMotionOnBicycleController__Tunables, 0, 0, 184, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)863715729, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3178576793, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)2196376340, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3840966049, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)510487850, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1082334520, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)2271374387, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)733218, PsoDataType.String, 44, 7, 0), - new PsoStructureEntryInfo((MetaName)1933131499, PsoDataType.String, 48, 7, 0), - new PsoStructureEntryInfo((MetaName)1163109918, PsoDataType.String, 52, 7, 0), - new PsoStructureEntryInfo((MetaName)1089195126, PsoDataType.String, 56, 7, 0), - new PsoStructureEntryInfo((MetaName)1151736662, PsoDataType.String, 60, 7, 0), - new PsoStructureEntryInfo((MetaName)4061011008, PsoDataType.String, 64, 7, 0), - new PsoStructureEntryInfo((MetaName)2693600057, PsoDataType.String, 68, 7, 0), - new PsoStructureEntryInfo((MetaName)4229390137, PsoDataType.String, 72, 7, 0), - new PsoStructureEntryInfo((MetaName)1333997798, PsoDataType.String, 76, 7, 0), - new PsoStructureEntryInfo((MetaName)945663205, PsoDataType.String, 80, 7, 0), - new PsoStructureEntryInfo((MetaName)3073315828, PsoDataType.String, 84, 7, 0), - new PsoStructureEntryInfo((MetaName)3808805794, PsoDataType.String, 88, 7, 0), - new PsoStructureEntryInfo((MetaName)1792476542, PsoDataType.String, 92, 7, 0), - new PsoStructureEntryInfo((MetaName)697395711, PsoDataType.String, 96, 7, 0), - new PsoStructureEntryInfo((MetaName)413582134, PsoDataType.String, 100, 7, 0), - new PsoStructureEntryInfo((MetaName)688331024, PsoDataType.String, 104, 7, 0), - new PsoStructureEntryInfo((MetaName)1543557460, PsoDataType.String, 108, 7, 0), - new PsoStructureEntryInfo((MetaName)323139173, PsoDataType.String, 112, 7, 0), - new PsoStructureEntryInfo((MetaName)2616623374, PsoDataType.String, 116, 7, 0), - new PsoStructureEntryInfo((MetaName)3652939154, PsoDataType.String, 120, 7, 0), - new PsoStructureEntryInfo((MetaName)3950475012, PsoDataType.String, 124, 7, 0), - new PsoStructureEntryInfo((MetaName)874968111, PsoDataType.String, 128, 7, 0), - new PsoStructureEntryInfo((MetaName)1348669466, PsoDataType.String, 132, 7, 0), - new PsoStructureEntryInfo((MetaName)2864920648, PsoDataType.String, 136, 7, 0), - new PsoStructureEntryInfo((MetaName)2365139646, PsoDataType.String, 140, 7, 0), - new PsoStructureEntryInfo((MetaName)963408802, PsoDataType.String, 144, 7, 0), - new PsoStructureEntryInfo((MetaName)2138292255, PsoDataType.String, 148, 7, 0), - new PsoStructureEntryInfo((MetaName)1620728723, PsoDataType.String, 152, 7, 0), - new PsoStructureEntryInfo((MetaName)196702567, PsoDataType.String, 156, 7, 0), - new PsoStructureEntryInfo((MetaName)4285496170, PsoDataType.String, 160, 7, 0), - new PsoStructureEntryInfo((MetaName)3916128451, PsoDataType.String, 164, 7, 0), - new PsoStructureEntryInfo((MetaName)2221169411, PsoDataType.String, 168, 7, 0), - new PsoStructureEntryInfo((MetaName)4163976723, PsoDataType.String, 172, 7, 0), - new PsoStructureEntryInfo((MetaName)4218531778, PsoDataType.String, 176, 7, 0), - new PsoStructureEntryInfo((MetaName)182997087, PsoDataType.String, 180, 7, 0) + new PsoStructureEntryInfo(MetaName.MinTimeInStateToAllowTransitionFromFixieSkid, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeStillToTransitionToTrackStand, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeInPedalState, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeInFreewheelState, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAiSpeedForStandingUp, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSpeedToTriggerTrackStandTransition, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxSpeedToTriggerFixieSkidTransition, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.CruiseDuckPrepLeftCharClipId, PsoDataType.String, 44, 7, 0), + new PsoStructureEntryInfo(MetaName.CruiseDuckPrepRightCharClipId, PsoDataType.String, 48, 7, 0), + new PsoStructureEntryInfo(MetaName.CruiseDuckPrepLeftBikeClipId, PsoDataType.String, 52, 7, 0), + new PsoStructureEntryInfo(MetaName.CruiseDuckPrepRightBikeClipId, PsoDataType.String, 56, 7, 0), + new PsoStructureEntryInfo(MetaName.FastDuckPrepLeftCharClipId, PsoDataType.String, 60, 7, 0), + new PsoStructureEntryInfo(MetaName.FastDuckPrepRightCharClipId, PsoDataType.String, 64, 7, 0), + new PsoStructureEntryInfo(MetaName.FastDuckPrepLeftBikeClipId, PsoDataType.String, 68, 7, 0), + new PsoStructureEntryInfo(MetaName.FastDuckPrepRightBikeClipId, PsoDataType.String, 72, 7, 0), + new PsoStructureEntryInfo(MetaName.LaunchLeftCharClipId, PsoDataType.String, 76, 7, 0), + new PsoStructureEntryInfo(MetaName.LaunchRightCharClipId, PsoDataType.String, 80, 7, 0), + new PsoStructureEntryInfo(MetaName.LaunchLeftBikeClipId, PsoDataType.String, 84, 7, 0), + new PsoStructureEntryInfo(MetaName.LaunchRightBikeClipId, PsoDataType.String, 88, 7, 0), + new PsoStructureEntryInfo(MetaName.TrackStandLeftCharClipId, PsoDataType.String, 92, 7, 0), + new PsoStructureEntryInfo(MetaName.TrackStandRightCharClipId, PsoDataType.String, 96, 7, 0), + new PsoStructureEntryInfo(MetaName.TrackStandLeftBikeClipId, PsoDataType.String, 100, 7, 0), + new PsoStructureEntryInfo(MetaName.TrackStandRightBikeClipId, PsoDataType.String, 104, 7, 0), + new PsoStructureEntryInfo(MetaName.FixieSkidLeftCharClip0Id, PsoDataType.String, 108, 7, 0), + new PsoStructureEntryInfo(MetaName.FixieSkidLeftCharClip1Id, PsoDataType.String, 112, 7, 0), + new PsoStructureEntryInfo(MetaName.FixieSkidRightCharClip0Id, PsoDataType.String, 116, 7, 0), + new PsoStructureEntryInfo(MetaName.FixieSkidRightCharClip1Id, PsoDataType.String, 120, 7, 0), + new PsoStructureEntryInfo(MetaName.FixieSkidLeftBikeClip0Id, PsoDataType.String, 124, 7, 0), + new PsoStructureEntryInfo(MetaName.FixieSkidLeftBikeClip1Id, PsoDataType.String, 128, 7, 0), + new PsoStructureEntryInfo(MetaName.FixieSkidRightBikeClip0Id, PsoDataType.String, 132, 7, 0), + new PsoStructureEntryInfo(MetaName.FixieSkidRightBikeClip1Id, PsoDataType.String, 136, 7, 0), + new PsoStructureEntryInfo(MetaName.FixieSkidToBalanceLeftCharClip1Id, PsoDataType.String, 140, 7, 0), + new PsoStructureEntryInfo(MetaName.FixieSkidToBalanceRightCharClip1Id, PsoDataType.String, 144, 7, 0), + new PsoStructureEntryInfo(MetaName.FixieSkidToBalanceLeftBikeClip1Id, PsoDataType.String, 148, 7, 0), + new PsoStructureEntryInfo(MetaName.FixieSkidToBalanceRightBikeClip1Id, PsoDataType.String, 152, 7, 0), + new PsoStructureEntryInfo(MetaName.CruisePedalCharClipId, PsoDataType.String, 156, 7, 0), + new PsoStructureEntryInfo(MetaName.InAirFreeWheelCharClipId, PsoDataType.String, 160, 7, 0), + new PsoStructureEntryInfo(MetaName.InAirFreeWheelBikeClipId, PsoDataType.String, 164, 7, 0), + new PsoStructureEntryInfo(MetaName.DownHillInAirFreeWheelCharClipId, PsoDataType.String, 168, 7, 0), + new PsoStructureEntryInfo(MetaName.DownHillInAirFreeWheelBikeClipId, PsoDataType.String, 172, 7, 0), + new PsoStructureEntryInfo(MetaName.TuckFreeWheelToTrackStandRightCharClipId, PsoDataType.String, 176, 7, 0), + new PsoStructureEntryInfo(MetaName.TuckFreeWheelToTrackStandRightBikeClipId, PsoDataType.String, 180, 7, 0) ); case MetaName.CBikeLeanAngleHelper__Tunables: return new PsoStructureInfo(MetaName.CBikeLeanAngleHelper__Tunables, 0, 0, 64, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)347971119, PsoDataType.Bool, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1694816095, PsoDataType.Bool, 17, 0, 0), - new PsoStructureEntryInfo((MetaName)1030667828, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3420225248, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)4138940297, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2940067495, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1365613076, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)1850650077, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)1393469938, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)2868091491, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)4254763028, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)2573017241, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)48278855, PsoDataType.Float, 60, 0, 0) + new PsoStructureEntryInfo(MetaName.UseReturnOvershoot, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.UseInitialLeanForcing, PsoDataType.Bool, 17, 0, 0), + new PsoStructureEntryInfo(MetaName.DesiredLeanAngleTolToBringLegIn, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.DesiredSpeedToBringLegIn, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.DesiredLeanAngleRate, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.DesiredLeanAngleRateQuad, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.LeanAngleReturnRate, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.LeanAngleDefaultRate, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.LeanAngleDefaultRatePassenger, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.DesiredOvershootLeanAngle, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.LeanAngleReturnedTol, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.HasStickInputThreshold, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.LeaningExtremeThreshold, PsoDataType.Float, 60, 0, 0) ); case MetaName.CTaskMotionInTurret__Tunables: return new PsoStructureInfo(MetaName.CTaskMotionInTurret__Tunables, 0, 0, 248, @@ -12698,14 +12698,14 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)356569692, PsoDataType.String, 168, 7, 0), new PsoStructureEntryInfo((MetaName)2567235955, PsoDataType.String, 172, 7, 0), new PsoStructureEntryInfo((MetaName)3042448153, PsoDataType.String, 176, 7, 0), - new PsoStructureEntryInfo((MetaName)1974526496, PsoDataType.String, 180, 7, 0), - new PsoStructureEntryInfo((MetaName)139557085, PsoDataType.String, 184, 7, 0), + new PsoStructureEntryInfo(MetaName.TurnLeftSlowClipId, PsoDataType.String, 180, 7, 0), + new PsoStructureEntryInfo(MetaName.TurnLeftFastClipId, PsoDataType.String, 184, 7, 0), new PsoStructureEntryInfo((MetaName)1206230540, PsoDataType.String, 188, 7, 0), new PsoStructureEntryInfo((MetaName)3713053450, PsoDataType.String, 192, 7, 0), new PsoStructureEntryInfo((MetaName)2463362878, PsoDataType.String, 196, 7, 0), new PsoStructureEntryInfo((MetaName)3874294070, PsoDataType.String, 200, 7, 0), - new PsoStructureEntryInfo((MetaName)3624061968, PsoDataType.String, 204, 7, 0), - new PsoStructureEntryInfo((MetaName)3609018768, PsoDataType.String, 208, 7, 0), + new PsoStructureEntryInfo(MetaName.TurnRightSlowClipId, PsoDataType.String, 204, 7, 0), + new PsoStructureEntryInfo(MetaName.TurnRightFastClipId, PsoDataType.String, 208, 7, 0), new PsoStructureEntryInfo((MetaName)1611862735, PsoDataType.String, 212, 7, 0), new PsoStructureEntryInfo((MetaName)413072568, PsoDataType.String, 216, 7, 0), new PsoStructureEntryInfo((MetaName)1114189303, PsoDataType.String, 220, 7, 0), @@ -12719,240 +12719,240 @@ namespace CodeWalker.GameFiles case MetaName.CWanted__Tunables: return new PsoStructureInfo(MetaName.CWanted__Tunables, 0, 0, 2696, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)651905954, PsoDataType.Structure, 16, 0, MetaName.CWanted__Tunables__WantedLevel), + new PsoStructureEntryInfo(MetaName.WantedClean, PsoDataType.Structure, 16, 0, MetaName.CWanted__Tunables__WantedLevel), new PsoStructureEntryInfo(MetaName.WantedLevel1, PsoDataType.Structure, 128, 0, MetaName.CWanted__Tunables__WantedLevel), new PsoStructureEntryInfo(MetaName.WantedLevel2, PsoDataType.Structure, 240, 0, MetaName.CWanted__Tunables__WantedLevel), new PsoStructureEntryInfo(MetaName.WantedLevel3, PsoDataType.Structure, 352, 0, MetaName.CWanted__Tunables__WantedLevel), new PsoStructureEntryInfo(MetaName.WantedLevel4, PsoDataType.Structure, 464, 0, MetaName.CWanted__Tunables__WantedLevel), new PsoStructureEntryInfo(MetaName.WantedLevel5, PsoDataType.Structure, 576, 0, MetaName.CWanted__Tunables__WantedLevel), - new PsoStructureEntryInfo((MetaName)1654675133, PsoDataType.Structure, 688, 0, (MetaName)2685546187), - new PsoStructureEntryInfo((MetaName)67050499, PsoDataType.Structure, 2640, 0, (MetaName)1581603972), - new PsoStructureEntryInfo((MetaName)577434903, PsoDataType.Structure, 2656, 0, (MetaName)4245193745), - new PsoStructureEntryInfo((MetaName)904929247, PsoDataType.UInt, 2672, 0, 0), - new PsoStructureEntryInfo((MetaName)1730819989, PsoDataType.UInt, 2676, 0, 0), - new PsoStructureEntryInfo((MetaName)115496620, PsoDataType.UInt, 2680, 0, 0), - new PsoStructureEntryInfo((MetaName)922425823, PsoDataType.UInt, 2684, 0, 0), - new PsoStructureEntryInfo((MetaName)3003441217, PsoDataType.UInt, 2688, 0, 0), + new PsoStructureEntryInfo(MetaName.Difficulty, PsoDataType.Structure, 688, 0, (MetaName)2685546187), + new PsoStructureEntryInfo(MetaName.Rendering, PsoDataType.Structure, 2640, 0, (MetaName)1581603972), + new PsoStructureEntryInfo(MetaName.Timers, PsoDataType.Structure, 2656, 0, (MetaName)4245193745), + new PsoStructureEntryInfo(MetaName.MaxTimeTargetVehicleMoving, PsoDataType.UInt, 2672, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultAmnestyTime, PsoDataType.UInt, 2676, 0, 0), + new PsoStructureEntryInfo(MetaName.DefaultHiddenEvasionTimeReduction, PsoDataType.UInt, 2680, 0, 0), + new PsoStructureEntryInfo(MetaName.InitialAreaTimeoutWhenSeen, PsoDataType.UInt, 2684, 0, 0), + new PsoStructureEntryInfo(MetaName.InitialAreaTimeoutWhenCrimeReported, PsoDataType.UInt, 2688, 0, 0), new PsoStructureEntryInfo((MetaName)2940774268, PsoDataType.Float, 2692, 0, 0) ); case MetaName.CWanted__Tunables__WantedLevel: return new PsoStructureInfo(MetaName.CWanted__Tunables__WantedLevel, 0, 0, 112, - new PsoStructureEntryInfo((MetaName)1654675133, PsoDataType.Structure, 8, 0, (MetaName)3660423994) + new PsoStructureEntryInfo(MetaName.Difficulty, PsoDataType.Structure, 8, 0, (MetaName)3660423994) ); case (MetaName)3660423994: return new PsoStructureInfo((MetaName)3660423994, 0, 0, 104, - new PsoStructureEntryInfo((MetaName)3703855515, PsoDataType.Structure, 8, 0, (MetaName)1037717481), - new PsoStructureEntryInfo((MetaName)847633247, PsoDataType.Structure, 72, 0, (MetaName)3986648608) + new PsoStructureEntryInfo(MetaName.Calculation, PsoDataType.Structure, 8, 0, (MetaName)1037717481), + new PsoStructureEntryInfo(MetaName.Helis, PsoDataType.Structure, 72, 0, (MetaName)3986648608) ); case (MetaName)1037717481: return new PsoStructureInfo((MetaName)1037717481, 0, 0, 64, - new PsoStructureEntryInfo((MetaName)1358049181, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)3025359898, PsoDataType.Structure, 16, 0, (MetaName)1310408174), - new PsoStructureEntryInfo((MetaName)398571259, PsoDataType.Structure, 40, 0, (MetaName)3442100148) + new PsoStructureEntryInfo(MetaName.FromWantedLevel, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.Weights, PsoDataType.Structure, 16, 0, (MetaName)1310408174), + new PsoStructureEntryInfo(MetaName.Decay, PsoDataType.Structure, 40, 0, (MetaName)3442100148) ); case (MetaName)1310408174: return new PsoStructureInfo((MetaName)1310408174, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)1092646882, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)2553544690, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)3060363673, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.WantedLevel, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.LastSpottedDistance, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.Randomness, PsoDataType.Float, 16, 0, 0) ); case (MetaName)3442100148: return new PsoStructureInfo((MetaName)3442100148, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)3674050950, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)3107625217, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)746028494, PsoDataType.Bool, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.TimeEvadingForMaxValue, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxValue, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableWhenOffMission, PsoDataType.Bool, 16, 0, 0) ); case (MetaName)3986648608: return new PsoStructureInfo((MetaName)3986648608, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)3888134503, PsoDataType.Structure, 8, 0, (MetaName)2123007699) + new PsoStructureEntryInfo(MetaName.Refuel, PsoDataType.Structure, 8, 0, (MetaName)2123007699) ); case (MetaName)2123007699: return new PsoStructureInfo((MetaName)2123007699, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)353469799, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)4112497335, PsoDataType.Float, 16, 0, 0) + new PsoStructureEntryInfo(MetaName.TimeBefore, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.Delay, PsoDataType.Float, 16, 0, 0) ); case (MetaName)2685546187: return new PsoStructureInfo((MetaName)2685546187, 0, 0, 1952, - new PsoStructureEntryInfo((MetaName)4197810024, PsoDataType.Structure, 8, 0, (MetaName)2145739988), - new PsoStructureEntryInfo((MetaName)1606361377, PsoDataType.Structure, 152, 0, (MetaName)1602748523), + new PsoStructureEntryInfo(MetaName.Spawning, PsoDataType.Structure, 8, 0, (MetaName)2145739988), + new PsoStructureEntryInfo(MetaName.Despawning, PsoDataType.Structure, 152, 0, (MetaName)1602748523), new PsoStructureEntryInfo(MetaName.Peds, PsoDataType.Structure, 280, 0, (MetaName)3209293959), new PsoStructureEntryInfo(MetaName.Dispatch, PsoDataType.Structure, 1920, 0, (MetaName)3840146119) ); case (MetaName)2145739988: return new PsoStructureInfo((MetaName)2145739988, 0, 0, 144, - new PsoStructureEntryInfo((MetaName)3333387022, PsoDataType.Structure, 8, 0, (MetaName)3801009121), - new PsoStructureEntryInfo((MetaName)2913237777, PsoDataType.Structure, 96, 0, (MetaName)2528332511), - new PsoStructureEntryInfo((MetaName)987604024, PsoDataType.Structure, 120, 0, (MetaName)2528332511) + new PsoStructureEntryInfo(MetaName.Scoring, PsoDataType.Structure, 8, 0, (MetaName)3801009121), + new PsoStructureEntryInfo(MetaName.IdealDistance, PsoDataType.Structure, 96, 0, (MetaName)2528332511), + new PsoStructureEntryInfo(MetaName.ChancesToForceWaitInFront, PsoDataType.Structure, 120, 0, (MetaName)2528332511) ); case (MetaName)3801009121: return new PsoStructureInfo((MetaName)3801009121, 0, 0, 88, - new PsoStructureEntryInfo((MetaName)3025359898, PsoDataType.Structure, 8, 0, (MetaName)2379615087) + new PsoStructureEntryInfo(MetaName.Weights, PsoDataType.Structure, 8, 0, (MetaName)2379615087) ); case (MetaName)2379615087: return new PsoStructureInfo((MetaName)2379615087, 0, 0, 80, new PsoStructureEntryInfo(MetaName.Distance, PsoDataType.Structure, 8, 0, (MetaName)2528332511), new PsoStructureEntryInfo(MetaName.Direction, PsoDataType.Structure, 32, 0, (MetaName)2528332511), - new PsoStructureEntryInfo((MetaName)3060363673, PsoDataType.Structure, 56, 0, (MetaName)2528332511) + new PsoStructureEntryInfo(MetaName.Randomness, PsoDataType.Structure, 56, 0, (MetaName)2528332511) ); case (MetaName)2528332511: return new PsoStructureInfo((MetaName)2528332511, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Min, PsoDataType.Float, 8, 0, 0), new PsoStructureEntryInfo(MetaName.Max, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)2828335077, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1433159873, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.ValueForMin, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ValueForMax, PsoDataType.Float, 20, 0, 0) ); case (MetaName)1602748523: return new PsoStructureInfo((MetaName)1602748523, 0, 0, 128, - new PsoStructureEntryInfo((MetaName)1107258897, PsoDataType.Structure, 8, 0, (MetaName)2528332511), - new PsoStructureEntryInfo((MetaName)3214855311, PsoDataType.Structure, 32, 0, (MetaName)2528332511), - new PsoStructureEntryInfo((MetaName)4205882999, PsoDataType.Structure, 56, 0, (MetaName)2528332511), - new PsoStructureEntryInfo((MetaName)2096238662, PsoDataType.Structure, 80, 0, (MetaName)2528332511), - new PsoStructureEntryInfo((MetaName)2154790128, PsoDataType.Structure, 104, 0, (MetaName)2528332511) + new PsoStructureEntryInfo(MetaName.MaxFacingThreshold, PsoDataType.Structure, 8, 0, (MetaName)2528332511), + new PsoStructureEntryInfo(MetaName.MaxMovingThreshold, PsoDataType.Structure, 32, 0, (MetaName)2528332511), + new PsoStructureEntryInfo(MetaName.MinDistanceToBeConsideredLaggingBehind, PsoDataType.Structure, 56, 0, (MetaName)2528332511), + new PsoStructureEntryInfo(MetaName.MinDistanceToCheckClumped, PsoDataType.Structure, 80, 0, (MetaName)2528332511), + new PsoStructureEntryInfo(MetaName.MaxDistanceToBeConsideredClumped, PsoDataType.Structure, 104, 0, (MetaName)2528332511) ); case (MetaName)3209293959: return new PsoStructureInfo((MetaName)3209293959, 0, 0, 1640, - new PsoStructureEntryInfo((MetaName)1528396268, PsoDataType.Structure, 8, 0, (MetaName)2022711333), - new PsoStructureEntryInfo((MetaName)507550818, PsoDataType.Structure, 552, 0, (MetaName)2022711333), - new PsoStructureEntryInfo((MetaName)2552595859, PsoDataType.Structure, 1096, 0, (MetaName)2022711333) + new PsoStructureEntryInfo(MetaName.Cops, PsoDataType.Structure, 8, 0, (MetaName)2022711333), + new PsoStructureEntryInfo(MetaName.Swat, PsoDataType.Structure, 552, 0, (MetaName)2022711333), + new PsoStructureEntryInfo(MetaName.Army, PsoDataType.Structure, 1096, 0, (MetaName)2022711333) ); case (MetaName)2022711333: return new PsoStructureInfo((MetaName)2022711333, 0, 0, 544, new PsoStructureEntryInfo(MetaName.Situations, PsoDataType.Structure, 8, 0, (MetaName)1181208064), - new PsoStructureEntryInfo((MetaName)2432019232, PsoDataType.Structure, 496, 0, (MetaName)2528332511), - new PsoStructureEntryInfo((MetaName)641071834, PsoDataType.Structure, 520, 0, (MetaName)2528332511) + new PsoStructureEntryInfo(MetaName.AutomobileSpeedModifier, PsoDataType.Structure, 496, 0, (MetaName)2528332511), + new PsoStructureEntryInfo(MetaName.HeliSpeedModifier, PsoDataType.Structure, 520, 0, (MetaName)2528332511) ); case (MetaName)1181208064: return new PsoStructureInfo((MetaName)1181208064, 0, 0, 488, new PsoStructureEntryInfo(MetaName.Default, PsoDataType.Structure, 8, 0, (MetaName)3795144262), - new PsoStructureEntryInfo((MetaName)3094451383, PsoDataType.Structure, 128, 0, (MetaName)3795144262), - new PsoStructureEntryInfo((MetaName)345193988, PsoDataType.Structure, 248, 0, (MetaName)3795144262), - new PsoStructureEntryInfo((MetaName)3499358923, PsoDataType.Structure, 368, 0, (MetaName)3795144262) + new PsoStructureEntryInfo(MetaName.InVehicle, PsoDataType.Structure, 128, 0, (MetaName)3795144262), + new PsoStructureEntryInfo(MetaName.InHeli, PsoDataType.Structure, 248, 0, (MetaName)3795144262), + new PsoStructureEntryInfo(MetaName.InBoat, PsoDataType.Structure, 368, 0, (MetaName)3795144262) ); case (MetaName)3795144262: return new PsoStructureInfo((MetaName)3795144262, 0, 0, 120, - new PsoStructureEntryInfo((MetaName)1188235128, PsoDataType.Structure, 8, 0, (MetaName)2528332511), - new PsoStructureEntryInfo((MetaName)625679404, PsoDataType.Structure, 32, 0, (MetaName)2528332511), - new PsoStructureEntryInfo((MetaName)920840724, PsoDataType.Structure, 56, 0, (MetaName)2528332511), + new PsoStructureEntryInfo(MetaName.SensesRange, PsoDataType.Structure, 8, 0, (MetaName)2528332511), + new PsoStructureEntryInfo(MetaName.IdentificationRange, PsoDataType.Structure, 32, 0, (MetaName)2528332511), + new PsoStructureEntryInfo(MetaName.ShootRateModifier, PsoDataType.Structure, 56, 0, (MetaName)2528332511), new PsoStructureEntryInfo(MetaName.WeaponAccuracy, PsoDataType.Structure, 80, 0, (MetaName)2528332511), - new PsoStructureEntryInfo((MetaName)409082717, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)3234043128, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)2268167532, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)1749910459, PsoDataType.Float, 116, 0, 0) + new PsoStructureEntryInfo(MetaName.WeaponAccuracyModifierForEvasiveMovement, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.WeaponAccuracyModifierForOffScreen, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.WeaponAccuracyModifierForAimedAt, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.MinForDrivebys, PsoDataType.Float, 116, 0, 0) ); case (MetaName)3840146119: return new PsoStructureInfo((MetaName)3840146119, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)296253880, PsoDataType.Structure, 8, 0, (MetaName)2528332511) + new PsoStructureEntryInfo(MetaName.TimeBetweenSpawnAttemptsModifier, PsoDataType.Structure, 8, 0, (MetaName)2528332511) ); case (MetaName)1581603972: return new PsoStructureInfo((MetaName)1581603972, 0, 0, 16, new PsoStructureEntryInfo(MetaName.Enabled, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)473322006, PsoDataType.Bool, 9, 0, 0), + new PsoStructureEntryInfo(MetaName.Witnesses, PsoDataType.Bool, 9, 0, 0), new PsoStructureEntryInfo(MetaName.Crimes, PsoDataType.Bool, 10, 0, 0) ); case (MetaName)4245193745: return new PsoStructureInfo((MetaName)4245193745, 0, 0, 16, - new PsoStructureEntryInfo((MetaName)2905197964, PsoDataType.Float, 8, 0, 0) + new PsoStructureEntryInfo(MetaName.TimeBetweenDifficultyUpdates, PsoDataType.Float, 8, 0, 0) ); case MetaName.CEventGunAimedAt__Tunables: return new PsoStructureInfo(MetaName.CEventGunAimedAt__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)564420500, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2906908712, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.MinDelayTimer, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDelayTimer, PsoDataType.Float, 20, 0, 0) ); case MetaName.CEventGunShot__Tunables: return new PsoStructureInfo(MetaName.CEventGunShot__Tunables, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)564420500, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2906908712, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3483089763, PsoDataType.Float, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.MinDelayTimer, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDelayTimer, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.GunShotThresholdDistance, PsoDataType.Float, 24, 0, 0) ); case MetaName.CEventMeleeAction__Tunables: return new PsoStructureInfo(MetaName.CEventMeleeAction__Tunables, 0, 0, 24, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)564420500, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2906908712, PsoDataType.Float, 20, 0, 0) + new PsoStructureEntryInfo(MetaName.MinDelayTimer, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDelayTimer, PsoDataType.Float, 20, 0, 0) ); case MetaName.CTaskAimAndThrowProjectile__Tunables: return new PsoStructureInfo(MetaName.CTaskAimAndThrowProjectile__Tunables, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3236417550, PsoDataType.Bool, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1407383707, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3153397162, PsoDataType.UInt, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.bEnableGaitAdditive, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinHoldThrowPitch, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.iMaxRandomExplosionTime, PsoDataType.UInt, 24, 0, 0) ); case MetaName.CTaskSwapWeapon__Tunables: return new PsoStructureInfo(MetaName.CTaskSwapWeapon__Tunables, 0, 0, 64, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)4280609914, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1084086108, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1362808676, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2789076521, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)677754437, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)4171399035, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)2230131245, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)1593645740, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)1231407173, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.OnFootClipRate, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.OnFootBlendInDuration, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.LowCoverClipRate, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.LowCoverBlendInDuration, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.HighCoverClipRate, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.HighCoverBlendInDuration, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.ActionClipRate, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.ActionBlendInDuration, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.BlendOutDuration, PsoDataType.Float, 48, 0, 0), new PsoStructureEntryInfo((MetaName)2181619027, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)2950978586, PsoDataType.Bool, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)45502974, PsoDataType.Bool, 57, 0, 0) + new PsoStructureEntryInfo(MetaName.DebugSwapInstantly, PsoDataType.Bool, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.SkipHolsterWeapon, PsoDataType.Bool, 57, 0, 0) ); case MetaName.CTaskAimGunOnFoot__Tunables: return new PsoStructureInfo(MetaName.CTaskAimGunOnFoot__Tunables, 0, 0, 112, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)817834735, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1908604654, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)644208462, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)4243324346, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3879469601, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1822973195, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)1768561713, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2511610049, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)2412774208, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)1555086572, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)794209155, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)1671878115, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)3876119945, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)2495484427, PsoDataType.Float3, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)3684533695, PsoDataType.UInt, 96, 0, 0) + new PsoStructureEntryInfo(MetaName.MinTimeBetweenFiringVariations, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.IdealPitchForFiringVariation, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxPitchDifferenceForFiringVariation, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.AssistedAimOutroTime, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.RunAndGunOutroTime, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.AimOutroTime, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.AimOutroTimeIfAimingOnStick, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.AimOutroMinTaskTimeWhenRunPressed, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.AimingOnStickExitCooldown, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeForRunAndGunOutroDelays, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.DampenRootTargetWeight, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.DampenRootTargetHeight, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.AlternativeAnimBlockedHeight, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.CoverAimOffsetFromBlocked, PsoDataType.Float3, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.DelayTimeWhenOutOfAmmoInScope, PsoDataType.UInt, 96, 0, 0) ); case MetaName.CTaskGun__Tunables: return new PsoStructureInfo(MetaName.CTaskGun__Tunables, 0, 0, 104, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1571509424, PsoDataType.SInt, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2834021629, PsoDataType.SInt, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1300484749, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)433744442, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1522624465, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2841960409, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)2724641994, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2167660448, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)3890597462, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)1782949708, PsoDataType.Bool, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)420989827, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)206502145, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)2838815119, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)4068186391, PsoDataType.String, 68, 7, 0), - new PsoStructureEntryInfo((MetaName)724878846, PsoDataType.String, 72, 7, 0), - new PsoStructureEntryInfo((MetaName)4032674616, PsoDataType.UInt, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)674462637, PsoDataType.UInt, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)3886708440, PsoDataType.UInt, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)1969287622, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.iMinLookAtTime, PsoDataType.SInt, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.iMaxLookAtTime, PsoDataType.SInt, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinTimeBetweenBulletReactions, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxTimeBetweenBulletReactions, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxDistForOverheadReactions, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxAboveHeadForOverheadReactions, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.fBulletReactionPosAdjustmentZ, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.fMinTimeBetweenLookAt, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.fMaxTimeBetweenLookAt, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.bDisable2HandedGetups, PsoDataType.Bool, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeForEyeIk, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeBetweenEyeIkProcesses, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDotToPointGunAtPositionWhenUnableToTurn, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.AssistedAimCamera, PsoDataType.String, 68, 7, 0), + new PsoStructureEntryInfo(MetaName.RunAndGunAimCamera, PsoDataType.String, 72, 7, 0), + new PsoStructureEntryInfo(MetaName.AssistedAimInterpolateInDuration, PsoDataType.UInt, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.RunAndGunInterpolateInDuration, PsoDataType.UInt, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeBetweenOverheadBulletReactions, PsoDataType.UInt, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxTimeInBulletReactionState, PsoDataType.Float, 88, 0, 0), new PsoStructureEntryInfo((MetaName)3228655867, PsoDataType.UInt, 92, 0, 0), new PsoStructureEntryInfo((MetaName)270252777, PsoDataType.UInt, 96, 0, 0) ); case MetaName.CTaskAimGunVehicleDriveBy__Tunables: return new PsoStructureInfo(MetaName.CTaskAimGunVehicleDriveBy__Tunables, 0, 0, 72, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3789052240, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3792438004, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)536817715, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2221861795, PsoDataType.UInt, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)1480451859, PsoDataType.UInt, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1466310013, PsoDataType.UInt, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)939946101, PsoDataType.String, 40, 7, 0), - new PsoStructureEntryInfo((MetaName)3931552272, PsoDataType.String, 44, 7, 0), - new PsoStructureEntryInfo((MetaName)2134287489, PsoDataType.String, 48, 7, 0), - new PsoStructureEntryInfo((MetaName)3728753498, PsoDataType.String, 52, 7, 0), + new PsoStructureEntryInfo(MetaName.MinTimeBetweenInsults, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceToInsult, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDotToInsult, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.MinAimTimeMs, PsoDataType.UInt, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxAimTimeOnStickMs, PsoDataType.UInt, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.AimingOnStickCooldownMs, PsoDataType.UInt, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.BicycleDrivebyFilterId, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo(MetaName.BikeDrivebyFilterId, PsoDataType.String, 44, 7, 0), + new PsoStructureEntryInfo(MetaName.JetskiDrivebyFilterId, PsoDataType.String, 48, 7, 0), + new PsoStructureEntryInfo(MetaName.ParachutingFilterId, PsoDataType.String, 52, 7, 0), new PsoStructureEntryInfo((MetaName)2221302483, PsoDataType.String, 56, 7, 0), new PsoStructureEntryInfo((MetaName)3323392529, PsoDataType.String, 60, 7, 0), new PsoStructureEntryInfo((MetaName)2684719351, PsoDataType.String, 64, 7, 0), @@ -12961,50 +12961,50 @@ namespace CodeWalker.GameFiles case MetaName.CWildlifeManager__Tunables: return new PsoStructureInfo(MetaName.CWildlifeManager__Tunables, 0, 0, 136, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)597953858, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1961626874, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)3368483780, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)2777866816, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3248533699, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)303177901, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)1961260334, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2107629661, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)883567309, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2995052029, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)1328674939, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)3539942532, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)1744844248, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)1094365177, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)3534467233, PsoDataType.Float, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)519277350, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)2825120069, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)798871205, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)1856882404, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)1340414393, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)3846222437, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)1785192888, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)2326003695, PsoDataType.String, 104, 7, 0), - new PsoStructureEntryInfo((MetaName)3940110369, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)422419421, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)4195725397, PsoDataType.UInt, 116, 0, 0), - new PsoStructureEntryInfo((MetaName)750370993, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.BirdHeightMapDeltaMin, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.BirdHeightMapDeltaMax, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.BirdSpawnXYRangeMin, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.BirdSpawnXYRangeMax, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.IncreasedAerialSpawningFactor, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceToSearchForGroundWildlifePoints, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceToSearchForGroundWildlifePoints, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenGroundProbes, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.GroundMaterialProbeDepth, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.GroundMaterialProbeOffset, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.GroundMaterialSpawnCoordNormalZTolerance, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.MinDistanceToSearchForAquaticPoints, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.MaxDistanceToSearchForAquaticPoints, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenWaterHeightMapChecks, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.TimeBetweenWaterProbes, PsoDataType.Float, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.WaterProbeDepth, PsoDataType.Float, 76, 0, 0), + new PsoStructureEntryInfo(MetaName.WaterProbeOffset, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.AquaticSpawnDepth, PsoDataType.Float, 84, 0, 0), + new PsoStructureEntryInfo(MetaName.AquaticSpawnMaxHeightAbovePlayer, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.IncreasedAquaticSpawningFactor, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.CloseSpawningViewMultiplier, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.IncreasedGroundWildlifeSpawningFactor, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.SharkModelName, PsoDataType.String, 104, 7, 0), + new PsoStructureEntryInfo(MetaName.DeepWaterThreshold, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.PlayerSwimTimeThreshold, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.MinTimeBetweenSharkDispatches, PsoDataType.UInt, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.SharkAddRangeInViewMin, PsoDataType.Float, 120, 0, 0), new PsoStructureEntryInfo((MetaName)3653722296, PsoDataType.Float, 124, 0, 0), new PsoStructureEntryInfo((MetaName)1235067475, PsoDataType.Float, 128, 0, 0) ); case MetaName.CPopGroupList: return new PsoStructureInfo(MetaName.CPopGroupList, 0, 0, 56, - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1530774378), - new PsoStructureEntryInfo((MetaName)3299118270, PsoDataType.Array, 8, 0, 0), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1530774378), - new PsoStructureEntryInfo((MetaName)3356170168, PsoDataType.Array, 24, 0, (MetaName)2), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CPopulationGroup), + new PsoStructureEntryInfo(MetaName.pedGroups, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CPopulationGroup), + new PsoStructureEntryInfo(MetaName.vehGroups, PsoDataType.Array, 24, 0, (MetaName)2), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo((MetaName)2772741337, PsoDataType.Array, 40, 0, (MetaName)4) + new PsoStructureEntryInfo(MetaName.wildlifeHabitats, PsoDataType.Array, 40, 0, (MetaName)4) ); - case (MetaName)1530774378: - return new PsoStructureInfo((MetaName)1530774378, 0, 0, 40, + case MetaName.CPopulationGroup: + return new PsoStructureInfo(MetaName.CPopulationGroup, 0, 0, 40, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3852980612), - new PsoStructureEntryInfo((MetaName)4042130640, PsoDataType.Array, 16, 0, (MetaName)1), + new PsoStructureEntryInfo(MetaName.models, PsoDataType.Array, 16, 0, (MetaName)1), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)4186696686), new PsoStructureEntryInfo(MetaName.flags, PsoDataType.Flags, 32, 0, (MetaName)2097155) ); @@ -13065,14 +13065,14 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.DrawableIndex, PsoDataType.SInt, 4, 0, 0), new PsoStructureEntryInfo(MetaName.Restriction, PsoDataType.Enum, 8, 0, (MetaName)2065671281) ); - case (MetaName)3721180525: - return new PsoStructureInfo((MetaName)3721180525, 0, 0, 24, + case MetaName.CSlownessZoneManager: + return new PsoStructureInfo(MetaName.CSlownessZoneManager, 0, 0, 24, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1778476350), - new PsoStructureEntryInfo((MetaName)1652130128, PsoDataType.Array, 8, 0, 0) + new PsoStructureEntryInfo(MetaName.aSlownessZone, PsoDataType.Array, 8, 0, 0) ); case (MetaName)1778476350: return new PsoStructureInfo((MetaName)1778476350, 0, 0, 48, - new PsoStructureEntryInfo((MetaName)1231029245, PsoDataType.Structure, 16, 0, MetaName.rage__spdAABB) + new PsoStructureEntryInfo(MetaName.bBox, PsoDataType.Structure, 16, 0, MetaName.rage__spdAABB) ); case MetaName.CScenarioPointManifest: return new PsoStructureInfo(MetaName.CScenarioPointManifest, 0, 0, 56, @@ -13094,20 +13094,20 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 0, 7, 0), new PsoStructureEntryInfo(MetaName.EnabledByDefault, PsoDataType.Bool, 4, 0, 0) ); - case (MetaName)1353902600: - return new PsoStructureInfo((MetaName)1353902600, 0, 0, 16, + case MetaName.strRequestRecording: + return new PsoStructureInfo(MetaName.strRequestRecording, 0, 0, 16, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3356301454), new PsoStructureEntryInfo(MetaName.Requests, PsoDataType.Array, 0, 0, 0) ); case (MetaName)3356301454: return new PsoStructureInfo((MetaName)3356301454, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)4037058594, PsoDataType.Structure, 0, 0, (MetaName)2548004600), + new PsoStructureEntryInfo(MetaName.Resource, PsoDataType.Structure, 0, 0, (MetaName)2548004600), new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.SInt, 24, 0, 0) ); case (MetaName)2548004600: return new PsoStructureInfo((MetaName)2548004600, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)2112595704, PsoDataType.String, 0, 3, 0), - new PsoStructureEntryInfo((MetaName)207195018, PsoDataType.String, 16, 0, (MetaName)524288) + new PsoStructureEntryInfo(MetaName.AssetName, PsoDataType.String, 0, 3, 0), + new PsoStructureEntryInfo(MetaName.Extension, PsoDataType.String, 16, 0, (MetaName)524288) ); case (MetaName)62557530: return new PsoStructureInfo((MetaName)62557530, 0, 0, 16, @@ -13122,17 +13122,17 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.vfxRegion, PsoDataType.String, 16, 7, 0), new PsoStructureEntryInfo((MetaName)1896983690, PsoDataType.UByte, 20, 0, 0), new PsoStructureEntryInfo((MetaName)1856972365, PsoDataType.Enum, 24, 0, (MetaName)1756502932), - new PsoStructureEntryInfo((MetaName)218173601, PsoDataType.Enum, 28, 0, (MetaName)3204395397), - new PsoStructureEntryInfo((MetaName)1915622273, PsoDataType.Enum, 32, 0, (MetaName)4286852891), + new PsoStructureEntryInfo(MetaName.lawResponseTime, PsoDataType.Enum, 28, 0, (MetaName)3204395397), + new PsoStructureEntryInfo(MetaName.lawResponseType, PsoDataType.Enum, 32, 0, (MetaName)4286852891), new PsoStructureEntryInfo((MetaName)218662697, PsoDataType.Enum, 36, 0, (MetaName)4095090001), new PsoStructureEntryInfo(MetaName.vehDirtMin, PsoDataType.Float, 40, 0, 0), new PsoStructureEntryInfo(MetaName.vehDirtMax, PsoDataType.Float, 44, 0, 0), new PsoStructureEntryInfo(MetaName.vehDirtGrowScale, PsoDataType.Float, 48, 0, 0), new PsoStructureEntryInfo(MetaName.pedDirtMin, PsoDataType.Float, 52, 0, 0), new PsoStructureEntryInfo(MetaName.pedDirtMax, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)3463006534, PsoDataType.UByte, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)986658337, PsoDataType.UByte, 61, 0, 0), - new PsoStructureEntryInfo((MetaName)365907991, PsoDataType.UByte, 62, 0, 0), + new PsoStructureEntryInfo(MetaName.dirtRed, PsoDataType.UByte, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.dirtGreen, PsoDataType.UByte, 61, 0, 0), + new PsoStructureEntryInfo(MetaName.dirtBlue, PsoDataType.UByte, 62, 0, 0), new PsoStructureEntryInfo((MetaName)1430479029, PsoDataType.Float, 64, 0, 0), new PsoStructureEntryInfo((MetaName)2056852733, PsoDataType.Float, 68, 0, 0), new PsoStructureEntryInfo((MetaName)1457405649, PsoDataType.Float, 72, 0, 0), @@ -13141,8 +13141,8 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)9361713, PsoDataType.Bool, 84, 0, 0), new PsoStructureEntryInfo((MetaName)2931752685, PsoDataType.Bool, 85, 0, 0) ); - case (MetaName)3016688820: - return new PsoStructureInfo((MetaName)3016688820, 0, 0, 40, + case MetaName.CCoverTuningFile: + return new PsoStructureInfo(MetaName.CCoverTuningFile, 0, 0, 40, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)912106952), new PsoStructureEntryInfo(MetaName.NamedTuningArray, PsoDataType.Array, 8, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3821651387), @@ -13209,8 +13209,8 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.NavMode, PsoDataType.Enum, 12, 2, (MetaName)3971773454), new PsoStructureEntryInfo(MetaName.NavSpeed, PsoDataType.Enum, 13, 2, (MetaName)941086046) ); - case (MetaName)376833625: - return new PsoStructureInfo((MetaName)376833625, 0, 0, 112, + case MetaName.CPedVariationInfo: + return new PsoStructureInfo(MetaName.CPedVariationInfo, 0, 0, 112, new PsoStructureEntryInfo((MetaName)1235281004, PsoDataType.Bool, 0, 0, 0), new PsoStructureEntryInfo((MetaName)4086467184, PsoDataType.Bool, 1, 0, 0), new PsoStructureEntryInfo((MetaName)911147899, PsoDataType.Bool, 2, 0, 0), @@ -13219,17 +13219,17 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)2996560424, PsoDataType.Array, 4, 4, (MetaName)786436), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3538495220), new PsoStructureEntryInfo((MetaName)3796409423, PsoDataType.Array, 16, 0, (MetaName)6), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)253191135), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CPedSelectionSet), new PsoStructureEntryInfo(MetaName.aSelectionSets, PsoDataType.Array, 32, 0, (MetaName)8), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CComponentInfo), new PsoStructureEntryInfo(MetaName.compInfos, PsoDataType.Array, 48, 0, (MetaName)10), - new PsoStructureEntryInfo(MetaName.propInfo, PsoDataType.Structure, 64, 0, (MetaName)2858946626), + new PsoStructureEntryInfo(MetaName.propInfo, PsoDataType.Structure, 64, 0, MetaName.CPedPropInfo), new PsoStructureEntryInfo(MetaName.dlcName, PsoDataType.String, 104, 8, 0) ); - case (MetaName)2858946626: - return new PsoStructureInfo((MetaName)2858946626, 0, 0, 40, + case MetaName.CPedPropInfo: + return new PsoStructureInfo(MetaName.CPedPropInfo, 0, 0, 40, new PsoStructureEntryInfo((MetaName)2598445407, PsoDataType.UByte, 0, 0, 0), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)94549140), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CPedPropMetaData), new PsoStructureEntryInfo((MetaName)3902803273, PsoDataType.Array, 8, 0, (MetaName)1), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CAnchorProps), new PsoStructureEntryInfo(MetaName.aAnchors, PsoDataType.Array, 24, 0, (MetaName)3) @@ -13321,251 +13321,251 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UByte, 0, 0, 0), new PsoStructureEntryInfo(MetaName.components, PsoDataType.Array, 72, 0, (MetaName)9) ); - case (MetaName)3527760993: - return new PsoStructureInfo((MetaName)3527760993, 0, 0, 5296, - new PsoStructureEntryInfo((MetaName)1185457940, PsoDataType.Float, 268, 0, 0), - new PsoStructureEntryInfo((MetaName)399683105, PsoDataType.String, 272, 0, (MetaName)16777216), + case MetaName.rage__cutfCutsceneFile2: + return new PsoStructureInfo(MetaName.rage__cutfCutsceneFile2, 0, 0, 5296, + new PsoStructureEntryInfo(MetaName.fTotalDuration, PsoDataType.Float, 268, 0, 0), + new PsoStructureEntryInfo(MetaName.cFaceDir, PsoDataType.String, 272, 0, (MetaName)16777216), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.UInt, 0, 0, 0), - new PsoStructureEntryInfo((MetaName)2110267871, PsoDataType.Array, 528, 4, (MetaName)262146), - new PsoStructureEntryInfo((MetaName)281069076, PsoDataType.Float3, 544, 0, 0), - new PsoStructureEntryInfo((MetaName)2963173633, PsoDataType.Float, 560, 0, 0), - new PsoStructureEntryInfo((MetaName)2952522139, PsoDataType.String, 564, 0, (MetaName)1572864), - new PsoStructureEntryInfo((MetaName)1493683017, PsoDataType.Float3, 592, 0, 0), - new PsoStructureEntryInfo((MetaName)1263529604, PsoDataType.Float3, 608, 0, 0), + new PsoStructureEntryInfo(MetaName.iCutsceneFlags, PsoDataType.Array, 528, 4, (MetaName)262146), + new PsoStructureEntryInfo(MetaName.vOffset, PsoDataType.Float3, 544, 0, 0), + new PsoStructureEntryInfo(MetaName.fRotation, PsoDataType.Float, 560, 0, 0), + new PsoStructureEntryInfo(MetaName.cExtraRoom, PsoDataType.String, 564, 0, (MetaName)1572864), + new PsoStructureEntryInfo(MetaName.vExtraRoomPos, PsoDataType.Float3, 592, 0, 0), + new PsoStructureEntryInfo(MetaName.vTriggerOffset, PsoDataType.Float3, 608, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), - new PsoStructureEntryInfo((MetaName)1337787258, PsoDataType.Array, 624, 0, (MetaName)9), + new PsoStructureEntryInfo(MetaName.pCutsceneObjects, PsoDataType.Array, 624, 0, (MetaName)9), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), - new PsoStructureEntryInfo((MetaName)1537015366, PsoDataType.Array, 640, 0, (MetaName)11), + new PsoStructureEntryInfo(MetaName.pCutsceneLoadEventList, PsoDataType.Array, 640, 0, (MetaName)11), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), - new PsoStructureEntryInfo((MetaName)873743947, PsoDataType.Array, 656, 0, (MetaName)13), + new PsoStructureEntryInfo(MetaName.pCutsceneEventList, PsoDataType.Array, 656, 0, (MetaName)13), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), - new PsoStructureEntryInfo((MetaName)101111438, PsoDataType.Array, 672, 0, (MetaName)15), - new PsoStructureEntryInfo((MetaName)1956494238, PsoDataType.Structure, 688, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 696, 4, 0), - new PsoStructureEntryInfo((MetaName)1047819622, PsoDataType.SInt, 704, 0, 0), - new PsoStructureEntryInfo((MetaName)398786672, PsoDataType.SInt, 708, 0, 0), + new PsoStructureEntryInfo(MetaName.pCutsceneEventArgsList, PsoDataType.Array, 672, 0, (MetaName)15), + new PsoStructureEntryInfo(MetaName.attributes, PsoDataType.Structure, 688, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 696, 4, 0), + new PsoStructureEntryInfo(MetaName.iRangeStart, PsoDataType.SInt, 704, 0, 0), + new PsoStructureEntryInfo(MetaName.iRangeEnd, PsoDataType.SInt, 708, 0, 0), new PsoStructureEntryInfo((MetaName)4079543520, PsoDataType.SInt, 712, 0, 0), - new PsoStructureEntryInfo((MetaName)3421999474, PsoDataType.Float, 716, 0, 0), - new PsoStructureEntryInfo((MetaName)953346839, PsoDataType.Float, 720, 0, 0), - new PsoStructureEntryInfo((MetaName)3025199107, PsoDataType.Float, 724, 0, 0), - new PsoStructureEntryInfo((MetaName)1910831709, PsoDataType.UInt, 728, 1, 0), + new PsoStructureEntryInfo(MetaName.fSectionByTimeSliceDuration, PsoDataType.Float, 716, 0, 0), + new PsoStructureEntryInfo(MetaName.fFadeOutCutsceneDuration, PsoDataType.Float, 720, 0, 0), + new PsoStructureEntryInfo(MetaName.fFadeInGameDuration, PsoDataType.Float, 724, 0, 0), + new PsoStructureEntryInfo(MetaName.fadeInColor, PsoDataType.UInt, 728, 1, 0), new PsoStructureEntryInfo((MetaName)1783584102, PsoDataType.SInt, 732, 0, 0), new PsoStructureEntryInfo((MetaName)660302675, PsoDataType.SInt, 736, 0, 0), - new PsoStructureEntryInfo((MetaName)473400434, PsoDataType.Float, 740, 0, 0), - new PsoStructureEntryInfo((MetaName)969234229, PsoDataType.Float, 744, 0, 0), - new PsoStructureEntryInfo((MetaName)2234426246, PsoDataType.UInt, 748, 1, 0), + new PsoStructureEntryInfo(MetaName.fFadeOutGameDuration, PsoDataType.Float, 740, 0, 0), + new PsoStructureEntryInfo(MetaName.fFadeInCutsceneDuration, PsoDataType.Float, 744, 0, 0), + new PsoStructureEntryInfo(MetaName.fadeOutColor, PsoDataType.UInt, 748, 1, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Float, 0, 0, 0), - new PsoStructureEntryInfo((MetaName)2618346740, PsoDataType.Array, 752, 0, (MetaName)31), + new PsoStructureEntryInfo(MetaName.cameraCutList, PsoDataType.Array, 752, 0, (MetaName)31), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Float, 0, 0, 0), - new PsoStructureEntryInfo((MetaName)4212477189, PsoDataType.Array, 768, 0, MetaName.FLOAT), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1737539928), - new PsoStructureEntryInfo((MetaName)1452216515, PsoDataType.Array, 784, 1, (MetaName)2621475), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)220202594), + new PsoStructureEntryInfo(MetaName.sectionSplitList, PsoDataType.Array, 768, 0, MetaName.FLOAT), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.rage__cutfCutsceneFile2__SConcatData), + new PsoStructureEntryInfo(MetaName.concatDataList, PsoDataType.Array, 784, 1, (MetaName)2621475), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.vHaltFrequency), new PsoStructureEntryInfo((MetaName)1234565986, PsoDataType.Array, 5280, 0, (MetaName)37) ); - case (MetaName)1334016442: - return new PsoStructureInfo((MetaName)1334016442, 0, 0, 12, - new PsoStructureEntryInfo((MetaName)647685198, PsoDataType.UByte, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)4202662936, PsoDataType.UByte, 9, 0, 0) + case MetaName.rage__parAttributeList: + return new PsoStructureInfo(MetaName.rage__parAttributeList, 0, 0, 12, + new PsoStructureEntryInfo(MetaName.UserData1, PsoDataType.UByte, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.UserData2, PsoDataType.UByte, 9, 0, 0) ); - case (MetaName)1737539928: - return new PsoStructureInfo((MetaName)1737539928, 0, 0, 64, - new PsoStructureEntryInfo((MetaName)3148363891, PsoDataType.String, 0, 7, 0), - new PsoStructureEntryInfo((MetaName)281069076, PsoDataType.Float3, 16, 0, 0), + case MetaName.rage__cutfCutsceneFile2__SConcatData: + return new PsoStructureInfo(MetaName.rage__cutfCutsceneFile2__SConcatData, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.cSceneName, PsoDataType.String, 0, 7, 0), + new PsoStructureEntryInfo(MetaName.vOffset, PsoDataType.Float3, 16, 0, 0), new PsoStructureEntryInfo(MetaName.fStartTime, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)2963173633, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)632986329, PsoDataType.Float, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2689106272, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)1047819622, PsoDataType.SInt, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)398786672, PsoDataType.SInt, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.fRotation, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.fPitch, PsoDataType.Float, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.fRoll, PsoDataType.Float, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.iRangeStart, PsoDataType.SInt, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.iRangeEnd, PsoDataType.SInt, 52, 0, 0), new PsoStructureEntryInfo((MetaName)1999956592, PsoDataType.Bool, 56, 0, 0) ); - case (MetaName)68930034: - return new PsoStructureInfo((MetaName)68930034, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0) + case MetaName.rage__cutfAssetManagerObject: + return new PsoStructureInfo(MetaName.rage__cutfAssetManagerObject, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.iObjectId, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 20, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 32, 4, 0) ); - case (MetaName)162924556: - return new PsoStructureInfo((MetaName)162924556, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0) + case MetaName.rage__cutfAnimationManagerObject: + return new PsoStructureInfo(MetaName.rage__cutfAnimationManagerObject, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.iObjectId, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 20, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 32, 4, 0) ); - case (MetaName)2665839426: - return new PsoStructureInfo((MetaName)2665839426, 0, 0, 64, - new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), - new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 7, 0), + case MetaName.rage__cutfCameraObject: + return new PsoStructureInfo(MetaName.rage__cutfCameraObject, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.iObjectId, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 20, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo(MetaName.cName, PsoDataType.String, 40, 7, 0), new PsoStructureEntryInfo((MetaName)1324611103, PsoDataType.UInt, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)1690336060, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)3688268720, PsoDataType.Float, 60, 0, 0) + new PsoStructureEntryInfo(MetaName.fNearDrawDistance, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.fFarDrawDistance, PsoDataType.Float, 60, 0, 0) ); - case (MetaName)462317467: - return new PsoStructureInfo((MetaName)462317467, 0, 0, 120, - new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), - new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 7, 0), - new PsoStructureEntryInfo((MetaName)692898807, PsoDataType.String, 48, 7, 0), + case MetaName.rage__cutfPedModelObject: + return new PsoStructureInfo(MetaName.rage__cutfPedModelObject, 0, 0, 120, + new PsoStructureEntryInfo(MetaName.iObjectId, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 20, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo(MetaName.cName, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo(MetaName.StreamingName, PsoDataType.String, 48, 7, 0), new PsoStructureEntryInfo((MetaName)1324611103, PsoDataType.UInt, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)2982365822, PsoDataType.String, 64, 7, 0), - new PsoStructureEntryInfo((MetaName)3382327909, PsoDataType.String, 68, 7, 0), - new PsoStructureEntryInfo((MetaName)2016919075, PsoDataType.String, 72, 7, 0), - new PsoStructureEntryInfo((MetaName)1251016415, PsoDataType.String, 84, 7, 0), - new PsoStructureEntryInfo((MetaName)2221257278, PsoDataType.String, 88, 7, 0), - new PsoStructureEntryInfo((MetaName)2464163899, PsoDataType.String, 96, 7, 0), - new PsoStructureEntryInfo((MetaName)259776703, PsoDataType.Bool, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)2435794203, PsoDataType.Bool, 105, 0, 0), - new PsoStructureEntryInfo((MetaName)1741651815, PsoDataType.Bool, 106, 0, 0), - new PsoStructureEntryInfo((MetaName)555167272, PsoDataType.String, 108, 7, 0), - new PsoStructureEntryInfo((MetaName)3123042911, PsoDataType.String, 112, 7, 0) + new PsoStructureEntryInfo(MetaName.cAnimExportCtrlSpecFile, PsoDataType.String, 64, 7, 0), + new PsoStructureEntryInfo(MetaName.cFaceExportCtrlSpecFile, PsoDataType.String, 68, 7, 0), + new PsoStructureEntryInfo(MetaName.cAnimCompressionFile, PsoDataType.String, 72, 7, 0), + new PsoStructureEntryInfo(MetaName.cHandle, PsoDataType.String, 84, 7, 0), + new PsoStructureEntryInfo(MetaName.typeFile, PsoDataType.String, 88, 7, 0), + new PsoStructureEntryInfo(MetaName.overrideFaceAnimationFilename, PsoDataType.String, 96, 7, 0), + new PsoStructureEntryInfo(MetaName.bFoundFaceAnimation, PsoDataType.Bool, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.bFaceAndBodyAreMerged, PsoDataType.Bool, 105, 0, 0), + new PsoStructureEntryInfo(MetaName.bOverrideFaceAnimation, PsoDataType.Bool, 106, 0, 0), + new PsoStructureEntryInfo(MetaName.faceAnimationNodeName, PsoDataType.String, 108, 7, 0), + new PsoStructureEntryInfo(MetaName.faceAttributesFilename, PsoDataType.String, 112, 7, 0) ); - case (MetaName)2296489151: - return new PsoStructureInfo((MetaName)2296489151, 0, 0, 96, - new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), - new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 7, 0), - new PsoStructureEntryInfo((MetaName)692898807, PsoDataType.String, 48, 7, 0), + case MetaName.rage__cutfPropModelObject: + return new PsoStructureInfo(MetaName.rage__cutfPropModelObject, 0, 0, 96, + new PsoStructureEntryInfo(MetaName.iObjectId, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 20, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo(MetaName.cName, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo(MetaName.StreamingName, PsoDataType.String, 48, 7, 0), new PsoStructureEntryInfo((MetaName)1324611103, PsoDataType.UInt, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)2982365822, PsoDataType.String, 64, 7, 0), - new PsoStructureEntryInfo((MetaName)3382327909, PsoDataType.String, 68, 7, 0), - new PsoStructureEntryInfo((MetaName)2016919075, PsoDataType.String, 72, 7, 0), - new PsoStructureEntryInfo((MetaName)1251016415, PsoDataType.String, 84, 7, 0), - new PsoStructureEntryInfo((MetaName)2221257278, PsoDataType.String, 88, 7, 0) + new PsoStructureEntryInfo(MetaName.cAnimExportCtrlSpecFile, PsoDataType.String, 64, 7, 0), + new PsoStructureEntryInfo(MetaName.cFaceExportCtrlSpecFile, PsoDataType.String, 68, 7, 0), + new PsoStructureEntryInfo(MetaName.cAnimCompressionFile, PsoDataType.String, 72, 7, 0), + new PsoStructureEntryInfo(MetaName.cHandle, PsoDataType.String, 84, 7, 0), + new PsoStructureEntryInfo(MetaName.typeFile, PsoDataType.String, 88, 7, 0) ); - case (MetaName)1024212505: - return new PsoStructureInfo((MetaName)1024212505, 0, 0, 128, - new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), - new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 7, 0), + case MetaName.rage__cutfBlockingBoundsObject: + return new PsoStructureInfo(MetaName.rage__cutfBlockingBoundsObject, 0, 0, 128, + new PsoStructureEntryInfo(MetaName.iObjectId, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 20, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo(MetaName.cName, PsoDataType.String, 40, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Float3, 0, 0, 0), - new PsoStructureEntryInfo((MetaName)2013990738, PsoDataType.Array, 48, 4, (MetaName)262148), - new PsoStructureEntryInfo((MetaName)4242690206, PsoDataType.Float, 112, 0, 0) + new PsoStructureEntryInfo(MetaName.vCorners, PsoDataType.Array, 48, 4, (MetaName)262148), + new PsoStructureEntryInfo(MetaName.fHeight, PsoDataType.Float, 112, 0, 0) ); - case (MetaName)204478241: - return new PsoStructureInfo((MetaName)204478241, 0, 0, 64, - new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), - new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 3, 0), - new PsoStructureEntryInfo((MetaName)1293919506, PsoDataType.Float, 56, 0, 0) + case MetaName.rage__cutfAudioObject: + return new PsoStructureInfo(MetaName.rage__cutfAudioObject, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.iObjectId, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 20, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo(MetaName.cName, PsoDataType.String, 40, 3, 0), + new PsoStructureEntryInfo(MetaName.fOffset, PsoDataType.Float, 56, 0, 0) ); - case (MetaName)979016746: - return new PsoStructureInfo((MetaName)979016746, 0, 0, 80, - new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), - new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 7, 0), - new PsoStructureEntryInfo((MetaName)1835178760, PsoDataType.Float3, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)315509558, PsoDataType.Float, 64, 0, 0) + case MetaName.rage__cutfHiddenModelObject: + return new PsoStructureInfo(MetaName.rage__cutfHiddenModelObject, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.iObjectId, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 20, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo(MetaName.cName, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo(MetaName.vPosition, PsoDataType.Float3, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.fRadius, PsoDataType.Float, 64, 0, 0) ); - case (MetaName)2083739024: - return new PsoStructureInfo((MetaName)2083739024, 0, 0, 80, - new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), - new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 3, 0), + case MetaName.rage__cutfOverlayObject: + return new PsoStructureInfo(MetaName.rage__cutfOverlayObject, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.iObjectId, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 20, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo(MetaName.cName, PsoDataType.String, 40, 3, 0), new PsoStructureEntryInfo((MetaName)4294123624, PsoDataType.String, 56, 3, 0), - new PsoStructureEntryInfo((MetaName)211975133, PsoDataType.UInt, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.iOverlayType, PsoDataType.UInt, 72, 0, 0), new PsoStructureEntryInfo((MetaName)2549745289, PsoDataType.String, 76, 7, 0) ); - case (MetaName)307438872: - return new PsoStructureInfo((MetaName)307438872, 0, 0, 48, - new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), - new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 7, 0) + case MetaName.rage__cutfSubtitleObject: + return new PsoStructureInfo(MetaName.rage__cutfSubtitleObject, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.iObjectId, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 20, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo(MetaName.cName, PsoDataType.String, 40, 7, 0) ); - case (MetaName)1781777258: - return new PsoStructureInfo((MetaName)1781777258, 0, 0, 240, - new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 16, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), - new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 32, 0, (MetaName)4194304), - new PsoStructureEntryInfo((MetaName)3788713491, PsoDataType.Float3, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)3313809689, PsoDataType.Float3, 128, 0, 0), - new PsoStructureEntryInfo((MetaName)1835178760, PsoDataType.Float3, 144, 0, 0), - new PsoStructureEntryInfo((MetaName)3937240636, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)391886097, PsoDataType.Float, 164, 0, 0), - new PsoStructureEntryInfo((MetaName)1743670592, PsoDataType.Float, 168, 0, 0), - new PsoStructureEntryInfo((MetaName)3963210786, PsoDataType.Float, 172, 0, 0), + case MetaName.rage__cutfLightObject: + return new PsoStructureInfo(MetaName.rage__cutfLightObject, 0, 0, 240, + new PsoStructureEntryInfo(MetaName.iObjectId, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 16, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo(MetaName.cName, PsoDataType.String, 32, 0, (MetaName)4194304), + new PsoStructureEntryInfo(MetaName.vDirection, PsoDataType.Float3, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.vColour, PsoDataType.Float3, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.vPosition, PsoDataType.Float3, 144, 0, 0), + new PsoStructureEntryInfo(MetaName.fIntensity, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.fFallOff, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo(MetaName.fConeAngle, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo(MetaName.fVolumeIntensity, PsoDataType.Float, 172, 0, 0), new PsoStructureEntryInfo((MetaName)75610905, PsoDataType.Float, 176, 0, 0), - new PsoStructureEntryInfo((MetaName)1810161173, PsoDataType.Float, 180, 0, 0), - new PsoStructureEntryInfo((MetaName)1078847881, PsoDataType.Float, 184, 0, 0), - new PsoStructureEntryInfo((MetaName)1698708840, PsoDataType.Float, 188, 0, 0), + new PsoStructureEntryInfo(MetaName.fCoronaSize, PsoDataType.Float, 180, 0, 0), + new PsoStructureEntryInfo(MetaName.fCoronaIntensity, PsoDataType.Float, 184, 0, 0), + new PsoStructureEntryInfo(MetaName.fCoronaZBias, PsoDataType.Float, 188, 0, 0), new PsoStructureEntryInfo((MetaName)2725338958, PsoDataType.Float, 192, 0, 0), new PsoStructureEntryInfo((MetaName)1342101, PsoDataType.Float, 196, 0, 0), - new PsoStructureEntryInfo((MetaName)1233248098, PsoDataType.SInt, 200, 0, 0), - new PsoStructureEntryInfo((MetaName)2477126074, PsoDataType.SInt, 204, 0, 0), + new PsoStructureEntryInfo(MetaName.iLightType, PsoDataType.SInt, 200, 0, 0), + new PsoStructureEntryInfo(MetaName.iLightProperty, PsoDataType.SInt, 204, 0, 0), new PsoStructureEntryInfo((MetaName)2104882549, PsoDataType.SInt, 208, 0, 0), - new PsoStructureEntryInfo((MetaName)1994003276, PsoDataType.SInt, 212, 0, 0), + new PsoStructureEntryInfo(MetaName.TextureKey, PsoDataType.SInt, 212, 0, 0), new PsoStructureEntryInfo((MetaName)34975788, PsoDataType.SInt, 216, 0, 0), new PsoStructureEntryInfo((MetaName)2428927641, PsoDataType.UInt, 220, 0, 0), new PsoStructureEntryInfo((MetaName)2759730476, PsoDataType.UInt, 224, 0, 0), new PsoStructureEntryInfo((MetaName)1437992521, PsoDataType.UShort, 228, 0, 0), - new PsoStructureEntryInfo((MetaName)2375647859, PsoDataType.Bool, 230, 0, 0) + new PsoStructureEntryInfo(MetaName.bStatic, PsoDataType.Bool, 230, 0, 0) ); - case (MetaName)425672361: - return new PsoStructureInfo((MetaName)425672361, 0, 0, 208, - new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), - new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 7, 0), - new PsoStructureEntryInfo((MetaName)3788713491, PsoDataType.Float3, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)3313809689, PsoDataType.Float3, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)1835178760, PsoDataType.Float3, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)3937240636, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)391886097, PsoDataType.Float, 116, 0, 0), - new PsoStructureEntryInfo((MetaName)1743670592, PsoDataType.Float, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)3963210786, PsoDataType.Float, 124, 0, 0), + case MetaName.rage__cutfAnimatedLightObject: + return new PsoStructureInfo(MetaName.rage__cutfAnimatedLightObject, 0, 0, 208, + new PsoStructureEntryInfo(MetaName.iObjectId, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 20, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo(MetaName.cName, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo(MetaName.vDirection, PsoDataType.Float3, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.vColour, PsoDataType.Float3, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.vPosition, PsoDataType.Float3, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.fIntensity, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.fFallOff, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.fConeAngle, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.fVolumeIntensity, PsoDataType.Float, 124, 0, 0), new PsoStructureEntryInfo((MetaName)75610905, PsoDataType.Float, 128, 0, 0), - new PsoStructureEntryInfo((MetaName)1810161173, PsoDataType.Float, 132, 0, 0), - new PsoStructureEntryInfo((MetaName)1078847881, PsoDataType.Float, 136, 0, 0), - new PsoStructureEntryInfo((MetaName)1698708840, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo(MetaName.fCoronaSize, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo(MetaName.fCoronaIntensity, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo(MetaName.fCoronaZBias, PsoDataType.Float, 140, 0, 0), new PsoStructureEntryInfo((MetaName)2725338958, PsoDataType.Float, 144, 0, 0), new PsoStructureEntryInfo((MetaName)1342101, PsoDataType.Float, 148, 0, 0), - new PsoStructureEntryInfo((MetaName)1632842349, PsoDataType.Float, 152, 0, 0), - new PsoStructureEntryInfo((MetaName)1233248098, PsoDataType.SInt, 156, 0, 0), - new PsoStructureEntryInfo((MetaName)2477126074, PsoDataType.SInt, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.fShadowBlur, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.iLightType, PsoDataType.SInt, 156, 0, 0), + new PsoStructureEntryInfo(MetaName.iLightProperty, PsoDataType.SInt, 160, 0, 0), new PsoStructureEntryInfo((MetaName)2104882549, PsoDataType.SInt, 164, 0, 0), - new PsoStructureEntryInfo((MetaName)1994003276, PsoDataType.SInt, 168, 0, 0), + new PsoStructureEntryInfo(MetaName.TextureKey, PsoDataType.SInt, 168, 0, 0), new PsoStructureEntryInfo((MetaName)2428927641, PsoDataType.UInt, 176, 0, 0), new PsoStructureEntryInfo((MetaName)2759730476, PsoDataType.UInt, 180, 0, 0), - new PsoStructureEntryInfo((MetaName)2375647859, PsoDataType.Bool, 186, 0, 0), + new PsoStructureEntryInfo(MetaName.bStatic, PsoDataType.Bool, 186, 0, 0), new PsoStructureEntryInfo((MetaName)1324611103, PsoDataType.UInt, 192, 0, 0) ); - case (MetaName)3787091478: - return new PsoStructureInfo((MetaName)3787091478, 0, 0, 56, - new PsoStructureEntryInfo((MetaName)1591208228, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3149172832, PsoDataType.SInt, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)4289498236, PsoDataType.SInt, 24, 0, 0), + case MetaName.rage__cutfObjectIdEvent: + return new PsoStructureInfo(MetaName.rage__cutfObjectIdEvent, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.fTime, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.iEventId, PsoDataType.SInt, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.iEventArgsIndex, PsoDataType.SInt, 24, 0, 0), new PsoStructureEntryInfo((MetaName)3754530640, PsoDataType.Structure, 32, 3, 0), - new PsoStructureEntryInfo((MetaName)2164901921, PsoDataType.UInt, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2962717212, PsoDataType.Bool, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 48, 0, 0) + new PsoStructureEntryInfo(MetaName.StickyId, PsoDataType.UInt, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.IsChild, PsoDataType.Bool, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.iObjectId, PsoDataType.SInt, 48, 0, 0) ); - case (MetaName)2095750852: - return new PsoStructureInfo((MetaName)2095750852, 0, 0, 56, - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), - new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)505193016, PsoDataType.SInt, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2231657823, PsoDataType.SInt, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)467155910, PsoDataType.SInt, 48, 0, 0) + case MetaName.rage__cutfObjectVariationEventArgs: + return new PsoStructureInfo(MetaName.rage__cutfObjectVariationEventArgs, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 12, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo(MetaName.iObjectId, PsoDataType.SInt, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.iComponent, PsoDataType.SInt, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.iDrawable, PsoDataType.SInt, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.iTexture, PsoDataType.SInt, 48, 0, 0) ); - case (MetaName)534106966: - return new PsoStructureInfo((MetaName)534106966, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0) + case MetaName.rage__cutfEventArgs: + return new PsoStructureInfo(MetaName.rage__cutfEventArgs, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 12, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 24, 4, 0) ); case (MetaName)1016128875: return new PsoStructureInfo((MetaName)1016128875, 0, 0, 16, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), - new PsoStructureEntryInfo((MetaName)2880561169, PsoDataType.Array, 0, 0, 0) + new PsoStructureEntryInfo(MetaName.Items, PsoDataType.Array, 0, 0, 0) ); case (MetaName)1626675902: return new PsoStructureInfo((MetaName)1626675902, 0, 0, 24, @@ -13577,44 +13577,44 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 8, 0), new PsoStructureEntryInfo(MetaName.Value, PsoDataType.Float, 16, 0, 0) ); - case (MetaName)3528166281: - return new PsoStructureInfo((MetaName)3528166281, 0, 0, 80, - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), - new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 32, 7, 0), - new PsoStructureEntryInfo((MetaName)281069076, PsoDataType.Float3, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2963173633, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)632986329, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)2689106272, PsoDataType.Float, 72, 0, 0) + case MetaName.rage__cutfLoadSceneEventArgs: + return new PsoStructureInfo(MetaName.rage__cutfLoadSceneEventArgs, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 12, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo(MetaName.cName, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo(MetaName.vOffset, PsoDataType.Float3, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.fRotation, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.fPitch, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.fRoll, PsoDataType.Float, 72, 0, 0) ); - case (MetaName)3132728576: - return new PsoStructureInfo((MetaName)3132728576, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), - new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 32, 0, 0) + case MetaName.rage__cutfObjectIdEventArgs: + return new PsoStructureInfo(MetaName.rage__cutfObjectIdEventArgs, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 12, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo(MetaName.iObjectId, PsoDataType.SInt, 32, 0, 0) ); - case (MetaName)1377451264: - return new PsoStructureInfo((MetaName)1377451264, 0, 0, 48, - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), + case MetaName.rage__cutfObjectIdListEventArgs: + return new PsoStructureInfo(MetaName.rage__cutfObjectIdListEventArgs, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 12, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 24, 4, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.SInt, 0, 0, 0), - new PsoStructureEntryInfo((MetaName)1236477325, PsoDataType.Array, 32, 0, (MetaName)2) + new PsoStructureEntryInfo(MetaName.iObjectIdList, PsoDataType.Array, 32, 0, (MetaName)2) ); - case (MetaName)1160694198: - return new PsoStructureInfo((MetaName)1160694198, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), - new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 32, 7, 0) + case MetaName.rage__cutfNameEventArgs: + return new PsoStructureInfo(MetaName.rage__cutfNameEventArgs, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 12, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo(MetaName.cName, PsoDataType.String, 32, 7, 0) ); - case (MetaName)1032739425: - return new PsoStructureInfo((MetaName)1032739425, 0, 0, 272, - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), - new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 32, 7, 0), - new PsoStructureEntryInfo((MetaName)1835178760, PsoDataType.Float3, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)1522820057, PsoDataType.Float4, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)1690336060, PsoDataType.Float, 80, 0, 0), - new PsoStructureEntryInfo((MetaName)3688268720, PsoDataType.Float, 84, 0, 0), + case MetaName.rage__cutfCameraCutEventArgs: + return new PsoStructureInfo(MetaName.rage__cutfCameraCutEventArgs, 0, 0, 272, + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 12, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo(MetaName.cName, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo(MetaName.vPosition, PsoDataType.Float3, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.vRotationQuaternion, PsoDataType.Float4, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.fNearDrawDistance, PsoDataType.Float, 80, 0, 0), + new PsoStructureEntryInfo(MetaName.fFarDrawDistance, PsoDataType.Float, 84, 0, 0), new PsoStructureEntryInfo((MetaName)3931395097, PsoDataType.Float, 88, 0, 0), new PsoStructureEntryInfo((MetaName)3995079835, PsoDataType.Float, 92, 0, 0), new PsoStructureEntryInfo((MetaName)2269408044, PsoDataType.Float, 96, 0, 0), @@ -13629,239 +13629,239 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)872811427, PsoDataType.Float, 132, 0, 0), new PsoStructureEntryInfo((MetaName)1832730358, PsoDataType.Float, 136, 0, 0), new PsoStructureEntryInfo((MetaName)1099319606, PsoDataType.Float, 140, 0, 0), - new PsoStructureEntryInfo((MetaName)2577299971, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo(MetaName.ExposurePush, PsoDataType.Float, 144, 0, 0), new PsoStructureEntryInfo((MetaName)3267149471, PsoDataType.Float, 148, 0, 0), new PsoStructureEntryInfo((MetaName)3063864558, PsoDataType.Float, 152, 0, 0), new PsoStructureEntryInfo((MetaName)71148997, PsoDataType.Float, 156, 0, 0), new PsoStructureEntryInfo((MetaName)2331545500, PsoDataType.Float, 160, 0, 0), new PsoStructureEntryInfo((MetaName)4246749927, PsoDataType.Float, 164, 0, 0), new PsoStructureEntryInfo((MetaName)1253384283, PsoDataType.Float, 168, 0, 0), - new PsoStructureEntryInfo((MetaName)3093400296, PsoDataType.Float, 172, 0, 0), + new PsoStructureEntryInfo(MetaName.BloomMax, PsoDataType.Float, 172, 0, 0), new PsoStructureEntryInfo((MetaName)4064056507, PsoDataType.Bool, 176, 0, 0), new PsoStructureEntryInfo((MetaName)2666061934, PsoDataType.Bool, 177, 0, 0), new PsoStructureEntryInfo((MetaName)22229384, PsoDataType.Bool, 178, 0, 0), new PsoStructureEntryInfo((MetaName)2168731396, PsoDataType.Bool, 179, 0, 0), - new PsoStructureEntryInfo((MetaName)1142553590, PsoDataType.Structure, 192, 0, (MetaName)2335868993), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1378659296), + new PsoStructureEntryInfo(MetaName.CharacterLight, PsoDataType.Structure, 192, 0, MetaName.rage__cutfCameraCutCharacterLightParams), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.rage__cutfCameraCutTimeOfDayDofModifier), new PsoStructureEntryInfo((MetaName)3502363965, PsoDataType.Array, 256, 0, (MetaName)34) ); - case (MetaName)2335868993: - return new PsoStructureInfo((MetaName)2335868993, 0, 0, 64, + case MetaName.rage__cutfCameraCutCharacterLightParams: + return new PsoStructureInfo(MetaName.rage__cutfCameraCutCharacterLightParams, 0, 0, 64, new PsoStructureEntryInfo((MetaName)1299282176, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)3788713491, PsoDataType.Float3, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3313809689, PsoDataType.Float3, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)3937240636, PsoDataType.Float, 48, 0, 0) + new PsoStructureEntryInfo(MetaName.vDirection, PsoDataType.Float3, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.vColour, PsoDataType.Float3, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.fIntensity, PsoDataType.Float, 48, 0, 0) ); - case (MetaName)3215026609: - return new PsoStructureInfo((MetaName)3215026609, 0, 0, 64, - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), - new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 32, 7, 0), - new PsoStructureEntryInfo((MetaName)1537748314, PsoDataType.SInt, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2643240271, PsoDataType.SInt, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)2279341021, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2810110094, PsoDataType.SInt, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)1271134520, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)1836544003, PsoDataType.Float, 60, 0, 0) + case MetaName.rage__cutfSubtitleEventArgs: + return new PsoStructureInfo(MetaName.rage__cutfSubtitleEventArgs, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 12, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo(MetaName.cName, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo(MetaName.iLanguageID, PsoDataType.SInt, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.iTransitionIn, PsoDataType.SInt, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.fTransitionInDuration, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.iTransitionOut, PsoDataType.SInt, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.fTransitionOutDuration, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.fSubtitleDuration, PsoDataType.Float, 60, 0, 0) ); - case (MetaName)80958073: - return new PsoStructureInfo((MetaName)80958073, 0, 0, 48, - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), - new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 32, 3, 0) + case MetaName.rage__cutfFinalNameEventArgs: + return new PsoStructureInfo(MetaName.rage__cutfFinalNameEventArgs, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 12, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo(MetaName.cName, PsoDataType.String, 32, 3, 0) ); - case (MetaName)4198689239: - return new PsoStructureInfo((MetaName)4198689239, 0, 0, 48, - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), - new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 7, 0) + case MetaName.rage__cutfObjectIdNameEventArgs: + return new PsoStructureInfo(MetaName.rage__cutfObjectIdNameEventArgs, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 12, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo(MetaName.iObjectId, PsoDataType.SInt, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.cName, PsoDataType.String, 40, 7, 0) ); - case (MetaName)220202594: - return new PsoStructureInfo((MetaName)220202594, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)3148363891, PsoDataType.String, 0, 7, 0), + case MetaName.vHaltFrequency: + return new PsoStructureInfo(MetaName.vHaltFrequency, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.cSceneName, PsoDataType.String, 0, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.SInt, 0, 0, 0), - new PsoStructureEntryInfo((MetaName)580974885, PsoDataType.Array, 8, 0, (MetaName)1) + new PsoStructureEntryInfo(MetaName.frames, PsoDataType.Array, 8, 0, (MetaName)1) ); - case (MetaName)2042362651: - return new PsoStructureInfo((MetaName)2042362651, 0, 0, 120, - new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), - new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 7, 0), - new PsoStructureEntryInfo((MetaName)692898807, PsoDataType.String, 48, 7, 0), + case MetaName.rage__cutfVehicleModelObject: + return new PsoStructureInfo(MetaName.rage__cutfVehicleModelObject, 0, 0, 120, + new PsoStructureEntryInfo(MetaName.iObjectId, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 20, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo(MetaName.cName, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo(MetaName.StreamingName, PsoDataType.String, 48, 7, 0), new PsoStructureEntryInfo((MetaName)1324611103, PsoDataType.UInt, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)2982365822, PsoDataType.String, 64, 7, 0), - new PsoStructureEntryInfo((MetaName)3382327909, PsoDataType.String, 68, 7, 0), - new PsoStructureEntryInfo((MetaName)2016919075, PsoDataType.String, 72, 7, 0), - new PsoStructureEntryInfo((MetaName)1251016415, PsoDataType.String, 84, 7, 0), - new PsoStructureEntryInfo((MetaName)2221257278, PsoDataType.String, 88, 7, 0), + new PsoStructureEntryInfo(MetaName.cAnimExportCtrlSpecFile, PsoDataType.String, 64, 7, 0), + new PsoStructureEntryInfo(MetaName.cFaceExportCtrlSpecFile, PsoDataType.String, 68, 7, 0), + new PsoStructureEntryInfo(MetaName.cAnimCompressionFile, PsoDataType.String, 72, 7, 0), + new PsoStructureEntryInfo(MetaName.cHandle, PsoDataType.String, 84, 7, 0), + new PsoStructureEntryInfo(MetaName.typeFile, PsoDataType.String, 88, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 3, 0), - new PsoStructureEntryInfo((MetaName)1501402472, PsoDataType.Array, 96, 0, (MetaName)11), + new PsoStructureEntryInfo(MetaName.cRemoveBoneNameList, PsoDataType.Array, 96, 0, (MetaName)11), new PsoStructureEntryInfo((MetaName)3754821582, PsoDataType.Bool, 112, 0, 0) ); - case (MetaName)2587541103: - return new PsoStructureInfo((MetaName)2587541103, 0, 0, 48, - new PsoStructureEntryInfo((MetaName)1591208228, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)3149172832, PsoDataType.SInt, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)4289498236, PsoDataType.SInt, 24, 0, 0), + case MetaName.rage__cutfEvent: + return new PsoStructureInfo(MetaName.rage__cutfEvent, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.fTime, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.iEventId, PsoDataType.SInt, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.iEventArgsIndex, PsoDataType.SInt, 24, 0, 0), new PsoStructureEntryInfo((MetaName)3754530640, PsoDataType.Structure, 32, 3, 0), - new PsoStructureEntryInfo((MetaName)2164901921, PsoDataType.UInt, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)2962717212, PsoDataType.Bool, 44, 0, 0) + new PsoStructureEntryInfo(MetaName.StickyId, PsoDataType.UInt, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.IsChild, PsoDataType.Bool, 44, 0, 0) ); - case (MetaName)852034231: - return new PsoStructureInfo((MetaName)852034231, 0, 0, 80, - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), + case MetaName.rage__cutfCascadeShadowEventArgs: + return new PsoStructureInfo(MetaName.rage__cutfCascadeShadowEventArgs, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 12, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 24, 4, 0), new PsoStructureEntryInfo((MetaName)1262004121, PsoDataType.String, 32, 7, 0), new PsoStructureEntryInfo(MetaName.position, PsoDataType.Float3, 48, 0, 0), new PsoStructureEntryInfo(MetaName.radius, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)3980674446, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)311972855, PsoDataType.SInt, 72, 0, 0), + new PsoStructureEntryInfo(MetaName.interpTime, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.cascadeIndex, PsoDataType.SInt, 72, 0, 0), new PsoStructureEntryInfo(MetaName.enabled, PsoDataType.Bool, 76, 0, 0), new PsoStructureEntryInfo((MetaName)2862808673, PsoDataType.Bool, 77, 0, 0) ); - case (MetaName)1609567909: - return new PsoStructureInfo((MetaName)1609567909, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), - new PsoStructureEntryInfo((MetaName)198751340, PsoDataType.Float, 32, 0, 0) + case MetaName.rage__cutfFloatValueEventArgs: + return new PsoStructureInfo(MetaName.rage__cutfFloatValueEventArgs, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 12, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo(MetaName.fValue, PsoDataType.Float, 32, 0, 0) ); - case (MetaName)3750235532: - return new PsoStructureInfo((MetaName)3750235532, 0, 0, 72, - new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), - new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 7, 0), - new PsoStructureEntryInfo((MetaName)692898807, PsoDataType.String, 48, 7, 0), + case MetaName.rage__cutfAnimatedParticleEffectObject: + return new PsoStructureInfo(MetaName.rage__cutfAnimatedParticleEffectObject, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.iObjectId, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 20, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo(MetaName.cName, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo(MetaName.StreamingName, PsoDataType.String, 48, 7, 0), new PsoStructureEntryInfo((MetaName)1324611103, PsoDataType.UInt, 56, 0, 0), new PsoStructureEntryInfo((MetaName)1844888803, PsoDataType.String, 64, 7, 0) ); - case (MetaName)3028272477: - return new PsoStructureInfo((MetaName)3028272477, 0, 0, 104, - new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), - new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 7, 0), - new PsoStructureEntryInfo((MetaName)692898807, PsoDataType.String, 48, 7, 0), + case MetaName.rage__cutfWeaponModelObject: + return new PsoStructureInfo(MetaName.rage__cutfWeaponModelObject, 0, 0, 104, + new PsoStructureEntryInfo(MetaName.iObjectId, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 20, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo(MetaName.cName, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo(MetaName.StreamingName, PsoDataType.String, 48, 7, 0), new PsoStructureEntryInfo((MetaName)1324611103, PsoDataType.UInt, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)2982365822, PsoDataType.String, 64, 7, 0), - new PsoStructureEntryInfo((MetaName)3382327909, PsoDataType.String, 68, 7, 0), - new PsoStructureEntryInfo((MetaName)2016919075, PsoDataType.String, 72, 7, 0), - new PsoStructureEntryInfo((MetaName)1251016415, PsoDataType.String, 84, 7, 0), - new PsoStructureEntryInfo((MetaName)2221257278, PsoDataType.String, 88, 7, 0), + new PsoStructureEntryInfo(MetaName.cAnimExportCtrlSpecFile, PsoDataType.String, 64, 7, 0), + new PsoStructureEntryInfo(MetaName.cFaceExportCtrlSpecFile, PsoDataType.String, 68, 7, 0), + new PsoStructureEntryInfo(MetaName.cAnimCompressionFile, PsoDataType.String, 72, 7, 0), + new PsoStructureEntryInfo(MetaName.cHandle, PsoDataType.String, 84, 7, 0), + new PsoStructureEntryInfo(MetaName.typeFile, PsoDataType.String, 88, 7, 0), new PsoStructureEntryInfo((MetaName)4160620743, PsoDataType.UInt, 96, 0, 0) ); - case (MetaName)222809975: - return new PsoStructureInfo((MetaName)222809975, 0, 0, 80, - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), + case MetaName.rage__cutfPlayParticleEffectEventArgs: + return new PsoStructureInfo(MetaName.rage__cutfPlayParticleEffectEventArgs, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 12, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 24, 4, 0), new PsoStructureEntryInfo((MetaName)1039931786, PsoDataType.Float4, 32, 0, 0), new PsoStructureEntryInfo((MetaName)583681460, PsoDataType.Float3, 48, 0, 0), new PsoStructureEntryInfo((MetaName)867510818, PsoDataType.SInt, 64, 0, 0), new PsoStructureEntryInfo((MetaName)3936668519, PsoDataType.UShort, 68, 0, 0) ); - case (MetaName)2483426166: - return new PsoStructureInfo((MetaName)2483426166, 0, 0, 40, - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), - new PsoStructureEntryInfo((MetaName)208974921, PsoDataType.Bool, 32, 0, 0) + case MetaName.rage__cutfBoolValueEventArgs: + return new PsoStructureInfo(MetaName.rage__cutfBoolValueEventArgs, 0, 0, 40, + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 12, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo(MetaName.bValue, PsoDataType.Bool, 32, 0, 0) ); - case (MetaName)578480161: - return new PsoStructureInfo((MetaName)578480161, 0, 0, 80, - new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), - new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 7, 0), - new PsoStructureEntryInfo((MetaName)692898807, PsoDataType.String, 48, 7, 0), - new PsoStructureEntryInfo((MetaName)2268451071, PsoDataType.Float3, 64, 0, 0) + case MetaName.rage__cutfRayfireObject: + return new PsoStructureInfo(MetaName.rage__cutfRayfireObject, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.iObjectId, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 20, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo(MetaName.cName, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo(MetaName.StreamingName, PsoDataType.String, 48, 7, 0), + new PsoStructureEntryInfo(MetaName.vStartPosition, PsoDataType.Float3, 64, 0, 0) ); - case (MetaName)1696721139: - return new PsoStructureInfo((MetaName)1696721139, 0, 0, 64, - new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), - new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 7, 0), - new PsoStructureEntryInfo((MetaName)692898807, PsoDataType.String, 48, 7, 0), + case MetaName.rage__cutfParticleEffectObject: + return new PsoStructureInfo(MetaName.rage__cutfParticleEffectObject, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.iObjectId, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 20, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo(MetaName.cName, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo(MetaName.StreamingName, PsoDataType.String, 48, 7, 0), new PsoStructureEntryInfo((MetaName)1844888803, PsoDataType.String, 56, 7, 0) ); - case (MetaName)576081308: - return new PsoStructureInfo((MetaName)576081308, 0, 0, 64, - new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), - new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 7, 0), - new PsoStructureEntryInfo((MetaName)692898807, PsoDataType.String, 48, 7, 0), - new PsoStructureEntryInfo((MetaName)2789976084, PsoDataType.UInt, 56, 0, 0) + case MetaName.rage__cutfDecalObject: + return new PsoStructureInfo(MetaName.rage__cutfDecalObject, 0, 0, 64, + new PsoStructureEntryInfo(MetaName.iObjectId, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 20, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo(MetaName.cName, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo(MetaName.StreamingName, PsoDataType.String, 48, 7, 0), + new PsoStructureEntryInfo(MetaName.RenderId, PsoDataType.UInt, 56, 0, 0) ); - case (MetaName)3570809234: - return new PsoStructureInfo((MetaName)3570809234, 0, 0, 80, - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), - new PsoStructureEntryInfo((MetaName)1835178760, PsoDataType.Float3, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)330442780, PsoDataType.Float4, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)658992148, PsoDataType.Float, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)4242690206, PsoDataType.Float, 68, 0, 0), - new PsoStructureEntryInfo((MetaName)3346932687, PsoDataType.UInt, 72, 1, 0), - new PsoStructureEntryInfo((MetaName)2257773206, PsoDataType.Float, 76, 0, 0) + case MetaName.rage__cutfDecalEventArgs: + return new PsoStructureInfo(MetaName.rage__cutfDecalEventArgs, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 12, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo(MetaName.vPosition, PsoDataType.Float3, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.vRotation, PsoDataType.Float4, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.fWidth, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.fHeight, PsoDataType.Float, 68, 0, 0), + new PsoStructureEntryInfo(MetaName.Colour, PsoDataType.UInt, 72, 1, 0), + new PsoStructureEntryInfo(MetaName.fLifeTime, PsoDataType.Float, 76, 0, 0) ); - case (MetaName)2841702621: - return new PsoStructureInfo((MetaName)2841702621, 0, 0, 48, - new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), - new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 7, 0) + case MetaName.rage__cutfScreenFadeObject: + return new PsoStructureInfo(MetaName.rage__cutfScreenFadeObject, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.iObjectId, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 20, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo(MetaName.cName, PsoDataType.String, 40, 7, 0) ); - case (MetaName)918254035: - return new PsoStructureInfo((MetaName)918254035, 0, 0, 72, - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), - new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)4067992989, PsoDataType.SInt, 40, 0, 0), + case MetaName.rage__cutfVehicleVariationEventArgs: + return new PsoStructureInfo(MetaName.rage__cutfVehicleVariationEventArgs, 0, 0, 72, + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 12, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo(MetaName.iObjectId, PsoDataType.SInt, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.iMainBodyColour, PsoDataType.SInt, 40, 0, 0), new PsoStructureEntryInfo((MetaName)1237172464, PsoDataType.SInt, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)1609620374, PsoDataType.SInt, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.iSpecularColour, PsoDataType.SInt, 48, 0, 0), new PsoStructureEntryInfo((MetaName)2225359196, PsoDataType.SInt, 52, 0, 0), new PsoStructureEntryInfo((MetaName)2747538743, PsoDataType.SInt, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)756943177, PsoDataType.SInt, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)2453634574, PsoDataType.SInt, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)3834082948, PsoDataType.Float, 68, 0, 0) + new PsoStructureEntryInfo(MetaName.iLivery, PsoDataType.SInt, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.iLivery2, PsoDataType.SInt, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.fDirtLevel, PsoDataType.Float, 68, 0, 0) ); case (MetaName)557437386: return new PsoStructureInfo((MetaName)557437386, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 8, 0), new PsoStructureEntryInfo(MetaName.Value, PsoDataType.String, 16, 3, 0) ); - case (MetaName)303942334: - return new PsoStructureInfo((MetaName)303942334, 0, 0, 48, - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), - new PsoStructureEntryInfo((MetaName)198751340, PsoDataType.Float, 32, 0, 0), + case MetaName.rage__cutfScreenFadeEventArgs: + return new PsoStructureInfo(MetaName.rage__cutfScreenFadeEventArgs, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 12, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo(MetaName.fValue, PsoDataType.Float, 32, 0, 0), new PsoStructureEntryInfo(MetaName.color, PsoDataType.UInt, 40, 1, 0) ); - case (MetaName)3654996547: - return new PsoStructureInfo((MetaName)3654996547, 0, 0, 48, - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), + case MetaName.rage__cutfTriggerLightEffectEventArgs: + return new PsoStructureInfo(MetaName.rage__cutfTriggerLightEffectEventArgs, 0, 0, 48, + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 12, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 24, 4, 0), new PsoStructureEntryInfo((MetaName)867510818, PsoDataType.SInt, 32, 0, 0), new PsoStructureEntryInfo((MetaName)3936668519, PsoDataType.UShort, 36, 0, 0), new PsoStructureEntryInfo((MetaName)734609027, PsoDataType.String, 40, 7, 0) ); - case (MetaName)4113944278: - return new PsoStructureInfo((MetaName)4113944278, 0, 0, 56, - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 12, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 24, 4, 0), - new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 32, 0, 0), + case MetaName.rage__cutfVehicleExtraEventArgs: + return new PsoStructureInfo(MetaName.rage__cutfVehicleExtraEventArgs, 0, 0, 56, + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 12, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 24, 4, 0), + new PsoStructureEntryInfo(MetaName.iObjectId, PsoDataType.SInt, 32, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.SInt, 0, 0, 0), - new PsoStructureEntryInfo((MetaName)814194086, PsoDataType.Array, 40, 0, (MetaName)3) + new PsoStructureEntryInfo(MetaName.pExtraBoneIds, PsoDataType.Array, 40, 0, (MetaName)3) ); - case (MetaName)989168939: - return new PsoStructureInfo((MetaName)989168939, 0, 0, 80, - new PsoStructureEntryInfo((MetaName)1657245540, PsoDataType.SInt, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)1107288906, PsoDataType.Structure, 20, 0, (MetaName)1334016442), - new PsoStructureEntryInfo((MetaName)2237184102, PsoDataType.Structure, 32, 4, 0), - new PsoStructureEntryInfo((MetaName)1286194959, PsoDataType.String, 40, 7, 0), - new PsoStructureEntryInfo((MetaName)1835178760, PsoDataType.Float3, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)315509558, PsoDataType.Float, 64, 0, 0) + case MetaName.rage__cutfFixupModelObject: + return new PsoStructureInfo(MetaName.rage__cutfFixupModelObject, 0, 0, 80, + new PsoStructureEntryInfo(MetaName.iObjectId, PsoDataType.SInt, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 20, 0, MetaName.rage__parAttributeList), + new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 32, 4, 0), + new PsoStructureEntryInfo(MetaName.cName, PsoDataType.String, 40, 7, 0), + new PsoStructureEntryInfo(MetaName.vPosition, PsoDataType.Float3, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.fRadius, PsoDataType.Float, 64, 0, 0) ); case MetaName.CPackFileMetaData: return new PsoStructureInfo(MetaName.CPackFileMetaData, 0, 0, 96, @@ -13951,21 +13951,21 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.StartImapFile, PsoDataType.String, 264, 3, 0), new PsoStructureEntryInfo(MetaName.EndImapFile, PsoDataType.String, 280, 3, 0), new PsoStructureEntryInfo(MetaName.PtFxAssetName, PsoDataType.String, 296, 3, 0), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)1980345114), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CCompEntityAnims), new PsoStructureEntryInfo(MetaName.Animations, PsoDataType.Array, 312, 0, (MetaName)13) ); - case (MetaName)1980345114: - return new PsoStructureInfo((MetaName)1980345114, 0, 0, 216, + case MetaName.CCompEntityAnims: + return new PsoStructureInfo(MetaName.CCompEntityAnims, 0, 0, 216, new PsoStructureEntryInfo(MetaName.AnimDict, PsoDataType.String, 0, 0, (MetaName)4194304), new PsoStructureEntryInfo(MetaName.AnimName, PsoDataType.String, 64, 0, (MetaName)4194304), new PsoStructureEntryInfo(MetaName.AnimatedModel, PsoDataType.String, 128, 0, (MetaName)4194304), new PsoStructureEntryInfo(MetaName.punchInPhase, PsoDataType.Float, 192, 0, 0), new PsoStructureEntryInfo(MetaName.punchOutPhase, PsoDataType.Float, 196, 0, 0), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3430328684), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CCompEntityEffectsData), new PsoStructureEntryInfo(MetaName.effectsData, PsoDataType.Array, 200, 0, (MetaName)5) ); - case (MetaName)3430328684: - return new PsoStructureInfo((MetaName)3430328684, 0, 0, 160, + case MetaName.CCompEntityEffectsData: + return new PsoStructureInfo(MetaName.CCompEntityEffectsData, 0, 0, 160, new PsoStructureEntryInfo(MetaName.fxType, PsoDataType.UInt, 0, 0, 0), new PsoStructureEntryInfo(MetaName.fxOffsetPos, PsoDataType.Float3, 16, 0, 0), new PsoStructureEntryInfo(MetaName.fxOffsetRot, PsoDataType.Float4, 32, 0, 0), @@ -14195,56 +14195,56 @@ namespace CodeWalker.GameFiles case MetaName.camMotionBlurSettingsMetadata: return new PsoStructureInfo(MetaName.camMotionBlurSettingsMetadata, 0, 0, 64, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)3274038425, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)1743155234, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1328935990, PsoDataType.Float, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3242284698, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)938189370, PsoDataType.Float, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)1317618698, PsoDataType.Float, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)304164673, PsoDataType.UInt, 40, 0, 0), + new PsoStructureEntryInfo(MetaName.MovementMotionBlurMinSpeed, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.MovementMotionBlurMaxSpeed, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.MovementMotionBlurMaxStrength, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.DamageMotionBlurMinDamage, PsoDataType.Float, 28, 0, 0), + new PsoStructureEntryInfo(MetaName.DamageMotionBlurMaxDamage, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.DamageMotionBlurMaxStrength, PsoDataType.Float, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.DamageMotionBlurDuration, PsoDataType.UInt, 40, 0, 0), new PsoStructureEntryInfo((MetaName)3109021193, PsoDataType.Float, 44, 0, 0), new PsoStructureEntryInfo((MetaName)2711268798, PsoDataType.Float, 48, 0, 0), new PsoStructureEntryInfo((MetaName)960288180, PsoDataType.Float, 52, 0, 0), new PsoStructureEntryInfo((MetaName)3693477470, PsoDataType.UInt, 56, 0, 0) ); - case (MetaName)2211164655: - return new PsoStructureInfo((MetaName)2211164655, 0, 0, 16, - new PsoStructureEntryInfo((MetaName)1511687083, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)415335014, PsoDataType.Float, 12, 0, 0) + case MetaName.camVehicleRocketSettings: + return new PsoStructureInfo(MetaName.camVehicleRocketSettings, 0, 0, 16, + new PsoStructureEntryInfo(MetaName.ShakeRef, PsoDataType.String, 8, 7, 0), + new PsoStructureEntryInfo(MetaName.ShakeAmplitude, PsoDataType.Float, 12, 0, 0) ); case MetaName.camThirdPersonCameraMetadataQuadrupedalHeightSpring: return new PsoStructureInfo(MetaName.camThirdPersonCameraMetadataQuadrupedalHeightSpring, 0, 0, 24, - new PsoStructureEntryInfo((MetaName)651835053, PsoDataType.Bool, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)4163819120, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)731206835, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.ShouldApply, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringConstant, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.SpringDampingRatio, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo((MetaName)1065492607, PsoDataType.Float, 20, 0, 0) ); - case (MetaName)2380636687: - return new PsoStructureInfo((MetaName)2380636687, 0, 0, 40, + case MetaName.camInterpolatorMetadata: + return new PsoStructureInfo(MetaName.camInterpolatorMetadata, 0, 0, 40, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.Duration, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)2993575128, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)4042229056, PsoDataType.Float, 24, 0, 0), + new PsoStructureEntryInfo(MetaName.EaseIn, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.EaseOut, PsoDataType.Float, 24, 0, 0), new PsoStructureEntryInfo(MetaName.Start, PsoDataType.Float, 28, 0, 0), new PsoStructureEntryInfo(MetaName.End, PsoDataType.Float, 32, 0, 0) ); case MetaName.camAnimSceneDirectorMetadata: return new PsoStructureInfo(MetaName.camAnimSceneDirectorMetadata, 0, 0, 32, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)1966573275, PsoDataType.Bool, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.CanBePaused, PsoDataType.Bool, 16, 0, 0), new PsoStructureEntryInfo((MetaName)2406434970, PsoDataType.String, 24, 7, 0) ); - case (MetaName)665455491: - return new PsoStructureInfo((MetaName)665455491, 0, 0, 24, - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3154226565), + case MetaName.NonFlyableAreaArray: + return new PsoStructureInfo(MetaName.NonFlyableAreaArray, 0, 0, 24, + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.NonFlyableArea), new PsoStructureEntryInfo(MetaName.areas, PsoDataType.Array, 8, 0, 0) ); - case (MetaName)3154226565: - return new PsoStructureInfo((MetaName)3154226565, 0, 0, 32, + case MetaName.NonFlyableArea: + return new PsoStructureInfo(MetaName.NonFlyableArea, 0, 0, 32, new PsoStructureEntryInfo((MetaName)2473579981, PsoDataType.Float4, 16, 0, 0) ); - case (MetaName)3584713396: - return new PsoStructureInfo((MetaName)3584713396, 0, 0, 80, + case MetaName.CAssassinsDispatch__Tunables: + return new PsoStructureInfo(MetaName.CAssassinsDispatch__Tunables, 0, 0, 80, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo((MetaName)2394623568, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo((MetaName)3368196277, PsoDataType.Float, 20, 0, 0), @@ -14265,7 +14265,7 @@ namespace CodeWalker.GameFiles case MetaName.CTaskNMBuoyancy__Tunables: return new PsoStructureInfo(MetaName.CTaskNMBuoyancy__Tunables, 0, 0, 48, new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)124792981, PsoDataType.Structure, 16, 0, (MetaName)3749122641) + new PsoStructureEntryInfo(MetaName.BlendOutThreshold, PsoDataType.Structure, 16, 0, (MetaName)3749122641) ); case (MetaName)932638721: return new PsoStructureInfo((MetaName)932638721, 0, 0, 56, @@ -14609,30 +14609,30 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo(MetaName.JOB_BIG, 0), new PsoEnumEntryInfo(MetaName.JOB_MED, 1), new PsoEnumEntryInfo(MetaName.JOB_SMALL, 2), - new PsoEnumEntryInfo((MetaName)1877679104, 3), - new PsoEnumEntryInfo((MetaName)2980984179, 4), - new PsoEnumEntryInfo((MetaName)298596333, 5), - new PsoEnumEntryInfo((MetaName)652367616, 6), - new PsoEnumEntryInfo((MetaName)2308938833, 7), - new PsoEnumEntryInfo((MetaName)3292874000, 8), - new PsoEnumEntryInfo((MetaName)1961485429, 9), - new PsoEnumEntryInfo((MetaName)394130841, 10), - new PsoEnumEntryInfo((MetaName)4072415756, 11), - new PsoEnumEntryInfo((MetaName)1792396879, 12), - new PsoEnumEntryInfo((MetaName)980984444, 13), - new PsoEnumEntryInfo((MetaName)1218436764, 14) + new PsoEnumEntryInfo(MetaName.NAME_BIG, 3), + new PsoEnumEntryInfo(MetaName.NAME_MED, 4), + new PsoEnumEntryInfo(MetaName.NAME_SMALL, 5), + new PsoEnumEntryInfo(MetaName.SPACE_BIG, 6), + new PsoEnumEntryInfo(MetaName.SPACE_MED, 7), + new PsoEnumEntryInfo(MetaName.SPACE_SMALL, 8), + new PsoEnumEntryInfo(MetaName.SPACE_END, 9), + new PsoEnumEntryInfo(MetaName.SPRITE_1, 10), + new PsoEnumEntryInfo(MetaName.LEGALS, 11), + new PsoEnumEntryInfo(MetaName.AUDIO_NAME, 12), + new PsoEnumEntryInfo(MetaName.AUDIO_LEGALS, 13), + new PsoEnumEntryInfo(MetaName.JOB_AND_NAME_MED, 14) ); case MetaName.DataFileType: return new PsoEnumInfo(MetaName.DataFileType, 1, new PsoEnumEntryInfo(MetaName.RPF_FILE, 0), - new PsoEnumEntryInfo((MetaName)3422262499, 1), + new PsoEnumEntryInfo(MetaName.IDE_FILE, 1), new PsoEnumEntryInfo((MetaName)4115202587, 2), new PsoEnumEntryInfo(MetaName.IPL_FILE, 3), new PsoEnumEntryInfo(MetaName.PERMANENT_ITYP_FILE, 4), new PsoEnumEntryInfo((MetaName)4175147664, 5), new PsoEnumEntryInfo(MetaName.HANDLING_FILE, 6), new PsoEnumEntryInfo(MetaName.VEHICLEEXTRAS_FILE, 7), - new PsoEnumEntryInfo((MetaName)1244900227, 8), + new PsoEnumEntryInfo(MetaName.CHINESE_SHUFFLING_CHECKS_FILE, 8), new PsoEnumEntryInfo(MetaName.PEDSTREAM_FILE, 9), new PsoEnumEntryInfo(MetaName.CARCOLS_FILE, 10), new PsoEnumEntryInfo(MetaName.POPGRP_FILE, 11), @@ -14640,17 +14640,17 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo((MetaName)3783701680, 13), new PsoEnumEntryInfo(MetaName.POPSCHED_FILE, 14), new PsoEnumEntryInfo(MetaName.ZONEBIND_FILE, 15), - new PsoEnumEntryInfo((MetaName)2322405299, 16), - new PsoEnumEntryInfo((MetaName)1691493964, 17), - new PsoEnumEntryInfo((MetaName)1339784773, 18), + new PsoEnumEntryInfo(MetaName.RADIO_FILE, 16), + new PsoEnumEntryInfo(MetaName.EXTRAMAP_CONVERSION_OCC_FILE, 17), + new PsoEnumEntryInfo(MetaName.THROWNWEAPONINFO_FILE, 18), new PsoEnumEntryInfo((MetaName)2041822787, 19), new PsoEnumEntryInfo(MetaName.PED_PERSONALITY_FILE, 20), - new PsoEnumEntryInfo((MetaName)1804477999, 21), - new PsoEnumEntryInfo((MetaName)321643698, 22), - new PsoEnumEntryInfo((MetaName)1803244175, 23), - new PsoEnumEntryInfo((MetaName)153829429, 24), + new PsoEnumEntryInfo(MetaName.PED_PERCEPTION_FILE, 21), + new PsoEnumEntryInfo(MetaName.VEHICLE_CAMERA_OFFSETS_FILE, 22), + new PsoEnumEntryInfo(MetaName.FRONTEND_MENU_FILE, 23), + new PsoEnumEntryInfo(MetaName.LEADERBOARD_DATA_FILE, 24), new PsoEnumEntryInfo((MetaName)1431237327, 25), - new PsoEnumEntryInfo((MetaName)3850710962, 26), + new PsoEnumEntryInfo(MetaName.NETWORKOPTIONS_FILE, 26), new PsoEnumEntryInfo(MetaName.TIMECYCLE_FILE, 27), new PsoEnumEntryInfo(MetaName.TIMECYCLEMOD_FILE, 28), new PsoEnumEntryInfo(MetaName.WEATHER_FILE, 29), @@ -14661,26 +14661,26 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo(MetaName.VFX_SETTINGS_FILE, 34), new PsoEnumEntryInfo(MetaName.SP_STATS_DISPLAY_LIST_FILE, 35), new PsoEnumEntryInfo(MetaName.MP_STATS_DISPLAY_LIST_FILE, 36), - new PsoEnumEntryInfo((MetaName)915034040, 37), - new PsoEnumEntryInfo((MetaName)3897970480, 38), - new PsoEnumEntryInfo((MetaName)1815909929, 39), - new PsoEnumEntryInfo((MetaName)1987285695, 40), - new PsoEnumEntryInfo((MetaName)2221411686, 41), + new PsoEnumEntryInfo(MetaName.PED_VARS_FILE, 37), + new PsoEnumEntryInfo(MetaName.DISABLE_FILE, 38), + new PsoEnumEntryInfo(MetaName.BUILDING_META_DISPLACEMENT_FILE, 39), + new PsoEnumEntryInfo(MetaName.HUD_TXD_FILE, 40), + new PsoEnumEntryInfo(MetaName.FRONTEND_DAT_FILE, 41), new PsoEnumEntryInfo((MetaName)3993726615, 42), new PsoEnumEntryInfo(MetaName.TIME_FILE, 43), new PsoEnumEntryInfo(MetaName.BLOODFX_FILE, 44), new PsoEnumEntryInfo(MetaName.ENTITYFX_FILE, 45), new PsoEnumEntryInfo(MetaName.EXPLOSIONFX_FILE, 46), new PsoEnumEntryInfo(MetaName.MATERIALFX_FILE, 47), - new PsoEnumEntryInfo((MetaName)775482934, 48), - new PsoEnumEntryInfo((MetaName)2701401283, 49), - new PsoEnumEntryInfo((MetaName)2889043007, 50), - new PsoEnumEntryInfo((MetaName)2374071028, 51), - new PsoEnumEntryInfo((MetaName)2737334773, 52), - new PsoEnumEntryInfo((MetaName)1714450686, 53), - new PsoEnumEntryInfo((MetaName)4183131447, 54), - new PsoEnumEntryInfo((MetaName)3947749085, 55), - new PsoEnumEntryInfo((MetaName)3685712067, 56), + new PsoEnumEntryInfo(MetaName.MOTION_TASK_DATA_FILE, 48), + new PsoEnumEntryInfo(MetaName.DEFAULT_TASK_DATA_FILE, 49), + new PsoEnumEntryInfo(MetaName.MOUNT_TUNE_FILE, 50), + new PsoEnumEntryInfo(MetaName.PED_BOUNDS_FILE, 51), + new PsoEnumEntryInfo(MetaName.PED_HEALTH_FILE, 52), + new PsoEnumEntryInfo(MetaName.PED_COMPONENT_SETS_FILE, 53), + new PsoEnumEntryInfo(MetaName.PED_IK_SETTINGS_FILE, 54), + new PsoEnumEntryInfo(MetaName.PED_TASK_DATA_FILE, 55), + new PsoEnumEntryInfo(MetaName.PED_SPECIAL_ABILITIES_FILE, 56), new PsoEnumEntryInfo(MetaName.WHEELFX_FILE, 57), new PsoEnumEntryInfo(MetaName.WEAPONFX_FILE, 58), new PsoEnumEntryInfo(MetaName.DECALS_FILE, 59), @@ -14698,26 +14698,26 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo(MetaName.PED_METADATA_FILE, 71), new PsoEnumEntryInfo(MetaName.WEAPON_METADATA_FILE, 72), new PsoEnumEntryInfo(MetaName.VEHICLE_METADATA_FILE, 73), - new PsoEnumEntryInfo((MetaName)1977530558, 74), - new PsoEnumEntryInfo((MetaName)3996479808, 75), - new PsoEnumEntryInfo((MetaName)3511689339, 76), - new PsoEnumEntryInfo((MetaName)3376025535, 77), + new PsoEnumEntryInfo(MetaName.DISPATCH_DATA_FILE, 74), + new PsoEnumEntryInfo(MetaName.DEFORMABLE_OBJECTS_FILE, 75), + new PsoEnumEntryInfo(MetaName.TUNABLE_OBJECTS_FILE, 76), + new PsoEnumEntryInfo(MetaName.PED_NAV_CAPABILITES_FILE, 77), new PsoEnumEntryInfo(MetaName.WEAPONINFO_FILE, 78), new PsoEnumEntryInfo(MetaName.WEAPONCOMPONENTSINFO_FILE, 79), new PsoEnumEntryInfo(MetaName.LOADOUTS_FILE, 80), - new PsoEnumEntryInfo((MetaName)3015019398, 81), - new PsoEnumEntryInfo((MetaName)2957501757, 82), - new PsoEnumEntryInfo((MetaName)276092270, 83), + new PsoEnumEntryInfo(MetaName.FIRINGPATTERNS_FILE, 81), + new PsoEnumEntryInfo(MetaName.MOTIVATIONS_FILE, 82), + new PsoEnumEntryInfo(MetaName.SCENARIO_POINTS_FILE, 83), new PsoEnumEntryInfo(MetaName.SCENARIO_POINTS_PSO_FILE, 84), - new PsoEnumEntryInfo((MetaName)265895563, 85), - new PsoEnumEntryInfo((MetaName)4254420265, 86), - new PsoEnumEntryInfo((MetaName)569488699, 87), - new PsoEnumEntryInfo((MetaName)1322995281, 88), - new PsoEnumEntryInfo((MetaName)1575806881, 89), - new PsoEnumEntryInfo((MetaName)2585891657, 90), - new PsoEnumEntryInfo((MetaName)1221077490, 91), - new PsoEnumEntryInfo((MetaName)2488014020, 92), - new PsoEnumEntryInfo((MetaName)873638153, 93), + new PsoEnumEntryInfo(MetaName.STREAMING_FILE, 85), + new PsoEnumEntryInfo(MetaName.STREAMING_FILE_PLATFORM_PS3, 86), + new PsoEnumEntryInfo(MetaName.STREAMING_FILE_PLATFORM_XENON, 87), + new PsoEnumEntryInfo(MetaName.STREAMING_FILE_PLATFORM_OTHER, 88), + new PsoEnumEntryInfo(MetaName.PED_BRAWLING_STYLE_FILE, 89), + new PsoEnumEntryInfo(MetaName.AMBIENT_PED_MODEL_SET_FILE, 90), + new PsoEnumEntryInfo(MetaName.AMBIENT_PROP_MODEL_SET_FILE, 91), + new PsoEnumEntryInfo(MetaName.AMBIENT_VEHICLE_MODEL_SET_FILE, 92), + new PsoEnumEntryInfo(MetaName.LADDER_METADATA_FILE, 93), new PsoEnumEntryInfo((MetaName)4108615940, 94), new PsoEnumEntryInfo(MetaName.SLOWNESS_ZONES_FILE, 95), new PsoEnumEntryInfo(MetaName.LIQUIDFX_FILE, 96), @@ -14728,7 +14728,7 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo(MetaName.SCRIPTFX_FILE, 101), new PsoEnumEntryInfo(MetaName.VFXREGIONINFO_FILE, 102), new PsoEnumEntryInfo(MetaName.VFXINTERIORINFO_FILE, 103), - new PsoEnumEntryInfo((MetaName)2801332849, 104), + new PsoEnumEntryInfo(MetaName.CAMERA_METADATA_FILE, 104), new PsoEnumEntryInfo(MetaName.STREET_VEHICLE_ASSOCIATION_FILE, 105), new PsoEnumEntryInfo(MetaName.VFXWEAPONINFO_FILE, 106), new PsoEnumEntryInfo(MetaName.EXPLOSION_INFO_FILE, 107), @@ -14738,54 +14738,54 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo(MetaName.MP_STATS_UI_LIST_FILE, 111), new PsoEnumEntryInfo(MetaName.OBJ_COVER_TUNING_FILE, 112), new PsoEnumEntryInfo(MetaName.STREAMING_REQUEST_LISTS_FILE, 113), - new PsoEnumEntryInfo((MetaName)1504533439, 114), + new PsoEnumEntryInfo(MetaName.PLAYER_CARD_SETUP, 114), new PsoEnumEntryInfo(MetaName.WORLD_HEIGHTMAP_FILE, 115), new PsoEnumEntryInfo(MetaName.WORLD_WATERHEIGHT_FILE, 116), new PsoEnumEntryInfo(MetaName.PED_OVERLAY_FILE, 117), new PsoEnumEntryInfo(MetaName.WEAPON_ANIMATIONS_FILE, 118), new PsoEnumEntryInfo(MetaName.VEHICLE_POPULATION_FILE, 119), - new PsoEnumEntryInfo((MetaName)1586102416, 120), - new PsoEnumEntryInfo((MetaName)1389081087, 121), - new PsoEnumEntryInfo((MetaName)3648540414, 122), - new PsoEnumEntryInfo((MetaName)2747161193, 123), - new PsoEnumEntryInfo((MetaName)1160967041, 124), - new PsoEnumEntryInfo((MetaName)322779061, 125), - new PsoEnumEntryInfo((MetaName)595808921, 126), - new PsoEnumEntryInfo((MetaName)2040342322, 127), - new PsoEnumEntryInfo((MetaName)873568416, 128), - new PsoEnumEntryInfo((MetaName)607800534, 129), - new PsoEnumEntryInfo((MetaName)387140454, 130), - new PsoEnumEntryInfo((MetaName)2229907729, 131), + new PsoEnumEntryInfo(MetaName.ACTION_TABLE_DEFINITIONS, 120), + new PsoEnumEntryInfo(MetaName.ACTION_TABLE_RESULTS, 121), + new PsoEnumEntryInfo(MetaName.ACTION_TABLE_IMPULSES, 122), + new PsoEnumEntryInfo(MetaName.ACTION_TABLE_RUMBLES, 123), + new PsoEnumEntryInfo(MetaName.ACTION_TABLE_INTERRELATIONS, 124), + new PsoEnumEntryInfo(MetaName.ACTION_TABLE_HOMINGS, 125), + new PsoEnumEntryInfo(MetaName.ACTION_TABLE_DAMAGES, 126), + new PsoEnumEntryInfo(MetaName.ACTION_TABLE_STRIKE_BONES, 127), + new PsoEnumEntryInfo(MetaName.ACTION_TABLE_BRANCHES, 128), + new PsoEnumEntryInfo(MetaName.ACTION_TABLE_STEALTH_KILLS, 129), + new PsoEnumEntryInfo(MetaName.ACTION_TABLE_VFX, 130), + new PsoEnumEntryInfo(MetaName.ACTION_TABLE_FACIAL_ANIM_SETS, 131), new PsoEnumEntryInfo(MetaName.VEHGEN_MARKUP_FILE, 132), - new PsoEnumEntryInfo((MetaName)1241304438, 133), + new PsoEnumEntryInfo(MetaName.PED_COMPONENT_CLOTH_FILE, 133), new PsoEnumEntryInfo(MetaName.TATTOO_SHOP_DLC_FILE, 134), new PsoEnumEntryInfo(MetaName.VEHICLE_VARIATION_FILE, 135), new PsoEnumEntryInfo(MetaName.CONTENT_UNLOCKING_META_FILE, 136), new PsoEnumEntryInfo(MetaName.SHOP_PED_APPAREL_META_FILE, 137), new PsoEnumEntryInfo(MetaName.AUDIO_SOUNDDATA, 138), - new PsoEnumEntryInfo((MetaName)2270570848, 139), + new PsoEnumEntryInfo(MetaName.AUDIO_CURVEDATA, 139), new PsoEnumEntryInfo(MetaName.AUDIO_GAMEDATA, 140), new PsoEnumEntryInfo(MetaName.AUDIO_DYNAMIXDATA, 141), new PsoEnumEntryInfo(MetaName.AUDIO_SPEECHDATA, 142), new PsoEnumEntryInfo(MetaName.AUDIO_SYNTHDATA, 143), new PsoEnumEntryInfo(MetaName.AUDIO_WAVEPACK, 144), new PsoEnumEntryInfo(MetaName.CLIP_SETS_FILE, 145), - new PsoEnumEntryInfo((MetaName)3354018708, 146), + new PsoEnumEntryInfo(MetaName.EXPRESSION_SETS_FILE, 146), new PsoEnumEntryInfo((MetaName)1714317514, 147), new PsoEnumEntryInfo((MetaName)1603688191, 148), new PsoEnumEntryInfo(MetaName.VEHICLE_SHOP_DLC_FILE, 149), new PsoEnumEntryInfo(MetaName.WEAPON_SHOP_INFO_METADATA_FILE, 150), new PsoEnumEntryInfo((MetaName)2609475948, 151), - new PsoEnumEntryInfo((MetaName)1309368403, 152), - new PsoEnumEntryInfo((MetaName)648947982, 153), - new PsoEnumEntryInfo((MetaName)2127547113, 154), - new PsoEnumEntryInfo((MetaName)2324879915, 155), + new PsoEnumEntryInfo(MetaName.CONTROLLER_LABELS_FILE, 152), + new PsoEnumEntryInfo(MetaName.CONTROLLER_LABELS_FILE_360, 153), + new PsoEnumEntryInfo(MetaName.CONTROLLER_LABELS_FILE_PS3, 154), + new PsoEnumEntryInfo(MetaName.CONTROLLER_LABELS_FILE_PS3_JPN, 155), new PsoEnumEntryInfo((MetaName)91648887, 156), new PsoEnumEntryInfo((MetaName)2018868761, 157), new PsoEnumEntryInfo((MetaName)4129824885, 158), new PsoEnumEntryInfo((MetaName)25671749, 159), new PsoEnumEntryInfo(MetaName.TEXTFILE_METAFILE, 160), - new PsoEnumEntryInfo((MetaName)1639152529, 161), + new PsoEnumEntryInfo(MetaName.NM_TUNING_FILE, 161), new PsoEnumEntryInfo(MetaName.MOVE_NETWORK_DEFS, 162), new PsoEnumEntryInfo(MetaName.WEAPONINFO_FILE_PATCH, 163), new PsoEnumEntryInfo(MetaName.DLC_SCRIPT_METAFILE, 164), @@ -14795,7 +14795,7 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo(MetaName.SCALEFORM_DLC_FILE, 168), new PsoEnumEntryInfo(MetaName.OVERLAY_INFO_FILE, 169), new PsoEnumEntryInfo(MetaName.ALTERNATE_VARIATIONS_FILE, 170), - new PsoEnumEntryInfo((MetaName)1866311889, 171), + new PsoEnumEntryInfo(MetaName.HORSE_REINS_FILE, 171), new PsoEnumEntryInfo(MetaName.FIREFX_FILE, 172), new PsoEnumEntryInfo(MetaName.INTERIOR_PROXY_ORDER_FILE, 173), new PsoEnumEntryInfo(MetaName.DLC_ITYP_REQUEST, 174), @@ -14811,19 +14811,19 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo(MetaName.VFXFOGVOLUMEINFO_FILE, 184), new PsoEnumEntryInfo(MetaName.RPF_FILE_PRE_INSTALL, 185), new PsoEnumEntryInfo((MetaName)341493400, 186), - new PsoEnumEntryInfo((MetaName)3625514299, 187), + new PsoEnumEntryInfo(MetaName.LEVEL_STREAMING_FILE, 187), new PsoEnumEntryInfo((MetaName)33804852, 188), new PsoEnumEntryInfo((MetaName)2800880346, 189), - new PsoEnumEntryInfo((MetaName)4292163424, 190), + new PsoEnumEntryInfo(MetaName.DRIVER_RULES_STD_FILE, 190), new PsoEnumEntryInfo(MetaName.PED_FIRST_PERSON_ASSET_DATA, 191), new PsoEnumEntryInfo(MetaName.GTXD_PARENTING_DATA, 192), new PsoEnumEntryInfo((MetaName)364263123, 193), - new PsoEnumEntryInfo((MetaName)350410266, 194), + new PsoEnumEntryInfo(MetaName.EVENTS_OVERRIDE_FILE, 194), new PsoEnumEntryInfo((MetaName)3155601669, 195), new PsoEnumEntryInfo(MetaName.PED_DAMAGE_APPEND_FILE, 196), - new PsoEnumEntryInfo((MetaName)1197964820, 197), - new PsoEnumEntryInfo((MetaName)3650318782, 198), - new PsoEnumEntryInfo((MetaName)2882324974, 199), + new PsoEnumEntryInfo(MetaName.BACKGROUND_SCRIPT_FILE, 197), + new PsoEnumEntryInfo(MetaName.PS3_SCRIPT_RPF, 198), + new PsoEnumEntryInfo(MetaName.X360_SCRIPT_RPF, 199), new PsoEnumEntryInfo(MetaName.PED_FIRST_PERSON_ALTERNATE_DATA, 200) ); case MetaName.DataFileContents: @@ -14837,8 +14837,8 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo(MetaName.CONTENTS_ANIMATION, 6), new PsoEnumEntryInfo(MetaName.CONTENTS_CUTSCENE, 7), new PsoEnumEntryInfo(MetaName.CONTENTS_DLC_MAP_DATA, 8), - new PsoEnumEntryInfo((MetaName)2652598047, 9), - new PsoEnumEntryInfo((MetaName)1137770612, 10) + new PsoEnumEntryInfo(MetaName.CONTENTS_DEBUG_ONLY, 9), + new PsoEnumEntryInfo(MetaName.CONTENTS_MAX, 10) ); case MetaName.InstallPartition: return new PsoEnumInfo(MetaName.InstallPartition, 1, @@ -14846,27 +14846,27 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo(MetaName.PARTITION_0, 0), new PsoEnumEntryInfo(MetaName.PARTITION_1, 1), new PsoEnumEntryInfo(MetaName.PARTITION_2, 2), - new PsoEnumEntryInfo((MetaName)2899492762, 3) + new PsoEnumEntryInfo(MetaName.PARTITION_MAX, 3) ); case (MetaName)2942646938: return new PsoEnumInfo((MetaName)2942646938, 1, new PsoEnumEntryInfo(MetaName.RADIO_GENRE_OFF, 0), new PsoEnumEntryInfo(MetaName.RADIO_GENRE_MODERN_ROCK, 1), new PsoEnumEntryInfo(MetaName.RADIO_GENRE_CLASSIC_ROCK, 2), - new PsoEnumEntryInfo((MetaName)4176867203, 3), - new PsoEnumEntryInfo((MetaName)285221172, 4), - new PsoEnumEntryInfo((MetaName)255693040, 5), + new PsoEnumEntryInfo(MetaName.RADIO_GENRE_POP, 3), + new PsoEnumEntryInfo(MetaName.RADIO_GENRE_MODERN_HIPHOP, 4), + new PsoEnumEntryInfo(MetaName.RADIO_GENRE_CLASSIC_HIPHOP, 5), new PsoEnumEntryInfo(MetaName.RADIO_GENRE_PUNK, 6), - new PsoEnumEntryInfo((MetaName)3586021020, 7), + new PsoEnumEntryInfo(MetaName.RADIO_GENRE_LEFT_WING_TALK, 7), new PsoEnumEntryInfo(MetaName.RADIO_GENRE_RIGHT_WING_TALK, 8), - new PsoEnumEntryInfo((MetaName)1750835908, 9), - new PsoEnumEntryInfo((MetaName)43700981, 10), + new PsoEnumEntryInfo(MetaName.RADIO_GENRE_COUNTRY, 9), + new PsoEnumEntryInfo(MetaName.RADIO_GENRE_DANCE, 10), new PsoEnumEntryInfo(MetaName.RADIO_GENRE_MEXICAN, 11), new PsoEnumEntryInfo(MetaName.RADIO_GENRE_REGGAE, 12), new PsoEnumEntryInfo(MetaName.RADIO_GENRE_JAZZ, 13), new PsoEnumEntryInfo(MetaName.RADIO_GENRE_MOTOWN, 14), new PsoEnumEntryInfo(MetaName.RADIO_GENRE_SURF, 15), - new PsoEnumEntryInfo((MetaName)4132096390, 16) + new PsoEnumEntryInfo(MetaName.RADIO_GENRE_UNSPECIFIED, 16) ); case (MetaName)374769227: return new PsoEnumInfo((MetaName)374769227, 1, @@ -14878,16 +14878,16 @@ namespace CodeWalker.GameFiles return new PsoEnumInfo((MetaName)637184392, 1, new PsoEnumEntryInfo(MetaName.EMPTY, 0), new PsoEnumEntryInfo(MetaName.HIGH_HEELS, 1), - new PsoEnumEntryInfo((MetaName)87075802, 2) + new PsoEnumEntryInfo(MetaName.COLLAR, 2) ); case (MetaName)2011786168: return new PsoEnumInfo((MetaName)2011786168, 1, new PsoEnumEntryInfo(MetaName.SAT_NONE, -1), - new PsoEnumEntryInfo((MetaName)2137706596, 0), - new PsoEnumEntryInfo((MetaName)3583791984, 1), - new PsoEnumEntryInfo((MetaName)2744852139, 2), - new PsoEnumEntryInfo((MetaName)977651983, 3), - new PsoEnumEntryInfo((MetaName)2169367037, 4) + new PsoEnumEntryInfo(MetaName.SAT_CAR_SLOWDOWN, 0), + new PsoEnumEntryInfo(MetaName.SAT_RAGE, 1), + new PsoEnumEntryInfo(MetaName.SAT_BULLET_TIME, 2), + new PsoEnumEntryInfo(MetaName.SAT_SNAPSHOT, 3), + new PsoEnumEntryInfo(MetaName.SAT_INSULT, 4) ); case MetaName.ThermalBehaviour: return new PsoEnumInfo(MetaName.ThermalBehaviour, 1, @@ -14899,33 +14899,33 @@ namespace CodeWalker.GameFiles case (MetaName)4015041481: return new PsoEnumInfo((MetaName)4015041481, 1, new PsoEnumEntryInfo(MetaName.SLOD_HUMAN, 0), - new PsoEnumEntryInfo((MetaName)1128152005, 1), - new PsoEnumEntryInfo((MetaName)3496177438, 2), - new PsoEnumEntryInfo((MetaName)551739454, 3), - new PsoEnumEntryInfo((MetaName)462532381, 4) + new PsoEnumEntryInfo(MetaName.SLOD_SMALL_QUADPED, 1), + new PsoEnumEntryInfo(MetaName.SLOD_LARGE_QUADPED, 2), + new PsoEnumEntryInfo(MetaName.SLOD_NULL, 3), + new PsoEnumEntryInfo(MetaName.SLOD_KEEP_LOWEST, 4) ); case (MetaName)3029795674: //CPedModelInfo__InitData ScenarioPopStreamingSlot return new PsoEnumInfo((MetaName)3029795674, 1, new PsoEnumEntryInfo(MetaName.SCENARIO_POP_STREAMING_NORMAL, 0), - new PsoEnumEntryInfo((MetaName)1152280719, 1) + new PsoEnumEntryInfo(MetaName.SCENARIO_POP_STREAMING_SMALL, 1) ); case (MetaName)888587604: return new PsoEnumInfo((MetaName)888587604, 1, - new PsoEnumEntryInfo((MetaName)3148113674, 0), - new PsoEnumEntryInfo((MetaName)1563097128, 1), - new PsoEnumEntryInfo((MetaName)2099691605, 2), + new PsoEnumEntryInfo(MetaName.DSP_AERIAL, 0), + new PsoEnumEntryInfo(MetaName.DSP_AQUATIC, 1), + new PsoEnumEntryInfo(MetaName.DSP_GROUND_WILDLIFE, 2), new PsoEnumEntryInfo(MetaName.DSP_NORMAL, 3) ); case (MetaName)3057039286: return new PsoEnumInfo((MetaName)3057039286, 1, - new PsoEnumEntryInfo((MetaName)383539244, 0), - new PsoEnumEntryInfo((MetaName)2803657832, 1), - new PsoEnumEntryInfo((MetaName)3916722287, 2), - new PsoEnumEntryInfo((MetaName)157616235, 3) + new PsoEnumEntryInfo(MetaName.FCT_NONE, 0), + new PsoEnumEntryInfo(MetaName.FCT_LINEAR, 1), + new PsoEnumEntryInfo(MetaName.FCT_HALF_SIGMOID, 2), + new PsoEnumEntryInfo(MetaName.FCT_SIGMOID, 3) ); case (MetaName)224899699: //animation clip flags return new PsoEnumInfo((MetaName)224899699, 1, - new PsoEnumEntryInfo((MetaName)2933717348, 0), + new PsoEnumEntryInfo(MetaName.APF_USE_SECONDARY_SLOT, 0), new PsoEnumEntryInfo((MetaName)892548521, 1), new PsoEnumEntryInfo((MetaName)2727614813, 2), new PsoEnumEntryInfo((MetaName)3032530358, 3), @@ -14940,20 +14940,20 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo((MetaName)1023626813, 12), new PsoEnumEntryInfo((MetaName)3730225937, 13), new PsoEnumEntryInfo(MetaName.APF_ISBLENDAUTOREMOVE, 14), - new PsoEnumEntryInfo((MetaName)3723366928, 15), + new PsoEnumEntryInfo(MetaName.APF_ISFINISHAUTOREMOVE, 15), new PsoEnumEntryInfo((MetaName)1984129772, 16), - new PsoEnumEntryInfo((MetaName)332392317, 17), - new PsoEnumEntryInfo((MetaName)1706286383, 18), + new PsoEnumEntryInfo(MetaName.APF_ADDITIVE, 17), + new PsoEnumEntryInfo(MetaName.APF_FACIAL, 18), new PsoEnumEntryInfo((MetaName)1964664646, 19), new PsoEnumEntryInfo((MetaName)46138343, 20), - new PsoEnumEntryInfo((MetaName)3541611037, 21), + new PsoEnumEntryInfo(MetaName.APF_UPPERBODYONLY, 21), new PsoEnumEntryInfo((MetaName)28056044, 22), new PsoEnumEntryInfo((MetaName)2237335835, 23), new PsoEnumEntryInfo((MetaName)1604795828, 24), new PsoEnumEntryInfo((MetaName)1772376494, 25), new PsoEnumEntryInfo((MetaName)1238878851, 26), new PsoEnumEntryInfo((MetaName)2310486390, 27), - new PsoEnumEntryInfo((MetaName)1871501357, 28), + new PsoEnumEntryInfo(MetaName.APF_BLOCK_HEAD_IK, 28), new PsoEnumEntryInfo((MetaName)98009864, 29), new PsoEnumEntryInfo((MetaName)1321103795, 30), new PsoEnumEntryInfo((MetaName)3765996064, 31) @@ -14975,23 +14975,23 @@ namespace CodeWalker.GameFiles ); case (MetaName)733577798: //anim clip dictionary streaming priority return new PsoEnumInfo((MetaName)733577798, 1, - new PsoEnumEntryInfo((MetaName)3866220764, 0), + new PsoEnumEntryInfo(MetaName.SP_Variation, 0), new PsoEnumEntryInfo(MetaName.SP_Low, 1), new PsoEnumEntryInfo(MetaName.SP_Medium, 2), new PsoEnumEntryInfo(MetaName.SP_High, 3) ); case (MetaName)2476021071: return new PsoEnumInfo((MetaName)2476021071, 1, - new PsoEnumEntryInfo((MetaName)332192867, 0), - new PsoEnumEntryInfo((MetaName)1791815485, 1), - new PsoEnumEntryInfo((MetaName)2556745525, 2), - new PsoEnumEntryInfo((MetaName)3362010507, 3) + new PsoEnumEntryInfo(MetaName.POSTFX_IN_HOLD_OUT, 0), + new PsoEnumEntryInfo(MetaName.POSTFX_EASE_IN_HOLD_EASE_OUT, 1), + new PsoEnumEntryInfo(MetaName.POSTFX_EASE_IN, 2), + new PsoEnumEntryInfo(MetaName.POSTFX_EASE_OUT, 3) ); case (MetaName)3696221852: return new PsoEnumInfo((MetaName)3696221852, 1, - new PsoEnumEntryInfo((MetaName)535426628, 0), - new PsoEnumEntryInfo((MetaName)2694408850, 1), - new PsoEnumEntryInfo((MetaName)3585121058, 2) + new PsoEnumEntryInfo(MetaName.POSTFX_LOOP_ALL, 0), + new PsoEnumEntryInfo(MetaName.POSTFX_LOOP_HOLD_ONLY, 1), + new PsoEnumEntryInfo(MetaName.POSTFX_LOOP_NONE, 2) ); case (MetaName)2168155209: return new PsoEnumInfo((MetaName)2168155209, 1, @@ -15284,7 +15284,7 @@ namespace CodeWalker.GameFiles return new PsoEnumInfo((MetaName)3404480226, 1, new PsoEnumEntryInfo((MetaName)643717225, 0), new PsoEnumEntryInfo((MetaName)1755526414, 1), - new PsoEnumEntryInfo((MetaName)3148884390, 2), + new PsoEnumEntryInfo(MetaName.CVA_WHEEL_REAR_LEFT, 2), new PsoEnumEntryInfo((MetaName)1950121897, 3), new PsoEnumEntryInfo((MetaName)2065407336, 4), new PsoEnumEntryInfo((MetaName)1249738073, 5), @@ -15296,7 +15296,7 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo((MetaName)3123586287, 11), new PsoEnumEntryInfo((MetaName)1678048274, 12), new PsoEnumEntryInfo((MetaName)1275607205, 13), - new PsoEnumEntryInfo((MetaName)1635759186, 14), + new PsoEnumEntryInfo(MetaName.DEVINS_SNOWLIGHT, 14), new PsoEnumEntryInfo((MetaName)2276229539, 15), new PsoEnumEntryInfo((MetaName)493733281, 16), new PsoEnumEntryInfo((MetaName)1037540057, 17), @@ -15314,7 +15314,7 @@ namespace CodeWalker.GameFiles ); case (MetaName)2136742399: return new PsoEnumInfo((MetaName)2136742399, 1, - new PsoEnumEntryInfo((MetaName)2580680746, 0), + new PsoEnumEntryInfo(MetaName.LOOK_FORWARD_RELATIVE_TO_ATTACH, 0), new PsoEnumEntryInfo((MetaName)4067031256, 1), new PsoEnumEntryInfo((MetaName)3668340720, 2) ); @@ -15322,20 +15322,20 @@ namespace CodeWalker.GameFiles return new PsoEnumInfo((MetaName)513957198, 1, new PsoEnumEntryInfo(MetaName.ON_FOOT, 0), new PsoEnumEntryInfo(MetaName.IN_VEHICLE, 1), - new PsoEnumEntryInfo((MetaName)1812735189, 2), - new PsoEnumEntryInfo((MetaName)1045637820, 3), - new PsoEnumEntryInfo((MetaName)3210104948, 4), - new PsoEnumEntryInfo((MetaName)2742629541, 5), - new PsoEnumEntryInfo((MetaName)2079134431, 6), - new PsoEnumEntryInfo((MetaName)4177603501, 7) + new PsoEnumEntryInfo(MetaName.ON_BIKE, 2), + new PsoEnumEntryInfo(MetaName.IN_BOAT, 3), + new PsoEnumEntryInfo(MetaName.IN_AIRCRAFT, 4), + new PsoEnumEntryInfo(MetaName.IN_SUBMARINE, 5), + new PsoEnumEntryInfo(MetaName.IN_HELI, 6), + new PsoEnumEntryInfo(MetaName.IN_TURRET, 7) ); case (MetaName)2703064232: return new PsoEnumInfo((MetaName)2703064232, 1, - new PsoEnumEntryInfo((MetaName)2573120959, 0), - new PsoEnumEntryInfo((MetaName)3489645472, 1), - new PsoEnumEntryInfo((MetaName)2770781844, 2), - new PsoEnumEntryInfo((MetaName)3839202812, 3), - new PsoEnumEntryInfo((MetaName)70078021, 4) + new PsoEnumEntryInfo(MetaName.THIRD_PERSON_NEAR, 0), + new PsoEnumEntryInfo(MetaName.THIRD_PERSON_MEDIUM, 1), + new PsoEnumEntryInfo(MetaName.THIRD_PERSON_FAR, 2), + new PsoEnumEntryInfo(MetaName.CINEMATIC, 3), + new PsoEnumEntryInfo(MetaName.FIRST_PERSON, 4) ); case (MetaName)3921015781: return new PsoEnumInfo((MetaName)3921015781, 1, @@ -15395,14 +15395,14 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo(MetaName.CAR, 0), new PsoEnumEntryInfo(MetaName.PLANE, 1), new PsoEnumEntryInfo(MetaName.TRAILER, 2), - new PsoEnumEntryInfo((MetaName)1011863180, 3), - new PsoEnumEntryInfo((MetaName)3778816900, 4), - new PsoEnumEntryInfo((MetaName)2983251618, 5), + new PsoEnumEntryInfo(MetaName.QUADBIKE, 3), + new PsoEnumEntryInfo(MetaName.HELI, 4), + new PsoEnumEntryInfo(MetaName.AUTOGYRO, 5), new PsoEnumEntryInfo(MetaName.BIKE, 6), new PsoEnumEntryInfo(MetaName.BICYCLE, 7), new PsoEnumEntryInfo(MetaName.BOAT, 8), - new PsoEnumEntryInfo((MetaName)3644569018, 9), - new PsoEnumEntryInfo((MetaName)2537188912, 10), + new PsoEnumEntryInfo(MetaName.TRAIN, 9), + new PsoEnumEntryInfo(MetaName.SUBMARINE, 10), new PsoEnumEntryInfo(MetaName.ALL, 11) ); case (MetaName)3889593720: @@ -15415,7 +15415,7 @@ namespace CodeWalker.GameFiles ); case (MetaName)2675594832: return new PsoEnumInfo((MetaName)2675594832, 1, - new PsoEnumEntryInfo((MetaName)1665251515, 0), + new PsoEnumEntryInfo(MetaName.AF_CAN_DIVE, 0), new PsoEnumEntryInfo((MetaName)665056449, 1), new PsoEnumEntryInfo((MetaName)1838090773, 2), new PsoEnumEntryInfo((MetaName)1429252732, 3), @@ -15429,12 +15429,12 @@ namespace CodeWalker.GameFiles ); case (MetaName)2920442291: return new PsoEnumInfo((MetaName)2920442291, 1, - new PsoEnumEntryInfo((MetaName)3796340206, 0), - new PsoEnumEntryInfo((MetaName)1662727357, 1), - new PsoEnumEntryInfo((MetaName)740214256, 2), - new PsoEnumEntryInfo((MetaName)1066836384, 3), - new PsoEnumEntryInfo((MetaName)698500424, 4), - new PsoEnumEntryInfo((MetaName)2087263659, 5) + new PsoEnumEntryInfo(MetaName.PED_DRIVES_POOR_CAR, 0), + new PsoEnumEntryInfo(MetaName.PED_DRIVES_AVERAGE_CAR, 1), + new PsoEnumEntryInfo(MetaName.PED_DRIVES_RICH_CAR, 2), + new PsoEnumEntryInfo(MetaName.PED_DRIVES_BIG_CAR, 3), + new PsoEnumEntryInfo(MetaName.PED_DRIVES_MOTORCYCLE, 4), + new PsoEnumEntryInfo(MetaName.PED_DRIVES_BOAT, 5) ); case MetaName.Affluence: return new PsoEnumInfo(MetaName.Affluence, 1, @@ -15449,82 +15449,82 @@ namespace CodeWalker.GameFiles ); case (MetaName)3079935216: return new PsoEnumInfo((MetaName)3079935216, 1, - new PsoEnumEntryInfo((MetaName)294976751, 0), - new PsoEnumEntryInfo((MetaName)914958829, 1), - new PsoEnumEntryInfo((MetaName)1317922943, 2), - new PsoEnumEntryInfo((MetaName)2849017488, 3), - new PsoEnumEntryInfo((MetaName)4164385006, 4), + new PsoEnumEntryInfo(MetaName.BF_INTERVENE_ON_MELEE_ACTION, 0), + new PsoEnumEntryInfo(MetaName.BF_DONT_RUN_ON_MELEE_ATTACK, 1), + new PsoEnumEntryInfo(MetaName.BF_WATCH_ON_CAR_STOLEN, 2), + new PsoEnumEntryInfo(MetaName.BF_INTIMIDATE_PLAYER, 3), + new PsoEnumEntryInfo(MetaName.BF_GET_PISSED_WHEN_HIT_BY_CAR, 4), new PsoEnumEntryInfo((MetaName)2870992946, 5), - new PsoEnumEntryInfo((MetaName)640530450, 6), - new PsoEnumEntryInfo((MetaName)3501709025, 7), - new PsoEnumEntryInfo((MetaName)3634362686, 8), - new PsoEnumEntryInfo((MetaName)168692563, 9), - new PsoEnumEntryInfo((MetaName)1200956848, 10), - new PsoEnumEntryInfo((MetaName)4202267286, 11), - new PsoEnumEntryInfo((MetaName)985531983, 12), + new PsoEnumEntryInfo(MetaName.BF_DONT_SAY_PANIC_ON_FLEE, 6), + new PsoEnumEntryInfo(MetaName.BF_REACT_ON_COMBAT, 7), + new PsoEnumEntryInfo(MetaName.BF_PLAY_CAR_HORN, 8), + new PsoEnumEntryInfo(MetaName.BF_ARGUMENTATIVE, 9), + new PsoEnumEntryInfo(MetaName.BF_CONFRONTATIONAL, 10), + new PsoEnumEntryInfo(MetaName.BF_LIMIT_COMBATANTS, 11), + new PsoEnumEntryInfo(MetaName.BF_PURSUE_WHEN_HIT_BY_CAR, 12), new PsoEnumEntryInfo(MetaName.BF_COWARDLY_FOR_SHOCKING_EVENTS, 13), new PsoEnumEntryInfo(MetaName.BF_BOOST_BRAVERY_IN_GROUP, 14), - new PsoEnumEntryInfo((MetaName)1160283338, 15), - new PsoEnumEntryInfo((MetaName)2997524846, 16), - new PsoEnumEntryInfo((MetaName)4159638386, 17), - new PsoEnumEntryInfo((MetaName)687848862, 18), + new PsoEnumEntryInfo(MetaName.BF_CAN_ACCELERATE_IN_CAR, 15), + new PsoEnumEntryInfo(MetaName.BF_CAN_GET_OUT_WHEN_HIT_BY_CAR, 16), + new PsoEnumEntryInfo(MetaName.BF_AGGRESSIVE_AFTER_RUNNING_PED_OVER, 17), + new PsoEnumEntryInfo(MetaName.BF_CAN_FLEE_WHEN_HIT_BY_CAR, 18), new PsoEnumEntryInfo(MetaName.BF_ALLOW_CONFRONT_FOR_TERRITORY_REACTIONS, 19), - new PsoEnumEntryInfo((MetaName)1196718962, 20) + new PsoEnumEntryInfo(MetaName.BF_DONT_FORCE_FLEE_COMBAT, 20) ); case (MetaName)1639628591: return new PsoEnumInfo((MetaName)1639628591, 1, - new PsoEnumEntryInfo((MetaName)2861521524, 0), - new PsoEnumEntryInfo((MetaName)491616304, 1) + new PsoEnumEntryInfo(MetaName.CF_JACKING, 0), + new PsoEnumEntryInfo(MetaName.CF_ALLOWED_COP_PURSUIT, 1) ); case (MetaName)1559228487: return new PsoEnumInfo((MetaName)1559228487, 1, - new PsoEnumEntryInfo((MetaName)4105818928, 0), - new PsoEnumEntryInfo((MetaName)3822780995, 1), - new PsoEnumEntryInfo((MetaName)754232761, 2), - new PsoEnumEntryInfo((MetaName)3386029841, 3), - new PsoEnumEntryInfo((MetaName)569621039, 4), - new PsoEnumEntryInfo((MetaName)860304717, 5), - new PsoEnumEntryInfo((MetaName)3392782621, 6), - new PsoEnumEntryInfo((MetaName)1740709742, 7), - new PsoEnumEntryInfo((MetaName)2989860387, 8) + new PsoEnumEntryInfo(MetaName.AF_Low, 0), + new PsoEnumEntryInfo(MetaName.AF_EnterLeft, 1), + new PsoEnumEntryInfo(MetaName.AF_FaceLeft, 2), + new PsoEnumEntryInfo(MetaName.AF_AtEdge, 3), + new PsoEnumEntryInfo(MetaName.AF_ToLow, 4), + new PsoEnumEntryInfo(MetaName.AF_AimDirect, 5), + new PsoEnumEntryInfo(MetaName.AF_Center, 6), + new PsoEnumEntryInfo(MetaName.AF_ToPeek, 7), + new PsoEnumEntryInfo(MetaName.AF_Scope, 8) ); case (MetaName)966624441: return new PsoEnumInfo((MetaName)966624441, 1, - new PsoEnumEntryInfo((MetaName)1952942912, 0), - new PsoEnumEntryInfo((MetaName)2426586936, 1), - new PsoEnumEntryInfo((MetaName)638477469, 2), - new PsoEnumEntryInfo((MetaName)4078932877, 3), - new PsoEnumEntryInfo((MetaName)2711794664, 4) + new PsoEnumEntryInfo(MetaName.OnlyUseForReactions, 0), + new PsoEnumEntryInfo(MetaName.CanUseForReactions, 1), + new PsoEnumEntryInfo(MetaName.Urgent, 2), + new PsoEnumEntryInfo(MetaName.OnlyUseForLawEnforcementPeds, 3), + new PsoEnumEntryInfo(MetaName.OnlyUseForGangPeds, 4) ); case (MetaName)454750378: return new PsoEnumInfo((MetaName)454750378, 1, - new PsoEnumEntryInfo((MetaName)2708677357, 0), - new PsoEnumEntryInfo((MetaName)3984591931, 1), - new PsoEnumEntryInfo((MetaName)2235154210, 2) + new PsoEnumEntryInfo(MetaName.LOOKIK_TURN_RATE_SLOW, 0), + new PsoEnumEntryInfo(MetaName.LOOKIK_TURN_RATE_NORMAL, 1), + new PsoEnumEntryInfo(MetaName.LOOKIK_TURN_RATE_FAST, 2) ); case (MetaName)1931302076: return new PsoEnumInfo((MetaName)1931302076, 1, - new PsoEnumEntryInfo((MetaName)3711568277, 0), - new PsoEnumEntryInfo((MetaName)986173808, 1), - new PsoEnumEntryInfo((MetaName)1833278132, 2), - new PsoEnumEntryInfo((MetaName)373155899, 3), - new PsoEnumEntryInfo((MetaName)2515903841, 4), - new PsoEnumEntryInfo((MetaName)1486063330, 5) + new PsoEnumEntryInfo(MetaName.LOOKIK_BLEND_RATE_SLOWEST, 0), + new PsoEnumEntryInfo(MetaName.LOOKIK_BLEND_RATE_SLOW, 1), + new PsoEnumEntryInfo(MetaName.LOOKIK_BLEND_RATE_NORMAL, 2), + new PsoEnumEntryInfo(MetaName.LOOKIK_BLEND_RATE_FAST, 3), + new PsoEnumEntryInfo(MetaName.LOOKIK_BLEND_RATE_FASTEST, 4), + new PsoEnumEntryInfo(MetaName.LOOKIK_BLEND_RATE_INSTANT, 5) ); case (MetaName)4044698613: return new PsoEnumInfo((MetaName)4044698613, 1, - new PsoEnumEntryInfo((MetaName)49782489, 0), - new PsoEnumEntryInfo((MetaName)1073022306, 1), - new PsoEnumEntryInfo((MetaName)3906611689, 2), - new PsoEnumEntryInfo((MetaName)1112780501, 3), - new PsoEnumEntryInfo((MetaName)1594514833, 4) + new PsoEnumEntryInfo(MetaName.LOOKIK_ROT_LIM_OFF, 0), + new PsoEnumEntryInfo(MetaName.LOOKIK_ROT_LIM_NARROWEST, 1), + new PsoEnumEntryInfo(MetaName.LOOKIK_ROT_LIM_NARROW, 2), + new PsoEnumEntryInfo(MetaName.LOOKIK_ROT_LIM_WIDE, 3), + new PsoEnumEntryInfo(MetaName.LOOKIK_ROT_LIM_WIDEST, 4) ); case (MetaName)4002001992: return new PsoEnumInfo((MetaName)4002001992, 1, new PsoEnumEntryInfo((MetaName)4238595643, 0) ); - case (MetaName)1507389089: - return new PsoEnumInfo((MetaName)1507389089, 1, + case MetaName.AmbientEventType: + return new PsoEnumInfo(MetaName.AmbientEventType, 1, new PsoEnumEntryInfo((MetaName)1637555008, 0), new PsoEnumEntryInfo(MetaName.AET_Interesting, 1), new PsoEnumEntryInfo(MetaName.AET_Threatening, 2), @@ -15558,101 +15558,101 @@ namespace CodeWalker.GameFiles ); case (MetaName)3509057257: return new PsoEnumInfo((MetaName)3509057257, 1, - new PsoEnumEntryInfo((MetaName)540107349, 0), - new PsoEnumEntryInfo((MetaName)1739907813, 1), - new PsoEnumEntryInfo((MetaName)2408459571, 2), - new PsoEnumEntryInfo((MetaName)2446307443, 3), - new PsoEnumEntryInfo((MetaName)3821605495, 4), - new PsoEnumEntryInfo((MetaName)3373894112, 5), - new PsoEnumEntryInfo((MetaName)4158664243, 6), - new PsoEnumEntryInfo((MetaName)2548005619, 7), - new PsoEnumEntryInfo((MetaName)1729141078, 8), - new PsoEnumEntryInfo((MetaName)1967764936, 9), - new PsoEnumEntryInfo((MetaName)3266498717, 10), - new PsoEnumEntryInfo((MetaName)2288805232, 11), - new PsoEnumEntryInfo((MetaName)2053403138, 12), - new PsoEnumEntryInfo((MetaName)125251313, 13), - new PsoEnumEntryInfo((MetaName)3905421121, 14), - new PsoEnumEntryInfo((MetaName)488421620, 15), - new PsoEnumEntryInfo((MetaName)1968199161, 16), + new PsoEnumEntryInfo(MetaName.RAGDOLL_BUTTOCKS, 0), + new PsoEnumEntryInfo(MetaName.RAGDOLL_THIGH_LEFT, 1), + new PsoEnumEntryInfo(MetaName.RAGDOLL_SHIN_LEFT, 2), + new PsoEnumEntryInfo(MetaName.RAGDOLL_FOOT_LEFT, 3), + new PsoEnumEntryInfo(MetaName.RAGDOLL_THIGH_RIGHT, 4), + new PsoEnumEntryInfo(MetaName.RAGDOLL_SHIN_RIGHT, 5), + new PsoEnumEntryInfo(MetaName.RAGDOLL_FOOT_RIGHT, 6), + new PsoEnumEntryInfo(MetaName.RAGDOLL_SPINE0, 7), + new PsoEnumEntryInfo(MetaName.RAGDOLL_SPINE1, 8), + new PsoEnumEntryInfo(MetaName.RAGDOLL_SPINE2, 9), + new PsoEnumEntryInfo(MetaName.RAGDOLL_SPINE3, 10), + new PsoEnumEntryInfo(MetaName.RAGDOLL_CLAVICLE_LEFT, 11), + new PsoEnumEntryInfo(MetaName.RAGDOLL_UPPER_ARM_LEFT, 12), + new PsoEnumEntryInfo(MetaName.RAGDOLL_LOWER_ARM_LEFT, 13), + new PsoEnumEntryInfo(MetaName.RAGDOLL_HAND_LEFT, 14), + new PsoEnumEntryInfo(MetaName.RAGDOLL_CLAVICLE_RIGHT, 15), + new PsoEnumEntryInfo(MetaName.RAGDOLL_UPPER_ARM_RIGHT, 16), new PsoEnumEntryInfo((MetaName)937951079, 17), - new PsoEnumEntryInfo((MetaName)1124094743, 18), - new PsoEnumEntryInfo((MetaName)339046583, 19), - new PsoEnumEntryInfo((MetaName)111082097, 20) + new PsoEnumEntryInfo(MetaName.RAGDOLL_HAND_RIGHT, 18), + new PsoEnumEntryInfo(MetaName.RAGDOLL_NECK, 19), + new PsoEnumEntryInfo(MetaName.RAGDOLL_HEAD, 20) ); - case (MetaName)4263854907: - return new PsoEnumInfo((MetaName)4263854907, 1, + case MetaName.LockType: + return new PsoEnumInfo(MetaName.LockType, 1, new PsoEnumEntryInfo((MetaName)40312212, 0), new PsoEnumEntryInfo((MetaName)2263813480, 1), new PsoEnumEntryInfo((MetaName)1924092278, 2) ); case (MetaName)3799765345: return new PsoEnumInfo((MetaName)3799765345, 1, - new PsoEnumEntryInfo((MetaName)1195757242, -1), - new PsoEnumEntryInfo((MetaName)1610395939, 0), - new PsoEnumEntryInfo((MetaName)2126457811, 1), - new PsoEnumEntryInfo((MetaName)1484258773, 2), - new PsoEnumEntryInfo((MetaName)1150557519, 3), - new PsoEnumEntryInfo((MetaName)1795127718, 4), - new PsoEnumEntryInfo((MetaName)2215450775, 5), - new PsoEnumEntryInfo((MetaName)2353748938, 6) + new PsoEnumEntryInfo(MetaName.ET_INVALID, -1), + new PsoEnumEntryInfo(MetaName.ET_CRIME, 0), + new PsoEnumEntryInfo(MetaName.ET_JAYWALKING, 1), + new PsoEnumEntryInfo(MetaName.ET_COP_PURSUIT, 2), + new PsoEnumEntryInfo(MetaName.ET_SPAWNED_COP_PURSUIT, 3), + new PsoEnumEntryInfo(MetaName.ET_AMBIENT_COP, 4), + new PsoEnumEntryInfo(MetaName.ET_INTERESTING_DRIVER, 5), + new PsoEnumEntryInfo(MetaName.ET_AGGRESSIVE_DRIVER, 6) ); case (MetaName)1809724872: return new PsoEnumInfo((MetaName)1809724872, 1, - new PsoEnumEntryInfo((MetaName)3073843763, 0), - new PsoEnumEntryInfo((MetaName)2909022553, 1), - new PsoEnumEntryInfo((MetaName)3804705025, 2) + new PsoEnumEntryInfo(MetaName.NO_REACTION, 0), + new PsoEnumEntryInfo(MetaName.SMALL_REACTION, 1), + new PsoEnumEntryInfo(MetaName.BIG_REACTION, 2) ); case (MetaName)888350649: return new PsoEnumInfo((MetaName)888350649, 1, - new PsoEnumEntryInfo((MetaName)2341131515, 0), + new PsoEnumEntryInfo(MetaName.SAC_Retain, 0), new PsoEnumEntryInfo((MetaName)485311651, 1), new PsoEnumEntryInfo((MetaName)1413720671, 2), - new PsoEnumEntryInfo((MetaName)1962395292, 3) + new PsoEnumEntryInfo(MetaName.SAC_Randomize, 3) ); case (MetaName)2055586340: return new PsoEnumInfo((MetaName)2055586340, 1, - new PsoEnumEntryInfo((MetaName)3014288776, 0), + new PsoEnumEntryInfo(MetaName.TC_Retain, 0), new PsoEnumEntryInfo((MetaName)1410481380, 1), new PsoEnumEntryInfo((MetaName)1541573135, 2), - new PsoEnumEntryInfo((MetaName)279516121, 3) + new PsoEnumEntryInfo(MetaName.TC_Randomize, 3) ); case (MetaName)3374036042: return new PsoEnumInfo((MetaName)3374036042, 1, - new PsoEnumEntryInfo((MetaName)2165534923, 0), + new PsoEnumEntryInfo(MetaName.BC_Retain, 0), new PsoEnumEntryInfo((MetaName)1834753809, 1), new PsoEnumEntryInfo((MetaName)2650352944, 2), - new PsoEnumEntryInfo((MetaName)4235841451, 3) + new PsoEnumEntryInfo(MetaName.BC_Randomize, 3) ); case (MetaName)4001255574: return new PsoEnumInfo((MetaName)4001255574, 1, - new PsoEnumEntryInfo((MetaName)1409024016, 0), + new PsoEnumEntryInfo(MetaName.HBC_Retain, 0), new PsoEnumEntryInfo((MetaName)2508718569, 1), new PsoEnumEntryInfo((MetaName)1024930189, 2), - new PsoEnumEntryInfo((MetaName)2066966848, 3) + new PsoEnumEntryInfo(MetaName.HBC_Randomize, 3) ); case (MetaName)894416699: return new PsoEnumInfo((MetaName)894416699, 1, - new PsoEnumEntryInfo((MetaName)982742767, 0), - new PsoEnumEntryInfo((MetaName)469567916, 1), - new PsoEnumEntryInfo((MetaName)3935682468, 2), - new PsoEnumEntryInfo((MetaName)2563045769, 3), - new PsoEnumEntryInfo((MetaName)3757862915, 4), - new PsoEnumEntryInfo((MetaName)1261964441, 5), - new PsoEnumEntryInfo((MetaName)2355736970, 6), - new PsoEnumEntryInfo((MetaName)2152776352, 7) + new PsoEnumEntryInfo(MetaName.SF_FrontDriverSide, 0), + new PsoEnumEntryInfo(MetaName.SF_FrontPassengerSide, 1), + new PsoEnumEntryInfo(MetaName.SF_BackDriverSide, 2), + new PsoEnumEntryInfo(MetaName.SF_BackPassengerSide, 3), + new PsoEnumEntryInfo(MetaName.SF_AltFrontDriverSide, 4), + new PsoEnumEntryInfo(MetaName.SF_AltFrontPassengerSide, 5), + new PsoEnumEntryInfo(MetaName.SF_AltBackDriverSide, 6), + new PsoEnumEntryInfo(MetaName.SF_AltBackPassengerSide, 7) ); case (MetaName)4186696686: return new PsoEnumInfo((MetaName)4186696686, 1, - new PsoEnumEntryInfo((MetaName)198544766, 0), - new PsoEnumEntryInfo((MetaName)2602754504, 1), - new PsoEnumEntryInfo((MetaName)2037609896, 2), + new PsoEnumEntryInfo(MetaName.POPGROUP_IS_GANG, 0), + new PsoEnumEntryInfo(MetaName.POPGROUP_AMBIENT, 1), + new PsoEnumEntryInfo(MetaName.POPGROUP_SCENARIO, 2), new PsoEnumEntryInfo((MetaName)35209924, 3), - new PsoEnumEntryInfo((MetaName)1732741445, 4), - new PsoEnumEntryInfo((MetaName)2486476801, 5), - new PsoEnumEntryInfo((MetaName)3747129892, 6), - new PsoEnumEntryInfo((MetaName)600606236, 7), - new PsoEnumEntryInfo((MetaName)3190143096, 8) + new PsoEnumEntryInfo(MetaName.POPGROUP_NETWORK_COMMON, 4), + new PsoEnumEntryInfo(MetaName.POPGROUP_AERIAL, 5), + new PsoEnumEntryInfo(MetaName.POPGROUP_AQUATIC, 6), + new PsoEnumEntryInfo(MetaName.POPGROUP_WILDLIFE, 7), + new PsoEnumEntryInfo(MetaName.POPGROUP_IN_VEHICLE, 8) ); case (MetaName)2809332931: return new PsoEnumInfo((MetaName)2809332931, 1, @@ -15701,32 +15701,32 @@ namespace CodeWalker.GameFiles ); case (MetaName)4095090001: return new PsoEnumInfo((MetaName)4095090001, 1, - new PsoEnumEntryInfo((MetaName)514090469, 0), - new PsoEnumEntryInfo((MetaName)3761654755, 1) + new PsoEnumEntryInfo(MetaName.SPECIAL_NONE, 0), + new PsoEnumEntryInfo(MetaName.SPECIAL_AIRPORT, 1) ); case (MetaName)98189892: return new PsoEnumInfo((MetaName)98189892, 1, - new PsoEnumEntryInfo((MetaName)3074030570, 0), - new PsoEnumEntryInfo((MetaName)4102086546, 1), - new PsoEnumEntryInfo((MetaName)1753198982, 2), - new PsoEnumEntryInfo((MetaName)3712292480, 3), - new PsoEnumEntryInfo((MetaName)3483214048, 4), - new PsoEnumEntryInfo((MetaName)1192754605, 5), - new PsoEnumEntryInfo((MetaName)4173874730, 6), - new PsoEnumEntryInfo((MetaName)3315722870, 7), - new PsoEnumEntryInfo((MetaName)3014113591, 8), - new PsoEnumEntryInfo((MetaName)980667646, 9), - new PsoEnumEntryInfo((MetaName)4149395173, 10), - new PsoEnumEntryInfo((MetaName)1200088335, 11), - new PsoEnumEntryInfo((MetaName)1675103884, 12), - new PsoEnumEntryInfo((MetaName)2231393111, 13), - new PsoEnumEntryInfo((MetaName)1921771349, 14), - new PsoEnumEntryInfo((MetaName)1507251800, 15), - new PsoEnumEntryInfo((MetaName)2740301581, 16), - new PsoEnumEntryInfo((MetaName)1105971590, 17), - new PsoEnumEntryInfo((MetaName)4153767546, 18), - new PsoEnumEntryInfo((MetaName)3854489506, 19), - new PsoEnumEntryInfo((MetaName)4158814707, 20) + new PsoEnumEntryInfo(MetaName.NoCoverNorthFaceEast, 0), + new PsoEnumEntryInfo(MetaName.NoCoverNorthFaceWest, 1), + new PsoEnumEntryInfo(MetaName.NoCoverNorthFaceCenter, 2), + new PsoEnumEntryInfo(MetaName.NoCoverSouthFaceEast, 3), + new PsoEnumEntryInfo(MetaName.NoCoverSouthFaceWest, 4), + new PsoEnumEntryInfo(MetaName.NoCoverSouthFaceCenter, 5), + new PsoEnumEntryInfo(MetaName.NoCoverEastFaceNorth, 6), + new PsoEnumEntryInfo(MetaName.NoCoverEastFaceSouth, 7), + new PsoEnumEntryInfo(MetaName.NoCoverEastFaceCenter, 8), + new PsoEnumEntryInfo(MetaName.NoCoverWestFaceNorth, 9), + new PsoEnumEntryInfo(MetaName.NoCoverWestFaceSouth, 10), + new PsoEnumEntryInfo(MetaName.NoCoverWestFaceCenter, 11), + new PsoEnumEntryInfo(MetaName.ForceLowCornerNorthFaceEast, 12), + new PsoEnumEntryInfo(MetaName.ForceLowCornerNorthFaceWest, 13), + new PsoEnumEntryInfo(MetaName.ForceLowCornerSouthFaceEast, 14), + new PsoEnumEntryInfo(MetaName.ForceLowCornerSouthFaceWest, 15), + new PsoEnumEntryInfo(MetaName.ForceLowCornerEastFaceNorth, 16), + new PsoEnumEntryInfo(MetaName.ForceLowCornerEastFaceSouth, 17), + new PsoEnumEntryInfo(MetaName.ForceLowCornerWestFaceNorth, 18), + new PsoEnumEntryInfo(MetaName.ForceLowCornerWestFaceSouth, 19), + new PsoEnumEntryInfo(MetaName.NoCoverVehicleDoors, 20) ); case (MetaName)3573596290: return new PsoEnumInfo((MetaName)3573596290, 1, @@ -15763,8 +15763,8 @@ namespace CodeWalker.GameFiles ); case (MetaName)1193003611: return new PsoEnumInfo((MetaName)1193003611, 1, - new PsoEnumEntryInfo((MetaName)3029576156, 0), - new PsoEnumEntryInfo((MetaName)211193083, 1) + new PsoEnumEntryInfo(MetaName.TIME_DEPENDENT, 0), + new PsoEnumEntryInfo(MetaName.WEATHER_DEPENDENT, 1) ); case (MetaName)3387532954: return new PsoEnumInfo((MetaName)3387532954, 1, @@ -16374,7 +16374,7 @@ namespace CodeWalker.GameFiles } } - [TC(typeof(EXP))] public struct Unk_741495440 : IPsoSwapEnd //24 bytes, Type:0 // Interiors + [TC(typeof(EXP))] public struct CInteriorBoundsFiles : IPsoSwapEnd //24 bytes, Type:0 // Interiors { public MetaHash Name { get; set; } //0 Name: INT_0Bh: 0 public uint Unused0 { get; set; } //4 From 987d121cc0b783c2dd1e98326cb1706b250bb40e Mon Sep 17 00:00:00 2001 From: dexy Date: Sat, 12 Jan 2019 17:57:37 +1100 Subject: [PATCH 084/158] Cleaned up MetaNames commented hashes --- .../GameFiles/MetaTypes/MetaNames.cs | 216 ------------------ 1 file changed, 216 deletions(-) diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs index 5cd912b..4b7dc35 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs @@ -3298,35 +3298,6 @@ namespace CodeWalker.GameFiles - //CEntityDef = 0xce501483, - //CMapData = 0xd3593fa6, - //CBaseArchetypeDef = 0x82d6fc83, - //CTimeArchetypeDef = 0x76B0C56C, - //CTimeCycleModifier = 0x674f9350, - //CExtensionDefAudioCollisionSettings = 0x15deda27, - //CExtensionDefAudioEmitter = 0x2604683b, - //CExtensionDefParticleEffect = 0x3a26e5e1, - //CMapTypes = 0xd98bb561, - //CExtensionDefLadder = 0x821d5421, - //CExtensionDefBuoyancy = 0x2CB3D4E3, - //CExtensionDefSpawnPoint = 0xC4B2F638, - //CCarGen = 1860713439, - //CExtensionDefExplosionEffect = 104349545, - //CMloInstanceDef = 164374718, - //CMloRoomDef = 186126833, - //CExtensionDefDoor = 1965932561, - //CExtensionDefProcObject = 2565191912, - //CMloPortalDef = 2572186314, - //CExtensionDefSpawnPointOverride = 2716862120, - //CExtensionDefLightShaft = 2718997053, - //CMloArchetypeDef = 273704021, - //CMloEntitySet = 3601308153, - //CExtensionDefExpression = 3870521079, - //CLightAttrDef = 4115341947, - //CExtensionDefWindDisturbance = 569228403, - //CExtensionDefLightEffect = 663891011, - //CMloTimeCycleModifier = 807246248, - //rage__phVerletClothCustomBounds = 847348117, //SectionUNKNOWN1 = 1701774085, //cloth CollisionData (child of rage__phVerletClothCustomBounds) ////SectionUNKNOWN2 = 1185771007, //CCompositeEntityType //SectionUNKNOWN3 = 1980345114, @@ -3623,7 +3594,6 @@ namespace CodeWalker.GameFiles Direct = 1129153779, //scenario chain edge nav mode enum NavMesh = 4272634460, Roads = 177164187, - //METAL_SOLID_LADDER = 1101797524, METAL_LIGHT_LADDER = 846330484, CComponentInfo = 1866571721, CAnchorProps = 2170383875, @@ -3641,12 +3611,10 @@ namespace CodeWalker.GameFiles CellDimX = 2690909759, CellDimY = 3691675019, - //METAL_SOLID_LADDER = 1101797524, MaxCellX = 3824598937, MaxCellY = 3374647798, MinCellX = 860552138, MinCellY = 496029782, - //ZoomTransformInformations = 3304563391, //this one doesn't make sense aSelectionSets = 2131007641, creatureMetadataName = 2766477159, expressionDictionaryName = 1095612811, @@ -3663,188 +3631,12 @@ namespace CodeWalker.GameFiles minZOffset = 2591582364, numTris = 2337695078, numVertsInBytes = 853977995, - //rage__spdAABB = 4084721864, scaleBySunIntensity = 59101696, CVehicleModPearlescentColors = 1380492417, baseCols = 2645876692, specCols = 666439252, - //EVehicleModelColorMetallic_1 = 969376721, - //EVehicleModelColorMetallic_2 = 731244402, - //EVehicleModelColorMetallic_3 = 3537679873, - //EVehicleModelColorMetallic_4 = 3183119293, - //EVehicleModelColorMetallic_5 = 4039766491, - //EVehicleModelColorMetallic_6 = 3777516184, - //EVehicleModelColorMetallic_7 = 229878718, - //EVehicleModelColorMetallic_8 = 4285337393, - //EVehicleModelColorMetallic_9 = 847803751, - //EVehicleModelColorMetallic_normal = 815563434, - //POLICE_SCANNER_COLOUR_beige = 2477037232, - //POLICE_SCANNER_COLOUR_black = 52583446, - //POLICE_SCANNER_COLOUR_blue = 2253400966, - //POLICE_SCANNER_COLOUR_brown = 4012089111, - //POLICE_SCANNER_COLOUR_graphite = 437487559, - //POLICE_SCANNER_COLOUR_green = 730308174, - //POLICE_SCANNER_COLOUR_grey = 3129410619, - //POLICE_SCANNER_COLOUR_orange = 1762671403, - //POLICE_SCANNER_COLOUR_pink = 2615326998, - //POLICE_SCANNER_COLOUR_red = 4157715503, - //POLICE_SCANNER_COLOUR_silver = 2969646890, - //POLICE_SCANNER_COLOUR_white = 1645071976, - //POLICE_SCANNER_COLOUR_yellow = 1358390657, - //POLICE_SCANNER_PREFIX_bright = 2318284788, - //POLICE_SCANNER_PREFIX_dark = 3921902053, - //POLICE_SCANNER_PREFIX_light = 840729009, - //VMCP_BOTTOM = 2770495034, - //VMCP_FRONT = 3001706694, - //VMCP_FRONT_LEFT = 1148399176, - //VMCP_FRONT_RIGHT = 2057559994, - //VMCP_LEFT = 1629770278, - //VMCP_REAR = 1556139353, - //VMCP_REAR_LEFT = 1830737308, - //VMCP_REAR_RIGHT = 457854237, - //VMCP_RIGHT = 2879151926, - //VMCP_TOP = 3193071790, - //VMT_DOOR_R = 514696742, - //VMT_HYDRAULICS = 3919652883, - //VMT_TURBO = 2334449168, - //VMT_TYRE_SMOKE = 3968559424, - //VMT_XENON_LIGHTS = 2656522436, - //bobble_hand = 785162942, - //bodyshell = 1970334199, - //break_extra_1 = 2190258525, - //break_extra_10 = 2734584581, - //break_extra_2 = 1950749904, - //break_extra_3 = 1709504522, - //break_extra_4 = 1480285367, - //break_extra_5 = 1213709552, - //break_extra_6 = 848662892, - //break_extra_7 = 3990325233, - //break_extra_8 = 367056899, - //break_extra_9 = 3413787451, - ////collision_18eafea9_cdm3nr = 418053801, - ////collision_37f22dd2_7guqqmk = 938618322, - ////collision_b473fe0d_86rknbm = 3027500557, - //disableDrivebySeat = 161724223, - //disableDrivebySeatSecondary = 484538291, - //eModKitType = 3865430600, - //exhaust_10 = 2600343066, - //exhaust_11 = 3598945568, - //exhaust_12 = 3896619164, - //exhaust_13 = 2989016171, - //exhaust_14 = 3320572913, - //exhaust_15 = 529211190, - //exhaust_16 = 823345734, - //exhaust_5 = 1666652977, - //exhaust_6 = 1972682668, - //exhaust_7 = 3204862618, - //exhaust_8 = 3503093287, - //exhaust_9 = 442599751, - //extra_10 = 2125833567, - //extra_11 = 2431830489, - //extra_12 = 2720558148, - //extra_13 = 903844796, - //extra_14 = 1202337617, - //extra_6 = 3145755371, - //extra_7 = 2360446286, - //extra_8 = 2661527858, - //extra_9 = 1913477126, - //fblade_1mod = 1157497495, - //forks_l = 991413023, - //forks_u = 837923007, - //handlebars = 2921986035, - //indicator_lr = 3979005071, - //indicator_rr = 112742354, - //misc_1 = 2690009945, - //misc_2 = 1385115596, - //mod_a = 3654959273, - //mod_b = 808381781, - //mod_c = 4268165574, - //mod_col_10 = 3033709986, - //mod_col_11 = 2249285664, - //mod_col_12 = 1498318491, - //mod_col_13 = 1787603223, - //mod_col_6 = 1547719720, - //mod_col_7 = 580018373, - //mod_col_8 = 4191162177, - //mod_col_9 = 3257212908, - //mod_d = 3579951032, - //mod_e = 2733953759, - //mod_f = 4123490435, - //mod_g = 3342441320, - //mod_h = 1726175929, - //mod_i = 1947366679, - //mod_j = 2065498928, - //mod_k = 2572238744, - //mod_l = 730555402, - //mod_m = 4194074861, - //mod_n = 1343696161, - //mod_o = 506677594, - //mod_p = 4167728581, - //mod_q = 3326122354, - //mod_r = 217851628, - //mod_s = 3666821647, - //mod_t = 2168885119, - //mod_u = 2399611648, - //mod_v = 3519328378, - //mod_w = 2958716326, - //mod_x = 3292501248, - //mod_y = 2651277456, - //mod_z = 3888995355, - //neon_b = 728001778, - //neon_f = 3850133799, - //neon_l = 4084563217, - //neon_r = 556062831, - //scoop_1mod = 2292220415, - //scoop_2mod = 2166816405, - //scoop_3mod = 2486991428, - //spike_1mod = 2796607005, - //spike_2mod = 3978311755, - //spike_3mod = 4063416457, - //swingarm = 3929033220, - //taillight_l = 3008822349, - //taillight_r = 914195096, - //weaponSlotSecondary = 2656206330, - //window_lm = 2675373130, - //window_lr = 2639884295, - //window_rm = 3523659197, - //window_rr = 2355575415, - - //fblade_1fast = 1032498025, - //fblade_2fast = 930609265, - //fblade_2mod = 2573434709, - //fblade_3fast = 411536741, - //fblade_3mod = 879315983, - //mod_aa = 3843353624, - //mod_ab = 3135215534, - //mod_ac = 3364434689, - //mod_ad = 2723112578, - //mod_ae = 2970026993, - //mod_af = 2245832093, - //mod_ag = 2492156666, - //mod_ah = 1765012564, - //mod_ai = 2014155263, - //mod_aj = 1286290243, - //mod_ak = 1535367412, - //mod_col_14 = 1573326728, - //mod_col_15 = 1862676998, - //mod_col_16 = 1044598917, - //rblade_1fast = 451472348, - //rblade_1mod = 4141162370, - //rblade_2fast = 3599310922, - //rblade_2mod = 1768767594, - //rblade_3fast = 3929521030, - //rblade_3mod = 1496111458, - //turret_a1 = 3992710274, - //turret_a2 = 1077448950, - //turret_a3 = 1382757723, - //turret_a4 = 614062521, - //turret_b1 = 3783807571, - //turret_b2 = 2839830988, - //turret_b3 = 3138651499, - //turret_b4 = 2400824695, - @@ -4270,7 +4062,6 @@ namespace CodeWalker.GameFiles CFriendlyIssues = 754458458, CHINESE_SHUFFLING_CHECKS_FILE = 1244900227, CINEMATIC = 3839202812, - //CInteriorBoundsFiles = 741495440, COLLAR = 87075802, COMImpulseComponent = 3129842207, COMImpulseMaxRootVelocityMagnitude = 2681040368, @@ -6802,7 +6593,6 @@ namespace CodeWalker.GameFiles Penalty = 581818714, Periodic = 1887945139, PersonalityName = 4206114216, - //Phase = 369413731, PhaseDuringDeployToConsiderOut = 1259738869, PhaseToBlendOut = 4149318965, PhoneFov = 732629634, @@ -7946,7 +7736,6 @@ namespace CodeWalker.GameFiles VelMagStairsSpringMin = 1875736055, VelStartCircling = 3146864305, VelStopCircling = 3555988495, - //Velocity2 = 2944635386, VelocityDeltaThrownOut = 3562480846, VelocityDeltaThrownOutPlayerMP = 935626028, VelocityDeltaThrownOutPlayerSP = 1359095251, @@ -8157,8 +7946,6 @@ namespace CodeWalker.GameFiles disableDrivebySeatSecondary = 484538291, eImpactConeRagdollComponent = 100413071, eModKitType = 3865430600, - //eVehicleModCameraPos = 3413962745, - //eVehicleModType = 2363989491, entries = 934859523, exhaust_10 = 2600343066, exhaust_11 = 3598945568, @@ -8290,7 +8077,6 @@ namespace CodeWalker.GameFiles fInitialSearchRadius = 2790363538, fInjuredGetupImpulseMag2 = 461478411, fInputMax = 541735427, - //fIntensity = 3937240636, fJumpDescendRate = 564993371, fJumpToSmashWindowPhaseChange = 3670878450, fLifeTime = 2257773206, @@ -9032,7 +8818,6 @@ namespace CodeWalker.GameFiles Textures = 1767854039, TextureSetName = 539384795, DiffuseMapName = 1085051633, - //NormalMapName = 2845714814, //already present FontExtents = 1008020858, MaxLettersOnPlate = 1247956775, FontColor = 1707432934, @@ -9064,7 +8849,6 @@ namespace CodeWalker.GameFiles lightInnerConeAngle = 1576817313, lightOuterConeAngle = 3797248043, lightOffset = 1620490850, - //textureName = 440050042, sequencerBpm = 1335282710, sequencer = 3240773244, leftHeadLight = 649479127, From 37bbea4607737a23c8dd4ded5d52bfb0436ede24 Mon Sep 17 00:00:00 2001 From: dexy Date: Sun, 13 Jan 2019 09:03:27 +1100 Subject: [PATCH 085/158] Added save manifest file button to manifest generator, improved manifest generator accuracy for interior ytyps --- .../EditProjectManifestPanel.Designer.cs | 38 ++-- Project/Panels/EditProjectManifestPanel.cs | 201 +++++++++++++----- Project/Panels/EditProjectManifestPanel.resx | 5 +- 3 files changed, 168 insertions(+), 76 deletions(-) diff --git a/Project/Panels/EditProjectManifestPanel.Designer.cs b/Project/Panels/EditProjectManifestPanel.Designer.cs index 27ceb93..81fc0f4 100644 --- a/Project/Panels/EditProjectManifestPanel.Designer.cs +++ b/Project/Panels/EditProjectManifestPanel.Designer.cs @@ -30,21 +30,13 @@ { this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditProjectManifestPanel)); - this.label162 = new System.Windows.Forms.Label(); this.ProjectManifestGenerateButton = new System.Windows.Forms.Button(); this.ProjectManifestTextBox = new FastColoredTextBoxNS.FastColoredTextBox(); + this.SaveManifestButton = new System.Windows.Forms.Button(); + this.SaveFileDialog = new System.Windows.Forms.SaveFileDialog(); ((System.ComponentModel.ISupportInitialize)(this.ProjectManifestTextBox)).BeginInit(); this.SuspendLayout(); // - // label162 - // - this.label162.AutoSize = true; - this.label162.Location = new System.Drawing.Point(96, 7); - this.label162.Name = "label162"; - this.label162.Size = new System.Drawing.Size(111, 13); - this.label162.TabIndex = 5; - this.label162.Text = "XML for _manifest.ymf"; - // // ProjectManifestGenerateButton // this.ProjectManifestGenerateButton.Location = new System.Drawing.Point(3, 2); @@ -95,27 +87,41 @@ this.ProjectManifestTextBox.TabIndex = 3; this.ProjectManifestTextBox.Zoom = 100; // - // ProjectManifestPanel + // SaveManifestButton + // + this.SaveManifestButton.Location = new System.Drawing.Point(94, 2); + this.SaveManifestButton.Name = "SaveManifestButton"; + this.SaveManifestButton.Size = new System.Drawing.Size(113, 23); + this.SaveManifestButton.TabIndex = 6; + this.SaveManifestButton.Text = "Save _manifest.ymf"; + this.SaveManifestButton.UseVisualStyleBackColor = true; + this.SaveManifestButton.Click += new System.EventHandler(this.SaveManifestButton_Click); + // + // SaveFileDialog + // + this.SaveFileDialog.FileName = "_manifest.ymf"; + this.SaveFileDialog.Filter = "Manifest files|*.ymf"; + // + // EditProjectManifestPanel // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(605, 451); - this.Controls.Add(this.label162); + this.Controls.Add(this.SaveManifestButton); this.Controls.Add(this.ProjectManifestGenerateButton); this.Controls.Add(this.ProjectManifestTextBox); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Name = "ProjectManifestPanel"; + this.Name = "EditProjectManifestPanel"; this.Text = "_manifest.ymf"; ((System.ComponentModel.ISupportInitialize)(this.ProjectManifestTextBox)).EndInit(); this.ResumeLayout(false); - this.PerformLayout(); } #endregion - - private System.Windows.Forms.Label label162; private System.Windows.Forms.Button ProjectManifestGenerateButton; private FastColoredTextBoxNS.FastColoredTextBox ProjectManifestTextBox; + private System.Windows.Forms.Button SaveManifestButton; + private System.Windows.Forms.SaveFileDialog SaveFileDialog; } } \ No newline at end of file diff --git a/Project/Panels/EditProjectManifestPanel.cs b/Project/Panels/EditProjectManifestPanel.cs index a253983..60acbb9 100644 --- a/Project/Panels/EditProjectManifestPanel.cs +++ b/Project/Panels/EditProjectManifestPanel.cs @@ -4,10 +4,12 @@ using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; +using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; +using System.Xml; using WeifenLuo.WinFormsUI.Docking; namespace CodeWalker.Project.Panels @@ -87,46 +89,113 @@ namespace CodeWalker.Project.Panels }); - if ((CurrentProjectFile != null) && (CurrentProjectFile.YmapFiles.Count > 0)) + if (CurrentProjectFile != null) { - sb.AppendLine(" "); - foreach (var ymap in CurrentProjectFile.YmapFiles) + if (CurrentProjectFile.YmapFiles.Count > 0) { - var ymapname = ymap.RpfFileEntry?.NameLower; - if (string.IsNullOrEmpty(ymapname)) + sb.AppendLine(" "); + foreach (var ymap in CurrentProjectFile.YmapFiles) { - ymapname = ymap.Name.ToLowerInvariant(); - } - if (ymapname.EndsWith(".ymap")) - { - ymapname = ymapname.Substring(0, ymapname.Length - 5); - } - - mapdeps.Clear(); - if (ymap.AllEntities != null) - { - foreach (var ent in ymap.AllEntities) + var ymapname = ymap.RpfFileEntry?.NameLower; + if (string.IsNullOrEmpty(ymapname)) { - var ytyp = ent.Archetype?.Ytyp; - var ytypname = getYtypName(ytyp); - if (ytyp != null) - { - mapdeps[ytypname] = ytyp; - } + ymapname = ymap.Name.ToLowerInvariant(); + } + if (ymapname.EndsWith(".ymap")) + { + ymapname = ymapname.Substring(0, ymapname.Length - 5); + } - if (ent.IsMlo) + mapdeps.Clear(); + if (ymap.AllEntities != null) + { + foreach (var ent in ymap.AllEntities) { - if (ent.MloInstance?.Entities != null) + var ytyp = ent.Archetype?.Ytyp; + var ytypname = getYtypName(ytyp); + if (ytyp != null) { - Dictionary typdepdict; - if (!typdeps.TryGetValue(ytypname, out typdepdict)) + mapdeps[ytypname] = ytyp; + } + + if (ent.IsMlo) + { + if (ent.MloInstance?.Entities != null) { - typdepdict = new Dictionary(); - typdeps[ytypname] = typdepdict; + Dictionary typdepdict; + if (!typdeps.TryGetValue(ytypname, out typdepdict)) + { + typdepdict = new Dictionary(); + typdeps[ytypname] = typdepdict; + } + foreach (var ient in ent.MloInstance.Entities) + { + var iytyp = ient.Archetype?.Ytyp; + var iytypname = getYtypName(iytyp); + if ((iytyp != null) && (iytypname != ytypname)) + { + typdepdict[iytypname] = iytyp; + } + } } - foreach (var ient in ent.MloInstance.Entities) + } + + } + } + if (ymap.GrassInstanceBatches != null) + { + foreach (var batch in ymap.GrassInstanceBatches) + { + var ytyp = batch.Archetype?.Ytyp; + var ytypname = getYtypName(ytyp); + if (ytyp != null) + { + mapdeps[ytypname] = ytyp; + } + } + } + + sb.AppendLine(" "); + sb.AppendLine(" " + ymapname + ""); + sb.AppendLine(" "); + sb.AppendLine(" "); + foreach (var kvp in mapdeps) + { + sb.AppendLine(" " + kvp.Key + ""); + } + sb.AppendLine(" "); + sb.AppendLine(" "); + } + sb.AppendLine(" "); + } + else + { + sb.AppendLine(" "); + } + + if ((CurrentProjectFile.YtypFiles.Count > 0) && (ProjectForm?.GameFileCache != null)) + { + foreach (var ytyp in CurrentProjectFile.YtypFiles) + { + var ytypname = getYtypName(ytyp); + foreach (var archm in ytyp.AllArchetypes) + { + var mloa = archm as MloArchetype; + if (mloa != null) + { + Dictionary typdepdict; + if (!typdeps.TryGetValue(ytypname, out typdepdict)) + { + typdepdict = new Dictionary(); + typdeps[ytypname] = typdepdict; + } + if (mloa.entities != null) + { + foreach (var ent in mloa.entities) { - var iytyp = ient.Archetype?.Ytyp; + var archname = ent._Data.archetypeName; + var arch = ProjectForm.GameFileCache.GetArchetype(archname); + var iytyp = arch?.Ytyp; var iytypname = getYtypName(iytyp); if ((iytyp != null) && (iytypname != ytypname)) { @@ -134,39 +203,31 @@ namespace CodeWalker.Project.Panels } } } - } - - } - } - if (ymap.GrassInstanceBatches != null) - { - foreach (var batch in ymap.GrassInstanceBatches) - { - var ytyp = batch.Archetype?.Ytyp; - var ytypname = getYtypName(ytyp); - if (ytyp != null) - { - mapdeps[ytypname] = ytyp; + if (mloa.entitySets != null) + { + foreach (var entset in mloa.entitySets) + { + if (entset.Entities != null) + { + foreach (var ent in entset.Entities) + { + var archname = ent._Data.archetypeName; + var arch = ProjectForm.GameFileCache.GetArchetype(archname); + var iytyp = arch?.Ytyp; + var iytypname = getYtypName(iytyp); + if ((iytyp != null) && (iytypname != ytypname)) + { + typdepdict[iytypname] = iytyp; + } + } + } + } + } } } } - - sb.AppendLine(" "); - sb.AppendLine(" " + ymapname + ""); - sb.AppendLine(" "); - sb.AppendLine(" "); - foreach (var kvp in mapdeps) - { - sb.AppendLine(" " + kvp.Key + ""); - } - sb.AppendLine(" "); - sb.AppendLine(" "); } - sb.AppendLine(" "); - } - else - { - sb.AppendLine(" "); + } if (typdeps.Count > 0) @@ -204,5 +265,27 @@ namespace CodeWalker.Project.Panels CurrentProjectFile = ProjectForm.CurrentProjectFile; GenerateProjectManifest(); } + + private void SaveManifestButton_Click(object sender, EventArgs e) + { + + if (SaveFileDialog.ShowDialog() != DialogResult.OK) return; + + try + { + var filename = SaveFileDialog.FileName; + var xml = ProjectManifestTextBox.Text; + var xmldoc = new XmlDocument(); + xmldoc.LoadXml(xml); + var pso = XmlPso.GetPso(xmldoc); + var bytes = pso.Save(); + File.WriteAllBytes(filename, bytes); + } + catch (Exception ex) + { + MessageBox.Show("Error saving _manifest.ymf file:\n" + ex.ToString()); + } + + } } } diff --git a/Project/Panels/EditProjectManifestPanel.resx b/Project/Panels/EditProjectManifestPanel.resx index 538e8fc..06842f2 100644 --- a/Project/Panels/EditProjectManifestPanel.resx +++ b/Project/Panels/EditProjectManifestPanel.resx @@ -119,7 +119,7 @@ - AAEAAAD/////AQAAAAAAAAAMAgAAAFdGYXN0Q29sb3JlZFRleHRCb3gsIFZlcnNpb249Mi4xNi4yMS4w + AAEAAAD/////AQAAAAAAAAAMAgAAAFdGYXN0Q29sb3JlZFRleHRCb3gsIFZlcnNpb249Mi4xNi4yNC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWZiOGFhMTJiOTk0ZWY2MWIMAwAAAFFTeXN0 ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2Vu PWIwM2Y1ZjdmMTFkNTBhM2EFAQAAACJGYXN0Q29sb3JlZFRleHRCb3hOUy5TZXJ2aWNlQ29sb3JzBgAA @@ -135,6 +135,9 @@ CgAAAAAAAAAAjQABAAH4/////P///woAAAAAAAAAAKQAAQAB9/////z///8KAAAAAAAAAACWAAEACw== + + 17, 17 + From 719631580c507852ddde004d0379fd9795ee45d8 Mon Sep 17 00:00:00 2001 From: dexy Date: Sun, 13 Jan 2019 09:46:52 +1100 Subject: [PATCH 086/158] Added Interiors section to generated manifests --- Project/Panels/EditProjectManifestPanel.cs | 32 ++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/Project/Panels/EditProjectManifestPanel.cs b/Project/Panels/EditProjectManifestPanel.cs index 60acbb9..4a129e8 100644 --- a/Project/Panels/EditProjectManifestPanel.cs +++ b/Project/Panels/EditProjectManifestPanel.cs @@ -62,6 +62,7 @@ namespace CodeWalker.Project.Panels var sb = new StringBuilder(); var mapdeps = new Dictionary(); var typdeps = new Dictionary>(); + var interiors = new List(); sb.AppendLine(""); sb.AppendLine(""); @@ -107,6 +108,7 @@ namespace CodeWalker.Project.Panels } mapdeps.Clear(); + bool ismilo = false; if (ymap.AllEntities != null) { foreach (var ent in ymap.AllEntities) @@ -120,6 +122,7 @@ namespace CodeWalker.Project.Panels if (ent.IsMlo) { + ismilo = true; if (ent.MloInstance?.Entities != null) { Dictionary typdepdict; @@ -157,7 +160,14 @@ namespace CodeWalker.Project.Panels sb.AppendLine(" "); sb.AppendLine(" " + ymapname + ""); - sb.AppendLine(" "); + if (ismilo) + { + sb.AppendLine(" INTERIOR_DATA"); + } + else + { + sb.AppendLine(" "); + } sb.AppendLine(" "); foreach (var kvp in mapdeps) { @@ -183,6 +193,7 @@ namespace CodeWalker.Project.Panels var mloa = archm as MloArchetype; if (mloa != null) { + interiors.Add(mloa.Name); Dictionary typdepdict; if (!typdeps.TryGetValue(ytypname, out typdepdict)) { @@ -253,7 +264,24 @@ namespace CodeWalker.Project.Panels sb.AppendLine(" "); } - sb.AppendLine(" "); + if (interiors.Count > 0) + { + sb.AppendLine(" "); + foreach (var interior in interiors) + { + sb.AppendLine(" "); + sb.AppendLine(" " + interior + ""); + sb.AppendLine(" "); + sb.AppendLine(" " + interior + ""); + sb.AppendLine(" "); + sb.AppendLine(" "); + } + sb.AppendLine(" "); + } + else + { + sb.AppendLine(" "); + } sb.AppendLine(""); ProjectManifestTextBox.Text = sb.ToString(); From 187f8379cd691d945181a5e810a1ed6cb251e575 Mon Sep 17 00:00:00 2001 From: dexy Date: Sun, 13 Jan 2019 17:04:32 +1100 Subject: [PATCH 087/158] Vehicle viewer progress --- .../GameFiles/FileTypes/YftFile.cs | 4 +- CodeWalker.Core/GameFiles/GameFileCache.cs | 11 +- .../GameFiles/MetaTypes/Archetype.cs | 17 +- CodeWalker.Core/GameFiles/Resources/Frag.cs | 44 +++-- Forms/ModelForm.cs | 47 +++++ Rendering/Renderer.cs | 121 +++++++++++- Vehicles/VehicleForm.Designer.cs | 165 +++++++++++++--- Vehicles/VehicleForm.cs | 178 ++++++++++++++++-- 8 files changed, 515 insertions(+), 72 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/YftFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YftFile.cs index 5c2d01b..077f84d 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YftFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YftFile.cs @@ -37,9 +37,9 @@ namespace CodeWalker.GameFiles { Fragment.Drawable.Owner = this; } - if (Fragment.Unknown_F8h_Data != null) + if (Fragment.Drawable2 != null) { - Fragment.Unknown_F8h_Data.Owner = this; + Fragment.Drawable2.Owner = this; } Loaded = true; diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index 95acf3a..7ba8d7a 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -1373,6 +1373,8 @@ namespace CodeWalker.GameFiles public void InitStringDicts() { string langstr = "american_rel"; //todo: make this variable? + string langstr2 = "americandlc.rpf"; + string langstr3 = "american.rpf"; if (!DoFullStringIndex) { @@ -1395,7 +1397,8 @@ namespace CodeWalker.GameFiles { foreach (var entry in rpf.AllEntries) { - if (entry.NameLower.EndsWith(".gxt2") && entry.Path.Contains(langstr)) + var p = entry.Path; + if (entry.NameLower.EndsWith(".gxt2") && (p.Contains(langstr)|| p.Contains(langstr2)|| p.Contains(langstr3))) { var gxt2 = RpfMan.GetFile(entry); if (gxt2 != null) @@ -2634,6 +2637,12 @@ namespace CodeWalker.GameFiles diffpsos.Add(fentry.Path); } + if (entry.NameLower == "wantedtuning.ymt") + { } + if (entry.NameLower == "popgroups.ymt") + { } + + } } } diff --git a/CodeWalker.Core/GameFiles/MetaTypes/Archetype.cs b/CodeWalker.Core/GameFiles/MetaTypes/Archetype.cs index 03cb437..6ef6a2e 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/Archetype.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/Archetype.cs @@ -654,16 +654,19 @@ namespace CodeWalker.GameFiles var list = new List(); var mloarch = Owner?.Archetype as MloArchetype; - for (uint i = 0; i < mloarch.entitySets.Length; i++) + if (mloarch?.entitySets != null) { - var entset = mloarch.entitySets[i]; - MloInstanceEntitySet instset = null; - EntitySets.TryGetValue(entset._Data.name, out instset); - if (instset != null) + for (uint i = 0; i < mloarch.entitySets.Length; i++) { - if (instset.Visible) + var entset = mloarch.entitySets[i]; + MloInstanceEntitySet instset = null; + EntitySets.TryGetValue(entset._Data.name, out instset); + if (instset != null) { - list.Add(i); + if (instset.Visible) + { + list.Add(i); + } } } } diff --git a/CodeWalker.Core/GameFiles/Resources/Frag.cs b/CodeWalker.Core/GameFiles/Resources/Frag.cs index 61d9e09..a81db3d 100644 --- a/CodeWalker.Core/GameFiles/Resources/Frag.cs +++ b/CodeWalker.Core/GameFiles/Resources/Frag.cs @@ -96,7 +96,7 @@ namespace CodeWalker.GameFiles public uint Unknown_E8h { get; set; } // 0x00000000 public uint Unknown_ECh { get; set; } // 0x00000000 public ulong PhysicsLODGroupPointer { get; set; } - public ulong Unknown_F8h_Pointer { get; set; } + public ulong Drawable2Pointer { get; set; } public uint Unknown_100h { get; set; } // 0x00000000 public uint Unknown_104h { get; set; } // 0x00000000 public uint Unknown_108h { get; set; } // 0x00000000 @@ -116,7 +116,7 @@ namespace CodeWalker.GameFiles public FragUnknown_F_004 Unknown_A8h_Data { get; set; } public ResourcePointerArray64 Unknown_E0h_Data { get; set; } public FragPhysicsLODGroup PhysicsLODGroup { get; set; } - public FragDrawable Unknown_F8h_Data { get; set; } + public FragDrawable Drawable2 { get; set; } public FragUnknown_F_003 Unknown_120h_Data { get; set; } /// @@ -177,7 +177,7 @@ namespace CodeWalker.GameFiles this.Unknown_E8h = reader.ReadUInt32(); this.Unknown_ECh = reader.ReadUInt32(); this.PhysicsLODGroupPointer = reader.ReadUInt64(); - this.Unknown_F8h_Pointer = reader.ReadUInt64(); + this.Drawable2Pointer = reader.ReadUInt64(); this.Unknown_100h = reader.ReadUInt32(); this.Unknown_104h = reader.ReadUInt32(); this.Unknown_108h = reader.ReadUInt32(); @@ -230,12 +230,12 @@ namespace CodeWalker.GameFiles this.PhysicsLODGroup = reader.ReadBlockAt( this.PhysicsLODGroupPointer // offset ); - this.Unknown_F8h_Data = reader.ReadBlockAt( - this.Unknown_F8h_Pointer // offset + this.Drawable2 = reader.ReadBlockAt( + this.Drawable2Pointer // offset ); - if (this.Unknown_F8h_Data != null) + if (this.Drawable2 != null) { - this.Unknown_F8h_Data.OwnerFragment = this; + this.Drawable2.OwnerFragment = this; } this.Unknown_120h_Data = reader.ReadBlockAt( @@ -283,7 +283,7 @@ namespace CodeWalker.GameFiles //this.anotherCount = (byte)(this.pxxxxx_3data != null ? this.pxxxxx_3data.Count : 0); this.Unknown_E0h_Pointer = (ulong)(this.Unknown_E0h_Data != null ? this.Unknown_E0h_Data.FilePosition : 0); this.PhysicsLODGroupPointer = (ulong)(this.PhysicsLODGroup != null ? this.PhysicsLODGroup.FilePosition : 0); - this.Unknown_F8h_Pointer = (ulong)(this.Unknown_F8h_Data != null ? this.Unknown_F8h_Data.FilePosition : 0); + this.Drawable2Pointer = (ulong)(this.Drawable2 != null ? this.Drawable2.FilePosition : 0); //this.cntxx51a = (ushort)(this.pxxxxx_5data != null ? this.pxxxxx_5data.Count : 0); this.Unknown_120h_Pointer = (ulong)(this.Unknown_120h_Data != null ? this.Unknown_120h_Data.FilePosition : 0); @@ -338,7 +338,7 @@ namespace CodeWalker.GameFiles writer.Write(this.Unknown_E8h); writer.Write(this.Unknown_ECh); writer.Write(this.PhysicsLODGroupPointer); - writer.Write(this.Unknown_F8h_Pointer); + writer.Write(this.Drawable2Pointer); writer.Write(this.Unknown_100h); writer.Write(this.Unknown_104h); writer.Write(this.Unknown_108h); @@ -362,7 +362,7 @@ namespace CodeWalker.GameFiles if (Unknown_A8h_Data != null) list.Add(Unknown_A8h_Data); if (Unknown_E0h_Data != null) list.Add(Unknown_E0h_Data); if (PhysicsLODGroup != null) list.Add(PhysicsLODGroup); - if (Unknown_F8h_Data != null) list.Add(Unknown_F8h_Data); + if (Drawable2 != null) list.Add(Drawable2); if (Unknown_120h_Data != null) list.Add(Unknown_120h_Data); return list.ToArray(); } @@ -2451,6 +2451,14 @@ namespace CodeWalker.GameFiles var child = Children.data_items[i]; child.OwnerFragPhysLod = this; child.OwnerFragPhysIndex = i; + + if ((Groups?.data_items != null) && (i < Groups.data_items.Length)) + { + var group = Groups.data_items[i]; + var str = group.Name.ToString().ToLowerInvariant(); + JenkIndex.Ensure(str); + child.GroupNameHash = JenkHash.GenHash(str); + } } } } @@ -3350,7 +3358,8 @@ namespace CodeWalker.GameFiles public uint Unknown_04h { get; set; } // 0x00000001 public float Unknown_08h { get; set; } public float Unknown_0Ch { get; set; } - public float Unknown_10h { get; set; } + public ushort BoneIndex { get; set; } + public ushort BoneTag { get; set; } public uint Unknown_14h { get; set; } // 0x00000000 public uint Unknown_18h { get; set; } // 0x00000000 public uint Unknown_1Ch { get; set; } // 0x00000000 @@ -3417,6 +3426,7 @@ namespace CodeWalker.GameFiles public FragPhysicsLOD OwnerFragPhysLod { get; set; } public int OwnerFragPhysIndex { get; set; } + public MetaHash GroupNameHash { get; set; } /// /// Reads the data-block from a stream. @@ -3428,7 +3438,8 @@ namespace CodeWalker.GameFiles this.Unknown_04h = reader.ReadUInt32(); this.Unknown_08h = reader.ReadSingle(); this.Unknown_0Ch = reader.ReadSingle(); - this.Unknown_10h = reader.ReadSingle(); + this.BoneIndex = reader.ReadUInt16(); + this.BoneTag = reader.ReadUInt16(); this.Unknown_14h = reader.ReadUInt32(); this.Unknown_18h = reader.ReadUInt32(); this.Unknown_1Ch = reader.ReadUInt32(); @@ -3523,7 +3534,8 @@ namespace CodeWalker.GameFiles writer.Write(this.Unknown_04h); writer.Write(this.Unknown_08h); writer.Write(this.Unknown_0Ch); - writer.Write(this.Unknown_10h); + writer.Write(this.BoneIndex); + writer.Write(this.BoneTag); writer.Write(this.Unknown_14h); writer.Write(this.Unknown_18h); writer.Write(this.Unknown_1Ch); @@ -3593,6 +3605,12 @@ namespace CodeWalker.GameFiles if (EvtSet != null) list.Add(EvtSet); return list.ToArray(); } + + + public override string ToString() + { + return GroupNameHash.ToString(); + } } [TypeConverter(typeof(ExpandableObjectConverter))] public class FragPhysEvtSet : ResourceSystemBlock { diff --git a/Forms/ModelForm.cs b/Forms/ModelForm.cs index d2aa184..745d8c3 100644 --- a/Forms/ModelForm.cs +++ b/Forms/ModelForm.cs @@ -824,6 +824,30 @@ namespace CodeWalker.Forms AddDrawableModelsTreeNodes(drawable.DrawableModelsLow, "Low Detail", false); AddDrawableModelsTreeNodes(drawable.DrawableModelsVeryLow, "Very Low Detail", false); //AddSelectionDrawableModelsTreeNodes(item.Drawable.DrawableModelsX, "X Detail", false); + + var fdrawable = drawable as FragDrawable; + if (fdrawable != null) + { + var plod1 = fdrawable.OwnerFragment?.PhysicsLODGroup?.PhysicsLOD1; + if ((plod1 != null) && (plod1.Children?.data_items != null)) + { + foreach (var child in plod1.Children.data_items) + { + var cdrwbl = child.Drawable1; + if ((cdrwbl != null) && (cdrwbl.AllModels?.Length > 0)) + { + if (cdrwbl.Owner is FragDrawable) continue; //it's a copied drawable... eg a wheel + + var dname = child.GroupNameHash.ToString(); + AddDrawableModelsTreeNodes(cdrwbl.DrawableModelsHigh, dname + " - High Detail", true); + AddDrawableModelsTreeNodes(cdrwbl.DrawableModelsMedium, dname + " - Medium Detail", false); + AddDrawableModelsTreeNodes(cdrwbl.DrawableModelsLow, dname + " - Low Detail", false); + AddDrawableModelsTreeNodes(cdrwbl.DrawableModelsVeryLow, dname + " - Very Low Detail", false); + } + } + } + } + } } private void UpdateModelsUI(FragType frag) @@ -845,6 +869,29 @@ namespace CodeWalker.Forms AddDrawableModelsTreeNodes(drawable.DrawableModelsLow, "Low Detail", false); AddDrawableModelsTreeNodes(drawable.DrawableModelsVeryLow, "Very Low Detail", false); //AddSelectionDrawableModelsTreeNodes(item.Drawable.DrawableModelsX, "X Detail", false); + + var fdrawable = drawable as FragDrawable; + if (fdrawable != null) + { + var plod1 = fdrawable.OwnerFragment?.PhysicsLODGroup?.PhysicsLOD1; + if ((plod1 != null) && (plod1.Children?.data_items != null)) + { + foreach (var child in plod1.Children.data_items) + { + var cdrwbl = child.Drawable1; + if ((cdrwbl != null) && (cdrwbl.AllModels?.Length > 0)) + { + if (cdrwbl.Owner is FragDrawable) continue; //it's a copied drawable... eg a wheel + + var dname = child.GroupNameHash.ToString(); + AddDrawableModelsTreeNodes(cdrwbl.DrawableModelsHigh, dname + " - High Detail", true); + AddDrawableModelsTreeNodes(cdrwbl.DrawableModelsMedium, dname + " - Medium Detail", false); + AddDrawableModelsTreeNodes(cdrwbl.DrawableModelsLow, dname + " - Low Detail", false); + AddDrawableModelsTreeNodes(cdrwbl.DrawableModelsVeryLow, dname + " - Very Low Detail", false); + } + } + } + } } } private void UpdateModelsUI(Dictionary dict) diff --git a/Rendering/Renderer.cs b/Rendering/Renderer.cs index 1eebd58..a7bf58f 100644 --- a/Rendering/Renderer.cs +++ b/Rendering/Renderer.cs @@ -2211,23 +2211,59 @@ namespace CodeWalker.Rendering RenderDrawable(f.Drawable, arch, ent, txdhash); - if (f.Unknown_F8h_Data != null) //cloth + if (f.Drawable2 != null) //cloth { - RenderDrawable(f.Unknown_F8h_Data, arch, ent, txdhash); + RenderDrawable(f.Drawable2, arch, ent, txdhash); } //vehicle wheels... if ((f.PhysicsLODGroup != null) && (f.PhysicsLODGroup.PhysicsLOD1 != null)) { var pl1 = f.PhysicsLODGroup.PhysicsLOD1; - if ((pl1.Children != null) && (pl1.Children.data_items != null)) + //var groupnames = pl1?.GroupNames?.data_items; + var groups = pl1?.Groups?.data_items; + + FragDrawable wheel_f = null; + FragDrawable wheel_r = null; + + if (pl1.Children?.data_items != null) { for (int i = 0; i < pl1.Children.data_items.Length; i++) { var pch = pl1.Children.data_items[i]; + + //var groupname = pch.GroupNameHash; + //if ((pl1.Groups?.data_items != null) && (i < pl1.Groups.data_items.Length)) + //{ + // //var group = pl1.Groups.data_items[i]; + //} + if ((pch.Drawable1 != null) && (pch.Drawable1.AllModels.Length != 0)) { - RenderDrawable(pch.Drawable1, arch, ent, txdhash); + + switch (pch.BoneTag) + { + case 27922: //wheel_lf + case 26418: //wheel_rf + wheel_f = pch.Drawable1; + break; + case 29921: //wheel_lm1 + case 29922: //wheel_lm2 + case 29923: //wheel_lm3 + case 27902: //wheel_lr + case 5857: //wheel_rm1 + case 5858: //wheel_rm2 + case 5859: //wheel_rm3 + case 26398: //wheel_rr + wheel_r = pch.Drawable1; + break; + default: + + RenderDrawable(pch.Drawable1, arch, ent, txdhash); + + break; + } + } else { } @@ -2238,6 +2274,79 @@ namespace CodeWalker.Rendering else { } } + + if ((wheel_f != null) || (wheel_r != null)) + { + for (int i = 0; i < pl1.Children.data_items.Length; i++) + { + var pch = pl1.Children.data_items[i]; + FragDrawable dwbl = pch.Drawable1; + FragDrawable dwblcopy = null; + switch (pch.BoneTag) + { + case 27922: //wheel_lf + case 26418: //wheel_rf + dwblcopy = wheel_f != null ? wheel_f : wheel_r; + break; + case 29921: //wheel_lm1 + case 29922: //wheel_lm2 + case 29923: //wheel_lm3 + case 27902: //wheel_lr + case 5857: //wheel_rm1 + case 5858: //wheel_rm2 + case 5859: //wheel_rm3 + case 26398: //wheel_rr + dwblcopy = wheel_r != null ? wheel_r : wheel_f; + break; + default: + break; + } + //switch (pch.GroupNameHash) + //{ + // case 3311608449: //wheel_lf + // case 1705452237: //wheel_lm1 + // case 1415282742: //wheel_lm2 + // case 3392433122: //wheel_lm3 + // case 133671269: //wheel_rf + // case 2908525601: //wheel_rm1 + // case 2835549038: //wheel_rm2 + // case 4148013026: //wheel_rm3 + // dwblcopy = wheel_f != null ? wheel_f : wheel_r; + // break; + // case 1695736278: //wheel_lr + // case 1670111368: //wheel_rr + // dwblcopy = wheel_r != null ? wheel_r : wheel_f; + // break; + // default: + // break; + //} + + if (dwblcopy != null) + { + if (dwbl != null) + { + if ((dwbl != dwblcopy) && (dwbl.AllModels.Length == 0)) + { + dwbl.Owner = dwblcopy; + dwbl.AllModels = dwblcopy.AllModels; + dwbl.DrawableModelsHigh = dwblcopy.DrawableModelsHigh; + dwbl.DrawableModelsMedium = dwblcopy.DrawableModelsMedium; + dwbl.DrawableModelsLow = dwblcopy.DrawableModelsLow; + dwbl.DrawableModelsVeryLow = dwblcopy.DrawableModelsVeryLow; + dwbl.VertexDecls = dwblcopy.VertexDecls; + } + + RenderDrawable(dwbl, arch, ent, txdhash); + + } + else + { } + } + else + { } + } + } + } } @@ -2321,9 +2430,9 @@ namespace CodeWalker.Rendering if (fd != null) { var frag = fd.OwnerFragment; - if ((frag != null) && (frag.Unknown_F8h_Data != null)) //cloth... + if ((frag != null) && (frag.Drawable2 != null)) //cloth... { - rndbl = TryGetRenderable(arche, frag.Unknown_F8h_Data); + rndbl = TryGetRenderable(arche, frag.Drawable2); if (rndbl != null) { bool res2 = RenderRenderable(rndbl, arche, entity); diff --git a/Vehicles/VehicleForm.Designer.cs b/Vehicles/VehicleForm.Designer.cs index 2bcf081..dd386e6 100644 --- a/Vehicles/VehicleForm.Designer.cs +++ b/Vehicles/VehicleForm.Designer.cs @@ -37,7 +37,11 @@ this.StatsUpdateTimer = new System.Windows.Forms.Timer(this.components); this.ToolsPanel = new System.Windows.Forms.Panel(); this.ToolsTabControl = new System.Windows.Forms.TabControl(); + this.ToolsVehicleTabPage = new System.Windows.Forms.TabPage(); + this.label3 = new System.Windows.Forms.Label(); + this.VehicleModelComboBox = new System.Windows.Forms.ComboBox(); this.ToolsModelsTabPage = new System.Windows.Forms.TabPage(); + this.ModelsTreeView = new CodeWalker.WinForms.TreeViewFix(); this.ToolsTexturesTabPage = new System.Windows.Forms.TabPage(); this.TextureViewerButton = new System.Windows.Forms.Button(); this.TexturesTreeView = new CodeWalker.WinForms.TreeViewFix(); @@ -71,13 +75,18 @@ this.label14 = new System.Windows.Forms.Label(); this.ToolsPanelHideButton = new System.Windows.Forms.Button(); this.ToolsDragPanel = new System.Windows.Forms.Panel(); - this.ModelsTreeView = new CodeWalker.WinForms.TreeViewFix(); this.ToolsPanelShowButton = new System.Windows.Forms.Button(); this.ConsolePanel = new System.Windows.Forms.Panel(); this.ConsoleTextBox = new CodeWalker.WinForms.TextBoxFix(); + this.label4 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.VehicleMakeLabel = new System.Windows.Forms.Label(); + this.VehicleNameLabel = new System.Windows.Forms.Label(); + this.VehicleHighDetailCheckBox = new System.Windows.Forms.CheckBox(); this.StatusStrip.SuspendLayout(); this.ToolsPanel.SuspendLayout(); this.ToolsTabControl.SuspendLayout(); + this.ToolsVehicleTabPage.SuspendLayout(); this.ToolsModelsTabPage.SuspendLayout(); this.ToolsTexturesTabPage.SuspendLayout(); this.ToolsDetailsTabPage.SuspendLayout(); @@ -138,7 +147,7 @@ this.ToolsPanel.Controls.Add(this.ToolsDragPanel); this.ToolsPanel.Location = new System.Drawing.Point(12, 12); this.ToolsPanel.Name = "ToolsPanel"; - this.ToolsPanel.Size = new System.Drawing.Size(233, 666); + this.ToolsPanel.Size = new System.Drawing.Size(252, 666); this.ToolsPanel.TabIndex = 3; this.ToolsPanel.Visible = false; // @@ -147,6 +156,7 @@ this.ToolsTabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); + this.ToolsTabControl.Controls.Add(this.ToolsVehicleTabPage); this.ToolsTabControl.Controls.Add(this.ToolsModelsTabPage); this.ToolsTabControl.Controls.Add(this.ToolsTexturesTabPage); this.ToolsTabControl.Controls.Add(this.ToolsDetailsTabPage); @@ -154,20 +164,73 @@ this.ToolsTabControl.Location = new System.Drawing.Point(2, 30); this.ToolsTabControl.Name = "ToolsTabControl"; this.ToolsTabControl.SelectedIndex = 0; - this.ToolsTabControl.Size = new System.Drawing.Size(228, 633); + this.ToolsTabControl.Size = new System.Drawing.Size(247, 633); this.ToolsTabControl.TabIndex = 1; // + // ToolsVehicleTabPage + // + this.ToolsVehicleTabPage.Controls.Add(this.VehicleHighDetailCheckBox); + this.ToolsVehicleTabPage.Controls.Add(this.VehicleNameLabel); + this.ToolsVehicleTabPage.Controls.Add(this.VehicleMakeLabel); + this.ToolsVehicleTabPage.Controls.Add(this.label5); + this.ToolsVehicleTabPage.Controls.Add(this.label4); + this.ToolsVehicleTabPage.Controls.Add(this.label3); + this.ToolsVehicleTabPage.Controls.Add(this.VehicleModelComboBox); + this.ToolsVehicleTabPage.Location = new System.Drawing.Point(4, 22); + this.ToolsVehicleTabPage.Name = "ToolsVehicleTabPage"; + this.ToolsVehicleTabPage.Size = new System.Drawing.Size(239, 607); + this.ToolsVehicleTabPage.TabIndex = 4; + this.ToolsVehicleTabPage.Text = "Vehicle"; + this.ToolsVehicleTabPage.UseVisualStyleBackColor = true; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(3, 11); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(39, 13); + this.label3.TabIndex = 1; + this.label3.Text = "Model:"; + // + // VehicleModelComboBox + // + this.VehicleModelComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.VehicleModelComboBox.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend; + this.VehicleModelComboBox.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems; + this.VehicleModelComboBox.FormattingEnabled = true; + this.VehicleModelComboBox.Location = new System.Drawing.Point(54, 8); + this.VehicleModelComboBox.Name = "VehicleModelComboBox"; + this.VehicleModelComboBox.Size = new System.Drawing.Size(182, 21); + this.VehicleModelComboBox.TabIndex = 0; + this.VehicleModelComboBox.TextChanged += new System.EventHandler(this.VehicleModelComboBox_TextChanged); + // // ToolsModelsTabPage // this.ToolsModelsTabPage.Controls.Add(this.ModelsTreeView); this.ToolsModelsTabPage.Location = new System.Drawing.Point(4, 22); this.ToolsModelsTabPage.Name = "ToolsModelsTabPage"; this.ToolsModelsTabPage.Padding = new System.Windows.Forms.Padding(3); - this.ToolsModelsTabPage.Size = new System.Drawing.Size(220, 607); + this.ToolsModelsTabPage.Size = new System.Drawing.Size(239, 607); this.ToolsModelsTabPage.TabIndex = 0; this.ToolsModelsTabPage.Text = "Models"; this.ToolsModelsTabPage.UseVisualStyleBackColor = true; // + // ModelsTreeView + // + this.ModelsTreeView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ModelsTreeView.CheckBoxes = true; + this.ModelsTreeView.Location = new System.Drawing.Point(0, 3); + this.ModelsTreeView.Name = "ModelsTreeView"; + this.ModelsTreeView.ShowRootLines = false; + this.ModelsTreeView.Size = new System.Drawing.Size(239, 604); + this.ModelsTreeView.TabIndex = 2; + this.ModelsTreeView.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.ModelsTreeView_AfterCheck); + this.ModelsTreeView.NodeMouseDoubleClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.ModelsTreeView_NodeMouseDoubleClick); + this.ModelsTreeView.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.ModelsTreeView_KeyPress); + // // ToolsTexturesTabPage // this.ToolsTexturesTabPage.Controls.Add(this.TextureViewerButton); @@ -175,7 +238,7 @@ this.ToolsTexturesTabPage.Location = new System.Drawing.Point(4, 22); this.ToolsTexturesTabPage.Name = "ToolsTexturesTabPage"; this.ToolsTexturesTabPage.Padding = new System.Windows.Forms.Padding(3); - this.ToolsTexturesTabPage.Size = new System.Drawing.Size(220, 607); + this.ToolsTexturesTabPage.Size = new System.Drawing.Size(239, 607); this.ToolsTexturesTabPage.TabIndex = 1; this.ToolsTexturesTabPage.Text = "Textures"; this.ToolsTexturesTabPage.UseVisualStyleBackColor = true; @@ -198,7 +261,7 @@ this.TexturesTreeView.Location = new System.Drawing.Point(0, 34); this.TexturesTreeView.Name = "TexturesTreeView"; this.TexturesTreeView.ShowRootLines = false; - this.TexturesTreeView.Size = new System.Drawing.Size(220, 573); + this.TexturesTreeView.Size = new System.Drawing.Size(239, 573); this.TexturesTreeView.TabIndex = 1; // // ToolsDetailsTabPage @@ -206,7 +269,7 @@ this.ToolsDetailsTabPage.Controls.Add(this.DetailsPropertyGrid); this.ToolsDetailsTabPage.Location = new System.Drawing.Point(4, 22); this.ToolsDetailsTabPage.Name = "ToolsDetailsTabPage"; - this.ToolsDetailsTabPage.Size = new System.Drawing.Size(220, 607); + this.ToolsDetailsTabPage.Size = new System.Drawing.Size(239, 607); this.ToolsDetailsTabPage.TabIndex = 2; this.ToolsDetailsTabPage.Text = "Details"; this.ToolsDetailsTabPage.UseVisualStyleBackColor = true; @@ -221,7 +284,7 @@ this.DetailsPropertyGrid.Name = "DetailsPropertyGrid"; this.DetailsPropertyGrid.PropertySort = System.Windows.Forms.PropertySort.NoSort; this.DetailsPropertyGrid.ReadOnly = true; - this.DetailsPropertyGrid.Size = new System.Drawing.Size(220, 604); + this.DetailsPropertyGrid.Size = new System.Drawing.Size(239, 604); this.DetailsPropertyGrid.TabIndex = 1; this.DetailsPropertyGrid.ToolbarVisible = false; // @@ -254,7 +317,7 @@ this.ToolsOptionsTabPage.Controls.Add(this.label14); this.ToolsOptionsTabPage.Location = new System.Drawing.Point(4, 22); this.ToolsOptionsTabPage.Name = "ToolsOptionsTabPage"; - this.ToolsOptionsTabPage.Size = new System.Drawing.Size(220, 607); + this.ToolsOptionsTabPage.Size = new System.Drawing.Size(239, 607); this.ToolsOptionsTabPage.TabIndex = 3; this.ToolsOptionsTabPage.Text = "Options"; this.ToolsOptionsTabPage.UseVisualStyleBackColor = true; @@ -310,7 +373,7 @@ this.TimeOfDayTrackBar.Location = new System.Drawing.Point(9, 125); this.TimeOfDayTrackBar.Maximum = 1440; this.TimeOfDayTrackBar.Name = "TimeOfDayTrackBar"; - this.TimeOfDayTrackBar.Size = new System.Drawing.Size(203, 45); + this.TimeOfDayTrackBar.Size = new System.Drawing.Size(222, 45); this.TimeOfDayTrackBar.TabIndex = 6; this.TimeOfDayTrackBar.TickFrequency = 60; this.TimeOfDayTrackBar.Value = 720; @@ -570,7 +633,7 @@ this.ToolsDragPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Right))); this.ToolsDragPanel.Cursor = System.Windows.Forms.Cursors.VSplit; - this.ToolsDragPanel.Location = new System.Drawing.Point(230, 0); + this.ToolsDragPanel.Location = new System.Drawing.Point(249, 0); this.ToolsDragPanel.Name = "ToolsDragPanel"; this.ToolsDragPanel.Size = new System.Drawing.Size(4, 666); this.ToolsDragPanel.TabIndex = 17; @@ -578,21 +641,6 @@ this.ToolsDragPanel.MouseMove += new System.Windows.Forms.MouseEventHandler(this.ToolsDragPanel_MouseMove); this.ToolsDragPanel.MouseUp += new System.Windows.Forms.MouseEventHandler(this.ToolsDragPanel_MouseUp); // - // ModelsTreeView - // - this.ModelsTreeView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ModelsTreeView.CheckBoxes = true; - this.ModelsTreeView.Location = new System.Drawing.Point(0, 3); - this.ModelsTreeView.Name = "ModelsTreeView"; - this.ModelsTreeView.ShowRootLines = false; - this.ModelsTreeView.Size = new System.Drawing.Size(220, 604); - this.ModelsTreeView.TabIndex = 2; - this.ModelsTreeView.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.ModelsTreeView_AfterCheck); - this.ModelsTreeView.NodeMouseDoubleClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.ModelsTreeView_NodeMouseDoubleClick); - this.ModelsTreeView.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.ModelsTreeView_KeyPress); - // // ToolsPanelShowButton // this.ToolsPanelShowButton.Location = new System.Drawing.Point(15, 15); @@ -609,9 +657,9 @@ | System.Windows.Forms.AnchorStyles.Right))); this.ConsolePanel.BackColor = System.Drawing.SystemColors.Control; this.ConsolePanel.Controls.Add(this.ConsoleTextBox); - this.ConsolePanel.Location = new System.Drawing.Point(252, 577); + this.ConsolePanel.Location = new System.Drawing.Point(271, 577); this.ConsolePanel.Name = "ConsolePanel"; - this.ConsolePanel.Size = new System.Drawing.Size(720, 101); + this.ConsolePanel.Size = new System.Drawing.Size(701, 101); this.ConsolePanel.TabIndex = 5; this.ConsolePanel.Visible = false; // @@ -624,9 +672,58 @@ this.ConsoleTextBox.Multiline = true; this.ConsoleTextBox.Name = "ConsoleTextBox"; this.ConsoleTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.ConsoleTextBox.Size = new System.Drawing.Size(714, 95); + this.ConsoleTextBox.Size = new System.Drawing.Size(695, 95); this.ConsoleTextBox.TabIndex = 0; // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(3, 41); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(37, 13); + this.label4.TabIndex = 2; + this.label4.Text = "Make:"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(3, 63); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(38, 13); + this.label5.TabIndex = 3; + this.label5.Text = "Name:"; + // + // VehicleMakeLabel + // + this.VehicleMakeLabel.AutoSize = true; + this.VehicleMakeLabel.Location = new System.Drawing.Point(51, 41); + this.VehicleMakeLabel.Name = "VehicleMakeLabel"; + this.VehicleMakeLabel.Size = new System.Drawing.Size(10, 13); + this.VehicleMakeLabel.TabIndex = 4; + this.VehicleMakeLabel.Text = "-"; + // + // VehicleNameLabel + // + this.VehicleNameLabel.AutoSize = true; + this.VehicleNameLabel.Location = new System.Drawing.Point(51, 63); + this.VehicleNameLabel.Name = "VehicleNameLabel"; + this.VehicleNameLabel.Size = new System.Drawing.Size(10, 13); + this.VehicleNameLabel.TabIndex = 5; + this.VehicleNameLabel.Text = "-"; + // + // VehicleHighDetailCheckBox + // + this.VehicleHighDetailCheckBox.AutoSize = true; + this.VehicleHighDetailCheckBox.Checked = true; + this.VehicleHighDetailCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; + this.VehicleHighDetailCheckBox.Location = new System.Drawing.Point(54, 90); + this.VehicleHighDetailCheckBox.Name = "VehicleHighDetailCheckBox"; + this.VehicleHighDetailCheckBox.Size = new System.Drawing.Size(120, 17); + this.VehicleHighDetailCheckBox.TabIndex = 6; + this.VehicleHighDetailCheckBox.Text = "High detail fragment"; + this.VehicleHighDetailCheckBox.UseVisualStyleBackColor = true; + this.VehicleHighDetailCheckBox.CheckedChanged += new System.EventHandler(this.VehicleHighDetailCheckBox_CheckedChanged); + // // VehicleForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -652,6 +749,8 @@ this.StatusStrip.PerformLayout(); this.ToolsPanel.ResumeLayout(false); this.ToolsTabControl.ResumeLayout(false); + this.ToolsVehicleTabPage.ResumeLayout(false); + this.ToolsVehicleTabPage.PerformLayout(); this.ToolsModelsTabPage.ResumeLayout(false); this.ToolsTexturesTabPage.ResumeLayout(false); this.ToolsDetailsTabPage.ResumeLayout(false); @@ -712,5 +811,13 @@ private System.Windows.Forms.Button ToolsPanelShowButton; private System.Windows.Forms.Panel ConsolePanel; private WinForms.TextBoxFix ConsoleTextBox; + private System.Windows.Forms.TabPage ToolsVehicleTabPage; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.ComboBox VehicleModelComboBox; + private System.Windows.Forms.Label VehicleNameLabel; + private System.Windows.Forms.Label VehicleMakeLabel; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.CheckBox VehicleHighDetailCheckBox; } } \ No newline at end of file diff --git a/Vehicles/VehicleForm.cs b/Vehicles/VehicleForm.cs index 0dcd051..1cb8c08 100644 --- a/Vehicles/VehicleForm.cs +++ b/Vehicles/VehicleForm.cs @@ -75,6 +75,13 @@ namespace CodeWalker.Vehicles + MetaHash SelectedVehicleHash = 0;//base vehicle name hash + MetaHash SelectedModelHash = 0;//yft name hash, can be _hi + VehicleInitData SelectedVehicleInit = null; + YftFile SelectedVehicleYft = null; + + + public VehicleForm() @@ -181,18 +188,8 @@ namespace CodeWalker.Vehicles Renderer.SelectedDrawable = null;// SelectedItem.Drawable; - //if (renderworld) - //{ - // RenderWorld(); - //} - //else if (rendermaps) - //{ - // RenderYmaps(); - //} - //else - //{ - // RenderSingleItem(); - //} + RenderVehicle(); + //UpdateMouseHitsFromRenderer(); //RenderSelection(); @@ -292,12 +289,16 @@ namespace CodeWalker.Vehicles GameFileCache.LoadVehicles = true; GameFileCache.LoadArchetypes = false;//to speed things up a little GameFileCache.BuildExtendedJenkIndex = false;//to speed things up a little + GameFileCache.DoFullStringIndex = true;//to get all global text from DLC... GameFileCache.Init(UpdateStatus, LogError); //UpdateDlcListComboBox(gameFileCache.DlcNameList); //EnableCacheDependentUI(); + UpdateGlobalVehiclesUI(); + + LoadWorld(); @@ -580,6 +581,37 @@ namespace CodeWalker.Vehicles } } + + private void UpdateGlobalVehiclesUI() + { + if (InvokeRequired) + { + BeginInvoke(new Action(() => { UpdateGlobalVehiclesUI(); })); + } + else + { + VehicleModelComboBox.Items.Clear(); + + var vehicles = GameFileCache.VehiclesInitDict.Values.ToList(); + vehicles.Sort((a, b) => { return a.modelName.CompareTo(b.modelName); }); + + foreach (var vehicle in vehicles) + { + VehicleModelComboBox.Items.Add(vehicle.modelName); + } + + if (vehicles.Count > 0) + { + VehicleModelComboBox.SelectedIndex = 0; + } + } + + } + + + + + private void UpdateModelsUI(DrawableBase drawable) { DetailsPropertyGrid.SelectedObject = drawable; @@ -597,10 +629,74 @@ namespace CodeWalker.Vehicles AddDrawableModelsTreeNodes(drawable.DrawableModelsLow, "Low Detail", false); AddDrawableModelsTreeNodes(drawable.DrawableModelsVeryLow, "Very Low Detail", false); //AddSelectionDrawableModelsTreeNodes(item.Drawable.DrawableModelsX, "X Detail", false); + + + var fdrawable = drawable as FragDrawable; + if (fdrawable != null) + { + var plod1 = fdrawable.OwnerFragment?.PhysicsLODGroup?.PhysicsLOD1; + if ((plod1 != null) && (plod1.Children?.data_items != null)) + { + foreach (var child in plod1.Children.data_items) + { + var cdrwbl = child.Drawable1; + if ((cdrwbl != null) && (cdrwbl.AllModels?.Length > 0)) + { + if (cdrwbl.Owner is FragDrawable) continue; //it's a copied drawable... eg a wheel + + var dname = child.GroupNameHash.ToString(); + AddDrawableModelsTreeNodes(cdrwbl.DrawableModelsHigh, dname + " - High Detail", true); + AddDrawableModelsTreeNodes(cdrwbl.DrawableModelsMedium, dname + " - Medium Detail", false); + AddDrawableModelsTreeNodes(cdrwbl.DrawableModelsLow, dname + " - Low Detail", false); + AddDrawableModelsTreeNodes(cdrwbl.DrawableModelsVeryLow, dname + " - Very Low Detail", false); + } + } + } + } + } } - public void LoadModel(YftFile yft) + + + public void LoadVehicle() + { + var modelname = VehicleModelComboBox.Text; + var modelnamel = modelname.ToLowerInvariant(); + MetaHash modelhash = JenkHash.GenHash(modelnamel); + MetaHash modelhashhi = JenkHash.GenHash(modelnamel + "_hi"); + bool hidet = VehicleHighDetailCheckBox.Checked; + var yfthash = hidet ? modelhashhi : modelhash; + + VehicleInitData vid = null; + if (GameFileCache.VehiclesInitDict.TryGetValue(modelhash, out vid)) + { + bool vehiclechange = SelectedVehicleHash != modelhash; + SelectedModelHash = yfthash; + SelectedVehicleHash = modelhash; + SelectedVehicleInit = vid; + SelectedVehicleYft = GameFileCache.GetYft(SelectedModelHash); + while (!SelectedVehicleYft.Loaded) + { + Thread.Sleep(20);//kinda hacky + SelectedVehicleYft = GameFileCache.GetYft(SelectedModelHash); + } + LoadModel(SelectedVehicleYft, vehiclechange); + VehicleMakeLabel.Text = GlobalText.TryGetString(JenkHash.GenHash(vid.vehicleMakeName.ToLower())); + VehicleNameLabel.Text = GlobalText.TryGetString(JenkHash.GenHash(vid.gameName.ToLower())); + } + else + { + SelectedModelHash = 0; + SelectedVehicleHash = 0; + SelectedVehicleInit = null; + SelectedVehicleYft = null; + VehicleMakeLabel.Text = "-"; + VehicleNameLabel.Text = "-"; + } + } + + public void LoadModel(YftFile yft, bool movecamera = true) { if (yft == null) return; @@ -608,7 +704,7 @@ namespace CodeWalker.Vehicles //Yft = yft; var dr = yft.Fragment?.Drawable; - if (dr != null) + if (movecamera && (dr != null)) { MoveCameraToView(dr.BoundingCenter, dr.BoundingSphereRadius); } @@ -792,6 +888,44 @@ namespace CodeWalker.Vehicles + private void RenderVehicle() + { + + YftFile yft = GameFileCache.GetYft(SelectedModelHash); + if (yft != null) + { + if (yft.Loaded) + { + if (yft.Fragment != null) + { + var f = yft.Fragment; + + var txdhash = SelectedVehicleHash;// yft.RpfFileEntry?.ShortNameHash ?? 0; + + var namelower = yft.RpfFileEntry?.GetShortNameLower(); + if (namelower?.EndsWith("_hi") ?? false) + { + txdhash = JenkHash.GenHash(namelower.Substring(0, namelower.Length - 3)); + } + + Archetype arch = null;// TryGetArchetype(hash); + + Renderer.RenderFragment(arch, null, f, txdhash); + + //seldrwbl = f.Drawable; + } + } + } + + } + + + + + + + + private void VehicleForm_Load(object sender, EventArgs e) { Init(); @@ -1275,5 +1409,21 @@ namespace CodeWalker.Vehicles // MessageBox.Show("Couldn't find embedded texture dict."); //} } + + + + private void VehicleModelComboBox_TextChanged(object sender, EventArgs e) + { + if (!GameFileCache.IsInited) return; + + LoadVehicle(); + } + + private void VehicleHighDetailCheckBox_CheckedChanged(object sender, EventArgs e) + { + if (!GameFileCache.IsInited) return; + + LoadVehicle(); + } } } From 9506069e35c1e66b1036484458f286e2cdcdd346 Mon Sep 17 00:00:00 2001 From: dexy Date: Sun, 13 Jan 2019 18:13:03 +1100 Subject: [PATCH 088/158] Fixed bug in PSO/XML conversion for structure pointers --- .../GameFiles/MetaTypes/MetaXml.cs | 3 +++ CodeWalker.Core/GameFiles/MetaTypes/XmlPso.cs | 19 ++++++++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs index fd9499e..b262c78 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs @@ -885,7 +885,10 @@ namespace CodeWalker.GameFiles } if (pbok) { + var typename = HashString(cont.Pso.GetBlock(pbid).NameHash); + OpenTag(sb, cind, ename + " type=\"" + typename + "\""); WriteNode(sb, cind, cont, ptrVal.BlockID, (int)ptrVal.ItemOffset, XmlTagMode.None, (MetaName)entry.ReferenceKey); + CloseTag(sb, cind, ename); } else { diff --git a/CodeWalker.Core/GameFiles/MetaTypes/XmlPso.cs b/CodeWalker.Core/GameFiles/MetaTypes/XmlPso.cs index 40f4cdb..6db51fd 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/XmlPso.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/XmlPso.cs @@ -83,7 +83,16 @@ namespace CodeWalker.GameFiles } case PsoDataType.Structure: { - var struc = Traverse(cnode, pb, (MetaName)entry.ReferenceKey); + var stype = (MetaName)entry.ReferenceKey; + if (stype == 0) + { + var stypestr = Xml.GetStringAttribute(cnode, "type"); + if (!string.IsNullOrEmpty(stypestr)) + { + stype = (MetaName)(uint)GetHash(stypestr); + } + } + var struc = Traverse(cnode, pb, stype); if (struc != null) { switch (entry.Unk_5h) @@ -99,7 +108,7 @@ namespace CodeWalker.GameFiles case 3: //structure pointer... case 4: //also pointer? what's the difference? - var bptr = pb.AddItem((MetaName)entry.ReferenceKey, struc); + var bptr = pb.AddItem(stype, struc); var ptr = new PsoPOINTER(bptr.BlockID, bptr.Offset, 0); ptr.SwapEnd(); var ptrb = MetaTypes.ConvertToBytes(ptr); @@ -109,6 +118,8 @@ namespace CodeWalker.GameFiles break; } } + else + { } break; } case PsoDataType.Map: @@ -176,7 +187,7 @@ namespace CodeWalker.GameFiles else { uval = Convert.ToUInt32(ustr); - } + } Write(uval, data, entry.DataOffset); break; } @@ -348,6 +359,8 @@ namespace CodeWalker.GameFiles return data; } + else + { }//info not found return null; } From 6ecfe0f23571298bd342d3b44747641ffd4f249d Mon Sep 17 00:00:00 2001 From: dexy Date: Sun, 13 Jan 2019 19:25:53 +1100 Subject: [PATCH 089/158] Fixed bug in reading some PSO arrays --- CodeWalker.Core/GameFiles/GameFileCache.cs | 3 ++- CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index 7ba8d7a..f740607 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -2641,7 +2641,8 @@ namespace CodeWalker.GameFiles { } if (entry.NameLower == "popgroups.ymt") { } - + if (entry.NameLower == "clip_sets.ymt") + { } } } diff --git a/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs b/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs index 8294d76..0e50ff1 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs @@ -15909,7 +15909,7 @@ namespace CodeWalker.GameFiles { return null; } - var entryoffset = (arr.Pointer & 0xFFFFFF) >> 12; + var entryoffset = (arr.Pointer >> 12) & 0xFFFFF; var arrentry = pso.DataMapSection.Entries[(int)entryid - 1]; int totoffset = arrentry.Offset + (int)entryoffset; uint[] readdata = ConvertDataArrayRaw(data, totoffset, arr.Count1); @@ -15949,7 +15949,7 @@ namespace CodeWalker.GameFiles { return null; } - var entryoffset = (arr.Pointer & 0xFFFFFF) >> 12; + var entryoffset = (arr.Pointer >> 12) & 0xFFFFF; var arrentry = pso.DataMapSection.Entries[(int)entryid - 1]; int totoffset = arrentry.Offset + (int)entryoffset; float[] readdata = ConvertDataArrayRaw(data, totoffset, arr.Count1); @@ -15978,7 +15978,7 @@ namespace CodeWalker.GameFiles { return null; } - var entryoffset = (arr.Pointer & 0xFFFFFF) >> 12; + var entryoffset = (arr.Pointer >> 12) & 0xFFFFF; var arrentry = pso.DataMapSection.Entries[(int)entryid - 1]; int totoffset = arrentry.Offset + (int)entryoffset; ushort[] readdata = ConvertDataArrayRaw(data, totoffset, arr.Count1); From ac3bcb7f4ee76ffe84e1339a12e437669e1686bd Mon Sep 17 00:00:00 2001 From: dexy Date: Sun, 13 Jan 2019 19:51:49 +1100 Subject: [PATCH 090/158] Added MetaNames by 0x1F9F1 - from companion app --- .../GameFiles/FileTypes/YmapFile.cs | 24 +- .../GameFiles/FileTypes/YtypFile.cs | 8 +- .../GameFiles/MetaTypes/MetaNames.cs | 114 ++++++ .../GameFiles/MetaTypes/MetaTypes.cs | 80 ++--- .../GameFiles/MetaTypes/PsoTypes.cs | 340 +++++++++--------- CodeWalker.Core/World/Scenarios.cs | 2 +- Project/Panels/EditScenarioNodePanel.cs | 12 +- Project/Panels/EditYmapEntityPanel.cs | 30 +- Project/Panels/EditYtypArchetypePanel.cs | 2 +- Project/ProjectForm.cs | 14 +- Rendering/Renderer.cs | 8 +- WorldForm.cs | 18 +- 12 files changed, 383 insertions(+), 269 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs index 56098ac..9712ff0 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs @@ -313,8 +313,8 @@ namespace CodeWalker.GameFiles { YmapEntityDef p = alldefs[pind]; if ((p._CEntityDef.lodLevel <= d._CEntityDef.lodLevel) || - ((p._CEntityDef.lodLevel == Unk_1264241711.LODTYPES_DEPTH_ORPHANHD) && - (d._CEntityDef.lodLevel != Unk_1264241711.LODTYPES_DEPTH_ORPHANHD))) + ((p._CEntityDef.lodLevel == rage__eLodType.LODTYPES_DEPTH_ORPHANHD) && + (d._CEntityDef.lodLevel != rage__eLodType.LODTYPES_DEPTH_ORPHANHD))) { isroot = true; p = null; @@ -701,8 +701,8 @@ namespace CodeWalker.GameFiles mb.AddStructureInfo(MetaName.CCarGen); } - mb.AddEnumInfo((MetaName)1264241711); //LODTYPES_ - mb.AddEnumInfo((MetaName)648413703); //PRI_ + mb.AddEnumInfo(MetaName.rage__eLodType); //LODTYPES_ + mb.AddEnumInfo(MetaName.rage__ePriorityLevel); //PRI_ Meta meta = mb.GetMeta(); @@ -782,7 +782,7 @@ namespace CodeWalker.GameFiles int pind = rcent._CEntityDef.parentIndex; if (pind < 0) { - if (rcent._CEntityDef.lodLevel != Unk_1264241711.LODTYPES_DEPTH_ORPHANHD) + if (rcent._CEntityDef.lodLevel != rage__eLodType.LODTYPES_DEPTH_ORPHANHD) { } //pind = 0; @@ -987,21 +987,21 @@ namespace CodeWalker.GameFiles { switch (yent._CEntityDef.lodLevel) { - case Unk_1264241711.LODTYPES_DEPTH_ORPHANHD: - case Unk_1264241711.LODTYPES_DEPTH_HD: + case rage__eLodType.LODTYPES_DEPTH_ORPHANHD: + case rage__eLodType.LODTYPES_DEPTH_HD: contentFlags = SetBit(contentFlags, 0); //1 break; - case Unk_1264241711.LODTYPES_DEPTH_LOD: + case rage__eLodType.LODTYPES_DEPTH_LOD: contentFlags = SetBit(contentFlags, 1); //2 flags = SetBit(flags, 1); //2 break; - case Unk_1264241711.LODTYPES_DEPTH_SLOD1: + case rage__eLodType.LODTYPES_DEPTH_SLOD1: contentFlags = SetBit(contentFlags, 4); //16 flags = SetBit(flags, 1); //2 break; - case Unk_1264241711.LODTYPES_DEPTH_SLOD2: - case Unk_1264241711.LODTYPES_DEPTH_SLOD3: - case Unk_1264241711.LODTYPES_DEPTH_SLOD4: + case rage__eLodType.LODTYPES_DEPTH_SLOD2: + case rage__eLodType.LODTYPES_DEPTH_SLOD3: + case rage__eLodType.LODTYPES_DEPTH_SLOD4: contentFlags = SetBit(contentFlags, 2); //4 contentFlags = SetBit(contentFlags, 4); //16 flags = SetBit(flags, 1); //2 diff --git a/CodeWalker.Core/GameFiles/FileTypes/YtypFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YtypFile.cs index 5911783..88529b4 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YtypFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YtypFile.cs @@ -130,7 +130,7 @@ namespace CodeWalker.GameFiles if ((AllArchetypes != null && AllArchetypes.Length > 0)) { mb.AddStructureInfo(MetaName.CBaseArchetypeDef); - mb.AddEnumInfo((MetaName)1991964615); // ASSET_TYPE_ + mb.AddEnumInfo(MetaName.rage__fwArchetypeDef__eAssetType); // ASSET_TYPE_ } if ((AllArchetypes != null) && (AllArchetypes.Any(x => x is MloArchetype))) @@ -145,8 +145,8 @@ namespace CodeWalker.GameFiles if ((AllArchetypes != null) && (AllArchetypes.Any(x => x is MloArchetype m && m.entities.Length > 0))) { mb.AddStructureInfo(MetaName.CEntityDef); - mb.AddEnumInfo((MetaName)1264241711); //LODTYPES_ - mb.AddEnumInfo((MetaName)648413703); //PRI_ + mb.AddEnumInfo(MetaName.rage__eLodType); //LODTYPES_ + mb.AddEnumInfo(MetaName.rage__ePriorityLevel); //PRI_ } if ((AllArchetypes != null) && (AllArchetypes.Any(x => x is TimeArchetype))) @@ -376,7 +376,7 @@ namespace CodeWalker.GameFiles public Archetype AddArchetype() { var a = new Archetype(); - a._BaseArchetypeDef.assetType = Unk_1991964615.ASSET_TYPE_DRAWABLE; + a._BaseArchetypeDef.assetType = rage__fwArchetypeDef__eAssetType.ASSET_TYPE_DRAWABLE; a._BaseArchetypeDef.lodDist = 60; a._BaseArchetypeDef.hdTextureDist = 15; a.Ytyp = this; diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs index 4b7dc35..f697eb7 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs @@ -8655,6 +8655,120 @@ namespace CodeWalker.GameFiles + + + + + + //from 0x1F9F1 - from companion app - thanks!! + AbsoluteIntensityEnabled = 2168731396, + AllowAnimatedDeadFall = 2283074537, + AnimStreamingBase = 1324611103, + AnimatedDeadFallSet = 1451470102, + AttachedParentName = 734609027, + CDataFileMgr__ChangeSetData = 666520515, + CDataFileMgr__DataFileArray = 3044571784, + CDataFileMgr__ResourceReference = 4089109759, + CScenarioPointFlags__Flags = 700327466, + DeadBlendOutSet = 4254591792, + DirectionalLightMultiplier = 4246749927, + DisableDirectionalLighting = 22229384, + DisableHighQualityDof = 4064056507, + FreezeReflectionMap = 2666061934, + GenericWeaponType = 4160620743, + GetupSet = 1940051574, + LensArtefactMultiplier = 1253384283, + LightFadeDistanceMult = 3267149471, + LightShadowFadeDistanceMult = 3063864558, + LightSpecularFadeDistMult = 71148997, + LightVolumetricFadeDistanceMult = 2331545500, + LodMultHD = 2245753507, + LodMultLod = 129942887, + LodMultOrphanedHD = 3792964618, + LodMultSLod1 = 1682304034, + LodMultSLod2 = 1316012152, + LodMultSLod3 = 1218720991, + LodMultSLod4 = 872811427, + LookIkBlendRate = 1931302076, + LookIkRotationLimit = 4044698613, + LookIkTurnRate = 454750378, + ReflectionLodRangeEnd = 2269408044, + ReflectionLodRangeStart = 3995079835, + ReflectionSLodRangeEnd = 1455403991, + ReflectionSLodRangeStart = 2792355072, + SSAOLightInten = 1099319606, + TextureDictID = 2104882549, + TimeOfDayDofModifers = 3502363965, + WaterReflectionFarClip = 1832730358, + allowedFolders = 3665250723, + athFxListHash = 1844888803, + bCanApplyRealDamage = 3754821582, + bUseTimeCycleValues = 1299282176, + bValidForPlayBack = 1999956592, + cRenderTargetName = 4294123624, + cameraCutHashName = 1262004121, + clipVariationSets = 1333660780, + discardFrameList = 1234565986, + eAnimBoneTag = 2363471356, + eAnimPlayerFlag = 224899699, + eCurveType = 3921015781, + eStreamingPolicy = 1631789397, + eStreamingPriority = 733577798, + fExponentialFallOff = 1342101, + fExteriorFootZoom = 3725084347, + fExteriorFootZoomRunning = 4112712376, + fExteriorFootZoomWanted = 646913210, + fExteriorFootZoomWantedRunning = 397988749, + fFowWaterHeight = 1452712925, + fInnerConeAngle = 2725338958, + fInteriorFootZoom = 3533921583, + fMapLodScale = 3931395097, + fRangeZoomedScalarPlane = 928938887, + fRangeZoomedScalarStandard = 707151806, + fVehicleMovingWantedZoom = 709315443, + fVehicleMovingZoom = 4088397509, + fVehicleSpeedZoomScalar = 1734631491, + fVehicleStaticWantedZoom = 3692711717, + fVehicleStaticZoom = 2402173156, + fVolumeSizeScale = 75610905, + fwClipVariationSet = 1005381910, + fwProfanityFilter = 932638721, + iAltRangeEnd = 4079543520, + iAttachBoneHash = 3936668519, + iAttachParentId = 867510818, + iBlendOutCutsceneDuration = 1783584102, + iBlendOutCutsceneOffset = 660302675, + iSecondBodyColour = 1237172464, + iWheelTrimColour = 2225359196, + interpolateToDisabled = 2862808673, + modelHashName = 2549745289, + pChildEvents = 3754530640, + profaneTerms = 4259179796, + rage__cutfAttributeList = 1016128875, + rage__eLodType = 1264241711, + rage__ePriorityLevel = 648413703, + rage__fwArchetypeDef__eAssetType = 1991964615, + rage__fwContainerLodDef = 372253349, + reservedFSCharacters = 3574026465, + reservedTerms = 3705267857, + strRecordedRequest = 3356301454, + strResourceReference = 2548004600, + uHourFlags = 2759730476, + uLightFlags = 2428927641, + vInitialBoneOffset = 583681460, + vInitialBoneRotation = 1039931786, + + + + + + + + + + + + //from junctions.xml -dexy CJunctionTemplateArray = 313816480, CJunctionTemplate = 2985578477, diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaTypes.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaTypes.cs index 0b8f66e..64834f6 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaTypes.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaTypes.cs @@ -366,7 +366,7 @@ namespace CodeWalker.GameFiles new MetaStructureEntryInfo_s(MetaName.iRadius, 29, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.iTimeTillPedLeaves, 30, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.iScenarioGroup, 32, MetaStructureEntryDataType.UnsignedShort, 0, 0, 0), - new MetaStructureEntryInfo_s(MetaName.Flags, 36, MetaStructureEntryDataType.IntFlags2, 0, 32, (MetaName)700327466), + new MetaStructureEntryInfo_s(MetaName.Flags, 36, MetaStructureEntryDataType.IntFlags2, 0, 32, MetaName.CScenarioPointFlags__Flags), new MetaStructureEntryInfo_s(MetaName.vPositionAndDirection, 48, MetaStructureEntryDataType.Float_XYZW, 0, 0, 0) ); case MetaName.CScenarioEntityOverride: @@ -394,7 +394,7 @@ namespace CodeWalker.GameFiles new MetaStructureEntryInfo_s(MetaName.radius, 80, MetaStructureEntryDataType.Float, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.start, 84, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.end, 85, MetaStructureEntryDataType.UnsignedByte, 0, 0, 0), - new MetaStructureEntryInfo_s(MetaName.flags, 88, MetaStructureEntryDataType.IntFlags2, 0, 32, (MetaName)700327466), + new MetaStructureEntryInfo_s(MetaName.flags, 88, MetaStructureEntryDataType.IntFlags2, 0, 32, MetaName.CScenarioPointFlags__Flags), new MetaStructureEntryInfo_s(MetaName.highPri, 92, MetaStructureEntryDataType.Boolean, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.extendedRange, 93, MetaStructureEntryDataType.Boolean, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.shortRange, 94, MetaStructureEntryDataType.Boolean, 0, 0, 0) @@ -498,7 +498,7 @@ namespace CodeWalker.GameFiles new MetaStructureEntryInfo_s(MetaName.clipDictionary, 96, MetaStructureEntryDataType.Hash, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.drawableDictionary, 100, MetaStructureEntryDataType.Hash, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.physicsDictionary, 104, MetaStructureEntryDataType.Hash, 0, 0, 0), - new MetaStructureEntryInfo_s(MetaName.assetType, 108, MetaStructureEntryDataType.IntEnum, 0, 0, (MetaName)1991964615), + new MetaStructureEntryInfo_s(MetaName.assetType, 108, MetaStructureEntryDataType.IntEnum, 0, 0, MetaName.rage__fwArchetypeDef__eAssetType), new MetaStructureEntryInfo_s(MetaName.assetName, 112, MetaStructureEntryDataType.Hash, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.StructurePointer, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.extensions, 120, MetaStructureEntryDataType.Array, 0, 15, 0) @@ -627,7 +627,7 @@ namespace CodeWalker.GameFiles new MetaStructureEntryInfo_s(MetaName.entitiesExtentsMax, 80, MetaStructureEntryDataType.Float_XYZ, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.StructurePointer, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.entities, 96, MetaStructureEntryDataType.Array, 0, 8, 0), - new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, (MetaName)372253349), + new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, MetaName.rage__fwContainerLodDef), new MetaStructureEntryInfo_s(MetaName.containerLods, 112, MetaStructureEntryDataType.Array, 0, 10, 0), new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.Structure, 0, 0, MetaName.BoxOccluder), new MetaStructureEntryInfo_s(MetaName.boxOccluders, 128, MetaStructureEntryDataType.Array, 4, 12, 0), @@ -656,9 +656,9 @@ namespace CodeWalker.GameFiles new MetaStructureEntryInfo_s(MetaName.parentIndex, 72, MetaStructureEntryDataType.SignedInt, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.lodDist, 76, MetaStructureEntryDataType.Float, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.childLodDist, 80, MetaStructureEntryDataType.Float, 0, 0, 0), - new MetaStructureEntryInfo_s(MetaName.lodLevel, 84, MetaStructureEntryDataType.IntEnum, 0, 0, (MetaName)1264241711), + new MetaStructureEntryInfo_s(MetaName.lodLevel, 84, MetaStructureEntryDataType.IntEnum, 0, 0, MetaName.rage__eLodType), new MetaStructureEntryInfo_s(MetaName.numChildren, 88, MetaStructureEntryDataType.UnsignedInt, 0, 0, 0), - new MetaStructureEntryInfo_s(MetaName.priorityLevel, 92, MetaStructureEntryDataType.IntEnum, 0, 0, (MetaName)648413703), + new MetaStructureEntryInfo_s(MetaName.priorityLevel, 92, MetaStructureEntryDataType.IntEnum, 0, 0, MetaName.rage__ePriorityLevel), new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.StructurePointer, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.extensions, 96, MetaStructureEntryDataType.Array, 0, 13, 0), new MetaStructureEntryInfo_s(MetaName.ambientOcclusionMultiplier, 112, MetaStructureEntryDataType.SignedInt, 0, 0, 0), @@ -690,7 +690,7 @@ namespace CodeWalker.GameFiles new MetaStructureEntryInfo_s(MetaName.clipDictionary, 96, MetaStructureEntryDataType.Hash, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.drawableDictionary, 100, MetaStructureEntryDataType.Hash, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.physicsDictionary, 104, MetaStructureEntryDataType.Hash, 0, 0, 0), - new MetaStructureEntryInfo_s(MetaName.assetType, 108, MetaStructureEntryDataType.IntEnum, 0, 0, (MetaName)1991964615), + new MetaStructureEntryInfo_s(MetaName.assetType, 108, MetaStructureEntryDataType.IntEnum, 0, 0, MetaName.rage__fwArchetypeDef__eAssetType), new MetaStructureEntryInfo_s(MetaName.assetName, 112, MetaStructureEntryDataType.Hash, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.StructurePointer, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.extensions, 120, MetaStructureEntryDataType.Array, 0, 15, 0), @@ -761,9 +761,9 @@ namespace CodeWalker.GameFiles new MetaStructureEntryInfo_s(MetaName.parentIndex, 72, MetaStructureEntryDataType.SignedInt, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.lodDist, 76, MetaStructureEntryDataType.Float, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.childLodDist, 80, MetaStructureEntryDataType.Float, 0, 0, 0), - new MetaStructureEntryInfo_s(MetaName.lodLevel, 84, MetaStructureEntryDataType.IntEnum, 0, 0, (MetaName)1264241711), + new MetaStructureEntryInfo_s(MetaName.lodLevel, 84, MetaStructureEntryDataType.IntEnum, 0, 0, MetaName.rage__eLodType), new MetaStructureEntryInfo_s(MetaName.numChildren, 88, MetaStructureEntryDataType.UnsignedInt, 0, 0, 0), - new MetaStructureEntryInfo_s(MetaName.priorityLevel, 92, MetaStructureEntryDataType.IntEnum, 0, 0, (MetaName)648413703), + new MetaStructureEntryInfo_s(MetaName.priorityLevel, 92, MetaStructureEntryDataType.IntEnum, 0, 0, MetaName.rage__ePriorityLevel), new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.StructurePointer, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.extensions, 96, MetaStructureEntryDataType.Array, 0, 13, 0), new MetaStructureEntryInfo_s(MetaName.ambientOcclusionMultiplier, 112, MetaStructureEntryDataType.SignedInt, 0, 0, 0), @@ -813,7 +813,7 @@ namespace CodeWalker.GameFiles new MetaStructureEntryInfo_s(MetaName.clipDictionary, 96, MetaStructureEntryDataType.Hash, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.drawableDictionary, 100, MetaStructureEntryDataType.Hash, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.physicsDictionary, 104, MetaStructureEntryDataType.Hash, 0, 0, 0), - new MetaStructureEntryInfo_s(MetaName.assetType, 108, MetaStructureEntryDataType.IntEnum, 0, 0, (MetaName)1991964615), + new MetaStructureEntryInfo_s(MetaName.assetType, 108, MetaStructureEntryDataType.IntEnum, 0, 0, MetaName.rage__fwArchetypeDef__eAssetType), new MetaStructureEntryInfo_s(MetaName.assetName, 112, MetaStructureEntryDataType.Hash, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.StructurePointer, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.extensions, 120, MetaStructureEntryDataType.Array, 0, 15, 0), @@ -1141,7 +1141,7 @@ namespace CodeWalker.GameFiles new MetaStructureEntryInfo_s(MetaName.Group, 40, MetaStructureEntryDataType.Hash, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.ModelSet, 44, MetaStructureEntryDataType.Hash, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.AvailabilityInMpSp, 48, MetaStructureEntryDataType.IntEnum, 0, 0, (MetaName)3573596290), - new MetaStructureEntryInfo_s(MetaName.Flags, 52, MetaStructureEntryDataType.IntFlags2, 0, 32, (MetaName)700327466), + new MetaStructureEntryInfo_s(MetaName.Flags, 52, MetaStructureEntryDataType.IntFlags2, 0, 32, MetaName.CScenarioPointFlags__Flags), new MetaStructureEntryInfo_s(MetaName.Radius, 56, MetaStructureEntryDataType.Float, 0, 0, 0), new MetaStructureEntryInfo_s(MetaName.TimeTillPedLeaves, 60, MetaStructureEntryDataType.Float, 0, 0, 0) ); @@ -1245,8 +1245,8 @@ namespace CodeWalker.GameFiles //to generate enuminfos switch (name) { - case (MetaName)700327466: - return new MetaEnumInfo((MetaName)700327466, 2814596095, + case MetaName.CScenarioPointFlags__Flags: + return new MetaEnumInfo(MetaName.CScenarioPointFlags__Flags, 2814596095, new MetaEnumEntryInfo_s(MetaName.IgnoreMaxInRange, 0), new MetaEnumEntryInfo_s(MetaName.NoSpawn, 1), new MetaEnumEntryInfo_s(MetaName.StationaryReactions, 2), @@ -1316,16 +1316,16 @@ namespace CodeWalker.GameFiles new MetaEnumEntryInfo_s((MetaName)3717649022, 14), new MetaEnumEntryInfo_s((MetaName)3356026130, 15) ); - case (MetaName)1991964615: - return new MetaEnumInfo((MetaName)1991964615, 1866031916, + case MetaName.rage__fwArchetypeDef__eAssetType: + return new MetaEnumInfo(MetaName.rage__fwArchetypeDef__eAssetType, 1866031916, new MetaEnumEntryInfo_s(MetaName.ASSET_TYPE_UNINITIALIZED, 0), new MetaEnumEntryInfo_s(MetaName.ASSET_TYPE_FRAGMENT, 1), new MetaEnumEntryInfo_s(MetaName.ASSET_TYPE_DRAWABLE, 2), new MetaEnumEntryInfo_s(MetaName.ASSET_TYPE_DRAWABLEDICTIONARY, 3), new MetaEnumEntryInfo_s(MetaName.ASSET_TYPE_ASSETLESS, 4) ); - case (MetaName)1264241711: - return new MetaEnumInfo((MetaName)1264241711, 1856311430, + case MetaName.rage__eLodType: + return new MetaEnumInfo(MetaName.rage__eLodType, 1856311430, new MetaEnumEntryInfo_s(MetaName.LODTYPES_DEPTH_HD, 0), new MetaEnumEntryInfo_s(MetaName.LODTYPES_DEPTH_LOD, 1), new MetaEnumEntryInfo_s(MetaName.LODTYPES_DEPTH_SLOD1, 2), @@ -1334,8 +1334,8 @@ namespace CodeWalker.GameFiles new MetaEnumEntryInfo_s(MetaName.LODTYPES_DEPTH_ORPHANHD, 5), new MetaEnumEntryInfo_s(MetaName.LODTYPES_DEPTH_SLOD4, 6) ); - case (MetaName)648413703: - return new MetaEnumInfo((MetaName)648413703, 2200357711, + case MetaName.rage__ePriorityLevel: + return new MetaEnumInfo(MetaName.rage__ePriorityLevel, 2200357711, new MetaEnumEntryInfo_s(MetaName.PRI_REQUIRED, 0), new MetaEnumEntryInfo_s(MetaName.PRI_OPTIONAL_HIGH, 1), new MetaEnumEntryInfo_s(MetaName.PRI_OPTIONAL_MEDIUM, 2), @@ -2075,7 +2075,7 @@ namespace CodeWalker.GameFiles //generated enums - [Flags] public enum Unk_700327466 //SCENARIO point flags / extension spawn point flags + [Flags] public enum CScenarioPointFlags__Flags //SCENARIO point flags / extension spawn point flags : int //Key:2814596095 { IgnoreMaxInRange = 1,//0, @@ -2156,7 +2156,7 @@ namespace CodeWalker.GameFiles Unk_15_3356026130 = 15, } - public enum Unk_1991964615 //archetype assetType + public enum rage__fwArchetypeDef__eAssetType //archetype assetType : int //Key:1866031916 { ASSET_TYPE_UNINITIALIZED = 0, //189734893 @@ -2166,7 +2166,7 @@ namespace CodeWalker.GameFiles ASSET_TYPE_ASSETLESS = 4, //4161085041 } - public enum Unk_1264241711 //entity lodLevel + public enum rage__eLodType //entity lodLevel : int //Key:1856311430 { LODTYPES_DEPTH_HD = 0, @@ -2178,7 +2178,7 @@ namespace CodeWalker.GameFiles LODTYPES_DEPTH_SLOD4 = 6, } - public enum Unk_648413703 //entity priorityLevel + public enum rage__ePriorityLevel //entity priorityLevel : int //Key:2200357711 { PRI_REQUIRED = 0, //1943361227 @@ -2314,7 +2314,7 @@ namespace CodeWalker.GameFiles public MetaHash clipDictionary { get; set; } //96 96: Hash: 0: clipDictionary//424089489 public MetaHash drawableDictionary { get; set; } //100 100: Hash: 0: drawableDictionary public MetaHash physicsDictionary { get; set; } //104 104: Hash: 0: physicsDictionary//3553040380 - public Unk_1991964615 assetType { get; set; } //108 108: IntEnum: 1991964615: assetType + public rage__fwArchetypeDef__eAssetType assetType { get; set; } //108 108: IntEnum: 1991964615: assetType public MetaHash assetName { get; set; } //112 112: Hash: 0: assetName public uint Unused08 { get; set; }//116 public Array_StructurePointer extensions { get; set; } //120 120: Array: 0: extensions {0: StructurePointer: 0: 256} @@ -2753,9 +2753,9 @@ namespace CodeWalker.GameFiles public int parentIndex { get; set; } //72 72: SignedInt: 0: parentIndex public float lodDist { get; set; } //76 76: Float: 0: lodDist public float childLodDist { get; set; } //80 80: Float: 0: childLodDist//3398912973 - public Unk_1264241711 lodLevel { get; set; } //84 84: IntEnum: 1264241711: lodLevel //LODTYPES_DEPTH_ + public rage__eLodType lodLevel { get; set; } //84 84: IntEnum: 1264241711: lodLevel //LODTYPES_DEPTH_ public uint numChildren { get; set; } //88 88: UnsignedInt: 0: numChildren//2793909385 - public Unk_648413703 priorityLevel { get; set; } //92 92: IntEnum: 648413703: priorityLevel//647098393 + public rage__ePriorityLevel priorityLevel { get; set; } //92 92: IntEnum: 648413703: priorityLevel//647098393 public Array_StructurePointer extensions { get; set; } //96 96: Array: 0: extensions {0: StructurePointer: 0: 256} public int ambientOcclusionMultiplier { get; set; } //112 112: SignedInt: 0: ambientOcclusionMultiplier//415356295 public int artificialAmbientOcclusion { get; set; } //116 116: SignedInt: 0: artificialAmbientOcclusion//599844163 @@ -3619,7 +3619,7 @@ namespace CodeWalker.GameFiles public byte start { get; set; } //84 84: UnsignedByte: 0: start public byte end { get; set; } //85 85: UnsignedByte: 0: end public ushort Unused4 { get; set; }//86 - public Unk_700327466 flags { get; set; } //88 88: IntFlags2: 700327466: flags + public CScenarioPointFlags__Flags flags { get; set; } //88 88: IntFlags2: 700327466: flags public byte highPri { get; set; } //92 92: Boolean: 0: highPri public byte extendedRange { get; set; } //93 93: Boolean: 0: extendedRange public byte shortRange { get; set; } //94 94: Boolean: 0: shortRange @@ -3653,7 +3653,7 @@ namespace CodeWalker.GameFiles public float Radius { get { return _Data.radius; } set { _Data.radius = value; } } public byte StartTime { get { return _Data.start; } set { _Data.start = value; } } public byte EndTime { get { return _Data.end; } set { _Data.end = value; } } - public Unk_700327466 Flags { get { return _Data.flags; } set { _Data.flags = value; } } + public CScenarioPointFlags__Flags Flags { get { return _Data.flags; } set { _Data.flags = value; } } public bool HighPri { get { return _Data.highPri == 1; } set { _Data.highPri = (byte)(value ? 1 : 0); } } public bool ExtendedRange { get { return _Data.extendedRange == 1; } set { _Data.extendedRange = (byte)(value ? 1 : 0); } } public bool ShortRange { get { return _Data.shortRange == 1; } set { _Data.shortRange = (byte)(value ? 1 : 0); } } @@ -3687,7 +3687,7 @@ namespace CodeWalker.GameFiles public override MetaPOINTER Save(MetaBuilder mb) { mb.AddEnumInfo((MetaName)3573596290); - mb.AddEnumInfo((MetaName)700327466); + mb.AddEnumInfo(MetaName.CScenarioPointFlags__Flags); mb.AddStructureInfo(MetaName.CExtensionDefSpawnPoint); return mb.AddItemPtr(MetaName.CExtensionDefSpawnPoint, _Data); } @@ -3721,7 +3721,7 @@ namespace CodeWalker.GameFiles public MetaHash Group { get; set; } //40 40: Hash: 0: Group public MetaHash ModelSet { get; set; } //44 44: Hash: 0: ModelSet public Unk_3573596290 AvailabilityInMpSp { get; set; } //48 48: IntEnum: 3573596290: AvailabilityInMpSp//2932681318 - public Unk_700327466 Flags { get; set; } //52 52: IntFlags2: 700327466: Flags + public CScenarioPointFlags__Flags Flags { get; set; } //52 52: IntFlags2: 700327466: Flags public float Radius { get; set; } //56 56: Float: 0: Radius public float TimeTillPedLeaves { get; set; } //60 60: Float: 0: TimeTillPedLeaves//4073598194 @@ -3743,7 +3743,7 @@ namespace CodeWalker.GameFiles public override MetaPOINTER Save(MetaBuilder mb) { mb.AddEnumInfo((MetaName)3573596290); - mb.AddEnumInfo((MetaName)700327466); + mb.AddEnumInfo(MetaName.CScenarioPointFlags__Flags); mb.AddStructureInfo(MetaName.CExtensionDefSpawnPointOverride); return mb.AddItemPtr(MetaName.CExtensionDefSpawnPointOverride, _Data); } @@ -4049,7 +4049,7 @@ namespace CodeWalker.GameFiles } } - [TC(typeof(EXP))] public struct rage__spdAABB //32 bytes, Key:1158138379 //WAS: Unk_4084721864 + [TC(typeof(EXP))] public struct rage__spdAABB //32 bytes, Key:1158138379 { public Vector4 min { get; set; } //0 0: Float_XYZW: 0: min public Vector4 max { get; set; } //16 16: Float_XYZW: 0: max @@ -4215,14 +4215,14 @@ namespace CodeWalker.GameFiles { mb.AddStructureInfo(MetaName.CExtensionDefSpawnPoint); mb.AddEnumInfo((MetaName)3573596290); - mb.AddEnumInfo((MetaName)700327466); + mb.AddEnumInfo(MetaName.CScenarioPointFlags__Flags); scp.LoadSavePoints = mb.AddItemArrayPtr(MetaName.CExtensionDefSpawnPoint, loadSavePoints); } var myPoints = Points.GetCMyPoints(); if (myPoints != null) { mb.AddStructureInfo(MetaName.CScenarioPoint); - mb.AddEnumInfo((MetaName)700327466); + mb.AddEnumInfo(MetaName.CScenarioPointFlags__Flags); scp.MyPoints = mb.AddItemArrayPtr(MetaName.CScenarioPoint, myPoints); } @@ -4250,7 +4250,7 @@ namespace CodeWalker.GameFiles { mb.AddStructureInfo(MetaName.CExtensionDefSpawnPoint); mb.AddEnumInfo((MetaName)3573596290); - mb.AddEnumInfo((MetaName)700327466); + mb.AddEnumInfo(MetaName.CScenarioPointFlags__Flags); cent.ScenarioPoints = mb.AddItemArrayPtr(MetaName.CExtensionDefSpawnPoint, scps); } cents[i] = cent; @@ -4681,7 +4681,7 @@ namespace CodeWalker.GameFiles public byte Unused6 { get; set; }//31 public ushort iScenarioGroup { get; set; } //32 32: UnsignedShort: 0: iScenarioGroup//2180252673 public ushort Unused7 { get; set; }//34 - public Unk_700327466 Flags { get; set; } //36 36: IntFlags2: 700327466: Flags + public CScenarioPointFlags__Flags Flags { get; set; } //36 36: IntFlags2: 700327466: Flags public uint Unused8 { get; set; }//40 public uint Unused9 { get; set; }//44 public Vector4 vPositionAndDirection { get; set; } //48 48: Float_XYZW: 0: vPositionAndDirection//4685037 @@ -4735,7 +4735,7 @@ namespace CodeWalker.GameFiles public byte AvailableMpSp { get { return _Data.uAvailableInMpSp; } set { _Data.uAvailableInMpSp = value; } } public byte Radius { get { return _Data.iRadius; } set { _Data.iRadius = value; } } public byte WaitTime { get { return _Data.iTimeTillPedLeaves; } set { _Data.iTimeTillPedLeaves = value; } } - public Unk_700327466 Flags { get { return _Data.Flags; } set { _Data.Flags = value; } } + public CScenarioPointFlags__Flags Flags { get { return _Data.Flags; } set { _Data.Flags = value; } } public int PointIndex { get; set; } @@ -4886,7 +4886,7 @@ namespace CodeWalker.GameFiles { mb.AddStructureInfo(MetaName.CExtensionDefSpawnPoint); mb.AddEnumInfo((MetaName)3573596290); - mb.AddEnumInfo((MetaName)700327466); + mb.AddEnumInfo(MetaName.CScenarioPointFlags__Flags); _Data.ScenarioPoints = mb.AddWrapperArray(ScenarioPoints); } @@ -5645,14 +5645,14 @@ namespace CodeWalker.GameFiles { mb.AddStructureInfo(MetaName.CExtensionDefSpawnPoint); mb.AddEnumInfo((MetaName)3573596290); - mb.AddEnumInfo((MetaName)700327466); + mb.AddEnumInfo(MetaName.CScenarioPointFlags__Flags); scp.LoadSavePoints = mb.AddItemArrayPtr(MetaName.CExtensionDefSpawnPoint, loadSavePoints); } var myPoints = Points.GetCMyPoints(); if (myPoints != null) { mb.AddStructureInfo(MetaName.CScenarioPoint); - mb.AddEnumInfo((MetaName)700327466); + mb.AddEnumInfo(MetaName.CScenarioPointFlags__Flags); scp.MyPoints = mb.AddItemArrayPtr(MetaName.CScenarioPoint, myPoints); } diff --git a/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs b/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs index 0e50ff1..527016d 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs @@ -680,7 +680,7 @@ namespace CodeWalker.GameFiles return new PsoStructureInfo(MetaName.CDataFileMgr__ContentsOfDataFileXml, 0, 0, 120, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 3, 0), new PsoStructureEntryInfo(MetaName.disabledFiles, PsoDataType.Array, 8, 0, 0), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3044571784), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CDataFileMgr__DataFileArray), new PsoStructureEntryInfo(MetaName.includedXmlFiles, PsoDataType.Array, 24, 0, (MetaName)2), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 3, 0), new PsoStructureEntryInfo(MetaName.includedDataFiles, PsoDataType.Array, 40, 0, (MetaName)4), @@ -691,7 +691,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 3, 0), new PsoStructureEntryInfo(MetaName.patchFiles, PsoDataType.Array, 88, 0, (MetaName)10), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 3, 0), - new PsoStructureEntryInfo((MetaName)3665250723, PsoDataType.Array, 104, 0, MetaName.PsoPOINTER) + new PsoStructureEntryInfo(MetaName.allowedFolders, PsoDataType.Array, 104, 0, MetaName.PsoPOINTER) ); case MetaName.CDataFileMgr__DataFile: return new PsoStructureInfo(MetaName.CDataFileMgr__DataFile, 0, 0, 176, @@ -863,7 +863,7 @@ namespace CodeWalker.GameFiles case MetaName.CDataFileMgr__ContentChangeSet: return new PsoStructureInfo(MetaName.CDataFileMgr__ContentChangeSet, 0, 0, 184, new PsoStructureEntryInfo(MetaName.changeSetName, PsoDataType.String, 8, 3, 0), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)666520515), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CDataFileMgr__ChangeSetData), new PsoStructureEntryInfo(MetaName.mapChangeSetData, PsoDataType.Array, 24, 0, (MetaName)1), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 3, 0), new PsoStructureEntryInfo(MetaName.filesToInvalidate, PsoDataType.Array, 40, 0, (MetaName)3), @@ -875,9 +875,9 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.txdToLoad, PsoDataType.Array, 88, 0, (MetaName)9), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), new PsoStructureEntryInfo(MetaName.txdToUnload, PsoDataType.Array, 104, 0, (MetaName)11), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)4089109759), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CDataFileMgr__ResourceReference), new PsoStructureEntryInfo(MetaName.residentResources, PsoDataType.Array, 120, 0, (MetaName)13), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)4089109759), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.CDataFileMgr__ResourceReference), new PsoStructureEntryInfo(MetaName.unregisterResources, PsoDataType.Array, 136, 0, (MetaName)15), new PsoStructureEntryInfo(MetaName.requiresLoadingScreen, PsoDataType.Bool, 152, 0, 0), new PsoStructureEntryInfo(MetaName.executionConditions, PsoDataType.Structure, 160, 0, MetaName.ExecutionConditions) @@ -903,7 +903,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)3532340754, PsoDataType.Map, 80, 1, (MetaName)589834),//memory group modifiers new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), - new PsoStructureEntryInfo((MetaName)1333660780, PsoDataType.Map, 104, 1, (MetaName)786445)//move network flags dictionary + new PsoStructureEntryInfo(MetaName.clipVariationSets, PsoDataType.Map, 104, 1, (MetaName)786445)//move network flags dictionary ); case MetaName.ARRAYINFO://default map node entry, with a structure pointer return new PsoStructureInfo(MetaName.ARRAYINFO, 0, 2, 16, @@ -922,7 +922,7 @@ namespace CodeWalker.GameFiles ); case MetaName.fwDirectedClipItemWithProps: return new PsoStructureInfo(MetaName.fwDirectedClipItemWithProps, 0, 0, 32, - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)224899699), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, MetaName.eAnimPlayerFlag), new PsoStructureEntryInfo(MetaName.flags, PsoDataType.Flags, 8, 0, (MetaName)2097152), new PsoStructureEntryInfo(MetaName.priority, PsoDataType.Enum, 12, 0, (MetaName)1498349301), new PsoStructureEntryInfo(MetaName.boneMask, PsoDataType.String, 16, 7, 0), @@ -930,7 +930,7 @@ namespace CodeWalker.GameFiles ); case MetaName.fwClipItemWithProps: return new PsoStructureInfo(MetaName.fwClipItemWithProps, 0, 0, 24, - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)224899699), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, MetaName.eAnimPlayerFlag), new PsoStructureEntryInfo(MetaName.flags, PsoDataType.Flags, 8, 0, (MetaName)2097152), new PsoStructureEntryInfo(MetaName.priority, PsoDataType.Enum, 12, 0, (MetaName)1498349301), new PsoStructureEntryInfo(MetaName.boneMask, PsoDataType.String, 16, 7, 0) @@ -947,17 +947,17 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.clipItems, PsoDataType.Map, 16, 1, (MetaName)131075), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), new PsoStructureEntryInfo(MetaName.moveNetworkFlags, PsoDataType.Array, 40, 0, (MetaName)5), - new PsoStructureEntryInfo((MetaName)1940051574, PsoDataType.String, 56, 7, 0), - new PsoStructureEntryInfo((MetaName)4254591792, PsoDataType.String, 60, 7, 0), - new PsoStructureEntryInfo((MetaName)2283074537, PsoDataType.Bool, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)1451470102, PsoDataType.String, 68, 7, 0) + new PsoStructureEntryInfo(MetaName.GetupSet, PsoDataType.String, 56, 7, 0), + new PsoStructureEntryInfo(MetaName.DeadBlendOutSet, PsoDataType.String, 60, 7, 0), + new PsoStructureEntryInfo(MetaName.AllowAnimatedDeadFall, PsoDataType.Bool, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.AnimatedDeadFallSet, PsoDataType.String, 68, 7, 0) ); case MetaName.fwClipDictionaryMetadata: return new PsoStructureInfo(MetaName.fwClipDictionaryMetadata, 0, 0, 24, - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)1631789397), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, MetaName.eStreamingPolicy), new PsoStructureEntryInfo(MetaName.streamingPolicy, PsoDataType.Flags, 8, 0, (MetaName)2097152), new PsoStructureEntryInfo(MetaName.memoryGroup, PsoDataType.String, 12, 7, 0), - new PsoStructureEntryInfo(MetaName.streamingPriority, PsoDataType.Enum, 16, 0, (MetaName)733577798) + new PsoStructureEntryInfo(MetaName.streamingPriority, PsoDataType.Enum, 16, 0, MetaName.eStreamingPriority) ); case MetaName.fwMemoryGroupMetadata: return new PsoStructureInfo(MetaName.fwMemoryGroupMetadata, 0, 0, 16, @@ -974,8 +974,8 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.MemoryGroup, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.Amount, PsoDataType.SInt, 12, 0, 0) ); - case (MetaName)1005381910: //clip sets move network flags list/group? - return new PsoStructureInfo((MetaName)1005381910, 0, 0, 24, + case MetaName.fwClipVariationSet: //clip sets move network flags list/group? + return new PsoStructureInfo(MetaName.fwClipVariationSet, 0, 0, 24, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 7, 0), new PsoStructureEntryInfo(MetaName.clips, PsoDataType.Array, 8, 0, 0) ); @@ -1281,8 +1281,8 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)606684208, PsoDataType.Bool, 176, 0, 0), new PsoStructureEntryInfo((MetaName)2292742472, PsoDataType.Float, 180, 0, 0), new PsoStructureEntryInfo((MetaName)1437576219, PsoDataType.String, 184, 7, 0), - new PsoStructureEntryInfo((MetaName)3754033729, PsoDataType.Enum, 188, 0, (MetaName)2363471356), - new PsoStructureEntryInfo((MetaName)1020967481, PsoDataType.Enum, 192, 0, (MetaName)2363471356), + new PsoStructureEntryInfo((MetaName)3754033729, PsoDataType.Enum, 188, 0, MetaName.eAnimBoneTag), + new PsoStructureEntryInfo((MetaName)1020967481, PsoDataType.Enum, 192, 0, MetaName.eAnimBoneTag), new PsoStructureEntryInfo((MetaName)2592389483, PsoDataType.Bool, 196, 0, 0), new PsoStructureEntryInfo((MetaName)4054422403, PsoDataType.Float, 200, 0, 0), new PsoStructureEntryInfo((MetaName)740137113, PsoDataType.String, 204, 7, 0), @@ -1347,11 +1347,11 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)2205812843, PsoDataType.Bool, 440, 0, 0), new PsoStructureEntryInfo((MetaName)2543787987, PsoDataType.Float, 444, 0, 0), new PsoStructureEntryInfo((MetaName)789559375, PsoDataType.String, 448, 7, 0), - new PsoStructureEntryInfo((MetaName)610648776, PsoDataType.Enum, 452, 0, (MetaName)2363471356), + new PsoStructureEntryInfo((MetaName)610648776, PsoDataType.Enum, 452, 0, MetaName.eAnimBoneTag), new PsoStructureEntryInfo((MetaName)2321865573, PsoDataType.Bool, 456, 0, 0), new PsoStructureEntryInfo((MetaName)3482316648, PsoDataType.Float, 460, 0, 0), new PsoStructureEntryInfo((MetaName)3414327374, PsoDataType.String, 464, 7, 0), - new PsoStructureEntryInfo((MetaName)3991249477, PsoDataType.Enum, 468, 0, (MetaName)2363471356), + new PsoStructureEntryInfo((MetaName)3991249477, PsoDataType.Enum, 468, 0, MetaName.eAnimBoneTag), new PsoStructureEntryInfo((MetaName)3633780286, PsoDataType.Bool, 472, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3663974917), new PsoStructureEntryInfo((MetaName)1614411627, PsoDataType.Array, 480, 0, (MetaName)113), @@ -1367,8 +1367,8 @@ namespace CodeWalker.GameFiles ); case (MetaName)1904273735: return new PsoStructureInfo((MetaName)1904273735, 0, 0, 32, - new PsoStructureEntryInfo((MetaName)2366957880, PsoDataType.Enum, 8, 0, (MetaName)2363471356), - new PsoStructureEntryInfo((MetaName)1407284946, PsoDataType.Enum, 12, 0, (MetaName)2363471356), + new PsoStructureEntryInfo((MetaName)2366957880, PsoDataType.Enum, 8, 0, MetaName.eAnimBoneTag), + new PsoStructureEntryInfo((MetaName)1407284946, PsoDataType.Enum, 12, 0, MetaName.eAnimBoneTag), new PsoStructureEntryInfo(MetaName.limbId, PsoDataType.Enum, 16, 0, (MetaName)726948528), new PsoStructureEntryInfo((MetaName)1061041502, PsoDataType.String, 20, 7, 0), new PsoStructureEntryInfo((MetaName)2989606868, PsoDataType.String, 24, 7, 0) @@ -1376,15 +1376,15 @@ namespace CodeWalker.GameFiles case (MetaName)1810355587: return new PsoStructureInfo((MetaName)1810355587, 0, 0, 24, new PsoStructureEntryInfo(MetaName.ptFxName, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2366957880, PsoDataType.Enum, 12, 0, (MetaName)2363471356), - new PsoStructureEntryInfo((MetaName)1407284946, PsoDataType.Enum, 16, 0, (MetaName)2363471356), + new PsoStructureEntryInfo((MetaName)2366957880, PsoDataType.Enum, 12, 0, MetaName.eAnimBoneTag), + new PsoStructureEntryInfo((MetaName)1407284946, PsoDataType.Enum, 16, 0, MetaName.eAnimBoneTag), new PsoStructureEntryInfo(MetaName.limbId, PsoDataType.SInt, 20, 0, 0) ); case (MetaName)3663974917: return new PsoStructureInfo((MetaName)3663974917, 0, 0, 24, new PsoStructureEntryInfo(MetaName.ptFxName, PsoDataType.String, 8, 7, 0), - new PsoStructureEntryInfo((MetaName)2366957880, PsoDataType.Enum, 12, 0, (MetaName)2363471356), - new PsoStructureEntryInfo((MetaName)1407284946, PsoDataType.Enum, 16, 0, (MetaName)2363471356) + new PsoStructureEntryInfo((MetaName)2366957880, PsoDataType.Enum, 12, 0, MetaName.eAnimBoneTag), + new PsoStructureEntryInfo((MetaName)1407284946, PsoDataType.Enum, 16, 0, MetaName.eAnimBoneTag) ); case MetaName.CVfxRegionInfoMgr: return new PsoStructureInfo(MetaName.CVfxRegionInfoMgr, 0, 0, 32, @@ -2620,8 +2620,8 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)1735638891, PsoDataType.Float, 28, 0, 0), new PsoStructureEntryInfo(MetaName.HoldDuration, PsoDataType.SInt, 32, 0, 0), new PsoStructureEntryInfo(MetaName.ReleaseDuration, PsoDataType.UInt, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)2014772834, PsoDataType.Enum, 40, 0, (MetaName)3921015781), - new PsoStructureEntryInfo((MetaName)1004206996, PsoDataType.Enum, 44, 0, (MetaName)3921015781), + new PsoStructureEntryInfo((MetaName)2014772834, PsoDataType.Enum, 40, 0, MetaName.eCurveType), + new PsoStructureEntryInfo((MetaName)1004206996, PsoDataType.Enum, 44, 0, MetaName.eCurveType), new PsoStructureEntryInfo((MetaName)1484523694, PsoDataType.Bool, 48, 0, 0) ); case MetaName.camSpringMountMetadata: @@ -3241,7 +3241,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)1046944473, PsoDataType.Float, 20, 0, 0), new PsoStructureEntryInfo(MetaName.BlendDuration, PsoDataType.SInt, 24, 0, 0), new PsoStructureEntryInfo((MetaName)3764337155, PsoDataType.Bool, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)2836572250, PsoDataType.Enum, 32, 0, (MetaName)3921015781) + new PsoStructureEntryInfo((MetaName)2836572250, PsoDataType.Enum, 32, 0, MetaName.eCurveType) ); case MetaName.camLookAtDampingHelperMetadata: return new PsoStructureInfo(MetaName.camLookAtDampingHelperMetadata, 0, 0, 56, @@ -5743,7 +5743,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.Duration, PsoDataType.UInt, 16, 0, 0), new PsoStructureEntryInfo((MetaName)2578467489, PsoDataType.SInt, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1608990953, PsoDataType.Enum, 24, 0, (MetaName)3921015781), + new PsoStructureEntryInfo((MetaName)1608990953, PsoDataType.Enum, 24, 0, MetaName.eCurveType), new PsoStructureEntryInfo((MetaName)2608832721, PsoDataType.Float, 28, 0, 0), new PsoStructureEntryInfo((MetaName)2368120393, PsoDataType.Bool, 32, 0, 0), new PsoStructureEntryInfo((MetaName)3903914248, PsoDataType.Bool, 33, 0, 0), @@ -5752,11 +5752,11 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo((MetaName)796068415, PsoDataType.Float, 40, 0, 0), new PsoStructureEntryInfo((MetaName)417423151, PsoDataType.Bool, 44, 0, 0), new PsoStructureEntryInfo((MetaName)3958574934, PsoDataType.UInt, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2939152164, PsoDataType.Enum, 52, 0, (MetaName)3921015781), + new PsoStructureEntryInfo((MetaName)2939152164, PsoDataType.Enum, 52, 0, MetaName.eCurveType), new PsoStructureEntryInfo((MetaName)2707662935, PsoDataType.Float, 56, 0, 0), new PsoStructureEntryInfo((MetaName)26423852, PsoDataType.Float, 60, 0, 0), new PsoStructureEntryInfo((MetaName)322264486, PsoDataType.UInt, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)2868975511, PsoDataType.Enum, 68, 0, (MetaName)3921015781), + new PsoStructureEntryInfo((MetaName)2868975511, PsoDataType.Enum, 68, 0, MetaName.eCurveType), new PsoStructureEntryInfo((MetaName)3659327390, PsoDataType.Float, 72, 0, 0), new PsoStructureEntryInfo((MetaName)833330146, PsoDataType.Float, 76, 0, 0) ); @@ -5765,7 +5765,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.Duration, PsoDataType.UInt, 16, 0, 0), new PsoStructureEntryInfo((MetaName)2578467489, PsoDataType.SInt, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1608990953, PsoDataType.Enum, 24, 0, (MetaName)3921015781), + new PsoStructureEntryInfo((MetaName)1608990953, PsoDataType.Enum, 24, 0, MetaName.eCurveType), new PsoStructureEntryInfo((MetaName)2608832721, PsoDataType.Float, 28, 0, 0), new PsoStructureEntryInfo((MetaName)2368120393, PsoDataType.Bool, 32, 0, 0), new PsoStructureEntryInfo((MetaName)3903914248, PsoDataType.Bool, 33, 0, 0), @@ -5782,7 +5782,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.Duration, PsoDataType.UInt, 16, 0, 0), new PsoStructureEntryInfo((MetaName)2578467489, PsoDataType.SInt, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1608990953, PsoDataType.Enum, 24, 0, (MetaName)3921015781), + new PsoStructureEntryInfo((MetaName)1608990953, PsoDataType.Enum, 24, 0, MetaName.eCurveType), new PsoStructureEntryInfo((MetaName)2608832721, PsoDataType.Float, 28, 0, 0), new PsoStructureEntryInfo((MetaName)2368120393, PsoDataType.Bool, 32, 0, 0), new PsoStructureEntryInfo((MetaName)3903914248, PsoDataType.Bool, 33, 0, 0), @@ -5795,7 +5795,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.Duration, PsoDataType.UInt, 16, 0, 0), new PsoStructureEntryInfo((MetaName)2578467489, PsoDataType.SInt, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1608990953, PsoDataType.Enum, 24, 0, (MetaName)3921015781), + new PsoStructureEntryInfo((MetaName)1608990953, PsoDataType.Enum, 24, 0, MetaName.eCurveType), new PsoStructureEntryInfo((MetaName)2608832721, PsoDataType.Float, 28, 0, 0), new PsoStructureEntryInfo((MetaName)2368120393, PsoDataType.Bool, 32, 0, 0), new PsoStructureEntryInfo((MetaName)3903914248, PsoDataType.Bool, 33, 0, 0), @@ -5808,7 +5808,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.Duration, PsoDataType.UInt, 16, 0, 0), new PsoStructureEntryInfo((MetaName)2578467489, PsoDataType.SInt, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1608990953, PsoDataType.Enum, 24, 0, (MetaName)3921015781), + new PsoStructureEntryInfo((MetaName)1608990953, PsoDataType.Enum, 24, 0, MetaName.eCurveType), new PsoStructureEntryInfo((MetaName)2608832721, PsoDataType.Float, 28, 0, 0), new PsoStructureEntryInfo((MetaName)2368120393, PsoDataType.Bool, 32, 0, 0), new PsoStructureEntryInfo((MetaName)3903914248, PsoDataType.Bool, 33, 0, 0), @@ -8328,17 +8328,17 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.MinAnglePickPOI, PsoDataType.Float, 308, 0, 0), new PsoStructureEntryInfo(MetaName.MaxPitchingAnglePickPOI, PsoDataType.Float, 312, 0, 0), new PsoStructureEntryInfo(MetaName.PlayerLookAtDebugDraw, PsoDataType.Bool, 316, 0, 0), - new PsoStructureEntryInfo(MetaName.CameraLookAtTurnRate, PsoDataType.Enum, 320, 0, (MetaName)454750378), - new PsoStructureEntryInfo(MetaName.POILookAtTurnRate, PsoDataType.Enum, 324, 0, (MetaName)454750378), - new PsoStructureEntryInfo(MetaName.MotionLookAtTurnRate, PsoDataType.Enum, 328, 0, (MetaName)454750378), - new PsoStructureEntryInfo(MetaName.VehicleJumpLookAtTurnRate, PsoDataType.Enum, 332, 0, (MetaName)454750378), - new PsoStructureEntryInfo(MetaName.CameraLookAtBlendRate, PsoDataType.Enum, 336, 0, (MetaName)1931302076), - new PsoStructureEntryInfo(MetaName.POILookAtBlendRate, PsoDataType.Enum, 340, 0, (MetaName)1931302076), - new PsoStructureEntryInfo(MetaName.MotionLookAtBlendRate, PsoDataType.Enum, 344, 0, (MetaName)1931302076), - new PsoStructureEntryInfo(MetaName.VehicleJumpLookAtBlendRate, PsoDataType.Enum, 348, 0, (MetaName)1931302076), - new PsoStructureEntryInfo(MetaName.CameraLookAtRotationLimit, PsoDataType.Enum, 352, 0, (MetaName)4044698613), - new PsoStructureEntryInfo(MetaName.POILookAtRotationLimit, PsoDataType.Enum, 356, 0, (MetaName)4044698613), - new PsoStructureEntryInfo(MetaName.MotionLookAtRotationLimit, PsoDataType.Enum, 360, 0, (MetaName)4044698613), + new PsoStructureEntryInfo(MetaName.CameraLookAtTurnRate, PsoDataType.Enum, 320, 0, MetaName.LookIkTurnRate), + new PsoStructureEntryInfo(MetaName.POILookAtTurnRate, PsoDataType.Enum, 324, 0, MetaName.LookIkTurnRate), + new PsoStructureEntryInfo(MetaName.MotionLookAtTurnRate, PsoDataType.Enum, 328, 0, MetaName.LookIkTurnRate), + new PsoStructureEntryInfo(MetaName.VehicleJumpLookAtTurnRate, PsoDataType.Enum, 332, 0, MetaName.LookIkTurnRate), + new PsoStructureEntryInfo(MetaName.CameraLookAtBlendRate, PsoDataType.Enum, 336, 0, MetaName.LookIkBlendRate), + new PsoStructureEntryInfo(MetaName.POILookAtBlendRate, PsoDataType.Enum, 340, 0, MetaName.LookIkBlendRate), + new PsoStructureEntryInfo(MetaName.MotionLookAtBlendRate, PsoDataType.Enum, 344, 0, MetaName.LookIkBlendRate), + new PsoStructureEntryInfo(MetaName.VehicleJumpLookAtBlendRate, PsoDataType.Enum, 348, 0, MetaName.LookIkBlendRate), + new PsoStructureEntryInfo(MetaName.CameraLookAtRotationLimit, PsoDataType.Enum, 352, 0, MetaName.LookIkRotationLimit), + new PsoStructureEntryInfo(MetaName.POILookAtRotationLimit, PsoDataType.Enum, 356, 0, MetaName.LookIkRotationLimit), + new PsoStructureEntryInfo(MetaName.MotionLookAtRotationLimit, PsoDataType.Enum, 360, 0, MetaName.LookIkRotationLimit), new PsoStructureEntryInfo(MetaName.AITimeWaitingToCrossRoadMin, PsoDataType.Float, 364, 0, 0), new PsoStructureEntryInfo(MetaName.AITimeWaitingToCrossRoadMax, PsoDataType.Float, 368, 0, 0), new PsoStructureEntryInfo(MetaName.fAIGreetingDistanceMin, PsoDataType.Float, 372, 0, 0), @@ -8874,35 +8874,35 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.fWorldH, PsoDataType.Float, 12, 0, 0), new PsoStructureEntryInfo(MetaName.fBaseAlpha, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo((MetaName)2170322240, PsoDataType.Float, 20, 0, 0), - new PsoStructureEntryInfo((MetaName)1452712925, PsoDataType.Float, 24, 0, 0) + new PsoStructureEntryInfo(MetaName.fFowWaterHeight, PsoDataType.Float, 24, 0, 0) ); case (MetaName)283649933: return new PsoStructureInfo((MetaName)283649933, 0, 0, 100, new PsoStructureEntryInfo((MetaName)3708284943, PsoDataType.Float, 0, 0, 0), new PsoStructureEntryInfo((MetaName)1172300147, PsoDataType.Float, 4, 0, 0), - new PsoStructureEntryInfo((MetaName)3725084347, PsoDataType.Float, 8, 0, 0), - new PsoStructureEntryInfo((MetaName)4112712376, PsoDataType.Float, 12, 0, 0), - new PsoStructureEntryInfo((MetaName)646913210, PsoDataType.Float, 16, 0, 0), - new PsoStructureEntryInfo((MetaName)397988749, PsoDataType.Float, 20, 0, 0), + new PsoStructureEntryInfo(MetaName.fExteriorFootZoom, PsoDataType.Float, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.fExteriorFootZoomRunning, PsoDataType.Float, 12, 0, 0), + new PsoStructureEntryInfo(MetaName.fExteriorFootZoomWanted, PsoDataType.Float, 16, 0, 0), + new PsoStructureEntryInfo(MetaName.fExteriorFootZoomWantedRunning, PsoDataType.Float, 20, 0, 0), new PsoStructureEntryInfo((MetaName)1296848312, PsoDataType.Float, 24, 0, 0), new PsoStructureEntryInfo((MetaName)187030077, PsoDataType.Float, 28, 0, 0), - new PsoStructureEntryInfo((MetaName)3533921583, PsoDataType.Float, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.fInteriorFootZoom, PsoDataType.Float, 32, 0, 0), new PsoStructureEntryInfo((MetaName)2652932444, PsoDataType.Float, 36, 0, 0), new PsoStructureEntryInfo((MetaName)2075786872, PsoDataType.Float, 40, 0, 0), new PsoStructureEntryInfo(MetaName.fParachutingZoom, PsoDataType.Float, 44, 0, 0), - new PsoStructureEntryInfo((MetaName)2402173156, PsoDataType.Float, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)3692711717, PsoDataType.Float, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)4088397509, PsoDataType.Float, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)709315443, PsoDataType.Float, 60, 0, 0), - new PsoStructureEntryInfo((MetaName)1734631491, PsoDataType.Float, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.fVehicleStaticZoom, PsoDataType.Float, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.fVehicleStaticWantedZoom, PsoDataType.Float, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.fVehicleMovingZoom, PsoDataType.Float, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.fVehicleMovingWantedZoom, PsoDataType.Float, 60, 0, 0), + new PsoStructureEntryInfo(MetaName.fVehicleSpeedZoomScalar, PsoDataType.Float, 64, 0, 0), new PsoStructureEntryInfo(MetaName.fVehicleTilt, PsoDataType.Float, 68, 0, 0), new PsoStructureEntryInfo(MetaName.fVehicleOffset, PsoDataType.Float, 72, 0, 0), new PsoStructureEntryInfo((MetaName)1912611271, PsoDataType.Float, 76, 0, 0), new PsoStructureEntryInfo((MetaName)4158832075, PsoDataType.Float, 80, 0, 0), new PsoStructureEntryInfo((MetaName)2229181525, PsoDataType.Float, 84, 0, 0), new PsoStructureEntryInfo((MetaName)1723892124, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)707151806, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)928938887, PsoDataType.Float, 96, 0, 0) + new PsoStructureEntryInfo(MetaName.fRangeZoomedScalarStandard, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.fRangeZoomedScalarPlane, PsoDataType.Float, 96, 0, 0) ); case (MetaName)3031405081: return new PsoStructureInfo((MetaName)3031405081, 0, 0, 20, @@ -13096,16 +13096,16 @@ namespace CodeWalker.GameFiles ); case MetaName.strRequestRecording: return new PsoStructureInfo(MetaName.strRequestRecording, 0, 0, 16, - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)3356301454), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.strRecordedRequest), new PsoStructureEntryInfo(MetaName.Requests, PsoDataType.Array, 0, 0, 0) ); - case (MetaName)3356301454: - return new PsoStructureInfo((MetaName)3356301454, 0, 0, 32, - new PsoStructureEntryInfo(MetaName.Resource, PsoDataType.Structure, 0, 0, (MetaName)2548004600), + case MetaName.strRecordedRequest: + return new PsoStructureInfo(MetaName.strRecordedRequest, 0, 0, 32, + new PsoStructureEntryInfo(MetaName.Resource, PsoDataType.Structure, 0, 0, MetaName.strResourceReference), new PsoStructureEntryInfo(MetaName.Flags, PsoDataType.SInt, 24, 0, 0) ); - case (MetaName)2548004600: - return new PsoStructureInfo((MetaName)2548004600, 0, 0, 24, + case MetaName.strResourceReference: + return new PsoStructureInfo(MetaName.strResourceReference, 0, 0, 24, new PsoStructureEntryInfo(MetaName.AssetName, PsoDataType.String, 0, 3, 0), new PsoStructureEntryInfo(MetaName.Extension, PsoDataType.String, 16, 0, (MetaName)524288) ); @@ -13182,7 +13182,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.timeTillPedLeaves, PsoDataType.Float, 64, 0, 0), new PsoStructureEntryInfo(MetaName.start, PsoDataType.UByte, 68, 0, 0), new PsoStructureEntryInfo(MetaName.end, PsoDataType.UByte, 69, 0, 0), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, (MetaName)700327466), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Enum, 0, 0, MetaName.CScenarioPointFlags__Flags), new PsoStructureEntryInfo(MetaName.flags, PsoDataType.Flags, 72, 0, (MetaName)196618), new PsoStructureEntryInfo(MetaName.highPri, PsoDataType.Bool, 76, 0, 0), new PsoStructureEntryInfo(MetaName.extendedRange, PsoDataType.Bool, 77, 0, 0) @@ -13344,13 +13344,13 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 696, 4, 0), new PsoStructureEntryInfo(MetaName.iRangeStart, PsoDataType.SInt, 704, 0, 0), new PsoStructureEntryInfo(MetaName.iRangeEnd, PsoDataType.SInt, 708, 0, 0), - new PsoStructureEntryInfo((MetaName)4079543520, PsoDataType.SInt, 712, 0, 0), + new PsoStructureEntryInfo(MetaName.iAltRangeEnd, PsoDataType.SInt, 712, 0, 0), new PsoStructureEntryInfo(MetaName.fSectionByTimeSliceDuration, PsoDataType.Float, 716, 0, 0), new PsoStructureEntryInfo(MetaName.fFadeOutCutsceneDuration, PsoDataType.Float, 720, 0, 0), new PsoStructureEntryInfo(MetaName.fFadeInGameDuration, PsoDataType.Float, 724, 0, 0), new PsoStructureEntryInfo(MetaName.fadeInColor, PsoDataType.UInt, 728, 1, 0), - new PsoStructureEntryInfo((MetaName)1783584102, PsoDataType.SInt, 732, 0, 0), - new PsoStructureEntryInfo((MetaName)660302675, PsoDataType.SInt, 736, 0, 0), + new PsoStructureEntryInfo(MetaName.iBlendOutCutsceneDuration, PsoDataType.SInt, 732, 0, 0), + new PsoStructureEntryInfo(MetaName.iBlendOutCutsceneOffset, PsoDataType.SInt, 736, 0, 0), new PsoStructureEntryInfo(MetaName.fFadeOutGameDuration, PsoDataType.Float, 740, 0, 0), new PsoStructureEntryInfo(MetaName.fFadeInCutsceneDuration, PsoDataType.Float, 744, 0, 0), new PsoStructureEntryInfo(MetaName.fadeOutColor, PsoDataType.UInt, 748, 1, 0), @@ -13361,7 +13361,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.rage__cutfCutsceneFile2__SConcatData), new PsoStructureEntryInfo(MetaName.concatDataList, PsoDataType.Array, 784, 1, (MetaName)2621475), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.vHaltFrequency), - new PsoStructureEntryInfo((MetaName)1234565986, PsoDataType.Array, 5280, 0, (MetaName)37) + new PsoStructureEntryInfo(MetaName.discardFrameList, PsoDataType.Array, 5280, 0, (MetaName)37) ); case MetaName.rage__parAttributeList: return new PsoStructureInfo(MetaName.rage__parAttributeList, 0, 0, 12, @@ -13378,7 +13378,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.fRoll, PsoDataType.Float, 44, 0, 0), new PsoStructureEntryInfo(MetaName.iRangeStart, PsoDataType.SInt, 48, 0, 0), new PsoStructureEntryInfo(MetaName.iRangeEnd, PsoDataType.SInt, 52, 0, 0), - new PsoStructureEntryInfo((MetaName)1999956592, PsoDataType.Bool, 56, 0, 0) + new PsoStructureEntryInfo(MetaName.bValidForPlayBack, PsoDataType.Bool, 56, 0, 0) ); case MetaName.rage__cutfAssetManagerObject: return new PsoStructureInfo(MetaName.rage__cutfAssetManagerObject, 0, 0, 40, @@ -13398,7 +13398,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 20, 0, MetaName.rage__parAttributeList), new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 32, 4, 0), new PsoStructureEntryInfo(MetaName.cName, PsoDataType.String, 40, 7, 0), - new PsoStructureEntryInfo((MetaName)1324611103, PsoDataType.UInt, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.AnimStreamingBase, PsoDataType.UInt, 48, 0, 0), new PsoStructureEntryInfo(MetaName.fNearDrawDistance, PsoDataType.Float, 56, 0, 0), new PsoStructureEntryInfo(MetaName.fFarDrawDistance, PsoDataType.Float, 60, 0, 0) ); @@ -13409,7 +13409,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 32, 4, 0), new PsoStructureEntryInfo(MetaName.cName, PsoDataType.String, 40, 7, 0), new PsoStructureEntryInfo(MetaName.StreamingName, PsoDataType.String, 48, 7, 0), - new PsoStructureEntryInfo((MetaName)1324611103, PsoDataType.UInt, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.AnimStreamingBase, PsoDataType.UInt, 56, 0, 0), new PsoStructureEntryInfo(MetaName.cAnimExportCtrlSpecFile, PsoDataType.String, 64, 7, 0), new PsoStructureEntryInfo(MetaName.cFaceExportCtrlSpecFile, PsoDataType.String, 68, 7, 0), new PsoStructureEntryInfo(MetaName.cAnimCompressionFile, PsoDataType.String, 72, 7, 0), @@ -13429,7 +13429,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 32, 4, 0), new PsoStructureEntryInfo(MetaName.cName, PsoDataType.String, 40, 7, 0), new PsoStructureEntryInfo(MetaName.StreamingName, PsoDataType.String, 48, 7, 0), - new PsoStructureEntryInfo((MetaName)1324611103, PsoDataType.UInt, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.AnimStreamingBase, PsoDataType.UInt, 56, 0, 0), new PsoStructureEntryInfo(MetaName.cAnimExportCtrlSpecFile, PsoDataType.String, 64, 7, 0), new PsoStructureEntryInfo(MetaName.cFaceExportCtrlSpecFile, PsoDataType.String, 68, 7, 0), new PsoStructureEntryInfo(MetaName.cAnimCompressionFile, PsoDataType.String, 72, 7, 0), @@ -13469,9 +13469,9 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 20, 0, MetaName.rage__parAttributeList), new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 32, 4, 0), new PsoStructureEntryInfo(MetaName.cName, PsoDataType.String, 40, 3, 0), - new PsoStructureEntryInfo((MetaName)4294123624, PsoDataType.String, 56, 3, 0), + new PsoStructureEntryInfo(MetaName.cRenderTargetName, PsoDataType.String, 56, 3, 0), new PsoStructureEntryInfo(MetaName.iOverlayType, PsoDataType.UInt, 72, 0, 0), - new PsoStructureEntryInfo((MetaName)2549745289, PsoDataType.String, 76, 7, 0) + new PsoStructureEntryInfo(MetaName.modelHashName, PsoDataType.String, 76, 7, 0) ); case MetaName.rage__cutfSubtitleObject: return new PsoStructureInfo(MetaName.rage__cutfSubtitleObject, 0, 0, 48, @@ -13493,19 +13493,19 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.fFallOff, PsoDataType.Float, 164, 0, 0), new PsoStructureEntryInfo(MetaName.fConeAngle, PsoDataType.Float, 168, 0, 0), new PsoStructureEntryInfo(MetaName.fVolumeIntensity, PsoDataType.Float, 172, 0, 0), - new PsoStructureEntryInfo((MetaName)75610905, PsoDataType.Float, 176, 0, 0), + new PsoStructureEntryInfo(MetaName.fVolumeSizeScale, PsoDataType.Float, 176, 0, 0), new PsoStructureEntryInfo(MetaName.fCoronaSize, PsoDataType.Float, 180, 0, 0), new PsoStructureEntryInfo(MetaName.fCoronaIntensity, PsoDataType.Float, 184, 0, 0), new PsoStructureEntryInfo(MetaName.fCoronaZBias, PsoDataType.Float, 188, 0, 0), - new PsoStructureEntryInfo((MetaName)2725338958, PsoDataType.Float, 192, 0, 0), - new PsoStructureEntryInfo((MetaName)1342101, PsoDataType.Float, 196, 0, 0), + new PsoStructureEntryInfo(MetaName.fInnerConeAngle, PsoDataType.Float, 192, 0, 0), + new PsoStructureEntryInfo(MetaName.fExponentialFallOff, PsoDataType.Float, 196, 0, 0), new PsoStructureEntryInfo(MetaName.iLightType, PsoDataType.SInt, 200, 0, 0), new PsoStructureEntryInfo(MetaName.iLightProperty, PsoDataType.SInt, 204, 0, 0), - new PsoStructureEntryInfo((MetaName)2104882549, PsoDataType.SInt, 208, 0, 0), + new PsoStructureEntryInfo(MetaName.TextureDictID, PsoDataType.SInt, 208, 0, 0), new PsoStructureEntryInfo(MetaName.TextureKey, PsoDataType.SInt, 212, 0, 0), new PsoStructureEntryInfo((MetaName)34975788, PsoDataType.SInt, 216, 0, 0), - new PsoStructureEntryInfo((MetaName)2428927641, PsoDataType.UInt, 220, 0, 0), - new PsoStructureEntryInfo((MetaName)2759730476, PsoDataType.UInt, 224, 0, 0), + new PsoStructureEntryInfo(MetaName.uLightFlags, PsoDataType.UInt, 220, 0, 0), + new PsoStructureEntryInfo(MetaName.uHourFlags, PsoDataType.UInt, 224, 0, 0), new PsoStructureEntryInfo((MetaName)1437992521, PsoDataType.UShort, 228, 0, 0), new PsoStructureEntryInfo(MetaName.bStatic, PsoDataType.Bool, 230, 0, 0) ); @@ -13522,28 +13522,28 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.fFallOff, PsoDataType.Float, 116, 0, 0), new PsoStructureEntryInfo(MetaName.fConeAngle, PsoDataType.Float, 120, 0, 0), new PsoStructureEntryInfo(MetaName.fVolumeIntensity, PsoDataType.Float, 124, 0, 0), - new PsoStructureEntryInfo((MetaName)75610905, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.fVolumeSizeScale, PsoDataType.Float, 128, 0, 0), new PsoStructureEntryInfo(MetaName.fCoronaSize, PsoDataType.Float, 132, 0, 0), new PsoStructureEntryInfo(MetaName.fCoronaIntensity, PsoDataType.Float, 136, 0, 0), new PsoStructureEntryInfo(MetaName.fCoronaZBias, PsoDataType.Float, 140, 0, 0), - new PsoStructureEntryInfo((MetaName)2725338958, PsoDataType.Float, 144, 0, 0), - new PsoStructureEntryInfo((MetaName)1342101, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo(MetaName.fInnerConeAngle, PsoDataType.Float, 144, 0, 0), + new PsoStructureEntryInfo(MetaName.fExponentialFallOff, PsoDataType.Float, 148, 0, 0), new PsoStructureEntryInfo(MetaName.fShadowBlur, PsoDataType.Float, 152, 0, 0), new PsoStructureEntryInfo(MetaName.iLightType, PsoDataType.SInt, 156, 0, 0), new PsoStructureEntryInfo(MetaName.iLightProperty, PsoDataType.SInt, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)2104882549, PsoDataType.SInt, 164, 0, 0), + new PsoStructureEntryInfo(MetaName.TextureDictID, PsoDataType.SInt, 164, 0, 0), new PsoStructureEntryInfo(MetaName.TextureKey, PsoDataType.SInt, 168, 0, 0), - new PsoStructureEntryInfo((MetaName)2428927641, PsoDataType.UInt, 176, 0, 0), - new PsoStructureEntryInfo((MetaName)2759730476, PsoDataType.UInt, 180, 0, 0), + new PsoStructureEntryInfo(MetaName.uLightFlags, PsoDataType.UInt, 176, 0, 0), + new PsoStructureEntryInfo(MetaName.uHourFlags, PsoDataType.UInt, 180, 0, 0), new PsoStructureEntryInfo(MetaName.bStatic, PsoDataType.Bool, 186, 0, 0), - new PsoStructureEntryInfo((MetaName)1324611103, PsoDataType.UInt, 192, 0, 0) + new PsoStructureEntryInfo(MetaName.AnimStreamingBase, PsoDataType.UInt, 192, 0, 0) ); case MetaName.rage__cutfObjectIdEvent: return new PsoStructureInfo(MetaName.rage__cutfObjectIdEvent, 0, 0, 56, new PsoStructureEntryInfo(MetaName.fTime, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo(MetaName.iEventId, PsoDataType.SInt, 20, 0, 0), new PsoStructureEntryInfo(MetaName.iEventArgsIndex, PsoDataType.SInt, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3754530640, PsoDataType.Structure, 32, 3, 0), + new PsoStructureEntryInfo(MetaName.pChildEvents, PsoDataType.Structure, 32, 3, 0), new PsoStructureEntryInfo(MetaName.StickyId, PsoDataType.UInt, 40, 0, 0), new PsoStructureEntryInfo(MetaName.IsChild, PsoDataType.Bool, 44, 0, 0), new PsoStructureEntryInfo(MetaName.iObjectId, PsoDataType.SInt, 48, 0, 0) @@ -13562,8 +13562,8 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 12, 0, MetaName.rage__parAttributeList), new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 24, 4, 0) ); - case (MetaName)1016128875: - return new PsoStructureInfo((MetaName)1016128875, 0, 0, 16, + case MetaName.rage__cutfAttributeList: + return new PsoStructureInfo(MetaName.rage__cutfAttributeList, 0, 0, 16, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), new PsoStructureEntryInfo(MetaName.Items, PsoDataType.Array, 0, 0, 0) ); @@ -13615,39 +13615,39 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.vRotationQuaternion, PsoDataType.Float4, 64, 0, 0), new PsoStructureEntryInfo(MetaName.fNearDrawDistance, PsoDataType.Float, 80, 0, 0), new PsoStructureEntryInfo(MetaName.fFarDrawDistance, PsoDataType.Float, 84, 0, 0), - new PsoStructureEntryInfo((MetaName)3931395097, PsoDataType.Float, 88, 0, 0), - new PsoStructureEntryInfo((MetaName)3995079835, PsoDataType.Float, 92, 0, 0), - new PsoStructureEntryInfo((MetaName)2269408044, PsoDataType.Float, 96, 0, 0), - new PsoStructureEntryInfo((MetaName)2792355072, PsoDataType.Float, 100, 0, 0), - new PsoStructureEntryInfo((MetaName)1455403991, PsoDataType.Float, 104, 0, 0), - new PsoStructureEntryInfo((MetaName)2245753507, PsoDataType.Float, 108, 0, 0), - new PsoStructureEntryInfo((MetaName)3792964618, PsoDataType.Float, 112, 0, 0), - new PsoStructureEntryInfo((MetaName)129942887, PsoDataType.Float, 116, 0, 0), - new PsoStructureEntryInfo((MetaName)1682304034, PsoDataType.Float, 120, 0, 0), - new PsoStructureEntryInfo((MetaName)1316012152, PsoDataType.Float, 124, 0, 0), - new PsoStructureEntryInfo((MetaName)1218720991, PsoDataType.Float, 128, 0, 0), - new PsoStructureEntryInfo((MetaName)872811427, PsoDataType.Float, 132, 0, 0), - new PsoStructureEntryInfo((MetaName)1832730358, PsoDataType.Float, 136, 0, 0), - new PsoStructureEntryInfo((MetaName)1099319606, PsoDataType.Float, 140, 0, 0), + new PsoStructureEntryInfo(MetaName.fMapLodScale, PsoDataType.Float, 88, 0, 0), + new PsoStructureEntryInfo(MetaName.ReflectionLodRangeStart, PsoDataType.Float, 92, 0, 0), + new PsoStructureEntryInfo(MetaName.ReflectionLodRangeEnd, PsoDataType.Float, 96, 0, 0), + new PsoStructureEntryInfo(MetaName.ReflectionSLodRangeStart, PsoDataType.Float, 100, 0, 0), + new PsoStructureEntryInfo(MetaName.ReflectionSLodRangeEnd, PsoDataType.Float, 104, 0, 0), + new PsoStructureEntryInfo(MetaName.LodMultHD, PsoDataType.Float, 108, 0, 0), + new PsoStructureEntryInfo(MetaName.LodMultOrphanedHD, PsoDataType.Float, 112, 0, 0), + new PsoStructureEntryInfo(MetaName.LodMultLod, PsoDataType.Float, 116, 0, 0), + new PsoStructureEntryInfo(MetaName.LodMultSLod1, PsoDataType.Float, 120, 0, 0), + new PsoStructureEntryInfo(MetaName.LodMultSLod2, PsoDataType.Float, 124, 0, 0), + new PsoStructureEntryInfo(MetaName.LodMultSLod3, PsoDataType.Float, 128, 0, 0), + new PsoStructureEntryInfo(MetaName.LodMultSLod4, PsoDataType.Float, 132, 0, 0), + new PsoStructureEntryInfo(MetaName.WaterReflectionFarClip, PsoDataType.Float, 136, 0, 0), + new PsoStructureEntryInfo(MetaName.SSAOLightInten, PsoDataType.Float, 140, 0, 0), new PsoStructureEntryInfo(MetaName.ExposurePush, PsoDataType.Float, 144, 0, 0), - new PsoStructureEntryInfo((MetaName)3267149471, PsoDataType.Float, 148, 0, 0), - new PsoStructureEntryInfo((MetaName)3063864558, PsoDataType.Float, 152, 0, 0), - new PsoStructureEntryInfo((MetaName)71148997, PsoDataType.Float, 156, 0, 0), - new PsoStructureEntryInfo((MetaName)2331545500, PsoDataType.Float, 160, 0, 0), - new PsoStructureEntryInfo((MetaName)4246749927, PsoDataType.Float, 164, 0, 0), - new PsoStructureEntryInfo((MetaName)1253384283, PsoDataType.Float, 168, 0, 0), + new PsoStructureEntryInfo(MetaName.LightFadeDistanceMult, PsoDataType.Float, 148, 0, 0), + new PsoStructureEntryInfo(MetaName.LightShadowFadeDistanceMult, PsoDataType.Float, 152, 0, 0), + new PsoStructureEntryInfo(MetaName.LightSpecularFadeDistMult, PsoDataType.Float, 156, 0, 0), + new PsoStructureEntryInfo(MetaName.LightVolumetricFadeDistanceMult, PsoDataType.Float, 160, 0, 0), + new PsoStructureEntryInfo(MetaName.DirectionalLightMultiplier, PsoDataType.Float, 164, 0, 0), + new PsoStructureEntryInfo(MetaName.LensArtefactMultiplier, PsoDataType.Float, 168, 0, 0), new PsoStructureEntryInfo(MetaName.BloomMax, PsoDataType.Float, 172, 0, 0), - new PsoStructureEntryInfo((MetaName)4064056507, PsoDataType.Bool, 176, 0, 0), - new PsoStructureEntryInfo((MetaName)2666061934, PsoDataType.Bool, 177, 0, 0), - new PsoStructureEntryInfo((MetaName)22229384, PsoDataType.Bool, 178, 0, 0), - new PsoStructureEntryInfo((MetaName)2168731396, PsoDataType.Bool, 179, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableHighQualityDof, PsoDataType.Bool, 176, 0, 0), + new PsoStructureEntryInfo(MetaName.FreezeReflectionMap, PsoDataType.Bool, 177, 0, 0), + new PsoStructureEntryInfo(MetaName.DisableDirectionalLighting, PsoDataType.Bool, 178, 0, 0), + new PsoStructureEntryInfo(MetaName.AbsoluteIntensityEnabled, PsoDataType.Bool, 179, 0, 0), new PsoStructureEntryInfo(MetaName.CharacterLight, PsoDataType.Structure, 192, 0, MetaName.rage__cutfCameraCutCharacterLightParams), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.rage__cutfCameraCutTimeOfDayDofModifier), - new PsoStructureEntryInfo((MetaName)3502363965, PsoDataType.Array, 256, 0, (MetaName)34) + new PsoStructureEntryInfo(MetaName.TimeOfDayDofModifers, PsoDataType.Array, 256, 0, (MetaName)34) ); case MetaName.rage__cutfCameraCutCharacterLightParams: return new PsoStructureInfo(MetaName.rage__cutfCameraCutCharacterLightParams, 0, 0, 64, - new PsoStructureEntryInfo((MetaName)1299282176, PsoDataType.Bool, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.bUseTimeCycleValues, PsoDataType.Bool, 8, 0, 0), new PsoStructureEntryInfo(MetaName.vDirection, PsoDataType.Float3, 16, 0, 0), new PsoStructureEntryInfo(MetaName.vColour, PsoDataType.Float3, 32, 0, 0), new PsoStructureEntryInfo(MetaName.fIntensity, PsoDataType.Float, 48, 0, 0) @@ -13690,7 +13690,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 32, 4, 0), new PsoStructureEntryInfo(MetaName.cName, PsoDataType.String, 40, 7, 0), new PsoStructureEntryInfo(MetaName.StreamingName, PsoDataType.String, 48, 7, 0), - new PsoStructureEntryInfo((MetaName)1324611103, PsoDataType.UInt, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.AnimStreamingBase, PsoDataType.UInt, 56, 0, 0), new PsoStructureEntryInfo(MetaName.cAnimExportCtrlSpecFile, PsoDataType.String, 64, 7, 0), new PsoStructureEntryInfo(MetaName.cFaceExportCtrlSpecFile, PsoDataType.String, 68, 7, 0), new PsoStructureEntryInfo(MetaName.cAnimCompressionFile, PsoDataType.String, 72, 7, 0), @@ -13698,14 +13698,14 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.typeFile, PsoDataType.String, 88, 7, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 3, 0), new PsoStructureEntryInfo(MetaName.cRemoveBoneNameList, PsoDataType.Array, 96, 0, (MetaName)11), - new PsoStructureEntryInfo((MetaName)3754821582, PsoDataType.Bool, 112, 0, 0) + new PsoStructureEntryInfo(MetaName.bCanApplyRealDamage, PsoDataType.Bool, 112, 0, 0) ); case MetaName.rage__cutfEvent: return new PsoStructureInfo(MetaName.rage__cutfEvent, 0, 0, 48, new PsoStructureEntryInfo(MetaName.fTime, PsoDataType.Float, 16, 0, 0), new PsoStructureEntryInfo(MetaName.iEventId, PsoDataType.SInt, 20, 0, 0), new PsoStructureEntryInfo(MetaName.iEventArgsIndex, PsoDataType.SInt, 24, 0, 0), - new PsoStructureEntryInfo((MetaName)3754530640, PsoDataType.Structure, 32, 3, 0), + new PsoStructureEntryInfo(MetaName.pChildEvents, PsoDataType.Structure, 32, 3, 0), new PsoStructureEntryInfo(MetaName.StickyId, PsoDataType.UInt, 40, 0, 0), new PsoStructureEntryInfo(MetaName.IsChild, PsoDataType.Bool, 44, 0, 0) ); @@ -13713,13 +13713,13 @@ namespace CodeWalker.GameFiles return new PsoStructureInfo(MetaName.rage__cutfCascadeShadowEventArgs, 0, 0, 80, new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 12, 0, MetaName.rage__parAttributeList), new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 24, 4, 0), - new PsoStructureEntryInfo((MetaName)1262004121, PsoDataType.String, 32, 7, 0), + new PsoStructureEntryInfo(MetaName.cameraCutHashName, PsoDataType.String, 32, 7, 0), new PsoStructureEntryInfo(MetaName.position, PsoDataType.Float3, 48, 0, 0), new PsoStructureEntryInfo(MetaName.radius, PsoDataType.Float, 64, 0, 0), new PsoStructureEntryInfo(MetaName.interpTime, PsoDataType.Float, 68, 0, 0), new PsoStructureEntryInfo(MetaName.cascadeIndex, PsoDataType.SInt, 72, 0, 0), new PsoStructureEntryInfo(MetaName.enabled, PsoDataType.Bool, 76, 0, 0), - new PsoStructureEntryInfo((MetaName)2862808673, PsoDataType.Bool, 77, 0, 0) + new PsoStructureEntryInfo(MetaName.interpolateToDisabled, PsoDataType.Bool, 77, 0, 0) ); case MetaName.rage__cutfFloatValueEventArgs: return new PsoStructureInfo(MetaName.rage__cutfFloatValueEventArgs, 0, 0, 40, @@ -13734,8 +13734,8 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 32, 4, 0), new PsoStructureEntryInfo(MetaName.cName, PsoDataType.String, 40, 7, 0), new PsoStructureEntryInfo(MetaName.StreamingName, PsoDataType.String, 48, 7, 0), - new PsoStructureEntryInfo((MetaName)1324611103, PsoDataType.UInt, 56, 0, 0), - new PsoStructureEntryInfo((MetaName)1844888803, PsoDataType.String, 64, 7, 0) + new PsoStructureEntryInfo(MetaName.AnimStreamingBase, PsoDataType.UInt, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.athFxListHash, PsoDataType.String, 64, 7, 0) ); case MetaName.rage__cutfWeaponModelObject: return new PsoStructureInfo(MetaName.rage__cutfWeaponModelObject, 0, 0, 104, @@ -13744,22 +13744,22 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 32, 4, 0), new PsoStructureEntryInfo(MetaName.cName, PsoDataType.String, 40, 7, 0), new PsoStructureEntryInfo(MetaName.StreamingName, PsoDataType.String, 48, 7, 0), - new PsoStructureEntryInfo((MetaName)1324611103, PsoDataType.UInt, 56, 0, 0), + new PsoStructureEntryInfo(MetaName.AnimStreamingBase, PsoDataType.UInt, 56, 0, 0), new PsoStructureEntryInfo(MetaName.cAnimExportCtrlSpecFile, PsoDataType.String, 64, 7, 0), new PsoStructureEntryInfo(MetaName.cFaceExportCtrlSpecFile, PsoDataType.String, 68, 7, 0), new PsoStructureEntryInfo(MetaName.cAnimCompressionFile, PsoDataType.String, 72, 7, 0), new PsoStructureEntryInfo(MetaName.cHandle, PsoDataType.String, 84, 7, 0), new PsoStructureEntryInfo(MetaName.typeFile, PsoDataType.String, 88, 7, 0), - new PsoStructureEntryInfo((MetaName)4160620743, PsoDataType.UInt, 96, 0, 0) + new PsoStructureEntryInfo(MetaName.GenericWeaponType, PsoDataType.UInt, 96, 0, 0) ); case MetaName.rage__cutfPlayParticleEffectEventArgs: return new PsoStructureInfo(MetaName.rage__cutfPlayParticleEffectEventArgs, 0, 0, 80, new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 12, 0, MetaName.rage__parAttributeList), new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 24, 4, 0), - new PsoStructureEntryInfo((MetaName)1039931786, PsoDataType.Float4, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)583681460, PsoDataType.Float3, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)867510818, PsoDataType.SInt, 64, 0, 0), - new PsoStructureEntryInfo((MetaName)3936668519, PsoDataType.UShort, 68, 0, 0) + new PsoStructureEntryInfo(MetaName.vInitialBoneRotation, PsoDataType.Float4, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.vInitialBoneOffset, PsoDataType.Float3, 48, 0, 0), + new PsoStructureEntryInfo(MetaName.iAttachParentId, PsoDataType.SInt, 64, 0, 0), + new PsoStructureEntryInfo(MetaName.iAttachBoneHash, PsoDataType.UShort, 68, 0, 0) ); case MetaName.rage__cutfBoolValueEventArgs: return new PsoStructureInfo(MetaName.rage__cutfBoolValueEventArgs, 0, 0, 40, @@ -13783,7 +13783,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 32, 4, 0), new PsoStructureEntryInfo(MetaName.cName, PsoDataType.String, 40, 7, 0), new PsoStructureEntryInfo(MetaName.StreamingName, PsoDataType.String, 48, 7, 0), - new PsoStructureEntryInfo((MetaName)1844888803, PsoDataType.String, 56, 7, 0) + new PsoStructureEntryInfo(MetaName.athFxListHash, PsoDataType.String, 56, 7, 0) ); case MetaName.rage__cutfDecalObject: return new PsoStructureInfo(MetaName.rage__cutfDecalObject, 0, 0, 64, @@ -13818,9 +13818,9 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 24, 4, 0), new PsoStructureEntryInfo(MetaName.iObjectId, PsoDataType.SInt, 32, 0, 0), new PsoStructureEntryInfo(MetaName.iMainBodyColour, PsoDataType.SInt, 40, 0, 0), - new PsoStructureEntryInfo((MetaName)1237172464, PsoDataType.SInt, 44, 0, 0), + new PsoStructureEntryInfo(MetaName.iSecondBodyColour, PsoDataType.SInt, 44, 0, 0), new PsoStructureEntryInfo(MetaName.iSpecularColour, PsoDataType.SInt, 48, 0, 0), - new PsoStructureEntryInfo((MetaName)2225359196, PsoDataType.SInt, 52, 0, 0), + new PsoStructureEntryInfo(MetaName.iWheelTrimColour, PsoDataType.SInt, 52, 0, 0), new PsoStructureEntryInfo((MetaName)2747538743, PsoDataType.SInt, 56, 0, 0), new PsoStructureEntryInfo(MetaName.iLivery, PsoDataType.SInt, 60, 0, 0), new PsoStructureEntryInfo(MetaName.iLivery2, PsoDataType.SInt, 64, 0, 0), @@ -13842,9 +13842,9 @@ namespace CodeWalker.GameFiles return new PsoStructureInfo(MetaName.rage__cutfTriggerLightEffectEventArgs, 0, 0, 48, new PsoStructureEntryInfo(MetaName.attributeList, PsoDataType.Structure, 12, 0, MetaName.rage__parAttributeList), new PsoStructureEntryInfo(MetaName.cutfAttributes, PsoDataType.Structure, 24, 4, 0), - new PsoStructureEntryInfo((MetaName)867510818, PsoDataType.SInt, 32, 0, 0), - new PsoStructureEntryInfo((MetaName)3936668519, PsoDataType.UShort, 36, 0, 0), - new PsoStructureEntryInfo((MetaName)734609027, PsoDataType.String, 40, 7, 0) + new PsoStructureEntryInfo(MetaName.iAttachParentId, PsoDataType.SInt, 32, 0, 0), + new PsoStructureEntryInfo(MetaName.iAttachBoneHash, PsoDataType.UShort, 36, 0, 0), + new PsoStructureEntryInfo(MetaName.AttachedParentName, PsoDataType.String, 40, 7, 0) ); case MetaName.rage__cutfVehicleExtraEventArgs: return new PsoStructureInfo(MetaName.rage__cutfVehicleExtraEventArgs, 0, 0, 56, @@ -14031,7 +14031,7 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.entitiesExtentsMax, PsoDataType.Float3, 80, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), new PsoStructureEntryInfo(MetaName.entities, PsoDataType.Array, 96, 0, (MetaName)8), - new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, (MetaName)372253349), + new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.rage__fwContainerLodDef), new PsoStructureEntryInfo(MetaName.containerLods, PsoDataType.Array, 112, 0, (MetaName)10), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 0, MetaName.BoxOccluder), new PsoStructureEntryInfo(MetaName.boxOccluders, PsoDataType.Array, 128, 0, MetaName.PsoPOINTER), @@ -14047,8 +14047,8 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.LODLights, PsoDataType.Array, 208, 0, (MetaName)22), new PsoStructureEntryInfo(MetaName.block, PsoDataType.Structure, 224, 0, MetaName.CBlockDesc) ); - case (MetaName)372253349: - return new PsoStructureInfo((MetaName)372253349, 0, 0, 8, + case MetaName.rage__fwContainerLodDef: + return new PsoStructureInfo(MetaName.rage__fwContainerLodDef, 0, 0, 8, new PsoStructureEntryInfo(MetaName.name, PsoDataType.String, 0, 7, 0), new PsoStructureEntryInfo(MetaName.parentIndex, PsoDataType.UInt, 4, 0, 0) ); @@ -14137,9 +14137,9 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.scaleZ, PsoDataType.Float, 68, 0, 0), new PsoStructureEntryInfo(MetaName.parentIndex, PsoDataType.SInt, 72, 0, 0), new PsoStructureEntryInfo(MetaName.lodDist, PsoDataType.Float, 76, 0, 0), - new PsoStructureEntryInfo(MetaName.lodLevel, PsoDataType.Enum, 80, 0, (MetaName)1264241711), + new PsoStructureEntryInfo(MetaName.lodLevel, PsoDataType.Enum, 80, 0, MetaName.rage__eLodType), new PsoStructureEntryInfo(MetaName.numChildren, PsoDataType.UInt, 84, 0, 0), - new PsoStructureEntryInfo(MetaName.priorityLevel, PsoDataType.Enum, 88, 0, (MetaName)648413703), + new PsoStructureEntryInfo(MetaName.priorityLevel, PsoDataType.Enum, 88, 0, MetaName.rage__ePriorityLevel), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.Structure, 0, 3, 0), new PsoStructureEntryInfo(MetaName.extensions, PsoDataType.Array, 96, 0, MetaName.PsoPOINTER), new PsoStructureEntryInfo(MetaName.ambientOcclusionMultiplier, PsoDataType.SInt, 112, 0, 0), @@ -14267,14 +14267,14 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.Name, PsoDataType.String, 8, 7, 0), new PsoStructureEntryInfo(MetaName.BlendOutThreshold, PsoDataType.Structure, 16, 0, (MetaName)3749122641) ); - case (MetaName)932638721: - return new PsoStructureInfo((MetaName)932638721, 0, 0, 56, + case MetaName.fwProfanityFilter: + return new PsoStructureInfo(MetaName.fwProfanityFilter, 0, 0, 56, new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 2, 0), - new PsoStructureEntryInfo((MetaName)4259179796, PsoDataType.Array, 8, 0, 0), + new PsoStructureEntryInfo(MetaName.profaneTerms, PsoDataType.Array, 8, 0, 0), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 2, 0), - new PsoStructureEntryInfo((MetaName)3705267857, PsoDataType.Array, 24, 0, (MetaName)2), + new PsoStructureEntryInfo(MetaName.reservedTerms, PsoDataType.Array, 24, 0, (MetaName)2), new PsoStructureEntryInfo(MetaName.ARRAYINFO, PsoDataType.String, 0, 2, 0), - new PsoStructureEntryInfo((MetaName)3574026465, PsoDataType.Array, 40, 0, (MetaName)4) + new PsoStructureEntryInfo(MetaName.reservedFSCharacters, PsoDataType.Array, 40, 0, (MetaName)4) ); default: return null; @@ -14923,8 +14923,8 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo(MetaName.FCT_HALF_SIGMOID, 2), new PsoEnumEntryInfo(MetaName.FCT_SIGMOID, 3) ); - case (MetaName)224899699: //animation clip flags - return new PsoEnumInfo((MetaName)224899699, 1, + case MetaName.eAnimPlayerFlag: //animation clip flags + return new PsoEnumInfo(MetaName.eAnimPlayerFlag, 1, new PsoEnumEntryInfo(MetaName.APF_USE_SECONDARY_SLOT, 0), new PsoEnumEntryInfo((MetaName)892548521, 1), new PsoEnumEntryInfo((MetaName)2727614813, 2), @@ -14967,14 +14967,14 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo((MetaName)3509068476, 4), new PsoEnumEntryInfo((MetaName)611607097, 5) ); - case (MetaName)1631789397: //anim clip dictionary streaming policy - return new PsoEnumInfo((MetaName)1631789397, 1, + case MetaName.eStreamingPolicy: //anim clip dictionary streaming policy + return new PsoEnumInfo(MetaName.eStreamingPolicy, 1, new PsoEnumEntryInfo(MetaName.SP_STREAMING, 0), new PsoEnumEntryInfo(MetaName.SP_SINGLEPLAYER_RESIDENT, 1), new PsoEnumEntryInfo(MetaName.SP_MULTIPLAYER_RESIDENT, 2) ); - case (MetaName)733577798: //anim clip dictionary streaming priority - return new PsoEnumInfo((MetaName)733577798, 1, + case MetaName.eStreamingPriority: //anim clip dictionary streaming priority + return new PsoEnumInfo(MetaName.eStreamingPriority, 1, new PsoEnumEntryInfo(MetaName.SP_Variation, 0), new PsoEnumEntryInfo(MetaName.SP_Low, 1), new PsoEnumEntryInfo(MetaName.SP_Medium, 2), @@ -15032,8 +15032,8 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo((MetaName)2136499167, 1), new PsoEnumEntryInfo((MetaName)3568072118, 2) ); - case (MetaName)2363471356: - return new PsoEnumInfo((MetaName)2363471356, 1, + case MetaName.eAnimBoneTag: + return new PsoEnumInfo(MetaName.eAnimBoneTag, 1, new PsoEnumEntryInfo(MetaName.BONETAG_INVALID, -1), new PsoEnumEntryInfo(MetaName.BONETAG_ROOT, 0), new PsoEnumEntryInfo((MetaName)1724691876, 17916), @@ -15337,8 +15337,8 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo(MetaName.CINEMATIC, 3), new PsoEnumEntryInfo(MetaName.FIRST_PERSON, 4) ); - case (MetaName)3921015781: - return new PsoEnumInfo((MetaName)3921015781, 1, + case MetaName.eCurveType: + return new PsoEnumInfo(MetaName.eCurveType, 1, new PsoEnumEntryInfo((MetaName)3099024980, 0), new PsoEnumEntryInfo((MetaName)3810146036, 1), new PsoEnumEntryInfo((MetaName)1812191173, 2), @@ -15496,14 +15496,14 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo(MetaName.OnlyUseForLawEnforcementPeds, 3), new PsoEnumEntryInfo(MetaName.OnlyUseForGangPeds, 4) ); - case (MetaName)454750378: - return new PsoEnumInfo((MetaName)454750378, 1, + case MetaName.LookIkTurnRate: + return new PsoEnumInfo(MetaName.LookIkTurnRate, 1, new PsoEnumEntryInfo(MetaName.LOOKIK_TURN_RATE_SLOW, 0), new PsoEnumEntryInfo(MetaName.LOOKIK_TURN_RATE_NORMAL, 1), new PsoEnumEntryInfo(MetaName.LOOKIK_TURN_RATE_FAST, 2) ); - case (MetaName)1931302076: - return new PsoEnumInfo((MetaName)1931302076, 1, + case MetaName.LookIkBlendRate: + return new PsoEnumInfo(MetaName.LookIkBlendRate, 1, new PsoEnumEntryInfo(MetaName.LOOKIK_BLEND_RATE_SLOWEST, 0), new PsoEnumEntryInfo(MetaName.LOOKIK_BLEND_RATE_SLOW, 1), new PsoEnumEntryInfo(MetaName.LOOKIK_BLEND_RATE_NORMAL, 2), @@ -15511,8 +15511,8 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo(MetaName.LOOKIK_BLEND_RATE_FASTEST, 4), new PsoEnumEntryInfo(MetaName.LOOKIK_BLEND_RATE_INSTANT, 5) ); - case (MetaName)4044698613: - return new PsoEnumInfo((MetaName)4044698613, 1, + case MetaName.LookIkRotationLimit: + return new PsoEnumInfo(MetaName.LookIkRotationLimit, 1, new PsoEnumEntryInfo(MetaName.LOOKIK_ROT_LIM_OFF, 0), new PsoEnumEntryInfo(MetaName.LOOKIK_ROT_LIM_NARROWEST, 1), new PsoEnumEntryInfo(MetaName.LOOKIK_ROT_LIM_NARROW, 2), @@ -15734,8 +15734,8 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo(MetaName.kOnlySp, 1), new PsoEnumEntryInfo(MetaName.kOnlyMp, 2) ); - case (MetaName)700327466: - return new PsoEnumInfo((MetaName)700327466, 1, + case MetaName.CScenarioPointFlags__Flags: + return new PsoEnumInfo(MetaName.CScenarioPointFlags__Flags, 1, new PsoEnumEntryInfo(MetaName.IgnoreMaxInRange, 0), new PsoEnumEntryInfo(MetaName.NoSpawn, 1), new PsoEnumEntryInfo(MetaName.StationaryReactions, 2) @@ -15777,8 +15777,8 @@ namespace CodeWalker.GameFiles return new PsoEnumInfo(MetaName.manifestFlags, 1, new PsoEnumEntryInfo(MetaName.INTERIOR_DATA, 0) ); - case (MetaName)1264241711: - return new PsoEnumInfo((MetaName)1264241711, 1, + case MetaName.rage__eLodType: + return new PsoEnumInfo(MetaName.rage__eLodType, 1, new PsoEnumEntryInfo(MetaName.LODTYPES_DEPTH_HD, 0), new PsoEnumEntryInfo(MetaName.LODTYPES_DEPTH_LOD, 1), new PsoEnumEntryInfo(MetaName.LODTYPES_DEPTH_SLOD1, 2), @@ -15787,8 +15787,8 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo(MetaName.LODTYPES_DEPTH_ORPHANHD, 5), new PsoEnumEntryInfo(MetaName.LODTYPES_DEPTH_SLOD4, 6) ); - case (MetaName)648413703: - return new PsoEnumInfo((MetaName)648413703, 1, + case MetaName.rage__ePriorityLevel: + return new PsoEnumInfo(MetaName.rage__ePriorityLevel, 1, new PsoEnumEntryInfo(MetaName.PRI_REQUIRED, 0), new PsoEnumEntryInfo(MetaName.PRI_OPTIONAL_HIGH, 1), new PsoEnumEntryInfo(MetaName.PRI_OPTIONAL_MEDIUM, 2), diff --git a/CodeWalker.Core/World/Scenarios.cs b/CodeWalker.Core/World/Scenarios.cs index b5e8825..f25b475 100644 --- a/CodeWalker.Core/World/Scenarios.cs +++ b/CodeWalker.Core/World/Scenarios.cs @@ -994,7 +994,7 @@ namespace CodeWalker.World newpoints.AddRange(cell); foreach (var point in cell) { - if ((point.Flags & Unk_700327466.ExtendedRange) > 0) + if ((point.Flags & CScenarioPointFlags__Flags.ExtendedRange) > 0) { flag = true; } diff --git a/Project/Panels/EditScenarioNodePanel.cs b/Project/Panels/EditScenarioNodePanel.cs index 37cb042..756bd04 100644 --- a/Project/Panels/EditScenarioNodePanel.cs +++ b/Project/Panels/EditScenarioNodePanel.cs @@ -1041,7 +1041,7 @@ namespace CodeWalker.Project.Panels ScenarioPointFlagsCheckedListBox.SetItemCheckState(i, c ? CheckState.Checked : CheckState.Unchecked); } populatingui = false; - Unk_700327466 f = (Unk_700327466)iflags; + CScenarioPointFlags__Flags f = (CScenarioPointFlags__Flags)iflags; lock (ProjectForm.ProjectSyncRoot) { if (CurrentScenarioNode.MyPoint.Flags != f) @@ -1078,7 +1078,7 @@ namespace CodeWalker.Project.Panels populatingui = true; ScenarioPointFlagsValueUpDown.Value = iflags; populatingui = false; - Unk_700327466 f = (Unk_700327466)iflags; + CScenarioPointFlags__Flags f = (CScenarioPointFlags__Flags)iflags; lock (ProjectForm.ProjectSyncRoot) { if (CurrentScenarioNode.MyPoint.Flags != f) @@ -1590,7 +1590,7 @@ namespace CodeWalker.Project.Panels ScenarioEntityPointFlagsCheckedListBox.SetItemCheckState(i, c ? CheckState.Checked : CheckState.Unchecked); } populatingui = false; - Unk_700327466 f = (Unk_700327466)iflags; + CScenarioPointFlags__Flags f = (CScenarioPointFlags__Flags)iflags; lock (ProjectForm.ProjectSyncRoot) { if (CurrentScenarioNode.EntityPoint.Flags != f) @@ -1627,7 +1627,7 @@ namespace CodeWalker.Project.Panels populatingui = true; ScenarioEntityPointFlagsUpDown.Value = iflags; populatingui = false; - Unk_700327466 f = (Unk_700327466)iflags; + CScenarioPointFlags__Flags f = (CScenarioPointFlags__Flags)iflags; lock (ProjectForm.ProjectSyncRoot) { if (CurrentScenarioNode.EntityPoint.Flags != f) @@ -2347,7 +2347,7 @@ namespace CodeWalker.Project.Panels ScenarioClusterPointFlagsCheckedListBox.SetItemCheckState(i, c ? CheckState.Checked : CheckState.Unchecked); } populatingui = false; - Unk_700327466 f = (Unk_700327466)iflags; + CScenarioPointFlags__Flags f = (CScenarioPointFlags__Flags)iflags; lock (ProjectForm.ProjectSyncRoot) { if (CurrentScenarioNode.ClusterMyPoint.Flags != f) @@ -2384,7 +2384,7 @@ namespace CodeWalker.Project.Panels populatingui = true; ScenarioClusterPointFlagsUpDown.Value = iflags; populatingui = false; - Unk_700327466 f = (Unk_700327466)iflags; + CScenarioPointFlags__Flags f = (CScenarioPointFlags__Flags)iflags; lock (ProjectForm.ProjectSyncRoot) { if (CurrentScenarioNode.ClusterMyPoint.Flags != f) diff --git a/Project/Panels/EditYmapEntityPanel.cs b/Project/Panels/EditYmapEntityPanel.cs index 4579896..ecb394f 100644 --- a/Project/Panels/EditYmapEntityPanel.cs +++ b/Project/Panels/EditYmapEntityPanel.cs @@ -39,19 +39,19 @@ namespace CodeWalker.Project.Panels private void LoadDropDowns() { EntityLodLevelComboBox.Items.Clear(); - EntityLodLevelComboBox.Items.Add(Unk_1264241711.LODTYPES_DEPTH_ORPHANHD); - EntityLodLevelComboBox.Items.Add(Unk_1264241711.LODTYPES_DEPTH_HD); - EntityLodLevelComboBox.Items.Add(Unk_1264241711.LODTYPES_DEPTH_LOD); - EntityLodLevelComboBox.Items.Add(Unk_1264241711.LODTYPES_DEPTH_SLOD1); - EntityLodLevelComboBox.Items.Add(Unk_1264241711.LODTYPES_DEPTH_SLOD2); - EntityLodLevelComboBox.Items.Add(Unk_1264241711.LODTYPES_DEPTH_SLOD3); - EntityLodLevelComboBox.Items.Add(Unk_1264241711.LODTYPES_DEPTH_SLOD4); + EntityLodLevelComboBox.Items.Add(rage__eLodType.LODTYPES_DEPTH_ORPHANHD); + EntityLodLevelComboBox.Items.Add(rage__eLodType.LODTYPES_DEPTH_HD); + EntityLodLevelComboBox.Items.Add(rage__eLodType.LODTYPES_DEPTH_LOD); + EntityLodLevelComboBox.Items.Add(rage__eLodType.LODTYPES_DEPTH_SLOD1); + EntityLodLevelComboBox.Items.Add(rage__eLodType.LODTYPES_DEPTH_SLOD2); + EntityLodLevelComboBox.Items.Add(rage__eLodType.LODTYPES_DEPTH_SLOD3); + EntityLodLevelComboBox.Items.Add(rage__eLodType.LODTYPES_DEPTH_SLOD4); EntityPriorityLevelComboBox.Items.Clear(); - EntityPriorityLevelComboBox.Items.Add(Unk_648413703.PRI_REQUIRED); - EntityPriorityLevelComboBox.Items.Add(Unk_648413703.PRI_OPTIONAL_HIGH); - EntityPriorityLevelComboBox.Items.Add(Unk_648413703.PRI_OPTIONAL_MEDIUM); - EntityPriorityLevelComboBox.Items.Add(Unk_648413703.PRI_OPTIONAL_LOW); + EntityPriorityLevelComboBox.Items.Add(rage__ePriorityLevel.PRI_REQUIRED); + EntityPriorityLevelComboBox.Items.Add(rage__ePriorityLevel.PRI_OPTIONAL_HIGH); + EntityPriorityLevelComboBox.Items.Add(rage__ePriorityLevel.PRI_OPTIONAL_MEDIUM); + EntityPriorityLevelComboBox.Items.Add(rage__ePriorityLevel.PRI_OPTIONAL_LOW); } @@ -164,9 +164,9 @@ namespace CodeWalker.Project.Panels //int parentIndex { get; set; } //72 72: SignedInt: 0: parentIndex //float lodDist { get; set; } //76 76: Float: 0: lodDist //float childLodDist { get; set; } //80 80: Float: 0: childLodDist//3398912973 - //Unk_1264241711 lodLevel { get; set; } //84 84: IntEnum: 1264241711: lodLevel //LODTYPES_DEPTH_ + //rage__eLodType lodLevel { get; set; } //84 84: IntEnum: 1264241711: lodLevel //LODTYPES_DEPTH_ //uint numChildren { get; set; } //88 88: UnsignedInt: 0: numChildren//2793909385 - //Unk_648413703 priorityLevel { get; set; } //92 92: IntEnum: 648413703: priorityLevel//647098393 + //rage__ePriorityLevel priorityLevel { get; set; } //92 92: IntEnum: 648413703: priorityLevel//647098393 //Array_StructurePointer extensions { get; set; } //96 96: Array: 0: extensions {0: StructurePointer: 0: 256} //int ambientOcclusionMultiplier { get; set; } //112 112: SignedInt: 0: ambientOcclusionMultiplier//415356295 //int artificialAmbientOcclusion { get; set; } //116 116: SignedInt: 0: artificialAmbientOcclusion//599844163 @@ -528,7 +528,7 @@ namespace CodeWalker.Project.Panels { if (populatingui) return; if (CurrentEntity == null) return; - Unk_1264241711 lodLevel = (Unk_1264241711)EntityLodLevelComboBox.SelectedItem; + rage__eLodType lodLevel = (rage__eLodType)EntityLodLevelComboBox.SelectedItem; lock (ProjectForm.ProjectSyncRoot) { if (CurrentEntity._CEntityDef.lodLevel != lodLevel) @@ -563,7 +563,7 @@ namespace CodeWalker.Project.Panels { if (populatingui) return; if (CurrentEntity == null) return; - Unk_648413703 priorityLevel = (Unk_648413703)EntityPriorityLevelComboBox.SelectedItem; + rage__ePriorityLevel priorityLevel = (rage__ePriorityLevel)EntityPriorityLevelComboBox.SelectedItem; lock (ProjectForm.ProjectSyncRoot) { if (CurrentEntity._CEntityDef.priorityLevel != priorityLevel) diff --git a/Project/Panels/EditYtypArchetypePanel.cs b/Project/Panels/EditYtypArchetypePanel.cs index d7e10b9..08990e0 100644 --- a/Project/Panels/EditYtypArchetypePanel.cs +++ b/Project/Panels/EditYtypArchetypePanel.cs @@ -23,7 +23,7 @@ namespace CodeWalker.Project.Panels private void EditYtypArchetypePanel_Load(object sender, EventArgs e) { - AssetTypeComboBox.Items.AddRange(Enum.GetNames(typeof(Unk_1991964615))); + AssetTypeComboBox.Items.AddRange(Enum.GetNames(typeof(rage__fwArchetypeDef__eAssetType))); } public void SetArchetype(Archetype archetype) diff --git a/Project/ProjectForm.cs b/Project/ProjectForm.cs index 6aeb955..3f21af5 100644 --- a/Project/ProjectForm.cs +++ b/Project/ProjectForm.cs @@ -1531,8 +1531,8 @@ namespace CodeWalker.Project cent.flags = 1572872; cent.parentIndex = -1; cent.lodDist = 200.0f; - cent.lodLevel = Unk_1264241711.LODTYPES_DEPTH_ORPHANHD; - cent.priorityLevel = Unk_648413703.PRI_REQUIRED; + cent.lodLevel = rage__eLodType.LODTYPES_DEPTH_ORPHANHD; + cent.priorityLevel = rage__ePriorityLevel.PRI_REQUIRED; cent.ambientOcclusionMultiplier = 255; cent.artificialAmbientOcclusion = 255; } @@ -2038,8 +2038,8 @@ namespace CodeWalker.Project cent.flags = placement.Dynamic ? 32u : 0;// 1572872; //? cent.parentIndex = -1; cent.lodDist = placement.LodDistance; - cent.lodLevel = Unk_1264241711.LODTYPES_DEPTH_ORPHANHD; - cent.priorityLevel = Unk_648413703.PRI_REQUIRED; + cent.lodLevel = rage__eLodType.LODTYPES_DEPTH_ORPHANHD; + cent.priorityLevel = rage__ePriorityLevel.PRI_REQUIRED; cent.ambientOcclusionMultiplier = 255; cent.artificialAmbientOcclusion = 255; @@ -2344,8 +2344,8 @@ namespace CodeWalker.Project cent.flags = 1572872; cent.parentIndex = -1; cent.lodDist = 200.0f; - cent.lodLevel = Unk_1264241711.LODTYPES_DEPTH_ORPHANHD; - cent.priorityLevel = Unk_648413703.PRI_REQUIRED; + cent.lodLevel = rage__eLodType.LODTYPES_DEPTH_ORPHANHD; + cent.priorityLevel = rage__ePriorityLevel.PRI_REQUIRED; cent.ambientOcclusionMultiplier = 255; cent.artificialAmbientOcclusion = 255; } @@ -4313,7 +4313,7 @@ namespace CodeWalker.Project thisnode.MyPoint.Direction = dir; thisnode.MyPoint.Type = stype; thisnode.MyPoint.ModelSet = modelset; - thisnode.MyPoint.Flags = (Unk_700327466)flags; + thisnode.MyPoint.Flags = (CScenarioPointFlags__Flags)flags; thisnode.ChainingNode = new MCScenarioChainingNode(); thisnode.ChainingNode.ScenarioNode = thisnode; diff --git a/Rendering/Renderer.cs b/Rendering/Renderer.cs index a7bf58f..1ca4576 100644 --- a/Rendering/Renderer.cs +++ b/Rendering/Renderer.cs @@ -90,7 +90,7 @@ namespace CodeWalker.Rendering public bool ShowScriptedYmaps = true; public List VisibleYmaps = new List(); - public Unk_1264241711 renderworldMaxLOD = Unk_1264241711.LODTYPES_DEPTH_ORPHANHD; + public rage__eLodType renderworldMaxLOD = rage__eLodType.LODTYPES_DEPTH_ORPHANHD; public float renderworldLodDistMult = 1.0f; public float renderworldDetailDistMult = 1.0f; @@ -1694,7 +1694,7 @@ namespace CodeWalker.Rendering loddist = ent.Archetype.LodDist * renderworldLodDistMult; } } - else if (ent._CEntityDef.lodLevel == Unk_1264241711.LODTYPES_DEPTH_ORPHANHD) + else if (ent._CEntityDef.lodLevel == rage__eLodType.LODTYPES_DEPTH_ORPHANHD) { loddist *= renderworldDetailDistMult * 1.5f; //orphan view dist adjustment... } @@ -1723,9 +1723,9 @@ namespace CodeWalker.Rendering - if (renderworldMaxLOD != Unk_1264241711.LODTYPES_DEPTH_ORPHANHD) + if (renderworldMaxLOD != rage__eLodType.LODTYPES_DEPTH_ORPHANHD) { - if ((ent._CEntityDef.lodLevel == Unk_1264241711.LODTYPES_DEPTH_ORPHANHD) || + if ((ent._CEntityDef.lodLevel == rage__eLodType.LODTYPES_DEPTH_ORPHANHD) || (ent._CEntityDef.lodLevel < renderworldMaxLOD)) { ent.IsVisible = false; diff --git a/WorldForm.cs b/WorldForm.cs index c8a53d9..2f4e282 100644 --- a/WorldForm.cs +++ b/WorldForm.cs @@ -2056,8 +2056,8 @@ namespace CodeWalker cent.flags = 1572872; cent.parentIndex = -1; cent.lodDist = 200.0f; - cent.lodLevel = Unk_1264241711.LODTYPES_DEPTH_ORPHANHD; - cent.priorityLevel = Unk_648413703.PRI_REQUIRED; + cent.lodLevel = rage__eLodType.LODTYPES_DEPTH_ORPHANHD; + cent.priorityLevel = rage__ePriorityLevel.PRI_REQUIRED; cent.ambientOcclusionMultiplier = 255; cent.artificialAmbientOcclusion = 255; cent.position = pos; @@ -7176,25 +7176,25 @@ namespace CodeWalker { default: case "ORPHANHD": - Renderer.renderworldMaxLOD = Unk_1264241711.LODTYPES_DEPTH_ORPHANHD; + Renderer.renderworldMaxLOD = rage__eLodType.LODTYPES_DEPTH_ORPHANHD; break; case "HD": - Renderer.renderworldMaxLOD = Unk_1264241711.LODTYPES_DEPTH_HD; + Renderer.renderworldMaxLOD = rage__eLodType.LODTYPES_DEPTH_HD; break; case "LOD": - Renderer.renderworldMaxLOD = Unk_1264241711.LODTYPES_DEPTH_LOD; + Renderer.renderworldMaxLOD = rage__eLodType.LODTYPES_DEPTH_LOD; break; case "SLOD1": - Renderer.renderworldMaxLOD = Unk_1264241711.LODTYPES_DEPTH_SLOD1; + Renderer.renderworldMaxLOD = rage__eLodType.LODTYPES_DEPTH_SLOD1; break; case "SLOD2": - Renderer.renderworldMaxLOD = Unk_1264241711.LODTYPES_DEPTH_SLOD2; + Renderer.renderworldMaxLOD = rage__eLodType.LODTYPES_DEPTH_SLOD2; break; case "SLOD3": - Renderer.renderworldMaxLOD = Unk_1264241711.LODTYPES_DEPTH_SLOD3; + Renderer.renderworldMaxLOD = rage__eLodType.LODTYPES_DEPTH_SLOD3; break; case "SLOD4": - Renderer.renderworldMaxLOD = Unk_1264241711.LODTYPES_DEPTH_SLOD4; + Renderer.renderworldMaxLOD = rage__eLodType.LODTYPES_DEPTH_SLOD4; break; } } From a490640f5570ffca2a211cd16b40ec5e29fd945b Mon Sep 17 00:00:00 2001 From: dexy Date: Sun, 13 Jan 2019 20:22:01 +1100 Subject: [PATCH 091/158] R30_dev6 --- CodeWalker Vehicles.cmd | 1 + 1 file changed, 1 insertion(+) create mode 100644 CodeWalker Vehicles.cmd diff --git a/CodeWalker Vehicles.cmd b/CodeWalker Vehicles.cmd new file mode 100644 index 0000000..e56c74d --- /dev/null +++ b/CodeWalker Vehicles.cmd @@ -0,0 +1 @@ +start codewalker vehicles \ No newline at end of file From 15adf26f81ce34d2e1f32f3ff55c5399049b6130 Mon Sep 17 00:00:00 2001 From: dexy Date: Sun, 13 Jan 2019 20:40:55 +1100 Subject: [PATCH 092/158] Added MetaNames by 0x1F9F1 --- .../GameFiles/MetaTypes/MetaNames.cs | 64 +++++++++ .../GameFiles/MetaTypes/PsoTypes.cs | 124 +++++++++--------- 2 files changed, 126 insertions(+), 62 deletions(-) diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs index f697eb7..efe3574 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs @@ -3471,6 +3471,10 @@ namespace CodeWalker.GameFiles eVehicleModType = 2363989491, eVehicleModCameraPos = 3413962745, + eVfxGroup = 679492, + + + @@ -8758,6 +8762,66 @@ namespace CodeWalker.GameFiles vInitialBoneOffset = 583681460, vInitialBoneRotation = 1039931786, + //from 0x1F9F1 + PROCOBJ_USE_GRID = 2886679239, + VFXGROUP_BRICK = 3154734852, + VFXGROUP_BUSHES = 1128169606, + VFXGROUP_CARPET_FABRIC = 3026080462, + VFXGROUP_CARPET_FABRIC_DUSTY = 267379975, + VFXGROUP_CAR_GLASS = 2254996260, + VFXGROUP_CAR_METAL = 1472286989, + VFXGROUP_CERAMIC = 2224745689, + VFXGROUP_CLAY = 340754025, + VFXGROUP_CONCRETE = 3909664268, + VFXGROUP_DIRT_DRY = 3010631297, + VFXGROUP_DRIED_MEAT = 2465001478, + VFXGROUP_FEATHERS = 1671778076, + VFXGROUP_FRESH_MEAT = 3221146268, + VFXGROUP_GLASS = 676227960, + VFXGROUP_GLASS_BULLETPROOF = 1453403596, + VFXGROUP_GRASS = 415809717, + VFXGROUP_GRASS_SHORT = 349709635, + VFXGROUP_GRAVEL = 1433594767, + VFXGROUP_GRAVEL_DEEP = 455532549, + VFXGROUP_HAY = 1126885779, + VFXGROUP_ICE = 646994767, + VFXGROUP_LEAVES = 1143575659, + VFXGROUP_LIQUID_BLOOD = 4066674550, + VFXGROUP_LIQUID_OIL = 2971250354, + VFXGROUP_LIQUID_PETROL = 3406258685, + VFXGROUP_LIQUID_WATER = 2626785081, + VFXGROUP_MARBLE = 1577332483, + VFXGROUP_METAL = 3837427351, + VFXGROUP_MUD_DEEP = 3891414216, + VFXGROUP_MUD_SOFT = 2357888979, + VFXGROUP_MUD_UNDERWATER = 3403853718, + VFXGROUP_PAPER = 4159761865, + VFXGROUP_PAVING = 2355147898, + VFXGROUP_PED_CAPSULE = 55400259, + VFXGROUP_PED_FOOT = 1875610286, + VFXGROUP_PED_HEAD = 2268340744, + VFXGROUP_PED_LIMB = 2787107962, + VFXGROUP_PED_TORSO = 2473728071, + VFXGROUP_PLASTER_BRITTLE = 3891593880, + VFXGROUP_PLASTIC = 3864441807, + VFXGROUP_PLASTIC_HOLLOW = 1987630632, + VFXGROUP_PUDDLE = 1875581587, + VFXGROUP_RUBBER = 3735882313, + VFXGROUP_SANDSTONE = 1961167048, + VFXGROUP_SANDSTONE_BRITTLE = 2694183171, + VFXGROUP_SAND_COMPACT = 350030577, + VFXGROUP_SAND_WET = 3640634991, + VFXGROUP_SAND_WET_DEEP = 3942228219, + VFXGROUP_SNOW_COMPACT = 4165326180, + VFXGROUP_SNOW_LOOSE = 3285173209, + VFXGROUP_STONE = 3533829783, + VFXGROUP_TARMAC = 1181702304, + VFXGROUP_TREE_BARK = 2219631463, + VFXGROUP_VOID = 2399258053, + VFXGROUP_WOOD = 59976830, + VFXGROUP_WOOD_DUSTY = 1551687812, + VFXGROUP_WOOD_SPLINTER = 4047674909, + diff --git a/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs b/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs index 527016d..1a0bbd9 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; @@ -1361,7 +1361,7 @@ namespace CodeWalker.GameFiles ); case (MetaName)231867887: return new PsoStructureInfo((MetaName)231867887, 0, 0, 24, - new PsoStructureEntryInfo(MetaName.vfxGroup, PsoDataType.Enum, 8, 0, (MetaName)679492), + new PsoStructureEntryInfo(MetaName.vfxGroup, PsoDataType.Enum, 8, 0, MetaName.eVfxGroup), new PsoStructureEntryInfo((MetaName)3557178741, PsoDataType.String, 12, 7, 0), new PsoStructureEntryInfo((MetaName)3535009775, PsoDataType.String, 16, 7, 0) ); @@ -15166,78 +15166,78 @@ namespace CodeWalker.GameFiles new PsoEnumEntryInfo((MetaName)3803060301, 33869), new PsoEnumEntryInfo((MetaName)746815866, 4126) ); - case (MetaName)679492: - return new PsoEnumInfo((MetaName)679492, 1, + case MetaName.eVfxGroup: + return new PsoEnumInfo(MetaName.eVfxGroup, 1, new PsoEnumEntryInfo((MetaName)1777437223, -1), - new PsoEnumEntryInfo((MetaName)2399258053, 0), + new PsoEnumEntryInfo(MetaName.VFXGROUP_VOID, 0), new PsoEnumEntryInfo((MetaName)2432469028, 1), - new PsoEnumEntryInfo((MetaName)3909664268, 2), + new PsoEnumEntryInfo(MetaName.VFXGROUP_CONCRETE, 2), new PsoEnumEntryInfo((MetaName)3536499660, 3), - new PsoEnumEntryInfo((MetaName)1181702304, 4), + new PsoEnumEntryInfo(MetaName.VFXGROUP_TARMAC, 4), new PsoEnumEntryInfo((MetaName)349722727, 5), - new PsoEnumEntryInfo((MetaName)3533829783, 6), - new PsoEnumEntryInfo((MetaName)3154734852, 7), - new PsoEnumEntryInfo((MetaName)1577332483, 8), - new PsoEnumEntryInfo((MetaName)2355147898, 9), - new PsoEnumEntryInfo((MetaName)1961167048, 10), - new PsoEnumEntryInfo((MetaName)2694183171, 11), + new PsoEnumEntryInfo(MetaName.VFXGROUP_STONE, 6), + new PsoEnumEntryInfo(MetaName.VFXGROUP_BRICK, 7), + new PsoEnumEntryInfo(MetaName.VFXGROUP_MARBLE, 8), + new PsoEnumEntryInfo(MetaName.VFXGROUP_PAVING, 9), + new PsoEnumEntryInfo(MetaName.VFXGROUP_SANDSTONE, 10), + new PsoEnumEntryInfo(MetaName.VFXGROUP_SANDSTONE_BRITTLE, 11), new PsoEnumEntryInfo((MetaName)1041698964, 12), - new PsoEnumEntryInfo((MetaName)350030577, 13), - new PsoEnumEntryInfo((MetaName)3640634991, 14), + new PsoEnumEntryInfo(MetaName.VFXGROUP_SAND_COMPACT, 13), + new PsoEnumEntryInfo(MetaName.VFXGROUP_SAND_WET, 14), new PsoEnumEntryInfo((MetaName)2143791359, 15), new PsoEnumEntryInfo((MetaName)2673689260, 16), - new PsoEnumEntryInfo((MetaName)3942228219, 17), - new PsoEnumEntryInfo((MetaName)646994767, 18), - new PsoEnumEntryInfo((MetaName)3285173209, 19), - new PsoEnumEntryInfo((MetaName)4165326180, 20), - new PsoEnumEntryInfo((MetaName)1433594767, 21), - new PsoEnumEntryInfo((MetaName)455532549, 22), - new PsoEnumEntryInfo((MetaName)3010631297, 23), - new PsoEnumEntryInfo((MetaName)2357888979, 24), - new PsoEnumEntryInfo((MetaName)3891414216, 25), - new PsoEnumEntryInfo((MetaName)3403853718, 26), - new PsoEnumEntryInfo((MetaName)340754025, 27), - new PsoEnumEntryInfo((MetaName)415809717, 28), - new PsoEnumEntryInfo((MetaName)349709635, 29), - new PsoEnumEntryInfo((MetaName)1126885779, 30), - new PsoEnumEntryInfo((MetaName)1128169606, 31), - new PsoEnumEntryInfo((MetaName)2219631463, 32), - new PsoEnumEntryInfo((MetaName)1143575659, 33), - new PsoEnumEntryInfo((MetaName)3837427351, 34), - new PsoEnumEntryInfo((MetaName)59976830, 35), - new PsoEnumEntryInfo((MetaName)1551687812, 36), - new PsoEnumEntryInfo((MetaName)4047674909, 37), - new PsoEnumEntryInfo((MetaName)2224745689, 38), - new PsoEnumEntryInfo((MetaName)3026080462, 39), - new PsoEnumEntryInfo((MetaName)267379975, 40), - new PsoEnumEntryInfo((MetaName)3864441807, 41), - new PsoEnumEntryInfo((MetaName)1987630632, 42), - new PsoEnumEntryInfo((MetaName)3735882313, 43), + new PsoEnumEntryInfo(MetaName.VFXGROUP_SAND_WET_DEEP, 17), + new PsoEnumEntryInfo(MetaName.VFXGROUP_ICE, 18), + new PsoEnumEntryInfo(MetaName.VFXGROUP_SNOW_LOOSE, 19), + new PsoEnumEntryInfo(MetaName.VFXGROUP_SNOW_COMPACT, 20), + new PsoEnumEntryInfo(MetaName.VFXGROUP_GRAVEL, 21), + new PsoEnumEntryInfo(MetaName.VFXGROUP_GRAVEL_DEEP, 22), + new PsoEnumEntryInfo(MetaName.VFXGROUP_DIRT_DRY, 23), + new PsoEnumEntryInfo(MetaName.VFXGROUP_MUD_SOFT, 24), + new PsoEnumEntryInfo(MetaName.VFXGROUP_MUD_DEEP, 25), + new PsoEnumEntryInfo(MetaName.VFXGROUP_MUD_UNDERWATER, 26), + new PsoEnumEntryInfo(MetaName.VFXGROUP_CLAY, 27), + new PsoEnumEntryInfo(MetaName.VFXGROUP_GRASS, 28), + new PsoEnumEntryInfo(MetaName.VFXGROUP_GRASS_SHORT, 29), + new PsoEnumEntryInfo(MetaName.VFXGROUP_HAY, 30), + new PsoEnumEntryInfo(MetaName.VFXGROUP_BUSHES, 31), + new PsoEnumEntryInfo(MetaName.VFXGROUP_TREE_BARK, 32), + new PsoEnumEntryInfo(MetaName.VFXGROUP_LEAVES, 33), + new PsoEnumEntryInfo(MetaName.VFXGROUP_METAL, 34), + new PsoEnumEntryInfo(MetaName.VFXGROUP_WOOD, 35), + new PsoEnumEntryInfo(MetaName.VFXGROUP_WOOD_DUSTY, 36), + new PsoEnumEntryInfo(MetaName.VFXGROUP_WOOD_SPLINTER, 37), + new PsoEnumEntryInfo(MetaName.VFXGROUP_CERAMIC, 38), + new PsoEnumEntryInfo(MetaName.VFXGROUP_CARPET_FABRIC, 39), + new PsoEnumEntryInfo(MetaName.VFXGROUP_CARPET_FABRIC_DUSTY, 40), + new PsoEnumEntryInfo(MetaName.VFXGROUP_PLASTIC, 41), + new PsoEnumEntryInfo(MetaName.VFXGROUP_PLASTIC_HOLLOW, 42), + new PsoEnumEntryInfo(MetaName.VFXGROUP_RUBBER, 43), new PsoEnumEntryInfo((MetaName)656066551, 44), - new PsoEnumEntryInfo((MetaName)3891593880, 45), + new PsoEnumEntryInfo(MetaName.VFXGROUP_PLASTER_BRITTLE, 45), new PsoEnumEntryInfo((MetaName)1710619059, 46), - new PsoEnumEntryInfo((MetaName)4159761865, 47), + new PsoEnumEntryInfo(MetaName.VFXGROUP_PAPER, 47), new PsoEnumEntryInfo((MetaName)3912379355, 48), - new PsoEnumEntryInfo((MetaName)1671778076, 49), + new PsoEnumEntryInfo(MetaName.VFXGROUP_FEATHERS, 49), new PsoEnumEntryInfo((MetaName)688944506, 50), - new PsoEnumEntryInfo((MetaName)676227960, 51), - new PsoEnumEntryInfo((MetaName)1453403596, 52), - new PsoEnumEntryInfo((MetaName)1472286989, 53), + new PsoEnumEntryInfo(MetaName.VFXGROUP_GLASS, 51), + new PsoEnumEntryInfo(MetaName.VFXGROUP_GLASS_BULLETPROOF, 52), + new PsoEnumEntryInfo(MetaName.VFXGROUP_CAR_METAL, 53), new PsoEnumEntryInfo((MetaName)2101842785, 54), - new PsoEnumEntryInfo((MetaName)2254996260, 55), - new PsoEnumEntryInfo((MetaName)1875581587, 56), - new PsoEnumEntryInfo((MetaName)2626785081, 57), - new PsoEnumEntryInfo((MetaName)4066674550, 58), - new PsoEnumEntryInfo((MetaName)2971250354, 59), - new PsoEnumEntryInfo((MetaName)3406258685, 60), + new PsoEnumEntryInfo(MetaName.VFXGROUP_CAR_GLASS, 55), + new PsoEnumEntryInfo(MetaName.VFXGROUP_PUDDLE, 56), + new PsoEnumEntryInfo(MetaName.VFXGROUP_LIQUID_WATER, 57), + new PsoEnumEntryInfo(MetaName.VFXGROUP_LIQUID_BLOOD, 58), + new PsoEnumEntryInfo(MetaName.VFXGROUP_LIQUID_OIL, 59), + new PsoEnumEntryInfo(MetaName.VFXGROUP_LIQUID_PETROL, 60), new PsoEnumEntryInfo((MetaName)3745008516, 61), - new PsoEnumEntryInfo((MetaName)3221146268, 62), - new PsoEnumEntryInfo((MetaName)2465001478, 63), - new PsoEnumEntryInfo((MetaName)2268340744, 64), - new PsoEnumEntryInfo((MetaName)2473728071, 65), - new PsoEnumEntryInfo((MetaName)2787107962, 66), - new PsoEnumEntryInfo((MetaName)1875610286, 67), - new PsoEnumEntryInfo((MetaName)55400259, 68) + new PsoEnumEntryInfo(MetaName.VFXGROUP_FRESH_MEAT, 62), + new PsoEnumEntryInfo(MetaName.VFXGROUP_DRIED_MEAT, 63), + new PsoEnumEntryInfo(MetaName.VFXGROUP_PED_HEAD, 64), + new PsoEnumEntryInfo(MetaName.VFXGROUP_PED_TORSO, 65), + new PsoEnumEntryInfo(MetaName.VFXGROUP_PED_LIMB, 66), + new PsoEnumEntryInfo(MetaName.VFXGROUP_PED_FOOT, 67), + new PsoEnumEntryInfo(MetaName.VFXGROUP_PED_CAPSULE, 68) ); case (MetaName)726948528: return new PsoEnumInfo((MetaName)726948528, 1, @@ -15254,7 +15254,7 @@ namespace CodeWalker.GameFiles case (MetaName)956281369: return new PsoEnumInfo((MetaName)956281369, 1, new PsoEnumEntryInfo(MetaName.PROCOBJ_ALIGN_OBJ, 0), - new PsoEnumEntryInfo((MetaName)2886679239, 1), + new PsoEnumEntryInfo(MetaName.PROCOBJ_USE_GRID, 1), new PsoEnumEntryInfo(MetaName.PROCOBJ_USE_SEED, 2), new PsoEnumEntryInfo(MetaName.PROCOBJ_IS_FLOATING, 3), new PsoEnumEntryInfo(MetaName.PROCOBJ_CAST_SHADOW, 4), From d794f592d8a7c164f6391c9df57a5f8361f921cf Mon Sep 17 00:00:00 2001 From: dexy Date: Sun, 13 Jan 2019 21:31:33 +1100 Subject: [PATCH 093/158] Vehicle wheel right hand side flip/fix --- Rendering/Renderable.cs | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/Rendering/Renderable.cs b/Rendering/Renderable.cs index 4988152..2a56c8b 100644 --- a/Rendering/Renderable.cs +++ b/Rendering/Renderable.cs @@ -184,6 +184,32 @@ namespace CodeWalker.Rendering fragtransformid = phys.OwnerFragPhysIndex; fragoffset = phys.OwnerFragPhysLod.Unknown_30h; fragoffset.W = 0.0f; + + if (fragtransformid < phys.OwnerFragPhysLod.Children?.data_items?.Length) + { + var pgrp = phys.OwnerFragPhysLod.Children.data_items[fragtransformid]; + + switch (pgrp.BoneTag) //right hand side wheel flip! + { + //case 27922: //wheel_lf + //case 29921: //wheel_lm1 + //case 29922: //wheel_lm2 + //case 29923: //wheel_lm3 + //case 27902: //wheel_lr + case 26418: //wheel_rf + case 5857: //wheel_rm1 + case 5858: //wheel_rm2 + case 5859: //wheel_rm3 + case 26398: //wheel_rr + fragtransforms[fragtransformid].M11 = -1; + fragtransforms[fragtransformid].M33 = -1; + break; + default: + break; + } + } + + } } else if (frag != null) From fbf57293c177b80273763c22ee173549f543e578 Mon Sep 17 00:00:00 2001 From: dexy Date: Sun, 13 Jan 2019 22:18:57 +1100 Subject: [PATCH 094/158] Skewy wheels bug fix --- CodeWalker.Core/GameFiles/Resources/Frag.cs | 11 ++++++----- Rendering/Renderable.cs | 7 +++++++ 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/CodeWalker.Core/GameFiles/Resources/Frag.cs b/CodeWalker.Core/GameFiles/Resources/Frag.cs index a81db3d..afab44f 100644 --- a/CodeWalker.Core/GameFiles/Resources/Frag.cs +++ b/CodeWalker.Core/GameFiles/Resources/Frag.cs @@ -2449,12 +2449,13 @@ namespace CodeWalker.GameFiles for (int i = 0; i < Children.data_items.Length; i++) { var child = Children.data_items[i]; + var gi = child.GroupIndex; child.OwnerFragPhysLod = this; child.OwnerFragPhysIndex = i; - if ((Groups?.data_items != null) && (i < Groups.data_items.Length)) + if ((Groups?.data_items != null) && (gi < Groups.data_items.Length)) { - var group = Groups.data_items[i]; + var group = Groups.data_items[gi]; var str = group.Name.ToString().ToLowerInvariant(); JenkIndex.Ensure(str); child.GroupNameHash = JenkHash.GenHash(str); @@ -3358,7 +3359,7 @@ namespace CodeWalker.GameFiles public uint Unknown_04h { get; set; } // 0x00000001 public float Unknown_08h { get; set; } public float Unknown_0Ch { get; set; } - public ushort BoneIndex { get; set; } + public ushort GroupIndex { get; set; } public ushort BoneTag { get; set; } public uint Unknown_14h { get; set; } // 0x00000000 public uint Unknown_18h { get; set; } // 0x00000000 @@ -3438,7 +3439,7 @@ namespace CodeWalker.GameFiles this.Unknown_04h = reader.ReadUInt32(); this.Unknown_08h = reader.ReadSingle(); this.Unknown_0Ch = reader.ReadSingle(); - this.BoneIndex = reader.ReadUInt16(); + this.GroupIndex = reader.ReadUInt16(); this.BoneTag = reader.ReadUInt16(); this.Unknown_14h = reader.ReadUInt32(); this.Unknown_18h = reader.ReadUInt32(); @@ -3534,7 +3535,7 @@ namespace CodeWalker.GameFiles writer.Write(this.Unknown_04h); writer.Write(this.Unknown_08h); writer.Write(this.Unknown_0Ch); - writer.Write(this.BoneIndex); + writer.Write(this.GroupIndex); writer.Write(this.BoneTag); writer.Write(this.Unknown_14h); writer.Write(this.Unknown_18h); diff --git a/Rendering/Renderable.cs b/Rendering/Renderable.cs index 2a56c8b..978dc0f 100644 --- a/Rendering/Renderable.cs +++ b/Rendering/Renderable.cs @@ -202,6 +202,13 @@ namespace CodeWalker.Rendering case 5859: //wheel_rm3 case 26398: //wheel_rr fragtransforms[fragtransformid].M11 = -1; + fragtransforms[fragtransformid].M12 = 0; + fragtransforms[fragtransformid].M13 = 0; + fragtransforms[fragtransformid].M21 = 0; + fragtransforms[fragtransformid].M22 = 1; + fragtransforms[fragtransformid].M23 = 0; + fragtransforms[fragtransformid].M31 = 0; + fragtransforms[fragtransformid].M32 = 0; fragtransforms[fragtransformid].M33 = -1; break; default: From 9af0b419678d9f2635c9a263e013c4c09e3bc65c Mon Sep 17 00:00:00 2001 From: dexy Date: Mon, 14 Jan 2019 12:25:03 +1100 Subject: [PATCH 095/158] Fix for XML/PSO conversion inaccuracies --- CodeWalker.Core/GameFiles/GameFileCache.cs | 17 ++++-- .../GameFiles/MetaTypes/MetaNames.cs | 16 +++++- .../GameFiles/MetaTypes/PsoBuilder.cs | 14 ++--- .../GameFiles/MetaTypes/PsoTypes.cs | 3 +- Rendering/Renderable.cs | 53 +++++++++---------- 5 files changed, 60 insertions(+), 43 deletions(-) diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index f740607..b0911e3 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -2637,12 +2637,21 @@ namespace CodeWalker.GameFiles diffpsos.Add(fentry.Path); } - if (entry.NameLower == "wantedtuning.ymt") - { } - if (entry.NameLower == "popgroups.ymt") - { } + if (entry.NameLower == "clip_sets.ymt") { } + //if (entry.NameLower == "vfxinteriorinfo.ymt") + //{ } + //if (entry.NameLower == "vfxvehicleinfo.ymt") + //{ } + //if (entry.NameLower == "vfxpedinfo.ymt") + //{ } + //if (entry.NameLower == "vfxregioninfo.ymt") + //{ } + //if (entry.NameLower == "vfxweaponinfo.ymt") + //{ } + if (entry.NameLower == "physicstasks.ymt") + { } } } diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs index efe3574..2fafc7c 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs @@ -3218,8 +3218,8 @@ namespace CodeWalker.GameFiles vecPlayerPos = 2050268192, vehglassCrackTextureParams = 3043112491, vehglassCrackTextureSampler = 3541769459, - Velocity1 = 1362920836, - Velocity2 = 1853341690, + velocity1 = 1362920836, + velocity2 = 1853341690, VelocityBufferSampler = 415075366, VelocityMapSampler = 3944176109, VelocityTexSampler = 2305380067, @@ -8629,6 +8629,18 @@ namespace CodeWalker.GameFiles yawKp = 922081581, + Velocity2 = 2944635386, + + + + + + + + + + + diff --git a/CodeWalker.Core/GameFiles/MetaTypes/PsoBuilder.cs b/CodeWalker.Core/GameFiles/MetaTypes/PsoBuilder.cs index 8f5c449..680debe 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/PsoBuilder.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/PsoBuilder.cs @@ -54,13 +54,13 @@ namespace CodeWalker.GameFiles { PsoBuilderBlock block = EnsureBlock(type); int brem = data.Length % 16; - if (brem > 0) - { - int newlen = data.Length - brem + 16; - byte[] newdata = new byte[newlen]; - Buffer.BlockCopy(data, 0, newdata, 0, data.Length); - data = newdata; //make sure item size is multiple of 16... so pointers don't need sub offsets! - } + //if (brem > 0) + //{ + // int newlen = data.Length - brem + 16; + // byte[] newdata = new byte[newlen]; + // Buffer.BlockCopy(data, 0, newdata, 0, data.Length); + // data = newdata; //make sure item size is multiple of 16... so pointers don't need sub offsets! + //} int idx = block.AddItem(data); PsoBuilderPointer r = new PsoBuilderPointer(); r.BlockID = block.Index + 1; diff --git a/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs b/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs index 1a0bbd9..60516be 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/PsoTypes.cs @@ -9942,7 +9942,8 @@ namespace CodeWalker.GameFiles new PsoStructureEntryInfo(MetaName.MpActivationModifiers, PsoDataType.Structure, 272, 0, (MetaName)2720813484), new PsoStructureEntryInfo(MetaName.PlayerBumpedByCloneCarActivationModifier, PsoDataType.Float, 352, 0, 0), new PsoStructureEntryInfo(MetaName.ClonePlayerBumpedByCarActivationModifier, PsoDataType.Float, 356, 0, 0), - new PsoStructureEntryInfo(MetaName.ClonePlayerBumpedByCloneCarActivationModifier, PsoDataType.Float, 360, 0, 0), + //new PsoStructureEntryInfo(MetaName.ClonePlayerBumpedByCloneCarActivationModifier, PsoDataType.Float, 360, 0, 0), + new PsoStructureEntryInfo((MetaName)2048881690, PsoDataType.Float, 360, 0, 0), //seems to be newer than above.. new PsoStructureEntryInfo(MetaName.MaxVehicleCapsulePushTimeForRagdollActivation, PsoDataType.Float, 364, 0, 0), new PsoStructureEntryInfo(MetaName.MaxVehicleCapsulePushTimeForPlayerRagdollActivation, PsoDataType.Float, 368, 0, 0), new PsoStructureEntryInfo(MetaName.VehicleMinSpeedForContinuousPushActivation, PsoDataType.Float, 372, 0, 0), diff --git a/Rendering/Renderable.cs b/Rendering/Renderable.cs index 978dc0f..0f155ca 100644 --- a/Rendering/Renderable.cs +++ b/Rendering/Renderable.cs @@ -185,38 +185,33 @@ namespace CodeWalker.Rendering fragoffset = phys.OwnerFragPhysLod.Unknown_30h; fragoffset.W = 0.0f; - if (fragtransformid < phys.OwnerFragPhysLod.Children?.data_items?.Length) + + switch (phys.BoneTag) //right hand side wheel flip! { - var pgrp = phys.OwnerFragPhysLod.Children.data_items[fragtransformid]; - - switch (pgrp.BoneTag) //right hand side wheel flip! - { - //case 27922: //wheel_lf - //case 29921: //wheel_lm1 - //case 29922: //wheel_lm2 - //case 29923: //wheel_lm3 - //case 27902: //wheel_lr - case 26418: //wheel_rf - case 5857: //wheel_rm1 - case 5858: //wheel_rm2 - case 5859: //wheel_rm3 - case 26398: //wheel_rr - fragtransforms[fragtransformid].M11 = -1; - fragtransforms[fragtransformid].M12 = 0; - fragtransforms[fragtransformid].M13 = 0; - fragtransforms[fragtransformid].M21 = 0; - fragtransforms[fragtransformid].M22 = 1; - fragtransforms[fragtransformid].M23 = 0; - fragtransforms[fragtransformid].M31 = 0; - fragtransforms[fragtransformid].M32 = 0; - fragtransforms[fragtransformid].M33 = -1; - break; - default: - break; - } + //case 27922: //wheel_lf + //case 29921: //wheel_lm1 + //case 29922: //wheel_lm2 + //case 29923: //wheel_lm3 + //case 27902: //wheel_lr + case 26418: //wheel_rf + case 5857: //wheel_rm1 + case 5858: //wheel_rm2 + case 5859: //wheel_rm3 + case 26398: //wheel_rr + fragtransforms[fragtransformid].M11 = -1; + fragtransforms[fragtransformid].M12 = 0; + fragtransforms[fragtransformid].M13 = 0; + fragtransforms[fragtransformid].M21 = 0; + fragtransforms[fragtransformid].M22 = 1; + fragtransforms[fragtransformid].M23 = 0; + fragtransforms[fragtransformid].M31 = 0; + fragtransforms[fragtransformid].M32 = 0; + fragtransforms[fragtransformid].M33 = -1; + break; + default: + break; } - } } else if (frag != null) From 863ab0eb58296e50548ec6aaee1114dda3c7fb38 Mon Sep 17 00:00:00 2001 From: dexy Date: Mon, 14 Jan 2019 12:52:37 +1100 Subject: [PATCH 096/158] Changed scenario type and model set dropdowns to text entry with autocomplete --- .../Panels/EditScenarioNodePanel.Designer.cs | 64 ++++++++++--------- 1 file changed, 34 insertions(+), 30 deletions(-) diff --git a/Project/Panels/EditScenarioNodePanel.Designer.cs b/Project/Panels/EditScenarioNodePanel.Designer.cs index ead9c5e..75a39f8 100644 --- a/Project/Panels/EditScenarioNodePanel.Designer.cs +++ b/Project/Panels/EditScenarioNodePanel.Designer.cs @@ -32,6 +32,8 @@ this.ScenarioTabControl = new System.Windows.Forms.TabControl(); this.ScenarioPointTabPage = new System.Windows.Forms.TabPage(); this.ScenarioPointOuterPanel = new System.Windows.Forms.Panel(); + this.ScenarioPointDeleteButton = new System.Windows.Forms.Button(); + this.ScenarioPointAddToProjectButton = new System.Windows.Forms.Button(); this.ScenarioPointPanel = new System.Windows.Forms.Panel(); this.ScenarioPointImapHashLabel = new System.Windows.Forms.Label(); this.ScenarioPointImapTextBox = new System.Windows.Forms.TextBox(); @@ -66,8 +68,6 @@ this.label99 = new System.Windows.Forms.Label(); this.ScenarioPointTypeComboBox = new System.Windows.Forms.ComboBox(); this.label98 = new System.Windows.Forms.Label(); - this.ScenarioPointDeleteButton = new System.Windows.Forms.Button(); - this.ScenarioPointAddToProjectButton = new System.Windows.Forms.Button(); this.ScenarioEntityTabPage = new System.Windows.Forms.TabPage(); this.ScenarioEntityDeleteButton = new System.Windows.Forms.Button(); this.ScenarioEntityPanel = new System.Windows.Forms.Panel(); @@ -310,6 +310,30 @@ this.ScenarioPointOuterPanel.Size = new System.Drawing.Size(551, 420); this.ScenarioPointOuterPanel.TabIndex = 1; // + // ScenarioPointDeleteButton + // + this.ScenarioPointDeleteButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioPointDeleteButton.Enabled = false; + this.ScenarioPointDeleteButton.Location = new System.Drawing.Point(458, 394); + this.ScenarioPointDeleteButton.Name = "ScenarioPointDeleteButton"; + this.ScenarioPointDeleteButton.Size = new System.Drawing.Size(90, 23); + this.ScenarioPointDeleteButton.TabIndex = 3; + this.ScenarioPointDeleteButton.Text = "Delete Point"; + this.ScenarioPointDeleteButton.UseVisualStyleBackColor = true; + this.ScenarioPointDeleteButton.Click += new System.EventHandler(this.ScenarioPointDeleteButton_Click); + // + // ScenarioPointAddToProjectButton + // + this.ScenarioPointAddToProjectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.ScenarioPointAddToProjectButton.Enabled = false; + this.ScenarioPointAddToProjectButton.Location = new System.Drawing.Point(362, 394); + this.ScenarioPointAddToProjectButton.Name = "ScenarioPointAddToProjectButton"; + this.ScenarioPointAddToProjectButton.Size = new System.Drawing.Size(90, 23); + this.ScenarioPointAddToProjectButton.TabIndex = 2; + this.ScenarioPointAddToProjectButton.Text = "Add to Project"; + this.ScenarioPointAddToProjectButton.UseVisualStyleBackColor = true; + this.ScenarioPointAddToProjectButton.Click += new System.EventHandler(this.ScenarioPointAddToProjectButton_Click); + // // ScenarioPointPanel // this.ScenarioPointPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) @@ -692,7 +716,8 @@ // this.ScenarioPointModelSetComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioPointModelSetComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ScenarioPointModelSetComboBox.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend; + this.ScenarioPointModelSetComboBox.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems; this.ScenarioPointModelSetComboBox.FormattingEnabled = true; this.ScenarioPointModelSetComboBox.Location = new System.Drawing.Point(73, 73); this.ScenarioPointModelSetComboBox.Name = "ScenarioPointModelSetComboBox"; @@ -713,7 +738,8 @@ // this.ScenarioPointTypeComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioPointTypeComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ScenarioPointTypeComboBox.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend; + this.ScenarioPointTypeComboBox.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems; this.ScenarioPointTypeComboBox.FormattingEnabled = true; this.ScenarioPointTypeComboBox.Location = new System.Drawing.Point(73, 49); this.ScenarioPointTypeComboBox.Name = "ScenarioPointTypeComboBox"; @@ -730,30 +756,6 @@ this.label98.TabIndex = 9; this.label98.Text = "Type:"; // - // ScenarioPointDeleteButton - // - this.ScenarioPointDeleteButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioPointDeleteButton.Enabled = false; - this.ScenarioPointDeleteButton.Location = new System.Drawing.Point(458, 394); - this.ScenarioPointDeleteButton.Name = "ScenarioPointDeleteButton"; - this.ScenarioPointDeleteButton.Size = new System.Drawing.Size(90, 23); - this.ScenarioPointDeleteButton.TabIndex = 3; - this.ScenarioPointDeleteButton.Text = "Delete Point"; - this.ScenarioPointDeleteButton.UseVisualStyleBackColor = true; - this.ScenarioPointDeleteButton.Click += new System.EventHandler(this.ScenarioPointDeleteButton_Click); - // - // ScenarioPointAddToProjectButton - // - this.ScenarioPointAddToProjectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioPointAddToProjectButton.Enabled = false; - this.ScenarioPointAddToProjectButton.Location = new System.Drawing.Point(362, 394); - this.ScenarioPointAddToProjectButton.Name = "ScenarioPointAddToProjectButton"; - this.ScenarioPointAddToProjectButton.Size = new System.Drawing.Size(90, 23); - this.ScenarioPointAddToProjectButton.TabIndex = 2; - this.ScenarioPointAddToProjectButton.Text = "Add to Project"; - this.ScenarioPointAddToProjectButton.UseVisualStyleBackColor = true; - this.ScenarioPointAddToProjectButton.Click += new System.EventHandler(this.ScenarioPointAddToProjectButton_Click); - // // ScenarioEntityTabPage // this.ScenarioEntityTabPage.Controls.Add(this.ScenarioEntityDeleteButton); @@ -2541,7 +2543,8 @@ // this.ScenarioClusterPointModelSetComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioClusterPointModelSetComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ScenarioClusterPointModelSetComboBox.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend; + this.ScenarioClusterPointModelSetComboBox.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems; this.ScenarioClusterPointModelSetComboBox.FormattingEnabled = true; this.ScenarioClusterPointModelSetComboBox.Location = new System.Drawing.Point(73, 73); this.ScenarioClusterPointModelSetComboBox.Name = "ScenarioClusterPointModelSetComboBox"; @@ -2562,7 +2565,8 @@ // this.ScenarioClusterPointTypeComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioClusterPointTypeComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ScenarioClusterPointTypeComboBox.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend; + this.ScenarioClusterPointTypeComboBox.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems; this.ScenarioClusterPointTypeComboBox.FormattingEnabled = true; this.ScenarioClusterPointTypeComboBox.Location = new System.Drawing.Point(73, 49); this.ScenarioClusterPointTypeComboBox.Name = "ScenarioClusterPointTypeComboBox"; From 2c5a907a8e0c468cf5a2764ad47867523dc829d4 Mon Sep 17 00:00:00 2001 From: dexy Date: Mon, 14 Jan 2019 12:55:10 +1100 Subject: [PATCH 097/158] Changed scenario chain node type dropdown to text entry with autocomplete --- Project/Panels/EditScenarioNodePanel.Designer.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Project/Panels/EditScenarioNodePanel.Designer.cs b/Project/Panels/EditScenarioNodePanel.Designer.cs index 75a39f8..f31f94d 100644 --- a/Project/Panels/EditScenarioNodePanel.Designer.cs +++ b/Project/Panels/EditScenarioNodePanel.Designer.cs @@ -1805,7 +1805,8 @@ // this.ScenarioChainNodeTypeComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.ScenarioChainNodeTypeComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.ScenarioChainNodeTypeComboBox.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend; + this.ScenarioChainNodeTypeComboBox.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems; this.ScenarioChainNodeTypeComboBox.FormattingEnabled = true; this.ScenarioChainNodeTypeComboBox.Location = new System.Drawing.Point(73, 55); this.ScenarioChainNodeTypeComboBox.Name = "ScenarioChainNodeTypeComboBox"; From 179afd57940a5d31b929e22c68aa5b9c8026a0ba Mon Sep 17 00:00:00 2001 From: dexy Date: Wed, 16 Jan 2019 00:51:53 +1100 Subject: [PATCH 098/158] Audio dat.rel to XML conversion --- .../GameFiles/FileTypes/RelFile.cs | 1982 +++++++++++++++-- CodeWalker.Core/GameFiles/GameFileCache.cs | 23 +- .../GameFiles/MetaTypes/MetaXml.cs | 4 + .../GameFiles/Resources/ResourceBaseTypes.cs | 14 + Forms/RelForm.Designer.cs | 148 +- Forms/RelForm.cs | 1 + Forms/RelForm.resx | 18 + Project/Panels/EditAudioEmitterPanel.cs | 14 +- Project/Panels/EditAudioInteriorPanel.cs | 6 +- Project/Panels/EditAudioInteriorRoomPanel.cs | 2 +- Project/Panels/EditAudioZonePanel.cs | 6 +- Project/Panels/ProjectExplorerPanel.cs | 2 + Project/ProjectForm.cs | 30 +- 13 files changed, 2008 insertions(+), 242 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index 8689020..641274e 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -379,7 +379,7 @@ namespace CodeWalker.GameFiles } private RelData ReadRelData(BinaryReader br, RelIndexString s) { - return ReadRelData(br, s.Name, 0, s.Offset, s.Length); + return ReadRelData(br, s.Name, JenkHash.GenHash(s.Name.ToLowerInvariant()), s.Offset, s.Length); } private RelData ReadRelData(BinaryReader br, string name, MetaHash hash, uint offset, uint length) { @@ -1228,6 +1228,15 @@ namespace CodeWalker.GameFiles } + public virtual void WriteXml(StringBuilder sb, int indent) + { + //default fallback to write raw data to XML... + + RelXml.WriteRawArray(sb, Data, indent, "RawData", "", RelXml.FormatHexByte, 16); + + } + + public string GetNameString() { return (string.IsNullOrEmpty(Name)) ? NameHash.ToString() : Name; @@ -1255,7 +1264,7 @@ namespace CodeWalker.GameFiles { public FlagsUint Flags { get; set; } - public FlagsUint UnkFlags { get; set; } + public FlagsUint Flags2 { get; set; } public ushort Unk01 { get; set; } public ushort Unk02 { get; set; } public ushort Unk03 { get; set; } //0xD-0xF @@ -1298,9 +1307,9 @@ namespace CodeWalker.GameFiles Flags = br.ReadUInt32(); //if (Flags.Value != 0xAAAAAAAA) - if ((Flags.Value & 0xFF) != 0xAA) + if ((Flags & 0xFF) != 0xAA) { - if (Bit(0)) UnkFlags = br.ReadUInt32(); + if (Bit(0)) Flags2 = br.ReadUInt32(); if (Bit(1)) Unk01 = br.ReadUInt16(); if (Bit(2)) Unk02 = br.ReadUInt16(); if (Bit(3)) Unk03 = br.ReadUInt16(); @@ -1309,7 +1318,7 @@ namespace CodeWalker.GameFiles if (Bit(6)) Unk06 = br.ReadUInt16(); if (Bit(7)) Unk07 = br.ReadUInt16(); } - if ((Flags.Value & 0xFF00) != 0xAA00) + if ((Flags & 0xFF00) != 0xAA00) { if (Bit(8)) Unk08 = br.ReadUInt16(); if (Bit(9)) Unk09 = br.ReadUInt16(); @@ -1320,7 +1329,7 @@ namespace CodeWalker.GameFiles if (Bit(14)) Unk12 = br.ReadUInt16(); if (Bit(15)) CategoryHash = br.ReadUInt32(); } - if ((Flags.Value & 0xFF0000) != 0xAA0000) + if ((Flags & 0xFF0000) != 0xAA0000) { if (Bit(16)) Unk14 = br.ReadUInt16(); if (Bit(17)) Unk15 = br.ReadUInt16(); @@ -1331,7 +1340,7 @@ namespace CodeWalker.GameFiles if (Bit(22)) Unk19 = br.ReadByte(); if (Bit(23)) Unk20 = br.ReadByte(); } - if ((Flags.Value & 0xFF000000) != 0xAA000000) + if ((Flags & 0xFF000000) != 0xAA000000) { if (Bit(24)) Unk21 = br.ReadByte(); if (Bit(25)) UnkHash4 = br.ReadUInt32(); @@ -1347,14 +1356,65 @@ namespace CodeWalker.GameFiles } + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + + if ((Flags & 0xFF) != 0xAA) + { + if (Bit(0)) RelXml.ValueTag(sb, indent, "Flags2", "0x" + Flags2.Hex); + if (Bit(1)) RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); + if (Bit(2)) RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); + if (Bit(3)) RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); + if (Bit(4)) RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); + if (Bit(5)) RelXml.ValueTag(sb, indent, "Unk05", Unk05.ToString()); + if (Bit(6)) RelXml.ValueTag(sb, indent, "Unk06", Unk06.ToString()); + if (Bit(7)) RelXml.ValueTag(sb, indent, "Unk07", Unk07.ToString()); + } + if ((Flags & 0xFF00) != 0xAA00) + { + if (Bit(8)) RelXml.ValueTag(sb, indent, "Unk08", Unk08.ToString()); + if (Bit(9)) RelXml.ValueTag(sb, indent, "Unk09", Unk09.ToString()); + if (Bit(10)) RelXml.StringTag(sb, indent, "UnkHash1", RelXml.HashString(UnkHash1)); + if (Bit(11)) RelXml.StringTag(sb, indent, "UnkHash2", RelXml.HashString(UnkHash2)); + if (Bit(12)) RelXml.ValueTag(sb, indent, "Unk10", Unk10.ToString()); + if (Bit(13)) RelXml.ValueTag(sb, indent, "Unk11", Unk11.ToString()); + if (Bit(14)) RelXml.ValueTag(sb, indent, "Unk12", Unk12.ToString()); + if (Bit(15)) RelXml.StringTag(sb, indent, "Category", RelXml.HashString(CategoryHash)); + } + if ((Flags & 0xFF0000) != 0xAA0000) + { + if (Bit(16)) RelXml.ValueTag(sb, indent, "Unk14", Unk14.ToString()); + if (Bit(17)) RelXml.ValueTag(sb, indent, "Unk15", Unk15.ToString()); + if (Bit(18)) RelXml.ValueTag(sb, indent, "Unk16", Unk16.ToString()); + if (Bit(19)) RelXml.ValueTag(sb, indent, "Unk17", Unk17.ToString()); + if (Bit(20)) RelXml.StringTag(sb, indent, "UnkHash3", RelXml.HashString(UnkHash3)); + if (Bit(21)) RelXml.ValueTag(sb, indent, "Unk18", Unk18.ToString()); + if (Bit(22)) RelXml.ValueTag(sb, indent, "Unk19", Unk19.ToString()); + if (Bit(23)) RelXml.ValueTag(sb, indent, "Unk20", Unk20.ToString()); + } + if ((Flags & 0xFF000000) != 0xAA000000) + { + if (Bit(24)) RelXml.ValueTag(sb, indent, "Unk21", Unk21.ToString()); + if (Bit(25)) RelXml.StringTag(sb, indent, "UnkHash4", RelXml.HashString(UnkHash4)); + if (Bit(26)) RelXml.StringTag(sb, indent, "UnkHash5", RelXml.HashString(UnkHash5)); + if (Bit(27)) RelXml.ValueTag(sb, indent, "Unk22", Unk22.ToString()); + if (Bit(28)) RelXml.ValueTag(sb, indent, "Unk23", Unk23.ToString()); + if (Bit(29)) RelXml.ValueTag(sb, indent, "Unk24", Unk24.ToString()); + if (Bit(30)) RelXml.ValueTag(sb, indent, "Unk25", Unk25.ToString()); //maybe not + if (Bit(31)) RelXml.ValueTag(sb, indent, "Unk26", Unk26.ToString()); //maybe not + } + + } + private bool Bit(int b) { - return ((Flags.Value & (1u << b)) != 0); + return ((Flags & (1u << b)) != 0); } public override string ToString() { - return string.Format("{0}: {1}, {2}, {3}, {4}, {5}, {6}, {7}", Flags.Hex, UnkFlags.Hex, CategoryHash, UnkHash1, UnkHash2, UnkHash3, UnkHash4, UnkHash5); + return string.Format("{0}: {1}, {2}, {3}, {4}, {5}, {6}, {7}", Flags.Hex, Flags2.Hex, CategoryHash, UnkHash1, UnkHash2, UnkHash3, UnkHash4, UnkHash5); } } @@ -1380,6 +1440,32 @@ namespace CodeWalker.GameFiles AudioTrackHashes[i] = br.ReadUInt32(); } } + + public override void WriteXml(StringBuilder sb, int indent) + { + WriteHeaderXml(sb, indent); + base.WriteXml(sb, indent);//fallback case + } + + public void WriteHeaderXml(StringBuilder sb, int indent) + { + if (Header == null) return; + RelXml.OpenTag(sb, indent, "Header");// flags=\"0x" + Header.Flags.Hex + "\""); + Header.WriteXml(sb, indent + 1); + RelXml.CloseTag(sb, indent, "Header"); + } + + public void WriteAudioTracksXml(StringBuilder sb, int indent) + { + if (AudioTrackHashes == null) return; + RelXml.OpenTag(sb, indent, "AudioTracks"); + var cind = indent + 1; + foreach (var hash in AudioTrackHashes) + { + RelXml.StringTag(sb, cind, "Item", RelXml.HashString(hash)); + } + RelXml.CloseTag(sb, indent, "AudioTracks"); + } } @@ -1437,6 +1523,12 @@ namespace CodeWalker.GameFiles Type = (Dat54SoundType)TypeID; } + public override void WriteXml(StringBuilder sb, int indent) + { + WriteHeaderXml(sb, indent); //don't use this as a fallback case! only for writing the header, for use with all defined Dat54Sounds! + //base.WriteXml(sb, indent); + } + public override string ToString() { return GetBaseString() + ": " + Type.ToString(); @@ -1460,19 +1552,29 @@ namespace CodeWalker.GameFiles AudioTrackHashes = new[] { AudioHash }; ParameterHash = br.ReadUInt32(); } + + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "UnkShort0", UnkShort0.ToString()); + RelXml.ValueTag(sb, indent, "UnkShort1", UnkShort1.ToString()); + RelXml.ValueTag(sb, indent, "UnkShort2", UnkShort2.ToString()); + RelXml.StringTag(sb, indent, "AudioHash", RelXml.HashString(AudioHash)); + RelXml.StringTag(sb, indent, "ParameterHash", RelXml.HashString(ParameterHash)); + } } [TC(typeof(EXP))] public class Dat54EnvelopeSound : Dat54Sound { - public ushort UnkShortA { get; set; } //0x0-0x2 - public ushort UnkShortA1 { get; set; } //0x2-0x4 - public ushort UnkShortB { get; set; } //0x4-0x6 - public ushort UnkShortB1 { get; set; } //0x6-0x8 - public byte UnkByteA { get; set; } //0x8-0x9 - public byte UnkByteA1 { get; set; } //0x9-0xA - public int UnkInt { get; set; } //0xA-0xE - public ushort UnkShortC { get; set; } //0xE-0x10 - public int UnkIntA { get; set; } //0x10-0x14 - public int UnkIntA1 { get; set; } //0x14-0x18 + public ushort UnkShort0 { get; set; } //0x0-0x2 + public ushort UnkShort1 { get; set; } //0x2-0x4 + public ushort UnkShort2 { get; set; } //0x4-0x6 + public ushort UnkShort3 { get; set; } //0x6-0x8 + public byte UnkByte0 { get; set; } //0x8-0x9 + public byte UnkByte1 { get; set; } //0x9-0xA + public int UnkInt0 { get; set; } //0xA-0xE + public ushort UnkShort4 { get; set; } //0xE-0x10 + public int UnkInt1 { get; set; } //0x10-0x14 + public int UnkInt2 { get; set; } //0x14-0x18 public MetaHash CurvesUnkHash0 { get; set; } //0x18-0x1C public MetaHash CurvesUnkHash1 { get; set; } //0x1C-0x20 public MetaHash CurvesUnkHash2 { get; set; } //0x20-0x24 @@ -1482,23 +1584,23 @@ namespace CodeWalker.GameFiles public MetaHash ParameterHash3 { get; set; } //0x30-0x34 public MetaHash ParameterHash4 { get; set; } //0x34-0x38 public MetaHash AudioHash { get; set; }// audio track 0x38-0x3C - public int UnkIntC { get; set; } //0x3C-0x40 + public int UnkInt3 { get; set; } //0x3C-0x40 public MetaHash ParameterHash5 { get; set; } //0x40-0x44 public float UnkFloat0 { get; set; } //0x44-0x48 public float UnkFloat1 { get; set; } //0x48-0x4C public Dat54EnvelopeSound(RelData d, BinaryReader br) : base(d, br) { - UnkShortA = br.ReadUInt16(); //0x0-0x2 - UnkShortA1 = br.ReadUInt16(); //0x2-0x4 - UnkShortB = br.ReadUInt16(); //0x4-0x6 - UnkShortB1 = br.ReadUInt16(); //0x6-0x8 - UnkByteA = br.ReadByte(); //0x8-0x9 - UnkByteA1 = br.ReadByte(); //0x9-0xA - UnkInt = br.ReadInt32(); //0xA-0xE - UnkShortC = br.ReadUInt16(); //0xE-0x10 - UnkIntA = br.ReadInt32(); //0x10-0x14 - UnkIntA1 = br.ReadInt32(); //0x14-0x18 + UnkShort0 = br.ReadUInt16(); //0x0-0x2 + UnkShort1 = br.ReadUInt16(); //0x2-0x4 + UnkShort2 = br.ReadUInt16(); //0x4-0x6 + UnkShort3 = br.ReadUInt16(); //0x6-0x8 + UnkByte0 = br.ReadByte(); //0x8-0x9 + UnkByte1 = br.ReadByte(); //0x9-0xA + UnkInt0 = br.ReadInt32(); //0xA-0xE + UnkShort4 = br.ReadUInt16(); //0xE-0x10 + UnkInt1 = br.ReadInt32(); //0x10-0x14 + UnkInt2 = br.ReadInt32(); //0x14-0x18 CurvesUnkHash0 = br.ReadUInt32(); //0x18-0x1C CurvesUnkHash1 = br.ReadUInt32(); //0x1C-0x20 CurvesUnkHash2 = br.ReadUInt32(); //0x20-0x24 @@ -1508,12 +1610,40 @@ namespace CodeWalker.GameFiles ParameterHash3 = br.ReadUInt32(); //0x30-0x34 ParameterHash4 = br.ReadUInt32(); //0x34-0x38 AudioHash = br.ReadUInt32(); //0x38-0x3C - UnkIntC = br.ReadInt32(); //0x3C-0x40 + UnkInt3 = br.ReadInt32(); //0x3C-0x40 ParameterHash5 = br.ReadUInt32(); //0x40-0x44 UnkFloat0 = br.ReadSingle(); //0x44-0x48 UnkFloat1 = br.ReadSingle(); //0x48-0x4C AudioTrackHashes = new[] { AudioHash }; } + + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "UnkShort0", UnkShort0.ToString()); + RelXml.ValueTag(sb, indent, "UnkShort1", UnkShort1.ToString()); + RelXml.ValueTag(sb, indent, "UnkShort2", UnkShort2.ToString()); + RelXml.ValueTag(sb, indent, "UnkShort3", UnkShort3.ToString()); + RelXml.ValueTag(sb, indent, "UnkByte0", UnkByte0.ToString()); + RelXml.ValueTag(sb, indent, "UnkByte1", UnkByte1.ToString()); + RelXml.ValueTag(sb, indent, "UnkInt0", UnkInt0.ToString()); + RelXml.ValueTag(sb, indent, "UnkShort4", UnkShort3.ToString()); + RelXml.ValueTag(sb, indent, "UnkInt1", UnkInt0.ToString()); + RelXml.ValueTag(sb, indent, "UnkInt2", UnkInt0.ToString()); + RelXml.StringTag(sb, indent, "CurvesUnkHash0", RelXml.HashString(CurvesUnkHash0)); + RelXml.StringTag(sb, indent, "CurvesUnkHash1", RelXml.HashString(CurvesUnkHash1)); + RelXml.StringTag(sb, indent, "CurvesUnkHash2", RelXml.HashString(CurvesUnkHash2)); + RelXml.StringTag(sb, indent, "ParameterHash0", RelXml.HashString(ParameterHash0)); + RelXml.StringTag(sb, indent, "ParameterHash1", RelXml.HashString(ParameterHash1)); + RelXml.StringTag(sb, indent, "ParameterHash2", RelXml.HashString(ParameterHash2)); + RelXml.StringTag(sb, indent, "ParameterHash3", RelXml.HashString(ParameterHash3)); + RelXml.StringTag(sb, indent, "ParameterHash4", RelXml.HashString(ParameterHash4)); + RelXml.StringTag(sb, indent, "AudioHash", RelXml.HashString(AudioHash)); + RelXml.ValueTag(sb, indent, "UnkInt3", UnkInt3.ToString()); + RelXml.StringTag(sb, indent, "ParameterHash5", RelXml.HashString(ParameterHash5)); + RelXml.ValueTag(sb, indent, "UnkFloat0", FloatUtil.ToString(UnkFloat0)); + RelXml.ValueTag(sb, indent, "UnkFloat1", FloatUtil.ToString(UnkFloat1)); + } } [TC(typeof(EXP))] public class Dat54TwinLoopSound : Dat54Sound { @@ -1541,6 +1671,20 @@ namespace CodeWalker.GameFiles ReadAudioTrackHashes(br); } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "UnkShort0", UnkShort0.ToString()); + RelXml.ValueTag(sb, indent, "UnkShort1", UnkShort1.ToString()); + RelXml.ValueTag(sb, indent, "UnkShort2", UnkShort2.ToString()); + RelXml.ValueTag(sb, indent, "UnkShort3", UnkShort3.ToString()); + RelXml.StringTag(sb, indent, "UnkHash", RelXml.HashString(UnkHash)); + RelXml.StringTag(sb, indent, "ParameterHash0", RelXml.HashString(ParameterHash0)); + RelXml.StringTag(sb, indent, "ParameterHash1", RelXml.HashString(ParameterHash1)); + RelXml.StringTag(sb, indent, "ParameterHash2", RelXml.HashString(ParameterHash2)); + RelXml.StringTag(sb, indent, "ParameterHash3", RelXml.HashString(ParameterHash3)); + WriteAudioTracksXml(sb, indent); + } } [TC(typeof(EXP))] public class Dat54SpeechSound : Dat54Sound { @@ -1556,6 +1700,14 @@ namespace CodeWalker.GameFiles VoiceDataHash = br.ReadUInt32(); SpeechName = br.ReadString(); } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "UnkInt0", UnkInt0.ToString()); + RelXml.ValueTag(sb, indent, "UnkInt1", UnkInt0.ToString()); + RelXml.StringTag(sb, indent, "VoiceDataHash", RelXml.HashString(VoiceDataHash)); + RelXml.StringTag(sb, indent, "SpeechName", SpeechName); + } } [TC(typeof(EXP))] public class Dat54OnStopSound : Dat54Sound { @@ -1570,6 +1722,13 @@ namespace CodeWalker.GameFiles AudioHash2 = br.ReadUInt32(); AudioTrackHashes = new[] { AudioHash0, AudioHash1, AudioHash2 }; } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.StringTag(sb, indent, "AudioHash0", RelXml.HashString(AudioHash0)); + RelXml.StringTag(sb, indent, "AudioHash1", RelXml.HashString(AudioHash1)); + RelXml.StringTag(sb, indent, "AudioHash2", RelXml.HashString(AudioHash2)); + } } [TC(typeof(EXP))] public class Dat54WrapperSound : Dat54Sound { @@ -1597,6 +1756,31 @@ namespace CodeWalker.GameFiles AudioTrackHashes = new[] { AudioHash0, AudioHash1 }; } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.StringTag(sb, indent, "AudioHash0", RelXml.HashString(AudioHash0)); + RelXml.ValueTag(sb, indent, "FrameStartTime", FrameStartTime.ToString()); + RelXml.StringTag(sb, indent, "AudioHash1", RelXml.HashString(AudioHash1)); + RelXml.ValueTag(sb, indent, "FrameTimeInterval", FrameTimeInterval.ToString()); + if (Variables?.Length > 0) + { + RelXml.OpenTag(sb, indent, "Variables"); + var cind = indent + 1; + for (int i = 0; i < ItemCount; i++) + { + var iname = RelXml.HashString(Variables[i]); + var ival = UnkByteData[i].ToString(); + RelXml.SelfClosingTag(sb, cind, "Item key=\"" + iname + "\" value=\"" + ival + "\""); + } + RelXml.CloseTag(sb, indent, "Variables"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "Variables"); + } + WriteAudioTracksXml(sb, indent); + } } [TC(typeof(EXP))] public class Dat54SequentialSound : Dat54Sound { @@ -1604,6 +1788,11 @@ namespace CodeWalker.GameFiles { ReadAudioTrackHashes(br); } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + WriteAudioTracksXml(sb, indent); + } } [TC(typeof(EXP))] public class Dat54StreamingSound : Dat54Sound { @@ -1615,6 +1804,12 @@ namespace CodeWalker.GameFiles ReadAudioTrackHashes(br); } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "UnkInt", UnkInt.ToString()); + WriteAudioTracksXml(sb, indent); + } } [TC(typeof(EXP))] public class Dat54RetriggeredOverlappedSound : Dat54Sound { @@ -1641,6 +1836,19 @@ namespace CodeWalker.GameFiles AudioHash2 = br.ReadUInt32(); AudioTrackHashes = new[] { AudioHash0, AudioHash1, AudioHash2 }; } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "UnkShort0", UnkShort0.ToString()); + RelXml.ValueTag(sb, indent, "UnkShort1", UnkShort1.ToString()); + RelXml.ValueTag(sb, indent, "UnkShort2", UnkShort2.ToString()); + RelXml.ValueTag(sb, indent, "UnkShort3", UnkShort3.ToString()); + RelXml.StringTag(sb, indent, "ParameterHash0", RelXml.HashString(ParameterHash0)); + RelXml.StringTag(sb, indent, "ParameterHash1", RelXml.HashString(ParameterHash1)); + RelXml.StringTag(sb, indent, "AudioHash0", RelXml.HashString(AudioHash0)); + RelXml.StringTag(sb, indent, "AudioHash1", RelXml.HashString(AudioHash1)); + RelXml.StringTag(sb, indent, "AudioHash2", RelXml.HashString(AudioHash2)); + } } [TC(typeof(EXP))] public class Dat54CrossfadeSound : Dat54Sound { @@ -1649,7 +1857,7 @@ namespace CodeWalker.GameFiles public byte UnkByte { get; set; } //0x8-0x9 public float UnkFloat0 { get; set; } //0x9-0xD public float UnkFloat1 { get; set; } //0xD-0x11 - public int UnkInt2 { get; set; } //0xD-0x15 + public int UnkInt { get; set; } //0xD-0x15 public MetaHash UnkCurvesHash { get; set; } //0x15-0x19 public MetaHash ParameterHash0 { get; set; } //0x19-0x1D public MetaHash ParameterHash1 { get; set; } //0x1D-0x21 @@ -1665,7 +1873,7 @@ namespace CodeWalker.GameFiles UnkByte = br.ReadByte(); UnkFloat0 = br.ReadSingle(); UnkFloat1 = br.ReadSingle(); - UnkInt2 = br.ReadInt32(); + UnkInt = br.ReadInt32(); UnkCurvesHash = br.ReadUInt32(); ParameterHash0 = br.ReadUInt32(); ParameterHash1 = br.ReadUInt32(); @@ -1673,6 +1881,22 @@ namespace CodeWalker.GameFiles ParameterHash3 = br.ReadUInt32(); ParameterHash4 = br.ReadUInt32(); } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.StringTag(sb, indent, "AudioHash0", RelXml.HashString(AudioHash0)); + RelXml.StringTag(sb, indent, "AudioHash1", RelXml.HashString(AudioHash1)); + RelXml.ValueTag(sb, indent, "UnkByte", UnkByte.ToString()); + RelXml.ValueTag(sb, indent, "UnkFloat0", FloatUtil.ToString(UnkFloat0)); + RelXml.ValueTag(sb, indent, "UnkFloat1", FloatUtil.ToString(UnkFloat1)); + RelXml.ValueTag(sb, indent, "UnkInt", UnkInt.ToString()); + RelXml.StringTag(sb, indent, "UnkCurvesHash", RelXml.HashString(UnkCurvesHash)); + RelXml.StringTag(sb, indent, "ParameterHash0", RelXml.HashString(ParameterHash0)); + RelXml.StringTag(sb, indent, "ParameterHash1", RelXml.HashString(ParameterHash1)); + RelXml.StringTag(sb, indent, "ParameterHash2", RelXml.HashString(ParameterHash2)); + RelXml.StringTag(sb, indent, "ParameterHash3", RelXml.HashString(ParameterHash3)); + RelXml.StringTag(sb, indent, "ParameterHash4", RelXml.HashString(ParameterHash4)); + } } [TC(typeof(EXP))] public class Dat54CollapsingStereoSound : Dat54Sound { @@ -1705,6 +1929,22 @@ namespace CodeWalker.GameFiles ParameterHash5 = br.ReadUInt32(); //0x28-0x2C UnkByte = br.ReadByte(); //0x2C-0x2D } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.StringTag(sb, indent, "AudioHash0", RelXml.HashString(AudioHash0)); + RelXml.StringTag(sb, indent, "AudioHash1", RelXml.HashString(AudioHash1)); + RelXml.ValueTag(sb, indent, "UnkFloat0", FloatUtil.ToString(UnkFloat0)); + RelXml.ValueTag(sb, indent, "UnkFloat1", FloatUtil.ToString(UnkFloat1)); + RelXml.StringTag(sb, indent, "ParameterHash0", RelXml.HashString(ParameterHash0)); + RelXml.StringTag(sb, indent, "ParameterHash1", RelXml.HashString(ParameterHash1)); + RelXml.StringTag(sb, indent, "ParameterHash2", RelXml.HashString(ParameterHash2)); + RelXml.StringTag(sb, indent, "ParameterHash3", RelXml.HashString(ParameterHash3)); + RelXml.StringTag(sb, indent, "ParameterHash4", RelXml.HashString(ParameterHash4)); + RelXml.ValueTag(sb, indent, "UnkInt", UnkInt.ToString()); + RelXml.StringTag(sb, indent, "ParameterHash5", RelXml.HashString(ParameterHash5)); + RelXml.ValueTag(sb, indent, "UnkByte", UnkByte.ToString()); + } } [TC(typeof(EXP))] public class Dat54SimpleSound : Dat54Sound { @@ -1719,6 +1959,13 @@ namespace CodeWalker.GameFiles FileName = br.ReadUInt32(); WaveSlotNum = br.ReadByte(); } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.StringTag(sb, indent, "ContainerName", RelXml.HashString(ContainerName)); + RelXml.StringTag(sb, indent, "FileName", RelXml.HashString(FileName)); + RelXml.ValueTag(sb, indent, "WaveSlotNum", WaveSlotNum.ToString()); + } } [TC(typeof(EXP))] public class Dat54MultitrackSound : Dat54Sound { @@ -1726,6 +1973,11 @@ namespace CodeWalker.GameFiles { ReadAudioTrackHashes(br); } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + WriteAudioTracksXml(sb, indent); + } } [TC(typeof(EXP))] public class Dat54RandomizedSound : Dat54Sound { @@ -1749,6 +2001,28 @@ namespace CodeWalker.GameFiles AudioTrackUnkFloats[i] = br.ReadSingle(); } } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "UnkByte", UnkByte.ToString()); + RelXml.WriteRawArray(sb, UnkBytes, indent, "UnkBytes", "", RelXml.FormatHexByte, 16); + if (ItemCount > 0) + { + RelXml.OpenTag(sb, indent, "Items"); + var cind = indent + 1; + for (int i = 0; i < ItemCount; i++) + { + var iname = RelXml.HashString(AudioTrackHashes[i]); + var ival = FloatUtil.ToString(AudioTrackUnkFloats[i]); + RelXml.SelfClosingTag(sb, cind, "Item key=\"" + iname + "\" value=\"" + ival + "\""); + } + RelXml.CloseTag(sb, indent, "Items"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "Items"); + } + } } [TC(typeof(EXP))] public class Dat54EnvironmentSound : Dat54Sound { @@ -1758,6 +2032,11 @@ namespace CodeWalker.GameFiles { UnkByte = br.ReadByte(); } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "UnkByte", UnkByte.ToString()); + } } [TC(typeof(EXP))] public class Dat54DynamicEntitySound : Dat54Sound { @@ -1773,6 +2052,25 @@ namespace CodeWalker.GameFiles UnkHashes[i] = br.ReadUInt32(); } } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + if (ItemCount > 0) + { + RelXml.OpenTag(sb, indent, "Items"); + var cind = indent + 1; + for (int i = 0; i < ItemCount; i++) + { + var iname = RelXml.HashString(UnkHashes[i]); + RelXml.StringTag(sb, cind, "Item", iname); + } + RelXml.CloseTag(sb, indent, "Items"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "Items"); + } + } } [TC(typeof(EXP))] public class Dat54SequentialOverlapSound : Dat54Sound { @@ -1788,6 +2086,13 @@ namespace CodeWalker.GameFiles ReadAudioTrackHashes(br); } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "UnkShort", UnkShort.ToString()); + RelXml.StringTag(sb, indent, "ParameterHash0", RelXml.HashString(ParameterHash0)); + RelXml.StringTag(sb, indent, "ParameterHash1", RelXml.HashString(ParameterHash1)); + } } [TC(typeof(EXP))] public class Dat54ModularSynthSound : Dat54Sound { @@ -1818,6 +2123,33 @@ namespace CodeWalker.GameFiles UnkItems[i] = new Dat54ModularSynthSoundData(br); } } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.StringTag(sb, indent, "OptAmpUnkHash", RelXml.HashString(OptAmpUnkHash)); + RelXml.StringTag(sb, indent, "UnkHash", RelXml.HashString(UnkHash)); + RelXml.ValueTag(sb, indent, "UnkFloat", FloatUtil.ToString(UnkFloat)); + RelXml.ValueTag(sb, indent, "UnkInt", UnkInt.ToString()); + RelXml.ValueTag(sb, indent, "TrackCount", TrackCount.ToString()); + WriteAudioTracksXml(sb, indent); + if (UnkItemCount > 0) + { + RelXml.OpenTag(sb, indent, "UnkItems"); + var cind = indent + 1; + var cind2 = indent + 2; + for (int i = 0; i < UnkItemCount; i++) + { + RelXml.OpenTag(sb, cind, "Item"); + UnkItems[i].WriteXml(sb, cind2); + RelXml.CloseTag(sb, cind, "Item"); + } + RelXml.CloseTag(sb, indent, "UnkItems"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "UnkItems"); + } + } } [TC(typeof(EXP))] public class Dat54ModularSynthSoundData { @@ -1831,7 +2163,12 @@ namespace CodeWalker.GameFiles ParameterHash = br.ReadUInt32(); Value = br.ReadSingle(); } - + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "UnkHash", RelXml.HashString(UnkHash)); + RelXml.StringTag(sb, indent, "ParameterHash", RelXml.HashString(ParameterHash)); + RelXml.ValueTag(sb, indent, "Value", FloatUtil.ToString(Value)); + } public override string ToString() { return UnkHash.ToString() + ": " + ParameterHash.ToString() + ": " + FloatUtil.ToString(Value); @@ -1911,6 +2248,33 @@ namespace CodeWalker.GameFiles UnkVecData[i] = new Vector2(br.ReadSingle(), br.ReadSingle()); } } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "WaveSlotIndex", WaveSlotIndex.ToString()); + Wave1.WriteXml(sb, indent, "Wave1"); + Wave2.WriteXml(sb, indent, "Wave2"); + Wave3.WriteXml(sb, indent, "Wave3"); + Wave4.WriteXml(sb, indent, "Wave4"); + Wave5.WriteXml(sb, indent, "Wave5"); + Wave6.WriteXml(sb, indent, "Wave6"); + DataItem1.WriteXml(sb, indent, "DataItem1"); + DataItem2.WriteXml(sb, indent, "DataItem2"); + DataItem3.WriteXml(sb, indent, "DataItem3"); + DataItem4.WriteXml(sb, indent, "DataItem4"); + DataItem5.WriteXml(sb, indent, "DataItem5"); + DataItem6.WriteXml(sb, indent, "DataItem6"); + RelXml.ValueTag(sb, indent, "UnkInt0", UnkInt0.ToString()); + RelXml.ValueTag(sb, indent, "UnkInt1", UnkInt1.ToString()); + RelXml.ValueTag(sb, indent, "UnkShort0", UnkShort0.ToString()); + RelXml.ValueTag(sb, indent, "UnkShort1", UnkShort1.ToString()); + RelXml.ValueTag(sb, indent, "UnkShort2", UnkShort2.ToString()); + RelXml.ValueTag(sb, indent, "UnkShort3", UnkShort3.ToString()); + RelXml.ValueTag(sb, indent, "UnkShort4", UnkShort4.ToString()); + RelXml.ValueTag(sb, indent, "UnkShort5", UnkShort5.ToString()); + RelXml.StringTag(sb, indent, "TrackName", RelXml.HashString(TrackName)); + RelXml.WriteRawArray(sb, UnkVecData, indent, "UnkVecData", "", RelXml.FormatVector2, 1); + } } [TC(typeof(EXP))] public class Dat54GranularSoundFile { @@ -1922,7 +2286,14 @@ namespace CodeWalker.GameFiles ContainerName = br.ReadUInt32(); FileName = br.ReadUInt32(); } - + public void WriteXml(StringBuilder sb, int indent, string varName) + { + var cind = indent + 1; + RelXml.OpenTag(sb, indent, varName); + RelXml.StringTag(sb, cind, "ContainerName", RelXml.HashString(ContainerName)); + RelXml.StringTag(sb, cind, "FileName", RelXml.HashString(FileName)); + RelXml.CloseTag(sb, indent, varName); + } public override string ToString() { return ContainerName.ToString() + ": " + FileName.ToString(); @@ -1944,7 +2315,17 @@ namespace CodeWalker.GameFiles UnkByte1 = br.ReadByte(); UnkFloat = br.ReadSingle(); } - + public void WriteXml(StringBuilder sb, int indent, string varName) + { + var cind = indent + 1; + RelXml.OpenTag(sb, indent, varName); + RelXml.ValueTag(sb, cind, "UnkFlags0", UnkFlags0.ToString()); + RelXml.ValueTag(sb, cind, "UnkFlags1", UnkFlags1.ToString()); + RelXml.ValueTag(sb, cind, "UnkByte0", UnkByte0.ToString()); + RelXml.ValueTag(sb, cind, "UnkByte1", UnkByte1.ToString()); + RelXml.ValueTag(sb, cind, "UnkFloat", FloatUtil.ToString(UnkFloat)); + RelXml.CloseTag(sb, indent, varName); + } public override string ToString() { return UnkFlags0.ToString() + ": " + UnkFlags1.ToString() + ": " + UnkByte0.ToString() + ": " + UnkByte1.ToString() + ": " + FloatUtil.ToString(UnkFloat); @@ -1969,6 +2350,16 @@ namespace CodeWalker.GameFiles UnkFloat3 = br.ReadSingle(); UnkFloat4 = br.ReadSingle(); } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.StringTag(sb, indent, "AudioHash", RelXml.HashString(AudioHash)); + RelXml.ValueTag(sb, indent, "UnkFloat0", FloatUtil.ToString(UnkFloat0)); + RelXml.ValueTag(sb, indent, "UnkFloat1", FloatUtil.ToString(UnkFloat1)); + RelXml.ValueTag(sb, indent, "UnkFloat2", FloatUtil.ToString(UnkFloat2)); + RelXml.ValueTag(sb, indent, "UnkFloat3", FloatUtil.ToString(UnkFloat3)); + RelXml.ValueTag(sb, indent, "UnkFloat4", FloatUtil.ToString(UnkFloat4)); + } } [TC(typeof(EXP))] public class Dat54KineticSound : Dat54Sound { @@ -1985,6 +2376,14 @@ namespace CodeWalker.GameFiles UnkFloat1 = br.ReadSingle(); UnkFloat2 = br.ReadSingle(); } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.StringTag(sb, indent, "AudioHash", RelXml.HashString(AudioHash)); + RelXml.ValueTag(sb, indent, "UnkFloat0", FloatUtil.ToString(UnkFloat0)); + RelXml.ValueTag(sb, indent, "UnkFloat1", FloatUtil.ToString(UnkFloat1)); + RelXml.ValueTag(sb, indent, "UnkFloat2", FloatUtil.ToString(UnkFloat2)); + } } [TC(typeof(EXP))] public class Dat54SwitchSound : Dat54Sound { @@ -1996,6 +2395,12 @@ namespace CodeWalker.GameFiles ReadAudioTrackHashes(br); } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.StringTag(sb, indent, "ParameterHash", RelXml.HashString(ParameterHash)); + WriteAudioTracksXml(sb, indent); + } } [TC(typeof(EXP))] public class Dat54VariableCurveSound : Dat54Sound { @@ -2012,6 +2417,14 @@ namespace CodeWalker.GameFiles ParameterHash1 = br.ReadUInt32(); UnkCurvesHash = br.ReadUInt32(); } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.StringTag(sb, indent, "AudioHash", RelXml.HashString(AudioHash)); + RelXml.StringTag(sb, indent, "ParameterHash0", RelXml.HashString(ParameterHash0)); + RelXml.StringTag(sb, indent, "ParameterHash1", RelXml.HashString(ParameterHash1)); + RelXml.StringTag(sb, indent, "UnkCurvesHash", RelXml.HashString(UnkCurvesHash)); + } } [TC(typeof(EXP))] public class Dat54VariablePrintValueSound : Dat54Sound { @@ -2023,6 +2436,12 @@ namespace CodeWalker.GameFiles ParameterHash = br.ReadUInt32(); VariableString = br.ReadString(); } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.StringTag(sb, indent, "ParameterHash", RelXml.HashString(ParameterHash)); + RelXml.StringTag(sb, indent, "VariableString", VariableString); + } } [TC(typeof(EXP))] public class Dat54VariableBlockSound : Dat54Sound { @@ -2041,6 +2460,29 @@ namespace CodeWalker.GameFiles Variables[i] = new Dat54VariableData(br); } } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.StringTag(sb, indent, "AudioHash", RelXml.HashString(AudioHash)); + if (VariableCount > 0) + { + RelXml.OpenTag(sb, indent, "Variables"); + var cind = indent + 1; + var cind2 = indent + 2; + for (int i = 0; i < VariableCount; i++) + { + RelXml.OpenTag(sb, cind, "Item"); + Variables[i].WriteXml(sb, cind2); + RelXml.CloseTag(sb, cind, "Item"); + } + RelXml.CloseTag(sb, indent, "Variables"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "Variables"); + } + + } } [TC(typeof(EXP))] public class Dat54VariableData { @@ -2056,7 +2498,13 @@ namespace CodeWalker.GameFiles UnkFloat = br.ReadSingle(); Flags = br.ReadByte(); } - + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Name", RelXml.HashString(Name)); + RelXml.ValueTag(sb, indent, "Value", FloatUtil.ToString(Value)); + RelXml.ValueTag(sb, indent, "UnkFloat", FloatUtil.ToString(UnkFloat)); + RelXml.ValueTag(sb, indent, "Flags", Flags.ToString()); + } public override string ToString() { return Name + ": " + FloatUtil.ToString(Value) + ": " + FloatUtil.ToString(UnkFloat) + ": " + Flags.ToString(); @@ -2081,6 +2529,16 @@ namespace CodeWalker.GameFiles UnkFloat = br.ReadSingle(); ParameterHash2 = br.ReadUInt32(); } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.StringTag(sb, indent, "AudioHash1", RelXml.HashString(AudioHash1)); + RelXml.StringTag(sb, indent, "AudioHash2", RelXml.HashString(AudioHash2)); + RelXml.StringTag(sb, indent, "ParameterHash1", RelXml.HashString(ParameterHash1)); + RelXml.ValueTag(sb, indent, "UnkByte", UnkByte.ToString()); + RelXml.ValueTag(sb, indent, "UnkFloat", FloatUtil.ToString(UnkFloat)); + RelXml.StringTag(sb, indent, "ParameterHash2", RelXml.HashString(ParameterHash2)); + } } [TC(typeof(EXP))] public class Dat54MathOperationSound : Dat54Sound { @@ -2099,6 +2557,28 @@ namespace CodeWalker.GameFiles UnkData[i] = new Dat54MathOperationSoundData(br); } } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.StringTag(sb, indent, "AudioHash", RelXml.HashString(AudioHash)); + if (UnkDataCount > 0) + { + RelXml.OpenTag(sb, indent, "UnkData"); + var cind = indent + 1; + var cind2 = indent + 2; + for (int i = 0; i < UnkDataCount; i++) + { + RelXml.OpenTag(sb, cind, "Item"); + UnkData[i].WriteXml(sb, cind2); + RelXml.CloseTag(sb, cind, "Item"); + } + RelXml.CloseTag(sb, indent, "UnkData"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "UnkData"); + } + } } [TC(typeof(EXP))] public class Dat54MathOperationSoundData { @@ -2122,7 +2602,17 @@ namespace CodeWalker.GameFiles ParameterHash0 = br.ReadUInt32(); ParameterHash1 = br.ReadUInt32(); } - + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "UnkByte", UnkByte.ToString()); + RelXml.ValueTag(sb, indent, "UnkInt0", UnkInt0.ToString()); + RelXml.ValueTag(sb, indent, "UnkInt1", UnkInt1.ToString()); + RelXml.ValueTag(sb, indent, "UnkInt2", UnkInt2.ToString()); + RelXml.ValueTag(sb, indent, "UnkInt3", UnkInt3.ToString()); + RelXml.ValueTag(sb, indent, "UnkInt4", UnkInt4.ToString()); + RelXml.StringTag(sb, indent, "ParameterHash0", RelXml.HashString(ParameterHash0)); + RelXml.StringTag(sb, indent, "ParameterHash1", RelXml.HashString(ParameterHash1)); + } public override string ToString() { return ParameterHash0.ToString() + ", " + ParameterHash1.ToString(); @@ -2145,6 +2635,28 @@ namespace CodeWalker.GameFiles Items[i] = new Dat54ParameterTransformSoundData(br); } } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.StringTag(sb, indent, "AudioHash", RelXml.HashString(AudioHash)); + if (ItemCount > 0) + { + RelXml.OpenTag(sb, indent, "Items"); + var cind = indent + 1; + var cind2 = indent + 2; + for (int i = 0; i < ItemCount; i++) + { + RelXml.OpenTag(sb, cind, "Item"); + Items[i].WriteXml(sb, cind2); + RelXml.CloseTag(sb, cind, "Item"); + } + RelXml.CloseTag(sb, indent, "Items"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "Items"); + } + } } [TC(typeof(EXP))] public class Dat54ParameterTransformSoundData { @@ -2166,7 +2678,29 @@ namespace CodeWalker.GameFiles NestedData[i] = new Dat54ParameterTransformSoundData2(br); } } - + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "ParameterHash", RelXml.HashString(ParameterHash)); + RelXml.ValueTag(sb, indent, "UnkFloat0", FloatUtil.ToString(UnkFloat0)); + RelXml.ValueTag(sb, indent, "UnkFloat1", FloatUtil.ToString(UnkFloat1)); + if (NestedDataCount > 0) + { + RelXml.OpenTag(sb, indent, "NestedData"); + var cind = indent + 1; + var cind2 = indent + 2; + for (int i = 0; i < NestedDataCount; i++) + { + RelXml.OpenTag(sb, cind, "Item"); + NestedData[i].WriteXml(sb, cind2); + RelXml.CloseTag(sb, cind, "Item"); + } + RelXml.CloseTag(sb, indent, "NestedData"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "NestedData"); + } + } public override string ToString() { return ParameterHash.ToString() + ", " + NestedDataCount.ToString(); @@ -2196,7 +2730,15 @@ namespace CodeWalker.GameFiles NestedItems[i] = new Vector2(br.ReadSingle(), br.ReadSingle()); } } - + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "UnkFloat0", FloatUtil.ToString(UnkFloat0)); + RelXml.ValueTag(sb, indent, "UnkInt", UnkInt.ToString()); + RelXml.StringTag(sb, indent, "ParameterHash", RelXml.HashString(ParameterHash)); + RelXml.ValueTag(sb, indent, "UnkFloat1", FloatUtil.ToString(UnkFloat1)); + RelXml.ValueTag(sb, indent, "UnkFloat2", FloatUtil.ToString(UnkFloat2)); + RelXml.WriteRawArray(sb, NestedItems, indent, "Vectors", "", RelXml.FormatVector2, 1); + } public override string ToString() { return ParameterHash.ToString() + ", " + NestedItemCount.ToString(); @@ -2219,6 +2761,28 @@ namespace CodeWalker.GameFiles Items[i] = new Dat54FluctuatorSoundData(br); } } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.StringTag(sb, indent, "AudioHash", RelXml.HashString(AudioHash)); + if (ItemCount > 0) + { + RelXml.OpenTag(sb, indent, "Items"); + var cind = indent + 1; + var cind2 = indent + 2; + for (int i = 0; i < ItemCount; i++) + { + RelXml.OpenTag(sb, cind, "Item"); + Items[i].WriteXml(sb, cind2); + RelXml.CloseTag(sb, cind, "Item"); + } + RelXml.CloseTag(sb, indent, "Items"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "Items"); + } + } } [TC(typeof(EXP))] public class Dat54FluctuatorSoundData { @@ -2254,7 +2818,23 @@ namespace CodeWalker.GameFiles UnkFloat09 = br.ReadSingle(); UnkFloat10 = br.ReadSingle(); } - + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "UnkByte0", UnkByte0.ToString()); + RelXml.ValueTag(sb, indent, "UnkByte1", UnkByte1.ToString()); + RelXml.StringTag(sb, indent, "ParameterHash", RelXml.HashString(ParameterHash)); + RelXml.ValueTag(sb, indent, "UnkFloat00", FloatUtil.ToString(UnkFloat00)); + RelXml.ValueTag(sb, indent, "UnkFloat01", FloatUtil.ToString(UnkFloat01)); + RelXml.ValueTag(sb, indent, "UnkFloat02", FloatUtil.ToString(UnkFloat02)); + RelXml.ValueTag(sb, indent, "UnkFloat03", FloatUtil.ToString(UnkFloat03)); + RelXml.ValueTag(sb, indent, "UnkFloat04", FloatUtil.ToString(UnkFloat04)); + RelXml.ValueTag(sb, indent, "UnkFloat05", FloatUtil.ToString(UnkFloat05)); + RelXml.ValueTag(sb, indent, "UnkFloat06", FloatUtil.ToString(UnkFloat06)); + RelXml.ValueTag(sb, indent, "UnkFloat07", FloatUtil.ToString(UnkFloat07)); + RelXml.ValueTag(sb, indent, "UnkFloat08", FloatUtil.ToString(UnkFloat08)); + RelXml.ValueTag(sb, indent, "UnkFloat09", FloatUtil.ToString(UnkFloat09)); + RelXml.ValueTag(sb, indent, "UnkFloat10", FloatUtil.ToString(UnkFloat10)); + } public override string ToString() { return ParameterHash.ToString(); @@ -2289,6 +2869,34 @@ namespace CodeWalker.GameFiles UnkData[i] = new Dat54AutomationSoundData(br); } } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.StringTag(sb, indent, "AudioHash0", RelXml.HashString(AudioHash0)); + RelXml.ValueTag(sb, indent, "UnkFloat0", FloatUtil.ToString(UnkFloat0)); + RelXml.ValueTag(sb, indent, "UnkFloat1", FloatUtil.ToString(UnkFloat1)); + RelXml.StringTag(sb, indent, "ParameterHash", RelXml.HashString(ParameterHash)); + RelXml.StringTag(sb, indent, "AudioHash1", RelXml.HashString(AudioHash1)); + RelXml.ValueTag(sb, indent, "WaveSlotId", WaveSlotId.ToString()); + RelXml.StringTag(sb, indent, "UnkHash1", RelXml.HashString(UnkHash1)); + if (UnkDataCount > 0) + { + RelXml.OpenTag(sb, indent, "UnkData"); + var cind = indent + 1; + var cind2 = indent + 2; + for (int i = 0; i < UnkDataCount; i++) + { + RelXml.OpenTag(sb, cind, "Item"); + UnkData[i].WriteXml(sb, cind2); + RelXml.CloseTag(sb, cind, "Item"); + } + RelXml.CloseTag(sb, indent, "UnkData"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "UnkData"); + } + } } [TC(typeof(EXP))] public class Dat54AutomationSoundData { @@ -2300,7 +2908,11 @@ namespace CodeWalker.GameFiles UnkInt = br.ReadInt32(); UnkHash = br.ReadUInt32(); } - + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "UnkInt", UnkInt.ToString()); + RelXml.StringTag(sb, indent, "UnkHash", RelXml.HashString(UnkHash)); + } public override string ToString() { return UnkInt.ToString() + ", " + UnkHash.ToString(); @@ -2319,7 +2931,22 @@ namespace CodeWalker.GameFiles //TODO: could be more to read! if (br.BaseStream.Position != br.BaseStream.Length) - { } //hits here! + { + var bytes = new List(); + while (br.BaseStream.Position < br.BaseStream.Length) + { + byte b = br.ReadByte(); + bytes.Add(b); + if (b != 0) + { }//no hits here + } + //var bytearr = bytes.ToArray(); + } //hits here! + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + WriteAudioTracksXml(sb, indent); } } [TC(typeof(EXP))] public class Dat54SoundSet : Dat54Sound @@ -2338,6 +2965,27 @@ namespace CodeWalker.GameFiles AudioTrackHashes[i] = Items[i].SoundName; } } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + if (ItemCount > 0) + { + RelXml.OpenTag(sb, indent, "Items"); + var cind = indent + 1; + var cind2 = indent + 2; + for (int i = 0; i < ItemCount; i++) + { + RelXml.OpenTag(sb, cind, "Item"); + Items[i].WriteXml(sb, cind2); + RelXml.CloseTag(sb, cind, "Item"); + } + RelXml.CloseTag(sb, indent, "Items"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "Items"); + } + } } [TC(typeof(EXP))] public class Dat54SoundSetItem { @@ -2349,7 +2997,11 @@ namespace CodeWalker.GameFiles ScriptName = br.ReadUInt32(); SoundName = br.ReadUInt32(); } - + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "ScriptName", RelXml.HashString(ScriptName)); + RelXml.StringTag(sb, indent, "SoundName", RelXml.HashString(SoundName)); + } public override string ToString() { return ScriptName.ToString() + ": " + SoundName.ToString(); @@ -2368,7 +3020,28 @@ namespace CodeWalker.GameFiles for (int i = 0; i < UnkDataCount; i++) { UnkData[i] = new Dat54UnknownSoundData(br); - AudioTrackHashes[i] = br.ReadUInt32(); + AudioTrackHashes[i] = UnkData[i].AudioTrack;// br.ReadUInt32(); + } + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + if (UnkDataCount > 0) + { + RelXml.OpenTag(sb, indent, "UnkData"); + var cind = indent + 1; + var cind2 = indent + 2; + for (int i = 0; i < UnkDataCount; i++) + { + RelXml.OpenTag(sb, cind, "Item"); + UnkData[i].WriteXml(sb, cind2); + RelXml.CloseTag(sb, cind, "Item"); + } + RelXml.CloseTag(sb, indent, "UnkData"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "UnkData"); } } } @@ -2377,14 +3050,22 @@ namespace CodeWalker.GameFiles public byte UnkByte0 { get; set; } public byte UnkByte1 { get; set; } public byte UnkByte2 { get; set; } + public MetaHash AudioTrack { get; set; } public Dat54UnknownSoundData(BinaryReader br) { UnkByte0 = br.ReadByte(); UnkByte1 = br.ReadByte(); UnkByte2 = br.ReadByte(); + AudioTrack = br.ReadUInt32(); + } + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "UnkByte0", UnkByte0.ToString()); + RelXml.ValueTag(sb, indent, "UnkByte1", UnkByte1.ToString()); + RelXml.ValueTag(sb, indent, "UnkByte2", UnkByte2.ToString()); + RelXml.StringTag(sb, indent, "AudioTrack", RelXml.HashString(AudioTrack)); } - public override string ToString() { return UnkByte0.ToString() + ": " + UnkByte1.ToString() + ": " + UnkByte2.ToString(); @@ -2404,6 +3085,25 @@ namespace CodeWalker.GameFiles UnkItems[i] = br.ReadUInt32(); } } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + if (UnkCount > 0) + { + RelXml.OpenTag(sb, indent, "Items"); + var cind = indent + 1; + for (int i = 0; i < UnkCount; i++) + { + var iname = RelXml.HashString(UnkItems[i]); + RelXml.StringTag(sb, cind, "Item", iname); + } + RelXml.CloseTag(sb, indent, "Items"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "Items"); + } + } } [TC(typeof(EXP))] public class Dat54SoundList : Dat54Sound { @@ -2423,6 +3123,26 @@ namespace CodeWalker.GameFiles if (br.BaseStream.Position != br.BaseStream.Length) { } } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "UnkShort", UnkShort.ToString()); + if (Count > 0) + { + RelXml.OpenTag(sb, indent, "Items"); + var cind = indent + 1; + for (int i = 0; i < Count; i++) + { + var iname = RelXml.HashString(Items[i]); + RelXml.StringTag(sb, cind, "Item", iname); + } + RelXml.CloseTag(sb, indent, "Items"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "Items"); + } + } } @@ -2544,7 +3264,7 @@ namespace CodeWalker.GameFiles Unk117 = 117, Unk118 = 118, Unk119 = 119, - Unk120 = 120, + Unk120 = 120, //radio track list? Unk121 = 121, } @@ -2553,20 +3273,6 @@ namespace CodeWalker.GameFiles public Dat151RelType Type { get; set; } public uint NameTableOffset { get; set; } - - public static int TotCount = 0; //###############DEBUGG - public static List FoundCoords = new List(); //###############DEBUGG - public void RecVec(Vector3 v) - { - float tol = 20.0f; - if ((Math.Abs(v.X)>tol) || (Math.Abs(v.Y)>tol) || (Math.Abs(v.Z)>tol)) - { - FoundCoords.Add(FloatUtil.GetVector3String(v) + ", " + GetNameString()); - } - } - - - public Dat151RelData(RelFile rel) : base(rel) { } public Dat151RelData(RelData d, BinaryReader br) : base(d) { @@ -2601,7 +3307,11 @@ namespace CodeWalker.GameFiles Hash0 = hash0; Hash1 = hash1; } - + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Hash0", RelXml.HashString(Hash0)); + RelXml.StringTag(sb, indent, "Hash1", RelXml.HashString(Hash1)); + } public override string ToString() { return Hash0.ToString() + ": " + Hash1.ToString(); @@ -2653,6 +3363,24 @@ namespace CodeWalker.GameFiles } } + public override void WriteXml(StringBuilder sb, int indent) + { + if (EmitterCount > 0) + { + RelXml.OpenTag(sb, indent, "Emitters"); + var cind = indent + 1; + for (int i = 0; i < EmitterCount; i++) + { + var iname = RelXml.HashString(EmitterHashes[i]); + RelXml.StringTag(sb, cind, "Item", iname); + } + RelXml.CloseTag(sb, indent, "Emitters"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "Emitters"); + } + } } [TC(typeof(EXP))] public class Dat151AmbientZone : Dat151RelData { @@ -2701,6 +3429,11 @@ namespace CodeWalker.GameFiles bw.Write(Hash); bw.Write(Value); } + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Hash", RelXml.HashString(Hash)); + RelXml.ValueTag(sb, indent, "Value", FloatUtil.ToString(Value)); + } public override string ToString() { return Hash.ToString() + ": " + FloatUtil.ToString(Value); @@ -2791,13 +3524,13 @@ namespace CodeWalker.GameFiles { }//no hit if (Shape != 0) { }//eg 1, 2 - if (Flags1.Value != 0) + if (Flags1 != 0) { }//no hit if (OuterAngle > 360) { }//no hit if (InnerAngle > 360) { }//no hit - if (Flags2.Value != 0) + if (Flags2 != 0) { }//eg 0xAE64583B, 0x61083310, 0xCAE96294, 0x1C376176 #endregion @@ -2808,9 +3541,9 @@ namespace CodeWalker.GameFiles //base.Write(bw); WriteTypeAndOffset(bw); - bw.Write(Flags0.Value); + bw.Write(Flags0); bw.Write((uint)Shape); - bw.Write(Flags1.Value); + bw.Write(Flags1); bw.Write(OuterPos.X); bw.Write(OuterPos.Y); bw.Write(OuterPos.Z); @@ -2864,7 +3597,7 @@ namespace CodeWalker.GameFiles bw.Write(UnkVec3.Z); bw.Write(UnkVec3.W); - bw.Write(Flags2.Value); + bw.Write(Flags2); bw.Write(Unk14); bw.Write(Unk15); bw.Write(HashesCount); @@ -2885,7 +3618,63 @@ namespace CodeWalker.GameFiles while ((bw.BaseStream.Position & 0xF) != 0) bw.Write((byte)0); //pad out to next 16 bytes } - + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Flags0", "0x" + Flags0.Hex); + RelXml.StringTag(sb, indent, "Shape", Shape.ToString()); + RelXml.ValueTag(sb, indent, "Flags1", "0x" + Flags1.Hex); + RelXml.SelfClosingTag(sb, indent, "OuterPos " + FloatUtil.GetVector3XmlString(OuterPos)); + RelXml.SelfClosingTag(sb, indent, "OuterSize " + FloatUtil.GetVector3XmlString(OuterSize)); + RelXml.SelfClosingTag(sb, indent, "OuterVec1 " + FloatUtil.GetVector4XmlString(OuterVec1)); + RelXml.SelfClosingTag(sb, indent, "OuterVec2 " + FloatUtil.GetVector4XmlString(OuterVec2)); + RelXml.ValueTag(sb, indent, "OuterAngle", OuterAngle.ToString()); + RelXml.SelfClosingTag(sb, indent, "OuterVec3 " + FloatUtil.GetVector3XmlString(OuterVec3)); + RelXml.SelfClosingTag(sb, indent, "InnerPos " + FloatUtil.GetVector3XmlString(InnerPos)); + RelXml.SelfClosingTag(sb, indent, "InnerSize " + FloatUtil.GetVector3XmlString(InnerSize)); + RelXml.SelfClosingTag(sb, indent, "InnerVec1 " + FloatUtil.GetVector4XmlString(InnerVec1)); + RelXml.SelfClosingTag(sb, indent, "InnerVec2 " + FloatUtil.GetVector4XmlString(InnerVec2)); + RelXml.ValueTag(sb, indent, "InnerAngle", InnerAngle.ToString()); + RelXml.SelfClosingTag(sb, indent, "InnerVec3 " + FloatUtil.GetVector3XmlString(InnerVec3)); + RelXml.SelfClosingTag(sb, indent, "UnkVec1 " + FloatUtil.GetVector4XmlString(UnkVec1)); + RelXml.SelfClosingTag(sb, indent, "UnkVec2 " + FloatUtil.GetVector4XmlString(UnkVec2)); + RelXml.SelfClosingTag(sb, indent, "UnkVec3 " + FloatUtil.GetVector4XmlString(UnkVec3)); + RelXml.ValueTag(sb, indent, "Flags2", "0x" + Flags2.Hex); + RelXml.ValueTag(sb, indent, "Unk14", Unk14.ToString()); + RelXml.ValueTag(sb, indent, "Unk15", Unk15.ToString()); + RelXml.ValueTag(sb, indent, "Unk16", Unk16.ToString()); + if (HashesCount > 0) + { + RelXml.OpenTag(sb, indent, "Hashes"); + var cind = indent + 1; + for (int i = 0; i < HashesCount; i++) + { + var iname = RelXml.HashString(Hashes[i]); + RelXml.StringTag(sb, cind, "Item", iname); + } + RelXml.CloseTag(sb, indent, "Hashes"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "Hashes"); + } + if (ExtParamsCount > 0) + { + RelXml.OpenTag(sb, indent, "ExtParams"); + var cind = indent + 1; + var cind2 = indent + 2; + for (int i = 0; i < ExtParamsCount; i++) + { + RelXml.OpenTag(sb, cind, "Item"); + ExtParams[i].WriteXml(sb, cind2); + RelXml.CloseTag(sb, cind, "Item"); + } + RelXml.CloseTag(sb, indent, "ExtParams"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "ExtParams"); + } + } } [TC(typeof(EXP))] public class Dat151AmbientEmitter : Dat151RelData { @@ -2914,14 +3703,14 @@ namespace CodeWalker.GameFiles public FlagsByte Unk11 { get; set; } //1,2,3,4,5,6,8,10,255 public FlagsByte Unk12 { get; set; } //0, 50, 80, 100 public FlagsByte Unk13 { get; set; } //1,2,3,5 - public ushort ExtParamCount { get; set; } //0,1,2,4 + public ushort ExtParamsCount { get; set; } //0,1,2,4 public ExtParam[] ExtParams { get; set; } public struct ExtParam { public MetaHash Hash; public float Value; - public uint Flags; + public FlagsUint Flags; public ExtParam(BinaryReader br) { Hash = br.ReadUInt32(); @@ -2934,6 +3723,12 @@ namespace CodeWalker.GameFiles bw.Write(Value); bw.Write(Flags); } + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Hash", RelXml.HashString(Hash)); + RelXml.ValueTag(sb, indent, "Value", FloatUtil.ToString(Value)); + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + } public override string ToString() { return Hash.ToString() + ": " + FloatUtil.ToString(Value) + ": " + Flags.ToString(); @@ -2973,17 +3768,17 @@ namespace CodeWalker.GameFiles Unk11 = br.ReadByte(); //1,2,3,4,5,6,8,10,255 Unk12 = br.ReadByte(); //0, 50, 80, 100 Unk13 = br.ReadByte(); //1,2,3,5 - ExtParamCount = br.ReadUInt16(); //0,1,2,4 + ExtParamsCount = br.ReadUInt16(); //0,1,2,4 - if (ExtParamCount > 0) + if (ExtParamsCount > 0) { - ExtParams = new ExtParam[ExtParamCount]; - for (int i = 0; i < ExtParamCount; i++) + ExtParams = new ExtParam[ExtParamsCount]; + for (int i = 0; i < ExtParamsCount; i++) { ExtParams[i] = new ExtParam(br); } //array seems to be padded to multiples of 16 bytes. (read the rest here) - int brem = (16 - ((ExtParamCount * 12) % 16)) % 16; + int brem = (16 - ((ExtParamsCount * 12) % 16)) % 16; if (brem > 0) { byte[] brema = br.ReadBytes(brem); @@ -3202,7 +3997,7 @@ namespace CodeWalker.GameFiles default: break; } - switch (ExtParamCount) + switch (ExtParamsCount) { case 0: case 1: @@ -3228,44 +4023,43 @@ namespace CodeWalker.GameFiles #endregion } - public override void Write(BinaryWriter bw) { //base.Write(bw); WriteTypeAndOffset(bw); - bw.Write(Flags0.Value); - bw.Write(Flags1.Value); - bw.Write(Flags2.Value); + bw.Write(Flags0); + bw.Write(Flags1); + bw.Write(Flags2); bw.Write(Position.X); bw.Write(Position.Y); bw.Write(Position.Z); - bw.Write(Flags3.Value); + bw.Write(Flags3); bw.Write(Hash1); bw.Write(Hash2); - bw.Write(Flags4.Value); - bw.Write(Flags5.Value); - bw.Write(Flags6.Value); + bw.Write(Flags4); + bw.Write(Flags5); + bw.Write(Flags6); bw.Write(Unk01); bw.Write(InnerRad); bw.Write(OuterRad); - bw.Write(Unk02.Value); - bw.Write(Unk03.Value); - bw.Write(Unk04.Value); - bw.Write(Unk05.Value); - bw.Write(Unk06.Value); - bw.Write(Unk07.Value); - bw.Write(Unk08.Value); - bw.Write(Unk09.Value); - bw.Write(Unk10.Value); - bw.Write(Unk11.Value); - bw.Write(Unk12.Value); - bw.Write(Unk13.Value); - bw.Write(ExtParamCount); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); + bw.Write(ExtParamsCount); - if (ExtParamCount > 0) + if (ExtParamsCount > 0) { - for (int i = 0; i < ExtParamCount; i++) + for (int i = 0; i < ExtParamsCount; i++) { ExtParams[i].Write(bw); } @@ -3274,8 +4068,51 @@ namespace CodeWalker.GameFiles } } - - + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Flags0", "0x" + Flags0.Hex); + RelXml.ValueTag(sb, indent, "Flags1", "0x" + Flags1.Hex); + RelXml.ValueTag(sb, indent, "Flags2", "0x" + Flags2.Hex); + RelXml.SelfClosingTag(sb, indent, "Position " + FloatUtil.GetVector3XmlString(Position)); + RelXml.ValueTag(sb, indent, "Flags3", "0x" + Flags3.Hex); + RelXml.StringTag(sb, indent, "Hash1", RelXml.HashString(Hash1)); + RelXml.StringTag(sb, indent, "Hash2", RelXml.HashString(Hash2)); + RelXml.ValueTag(sb, indent, "Flags4", "0x" + Flags4.Hex); + RelXml.ValueTag(sb, indent, "Flags5", "0x" + Flags5.Hex); + RelXml.ValueTag(sb, indent, "Flags6", "0x" + Flags6.Hex); + RelXml.ValueTag(sb, indent, "Unk01", FloatUtil.ToString(Unk01)); + RelXml.ValueTag(sb, indent, "InnerRad", FloatUtil.ToString(InnerRad)); + RelXml.ValueTag(sb, indent, "OuterRad", FloatUtil.ToString(OuterRad)); + RelXml.ValueTag(sb, indent, "Unk02", Unk02.Value.ToString()); + RelXml.ValueTag(sb, indent, "Unk03", Unk03.Value.ToString()); + RelXml.ValueTag(sb, indent, "Unk04", Unk04.Value.ToString()); + RelXml.ValueTag(sb, indent, "Unk05", Unk05.Value.ToString()); + RelXml.ValueTag(sb, indent, "Unk06", Unk06.Value.ToString()); + RelXml.ValueTag(sb, indent, "Unk07", Unk07.Value.ToString()); + RelXml.ValueTag(sb, indent, "Unk08", Unk08.Value.ToString()); + RelXml.ValueTag(sb, indent, "Unk09", Unk09.Value.ToString()); + RelXml.ValueTag(sb, indent, "Unk10", Unk10.Value.ToString()); + RelXml.ValueTag(sb, indent, "Unk11", Unk11.Value.ToString()); + RelXml.ValueTag(sb, indent, "Unk12", Unk12.Value.ToString()); + RelXml.ValueTag(sb, indent, "Unk13", Unk13.Value.ToString()); + if (ExtParamsCount > 0) + { + RelXml.OpenTag(sb, indent, "ExtParams"); + var cind = indent + 1; + var cind2 = indent + 2; + for (int i = 0; i < ExtParamsCount; i++) + { + RelXml.OpenTag(sb, cind, "Item"); + ExtParams[i].WriteXml(sb, cind2); + RelXml.CloseTag(sb, cind, "Item"); + } + RelXml.CloseTag(sb, indent, "ExtParams"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "ExtParams"); + } + } } [TC(typeof(EXP))] public class Dat151AmbientZoneList : Dat151RelData { @@ -3313,7 +4150,24 @@ namespace CodeWalker.GameFiles } } - + public override void WriteXml(StringBuilder sb, int indent) + { + if (ZoneCount > 0) + { + RelXml.OpenTag(sb, indent, "Zones"); + var cind = indent + 1; + for (int i = 0; i < ZoneCount; i++) + { + var iname = RelXml.HashString(ZoneHashes[i]); + RelXml.StringTag(sb, cind, "Item", iname); + } + RelXml.CloseTag(sb, indent, "Zones"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "Zones"); + } + } } [TC(typeof(EXP))] public class Dat151Interior : Dat151RelData { @@ -3349,15 +4203,36 @@ namespace CodeWalker.GameFiles { WriteTypeAndOffset(bw); - bw.Write(Unk0.Value); - bw.Write(Unk1.Value); - bw.Write(Unk2.Value); + bw.Write(Unk0); + bw.Write(Unk1); + bw.Write(Unk2); bw.Write(RoomsCount); for (int i = 0; i < RoomsCount; i++) { bw.Write(Rooms[i]); } } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk0", "0x" + Unk0.Hex); + RelXml.ValueTag(sb, indent, "Unk1", "0x" + Unk1.Hex); + RelXml.ValueTag(sb, indent, "Unk2", "0x" + Unk2.Hex); + if (RoomsCount > 0) + { + RelXml.OpenTag(sb, indent, "Rooms"); + var cind = indent + 1; + for (int i = 0; i < RoomsCount; i++) + { + var iname = RelXml.HashString(Rooms[i]); + RelXml.StringTag(sb, cind, "Item", iname); + } + RelXml.CloseTag(sb, indent, "Rooms"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "Rooms"); + } + } public override uint[] GetHashTableOffsets() { var offsets = new List(); @@ -3419,7 +4294,7 @@ namespace CodeWalker.GameFiles { WriteTypeAndOffset(bw); - bw.Write(Flags0.Value); + bw.Write(Flags0); bw.Write(MloRoom); bw.Write(Hash1); bw.Write(Unk02); @@ -3436,6 +4311,25 @@ namespace CodeWalker.GameFiles bw.Write(Unk13); bw.Write(Unk14); } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Flags0", "0x" + Flags0.Hex); + RelXml.StringTag(sb, indent, "MloRoom", RelXml.HashString(MloRoom)); + RelXml.StringTag(sb, indent, "Hash1", RelXml.HashString(Hash1)); + RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); + RelXml.ValueTag(sb, indent, "Unk03", FloatUtil.ToString(Unk03)); + RelXml.ValueTag(sb, indent, "Unk04", FloatUtil.ToString(Unk04)); + RelXml.ValueTag(sb, indent, "Unk05", FloatUtil.ToString(Unk05)); + RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); + RelXml.ValueTag(sb, indent, "Unk07", FloatUtil.ToString(Unk07)); + RelXml.ValueTag(sb, indent, "Unk08", FloatUtil.ToString(Unk08)); + RelXml.ValueTag(sb, indent, "Unk09", FloatUtil.ToString(Unk09)); + RelXml.ValueTag(sb, indent, "Unk10", FloatUtil.ToString(Unk10)); + RelXml.ValueTag(sb, indent, "Unk11", FloatUtil.ToString(Unk11)); + RelXml.ValueTag(sb, indent, "Unk12", FloatUtil.ToString(Unk12)); + RelXml.StringTag(sb, indent, "Unk13", RelXml.HashString(Unk13)); + RelXml.StringTag(sb, indent, "Unk14", RelXml.HashString(Unk14)); + } public override uint[] GetHashTableOffsets() { return new uint[] { 8 }; @@ -3443,8 +4337,8 @@ namespace CodeWalker.GameFiles } [TC(typeof(EXP))] public class Dat151RadioStationsDLC : Dat151RelData { - public uint AudioTracksCount { get; set; } - public MetaHash[] AudioTracks { get; set; } + public uint StationsCount { get; set; } + public MetaHash[] Stations { get; set; } public Dat151RadioStationsDLC(RelFile rel) : base(rel) { @@ -3453,13 +4347,13 @@ namespace CodeWalker.GameFiles } public Dat151RadioStationsDLC(RelData d, BinaryReader br) : base(d, br) { - AudioTracksCount = br.ReadUInt32(); - var tracks = new MetaHash[AudioTracksCount]; - for (int i = 0; i < AudioTracksCount; i++) + StationsCount = br.ReadUInt32(); + var tracks = new MetaHash[StationsCount]; + for (int i = 0; i < StationsCount; i++) { tracks[i] = br.ReadUInt32(); } - AudioTracks = tracks; + Stations = tracks; var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) @@ -3469,16 +4363,34 @@ namespace CodeWalker.GameFiles { WriteTypeAndOffset(bw); - bw.Write(AudioTracksCount); - for (int i = 0; i < AudioTracksCount; i++) + bw.Write(StationsCount); + for (int i = 0; i < StationsCount; i++) { - bw.Write(AudioTracks[i]); + bw.Write(Stations[i]); + } + } + public override void WriteXml(StringBuilder sb, int indent) + { + if (StationsCount > 0) + { + RelXml.OpenTag(sb, indent, "Stations"); + var cind = indent + 1; + for (int i = 0; i < StationsCount; i++) + { + var iname = RelXml.HashString(Stations[i]); + RelXml.StringTag(sb, cind, "Item", iname); + } + RelXml.CloseTag(sb, indent, "Stations"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "Stations"); } } public override uint[] GetHashTableOffsets() { var offsets = new List(); - for (uint i = 0; i < AudioTracksCount; i++) + for (uint i = 0; i < StationsCount; i++) { offsets.Add(4 + i * 4); } @@ -3487,18 +4399,20 @@ namespace CodeWalker.GameFiles } [TC(typeof(EXP))] public class Dat151RadioDLC : Dat151RelData { - public uint Unk00 { get; set; } + public FlagsUint Unk00 { get; set; } public uint Unk01 { get; set; } public uint Unk02 { get; set; } - public uint Unk03 { get; set; } - public uint Unk04 { get; set; } + public ushort Unk03 { get; set; } + public ushort Unk04 { get; set; } public uint Unk05 { get; set; } public uint Unk06 { get; set; } - public uint Unk07 { get; set; } - public uint Unk08 { get; set; } + public ushort Unk07 { get; set; } + public ushort Unk08 { get; set; } public uint Unk09 { get; set; } public uint Unk10 { get; set; } public uint Unk11 { get; set; } + public uint Unk12 { get; set; } + public uint Unk13 { get; set; } public uint AudioTracksCount { get; set; } public MetaHash[] AudioTracks { get; set; } @@ -3512,15 +4426,17 @@ namespace CodeWalker.GameFiles Unk00 = br.ReadUInt32(); Unk01 = br.ReadUInt32(); Unk02 = br.ReadUInt32(); - Unk03 = br.ReadUInt32(); - Unk04 = br.ReadUInt32(); + Unk03 = br.ReadUInt16(); + Unk04 = br.ReadUInt16(); Unk05 = br.ReadUInt32(); Unk06 = br.ReadUInt32(); - Unk07 = br.ReadUInt32(); - Unk08 = br.ReadUInt32(); + Unk07 = br.ReadUInt16(); + Unk08 = br.ReadUInt16(); Unk09 = br.ReadUInt32(); Unk10 = br.ReadUInt32(); Unk11 = br.ReadUInt32(); + Unk12 = br.ReadUInt32(); + Unk13 = br.ReadUInt32(); AudioTracksCount = br.ReadUInt32(); var tracks = new MetaHash[AudioTracksCount]; for (int i = 0; i < AudioTracksCount; i++) @@ -3549,12 +4465,46 @@ namespace CodeWalker.GameFiles bw.Write(Unk09); bw.Write(Unk10); bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); bw.Write(AudioTracksCount); for (int i = 0; i < AudioTracksCount; i++) { bw.Write(AudioTracks[i]); } } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk00", "0x" + Unk00.Hex); + RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); + RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); + RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); + RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); + RelXml.ValueTag(sb, indent, "Unk05", Unk05.ToString()); + RelXml.ValueTag(sb, indent, "Unk06", Unk06.ToString()); + RelXml.ValueTag(sb, indent, "Unk07", Unk07.ToString()); + RelXml.ValueTag(sb, indent, "Unk08", Unk08.ToString()); + RelXml.ValueTag(sb, indent, "Unk09", Unk09.ToString()); + RelXml.ValueTag(sb, indent, "Unk10", Unk10.ToString()); + RelXml.ValueTag(sb, indent, "Unk11", Unk11.ToString()); + RelXml.ValueTag(sb, indent, "Unk12", Unk12.ToString()); + RelXml.ValueTag(sb, indent, "Unk13", Unk13.ToString()); + if (AudioTracksCount > 0) + { + RelXml.OpenTag(sb, indent, "AudioTracks"); + var cind = indent + 1; + for (int i = 0; i < AudioTracksCount; i++) + { + var iname = RelXml.HashString(AudioTracks[i]); + RelXml.StringTag(sb, cind, "Item", iname); + } + RelXml.CloseTag(sb, indent, "AudioTracks"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "AudioTracks"); + } + } public override uint[] GetHashTableOffsets() { var offsets = new List(); @@ -3604,6 +4554,27 @@ namespace CodeWalker.GameFiles bw.Write(AudioItems[i].Hash1); } } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "AudioTrack0", RelXml.HashString(AudioTrack0)); + if (AudioItemCount > 0) + { + RelXml.OpenTag(sb, indent, "AudioItems"); + var cind = indent + 1; + var cind2 = indent + 2; + for (int i = 0; i < AudioItemCount; i++) + { + RelXml.OpenTag(sb, cind, "Item"); + AudioItems[i].WriteXml(sb, cind2); + RelXml.CloseTag(sb, cind, "Item"); + } + RelXml.CloseTag(sb, indent, "AudioItems"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "AudioItems"); + } + } public override uint[] GetHashTableOffsets() { var offsets = new List(); @@ -3617,7 +4588,7 @@ namespace CodeWalker.GameFiles } [TC(typeof(EXP))] public class Dat151StartTrackAction : Dat151RelData { - public uint Unk0 { get; set; } + public FlagsUint Unk0 { get; set; } public uint Unk1 { get; set; } public uint Unk2 { get; set; } public MetaHash AudioTrack0 { get; set; } @@ -3694,6 +4665,39 @@ namespace CodeWalker.GameFiles } } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk0", "0x" + Unk0.Hex); + RelXml.ValueTag(sb, indent, "Unk1", Unk1.ToString()); + RelXml.ValueTag(sb, indent, "Unk2", Unk2.ToString()); + RelXml.StringTag(sb, indent, "AudioTrack0", RelXml.HashString(AudioTrack0)); + RelXml.StringTag(sb, indent, "AudioTrack1", RelXml.HashString(AudioTrack1)); + RelXml.ValueTag(sb, indent, "Unk3", Unk3.ToString()); + RelXml.ValueTag(sb, indent, "Unk4", Unk4.ToString()); + RelXml.StringTag(sb, indent, "AudioTrack2", RelXml.HashString(AudioTrack2)); + RelXml.ValueTag(sb, indent, "Unk5", Unk5.ToString()); + RelXml.ValueTag(sb, indent, "Unk6", Unk6.ToString()); + RelXml.ValueTag(sb, indent, "Unk7", Unk7.ToString()); + RelXml.ValueTag(sb, indent, "Unk8", Unk8.ToString()); + RelXml.ValueTag(sb, indent, "Unk9", Unk9.ToString()); + if (ItemCount > 0) + { + RelXml.OpenTag(sb, indent, "Items"); + var cind = indent + 1; + var cind2 = indent + 2; + for (int i = 0; i < ItemCount; i++) + { + RelXml.OpenTag(sb, cind, "Item"); + Items[i].WriteXml(sb, cind2); + RelXml.CloseTag(sb, cind, "Item"); + } + RelXml.CloseTag(sb, indent, "Items"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "Items"); + } + } public override uint[] GetHashTableOffsets() { return new uint[] { 12, 16, 28 }; @@ -3701,7 +4705,7 @@ namespace CodeWalker.GameFiles } [TC(typeof(EXP))] public class Dat151StopTrackAction : Dat151RelData { - public uint Unk0 { get; set; } + public FlagsUint Unk0 { get; set; } public uint Unk1 { get; set; } public uint Unk2 { get; set; } public MetaHash AudioTrack0 { get; set; } @@ -3740,6 +4744,16 @@ namespace CodeWalker.GameFiles bw.Write(Unk3); bw.Write(Unk4); } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk0", "0x" + Unk0.Hex); + RelXml.ValueTag(sb, indent, "Unk1", Unk1.ToString()); + RelXml.ValueTag(sb, indent, "Unk2", Unk2.ToString()); + RelXml.StringTag(sb, indent, "AudioTrack0", RelXml.HashString(AudioTrack0)); + RelXml.StringTag(sb, indent, "AudioTrack1", RelXml.HashString(AudioTrack1)); + RelXml.ValueTag(sb, indent, "Unk3", Unk3.ToString()); + RelXml.ValueTag(sb, indent, "Unk4", Unk4.ToString()); + } public override uint[] GetHashTableOffsets() { return new uint[] { 12, 16 }; @@ -3787,10 +4801,21 @@ namespace CodeWalker.GameFiles bw.Write(AudioTrack2); bw.Write(AudioTrack3); } + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "AudioTrack0", RelXml.HashString(AudioTrack0)); + RelXml.StringTag(sb, indent, "AudioTrack1", RelXml.HashString(AudioTrack1)); + RelXml.ValueTag(sb, indent, "Unk1", FloatUtil.ToString(Unk1)); + RelXml.ValueTag(sb, indent, "Unk2", FloatUtil.ToString(Unk2)); + RelXml.ValueTag(sb, indent, "Unk3", FloatUtil.ToString(Unk3)); + RelXml.ValueTag(sb, indent, "Unk4", FloatUtil.ToString(Unk4)); + RelXml.StringTag(sb, indent, "AudioTrack2", RelXml.HashString(AudioTrack2)); + RelXml.StringTag(sb, indent, "AudioTrack3", RelXml.HashString(AudioTrack3)); + } } [TC(typeof(EXP))] public class Dat151Mood : Dat151RelData { - public MetaHash Unk0 { get; set; } + public FlagsUint Unk0 { get; set; } public MetaHash Unk1 { get; set; } public MetaHash Unk2 { get; set; } public uint MoodItemCount { get; set; } @@ -3831,6 +4856,29 @@ namespace CodeWalker.GameFiles MoodItems[i].Write(bw); } } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk0", "0x" + Unk0.Hex); + RelXml.StringTag(sb, indent, "Unk1", RelXml.HashString(Unk1)); + RelXml.StringTag(sb, indent, "Unk2", RelXml.HashString(Unk2)); + if (MoodItemCount > 0) + { + RelXml.OpenTag(sb, indent, "MoodItems"); + var cind = indent + 1; + var cind2 = indent + 2; + for (int i = 0; i < MoodItemCount; i++) + { + RelXml.OpenTag(sb, cind, "Item"); + MoodItems[i].WriteXml(sb, cind2); + RelXml.CloseTag(sb, cind, "Item"); + } + RelXml.CloseTag(sb, indent, "MoodItems"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "MoodItems"); + } + } public override uint[] GetHashTableOffsets() { var offsets = new List(); @@ -3848,7 +4896,7 @@ namespace CodeWalker.GameFiles } [TC(typeof(EXP))] public class Dat151SetMoodAction : Dat151RelData { - public uint Unk0 { get; set; } + public FlagsUint Unk0 { get; set; } public uint Unk1 { get; set; } public uint Unk2 { get; set; } public MetaHash AudioTrack0 { get; set; } @@ -3896,6 +4944,19 @@ namespace CodeWalker.GameFiles bw.Write(Unk5); bw.Write(Unk6); } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk0", "0x" + Unk0.Hex); + RelXml.ValueTag(sb, indent, "Unk1", Unk1.ToString()); + RelXml.ValueTag(sb, indent, "Unk2", Unk2.ToString()); + RelXml.StringTag(sb, indent, "AudioTrack0", RelXml.HashString(AudioTrack0)); + RelXml.StringTag(sb, indent, "AudioTrack1", RelXml.HashString(AudioTrack1)); + RelXml.ValueTag(sb, indent, "Unk3", Unk3.ToString()); + RelXml.StringTag(sb, indent, "AudioTrack2", RelXml.HashString(AudioTrack2)); + RelXml.ValueTag(sb, indent, "Unk4", Unk4.ToString()); + RelXml.ValueTag(sb, indent, "Unk5", Unk5.ToString()); + RelXml.ValueTag(sb, indent, "Unk6", Unk6.ToString()); + } public override uint[] GetHashTableOffsets() { return new uint[] { 12, 16, 24 }; @@ -3936,6 +4997,24 @@ namespace CodeWalker.GameFiles } } + public override void WriteXml(StringBuilder sb, int indent) + { + if (AudioTrackCount > 0) + { + RelXml.OpenTag(sb, indent, "AudioTracks"); + var cind = indent + 1; + for (int i = 0; i < AudioTrackCount; i++) + { + var iname = RelXml.HashString(AudioTracks[i]); + RelXml.StringTag(sb, cind, "Item", iname); + } + RelXml.CloseTag(sb, indent, "AudioTracks"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "AudioTracks"); + } + } public override uint[] GetHashTableOffsets() { var offsets = new List(); @@ -3950,7 +5029,7 @@ namespace CodeWalker.GameFiles } [TC(typeof(EXP))] public class Dat151StartOneShotAction : Dat151RelData { - public uint Unk0 { get; set; } + public FlagsUint Unk0 { get; set; } public uint Unk1 { get; set; } public uint Unk2 { get; set; } public MetaHash AudioTrack0 { get; set; } @@ -4001,6 +5080,20 @@ namespace CodeWalker.GameFiles bw.Write(Unk7); bw.Write(Unk8); } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk0", "0x" + Unk0.Hex); + RelXml.ValueTag(sb, indent, "Unk1", Unk1.ToString()); + RelXml.ValueTag(sb, indent, "Unk2", Unk2.ToString()); + RelXml.StringTag(sb, indent, "AudioTrack0", RelXml.HashString(AudioTrack0)); + RelXml.StringTag(sb, indent, "AudioTrack1", RelXml.HashString(AudioTrack1)); + RelXml.ValueTag(sb, indent, "Unk3", Unk3.ToString()); + RelXml.StringTag(sb, indent, "Unk4", RelXml.HashString(Unk4)); + RelXml.ValueTag(sb, indent, "Unk5", Unk5.ToString()); + RelXml.ValueTag(sb, indent, "Unk6", Unk6.ToString()); + RelXml.ValueTag(sb, indent, "Unk7", Unk7.ToString()); + RelXml.ValueTag(sb, indent, "Unk8", Unk8.ToString()); + } public override uint[] GetHashTableOffsets() { return new uint[] { 12, 16 }; @@ -4008,7 +5101,7 @@ namespace CodeWalker.GameFiles } [TC(typeof(EXP))] public class Dat151StopOneShotAction : Dat151RelData { - public uint Unk0 { get; set; } + public FlagsUint Unk0 { get; set; } public uint Unk1 { get; set; } public uint Unk2 { get; set; } public MetaHash AudioTrack0 { get; set; } @@ -4047,6 +5140,15 @@ namespace CodeWalker.GameFiles bw.Write(AudioTrack1); bw.Write(Unk3); } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk0", "0x" + Unk0.Hex); + RelXml.ValueTag(sb, indent, "Unk1", Unk1.ToString()); + RelXml.ValueTag(sb, indent, "Unk2", Unk2.ToString()); + RelXml.StringTag(sb, indent, "AudioTrack0", RelXml.HashString(AudioTrack0)); + RelXml.StringTag(sb, indent, "AudioTrack1", RelXml.HashString(AudioTrack1)); + RelXml.ValueTag(sb, indent, "Unk3", Unk3.ToString()); + } public override uint[] GetHashTableOffsets() { return new uint[] { 12, 16 }; @@ -4054,7 +5156,7 @@ namespace CodeWalker.GameFiles } [TC(typeof(EXP))] public class Dat151FadeInRadioAction : Dat151RelData { - public uint Unk0 { get; set; } + public FlagsUint Unk0 { get; set; } public uint Unk1 { get; set; } public uint Unk2 { get; set; } public MetaHash AudioTrack0 { get; set; } @@ -4093,6 +5195,16 @@ namespace CodeWalker.GameFiles bw.Write(Unk3); bw.Write(Unk4); } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk0", "0x" + Unk0.Hex); + RelXml.ValueTag(sb, indent, "Unk1", Unk1.ToString()); + RelXml.ValueTag(sb, indent, "Unk2", Unk2.ToString()); + RelXml.StringTag(sb, indent, "AudioTrack0", RelXml.HashString(AudioTrack0)); + RelXml.StringTag(sb, indent, "AudioTrack1", RelXml.HashString(AudioTrack1)); + RelXml.ValueTag(sb, indent, "Unk3", FloatUtil.ToString(Unk3)); + RelXml.ValueTag(sb, indent, "Unk4", FloatUtil.ToString(Unk4)); + } public override uint[] GetHashTableOffsets() { return new uint[] { 12, 16 }; @@ -4100,7 +5212,7 @@ namespace CodeWalker.GameFiles } [TC(typeof(EXP))] public class Dat151FadeOutRadioAction : Dat151RelData { - public uint Unk0 { get; set; } + public FlagsUint Unk0 { get; set; } public uint Unk1 { get; set; } public uint Unk2 { get; set; } public MetaHash AudioTrack0 { get; set; } @@ -4139,6 +5251,16 @@ namespace CodeWalker.GameFiles bw.Write(Unk3); bw.Write(Unk4); } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk0", "0x" + Unk0.Hex); + RelXml.ValueTag(sb, indent, "Unk1", Unk1.ToString()); + RelXml.ValueTag(sb, indent, "Unk2", Unk2.ToString()); + RelXml.StringTag(sb, indent, "AudioTrack0", RelXml.HashString(AudioTrack0)); + RelXml.StringTag(sb, indent, "AudioTrack1", RelXml.HashString(AudioTrack1)); + RelXml.ValueTag(sb, indent, "Unk3", FloatUtil.ToString(Unk3)); + RelXml.ValueTag(sb, indent, "Unk4", FloatUtil.ToString(Unk4)); + } public override uint[] GetHashTableOffsets() { return new uint[] { 12, 16 }; @@ -4146,7 +5268,7 @@ namespace CodeWalker.GameFiles } [TC(typeof(EXP))] public class Dat151Mod : Dat151RelData { - public uint Unk00 { get; set; } + public FlagsUint Unk00 { get; set; } public uint Unk01 { get; set; } public uint Unk02 { get; set; } public uint Unk03 { get; set; } @@ -4161,8 +5283,11 @@ namespace CodeWalker.GameFiles public MetaHash Unk12 { get; set; } public MetaHash Unk13 { get; set; } public MetaHash Unk14 { get; set; } - public uint Unk15 { get; set; }//TODO: fix this - public byte AudioTracks1Count { get; set; }//TODO: fix this + public byte Unk15 { get; set; } + public byte AudioTracks1Count { get; set; } + public byte Unk16 { get; set; } + public byte Unk17 { get; set; } + public MetaHash AudioTrack0 { get; set; } public Dat151HashPair[] AudioTracks1 { get; set; } public uint AudioTracks2Count { get; set; } public MetaHash[] AudioTracks2 { get; set; } @@ -4190,14 +5315,17 @@ namespace CodeWalker.GameFiles Unk12 = br.ReadUInt32(); Unk13 = br.ReadUInt32(); Unk14 = br.ReadUInt32(); - Unk15 = br.ReadUInt32(); + Unk15 = br.ReadByte(); + AudioTracks1Count = br.ReadByte(); + Unk16 = br.ReadByte(); + Unk17 = br.ReadByte(); - byte tc1 = (byte)((Unk15) & 0xFF); - byte tc2 = (byte)((Unk15 >> 8) & 0xFF); - byte tc3 = (byte)((Unk15 >> 16) & 0xFF); - byte tc4 = (byte)((Unk15 >> 24) & 0xFF); + //byte tc1 = (byte)((Unk15) & 0xFF); + //byte tc2 = (byte)((Unk15 >> 8) & 0xFF); + //byte tc3 = (byte)((Unk15 >> 16) & 0xFF); + //byte tc4 = (byte)((Unk15 >> 24) & 0xFF); - switch (tc1)//not sure what this is + switch (Unk15)//not sure what this is { case 0: case 1: @@ -4209,16 +5337,10 @@ namespace CodeWalker.GameFiles break; } - AudioTracks1Count = tc2; - - if (tc3 > 0) - { } - if (tc4 > 0) - { } if (AudioTracks1Count == 0) { - var AudioTrack0 = br.ReadUInt32(); + AudioTrack0 = br.ReadUInt32(); AudioTracks2 = new MetaHash[] { AudioTrack0 }; } else //if (AudioTracks1Count > 0) @@ -4264,6 +5386,9 @@ namespace CodeWalker.GameFiles bw.Write(Unk13); bw.Write(Unk14); bw.Write(Unk15); + bw.Write(AudioTracks1Count); + bw.Write(Unk16); + bw.Write(Unk17); if (AudioTracks1Count == 0) @@ -4285,6 +5410,60 @@ namespace CodeWalker.GameFiles } } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk00", "0x" + Unk00.Hex); + RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); + RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); + RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); + RelXml.StringTag(sb, indent, "Unk04", RelXml.HashString(Unk04)); + RelXml.StringTag(sb, indent, "Unk05", RelXml.HashString(Unk05)); + RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); + RelXml.StringTag(sb, indent, "Unk07", RelXml.HashString(Unk07)); + RelXml.StringTag(sb, indent, "Unk08", RelXml.HashString(Unk08)); + RelXml.ValueTag(sb, indent, "Unk09", FloatUtil.ToString(Unk09)); + RelXml.ValueTag(sb, indent, "Unk10", FloatUtil.ToString(Unk10)); + RelXml.StringTag(sb, indent, "Unk11", RelXml.HashString(Unk11)); + RelXml.StringTag(sb, indent, "Unk12", RelXml.HashString(Unk12)); + RelXml.StringTag(sb, indent, "Unk13", RelXml.HashString(Unk13)); + RelXml.StringTag(sb, indent, "Unk14", RelXml.HashString(Unk14)); + RelXml.ValueTag(sb, indent, "Unk15", Unk15.ToString()); + RelXml.ValueTag(sb, indent, "Unk16", Unk16.ToString()); + RelXml.ValueTag(sb, indent, "Unk17", Unk17.ToString()); + if (AudioTracks1Count == 0) + { + RelXml.StringTag(sb, indent, "AudioTrack0", RelXml.HashString(AudioTrack0)); + } + else + { + RelXml.OpenTag(sb, indent, "AudioTracks1"); + var cind = indent + 1; + var cind2 = indent + 2; + for (int i = 0; i < AudioTracks1Count; i++) + { + RelXml.OpenTag(sb, cind, "Item"); + AudioTracks1[i].WriteXml(sb, cind2); + RelXml.CloseTag(sb, cind, "Item"); + } + RelXml.CloseTag(sb, indent, "AudioTracks1"); + + if (AudioTracks2Count > 0) + { + RelXml.OpenTag(sb, indent, "AudioTracks2"); + for (int i = 0; i < AudioTracks2Count; i++) + { + var iname = RelXml.HashString(AudioTracks2[i]); + RelXml.StringTag(sb, cind, "Item", iname); + } + RelXml.CloseTag(sb, indent, "AudioTracks2"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "AudioTracks2"); + } + + } + } public override uint[] GetHashTableOffsets() { var offsets = new List(); @@ -4335,6 +5514,10 @@ namespace CodeWalker.GameFiles bw.Write(AudioTrack0); } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "AudioTrack0", RelXml.HashString(AudioTrack0)); + } public override uint[] GetHashTableOffsets() { return new uint[] { 0 }; @@ -4342,7 +5525,7 @@ namespace CodeWalker.GameFiles } [TC(typeof(EXP))] public class Dat151Entity : Dat151RelData { - public uint Unk00 { get; set; } + public FlagsUint Unk00 { get; set; } public uint Unk01 { get; set; } public uint Unk02 { get; set; } public uint Unk03 { get; set; } @@ -4640,6 +5823,102 @@ namespace CodeWalker.GameFiles bw.Write(Unk88); bw.Write(Unk89); } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk00", "0x" + Unk00.Hex); + RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); + RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); + RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); + RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); + RelXml.ValueTag(sb, indent, "Unk05", Unk05.ToString()); + RelXml.ValueTag(sb, indent, "Unk06", Unk06.ToString()); + RelXml.ValueTag(sb, indent, "Unk07", Unk07.ToString()); + RelXml.ValueTag(sb, indent, "Unk08", Unk08.ToString()); + RelXml.ValueTag(sb, indent, "Unk09", Unk09.ToString()); + RelXml.ValueTag(sb, indent, "Unk10", Unk10.ToString()); + RelXml.ValueTag(sb, indent, "Unk11", Unk11.ToString()); + RelXml.ValueTag(sb, indent, "Unk12", Unk12.ToString()); + RelXml.ValueTag(sb, indent, "Unk13", Unk13.ToString()); + RelXml.ValueTag(sb, indent, "Unk14", Unk14.ToString()); + RelXml.ValueTag(sb, indent, "Unk15", Unk15.ToString()); + RelXml.ValueTag(sb, indent, "Unk16", Unk16.ToString()); + RelXml.ValueTag(sb, indent, "Unk17", Unk17.ToString()); + RelXml.ValueTag(sb, indent, "Unk18", Unk18.ToString()); + RelXml.ValueTag(sb, indent, "Unk19", Unk19.ToString()); + RelXml.ValueTag(sb, indent, "Unk20", Unk20.ToString()); + RelXml.ValueTag(sb, indent, "Unk21", Unk21.ToString()); + RelXml.ValueTag(sb, indent, "Unk22", Unk22.ToString()); + RelXml.ValueTag(sb, indent, "Unk23", Unk23.ToString()); + RelXml.ValueTag(sb, indent, "Unk24", Unk24.ToString()); + RelXml.ValueTag(sb, indent, "Unk25", Unk25.ToString()); + RelXml.ValueTag(sb, indent, "Unk26", Unk26.ToString()); + RelXml.ValueTag(sb, indent, "Unk27", Unk27.ToString()); + RelXml.ValueTag(sb, indent, "Unk28", Unk28.ToString()); + RelXml.ValueTag(sb, indent, "Unk29", Unk29.ToString()); + RelXml.ValueTag(sb, indent, "Unk30", Unk30.ToString()); + RelXml.StringTag(sb, indent, "AudioTrack0", RelXml.HashString(AudioTrack0)); + RelXml.ValueTag(sb, indent, "Unk31", Unk31.ToString()); + RelXml.ValueTag(sb, indent, "Unk32", Unk32.ToString()); + RelXml.StringTag(sb, indent, "AudioTrack1", RelXml.HashString(AudioTrack1)); + RelXml.StringTag(sb, indent, "AudioTrack2", RelXml.HashString(AudioTrack2)); + RelXml.ValueTag(sb, indent, "Unk33", Unk33.ToString()); + RelXml.ValueTag(sb, indent, "Unk34", Unk34.ToString()); + RelXml.ValueTag(sb, indent, "Unk35", Unk35.ToString()); + RelXml.ValueTag(sb, indent, "Unk36", Unk36.ToString()); + RelXml.ValueTag(sb, indent, "Unk37", Unk37.ToString()); + RelXml.ValueTag(sb, indent, "Unk38", Unk38.ToString()); + RelXml.ValueTag(sb, indent, "Unk39", Unk39.ToString()); + RelXml.ValueTag(sb, indent, "Unk40", Unk40.ToString()); + RelXml.ValueTag(sb, indent, "Unk41", Unk41.ToString()); + RelXml.ValueTag(sb, indent, "Unk42", Unk42.ToString()); + RelXml.ValueTag(sb, indent, "Unk43", Unk43.ToString()); + RelXml.ValueTag(sb, indent, "Unk44", Unk44.ToString()); + RelXml.ValueTag(sb, indent, "Unk45", Unk45.ToString()); + RelXml.ValueTag(sb, indent, "Unk46", Unk46.ToString()); + RelXml.ValueTag(sb, indent, "Unk47", Unk47.ToString()); + RelXml.ValueTag(sb, indent, "Unk48", Unk48.ToString()); + RelXml.ValueTag(sb, indent, "Unk49", Unk49.ToString()); + RelXml.ValueTag(sb, indent, "Unk50", Unk50.ToString()); + RelXml.ValueTag(sb, indent, "Unk51", Unk51.ToString()); + RelXml.ValueTag(sb, indent, "Unk52", Unk52.ToString()); + RelXml.ValueTag(sb, indent, "Unk53", Unk53.ToString()); + RelXml.ValueTag(sb, indent, "Unk54", Unk54.ToString()); + RelXml.ValueTag(sb, indent, "Unk55", Unk55.ToString()); + RelXml.ValueTag(sb, indent, "Unk56", Unk56.ToString()); + RelXml.ValueTag(sb, indent, "Unk57", Unk57.ToString()); + RelXml.ValueTag(sb, indent, "Unk58", Unk58.ToString()); + RelXml.ValueTag(sb, indent, "Unk59", Unk59.ToString()); + RelXml.ValueTag(sb, indent, "Unk60", Unk60.ToString()); + RelXml.ValueTag(sb, indent, "Unk61", Unk61.ToString()); + RelXml.ValueTag(sb, indent, "Unk62", Unk62.ToString()); + RelXml.ValueTag(sb, indent, "Unk63", Unk63.ToString()); + RelXml.ValueTag(sb, indent, "Unk64", Unk64.ToString()); + RelXml.ValueTag(sb, indent, "Unk65", Unk65.ToString()); + RelXml.ValueTag(sb, indent, "Unk66", Unk66.ToString()); + RelXml.ValueTag(sb, indent, "Unk67", Unk67.ToString()); + RelXml.ValueTag(sb, indent, "Unk68", Unk68.ToString()); + RelXml.ValueTag(sb, indent, "Unk69", Unk69.ToString()); + RelXml.ValueTag(sb, indent, "Unk70", Unk70.ToString()); + RelXml.ValueTag(sb, indent, "Unk71", Unk71.ToString()); + RelXml.ValueTag(sb, indent, "Unk72", Unk72.ToString()); + RelXml.ValueTag(sb, indent, "Unk73", Unk73.ToString()); + RelXml.ValueTag(sb, indent, "Unk74", Unk74.ToString()); + RelXml.ValueTag(sb, indent, "Unk75", Unk75.ToString()); + RelXml.ValueTag(sb, indent, "Unk76", Unk76.ToString()); + RelXml.ValueTag(sb, indent, "Unk77", Unk77.ToString()); + RelXml.ValueTag(sb, indent, "Unk78", Unk78.ToString()); + RelXml.ValueTag(sb, indent, "Unk79", Unk79.ToString()); + RelXml.ValueTag(sb, indent, "Unk80", Unk80.ToString()); + RelXml.ValueTag(sb, indent, "Unk81", Unk81.ToString()); + RelXml.ValueTag(sb, indent, "Unk82", Unk82.ToString()); + RelXml.ValueTag(sb, indent, "Unk83", Unk83.ToString()); + RelXml.ValueTag(sb, indent, "Unk84", Unk84.ToString()); + RelXml.ValueTag(sb, indent, "Unk85", Unk85.ToString()); + RelXml.ValueTag(sb, indent, "Unk86", Unk86.ToString()); + RelXml.ValueTag(sb, indent, "Unk87", Unk87.ToString()); + RelXml.ValueTag(sb, indent, "Unk88", Unk88.ToString()); + RelXml.ValueTag(sb, indent, "Unk89", Unk89.ToString()); + } public override uint[] GetHashTableOffsets() { return new uint[] { 124, 136, 140 }; @@ -4647,7 +5926,7 @@ namespace CodeWalker.GameFiles } [TC(typeof(EXP))] public class Dat151Collision : Dat151RelData { - public uint Unk00 { get; set; } + public FlagsUint Unk00 { get; set; } public uint Unk01 { get; set; } public uint Unk02 { get; set; } public uint Unk03 { get; set; } @@ -4830,6 +6109,62 @@ namespace CodeWalker.GameFiles bw.Write(AudioTrack1); } } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk00", "0x" + Unk00.Hex); + RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); + RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); + RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); + RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); + RelXml.ValueTag(sb, indent, "Unk05", Unk05.ToString()); + RelXml.ValueTag(sb, indent, "Unk06", Unk06.ToString()); + RelXml.ValueTag(sb, indent, "Unk07", Unk07.ToString()); + RelXml.ValueTag(sb, indent, "Unk08", Unk08.ToString()); + RelXml.ValueTag(sb, indent, "Unk09", Unk09.ToString()); + RelXml.ValueTag(sb, indent, "Unk10", Unk10.ToString()); + RelXml.ValueTag(sb, indent, "Unk11", Unk11.ToString()); + RelXml.ValueTag(sb, indent, "Unk12", Unk12.ToString()); + RelXml.ValueTag(sb, indent, "Unk13", Unk13.ToString()); + RelXml.ValueTag(sb, indent, "Unk14", Unk14.ToString()); + RelXml.ValueTag(sb, indent, "Unk15", Unk15.ToString()); + RelXml.ValueTag(sb, indent, "Unk16", Unk16.ToString()); + RelXml.ValueTag(sb, indent, "Unk17", Unk17.ToString()); + RelXml.ValueTag(sb, indent, "Unk18", Unk18.ToString()); + RelXml.ValueTag(sb, indent, "Unk19", Unk19.ToString()); + RelXml.ValueTag(sb, indent, "Unk20", Unk20.ToString()); + RelXml.ValueTag(sb, indent, "Unk21", Unk21.ToString()); + RelXml.ValueTag(sb, indent, "Unk22", Unk22.ToString()); + RelXml.ValueTag(sb, indent, "Unk23", Unk23.ToString()); + RelXml.ValueTag(sb, indent, "Unk24", Unk24.ToString()); + RelXml.ValueTag(sb, indent, "Unk25", Unk25.ToString()); + RelXml.ValueTag(sb, indent, "Unk26", Unk26.ToString()); + RelXml.ValueTag(sb, indent, "Unk27", Unk27.ToString()); + RelXml.ValueTag(sb, indent, "Unk28", Unk28.ToString()); + RelXml.ValueTag(sb, indent, "Unk29", Unk29.ToString()); + RelXml.ValueTag(sb, indent, "Unk30", Unk30.ToString()); + RelXml.ValueTag(sb, indent, "Unk31", Unk31.ToString()); + RelXml.ValueTag(sb, indent, "Unk32", Unk32.ToString()); + RelXml.ValueTag(sb, indent, "Unk33", Unk33.ToString()); + RelXml.ValueTag(sb, indent, "Unk34", Unk34.ToString()); + RelXml.ValueTag(sb, indent, "Unk35", Unk35.ToString()); + RelXml.ValueTag(sb, indent, "Unk36", Unk36.ToString()); + RelXml.ValueTag(sb, indent, "Unk37", Unk37.ToString()); + RelXml.ValueTag(sb, indent, "Unk38", Unk38.ToString()); + RelXml.ValueTag(sb, indent, "Unk39", Unk39.ToString()); + RelXml.ValueTag(sb, indent, "Unk40", Unk40.ToString()); + RelXml.ValueTag(sb, indent, "Unk41", Unk41.ToString()); + RelXml.ValueTag(sb, indent, "Unk42", Unk42.ToString()); + RelXml.ValueTag(sb, indent, "Unk43", Unk43.ToString()); + RelXml.ValueTag(sb, indent, "Unk44", Unk44.ToString()); + RelXml.ValueTag(sb, indent, "Unk45", Unk45.ToString()); + RelXml.ValueTag(sb, indent, "Unk46", Unk46.ToString()); + RelXml.ValueTag(sb, indent, "Unk47", Unk47.ToString()); + RelXml.ValueTag(sb, indent, "Unk48", Unk48.ToString()); + RelXml.ValueTag(sb, indent, "Unk49", Unk49.ToString()); + RelXml.ValueTag(sb, indent, "Unk50", Unk50.ToString()); + RelXml.StringTag(sb, indent, "AudioTrack0", RelXml.HashString(AudioTrack0)); + RelXml.StringTag(sb, indent, "AudioTrack1", RelXml.HashString(AudioTrack1)); + } public override uint[] GetHashTableOffsets() { if (Unk50 > 0) return new uint[] { 204, 208 }; @@ -4838,7 +6173,7 @@ namespace CodeWalker.GameFiles } [TC(typeof(EXP))] public class Dat151Unk47 : Dat151RelData { - public uint Unk0 { get; set; } + public FlagsUint Unk0 { get; set; } public MetaHash AudioTrack0 { get; set; } public float Unk1 { get; set; } @@ -4865,6 +6200,12 @@ namespace CodeWalker.GameFiles bw.Write(AudioTrack0); bw.Write(Unk1); } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk0", "0x" + Unk0.Hex); + RelXml.StringTag(sb, indent, "AudioTrack0", RelXml.HashString(AudioTrack0)); + RelXml.ValueTag(sb, indent, "Unk1", FloatUtil.ToString(Unk1)); + } public override uint[] GetHashTableOffsets() { return new uint[] { 4 }; @@ -4905,6 +6246,26 @@ namespace CodeWalker.GameFiles bw.Write(AudioItems[i].Hash1); } } + public override void WriteXml(StringBuilder sb, int indent) + { + if (AudioItemCount > 0) + { + RelXml.OpenTag(sb, indent, "AudioItems"); + var cind = indent + 1; + var cind2 = indent + 2; + for (int i = 0; i < AudioItemCount; i++) + { + RelXml.OpenTag(sb, cind, "Item"); + AudioItems[i].WriteXml(sb, cind2); + RelXml.CloseTag(sb, cind, "Item"); + } + RelXml.CloseTag(sb, indent, "AudioItems"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "AudioItems"); + } + } public override uint[] GetHashTableOffsets() { var offsets = new List(); @@ -4917,7 +6278,7 @@ namespace CodeWalker.GameFiles } [TC(typeof(EXP))] public class Dat151ForceRadioTrackAction : Dat151RelData { - public uint Unk0 { get; set; } + public FlagsUint Unk0 { get; set; } public uint Unk1 { get; set; } public uint Unk2 { get; set; } public MetaHash AudioTrack0 { get; set; } @@ -4973,6 +6334,32 @@ namespace CodeWalker.GameFiles bw.Write(AudioTracks[i]); } } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk0", "0x" + Unk0.Hex); + RelXml.ValueTag(sb, indent, "Unk1", Unk1.ToString()); + RelXml.ValueTag(sb, indent, "Unk2", Unk2.ToString()); + RelXml.StringTag(sb, indent, "AudioTrack0", RelXml.HashString(AudioTrack0)); + RelXml.StringTag(sb, indent, "AudioTrack1", RelXml.HashString(AudioTrack1)); + RelXml.ValueTag(sb, indent, "Unk3", Unk3.ToString()); + RelXml.ValueTag(sb, indent, "Unk4", Unk4.ToString()); + RelXml.ValueTag(sb, indent, "Unk5", Unk5.ToString()); + if (AudioTracksCount > 0) + { + RelXml.OpenTag(sb, indent, "AudioTracks"); + var cind = indent + 1; + for (int i = 0; i < AudioTracksCount; i++) + { + var iname = RelXml.HashString(AudioTracks[i]); + RelXml.StringTag(sb, cind, "Item", iname); + } + RelXml.CloseTag(sb, indent, "AudioTracks"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "AudioTracks"); + } + } public override uint[] GetHashTableOffsets() { var offsets = new List(); @@ -4987,7 +6374,7 @@ namespace CodeWalker.GameFiles } [TC(typeof(EXP))] public class Dat151RadioDjSpeechAction : Dat151RelData { - public uint Unk0 { get; set; } + public FlagsUint Unk0 { get; set; } public uint Unk1 { get; set; } public uint Unk2 { get; set; } public MetaHash AudioTrack0 { get; set; } @@ -5029,6 +6416,17 @@ namespace CodeWalker.GameFiles bw.Write(Unk4); bw.Write(Unk5); } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk0", "0x" + Unk0.Hex); + RelXml.ValueTag(sb, indent, "Unk1", Unk1.ToString()); + RelXml.ValueTag(sb, indent, "Unk2", Unk2.ToString()); + RelXml.StringTag(sb, indent, "AudioTrack0", RelXml.HashString(AudioTrack0)); + RelXml.StringTag(sb, indent, "AudioTrack1", RelXml.HashString(AudioTrack1)); + RelXml.ValueTag(sb, indent, "Unk3", Unk3.ToString()); + RelXml.ValueTag(sb, indent, "Unk4", Unk4.ToString()); + RelXml.ValueTag(sb, indent, "Unk5", Unk5.ToString()); + } public override uint[] GetHashTableOffsets() { return new uint[] { 12, 16 }; @@ -5069,6 +6467,26 @@ namespace CodeWalker.GameFiles bw.Write(AudioItems[i].Hash1); } } + public override void WriteXml(StringBuilder sb, int indent) + { + if (AudioItemCount > 0) + { + RelXml.OpenTag(sb, indent, "AudioItems"); + var cind = indent + 1; + var cind2 = indent + 2; + for (int i = 0; i < AudioItemCount; i++) + { + RelXml.OpenTag(sb, cind, "Item"); + AudioItems[i].WriteXml(sb, cind2); + RelXml.CloseTag(sb, cind, "Item"); + } + RelXml.CloseTag(sb, indent, "AudioItems"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "AudioItems"); + } + } public override uint[] GetHashTableOffsets() { var offsets = new List(); @@ -5114,6 +6532,26 @@ namespace CodeWalker.GameFiles bw.Write(AudioItems[i].Hash1); } } + public override void WriteXml(StringBuilder sb, int indent) + { + if (AudioItemCount > 0) + { + RelXml.OpenTag(sb, indent, "AudioItems"); + var cind = indent + 1; + var cind2 = indent + 2; + for (int i = 0; i < AudioItemCount; i++) + { + RelXml.OpenTag(sb, cind, "Item"); + AudioItems[i].WriteXml(sb, cind2); + RelXml.CloseTag(sb, cind, "Item"); + } + RelXml.CloseTag(sb, indent, "AudioItems"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "AudioItems"); + } + } public override uint[] GetHashTableOffsets() { var offsets = new List(); @@ -5159,6 +6597,26 @@ namespace CodeWalker.GameFiles bw.Write(AudioItems[i].Hash1); } } + public override void WriteXml(StringBuilder sb, int indent) + { + if (AudioItemCount > 0) + { + RelXml.OpenTag(sb, indent, "AudioItems"); + var cind = indent + 1; + var cind2 = indent + 2; + for (int i = 0; i < AudioItemCount; i++) + { + RelXml.OpenTag(sb, cind, "Item"); + AudioItems[i].WriteXml(sb, cind2); + RelXml.CloseTag(sb, cind, "Item"); + } + RelXml.CloseTag(sb, indent, "AudioItems"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "AudioItems"); + } + } public override uint[] GetHashTableOffsets() { var offsets = new List(); @@ -5204,6 +6662,26 @@ namespace CodeWalker.GameFiles bw.Write(AudioItems[i].Hash1); } } + public override void WriteXml(StringBuilder sb, int indent) + { + if (AudioItemCount > 0) + { + RelXml.OpenTag(sb, indent, "AudioItems"); + var cind = indent + 1; + var cind2 = indent + 2; + for (int i = 0; i < AudioItemCount; i++) + { + RelXml.OpenTag(sb, cind, "Item"); + AudioItems[i].WriteXml(sb, cind2); + RelXml.CloseTag(sb, cind, "Item"); + } + RelXml.CloseTag(sb, indent, "AudioItems"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "AudioItems"); + } + } public override uint[] GetHashTableOffsets() { var offsets = new List(); @@ -5249,6 +6727,26 @@ namespace CodeWalker.GameFiles bw.Write(AudioItems[i].Hash1); } } + public override void WriteXml(StringBuilder sb, int indent) + { + if (AudioItemCount > 0) + { + RelXml.OpenTag(sb, indent, "AudioItems"); + var cind = indent + 1; + var cind2 = indent + 2; + for (int i = 0; i < AudioItemCount; i++) + { + RelXml.OpenTag(sb, cind, "Item"); + AudioItems[i].WriteXml(sb, cind2); + RelXml.CloseTag(sb, cind, "Item"); + } + RelXml.CloseTag(sb, indent, "AudioItems"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "AudioItems"); + } + } public override uint[] GetHashTableOffsets() { var offsets = new List(); @@ -5294,6 +6792,26 @@ namespace CodeWalker.GameFiles bw.Write(AudioItems[i].Hash1); } } + public override void WriteXml(StringBuilder sb, int indent) + { + if (AudioItemCount > 0) + { + RelXml.OpenTag(sb, indent, "AudioItems"); + var cind = indent + 1; + var cind2 = indent + 2; + for (int i = 0; i < AudioItemCount; i++) + { + RelXml.OpenTag(sb, cind, "Item"); + AudioItems[i].WriteXml(sb, cind2); + RelXml.CloseTag(sb, cind, "Item"); + } + RelXml.CloseTag(sb, indent, "AudioItems"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "AudioItems"); + } + } public override uint[] GetHashTableOffsets() { var offsets = new List(); @@ -5307,7 +6825,7 @@ namespace CodeWalker.GameFiles [TC(typeof(EXP))] public class Dat151ShoreLinePool : Dat151RelData { - public uint Unk01 { get; set; } + public FlagsUint Unk01 { get; set; } public Vector4 Unk02 { get; set; } public int Unk03 { get; set; } public int Unk04 { get; set; } @@ -5382,10 +6900,26 @@ namespace CodeWalker.GameFiles bw.Write(Points[i].Y); } } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk01", "0x" + Unk01.Hex); + RelXml.SelfClosingTag(sb, indent, "Unk02 " + FloatUtil.GetVector4XmlString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); + RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); + RelXml.ValueTag(sb, indent, "Unk05", Unk05.ToString()); + RelXml.ValueTag(sb, indent, "Unk06", Unk06.ToString()); + RelXml.ValueTag(sb, indent, "Unk07", Unk07.ToString()); + RelXml.ValueTag(sb, indent, "Unk08", Unk08.ToString()); + RelXml.ValueTag(sb, indent, "Unk09", Unk09.ToString()); + RelXml.ValueTag(sb, indent, "Unk10", Unk10.ToString()); + RelXml.ValueTag(sb, indent, "Unk11", Unk11.ToString()); + RelXml.ValueTag(sb, indent, "Unk12", FloatUtil.ToString(Unk12)); + RelXml.WriteRawArray(sb, Points, indent, "Points", "", RelXml.FormatVector2, 1); + } } [TC(typeof(EXP))] public class Dat151ShoreLineLake : Dat151RelData { - public uint Unk01 { get; set; } + public FlagsUint Unk01 { get; set; } public Vector4 Unk02 { get; set; } public int Unk03 { get; set; } public int Unk04 { get; set; } @@ -5444,10 +6978,19 @@ namespace CodeWalker.GameFiles bw.Write(Points[i].Y); } } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk01", "0x" + Unk01.Hex); + RelXml.SelfClosingTag(sb, indent, "Unk02 " + FloatUtil.GetVector4XmlString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); + RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); + RelXml.ValueTag(sb, indent, "Unk05", Unk05.ToString()); + RelXml.WriteRawArray(sb, Points, indent, "Points", "", RelXml.FormatVector2, 1); + } } [TC(typeof(EXP))] public class Dat151ShoreLineRiver : Dat151RelData { - public uint Unk01 { get; set; } + public FlagsUint Unk01 { get; set; } public Vector4 Unk02 { get; set; } public float Unk03 { get; set; } public uint Unk04 { get; set; } @@ -5504,10 +7047,20 @@ namespace CodeWalker.GameFiles bw.Write(Points[i].Z); } } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk01", "0x" + Unk01.Hex); + RelXml.SelfClosingTag(sb, indent, "Unk02 " + FloatUtil.GetVector4XmlString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", FloatUtil.ToString(Unk03)); + RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); + RelXml.ValueTag(sb, indent, "Unk05", Unk05.ToString()); + RelXml.ValueTag(sb, indent, "Unk06", Unk06.ToString()); + RelXml.WriteRawArray(sb, Points, indent, "Points", "", RelXml.FormatVector3, 1); + } } [TC(typeof(EXP))] public class Dat151ShoreLineOcean : Dat151RelData { - public uint Unk01 { get; set; } + public FlagsUint Unk01 { get; set; } public Vector4 Unk02 { get; set; } public float Unk03 { get; set; } public uint Unk04 { get; set; } @@ -5583,6 +7136,22 @@ namespace CodeWalker.GameFiles bw.Write(Points[i].Y); } } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk01", "0x" + Unk01.Hex); + RelXml.SelfClosingTag(sb, indent, "Unk02 " + FloatUtil.GetVector4XmlString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", FloatUtil.ToString(Unk03)); + RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); + RelXml.StringTag(sb, indent, "Unk05", RelXml.HashString(Unk05)); + RelXml.ValueTag(sb, indent, "Unk06", FloatUtil.ToString(Unk06)); + RelXml.ValueTag(sb, indent, "Unk07", FloatUtil.ToString(Unk07)); + RelXml.ValueTag(sb, indent, "Unk08", FloatUtil.ToString(Unk08)); + RelXml.ValueTag(sb, indent, "Unk09", FloatUtil.ToString(Unk09)); + RelXml.ValueTag(sb, indent, "Unk10", FloatUtil.ToString(Unk10)); + RelXml.ValueTag(sb, indent, "Unk11", FloatUtil.ToString(Unk11)); + RelXml.ValueTag(sb, indent, "Unk12", FloatUtil.ToString(Unk12)); + RelXml.WriteRawArray(sb, Points, indent, "Points", "", RelXml.FormatVector2, 1); + } } [TC(typeof(EXP))] public class Dat151ShoreLineList : Dat151RelData { @@ -5618,6 +7187,24 @@ namespace CodeWalker.GameFiles bw.Write(ShoreLines[i]); } } + public override void WriteXml(StringBuilder sb, int indent) + { + if (ShoreLineCount > 0) + { + RelXml.OpenTag(sb, indent, "ShoreLines"); + var cind = indent + 1; + for (int i = 0; i < ShoreLineCount; i++) + { + var iname = RelXml.HashString(ShoreLines[i]); + RelXml.StringTag(sb, cind, "Item", iname); + } + RelXml.CloseTag(sb, indent, "ShoreLines"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "ShoreLines"); + } + } } @@ -5641,6 +7228,9 @@ namespace CodeWalker.GameFiles // { // WriteTypeAndOffset(bw); // } + // public override void WriteXml(StringBuilder sb, int indent) + // { + // } //} @@ -5650,4 +7240,80 @@ namespace CodeWalker.GameFiles + + + + public class RelXml : MetaXmlBase + { + + public static string GetXml(RelFile rel) + { + StringBuilder sb = new StringBuilder(); + sb.AppendLine(XmlHeader); + + if ((rel != null) && (rel.RelDatasSorted != null)) + { + int indent = 0; + int cindent = 1; + var iindent = 2; + var icindent = 3; + var name = "Dat" + ((uint)rel.RelType).ToString(); + + OpenTag(sb, indent, name); + + ValueTag(sb, cindent, "Version", rel.DataUnkVal.ToString()); + + if (rel.NameTable != null) + { + OpenTag(sb, cindent, "NameTable"); + + foreach (var ntval in rel.NameTable) + { + StringTag(sb, iindent, "Item", ntval); + } + + CloseTag(sb, cindent, "NameTable"); + } + + OpenTag(sb, cindent, "Items"); + + foreach (var item in rel.RelDatasSorted) + { + var typeid = item.TypeID.ToString(); + switch (rel.RelType) + { + case RelDatFileType.Dat54DataEntries: + typeid = ((Dat54SoundType)item.TypeID).ToString(); + break; + case RelDatFileType.Dat149: + case RelDatFileType.Dat150: + case RelDatFileType.Dat151: + typeid = ((Dat151RelType)item.TypeID).ToString(); + break; + default: + break; + } + + OpenTag(sb, iindent, "Item type=\"" + typeid + "\""); + + StringTag(sb, icindent, "Name", item.Name ?? RelXml.HashString(item.NameHash)); + + item.WriteXml(sb, icindent); + + CloseTag(sb, iindent, "Item"); + } + + CloseTag(sb, cindent, "Items"); + + CloseTag(sb, indent, name); + + } + + return sb.ToString(); + } + + } + + + } diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index b0911e3..c3736de 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -2413,13 +2413,14 @@ namespace CodeWalker.GameFiles } } - int ctot = Dat151RelData.TotCount; - StringBuilder sbp = new StringBuilder(); - foreach (string s in Dat151RelData.FoundCoords) - { - sbp.AppendLine(s); - } - string posz = sbp.ToString(); + + //int ctot = Dat151RelData.TotCount; + //StringBuilder sbp = new StringBuilder(); + //foreach (string s in Dat151RelData.FoundCoords) + //{ + // sbp.AppendLine(s); + //} + //string posz = sbp.ToString(); string relstrs = sb.ToString(); string hashstrs = sbh.ToString(); @@ -2638,8 +2639,8 @@ namespace CodeWalker.GameFiles } - if (entry.NameLower == "clip_sets.ymt") - { } + //if (entry.NameLower == "clip_sets.ymt") + //{ } //if (entry.NameLower == "vfxinteriorinfo.ymt") //{ } //if (entry.NameLower == "vfxvehicleinfo.ymt") @@ -2650,8 +2651,8 @@ namespace CodeWalker.GameFiles //{ } //if (entry.NameLower == "vfxweaponinfo.ymt") //{ } - if (entry.NameLower == "physicstasks.ymt") - { } + //if (entry.NameLower == "physicstasks.ymt") + //{ } } } diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs index b262c78..6ccbb68 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs @@ -1726,6 +1726,10 @@ namespace CodeWalker.GameFiles { return FloatUtil.GetVector4String(v); } + public static string FormatHexByte(byte b) + { + return Convert.ToString(b, 16).ToUpperInvariant().PadLeft(2, '0'); //hex byte array + } public static string FormatHashSwap(MetaHash h) //for use with WriteItemArray, swaps endianness { diff --git a/CodeWalker.Core/GameFiles/Resources/ResourceBaseTypes.cs b/CodeWalker.Core/GameFiles/Resources/ResourceBaseTypes.cs index 9e9cff5..dabe245 100644 --- a/CodeWalker.Core/GameFiles/Resources/ResourceBaseTypes.cs +++ b/CodeWalker.Core/GameFiles/Resources/ResourceBaseTypes.cs @@ -194,6 +194,10 @@ namespace CodeWalker.GameFiles { return new FlagsByte(v); } + public static implicit operator byte(FlagsByte v) + { + return v.Value; //implicit conversion + } } [TypeConverter(typeof(ExpandableObjectConverter))] public struct FlagsUshort @@ -234,6 +238,11 @@ namespace CodeWalker.GameFiles { return new FlagsUshort(v); } + public static implicit operator ushort(FlagsUshort v) + { + return v.Value; //implicit conversion + } + } [TypeConverter(typeof(ExpandableObjectConverter))] public struct FlagsUint @@ -274,6 +283,11 @@ namespace CodeWalker.GameFiles { return new FlagsUint(v); } + public static implicit operator uint(FlagsUint v) + { + return v.Value; //implicit conversion + } + } diff --git a/Forms/RelForm.Designer.cs b/Forms/RelForm.Designer.cs index 3121662..90da09d 100644 --- a/Forms/RelForm.Designer.cs +++ b/Forms/RelForm.Designer.cs @@ -28,24 +28,29 @@ /// private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RelForm)); this.RelPropertyGrid = new CodeWalker.WinForms.PropertyGridFix(); this.MainTabControl = new System.Windows.Forms.TabControl(); this.DetailsTabPage = new System.Windows.Forms.TabPage(); this.NameTableTabPage = new System.Windows.Forms.TabPage(); this.MainTextBox = new CodeWalker.WinForms.TextBoxFix(); - this.CloseButton = new System.Windows.Forms.Button(); this.SearchTabPage = new System.Windows.Forms.TabPage(); - this.SearchResultsGrid = new CodeWalker.WinForms.PropertyGridFix(); + this.SearchTextRadio = new System.Windows.Forms.RadioButton(); + this.SearchHashRadio = new System.Windows.Forms.RadioButton(); this.label12 = new System.Windows.Forms.Label(); this.SearchTextBox = new System.Windows.Forms.TextBox(); this.SearchButton = new System.Windows.Forms.Button(); - this.SearchHashRadio = new System.Windows.Forms.RadioButton(); - this.SearchTextRadio = new System.Windows.Forms.RadioButton(); + this.SearchResultsGrid = new CodeWalker.WinForms.PropertyGridFix(); + this.CloseButton = new System.Windows.Forms.Button(); + this.XmlTabPage = new System.Windows.Forms.TabPage(); + this.XmlTextBox = new FastColoredTextBoxNS.FastColoredTextBox(); this.MainTabControl.SuspendLayout(); this.DetailsTabPage.SuspendLayout(); this.NameTableTabPage.SuspendLayout(); this.SearchTabPage.SuspendLayout(); + this.XmlTabPage.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.XmlTextBox)).BeginInit(); this.SuspendLayout(); // // RelPropertyGrid @@ -64,6 +69,7 @@ this.MainTabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); + this.MainTabControl.Controls.Add(this.XmlTabPage); this.MainTabControl.Controls.Add(this.DetailsTabPage); this.MainTabControl.Controls.Add(this.NameTableTabPage); this.MainTabControl.Controls.Add(this.SearchTabPage); @@ -111,17 +117,6 @@ this.MainTextBox.TabIndex = 1; this.MainTextBox.WordWrap = false; // - // CloseButton - // - this.CloseButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.CloseButton.Location = new System.Drawing.Point(584, 409); - this.CloseButton.Name = "CloseButton"; - this.CloseButton.Size = new System.Drawing.Size(75, 23); - this.CloseButton.TabIndex = 2; - this.CloseButton.Text = "Close"; - this.CloseButton.UseVisualStyleBackColor = true; - this.CloseButton.Click += new System.EventHandler(this.CloseButton_Click); - // // SearchTabPage // this.SearchTabPage.Controls.Add(this.SearchTextRadio); @@ -137,16 +132,29 @@ this.SearchTabPage.Text = "Search"; this.SearchTabPage.UseVisualStyleBackColor = true; // - // SearchResultsGrid + // SearchTextRadio // - this.SearchResultsGrid.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.SearchResultsGrid.HelpVisible = false; - this.SearchResultsGrid.Location = new System.Drawing.Point(3, 31); - this.SearchResultsGrid.Name = "SearchResultsGrid"; - this.SearchResultsGrid.Size = new System.Drawing.Size(647, 331); - this.SearchResultsGrid.TabIndex = 1; + this.SearchTextRadio.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.SearchTextRadio.AutoSize = true; + this.SearchTextRadio.Location = new System.Drawing.Point(343, 4); + this.SearchTextRadio.Name = "SearchTextRadio"; + this.SearchTextRadio.Size = new System.Drawing.Size(46, 17); + this.SearchTextRadio.TabIndex = 36; + this.SearchTextRadio.Text = "Text"; + this.SearchTextRadio.UseVisualStyleBackColor = true; + // + // SearchHashRadio + // + this.SearchHashRadio.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.SearchHashRadio.AutoSize = true; + this.SearchHashRadio.Checked = true; + this.SearchHashRadio.Location = new System.Drawing.Point(287, 4); + this.SearchHashRadio.Name = "SearchHashRadio"; + this.SearchHashRadio.Size = new System.Drawing.Size(50, 17); + this.SearchHashRadio.TabIndex = 35; + this.SearchHashRadio.TabStop = true; + this.SearchHashRadio.Text = "Hash"; + this.SearchHashRadio.UseVisualStyleBackColor = true; // // label12 // @@ -178,29 +186,77 @@ this.SearchButton.UseVisualStyleBackColor = true; this.SearchButton.Click += new System.EventHandler(this.SearchButton_Click); // - // SearchHashRadio + // SearchResultsGrid // - this.SearchHashRadio.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.SearchHashRadio.AutoSize = true; - this.SearchHashRadio.Checked = true; - this.SearchHashRadio.Location = new System.Drawing.Point(287, 4); - this.SearchHashRadio.Name = "SearchHashRadio"; - this.SearchHashRadio.Size = new System.Drawing.Size(50, 17); - this.SearchHashRadio.TabIndex = 35; - this.SearchHashRadio.TabStop = true; - this.SearchHashRadio.Text = "Hash"; - this.SearchHashRadio.UseVisualStyleBackColor = true; + this.SearchResultsGrid.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.SearchResultsGrid.HelpVisible = false; + this.SearchResultsGrid.Location = new System.Drawing.Point(3, 31); + this.SearchResultsGrid.Name = "SearchResultsGrid"; + this.SearchResultsGrid.Size = new System.Drawing.Size(647, 331); + this.SearchResultsGrid.TabIndex = 1; // - // SearchTextRadio + // CloseButton // - this.SearchTextRadio.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.SearchTextRadio.AutoSize = true; - this.SearchTextRadio.Location = new System.Drawing.Point(343, 4); - this.SearchTextRadio.Name = "SearchTextRadio"; - this.SearchTextRadio.Size = new System.Drawing.Size(46, 17); - this.SearchTextRadio.TabIndex = 36; - this.SearchTextRadio.Text = "Text"; - this.SearchTextRadio.UseVisualStyleBackColor = true; + this.CloseButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CloseButton.Location = new System.Drawing.Point(584, 409); + this.CloseButton.Name = "CloseButton"; + this.CloseButton.Size = new System.Drawing.Size(75, 23); + this.CloseButton.TabIndex = 2; + this.CloseButton.Text = "Close"; + this.CloseButton.UseVisualStyleBackColor = true; + this.CloseButton.Click += new System.EventHandler(this.CloseButton_Click); + // + // XmlTabPage + // + this.XmlTabPage.Controls.Add(this.XmlTextBox); + this.XmlTabPage.Location = new System.Drawing.Point(4, 22); + this.XmlTabPage.Name = "XmlTabPage"; + this.XmlTabPage.Size = new System.Drawing.Size(656, 368); + this.XmlTabPage.TabIndex = 3; + this.XmlTabPage.Text = "XML"; + this.XmlTabPage.UseVisualStyleBackColor = true; + // + // XmlTextBox + // + this.XmlTextBox.AutoCompleteBracketsList = new char[] { + '(', + ')', + '{', + '}', + '[', + ']', + '\"', + '\"', + '\'', + '\''}; + this.XmlTextBox.AutoIndentChars = false; + this.XmlTextBox.AutoIndentCharsPatterns = ""; + this.XmlTextBox.AutoIndentExistingLines = false; + this.XmlTextBox.AutoScrollMinSize = new System.Drawing.Size(27, 14); + this.XmlTextBox.BackBrush = null; + this.XmlTextBox.CharHeight = 14; + this.XmlTextBox.CharWidth = 8; + this.XmlTextBox.CommentPrefix = null; + this.XmlTextBox.Cursor = System.Windows.Forms.Cursors.IBeam; + this.XmlTextBox.DelayedEventsInterval = 1; + this.XmlTextBox.DisabledColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(180)))), ((int)(((byte)(180)))), ((int)(((byte)(180))))); + this.XmlTextBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.XmlTextBox.IsReplaceMode = false; + this.XmlTextBox.Language = FastColoredTextBoxNS.Language.XML; + this.XmlTextBox.LeftBracket = '<'; + this.XmlTextBox.LeftBracket2 = '('; + this.XmlTextBox.Location = new System.Drawing.Point(0, 0); + this.XmlTextBox.Name = "XmlTextBox"; + this.XmlTextBox.Paddings = new System.Windows.Forms.Padding(0); + this.XmlTextBox.RightBracket = '>'; + this.XmlTextBox.RightBracket2 = ')'; + this.XmlTextBox.SelectionColor = System.Drawing.Color.FromArgb(((int)(((byte)(60)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(255))))); + this.XmlTextBox.ServiceColors = ((FastColoredTextBoxNS.ServiceColors)(resources.GetObject("XmlTextBox.ServiceColors"))); + this.XmlTextBox.Size = new System.Drawing.Size(656, 368); + this.XmlTextBox.TabIndex = 2; + this.XmlTextBox.Zoom = 100; // // RelForm // @@ -218,6 +274,8 @@ this.NameTableTabPage.PerformLayout(); this.SearchTabPage.ResumeLayout(false); this.SearchTabPage.PerformLayout(); + this.XmlTabPage.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.XmlTextBox)).EndInit(); this.ResumeLayout(false); } @@ -237,5 +295,7 @@ private System.Windows.Forms.Label label12; private System.Windows.Forms.TextBox SearchTextBox; private System.Windows.Forms.Button SearchButton; + private System.Windows.Forms.TabPage XmlTabPage; + private FastColoredTextBoxNS.FastColoredTextBox XmlTextBox; } } \ No newline at end of file diff --git a/Forms/RelForm.cs b/Forms/RelForm.cs index 4c3e884..585b0e5 100644 --- a/Forms/RelForm.cs +++ b/Forms/RelForm.cs @@ -59,6 +59,7 @@ namespace CodeWalker.Forms CurrentFile = rel; + XmlTextBox.Text = RelXml.GetXml(rel); StringBuilder sb = new StringBuilder(); if (rel != null) diff --git a/Forms/RelForm.resx b/Forms/RelForm.resx index 1431f6b..4d27add 100644 --- a/Forms/RelForm.resx +++ b/Forms/RelForm.resx @@ -117,6 +117,24 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdGYXN0Q29sb3JlZFRleHRCb3gsIFZlcnNpb249Mi4xNi4yNC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWZiOGFhMTJiOTk0ZWY2MWIMAwAAAFFTeXN0 + ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2Vu + PWIwM2Y1ZjdmMTFkNTBhM2EFAQAAACJGYXN0Q29sb3JlZFRleHRCb3hOUy5TZXJ2aWNlQ29sb3JzBgAA + ACg8Q29sbGFwc2VNYXJrZXJGb3JlQ29sb3I+a19fQmFja2luZ0ZpZWxkKDxDb2xsYXBzZU1hcmtlckJh + Y2tDb2xvcj5rX19CYWNraW5nRmllbGQqPENvbGxhcHNlTWFya2VyQm9yZGVyQ29sb3I+a19fQmFja2lu + Z0ZpZWxkJjxFeHBhbmRNYXJrZXJGb3JlQ29sb3I+a19fQmFja2luZ0ZpZWxkJjxFeHBhbmRNYXJrZXJC + YWNrQ29sb3I+a19fQmFja2luZ0ZpZWxkKDxFeHBhbmRNYXJrZXJCb3JkZXJDb2xvcj5rX19CYWNraW5n + RmllbGQEBAQEBAQUU3lzdGVtLkRyYXdpbmcuQ29sb3IDAAAAFFN5c3RlbS5EcmF3aW5nLkNvbG9yAwAA + ABRTeXN0ZW0uRHJhd2luZy5Db2xvcgMAAAAUU3lzdGVtLkRyYXdpbmcuQ29sb3IDAAAAFFN5c3RlbS5E + cmF3aW5nLkNvbG9yAwAAABRTeXN0ZW0uRHJhd2luZy5Db2xvcgMAAAACAAAABfz///8UU3lzdGVtLkRy + YXdpbmcuQ29sb3IEAAAABG5hbWUFdmFsdWUKa25vd25Db2xvcgVzdGF0ZQEAAAAJBwcDAAAACgAAAAAA + AAAAlgABAAH7/////P///woAAAAAAAAAAKQAAQAB+v////z///8KAAAAAAAAAACWAAEAAfn////8//// + CgAAAAAAAAAATgABAAH4/////P///woAAAAAAAAAAKQAAQAB9/////z///8KAAAAAAAAAACWAAEACw== + + diff --git a/Project/Panels/EditAudioEmitterPanel.cs b/Project/Panels/EditAudioEmitterPanel.cs index 532746f..c878b5c 100644 --- a/Project/Panels/EditAudioEmitterPanel.cs +++ b/Project/Panels/EditAudioEmitterPanel.cs @@ -455,7 +455,7 @@ namespace CodeWalker.Project.Panels uint flags = 0; if (uint.TryParse(Flags0TextBox.Text, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out flags)) { - if (CurrentEmitter.AudioEmitter.Flags0.Value != flags) + if (CurrentEmitter.AudioEmitter.Flags0 != flags) { CurrentEmitter.AudioEmitter.Flags0 = flags; @@ -472,7 +472,7 @@ namespace CodeWalker.Project.Panels uint flags = 0; if (uint.TryParse(Flags1TextBox.Text, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out flags)) { - if (CurrentEmitter.AudioEmitter.Flags1.Value != flags) + if (CurrentEmitter.AudioEmitter.Flags1 != flags) { CurrentEmitter.AudioEmitter.Flags1 = flags; @@ -489,7 +489,7 @@ namespace CodeWalker.Project.Panels uint flags = 0; if (uint.TryParse(Flags2TextBox.Text, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out flags)) { - if (CurrentEmitter.AudioEmitter.Flags2.Value != flags) + if (CurrentEmitter.AudioEmitter.Flags2 != flags) { CurrentEmitter.AudioEmitter.Flags2 = flags; @@ -506,7 +506,7 @@ namespace CodeWalker.Project.Panels uint flags = 0; if (uint.TryParse(Flags3TextBox.Text, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out flags)) { - if (CurrentEmitter.AudioEmitter.Flags3.Value != flags) + if (CurrentEmitter.AudioEmitter.Flags3 != flags) { CurrentEmitter.AudioEmitter.Flags3 = flags; @@ -523,7 +523,7 @@ namespace CodeWalker.Project.Panels uint flags = 0; if (uint.TryParse(Flags4TextBox.Text, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out flags)) { - if (CurrentEmitter.AudioEmitter.Flags4.Value != flags) + if (CurrentEmitter.AudioEmitter.Flags4 != flags) { CurrentEmitter.AudioEmitter.Flags4 = flags; @@ -540,7 +540,7 @@ namespace CodeWalker.Project.Panels uint flags = 0; if (uint.TryParse(Flags5TextBox.Text, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out flags)) { - if (CurrentEmitter.AudioEmitter.Flags5.Value != flags) + if (CurrentEmitter.AudioEmitter.Flags5 != flags) { CurrentEmitter.AudioEmitter.Flags5 = flags; @@ -583,7 +583,7 @@ namespace CodeWalker.Project.Panels } CurrentEmitter.AudioEmitter.ExtParams = paramlist.ToArray(); - CurrentEmitter.AudioEmitter.ExtParamCount = (ushort)paramlist.Count; + CurrentEmitter.AudioEmitter.ExtParamsCount = (ushort)paramlist.Count; ProjectItemChanged(); } diff --git a/Project/Panels/EditAudioInteriorPanel.cs b/Project/Panels/EditAudioInteriorPanel.cs index 7c4f855..45cf086 100644 --- a/Project/Panels/EditAudioInteriorPanel.cs +++ b/Project/Panels/EditAudioInteriorPanel.cs @@ -128,7 +128,7 @@ namespace CodeWalker.Project.Panels uint flags = 0; if (uint.TryParse(Flags0TextBox.Text, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out flags)) { - if (CurrentInterior.Unk0.Value != flags) + if (CurrentInterior.Unk0 != flags) { CurrentInterior.Unk0 = flags; @@ -145,7 +145,7 @@ namespace CodeWalker.Project.Panels uint flags = 0; if (uint.TryParse(Flags1TextBox.Text, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out flags)) { - if (CurrentInterior.Unk1.Value != flags) + if (CurrentInterior.Unk1 != flags) { CurrentInterior.Unk1 = flags; @@ -162,7 +162,7 @@ namespace CodeWalker.Project.Panels uint flags = 0; if (uint.TryParse(Flags2TextBox.Text, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out flags)) { - if (CurrentInterior.Unk2.Value != flags) + if (CurrentInterior.Unk2 != flags) { CurrentInterior.Unk2 = flags; diff --git a/Project/Panels/EditAudioInteriorRoomPanel.cs b/Project/Panels/EditAudioInteriorRoomPanel.cs index c940e6c..24ff3ca 100644 --- a/Project/Panels/EditAudioInteriorRoomPanel.cs +++ b/Project/Panels/EditAudioInteriorRoomPanel.cs @@ -418,7 +418,7 @@ namespace CodeWalker.Project.Panels uint flags = 0; if (uint.TryParse(Flags0TextBox.Text, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out flags)) { - if (CurrentRoom.Flags0.Value != flags) + if (CurrentRoom.Flags0 != flags) { CurrentRoom.Flags0 = flags; diff --git a/Project/Panels/EditAudioZonePanel.cs b/Project/Panels/EditAudioZonePanel.cs index dada2ac..2cdcda9 100644 --- a/Project/Panels/EditAudioZonePanel.cs +++ b/Project/Panels/EditAudioZonePanel.cs @@ -445,7 +445,7 @@ namespace CodeWalker.Project.Panels uint flags = 0; if (uint.TryParse(Flags0TextBox.Text, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out flags)) { - if (CurrentZone.AudioZone.Flags0.Value != flags) + if (CurrentZone.AudioZone.Flags0 != flags) { CurrentZone.AudioZone.Flags0 = flags; @@ -463,7 +463,7 @@ namespace CodeWalker.Project.Panels uint flags = 0; if (uint.TryParse(Flags1TextBox.Text, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out flags)) { - if (CurrentZone.AudioZone.Flags1.Value != flags) + if (CurrentZone.AudioZone.Flags1 != flags) { CurrentZone.AudioZone.Flags1 = flags; @@ -480,7 +480,7 @@ namespace CodeWalker.Project.Panels uint flags = 0; if (uint.TryParse(Flags2TextBox.Text, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out flags)) { - if (CurrentZone.AudioZone.Flags2.Value != flags) + if (CurrentZone.AudioZone.Flags2 != flags) { CurrentZone.AudioZone.Flags2 = flags; diff --git a/Project/Panels/ProjectExplorerPanel.cs b/Project/Panels/ProjectExplorerPanel.cs index 41d4992..7725908 100644 --- a/Project/Panels/ProjectExplorerPanel.cs +++ b/Project/Panels/ProjectExplorerPanel.cs @@ -1577,6 +1577,7 @@ namespace CodeWalker.Project.Panels var tn = FindAudioZoneTreeNode(zone); if (tn != null) { + tn.Text = zone.NameHash.ToString(); } } public void UpdateAudioEmitterTreeNode(AudioPlacement emitter) @@ -1584,6 +1585,7 @@ namespace CodeWalker.Project.Panels var tn = FindAudioEmitterTreeNode(emitter); if (tn != null) { + tn.Text = emitter.NameHash.ToString(); } } public void UpdateAudioZoneListTreeNode(Dat151AmbientZoneList list) diff --git a/Project/ProjectForm.cs b/Project/ProjectForm.cs index 3f21af5..8a7e0c0 100644 --- a/Project/ProjectForm.cs +++ b/Project/ProjectForm.cs @@ -4575,7 +4575,7 @@ namespace CodeWalker.Project //AA800424 box, line //AA800420 sphere - zone.Flags0 = cp ? copy.AudioZone.Flags0 : 0xAA800424; + zone.Flags0 = cp ? copy.AudioZone.Flags0.Value : 0xAA800424; zone.Flags1 = cp ? copy.AudioZone.Flags1 : 0; zone.Flags2 = cp ? copy.AudioZone.Flags2 : 0; zone.Shape = cp ? copy.AudioZone.Shape : Dat151ZoneShape.Box; @@ -4697,23 +4697,23 @@ namespace CodeWalker.Project var emitter = new Dat151AmbientEmitter(CurrentAudioFile); - emitter.Flags0 = cp ? copy.AudioEmitter.Flags0 : 0xAA001100; - emitter.Flags5 = cp ? copy.AudioEmitter.Flags5 : 0xFFFFFFFF; + emitter.Flags0 = cp ? copy.AudioEmitter.Flags0.Value : 0xAA001100; + emitter.Flags5 = cp ? copy.AudioEmitter.Flags5.Value : 0xFFFFFFFF; emitter.InnerRad = cp ? copy.AudioEmitter.InnerRad : 0.0f; emitter.OuterRad = cp ? copy.AudioEmitter.OuterRad : 20.0f; emitter.Unk01 = cp ? copy.AudioEmitter.Unk01 : 1.0f; - emitter.Unk02 = cp ? copy.AudioEmitter.Unk02 : 0; - emitter.Unk03 = cp ? copy.AudioEmitter.Unk03 : 0; - emitter.Unk04 = cp ? copy.AudioEmitter.Unk04 : 160; - emitter.Unk05 = cp ? copy.AudioEmitter.Unk05 : 5; - emitter.Unk06 = cp ? copy.AudioEmitter.Unk06 : 0; - emitter.Unk07 = cp ? copy.AudioEmitter.Unk07 : 0; - emitter.Unk08 = cp ? copy.AudioEmitter.Unk08 : 0; - emitter.Unk09 = cp ? copy.AudioEmitter.Unk09 : 1; - emitter.Unk10 = cp ? copy.AudioEmitter.Unk10 : 1; - emitter.Unk11 = cp ? copy.AudioEmitter.Unk11 : 1; - emitter.Unk12 = cp ? copy.AudioEmitter.Unk12 : 100; - emitter.Unk13 = cp ? copy.AudioEmitter.Unk13 : 3; + emitter.Unk02 = cp ? copy.AudioEmitter.Unk02.Value : (byte)0; + emitter.Unk03 = cp ? copy.AudioEmitter.Unk03.Value : (byte)0; + emitter.Unk04 = cp ? copy.AudioEmitter.Unk04.Value : (byte)160; + emitter.Unk05 = cp ? copy.AudioEmitter.Unk05.Value : (byte)5; + emitter.Unk06 = cp ? copy.AudioEmitter.Unk06.Value : (ushort)0; + emitter.Unk07 = cp ? copy.AudioEmitter.Unk07.Value : (ushort)0; + emitter.Unk08 = cp ? copy.AudioEmitter.Unk08.Value : (byte)0; + emitter.Unk09 = cp ? copy.AudioEmitter.Unk09.Value : (byte)1; + emitter.Unk10 = cp ? copy.AudioEmitter.Unk10.Value : (byte)1; + emitter.Unk11 = cp ? copy.AudioEmitter.Unk11.Value : (byte)1; + emitter.Unk12 = cp ? copy.AudioEmitter.Unk12.Value : (byte)100; + emitter.Unk13 = cp ? copy.AudioEmitter.Unk13.Value : (byte)3; emitter.Name = "emitter1"; From ffb7399854ac76931b35e3552414528ab81683e0 Mon Sep 17 00:00:00 2001 From: dexy Date: Wed, 16 Jan 2019 22:19:55 +1100 Subject: [PATCH 099/158] Dat151 progress --- .../GameFiles/FileTypes/RelFile.cs | 3044 ++++++++++++++++- 1 file changed, 2957 insertions(+), 87 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index 641274e..5181bb1 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -535,8 +535,9 @@ namespace CodeWalker.GameFiles case Dat151RelType.RadioDjSpeechAction: return new Dat151RadioDjSpeechAction(d, br); case Dat151RelType.ForceRadioTrackAction: return new Dat151ForceRadioTrackAction(d, br); case Dat151RelType.Unk78: return new Dat151Unk78(d, br); - case Dat151RelType.RadioStationsDLC: return new Dat151RadioStationsDLC(d, br); // - case Dat151RelType.RadioDLC: return new Dat151RadioDLC(d, br); + case Dat151RelType.RadioStations: return new Dat151RadioStations(d, br); // + case Dat151RelType.RadioStation: return new Dat151RadioStation(d, br); + case Dat151RelType.RadioMusic: return new Dat151RadioMusic(d, br); case Dat151RelType.Unk49: return new Dat151Unk49(d, br); case Dat151RelType.Unk84: return new Dat151Unk84(d, br); case Dat151RelType.Unk86: return new Dat151Unk86(d, br); @@ -548,80 +549,79 @@ namespace CodeWalker.GameFiles case Dat151RelType.ShoreLineOcean: return new Dat151ShoreLineOcean(d, br); case Dat151RelType.ShoreLineList: return new Dat151ShoreLineList(d, br); - case Dat151RelType.Vehicle: - case Dat151RelType.VehicleEngine: - case Dat151RelType.Stream: //generic audio stream? - case Dat151RelType.Helicopter: //maybe - case Dat151RelType.SpeechParams: - case Dat151RelType.Weapon: - case Dat151RelType.DLCMusic: - case Dat151RelType.PedPVG: //maybe Ped Voice Group? - case Dat151RelType.Aeroplane: - case Dat151RelType.AnimalParams: - case Dat151RelType.VehicleScannerParams: //maybe not just vehicle - case Dat151RelType.Explosion: - case Dat151RelType.VehicleEngineGranular: //maybe not just vehicle - case Dat151RelType.Unk2: - case Dat151RelType.Unk7: - case Dat151RelType.Unk9: - case Dat151RelType.Unk11: - case Dat151RelType.Unk12: - case Dat151RelType.Unk13: - case Dat151RelType.Unk15: - case Dat151RelType.Unk16: - case Dat151RelType.Unk18: - case Dat151RelType.Unk22: - case Dat151RelType.Unk23: - case Dat151RelType.Unk27: - case Dat151RelType.Unk28: - case Dat151RelType.Unk29: - case Dat151RelType.Unk31: - case Dat151RelType.Unk33: - case Dat151RelType.Unk35: - case Dat151RelType.Unk36: - case Dat151RelType.Unk40: - case Dat151RelType.Unk41: - case Dat151RelType.Unk42: - case Dat151RelType.Unk45: - case Dat151RelType.Unk48: - case Dat151RelType.Unk51: - case Dat151RelType.Unk53: - case Dat151RelType.Unk54: - case Dat151RelType.Unk56: - case Dat151RelType.Unk59: - case Dat151RelType.Unk69: - case Dat151RelType.Unk70: - case Dat151RelType.Unk71: - case Dat151RelType.Unk72: - case Dat151RelType.Unk74: - case Dat151RelType.Unk75: - case Dat151RelType.Unk77: - case Dat151RelType.Unk79: - case Dat151RelType.Unk80: - case Dat151RelType.Unk82: - case Dat151RelType.Unk85: - case Dat151RelType.Unk95: - case Dat151RelType.Unk96: - case Dat151RelType.Unk99: - case Dat151RelType.Unk100: - case Dat151RelType.Unk101: - case Dat151RelType.Unk105: - case Dat151RelType.Unk106: - case Dat151RelType.Unk107: - case Dat151RelType.Unk108: - case Dat151RelType.Unk109: - case Dat151RelType.Unk110: - case Dat151RelType.Unk111: - case Dat151RelType.Unk112: - case Dat151RelType.Unk113: - case Dat151RelType.Unk114: - case Dat151RelType.Unk115: - case Dat151RelType.Unk116: - case Dat151RelType.Unk118: - case Dat151RelType.Unk119: - case Dat151RelType.Unk120: - case Dat151RelType.Unk121: - return new Dat151RelData(d, br); + case Dat151RelType.Unk114: return new Dat151Unk114(d, br); + case Dat151RelType.VehicleEngineGranular: return new Dat151VehicleEngineGranular(d, br); //maybe not just vehicle + case Dat151RelType.Vehicle: return new Dat151Vehicle(d, br); + case Dat151RelType.VehicleEngine: return new Dat151VehicleEngine(d, br); + case Dat151RelType.VehicleScannerParams: return new Dat151VehicleScannerParams(d, br); //maybe not just vehicle + case Dat151RelType.Stream: return new Dat151Stream(d, br); //generic audio stream? + + //case Dat151RelType.Helicopter: return new Dat151Helicopter(d, br); //maybe + //case Dat151RelType.SpeechParams: return new Dat151SpeechParams(d, br); + //case Dat151RelType.Weapon: return new Dat151Weapon(d, br); + //case Dat151RelType.PedPVG: return new Dat151PedPVG(d, br); //maybe Ped Voice Group? + //case Dat151RelType.Aeroplane: return new Dat151Aeroplane(d, br); + //case Dat151RelType.AnimalParams: return new Dat151AnimalParams(d, br); + //case Dat151RelType.Explosion: return new Dat151Explosion(d, br); + //case Dat151RelType.Unk2: return new Dat151Unk2(d, br); + //case Dat151RelType.Unk7: return new Dat151Unk7(d, br); + //case Dat151RelType.Unk9: return new Dat151Unk9(d, br); + //case Dat151RelType.Unk11: return new Dat151Unk11(d, br); + //case Dat151RelType.Unk12: return new Dat151Unk12(d, br); + //case Dat151RelType.Unk13: return new Dat151Unk13(d, br); + //case Dat151RelType.Unk15: return new Dat151Unk15(d, br); + //case Dat151RelType.Unk16: return new Dat151Unk16(d, br); + //case Dat151RelType.Unk18: return new Dat151Unk18(d, br); + //case Dat151RelType.Unk22: return new Dat151Unk22(d, br); + //case Dat151RelType.Unk23: return new Dat151Unk23(d, br); + //case Dat151RelType.Unk27: return new Dat151Unk27(d, br); + //case Dat151RelType.Unk28: return new Dat151Unk28(d, br); + //case Dat151RelType.Unk29: return new Dat151Unk29(d, br); + //case Dat151RelType.Unk31: return new Dat151Unk31(d, br); + //case Dat151RelType.Unk33: return new Dat151Unk33(d, br); + //case Dat151RelType.Unk35: return new Dat151Unk35(d, br); + //case Dat151RelType.Unk36: return new Dat151Unk36(d, br); + //case Dat151RelType.Unk40: return new Dat151Unk40(d, br); + //case Dat151RelType.Unk41: return new Dat151Unk41(d, br); + //case Dat151RelType.Unk42: return new Dat151Unk42(d, br); + //case Dat151RelType.Unk45: return new Dat151Unk45(d, br); + //case Dat151RelType.Unk48: return new Dat151Unk48(d, br); + //case Dat151RelType.Unk51: return new Dat151Unk51(d, br); + //case Dat151RelType.Unk53: return new Dat151Unk53(d, br); + //case Dat151RelType.Unk54: return new Dat151Unk54(d, br); + //case Dat151RelType.Unk56: return new Dat151Unk56(d, br); + //case Dat151RelType.Unk59: return new Dat151Unk59(d, br); + //case Dat151RelType.Unk69: return new Dat151Unk69(d, br); + //case Dat151RelType.Unk70: return new Dat151Unk70(d, br); + //case Dat151RelType.Unk71: return new Dat151Unk71(d, br); + //case Dat151RelType.Unk72: return new Dat151Unk72(d, br); + //case Dat151RelType.Unk74: return new Dat151Unk74(d, br); + //case Dat151RelType.Unk75: return new Dat151Unk75(d, br); + //case Dat151RelType.Unk77: return new Dat151Unk77(d, br); + //case Dat151RelType.Unk79: return new Dat151Unk79(d, br); + //case Dat151RelType.Unk80: return new Dat151Unk80(d, br); + //case Dat151RelType.Unk82: return new Dat151Unk82(d, br); + //case Dat151RelType.Unk85: return new Dat151Unk85(d, br); + //case Dat151RelType.Unk95: return new Dat151Unk95(d, br); + //case Dat151RelType.Unk96: return new Dat151Unk96(d, br); + //case Dat151RelType.Unk99: return new Dat151Unk99(d, br); + //case Dat151RelType.Unk100: return new Dat151Unk100(d, br); + //case Dat151RelType.Unk101: return new Dat151Unk101(d, br); + //case Dat151RelType.Unk105: return new Dat151Unk105(d, br); + //case Dat151RelType.Unk106: return new Dat151Unk106(d, br); + //case Dat151RelType.Unk107: return new Dat151Unk107(d, br); + //case Dat151RelType.Unk108: return new Dat151Unk108(d, br); + //case Dat151RelType.Unk109: return new Dat151Unk109(d, br); + //case Dat151RelType.Unk110: return new Dat151Unk110(d, br); + //case Dat151RelType.Unk111: return new Dat151Unk111(d, br); + //case Dat151RelType.Unk112: return new Dat151Unk112(d, br); + //case Dat151RelType.Unk113: return new Dat151Unk113(d, br); + //case Dat151RelType.Unk115: return new Dat151Unk115(d, br); + //case Dat151RelType.Unk116: return new Dat151Unk116(d, br); + //case Dat151RelType.Unk118: return new Dat151Unk118(d, br); + //case Dat151RelType.Unk119: return new Dat151Unk119(d, br); + //case Dat151RelType.Unk120: return new Dat151Unk120(d, br); + //case Dat151RelType.Unk121: return new Dat151Unk121(d, br); default: return new Dat151RelData(d, br); @@ -3175,9 +3175,9 @@ namespace CodeWalker.GameFiles Unk18 = 18, Unk22 = 22, Unk23 = 23, - RadioStationsDLC = 24, // - RadioDLC = 25, - DLCMusic = 26, + RadioStations = 24, // + RadioStation = 25, + RadioMusic = 26, Unk27 = 27, Unk28 = 28, Unk29 = 29, @@ -4335,17 +4335,17 @@ namespace CodeWalker.GameFiles return new uint[] { 8 }; } } - [TC(typeof(EXP))] public class Dat151RadioStationsDLC : Dat151RelData + [TC(typeof(EXP))] public class Dat151RadioStations : Dat151RelData { public uint StationsCount { get; set; } public MetaHash[] Stations { get; set; } - public Dat151RadioStationsDLC(RelFile rel) : base(rel) + public Dat151RadioStations(RelFile rel) : base(rel) { - Type = Dat151RelType.RadioStationsDLC; + Type = Dat151RelType.RadioStations; TypeID = (byte)Type; } - public Dat151RadioStationsDLC(RelData d, BinaryReader br) : base(d, br) + public Dat151RadioStations(RelData d, BinaryReader br) : base(d, br) { StationsCount = br.ReadUInt32(); var tracks = new MetaHash[StationsCount]; @@ -4397,7 +4397,7 @@ namespace CodeWalker.GameFiles return offsets.ToArray(); } } - [TC(typeof(EXP))] public class Dat151RadioDLC : Dat151RelData + [TC(typeof(EXP))] public class Dat151RadioStation : Dat151RelData { public FlagsUint Unk00 { get; set; } public uint Unk01 { get; set; } @@ -4416,12 +4416,12 @@ namespace CodeWalker.GameFiles public uint AudioTracksCount { get; set; } public MetaHash[] AudioTracks { get; set; } - public Dat151RadioDLC(RelFile rel) : base(rel) + public Dat151RadioStation(RelFile rel) : base(rel) { - Type = Dat151RelType.RadioDLC; + Type = Dat151RelType.RadioStation; TypeID = (byte)Type; } - public Dat151RadioDLC(RelData d, BinaryReader br) : base(d, br) + public Dat151RadioStation(RelData d, BinaryReader br) : base(d, br) { Unk00 = br.ReadUInt32(); Unk01 = br.ReadUInt32(); @@ -4515,6 +4515,138 @@ namespace CodeWalker.GameFiles return offsets.ToArray(); } } + [TC(typeof(EXP))] public class Dat151RadioMusic : Dat151RelData + { + public FlagsUint Unk00 { get; set; } + public byte MusicType { get; set; }//maybe int? + public uint Unk01 { get; set; } + public uint Unk02 { get; set; } + public byte Unk03 { get; set; } + public uint Unk04 { get; set; } + public uint Unk05 { get; set; } + public uint Unk06 { get; set; } + public uint Unk07 { get; set; } + public uint Unk08 { get; set; } + public uint Unk09 { get; set; } + public uint Unk10 { get; set; } + public uint Unk11 { get; set; } + public uint Unk12 { get; set; } + public uint Unk13 { get; set; } + public uint Unk14 { get; set; } + public uint Unk15 { get; set; } + public ushort Unk16 { get; set; } + public uint PlaylistCount { get; set; } + public Dat151HashPair[] Playlists { get; set; } + + + public Dat151RadioMusic(RelFile rel) : base(rel) + { + Type = Dat151RelType.RadioMusic; + TypeID = (byte)Type; + } + public Dat151RadioMusic(RelData d, BinaryReader br) : base(d, br) + { + Unk00 = br.ReadUInt32(); + MusicType = br.ReadByte(); + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadUInt32(); + Unk03 = br.ReadByte(); + Unk04 = br.ReadUInt32(); + Unk05 = br.ReadUInt32(); + Unk06 = br.ReadUInt32(); + Unk07 = br.ReadUInt32(); + Unk08 = br.ReadUInt32(); + Unk09 = br.ReadUInt32(); + Unk10 = br.ReadUInt32(); + Unk11 = br.ReadUInt32(); + Unk12 = br.ReadUInt32(); + Unk13 = br.ReadUInt32(); + Unk14 = br.ReadUInt32(); + Unk15 = br.ReadUInt32(); + Unk16 = br.ReadUInt16(); + PlaylistCount = br.ReadUInt32(); + + Dat151HashPair[] items = new Dat151HashPair[PlaylistCount]; + for (int i = 0; i < PlaylistCount; i++) + { + items[i] = new Dat151HashPair(br.ReadUInt32(), br.ReadUInt32()); + } + this.Playlists = items; + + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk00); + bw.Write(MusicType); + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); + bw.Write(Unk14); + bw.Write(Unk15); + bw.Write(Unk16); + bw.Write(PlaylistCount); + for (int i = 0; i < PlaylistCount; i++) + { + bw.Write(Playlists[i].Hash0); + bw.Write(Playlists[i].Hash1); + } + + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk00", "0x" + Unk00.Hex); + RelXml.ValueTag(sb, indent, "MusicType", MusicType.ToString()); + RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); + RelXml.ValueTag(sb, indent, "Unk02", Unk03.ToString()); + RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); + RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); + RelXml.ValueTag(sb, indent, "Unk05", Unk05.ToString()); + RelXml.ValueTag(sb, indent, "Unk06", Unk06.ToString()); + RelXml.ValueTag(sb, indent, "Unk07", Unk07.ToString()); + RelXml.ValueTag(sb, indent, "Unk08", Unk08.ToString()); + RelXml.ValueTag(sb, indent, "Unk09", Unk09.ToString()); + RelXml.ValueTag(sb, indent, "Unk10", Unk10.ToString()); + RelXml.ValueTag(sb, indent, "Unk11", Unk11.ToString()); + RelXml.ValueTag(sb, indent, "Unk12", Unk12.ToString()); + RelXml.ValueTag(sb, indent, "Unk13", Unk13.ToString()); + RelXml.ValueTag(sb, indent, "Unk14", Unk14.ToString()); + RelXml.ValueTag(sb, indent, "Unk15", Unk15.ToString()); + RelXml.ValueTag(sb, indent, "Unk16", Unk16.ToString()); + if (PlaylistCount > 0) + { + RelXml.OpenTag(sb, indent, "Playlists"); + var cind = indent + 1; + var cind2 = indent + 2; + for (int i = 0; i < PlaylistCount; i++) + { + RelXml.OpenTag(sb, cind, "Item"); + Playlists[i].WriteXml(sb, cind2); + RelXml.CloseTag(sb, cind, "Item"); + } + RelXml.CloseTag(sb, indent, "Playlists"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "Playlists"); + } + } + } [TC(typeof(EXP))] public class Dat151WeaponAudioItem : Dat151RelData { @@ -7208,6 +7340,2744 @@ namespace CodeWalker.GameFiles } + [TC(typeof(EXP))] public class Dat151Unk114 : Dat151RelData + { + public uint ItemCount { get; set; } + public ItemValue[] Items { get; set; } + + public struct ItemValue + { + public uint Unk0 { get; set; } + public uint Unk1 { get; set; } + + public ItemValue(uint unk0, uint unk1) + { + Unk0 = unk0; + Unk1 = unk1; + } + + public override string ToString() + { + return Unk0.ToString() + ": " + Unk1.ToString(); + } + } + + public Dat151Unk114(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk114; + TypeID = (byte)Type; + } + public Dat151Unk114(RelData d, BinaryReader br) : base(d, br) + { + ItemCount = br.ReadUInt32(); + Items = new ItemValue[ItemCount]; + for (int i = 0; i < ItemCount; i++) + { + Items[i] = new ItemValue(br.ReadUInt32(), br.ReadUInt32()); + } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) + { + bw.Write(Items[i].Unk0); + bw.Write(Items[i].Unk1); + } + } + public override void WriteXml(StringBuilder sb, int indent) + { + if (ItemCount > 0) + { + RelXml.OpenTag(sb, indent, "Items"); + var cind = indent + 1; + var cind2 = indent + 2; + for (int i = 0; i < ItemCount; i++) + { + RelXml.OpenTag(sb, cind, "Item"); + RelXml.ValueTag(sb, cind2, "Unk0", Items[i].Unk0.ToString()); + RelXml.ValueTag(sb, cind2, "Unk1", Items[i].Unk1.ToString()); + RelXml.CloseTag(sb, cind, "Item"); + } + RelXml.CloseTag(sb, indent, "Items"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "Items"); + } + } + } + [TC(typeof(EXP))] public class Dat151VehicleEngineGranular : Dat151RelData + { + public FlagsUint Unk00 { get; set; } + public int Unk01 { get; set; } + public MetaHash Unk02 { get; set; } + public MetaHash Unk03 { get; set; } + public int Unk04 { get; set; } + public int Unk05 { get; set; } + public int Unk06 { get; set; } + public int Unk07 { get; set; } + public int Unk08 { get; set; } + public int Unk09 { get; set; } + public int Unk10 { get; set; } + public int Unk11 { get; set; } + public int Unk12 { get; set; } + public int Unk13 { get; set; } + public int Unk14 { get; set; } + public int Unk15 { get; set; } + public int Unk16 { get; set; } + public int Unk17 { get; set; } + public int Unk18 { get; set; } + public int Unk19 { get; set; } + public int Unk20 { get; set; } + public int Unk21 { get; set; } + public float Unk22 { get; set; } + public float Unk23 { get; set; } + public float Unk24 { get; set; } + public float Unk25 { get; set; } + public float Unk26 { get; set; } + public float Unk27 { get; set; } + public float Unk28 { get; set; } + public int Unk29 { get; set; } + public int Unk30 { get; set; } + public MetaHash Unk31 { get; set; } + public MetaHash Unk32 { get; set; } + public MetaHash Unk33 { get; set; } + public MetaHash Unk34 { get; set; } + public MetaHash Unk35 { get; set; } + public MetaHash Unk36 { get; set; } + public MetaHash Unk37 { get; set; } + public int Unk38 { get; set; } + public int Unk39 { get; set; } + public MetaHash Unk40 { get; set; } + public MetaHash Unk41 { get; set; } + public int Unk42 { get; set; } + public int Unk43 { get; set; } + public int Unk44 { get; set; } + public MetaHash Unk45 { get; set; } + public int Unk46 { get; set; } + public int Unk47 { get; set; } + public int Unk48 { get; set; } + public int Unk49 { get; set; } + public int Unk50 { get; set; } + public int Unk51 { get; set; } + public MetaHash Unk52 { get; set; } + public MetaHash Unk53 { get; set; } + public int Unk54 { get; set; } + public int Unk55 { get; set; } + public int Unk56 { get; set; } + public int Unk57 { get; set; } + public int Unk58 { get; set; }//OPTIONAL!? only include this and next if either nonzero? + public float Unk59 { get; set; }//OPTIONAL!? + + public Dat151VehicleEngineGranular(RelFile rel) : base(rel) + { + Type = Dat151RelType.VehicleEngineGranular; + TypeID = (byte)Type; + } + public Dat151VehicleEngineGranular(RelData d, BinaryReader br) : base(d, br) + { + Unk00 = br.ReadUInt32(); + Unk01 = br.ReadInt32(); + Unk02 = br.ReadUInt32(); + Unk03 = br.ReadUInt32(); + Unk04 = br.ReadInt32(); + Unk05 = br.ReadInt32(); + Unk06 = br.ReadInt32(); + Unk07 = br.ReadInt32(); + Unk08 = br.ReadInt32(); + Unk09 = br.ReadInt32(); + Unk10 = br.ReadInt32(); + Unk11 = br.ReadInt32(); + Unk12 = br.ReadInt32(); + Unk13 = br.ReadInt32(); + Unk14 = br.ReadInt32(); + Unk15 = br.ReadInt32(); + Unk16 = br.ReadInt32(); + Unk17 = br.ReadInt32(); + Unk18 = br.ReadInt32(); + Unk19 = br.ReadInt32(); + Unk20 = br.ReadInt32(); + Unk21 = br.ReadInt32(); + Unk22 = br.ReadSingle(); + Unk23 = br.ReadSingle(); + Unk24 = br.ReadSingle(); + Unk25 = br.ReadSingle(); + Unk26 = br.ReadSingle(); + Unk27 = br.ReadSingle(); + Unk28 = br.ReadSingle(); + Unk29 = br.ReadInt32(); + Unk30 = br.ReadInt32(); + Unk31 = br.ReadUInt32(); + Unk32 = br.ReadUInt32(); + Unk33 = br.ReadUInt32(); + Unk34 = br.ReadUInt32(); + Unk35 = br.ReadUInt32(); + Unk36 = br.ReadUInt32(); + Unk37 = br.ReadUInt32(); + Unk38 = br.ReadInt32(); + Unk39 = br.ReadInt32(); + Unk40 = br.ReadUInt32(); + Unk41 = br.ReadUInt32(); + Unk42 = br.ReadInt32(); + Unk43 = br.ReadInt32(); + Unk44 = br.ReadInt32(); + Unk45 = br.ReadUInt32(); + Unk46 = br.ReadInt32(); + Unk47 = br.ReadInt32(); + Unk48 = br.ReadInt32(); + Unk49 = br.ReadInt32(); + Unk50 = br.ReadInt32(); + Unk51 = br.ReadInt32(); + Unk52 = br.ReadUInt32(); + Unk53 = br.ReadUInt32(); + Unk54 = br.ReadInt32(); + Unk55 = br.ReadInt32(); + Unk56 = br.ReadInt32(); + Unk57 = br.ReadInt32(); + + + + switch (this.Unk00) + { + case 0xAAAAA905: + case 0xAAAAA955: + case 0xAAAAA954: + case 0xAAAAA914: + case 0xAAAAA904: + case 0xAAAAA805: + case 0xAAAAA915: + case 0xAAAAA945: + case 0xAAAAA815: + case 0xAAAAA944: + case 0xAAAAA854: + break; + default: + break; + } + switch (this.Unk40) + { + case 1225003942: + break; + default: + break; + } + switch (this.Unk41) + { + case 1479769906: + break; + default: + break; + } + switch (this.Unk43) + { + case 5: + case 3: + case 4: + case 2: + case 6: + case 1: + break; + default: + break; + } + switch (this.Unk44) + { + case 2: + case 1: + case 3: + case 4: + break; + default: + break; + } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + switch (bytesleft) //any other way to tell?? + { + case 0: + break; + case 8: + Unk58 = br.ReadInt32(); + Unk59 = br.ReadSingle(); + switch (Unk58) + { + case 1: + case 2: + case 0: + break; + default: + break;//no hit here + } + if ((Unk58 == 0) && (Unk59 == 0)) + { }//no hit here + break; + default: + break;//no hit here + } + + if (bytesleft != 0) + { } + + if (Unk04 != 0) + { } + if (Unk09 != 0) + { } + if (Unk10 != 0) + { } + if (Unk11 != 0) + { } + if (Unk12 != 0) + { } + if (Unk38 != 0) + { } + if (Unk39 != 0) + { } + if (Unk47 != 0) + { } + if (Unk48 != 0) + { } + if (Unk50 != 0) + { } + if (Unk51 != 0) + { } + + + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + bw.Write(Unk00); + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); + bw.Write(Unk14); + bw.Write(Unk15); + bw.Write(Unk16); + bw.Write(Unk17); + bw.Write(Unk18); + bw.Write(Unk19); + bw.Write(Unk20); + bw.Write(Unk21); + bw.Write(Unk22); + bw.Write(Unk23); + bw.Write(Unk24); + bw.Write(Unk25); + bw.Write(Unk26); + bw.Write(Unk27); + bw.Write(Unk28); + bw.Write(Unk29); + bw.Write(Unk30); + bw.Write(Unk31); + bw.Write(Unk32); + bw.Write(Unk33); + bw.Write(Unk34); + bw.Write(Unk35); + bw.Write(Unk36); + bw.Write(Unk37); + bw.Write(Unk38); + bw.Write(Unk39); + bw.Write(Unk40); + bw.Write(Unk41); + bw.Write(Unk42); + bw.Write(Unk43); + bw.Write(Unk44); + bw.Write(Unk45); + bw.Write(Unk46); + bw.Write(Unk47); + bw.Write(Unk48); + bw.Write(Unk49); + bw.Write(Unk50); + bw.Write(Unk51); + bw.Write(Unk52); + bw.Write(Unk53); + bw.Write(Unk54); + bw.Write(Unk55); + bw.Write(Unk56); + bw.Write(Unk57); + if ((Unk58 != 0) || (Unk59 != 0))//how else to know?? seems hacky! + { + bw.Write(Unk58); + bw.Write(Unk59); + } + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk00", "0x" + Unk00.Hex); + RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); + RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); + RelXml.ValueTag(sb, indent, "Unk05", Unk05.ToString()); + RelXml.ValueTag(sb, indent, "Unk06", Unk06.ToString()); + RelXml.ValueTag(sb, indent, "Unk07", Unk07.ToString()); + RelXml.ValueTag(sb, indent, "Unk08", Unk08.ToString()); + RelXml.ValueTag(sb, indent, "Unk09", Unk09.ToString()); + RelXml.ValueTag(sb, indent, "Unk10", Unk10.ToString()); + RelXml.ValueTag(sb, indent, "Unk11", Unk11.ToString()); + RelXml.ValueTag(sb, indent, "Unk12", Unk12.ToString()); + RelXml.ValueTag(sb, indent, "Unk13", Unk13.ToString()); + RelXml.ValueTag(sb, indent, "Unk14", Unk14.ToString()); + RelXml.ValueTag(sb, indent, "Unk15", Unk15.ToString()); + RelXml.ValueTag(sb, indent, "Unk16", Unk16.ToString()); + RelXml.ValueTag(sb, indent, "Unk17", Unk17.ToString()); + RelXml.ValueTag(sb, indent, "Unk18", Unk18.ToString()); + RelXml.ValueTag(sb, indent, "Unk19", Unk19.ToString()); + RelXml.ValueTag(sb, indent, "Unk20", Unk20.ToString()); + RelXml.ValueTag(sb, indent, "Unk21", Unk21.ToString()); + RelXml.ValueTag(sb, indent, "Unk22", FloatUtil.ToString(Unk22)); + RelXml.ValueTag(sb, indent, "Unk23", FloatUtil.ToString(Unk23)); + RelXml.ValueTag(sb, indent, "Unk24", FloatUtil.ToString(Unk24)); + RelXml.ValueTag(sb, indent, "Unk25", FloatUtil.ToString(Unk25)); + RelXml.ValueTag(sb, indent, "Unk26", FloatUtil.ToString(Unk26)); + RelXml.ValueTag(sb, indent, "Unk27", FloatUtil.ToString(Unk27)); + RelXml.ValueTag(sb, indent, "Unk28", FloatUtil.ToString(Unk28)); + RelXml.ValueTag(sb, indent, "Unk29", Unk29.ToString()); + RelXml.ValueTag(sb, indent, "Unk30", Unk30.ToString()); + RelXml.StringTag(sb, indent, "Unk31", RelXml.HashString(Unk31)); + RelXml.StringTag(sb, indent, "Unk32", RelXml.HashString(Unk32)); + RelXml.StringTag(sb, indent, "Unk33", RelXml.HashString(Unk33)); + RelXml.StringTag(sb, indent, "Unk34", RelXml.HashString(Unk34)); + RelXml.StringTag(sb, indent, "Unk35", RelXml.HashString(Unk35)); + RelXml.StringTag(sb, indent, "Unk36", RelXml.HashString(Unk36)); + RelXml.StringTag(sb, indent, "Unk37", RelXml.HashString(Unk37)); + RelXml.ValueTag(sb, indent, "Unk38", Unk38.ToString()); + RelXml.ValueTag(sb, indent, "Unk39", Unk39.ToString()); + RelXml.StringTag(sb, indent, "Unk40", RelXml.HashString(Unk40)); + RelXml.StringTag(sb, indent, "Unk41", RelXml.HashString(Unk41)); + RelXml.ValueTag(sb, indent, "Unk42", Unk42.ToString()); + RelXml.ValueTag(sb, indent, "Unk43", Unk43.ToString()); + RelXml.ValueTag(sb, indent, "Unk44", Unk44.ToString()); + RelXml.StringTag(sb, indent, "Unk45", RelXml.HashString(Unk45)); + RelXml.ValueTag(sb, indent, "Unk46", Unk46.ToString()); + RelXml.ValueTag(sb, indent, "Unk47", Unk47.ToString()); + RelXml.ValueTag(sb, indent, "Unk48", Unk48.ToString()); + RelXml.ValueTag(sb, indent, "Unk49", Unk49.ToString()); + RelXml.ValueTag(sb, indent, "Unk50", Unk50.ToString()); + RelXml.ValueTag(sb, indent, "Unk51", Unk51.ToString()); + RelXml.StringTag(sb, indent, "Unk52", RelXml.HashString(Unk52)); + RelXml.StringTag(sb, indent, "Unk53", RelXml.HashString(Unk53)); + RelXml.ValueTag(sb, indent, "Unk54", Unk54.ToString()); + RelXml.ValueTag(sb, indent, "Unk55", Unk55.ToString()); + RelXml.ValueTag(sb, indent, "Unk56", Unk56.ToString()); + RelXml.ValueTag(sb, indent, "Unk57", Unk57.ToString()); + RelXml.ValueTag(sb, indent, "Unk58", Unk58.ToString()); + RelXml.ValueTag(sb, indent, "Unk59", FloatUtil.ToString(Unk59)); + } + } + [TC(typeof(EXP))] public class Dat151Vehicle : Dat151RelData + { + public FlagsUint Unk00 { get; set; } //2432719400 0x91005A28 + public MetaHash Engine { get; set; } + public MetaHash EngineGranular { get; set; } + public MetaHash Unk03 { get; set; } + public MetaHash DoorOpen { get; set; } + public MetaHash DoorClose { get; set; } + public MetaHash Unk06 { get; set; } + public MetaHash Unk07 { get; set; } + public MetaHash Unk08 { get; set; } + public float Unk09 { get; set; } + public MetaHash Unk10 { get; set; } + public MetaHash Unk11 { get; set; } + public float Unk12 { get; set; } + public float Unk13 { get; set; } + public MetaHash Unk14 { get; set; }//split? 0x00C2FB47.. + public int Unk15 { get; set; } + public int Unk16 { get; set; } + public int Unk17 { get; set; } + public MetaHash ScannerParams { get; set; } + public MetaHash JumpLandIntact { get; set; } + public MetaHash JumpLandLoose { get; set; } + public int Unk21 { get; set; } + public int Unk22 { get; set; } + public FlagsUint Unk23 { get; set; } + //public FlagsUshort Unk23a { get; set; }//0x0002 + //public FlagsUshort Unk23b { get; set; }//0x0801 + public MetaHash Unk24 { get; set; } + public MetaHash Unk25 { get; set; } + public MetaHash Unk26 { get; set; } + public FlagsUint Unk27 { get; set; } + //public FlagsUshort Unk27a { get; set; } + //public FlagsUshort Unk27b { get; set; } + public MetaHash Unk28 { get; set; } + public FlagsUint Unk29 { get; set; } + //public FlagsUshort Unk29a { get; set; }//0x0070 + //public FlagsUshort Unk29b { get; set; }//0x55fc + public MetaHash Unk30 { get; set; } + public MetaHash Unk31 { get; set; } + public MetaHash Unk32 { get; set; } + public MetaHash Unk33 { get; set; }//flags?? 0xB807DF3E + public MetaHash Unk34 { get; set; }//flags?? 0xE38FCF16 + public MetaHash Unk35 { get; set; } + public MetaHash Unk36 { get; set; } + public float Unk37 { get; set; } + public float Unk38 { get; set; } + public MetaHash Unk39 { get; set; } + public int Unk40 { get; set; } + public MetaHash Unk41 { get; set; }//flags? 0x49DF3CF8 0x8E53EC78 + public int Unk42 { get; set; } + public int Unk43 { get; set; } + public int Unk44 { get; set; } + public MetaHash Unk45 { get; set; } + public MetaHash Unk46 { get; set; } + public MetaHash Unk47 { get; set; }//flags? 0x83FC62DA + public MetaHash TurretSounds { get; set; } + public int Unk49 { get; set; } + public MetaHash Unk50 { get; set; }//flags? 0x65A95A8B, 0x85439DAD + public MetaHash Unk51 { get; set; }//flags? 0x6213618E, 0x990D0483 + public int Unk52 { get; set; } + public MetaHash Unk53 { get; set; }//flags? 0x04D73241, 0x7F471776 + public float Unk54 { get; set; } + public MetaHash Unk55 { get; set; } + public int Unk56 { get; set; } + public MetaHash Unk57 { get; set; } + public MetaHash Unk58 { get; set; } + public float Unk59 { get; set; } + public int Unk60 { get; set; } + public float Unk61 { get; set; } + public int Unk62 { get; set; } + public MetaHash Unk63 { get; set; }//flags?? 0xE38FCF16 + public int Unk64 { get; set; } + public ushort Unk65 { get; set; } + public ushort Unk66 { get; set; } + public MetaHash Unk67 { get; set; }//flags? 0x536F6CAC + public MetaHash Unk68 { get; set; }//flags?? 0xE38FCF16 + public MetaHash Unk69 { get; set; }//flags? 0x7C9B8D8C + public int Unk70 { get; set; } + public MetaHash Unk71 { get; set; }//flags?? 0xE38FCF16 + public MetaHash Unk72 { get; set; }//flags?? 0xE38FCF16 + + public Dat151Vehicle(RelFile rel) : base(rel) + { + Type = Dat151RelType.Vehicle; + TypeID = (byte)Type; + } + public Dat151Vehicle(RelData d, BinaryReader br) : base(d, br) + { + Unk00 = br.ReadUInt32(); //2432719400 0x91005A28 + Engine = br.ReadUInt32(); + EngineGranular = br.ReadUInt32(); + Unk03 = br.ReadUInt32(); + DoorOpen = br.ReadUInt32(); + DoorClose = br.ReadUInt32(); + Unk06 = br.ReadUInt32(); + Unk07 = br.ReadUInt32(); + Unk08 = br.ReadUInt32(); + Unk09 = br.ReadSingle(); + Unk10 = br.ReadUInt32(); + Unk11 = br.ReadUInt32(); + Unk12 = br.ReadSingle(); + Unk13 = br.ReadSingle(); + Unk14 = br.ReadUInt32();//split? 0x00C2FB47.. + Unk15 = br.ReadInt32(); + Unk16 = br.ReadInt32(); + Unk17 = br.ReadInt32(); + ScannerParams = br.ReadUInt32(); + JumpLandIntact = br.ReadUInt32(); + JumpLandLoose = br.ReadUInt32(); + Unk21 = br.ReadInt32(); + Unk22 = br.ReadInt32(); + Unk23 = br.ReadUInt32(); + //Unk23a = br.ReadUInt16();//0x0002 + //Unk23b = br.ReadUInt16();//0x0801 + Unk24 = br.ReadUInt32(); + Unk25 = br.ReadUInt32(); + Unk26 = br.ReadUInt32(); + Unk27 = br.ReadUInt32(); + //Unk27a = br.ReadUInt16(); + //Unk27b = br.ReadUInt16(); + Unk28 = br.ReadUInt32(); + Unk29 = br.ReadUInt32(); + //Unk29a = br.ReadUInt16();//0x0070 + //Unk29b = br.ReadUInt16();//0x55fc + Unk30 = br.ReadUInt32(); + Unk31 = br.ReadUInt32(); + Unk32 = br.ReadUInt32(); + Unk33 = br.ReadUInt32();//flags?? 0xB807DF3E + Unk34 = br.ReadUInt32();//flags?? 0xE38FCF16 + Unk35 = br.ReadUInt32(); + Unk36 = br.ReadUInt32(); + Unk37 = br.ReadSingle(); + Unk38 = br.ReadSingle(); + Unk39 = br.ReadUInt32(); + Unk40 = br.ReadInt32(); + Unk41 = br.ReadUInt32();//flags? 0x49DF3CF8 0x8E53EC78 + Unk42 = br.ReadInt32(); + Unk43 = br.ReadInt32(); + Unk44 = br.ReadInt32(); + Unk45 = br.ReadUInt32(); + Unk46 = br.ReadUInt32(); + Unk47 = br.ReadUInt32();//flags? 0x83FC62DA + TurretSounds = br.ReadUInt32(); + Unk49 = br.ReadInt32(); + Unk50 = br.ReadUInt32();//flags? 0x65A95A8B, 0x85439DAD + Unk51 = br.ReadUInt32();//flags? 0x6213618E, 0x990D0483 + Unk52 = br.ReadInt32(); + Unk53 = br.ReadUInt32();//flags? 0x04D73241, 0x7F471776 + Unk54 = br.ReadSingle(); + Unk55 = br.ReadUInt32(); + Unk56 = br.ReadInt32(); + Unk57 = br.ReadUInt32(); + Unk58 = br.ReadUInt32(); + Unk59 = br.ReadSingle(); + Unk60 = br.ReadInt32(); + Unk61 = br.ReadSingle(); + Unk62 = br.ReadInt32(); + + + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + switch (bytesleft) //any other way to tell..? + { + case 0: + break; + case 4: + Unk63 = br.ReadUInt32();//flags?? 0xE38FCF16 + if (Unk63 == 0) + { } + break; + case 36: + Unk63 = br.ReadUInt32();//flags?? 0xE38FCF16 + Unk64 = br.ReadInt32(); + Unk65 = br.ReadUInt16(); + Unk66 = br.ReadUInt16(); + Unk67 = br.ReadUInt32();//flags? 0x536F6CAC + Unk68 = br.ReadUInt32();//flags?? 0xE38FCF16 + Unk69 = br.ReadUInt32();//flags? 0x7C9B8D8C + Unk70 = br.ReadInt32(); + Unk71 = br.ReadUInt32();//flags?? 0xE38FCF16 + Unk72 = br.ReadUInt32();//flags?? 0xE38FCF16 + if (Unk70 != 0) + { } + if (Unk68 == 0) + { } + if (Unk71 == 0) + { } + if (Unk72 == 0) + { } + + break; + default: + break; + } + if (bytesleft != 0) + { } + + + + + if (Unk15 != 0) + { } + if (Unk16 != 0) + { } + if (Unk17 != 0) + { } + if (Unk40 != 0) + { } + if (Unk42 != 0) + { } + if (Unk43 != 0) + { } + if (Unk44 != 0) + { } + + switch (Unk21) + { + case 31: + case 0: + break; + default: + break; + } + switch (Unk22) + { + case 36: + case 100: + case 1: + break; + default: + break; + } + switch (Unk49) + { + case 8: + case 5: + case 3: + case 1: + case 4: + case 0: + case 6: + case 7: + break; + default: + break; + } + switch (Unk56) + { + case 2: + case 3: + case 0: + case 1: + break; + default: + break; + } + + } + public override void Write(BinaryWriter bw) + { + //base.Write(bw); + //return; + + WriteTypeAndOffset(bw); + + bw.Write(Unk00); //2432719400 0x91005A28 + bw.Write(Engine); + bw.Write(EngineGranular); + bw.Write(Unk03); + bw.Write(DoorOpen); + bw.Write(DoorClose); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); + bw.Write(Unk14);//split? 0x00C2FB47.. + bw.Write(Unk15); + bw.Write(Unk16); + bw.Write(Unk17); + bw.Write(ScannerParams); + bw.Write(JumpLandIntact); + bw.Write(JumpLandLoose); + bw.Write(Unk21); + bw.Write(Unk22); + bw.Write(Unk23); + //bw.Write(Unk23a);//0x0002 + //bw.Write(Unk23b);//0x0801 + bw.Write(Unk24); + bw.Write(Unk25); + bw.Write(Unk26); + bw.Write(Unk27); + //bw.Write(Unk27a); + //bw.Write(Unk27b); + bw.Write(Unk28); + bw.Write(Unk29); + //bw.Write(Unk29a);//0x0070 + //bw.Write(Unk29b);//0x55fc + bw.Write(Unk30); + bw.Write(Unk31); + bw.Write(Unk32); + bw.Write(Unk33);//flags?? 0xB807DF3E + bw.Write(Unk34);//flags?? 0xE38FCF16 + bw.Write(Unk35); + bw.Write(Unk36); + bw.Write(Unk37); + bw.Write(Unk38); + bw.Write(Unk39); + bw.Write(Unk40); + bw.Write(Unk41);//flags? 0x49DF3CF8 0x8E53EC78 + bw.Write(Unk42); + bw.Write(Unk43); + bw.Write(Unk44); + bw.Write(Unk45); + bw.Write(Unk46); + bw.Write(Unk47);//flags? 0x83FC62DA + bw.Write(TurretSounds); + bw.Write(Unk49); + bw.Write(Unk50);//flags? 0x65A95A8B, 0x85439DAD + bw.Write(Unk51);//flags? 0x6213618E, 0x990D0483 + bw.Write(Unk52); + bw.Write(Unk53);//flags? 0x04D73241, 0x7F471776 + bw.Write(Unk54); + bw.Write(Unk55); + bw.Write(Unk56); + bw.Write(Unk57); + bw.Write(Unk58); + bw.Write(Unk59); + bw.Write(Unk60); + bw.Write(Unk61); + bw.Write(Unk62); + + if (Unk63 != 0)//any better way? + { + bw.Write(Unk63); + + if ((Unk68 != 0)||(Unk71 != 0) ||(Unk72 != 0))//any better way? + { + bw.Write(Unk64); + bw.Write(Unk65); + bw.Write(Unk66); + bw.Write(Unk67);//flags? 0x536F6CAC + bw.Write(Unk68);//flags?? 0xE38FCF16 + bw.Write(Unk69);//flags? 0x7C9B8D8C + bw.Write(Unk70); + bw.Write(Unk71);//flags?? 0xE38FCF16 + bw.Write(Unk72);//flags?? 0xE38FCF16 + } + } + + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk00", "0x" + Unk00.Hex); + RelXml.StringTag(sb, indent, "Engine", RelXml.HashString(Engine)); + RelXml.StringTag(sb, indent, "EngineGranular", RelXml.HashString(EngineGranular)); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); + RelXml.StringTag(sb, indent, "DoorOpen", RelXml.HashString(DoorOpen)); + RelXml.StringTag(sb, indent, "DoorClose", RelXml.HashString(DoorClose)); + RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); + RelXml.StringTag(sb, indent, "Unk07", RelXml.HashString(Unk07)); + RelXml.StringTag(sb, indent, "Unk08", RelXml.HashString(Unk08)); + RelXml.ValueTag(sb, indent, "Unk09", FloatUtil.ToString(Unk09)); + RelXml.StringTag(sb, indent, "Unk10", RelXml.HashString(Unk10)); + RelXml.StringTag(sb, indent, "Unk11", RelXml.HashString(Unk11)); + RelXml.ValueTag(sb, indent, "Unk12", FloatUtil.ToString(Unk12)); + RelXml.ValueTag(sb, indent, "Unk13", FloatUtil.ToString(Unk13)); + RelXml.StringTag(sb, indent, "Unk14", RelXml.HashString(Unk14)); + RelXml.ValueTag(sb, indent, "Unk15", Unk15.ToString()); + RelXml.ValueTag(sb, indent, "Unk16", Unk16.ToString()); + RelXml.ValueTag(sb, indent, "Unk17", Unk17.ToString()); + RelXml.StringTag(sb, indent, "ScannerParams", RelXml.HashString(ScannerParams)); + RelXml.StringTag(sb, indent, "JumpLandIntact", RelXml.HashString(JumpLandIntact)); + RelXml.StringTag(sb, indent, "JumpLandLoose", RelXml.HashString(JumpLandLoose)); + RelXml.ValueTag(sb, indent, "Unk21", Unk21.ToString()); + RelXml.ValueTag(sb, indent, "Unk22", Unk22.ToString()); + RelXml.ValueTag(sb, indent, "Unk23", "0x" + Unk23.Hex); + RelXml.StringTag(sb, indent, "Unk24", RelXml.HashString(Unk24)); + RelXml.StringTag(sb, indent, "Unk25", RelXml.HashString(Unk25)); + RelXml.StringTag(sb, indent, "Unk26", RelXml.HashString(Unk26)); + RelXml.ValueTag(sb, indent, "Unk27", "0x" + Unk27.Hex); + RelXml.StringTag(sb, indent, "Unk28", RelXml.HashString(Unk28)); + RelXml.ValueTag(sb, indent, "Unk29", "0x" + Unk29.Hex); + RelXml.StringTag(sb, indent, "Unk30", RelXml.HashString(Unk30)); + RelXml.StringTag(sb, indent, "Unk31", RelXml.HashString(Unk31)); + RelXml.StringTag(sb, indent, "Unk32", RelXml.HashString(Unk32)); + RelXml.StringTag(sb, indent, "Unk33", RelXml.HashString(Unk33)); + RelXml.StringTag(sb, indent, "Unk34", RelXml.HashString(Unk34)); + RelXml.StringTag(sb, indent, "Unk35", RelXml.HashString(Unk35)); + RelXml.StringTag(sb, indent, "Unk36", RelXml.HashString(Unk36)); + RelXml.ValueTag(sb, indent, "Unk37", FloatUtil.ToString(Unk37)); + RelXml.ValueTag(sb, indent, "Unk38", FloatUtil.ToString(Unk38)); + RelXml.StringTag(sb, indent, "Unk39", RelXml.HashString(Unk39)); + RelXml.ValueTag(sb, indent, "Unk40", Unk40.ToString()); + RelXml.StringTag(sb, indent, "Unk41", RelXml.HashString(Unk41)); + RelXml.ValueTag(sb, indent, "Unk42", Unk42.ToString()); + RelXml.ValueTag(sb, indent, "Unk43", Unk43.ToString()); + RelXml.ValueTag(sb, indent, "Unk44", Unk44.ToString()); + RelXml.StringTag(sb, indent, "Unk45", RelXml.HashString(Unk45)); + RelXml.StringTag(sb, indent, "Unk46", RelXml.HashString(Unk46)); + RelXml.StringTag(sb, indent, "Unk47", RelXml.HashString(Unk47)); + RelXml.StringTag(sb, indent, "TurretSounds", RelXml.HashString(TurretSounds)); + RelXml.ValueTag(sb, indent, "Unk49", Unk49.ToString()); + RelXml.StringTag(sb, indent, "Unk50", RelXml.HashString(Unk50)); + RelXml.StringTag(sb, indent, "Unk51", RelXml.HashString(Unk51)); + RelXml.ValueTag(sb, indent, "Unk52", Unk52.ToString()); + RelXml.StringTag(sb, indent, "Unk53", RelXml.HashString(Unk53)); + RelXml.ValueTag(sb, indent, "Unk54", FloatUtil.ToString(Unk54)); + RelXml.StringTag(sb, indent, "Unk55", RelXml.HashString(Unk55)); + RelXml.ValueTag(sb, indent, "Unk56", Unk56.ToString()); + RelXml.StringTag(sb, indent, "Unk57", RelXml.HashString(Unk57)); + RelXml.StringTag(sb, indent, "Unk58", RelXml.HashString(Unk58)); + RelXml.ValueTag(sb, indent, "Unk59", FloatUtil.ToString(Unk59)); + RelXml.ValueTag(sb, indent, "Unk60", Unk60.ToString()); + RelXml.ValueTag(sb, indent, "Unk61", FloatUtil.ToString(Unk61)); + RelXml.ValueTag(sb, indent, "Unk62", Unk62.ToString()); + RelXml.StringTag(sb, indent, "Unk63", RelXml.HashString(Unk63)); + RelXml.ValueTag(sb, indent, "Unk64", Unk64.ToString()); + RelXml.ValueTag(sb, indent, "Unk65", Unk65.ToString()); + RelXml.ValueTag(sb, indent, "Unk66", Unk66.ToString()); + RelXml.StringTag(sb, indent, "Unk67", RelXml.HashString(Unk67)); + RelXml.StringTag(sb, indent, "Unk68", RelXml.HashString(Unk68)); + RelXml.StringTag(sb, indent, "Unk69", RelXml.HashString(Unk69)); + RelXml.ValueTag(sb, indent, "Unk70", Unk70.ToString()); + RelXml.StringTag(sb, indent, "Unk71", RelXml.HashString(Unk71)); + RelXml.StringTag(sb, indent, "Unk72", RelXml.HashString(Unk72)); + } + } + [TC(typeof(EXP))] public class Dat151VehicleEngine : Dat151RelData + { + public int Unk00 { get; set; } + public int Unk01 { get; set; } + public int Unk02 { get; set; } + public int Unk03 { get; set; } + public MetaHash Unk04 { get; set; } + public MetaHash Unk05 { get; set; } + public MetaHash Unk06 { get; set; } + public MetaHash Unk07 { get; set; } + public MetaHash Unk08 { get; set; } + public int Unk09 { get; set; } + public int Unk10 { get; set; } + public MetaHash Unk11 { get; set; } + public MetaHash Unk12 { get; set; }//flags? float? + public int Unk13 { get; set; } + public int Unk14 { get; set; } + public MetaHash Unk15 { get; set; } + public int Unk16 { get; set; } + public int Unk17 { get; set; } + public MetaHash Turbo { get; set; } + public int Unk19 { get; set; } + public int Unk20 { get; set; } + public MetaHash Unk21 { get; set; } + public int Unk22 { get; set; } + public int Unk23 { get; set; } + public MetaHash Transmission { get; set; } + public int Unk25 { get; set; } + public int Unk26 { get; set; } + public int Unk27 { get; set; } + public MetaHash Ignition { get; set; } + public MetaHash ShutDown { get; set; } + public MetaHash Unk30 { get; set; } + public MetaHash ExhaustPops { get; set; } + public MetaHash Unk32 { get; set; } + public int Unk33 { get; set; } + public int Unk34 { get; set; } + public MetaHash StartupMaster { get; set; } + public MetaHash Unk36 { get; set; } + public MetaHash Unk37 { get; set; } + public MetaHash Unk38 { get; set; } + public MetaHash Unk39 { get; set; }//flags? separate? + public MetaHash Unk40 { get; set; } + public MetaHash Unk41 { get; set; } + public int Unk42 { get; set; } + public MetaHash Unk43 { get; set; } + public MetaHash Unk44 { get; set; }//flags? separate? + public int Unk45 { get; set; } + public int Unk46 { get; set; } + public int Unk47 { get; set; } + public int Unk48 { get; set; } + public int Unk49 { get; set; } + public int Unk50 { get; set; } + public MetaHash DumpValve { get; set; } + public int Unk52 { get; set; } + public MetaHash TransmissionUpgraded { get; set; } + public MetaHash TurboUpgraded { get; set; } + public MetaHash Unk55 { get; set; } + public MetaHash ExhaustPopsUpgraded { get; set; } + + public Dat151VehicleEngine(RelFile rel) : base(rel) + { + Type = Dat151RelType.VehicleEngine; + TypeID = (byte)Type; + } + public Dat151VehicleEngine(RelData d, BinaryReader br) : base(d, br) + { + Unk00 = br.ReadInt32(); + Unk01 = br.ReadInt32(); + Unk02 = br.ReadInt32(); + Unk03 = br.ReadInt32(); + Unk04 = br.ReadUInt32(); + Unk05 = br.ReadUInt32(); + Unk06 = br.ReadUInt32(); + Unk07 = br.ReadUInt32(); + Unk08 = br.ReadUInt32(); + Unk09 = br.ReadInt32(); + Unk10 = br.ReadInt32(); + Unk11 = br.ReadUInt32(); + Unk12 = br.ReadUInt32();//flags? float? + Unk13 = br.ReadInt32(); + Unk14 = br.ReadInt32(); + Unk15 = br.ReadUInt32(); + Unk16 = br.ReadInt32(); + Unk17 = br.ReadInt32(); + Turbo = br.ReadUInt32(); + Unk19 = br.ReadInt32(); + Unk20 = br.ReadInt32(); + Unk21 = br.ReadUInt32(); + Unk22 = br.ReadInt32(); + Unk23 = br.ReadInt32(); + Transmission = br.ReadUInt32(); + Unk25 = br.ReadInt32(); + Unk26 = br.ReadInt32(); + Unk27 = br.ReadInt32(); + Ignition = br.ReadUInt32(); + ShutDown = br.ReadUInt32(); + Unk30 = br.ReadUInt32(); + ExhaustPops = br.ReadUInt32(); + Unk32 = br.ReadUInt32(); + Unk33 = br.ReadInt32(); + Unk34 = br.ReadInt32(); + StartupMaster = br.ReadUInt32(); + Unk36 = br.ReadUInt32(); + Unk37 = br.ReadUInt32(); + Unk38 = br.ReadUInt32(); + Unk39 = br.ReadUInt32();//flags? separate? + Unk40 = br.ReadUInt32(); + Unk41 = br.ReadUInt32(); + Unk42 = br.ReadInt32(); + Unk43 = br.ReadUInt32(); + Unk44 = br.ReadUInt32();//flags? separate? + Unk45 = br.ReadInt32(); + Unk46 = br.ReadInt32(); + Unk47 = br.ReadInt32(); + Unk48 = br.ReadInt32(); + Unk49 = br.ReadInt32(); + Unk50 = br.ReadInt32(); + DumpValve = br.ReadUInt32();//float? + Unk52 = br.ReadInt32(); + TransmissionUpgraded = br.ReadUInt32(); + TurboUpgraded = br.ReadUInt32(); + Unk55 = br.ReadUInt32(); + ExhaustPopsUpgraded = br.ReadUInt32(); + + if ((Unk38 != 0) && (Unk38 != 0x4022A088))//float? + { } + if (Unk46 != 0) + { } + if (Unk47 != 0) + { } + if (Unk49 != 0) + { } + if (Unk50 != 0) + { } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk00); + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12);//flags? float? + bw.Write(Unk13); + bw.Write(Unk14); + bw.Write(Unk15); + bw.Write(Unk16); + bw.Write(Unk17); + bw.Write(Turbo); + bw.Write(Unk19); + bw.Write(Unk20); + bw.Write(Unk21); + bw.Write(Unk22); + bw.Write(Unk23); + bw.Write(Transmission); + bw.Write(Unk25); + bw.Write(Unk26); + bw.Write(Unk27); + bw.Write(Ignition); + bw.Write(ShutDown); + bw.Write(Unk30); + bw.Write(ExhaustPops); + bw.Write(Unk32); + bw.Write(Unk33); + bw.Write(Unk34); + bw.Write(StartupMaster); + bw.Write(Unk36); + bw.Write(Unk37); + bw.Write(Unk38); + bw.Write(Unk39);//flags? separate? + bw.Write(Unk40); + bw.Write(Unk41); + bw.Write(Unk42); + bw.Write(Unk43); + bw.Write(Unk44);//flags? separate? + bw.Write(Unk45); + bw.Write(Unk46); + bw.Write(Unk47); + bw.Write(Unk48); + bw.Write(Unk49); + bw.Write(Unk50); + bw.Write(DumpValve);//float? + bw.Write(Unk52); + bw.Write(TransmissionUpgraded); + bw.Write(TurboUpgraded); + bw.Write(Unk55); + bw.Write(ExhaustPopsUpgraded); + + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk00", Unk00.ToString()); + RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); + RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); + RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); + RelXml.StringTag(sb, indent, "Unk04", RelXml.HashString(Unk04)); + RelXml.StringTag(sb, indent, "Unk05", RelXml.HashString(Unk05)); + RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); + RelXml.StringTag(sb, indent, "Unk07", RelXml.HashString(Unk07)); + RelXml.StringTag(sb, indent, "Unk08", RelXml.HashString(Unk08)); + RelXml.ValueTag(sb, indent, "Unk09", Unk09.ToString()); + RelXml.ValueTag(sb, indent, "Unk10", Unk10.ToString()); + RelXml.StringTag(sb, indent, "Unk11", RelXml.HashString(Unk11)); + RelXml.StringTag(sb, indent, "Unk12", RelXml.HashString(Unk12)); + RelXml.ValueTag(sb, indent, "Unk13", Unk13.ToString()); + RelXml.ValueTag(sb, indent, "Unk14", Unk14.ToString()); + RelXml.StringTag(sb, indent, "Unk15", RelXml.HashString(Unk15)); + RelXml.ValueTag(sb, indent, "Unk16", Unk16.ToString()); + RelXml.ValueTag(sb, indent, "Unk17", Unk17.ToString()); + RelXml.StringTag(sb, indent, "Turbo", RelXml.HashString(Turbo)); + RelXml.ValueTag(sb, indent, "Unk19", Unk19.ToString()); + RelXml.ValueTag(sb, indent, "Unk20", Unk20.ToString()); + RelXml.StringTag(sb, indent, "Unk21", RelXml.HashString(Unk21)); + RelXml.ValueTag(sb, indent, "Unk22", Unk22.ToString()); + RelXml.ValueTag(sb, indent, "Unk23", Unk23.ToString()); + RelXml.StringTag(sb, indent, "Transmission", RelXml.HashString(Transmission)); + RelXml.ValueTag(sb, indent, "Unk25", Unk25.ToString()); + RelXml.ValueTag(sb, indent, "Unk26", Unk26.ToString()); + RelXml.ValueTag(sb, indent, "Unk27", Unk27.ToString()); + RelXml.StringTag(sb, indent, "Ignition", RelXml.HashString(Ignition)); + RelXml.StringTag(sb, indent, "ShutDown", RelXml.HashString(ShutDown)); + RelXml.StringTag(sb, indent, "Unk30", RelXml.HashString(Unk30)); + RelXml.StringTag(sb, indent, "Unk31", RelXml.HashString(ExhaustPops)); + RelXml.StringTag(sb, indent, "Unk32", RelXml.HashString(Unk32)); + RelXml.ValueTag(sb, indent, "Unk33", Unk33.ToString()); + RelXml.ValueTag(sb, indent, "Unk34", Unk34.ToString()); + RelXml.StringTag(sb, indent, "StartupMaster", RelXml.HashString(StartupMaster)); + RelXml.StringTag(sb, indent, "Unk36", RelXml.HashString(Unk36)); + RelXml.StringTag(sb, indent, "Unk37", RelXml.HashString(Unk37)); + RelXml.StringTag(sb, indent, "Unk38", RelXml.HashString(Unk38)); + RelXml.StringTag(sb, indent, "Unk39", RelXml.HashString(Unk39)); + RelXml.StringTag(sb, indent, "Unk40", RelXml.HashString(Unk40)); + RelXml.StringTag(sb, indent, "Unk41", RelXml.HashString(Unk41)); + RelXml.ValueTag(sb, indent, "Unk42", Unk42.ToString()); + RelXml.StringTag(sb, indent, "Unk43", RelXml.HashString(Unk43)); + RelXml.StringTag(sb, indent, "Unk44", RelXml.HashString(Unk44)); + RelXml.ValueTag(sb, indent, "Unk45", Unk45.ToString()); + RelXml.ValueTag(sb, indent, "Unk46", Unk46.ToString()); + RelXml.ValueTag(sb, indent, "Unk47", Unk47.ToString()); + RelXml.ValueTag(sb, indent, "Unk48", Unk48.ToString()); + RelXml.ValueTag(sb, indent, "Unk49", Unk49.ToString()); + RelXml.ValueTag(sb, indent, "Unk50", Unk50.ToString()); + RelXml.StringTag(sb, indent, "DumpValve", RelXml.HashString(DumpValve)); + RelXml.ValueTag(sb, indent, "Unk52", Unk52.ToString()); + RelXml.StringTag(sb, indent, "TransmissionUpgraded", RelXml.HashString(TransmissionUpgraded)); + RelXml.StringTag(sb, indent, "TurboUpgraded", RelXml.HashString(TurboUpgraded)); + RelXml.StringTag(sb, indent, "Unk55", RelXml.HashString(Unk55)); + RelXml.StringTag(sb, indent, "ExhaustPopsUpgraded", RelXml.HashString(ExhaustPopsUpgraded)); + } + } + [TC(typeof(EXP))] public class Dat151VehicleScannerParams : Dat151RelData + { + public FlagsUint Flags { get; set; } + public int ParamCount { get; set; } + public Param[] Params; + + public class Param + { + public MetaHash Unk01 { get; set; } + public MetaHash Unk02 { get; set; } + public MetaHash Unk03 { get; set; } + public MetaHash Unk04 { get; set; } + } + + public Dat151VehicleScannerParams(RelFile rel) : base(rel) + { + Type = Dat151RelType.VehicleScannerParams; + TypeID = (byte)Type; + } + public Dat151VehicleScannerParams(RelData d, BinaryReader br) : base(d, br) + { + Flags = br.ReadUInt32(); + ParamCount = br.ReadInt32(); + Params = new Param[ParamCount]; + for (int i = 0; i < ParamCount; i++) + { + var p = new Param(); + p.Unk01 = br.ReadUInt32(); + p.Unk02 = br.ReadUInt32(); + p.Unk03 = br.ReadUInt32(); + p.Unk04 = br.ReadUInt32(); + Params[i] = p; + } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Flags); + bw.Write(ParamCount); + for (int i = 0; i < ParamCount; i++) + { + var p = Params[i]; + bw.Write(p.Unk01); + bw.Write(p.Unk02); + bw.Write(p.Unk03); + bw.Write(p.Unk04); + } + + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + if (ParamCount > 0) + { + RelXml.OpenTag(sb, indent, "Params"); + var cind = indent + 1; + var cind2 = indent + 2; + for (int i = 0; i < ParamCount; i++) + { + var p = Params[i]; + RelXml.OpenTag(sb, cind, "Item"); + RelXml.StringTag(sb, cind2, "Unk01", RelXml.HashString(p.Unk01)); + RelXml.StringTag(sb, cind2, "Unk02", RelXml.HashString(p.Unk02)); + RelXml.StringTag(sb, cind2, "Unk03", RelXml.HashString(p.Unk03)); + RelXml.StringTag(sb, cind2, "Unk04", RelXml.HashString(p.Unk04)); + RelXml.CloseTag(sb, cind, "Item"); + } + RelXml.CloseTag(sb, indent, "Params"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "Params"); + } + } + } + [TC(typeof(EXP))] public class Dat151Stream : Dat151RelData + { + public FlagsUint Flags { get; set; }//flags + public MetaHash Unk01 { get; set; } + public MetaHash Unk02 { get; set; } + public float Unk03 { get; set; } + public float Unk04 { get; set; } + public float Unk05 { get; set; } + public float Unk06 { get; set; } + public float Unk07 { get; set; } + public int Unk08 { get; set; } + public int Unk09 { get; set; } + public int Unk10 { get; set; } + public MetaHash Unk11 { get; set; } + public MetaHash Unk12 { get; set; } + public MetaHash Unk13 { get; set; } + public float Unk14 { get; set; } + public ushort Unk15 { get; set; } + public ushort Unk16 { get; set; } + public float Unk17 { get; set; } + public MetaHash Unk18 { get; set; } + public int Unk19 { get; set; } + public FlagsUint Unk20 { get; set; }//0x05A00000 + public float Unk21 { get; set; } + public float Unk22 { get; set; } + + public Dat151Stream(RelFile rel) : base(rel) + { + Type = Dat151RelType.Stream; + TypeID = (byte)Type; + } + public Dat151Stream(RelData d, BinaryReader br) : base(d, br) + { + Flags = br.ReadUInt32();//flags + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadUInt32(); + Unk03 = br.ReadSingle(); + Unk04 = br.ReadSingle(); + Unk05 = br.ReadSingle(); + Unk06 = br.ReadSingle(); + Unk07 = br.ReadSingle(); + Unk08 = br.ReadInt32(); + Unk09 = br.ReadInt32(); + Unk10 = br.ReadInt32(); + Unk11 = br.ReadUInt32(); + Unk12 = br.ReadUInt32(); + Unk13 = br.ReadUInt32(); + Unk14 = br.ReadSingle(); + Unk15 = br.ReadUInt16(); + Unk16 = br.ReadUInt16(); + Unk17 = br.ReadSingle(); + Unk18 = br.ReadUInt32(); + Unk19 = br.ReadInt32(); + Unk20 = br.ReadUInt32();//0x05A00000 + Unk21 = br.ReadSingle(); + Unk22 = br.ReadSingle(); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + bw.Write(Flags);//flags + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); + bw.Write(Unk14); + bw.Write(Unk15); + bw.Write(Unk16); + bw.Write(Unk17); + bw.Write(Unk18); + bw.Write(Unk19); + bw.Write(Unk20);//0x05A00000 + bw.Write(Unk21); + bw.Write(Unk22); + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", FloatUtil.ToString(Unk03)); + RelXml.ValueTag(sb, indent, "Unk04", FloatUtil.ToString(Unk04)); + RelXml.ValueTag(sb, indent, "Unk05", FloatUtil.ToString(Unk05)); + RelXml.ValueTag(sb, indent, "Unk06", FloatUtil.ToString(Unk06)); + RelXml.ValueTag(sb, indent, "Unk07", FloatUtil.ToString(Unk07)); + RelXml.ValueTag(sb, indent, "Unk08", Unk08.ToString()); + RelXml.ValueTag(sb, indent, "Unk09", Unk09.ToString()); + RelXml.ValueTag(sb, indent, "Unk10", Unk10.ToString()); + RelXml.StringTag(sb, indent, "Unk11", RelXml.HashString(Unk11)); + RelXml.StringTag(sb, indent, "Unk12", RelXml.HashString(Unk12)); + RelXml.StringTag(sb, indent, "Unk13", RelXml.HashString(Unk13)); + RelXml.ValueTag(sb, indent, "Unk14", FloatUtil.ToString(Unk14)); + RelXml.ValueTag(sb, indent, "Unk15", Unk15.ToString()); + RelXml.ValueTag(sb, indent, "Unk16", Unk16.ToString()); + RelXml.ValueTag(sb, indent, "Unk17", FloatUtil.ToString(Unk17)); + RelXml.StringTag(sb, indent, "Unk18", RelXml.HashString(Unk18)); + RelXml.ValueTag(sb, indent, "Unk19", Unk19.ToString()); + RelXml.ValueTag(sb, indent, "Unk20", "0x" + Unk20.Hex); + RelXml.ValueTag(sb, indent, "Unk21", FloatUtil.ToString(Unk21)); + RelXml.ValueTag(sb, indent, "Unk22", FloatUtil.ToString(Unk22)); + } + } + + + + + + + + + + + + [TC(typeof(EXP))] public class Dat151Unk2 : Dat151RelData + { + public Dat151Unk2(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk2; + TypeID = (byte)Type; + } + public Dat151Unk2(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk7 : Dat151RelData + { + public Dat151Unk7(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk7; + TypeID = (byte)Type; + } + public Dat151Unk7(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Helicopter : Dat151RelData + { + public Dat151Helicopter(RelFile rel) : base(rel) + { + Type = Dat151RelType.Helicopter; + TypeID = (byte)Type; + } + public Dat151Helicopter(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk9 : Dat151RelData + { + public Dat151Unk9(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk9; + TypeID = (byte)Type; + } + public Dat151Unk9(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk11 : Dat151RelData + { + public Dat151Unk11(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk11; + TypeID = (byte)Type; + } + public Dat151Unk11(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk12 : Dat151RelData + { + public Dat151Unk12(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk12; + TypeID = (byte)Type; + } + public Dat151Unk12(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk13 : Dat151RelData + { + public Dat151Unk13(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk13; + TypeID = (byte)Type; + } + public Dat151Unk13(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151SpeechParams : Dat151RelData + { + public Dat151SpeechParams(RelFile rel) : base(rel) + { + Type = Dat151RelType.SpeechParams; + TypeID = (byte)Type; + } + public Dat151SpeechParams(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk15 : Dat151RelData + { + public Dat151Unk15(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk15; + TypeID = (byte)Type; + } + public Dat151Unk15(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk16 : Dat151RelData + { + public Dat151Unk16(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk16; + TypeID = (byte)Type; + } + public Dat151Unk16(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Weapon : Dat151RelData + { + public Dat151Weapon(RelFile rel) : base(rel) + { + Type = Dat151RelType.Weapon; + TypeID = (byte)Type; + } + public Dat151Weapon(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk18 : Dat151RelData + { + public Dat151Unk18(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk18; + TypeID = (byte)Type; + } + public Dat151Unk18(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk22 : Dat151RelData + { + public Dat151Unk22(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk22; + TypeID = (byte)Type; + } + public Dat151Unk22(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk23 : Dat151RelData + { + public Dat151Unk23(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk23; + TypeID = (byte)Type; + } + public Dat151Unk23(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk27 : Dat151RelData + { + public Dat151Unk27(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk27; + TypeID = (byte)Type; + } + public Dat151Unk27(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk28 : Dat151RelData + { + public Dat151Unk28(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk28; + TypeID = (byte)Type; + } + public Dat151Unk28(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk29 : Dat151RelData + { + public Dat151Unk29(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk29; + TypeID = (byte)Type; + } + public Dat151Unk29(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151PedPVG : Dat151RelData + { + public Dat151PedPVG(RelFile rel) : base(rel) + { + Type = Dat151RelType.PedPVG; + TypeID = (byte)Type; + } + public Dat151PedPVG(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk31 : Dat151RelData + { + public Dat151Unk31(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk31; + TypeID = (byte)Type; + } + public Dat151Unk31(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk33 : Dat151RelData + { + public Dat151Unk33(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk33; + TypeID = (byte)Type; + } + public Dat151Unk33(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk35 : Dat151RelData + { + public Dat151Unk35(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk35; + TypeID = (byte)Type; + } + public Dat151Unk35(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk36 : Dat151RelData + { + public Dat151Unk36(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk36; + TypeID = (byte)Type; + } + public Dat151Unk36(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk40 : Dat151RelData + { + public Dat151Unk40(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk40; + TypeID = (byte)Type; + } + public Dat151Unk40(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk41 : Dat151RelData + { + public Dat151Unk41(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk41; + TypeID = (byte)Type; + } + public Dat151Unk41(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk42 : Dat151RelData + { + public Dat151Unk42(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk42; + TypeID = (byte)Type; + } + public Dat151Unk42(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk45 : Dat151RelData + { + public Dat151Unk45(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk45; + TypeID = (byte)Type; + } + public Dat151Unk45(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk48 : Dat151RelData + { + public Dat151Unk48(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk48; + TypeID = (byte)Type; + } + public Dat151Unk48(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk51 : Dat151RelData + { + public Dat151Unk51(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk51; + TypeID = (byte)Type; + } + public Dat151Unk51(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk53 : Dat151RelData + { + public Dat151Unk53(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk53; + TypeID = (byte)Type; + } + public Dat151Unk53(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk54 : Dat151RelData + { + public Dat151Unk54(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk54; + TypeID = (byte)Type; + } + public Dat151Unk54(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk56 : Dat151RelData + { + public Dat151Unk56(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk56; + TypeID = (byte)Type; + } + public Dat151Unk56(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Aeroplane : Dat151RelData + { + public Dat151Aeroplane(RelFile rel) : base(rel) + { + Type = Dat151RelType.Aeroplane; + TypeID = (byte)Type; + } + public Dat151Aeroplane(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk59 : Dat151RelData + { + public Dat151Unk59(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk59; + TypeID = (byte)Type; + } + public Dat151Unk59(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk69 : Dat151RelData + { + public Dat151Unk69(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk69; + TypeID = (byte)Type; + } + public Dat151Unk69(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk70 : Dat151RelData + { + public Dat151Unk70(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk70; + TypeID = (byte)Type; + } + public Dat151Unk70(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk71 : Dat151RelData + { + public Dat151Unk71(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk71; + TypeID = (byte)Type; + } + public Dat151Unk71(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk72 : Dat151RelData + { + public Dat151Unk72(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk72; + TypeID = (byte)Type; + } + public Dat151Unk72(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151AnimalParams : Dat151RelData + { + public Dat151AnimalParams(RelFile rel) : base(rel) + { + Type = Dat151RelType.AnimalParams; + TypeID = (byte)Type; + } + public Dat151AnimalParams(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk74 : Dat151RelData + { + public Dat151Unk74(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk74; + TypeID = (byte)Type; + } + public Dat151Unk74(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk75 : Dat151RelData + { + public Dat151Unk75(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk75; + TypeID = (byte)Type; + } + public Dat151Unk75(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk77 : Dat151RelData + { + public Dat151Unk77(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk77; + TypeID = (byte)Type; + } + public Dat151Unk77(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk79 : Dat151RelData + { + public Dat151Unk79(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk79; + TypeID = (byte)Type; + } + public Dat151Unk79(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk80 : Dat151RelData + { + public Dat151Unk80(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk80; + TypeID = (byte)Type; + } + public Dat151Unk80(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk82 : Dat151RelData + { + public Dat151Unk82(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk82; + TypeID = (byte)Type; + } + public Dat151Unk82(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk85 : Dat151RelData + { + public Dat151Unk85(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk85; + TypeID = (byte)Type; + } + public Dat151Unk85(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Explosion : Dat151RelData + { + public Dat151Explosion(RelFile rel) : base(rel) + { + Type = Dat151RelType.Explosion; + TypeID = (byte)Type; + } + public Dat151Explosion(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk95 : Dat151RelData + { + public Dat151Unk95(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk95; + TypeID = (byte)Type; + } + public Dat151Unk95(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk96 : Dat151RelData + { + public Dat151Unk96(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk96; + TypeID = (byte)Type; + } + public Dat151Unk96(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk99 : Dat151RelData + { + public Dat151Unk99(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk99; + TypeID = (byte)Type; + } + public Dat151Unk99(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk100 : Dat151RelData + { + public Dat151Unk100(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk100; + TypeID = (byte)Type; + } + public Dat151Unk100(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk101 : Dat151RelData + { + public Dat151Unk101(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk101; + TypeID = (byte)Type; + } + public Dat151Unk101(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk105 : Dat151RelData + { + public Dat151Unk105(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk105; + TypeID = (byte)Type; + } + public Dat151Unk105(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk106 : Dat151RelData + { + public Dat151Unk106(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk106; + TypeID = (byte)Type; + } + public Dat151Unk106(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk107 : Dat151RelData + { + public Dat151Unk107(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk107; + TypeID = (byte)Type; + } + public Dat151Unk107(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk108 : Dat151RelData + { + public Dat151Unk108(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk108; + TypeID = (byte)Type; + } + public Dat151Unk108(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk109 : Dat151RelData + { + public Dat151Unk109(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk109; + TypeID = (byte)Type; + } + public Dat151Unk109(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk110 : Dat151RelData + { + public Dat151Unk110(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk110; + TypeID = (byte)Type; + } + public Dat151Unk110(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk111 : Dat151RelData + { + public Dat151Unk111(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk111; + TypeID = (byte)Type; + } + public Dat151Unk111(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk112 : Dat151RelData + { + public Dat151Unk112(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk112; + TypeID = (byte)Type; + } + public Dat151Unk112(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk113 : Dat151RelData + { + public Dat151Unk113(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk113; + TypeID = (byte)Type; + } + public Dat151Unk113(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk115 : Dat151RelData + { + public Dat151Unk115(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk115; + TypeID = (byte)Type; + } + public Dat151Unk115(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk116 : Dat151RelData + { + public Dat151Unk116(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk116; + TypeID = (byte)Type; + } + public Dat151Unk116(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk118 : Dat151RelData + { + public Dat151Unk118(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk118; + TypeID = (byte)Type; + } + public Dat151Unk118(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk119 : Dat151RelData + { + public Dat151Unk119(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk119; + TypeID = (byte)Type; + } + public Dat151Unk119(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk120 : Dat151RelData + { + public Dat151Unk120(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk120; + TypeID = (byte)Type; + } + public Dat151Unk120(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + [TC(typeof(EXP))] public class Dat151Unk121 : Dat151RelData + { + public Dat151Unk121(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk121; + TypeID = (byte)Type; + } + public Dat151Unk121(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + } + } + + + + + + + + From 08c1ba28a286d63ba5eb1bb239531804069e4695 Mon Sep 17 00:00:00 2001 From: dexy Date: Fri, 18 Jan 2019 01:36:58 +1100 Subject: [PATCH 100/158] Dat151 progress --- .../GameFiles/FileTypes/RelFile.cs | 1550 +++++++++++------ .../GameFiles/MetaTypes/MetaNames.cs | 3 + 2 files changed, 1029 insertions(+), 524 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index 5181bb1..058f041 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -554,15 +554,15 @@ namespace CodeWalker.GameFiles case Dat151RelType.Vehicle: return new Dat151Vehicle(d, br); case Dat151RelType.VehicleEngine: return new Dat151VehicleEngine(d, br); case Dat151RelType.VehicleScannerParams: return new Dat151VehicleScannerParams(d, br); //maybe not just vehicle - case Dat151RelType.Stream: return new Dat151Stream(d, br); //generic audio stream? + case Dat151RelType.StaticEmitter: return new Dat151StaticEmitter(d, br); + case Dat151RelType.Weapon: return new Dat151Weapon(d, br); + case Dat151RelType.Explosion: return new Dat151Explosion(d, br); + case Dat151RelType.PedPVG: return new Dat151PedPVG(d, br); //maybe Ped Voice Group? //case Dat151RelType.Helicopter: return new Dat151Helicopter(d, br); //maybe //case Dat151RelType.SpeechParams: return new Dat151SpeechParams(d, br); - //case Dat151RelType.Weapon: return new Dat151Weapon(d, br); - //case Dat151RelType.PedPVG: return new Dat151PedPVG(d, br); //maybe Ped Voice Group? //case Dat151RelType.Aeroplane: return new Dat151Aeroplane(d, br); //case Dat151RelType.AnimalParams: return new Dat151AnimalParams(d, br); - //case Dat151RelType.Explosion: return new Dat151Explosion(d, br); //case Dat151RelType.Unk2: return new Dat151Unk2(d, br); //case Dat151RelType.Unk7: return new Dat151Unk7(d, br); //case Dat151RelType.Unk9: return new Dat151Unk9(d, br); @@ -3161,7 +3161,7 @@ namespace CodeWalker.GameFiles Vehicle = 3, VehicleEngine = 4, Entity = 5, //not sure about this - Stream = 6,//possibly, generic audio stream + StaticEmitter = 6,//probably Unk7 = 7, Helicopter = 8, //maybe Unk9 = 9, @@ -4169,6 +4169,115 @@ namespace CodeWalker.GameFiles } } } + [TC(typeof(EXP))] public class Dat151StaticEmitter : Dat151RelData + { + public FlagsUint Flags { get; set; }//flags + public MetaHash Unk01 { get; set; } + public MetaHash Unk02 { get; set; } + public Vector3 Position { get; set; } + public float Unk06 { get; set; } + public float Unk07 { get; set; } + public int Unk08 { get; set; } + public int Unk09 { get; set; } + public int Unk10 { get; set; } + public MetaHash Unk11 { get; set; } + public MetaHash Unk12 { get; set; } + public MetaHash Unk13 { get; set; } + public float Unk14 { get; set; } + public ushort Unk15 { get; set; } + public ushort Unk16 { get; set; } + public MetaHash Unk17 { get; set; } + public MetaHash Unk18 { get; set; } + public int Unk19 { get; set; } + public FlagsUint Unk20 { get; set; }//0x05A00000 + public float Unk21 { get; set; } + public float Unk22 { get; set; } + + public Dat151StaticEmitter(RelFile rel) : base(rel) + { + Type = Dat151RelType.StaticEmitter; + TypeID = (byte)Type; + } + public Dat151StaticEmitter(RelData d, BinaryReader br) : base(d, br) + { + Flags = br.ReadUInt32();//flags + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadUInt32(); + Position = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); + Unk06 = br.ReadSingle(); + Unk07 = br.ReadSingle(); + Unk08 = br.ReadInt32(); + Unk09 = br.ReadInt32(); + Unk10 = br.ReadInt32(); + Unk11 = br.ReadUInt32(); + Unk12 = br.ReadUInt32(); + Unk13 = br.ReadUInt32(); + Unk14 = br.ReadSingle(); + Unk15 = br.ReadUInt16(); + Unk16 = br.ReadUInt16(); + Unk17 = br.ReadUInt32(); + Unk18 = br.ReadUInt32(); + Unk19 = br.ReadInt32(); + Unk20 = br.ReadUInt32();//0x05A00000 + Unk21 = br.ReadSingle(); + Unk22 = br.ReadSingle(); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + bw.Write(Flags);//flags + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Position.X); + bw.Write(Position.Y); + bw.Write(Position.Z); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); + bw.Write(Unk14); + bw.Write(Unk15); + bw.Write(Unk16); + bw.Write(Unk17); + bw.Write(Unk18); + bw.Write(Unk19); + bw.Write(Unk20);//0x05A00000 + bw.Write(Unk21); + bw.Write(Unk22); + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.SelfClosingTag(sb, indent, "Position " + FloatUtil.GetVector3XmlString(Position)); + RelXml.ValueTag(sb, indent, "Unk06", FloatUtil.ToString(Unk06)); + RelXml.ValueTag(sb, indent, "Unk07", FloatUtil.ToString(Unk07)); + RelXml.ValueTag(sb, indent, "Unk08", Unk08.ToString()); + RelXml.ValueTag(sb, indent, "Unk09", Unk09.ToString()); + RelXml.ValueTag(sb, indent, "Unk10", Unk10.ToString()); + RelXml.StringTag(sb, indent, "Unk11", RelXml.HashString(Unk11)); + RelXml.StringTag(sb, indent, "Unk12", RelXml.HashString(Unk12)); + RelXml.StringTag(sb, indent, "Unk13", RelXml.HashString(Unk13)); + RelXml.ValueTag(sb, indent, "Unk14", FloatUtil.ToString(Unk14)); + RelXml.ValueTag(sb, indent, "Unk15", Unk15.ToString()); + RelXml.ValueTag(sb, indent, "Unk16", Unk16.ToString()); + RelXml.StringTag(sb, indent, "Unk17", RelXml.HashString(Unk17)); + RelXml.StringTag(sb, indent, "Unk18", RelXml.HashString(Unk18)); + RelXml.ValueTag(sb, indent, "Unk19", Unk19.ToString()); + RelXml.ValueTag(sb, indent, "Unk20", "0x" + Unk20.Hex); + RelXml.ValueTag(sb, indent, "Unk21", FloatUtil.ToString(Unk21)); + RelXml.ValueTag(sb, indent, "Unk22", FloatUtil.ToString(Unk22)); + } + } [TC(typeof(EXP))] public class Dat151Interior : Dat151RelData { public FlagsUint Unk0 { get; set; } @@ -4721,18 +4830,18 @@ namespace CodeWalker.GameFiles [TC(typeof(EXP))] public class Dat151StartTrackAction : Dat151RelData { public FlagsUint Unk0 { get; set; } - public uint Unk1 { get; set; } - public uint Unk2 { get; set; } + public int Unk1 { get; set; } + public int Unk2 { get; set; } public MetaHash AudioTrack0 { get; set; } public MetaHash AudioTrack1 { get; set; } - public int Unk3 { get; set; } - public int Unk4 { get; set; } + public float Unk3 { get; set; } + public MetaHash Unk4 { get; set; } public MetaHash AudioTrack2 { get; set; } - public uint Unk5 { get; set; } - public uint Unk6 { get; set; } - public uint Unk7 { get; set; } - public uint Unk8 { get; set; } - public uint Unk9 { get; set; } + public float Unk5 { get; set; } + public int Unk6 { get; set; } + public int Unk7 { get; set; } + public float Unk8 { get; set; } + public int Unk9 { get; set; } public uint ItemCount { get; set; } public Dat151HashPair[] Items { get; set; } @@ -4745,18 +4854,18 @@ namespace CodeWalker.GameFiles public Dat151StartTrackAction(RelData d, BinaryReader br) : base(d, br) { Unk0 = br.ReadUInt32(); - Unk1 = br.ReadUInt32(); - Unk2 = br.ReadUInt32(); + Unk1 = br.ReadInt32(); + Unk2 = br.ReadInt32(); AudioTrack0 = br.ReadUInt32(); AudioTrack1 = br.ReadUInt32(); - Unk3 = br.ReadInt32(); - Unk4 = br.ReadInt32(); + Unk3 = br.ReadSingle(); + Unk4 = br.ReadUInt32(); AudioTrack2 = br.ReadUInt32(); - Unk5 = br.ReadUInt32(); - Unk6 = br.ReadUInt32(); - Unk7 = br.ReadUInt32(); - Unk8 = br.ReadUInt32(); - Unk9 = br.ReadUInt32(); + Unk5 = br.ReadSingle(); + Unk6 = br.ReadInt32(); + Unk7 = br.ReadInt32(); + Unk8 = br.ReadSingle(); + Unk9 = br.ReadInt32(); ItemCount = br.ReadUInt32(); Dat151HashPair[] items = new Dat151HashPair[ItemCount]; @@ -4766,6 +4875,8 @@ namespace CodeWalker.GameFiles } this.Items = items; + if (Unk1 != 0) + { } var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) @@ -4804,13 +4915,13 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk2", Unk2.ToString()); RelXml.StringTag(sb, indent, "AudioTrack0", RelXml.HashString(AudioTrack0)); RelXml.StringTag(sb, indent, "AudioTrack1", RelXml.HashString(AudioTrack1)); - RelXml.ValueTag(sb, indent, "Unk3", Unk3.ToString()); - RelXml.ValueTag(sb, indent, "Unk4", Unk4.ToString()); + RelXml.ValueTag(sb, indent, "Unk3", FloatUtil.ToString(Unk3)); + RelXml.StringTag(sb, indent, "Unk4", RelXml.HashString(Unk4)); RelXml.StringTag(sb, indent, "AudioTrack2", RelXml.HashString(AudioTrack2)); - RelXml.ValueTag(sb, indent, "Unk5", Unk5.ToString()); + RelXml.ValueTag(sb, indent, "Unk5", FloatUtil.ToString(Unk5)); RelXml.ValueTag(sb, indent, "Unk6", Unk6.ToString()); RelXml.ValueTag(sb, indent, "Unk7", Unk7.ToString()); - RelXml.ValueTag(sb, indent, "Unk8", Unk8.ToString()); + RelXml.ValueTag(sb, indent, "Unk8", FloatUtil.ToString(Unk8)); RelXml.ValueTag(sb, indent, "Unk9", Unk9.ToString()); if (ItemCount > 0) { @@ -4838,11 +4949,11 @@ namespace CodeWalker.GameFiles [TC(typeof(EXP))] public class Dat151StopTrackAction : Dat151RelData { public FlagsUint Unk0 { get; set; } - public uint Unk1 { get; set; } - public uint Unk2 { get; set; } + public int Unk1 { get; set; } + public int Unk2 { get; set; } public MetaHash AudioTrack0 { get; set; } public MetaHash AudioTrack1 { get; set; } - public int Unk3 { get; set; } + public float Unk3 { get; set; } public int Unk4 { get; set; } public Dat151StopTrackAction(RelFile rel) : base(rel) @@ -4853,13 +4964,16 @@ namespace CodeWalker.GameFiles public Dat151StopTrackAction(RelData d, BinaryReader br) : base(d, br) { Unk0 = br.ReadUInt32(); - Unk1 = br.ReadUInt32(); - Unk2 = br.ReadUInt32(); + Unk1 = br.ReadInt32(); + Unk2 = br.ReadInt32(); AudioTrack0 = br.ReadUInt32(); AudioTrack1 = br.ReadUInt32(); - Unk3 = br.ReadInt32(); + Unk3 = br.ReadSingle(); Unk4 = br.ReadInt32(); + if (Unk1 != 0) + { } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } @@ -4883,7 +4997,7 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk2", Unk2.ToString()); RelXml.StringTag(sb, indent, "AudioTrack0", RelXml.HashString(AudioTrack0)); RelXml.StringTag(sb, indent, "AudioTrack1", RelXml.HashString(AudioTrack1)); - RelXml.ValueTag(sb, indent, "Unk3", Unk3.ToString()); + RelXml.ValueTag(sb, indent, "Unk3", FloatUtil.ToString(Unk3)); RelXml.ValueTag(sb, indent, "Unk4", Unk4.ToString()); } public override uint[] GetHashTableOffsets() @@ -5029,15 +5143,15 @@ namespace CodeWalker.GameFiles [TC(typeof(EXP))] public class Dat151SetMoodAction : Dat151RelData { public FlagsUint Unk0 { get; set; } - public uint Unk1 { get; set; } - public uint Unk2 { get; set; } + public int Unk1 { get; set; } + public int Unk2 { get; set; } public MetaHash AudioTrack0 { get; set; } public MetaHash AudioTrack1 { get; set; } - public uint Unk3 { get; set; } + public float Unk3 { get; set; } public MetaHash AudioTrack2 { get; set; } - public uint Unk4 { get; set; } - public uint Unk5 { get; set; } - public uint Unk6 { get; set; } + public float Unk4 { get; set; } + public int Unk5 { get; set; } + public int Unk6 { get; set; } public Dat151SetMoodAction(RelFile rel) : base(rel) { @@ -5047,15 +5161,18 @@ namespace CodeWalker.GameFiles public Dat151SetMoodAction(RelData d, BinaryReader br) : base(d, br) { Unk0 = br.ReadUInt32(); - Unk1 = br.ReadUInt32(); - Unk2 = br.ReadUInt32(); + Unk1 = br.ReadInt32(); + Unk2 = br.ReadInt32(); AudioTrack0 = br.ReadUInt32(); AudioTrack1 = br.ReadUInt32(); - Unk3 = br.ReadUInt32(); + Unk3 = br.ReadSingle(); AudioTrack2 = br.ReadUInt32(); - Unk4 = br.ReadUInt32(); - Unk5 = br.ReadUInt32(); - Unk6 = br.ReadUInt32(); + Unk4 = br.ReadSingle(); + Unk5 = br.ReadInt32(); + Unk6 = br.ReadInt32(); + + if (Unk1 != 0) + { } var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) @@ -5083,9 +5200,9 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk2", Unk2.ToString()); RelXml.StringTag(sb, indent, "AudioTrack0", RelXml.HashString(AudioTrack0)); RelXml.StringTag(sb, indent, "AudioTrack1", RelXml.HashString(AudioTrack1)); - RelXml.ValueTag(sb, indent, "Unk3", Unk3.ToString()); + RelXml.ValueTag(sb, indent, "Unk3", FloatUtil.ToString(Unk3)); RelXml.StringTag(sb, indent, "AudioTrack2", RelXml.HashString(AudioTrack2)); - RelXml.ValueTag(sb, indent, "Unk4", Unk4.ToString()); + RelXml.ValueTag(sb, indent, "Unk4", FloatUtil.ToString(Unk4)); RelXml.ValueTag(sb, indent, "Unk5", Unk5.ToString()); RelXml.ValueTag(sb, indent, "Unk6", Unk6.ToString()); } @@ -5162,11 +5279,11 @@ namespace CodeWalker.GameFiles [TC(typeof(EXP))] public class Dat151StartOneShotAction : Dat151RelData { public FlagsUint Unk0 { get; set; } - public uint Unk1 { get; set; } - public uint Unk2 { get; set; } + public int Unk1 { get; set; } + public int Unk2 { get; set; } public MetaHash AudioTrack0 { get; set; } public MetaHash AudioTrack1 { get; set; } - public uint Unk3 { get; set; } + public float Unk3 { get; set; } public MetaHash Unk4 { get; set; } public int Unk5 { get; set; } public int Unk6 { get; set; } @@ -5181,17 +5298,20 @@ namespace CodeWalker.GameFiles public Dat151StartOneShotAction(RelData d, BinaryReader br) : base(d, br) { Unk0 = br.ReadUInt32(); - Unk1 = br.ReadUInt32(); - Unk2 = br.ReadUInt32(); + Unk1 = br.ReadInt32(); + Unk2 = br.ReadInt32(); AudioTrack0 = br.ReadUInt32(); AudioTrack1 = br.ReadUInt32(); - Unk3 = br.ReadUInt32(); + Unk3 = br.ReadSingle(); Unk4 = br.ReadUInt32(); Unk5 = br.ReadInt32(); Unk6 = br.ReadInt32(); Unk7 = br.ReadInt32(); Unk8 = br.ReadInt32(); + if (Unk1 != 0) + { } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } @@ -5219,7 +5339,7 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk2", Unk2.ToString()); RelXml.StringTag(sb, indent, "AudioTrack0", RelXml.HashString(AudioTrack0)); RelXml.StringTag(sb, indent, "AudioTrack1", RelXml.HashString(AudioTrack1)); - RelXml.ValueTag(sb, indent, "Unk3", Unk3.ToString()); + RelXml.ValueTag(sb, indent, "Unk3", FloatUtil.ToString(Unk3)); RelXml.StringTag(sb, indent, "Unk4", RelXml.HashString(Unk4)); RelXml.ValueTag(sb, indent, "Unk5", Unk5.ToString()); RelXml.ValueTag(sb, indent, "Unk6", Unk6.ToString()); @@ -5234,11 +5354,11 @@ namespace CodeWalker.GameFiles [TC(typeof(EXP))] public class Dat151StopOneShotAction : Dat151RelData { public FlagsUint Unk0 { get; set; } - public uint Unk1 { get; set; } - public uint Unk2 { get; set; } + public int Unk1 { get; set; } + public int Unk2 { get; set; } public MetaHash AudioTrack0 { get; set; } public MetaHash AudioTrack1 { get; set; } - public uint Unk3 { get; set; } + public int Unk3 { get; set; } public Dat151StopOneShotAction(RelFile rel) : base(rel) { @@ -5248,12 +5368,16 @@ namespace CodeWalker.GameFiles public Dat151StopOneShotAction(RelData d, BinaryReader br) : base(d, br) { Unk0 = br.ReadUInt32(); - Unk1 = br.ReadUInt32(); - Unk2 = br.ReadUInt32(); + Unk1 = br.ReadInt32(); + Unk2 = br.ReadInt32(); AudioTrack0 = br.ReadUInt32(); AudioTrack1 = br.ReadUInt32(); - Unk3 = br.ReadUInt32(); + Unk3 = br.ReadInt32(); + if (Unk1 != 0) + { } + if (Unk2 != 0) + { } if (Unk3 != 0) { } @@ -5289,8 +5413,8 @@ namespace CodeWalker.GameFiles [TC(typeof(EXP))] public class Dat151FadeInRadioAction : Dat151RelData { public FlagsUint Unk0 { get; set; } - public uint Unk1 { get; set; } - public uint Unk2 { get; set; } + public int Unk1 { get; set; } + public int Unk2 { get; set; } public MetaHash AudioTrack0 { get; set; } public MetaHash AudioTrack1 { get; set; } public float Unk3 { get; set; } @@ -5304,13 +5428,18 @@ namespace CodeWalker.GameFiles public Dat151FadeInRadioAction(RelData d, BinaryReader br) : base(d, br) { Unk0 = br.ReadUInt32(); - Unk1 = br.ReadUInt32(); - Unk2 = br.ReadUInt32(); + Unk1 = br.ReadInt32(); + Unk2 = br.ReadInt32(); AudioTrack0 = br.ReadUInt32(); AudioTrack1 = br.ReadUInt32(); Unk3 = br.ReadSingle(); Unk4 = br.ReadSingle(); + if (Unk1 != 0) + { } + if (Unk2 != 0) + { } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } @@ -5345,8 +5474,8 @@ namespace CodeWalker.GameFiles [TC(typeof(EXP))] public class Dat151FadeOutRadioAction : Dat151RelData { public FlagsUint Unk0 { get; set; } - public uint Unk1 { get; set; } - public uint Unk2 { get; set; } + public int Unk1 { get; set; } + public int Unk2 { get; set; } public MetaHash AudioTrack0 { get; set; } public MetaHash AudioTrack1 { get; set; } public float Unk3 { get; set; } @@ -5360,13 +5489,18 @@ namespace CodeWalker.GameFiles public Dat151FadeOutRadioAction(RelData d, BinaryReader br) : base(d, br) { Unk0 = br.ReadUInt32(); - Unk1 = br.ReadUInt32(); - Unk2 = br.ReadUInt32(); + Unk1 = br.ReadInt32(); + Unk2 = br.ReadInt32(); AudioTrack0 = br.ReadUInt32(); AudioTrack1 = br.ReadUInt32(); Unk3 = br.ReadSingle(); Unk4 = br.ReadSingle(); + if (Unk1 != 0) + { } + if (Unk2 != 0) + { } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } @@ -5401,9 +5535,9 @@ namespace CodeWalker.GameFiles [TC(typeof(EXP))] public class Dat151Mod : Dat151RelData { public FlagsUint Unk00 { get; set; } - public uint Unk01 { get; set; } - public uint Unk02 { get; set; } - public uint Unk03 { get; set; } + public int Unk01 { get; set; } + public int Unk02 { get; set; } + public int Unk03 { get; set; } public MetaHash Unk04 { get; set; } public MetaHash Unk05 { get; set; } public MetaHash Unk06 { get; set; } @@ -5433,9 +5567,9 @@ namespace CodeWalker.GameFiles public Dat151Mod(RelData d, BinaryReader br) : base(d, br) { Unk00 = br.ReadUInt32(); - Unk01 = br.ReadUInt32(); - Unk02 = br.ReadUInt32(); - Unk03 = br.ReadUInt32(); + Unk01 = br.ReadInt32(); + Unk02 = br.ReadInt32(); + Unk03 = br.ReadInt32(); Unk04 = br.ReadUInt32(); Unk05 = br.ReadUInt32(); Unk06 = br.ReadUInt32(); @@ -5658,98 +5792,98 @@ namespace CodeWalker.GameFiles [TC(typeof(EXP))] public class Dat151Entity : Dat151RelData { public FlagsUint Unk00 { get; set; } - public uint Unk01 { get; set; } - public uint Unk02 { get; set; } - public uint Unk03 { get; set; } - public uint Unk04 { get; set; } - public uint Unk05 { get; set; } - public uint Unk06 { get; set; } - public uint Unk07 { get; set; } - public uint Unk08 { get; set; } - public uint Unk09 { get; set; } - public uint Unk10 { get; set; } - public uint Unk11 { get; set; } - public uint Unk12 { get; set; } - public uint Unk13 { get; set; } - public uint Unk14 { get; set; } - public uint Unk15 { get; set; } - public uint Unk16 { get; set; } - public uint Unk17 { get; set; } - public uint Unk18 { get; set; } - public uint Unk19 { get; set; } - public uint Unk20 { get; set; } - public uint Unk21 { get; set; } - public uint Unk22 { get; set; } - public uint Unk23 { get; set; } - public uint Unk24 { get; set; } - public uint Unk25 { get; set; } - public uint Unk26 { get; set; } - public uint Unk27 { get; set; } - public uint Unk28 { get; set; } - public uint Unk29 { get; set; } - public uint Unk30 { get; set; } + public MetaHash Unk01 { get; set; } + public MetaHash Unk02 { get; set; } + public MetaHash Unk03 { get; set; } + public MetaHash Unk04 { get; set; } + public MetaHash Unk05 { get; set; } + public MetaHash Unk06 { get; set; } + public MetaHash Unk07 { get; set; } + public MetaHash Unk08 { get; set; } + public MetaHash Unk09 { get; set; } + public MetaHash Unk10 { get; set; } + public MetaHash Unk11 { get; set; } + public MetaHash Unk12 { get; set; } + public MetaHash Unk13 { get; set; } + public MetaHash Unk14 { get; set; } + public int Unk15 { get; set; } + public int Unk16 { get; set; } + public int Unk17 { get; set; } + public int Unk18 { get; set; } + public float Unk19 { get; set; } + public int Unk20 { get; set; } + public float Unk21 { get; set; } + public float Unk22 { get; set; } + public float Unk23 { get; set; } + public float Unk24 { get; set; } + public float Unk25 { get; set; } + public float Unk26 { get; set; } + public int Unk27 { get; set; } + public MetaHash Unk28 { get; set; } + public float Unk29 { get; set; } + public float Unk30 { get; set; } public MetaHash AudioTrack0 { get; set; } - public uint Unk31 { get; set; } - public uint Unk32 { get; set; } + public int Unk31 { get; set; } + public MetaHash Unk32 { get; set; } public MetaHash AudioTrack1 { get; set; } public MetaHash AudioTrack2 { get; set; } - public uint Unk33 { get; set; } - public uint Unk34 { get; set; } - public uint Unk35 { get; set; } - public uint Unk36 { get; set; } - public uint Unk37 { get; set; } - public uint Unk38 { get; set; } - public uint Unk39 { get; set; } - public uint Unk40 { get; set; } - public uint Unk41 { get; set; } - public uint Unk42 { get; set; } - public uint Unk43 { get; set; } - public uint Unk44 { get; set; } - public uint Unk45 { get; set; } - public uint Unk46 { get; set; } - public uint Unk47 { get; set; } - public uint Unk48 { get; set; } - public uint Unk49 { get; set; } - public uint Unk50 { get; set; } - public uint Unk51 { get; set; } - public uint Unk52 { get; set; } - public uint Unk53 { get; set; } - public uint Unk54 { get; set; } - public uint Unk55 { get; set; } - public uint Unk56 { get; set; } - public uint Unk57 { get; set; } - public uint Unk58 { get; set; } - public uint Unk59 { get; set; } - public uint Unk60 { get; set; } - public uint Unk61 { get; set; } - public uint Unk62 { get; set; } - public uint Unk63 { get; set; } - public uint Unk64 { get; set; } - public uint Unk65 { get; set; } - public uint Unk66 { get; set; } - public uint Unk67 { get; set; } - public uint Unk68 { get; set; } - public uint Unk69 { get; set; } - public uint Unk70 { get; set; } - public uint Unk71 { get; set; } - public uint Unk72 { get; set; } - public uint Unk73 { get; set; } - public uint Unk74 { get; set; } - public uint Unk75 { get; set; } - public uint Unk76 { get; set; } - public uint Unk77 { get; set; } - public uint Unk78 { get; set; } - public uint Unk79 { get; set; } - public uint Unk80 { get; set; } - public uint Unk81 { get; set; } - public uint Unk82 { get; set; } - public uint Unk83 { get; set; } - public uint Unk84 { get; set; } - public uint Unk85 { get; set; } - public uint Unk86 { get; set; } - public uint Unk87 { get; set; } - public uint Unk88 { get; set; } - public uint Unk89 { get; set; } + public MetaHash Unk33 { get; set; } + public MetaHash Unk34 { get; set; } + public MetaHash Unk35 { get; set; } + public MetaHash Unk36 { get; set; } + public MetaHash Unk37 { get; set; } + public MetaHash Unk38 { get; set; } + public MetaHash Unk39 { get; set; } + public MetaHash Unk40 { get; set; } + public MetaHash Unk41 { get; set; } + public MetaHash Unk42 { get; set; } + public MetaHash Unk43 { get; set; } + public MetaHash Unk44 { get; set; } + public MetaHash Unk45 { get; set; } + public MetaHash Unk46 { get; set; } + public MetaHash Unk47 { get; set; } + public MetaHash Unk48 { get; set; } + public MetaHash Unk49 { get; set; } + public MetaHash Unk50 { get; set; } + public MetaHash Unk51 { get; set; } + public MetaHash Unk52 { get; set; } + public MetaHash Unk53 { get; set; } + public MetaHash Unk54 { get; set; } + public float Unk55 { get; set; } + public MetaHash Unk56 { get; set; } + public MetaHash Unk57 { get; set; } + public int Unk58 { get; set; } + public int Unk59 { get; set; } + public MetaHash Unk60 { get; set; } + public int Unk61 { get; set; } + public int Unk62 { get; set; } + public MetaHash Unk63 { get; set; } + public MetaHash Unk64 { get; set; } + public MetaHash Unk65 { get; set; } + public int Unk66 { get; set; } + public MetaHash Unk67 { get; set; } + public MetaHash Unk68 { get; set; } + public MetaHash Unk69 { get; set; } + public MetaHash Unk70 { get; set; } + public MetaHash Unk71 { get; set; } + public int Unk72 { get; set; } + public MetaHash Unk73 { get; set; } + public MetaHash Unk74 { get; set; } + public MetaHash Unk75 { get; set; } + public MetaHash Unk76 { get; set; } + public float Unk77 { get; set; } + public MetaHash Unk78 { get; set; } + public MetaHash Unk79 { get; set; } + public MetaHash Unk80 { get; set; } + public MetaHash Unk81 { get; set; } + public MetaHash Unk82 { get; set; } + public MetaHash Unk83 { get; set; } + public MetaHash Unk84 { get; set; } + public int Unk85 { get; set; } + public MetaHash Unk86 { get; set; } + public int Unk87 { get; set; } + public MetaHash Unk88 { get; set; } + public int Unk89 { get; set; } public Dat151Entity(RelFile rel) : base(rel) { @@ -5773,24 +5907,24 @@ namespace CodeWalker.GameFiles Unk12 = br.ReadUInt32(); Unk13 = br.ReadUInt32(); Unk14 = br.ReadUInt32(); - Unk15 = br.ReadUInt32(); - Unk16 = br.ReadUInt32(); - Unk17 = br.ReadUInt32(); - Unk18 = br.ReadUInt32(); - Unk19 = br.ReadUInt32(); - Unk20 = br.ReadUInt32(); - Unk21 = br.ReadUInt32(); - Unk22 = br.ReadUInt32(); - Unk23 = br.ReadUInt32(); - Unk24 = br.ReadUInt32(); - Unk25 = br.ReadUInt32(); - Unk26 = br.ReadUInt32(); - Unk27 = br.ReadUInt32(); + Unk15 = br.ReadInt32(); + Unk16 = br.ReadInt32(); + Unk17 = br.ReadInt32(); + Unk18 = br.ReadInt32(); + Unk19 = br.ReadSingle(); + Unk20 = br.ReadInt32(); + Unk21 = br.ReadSingle(); + Unk22 = br.ReadSingle(); + Unk23 = br.ReadSingle(); + Unk24 = br.ReadSingle(); + Unk25 = br.ReadSingle(); + Unk26 = br.ReadSingle(); + Unk27 = br.ReadInt32(); Unk28 = br.ReadUInt32(); - Unk29 = br.ReadUInt32(); - Unk30 = br.ReadUInt32(); + Unk29 = br.ReadSingle(); + Unk30 = br.ReadSingle(); AudioTrack0 = br.ReadUInt32(); - Unk31 = br.ReadUInt32(); + Unk31 = br.ReadInt32(); Unk32 = br.ReadUInt32(); AudioTrack1 = br.ReadUInt32(); AudioTrack2 = br.ReadUInt32(); @@ -5816,29 +5950,29 @@ namespace CodeWalker.GameFiles Unk52 = br.ReadUInt32(); Unk53 = br.ReadUInt32(); Unk54 = br.ReadUInt32(); - Unk55 = br.ReadUInt32(); + Unk55 = br.ReadSingle(); Unk56 = br.ReadUInt32(); Unk57 = br.ReadUInt32(); - Unk58 = br.ReadUInt32(); - Unk59 = br.ReadUInt32(); + Unk58 = br.ReadInt32(); + Unk59 = br.ReadInt32(); Unk60 = br.ReadUInt32(); - Unk61 = br.ReadUInt32(); - Unk62 = br.ReadUInt32(); + Unk61 = br.ReadInt32(); + Unk62 = br.ReadInt32(); Unk63 = br.ReadUInt32(); Unk64 = br.ReadUInt32(); Unk65 = br.ReadUInt32(); - Unk66 = br.ReadUInt32(); + Unk66 = br.ReadInt32(); Unk67 = br.ReadUInt32(); Unk68 = br.ReadUInt32(); Unk69 = br.ReadUInt32(); Unk70 = br.ReadUInt32(); Unk71 = br.ReadUInt32(); - Unk72 = br.ReadUInt32(); + Unk72 = br.ReadInt32(); Unk73 = br.ReadUInt32(); Unk74 = br.ReadUInt32(); Unk75 = br.ReadUInt32(); Unk76 = br.ReadUInt32(); - Unk77 = br.ReadUInt32(); + Unk77 = br.ReadSingle(); Unk78 = br.ReadUInt32(); Unk79 = br.ReadUInt32(); Unk80 = br.ReadUInt32(); @@ -5846,12 +5980,24 @@ namespace CodeWalker.GameFiles Unk82 = br.ReadUInt32(); Unk83 = br.ReadUInt32(); Unk84 = br.ReadUInt32(); - Unk85 = br.ReadUInt32(); + Unk85 = br.ReadInt32(); Unk86 = br.ReadUInt32(); - Unk87 = br.ReadUInt32(); + Unk87 = br.ReadInt32(); Unk88 = br.ReadUInt32(); - Unk89 = br.ReadUInt32(); + Unk89 = br.ReadInt32(); + if (Unk58 != 0) + { } + if (Unk61 != 0) + { } + if (Unk62 != 0) + { } + if (Unk66 != 0) + { } + if (Unk87 != 0) + { } + if (Unk89 != 0) + { } var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) @@ -5958,97 +6104,97 @@ namespace CodeWalker.GameFiles public override void WriteXml(StringBuilder sb, int indent) { RelXml.ValueTag(sb, indent, "Unk00", "0x" + Unk00.Hex); - RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); - RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); - RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); - RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); - RelXml.ValueTag(sb, indent, "Unk05", Unk05.ToString()); - RelXml.ValueTag(sb, indent, "Unk06", Unk06.ToString()); - RelXml.ValueTag(sb, indent, "Unk07", Unk07.ToString()); - RelXml.ValueTag(sb, indent, "Unk08", Unk08.ToString()); - RelXml.ValueTag(sb, indent, "Unk09", Unk09.ToString()); - RelXml.ValueTag(sb, indent, "Unk10", Unk10.ToString()); - RelXml.ValueTag(sb, indent, "Unk11", Unk11.ToString()); - RelXml.ValueTag(sb, indent, "Unk12", Unk12.ToString()); - RelXml.ValueTag(sb, indent, "Unk13", Unk13.ToString()); - RelXml.ValueTag(sb, indent, "Unk14", Unk14.ToString()); + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); + RelXml.StringTag(sb, indent, "Unk04", RelXml.HashString(Unk04)); + RelXml.StringTag(sb, indent, "Unk05", RelXml.HashString(Unk05)); + RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); + RelXml.StringTag(sb, indent, "Unk07", RelXml.HashString(Unk07)); + RelXml.StringTag(sb, indent, "Unk08", RelXml.HashString(Unk08)); + RelXml.StringTag(sb, indent, "Unk09", RelXml.HashString(Unk09)); + RelXml.StringTag(sb, indent, "Unk10", RelXml.HashString(Unk10)); + RelXml.StringTag(sb, indent, "Unk11", RelXml.HashString(Unk11)); + RelXml.StringTag(sb, indent, "Unk12", RelXml.HashString(Unk12)); + RelXml.StringTag(sb, indent, "Unk13", RelXml.HashString(Unk13)); + RelXml.StringTag(sb, indent, "Unk14", RelXml.HashString(Unk14)); RelXml.ValueTag(sb, indent, "Unk15", Unk15.ToString()); RelXml.ValueTag(sb, indent, "Unk16", Unk16.ToString()); RelXml.ValueTag(sb, indent, "Unk17", Unk17.ToString()); RelXml.ValueTag(sb, indent, "Unk18", Unk18.ToString()); - RelXml.ValueTag(sb, indent, "Unk19", Unk19.ToString()); + RelXml.ValueTag(sb, indent, "Unk19", FloatUtil.ToString(Unk19)); RelXml.ValueTag(sb, indent, "Unk20", Unk20.ToString()); - RelXml.ValueTag(sb, indent, "Unk21", Unk21.ToString()); - RelXml.ValueTag(sb, indent, "Unk22", Unk22.ToString()); - RelXml.ValueTag(sb, indent, "Unk23", Unk23.ToString()); - RelXml.ValueTag(sb, indent, "Unk24", Unk24.ToString()); - RelXml.ValueTag(sb, indent, "Unk25", Unk25.ToString()); - RelXml.ValueTag(sb, indent, "Unk26", Unk26.ToString()); + RelXml.ValueTag(sb, indent, "Unk21", FloatUtil.ToString(Unk21)); + RelXml.ValueTag(sb, indent, "Unk22", FloatUtil.ToString(Unk22)); + RelXml.ValueTag(sb, indent, "Unk23", FloatUtil.ToString(Unk23)); + RelXml.ValueTag(sb, indent, "Unk24", FloatUtil.ToString(Unk24)); + RelXml.ValueTag(sb, indent, "Unk25", FloatUtil.ToString(Unk25)); + RelXml.ValueTag(sb, indent, "Unk26", FloatUtil.ToString(Unk26)); RelXml.ValueTag(sb, indent, "Unk27", Unk27.ToString()); - RelXml.ValueTag(sb, indent, "Unk28", Unk28.ToString()); - RelXml.ValueTag(sb, indent, "Unk29", Unk29.ToString()); - RelXml.ValueTag(sb, indent, "Unk30", Unk30.ToString()); + RelXml.StringTag(sb, indent, "Unk28", RelXml.HashString(Unk28)); + RelXml.ValueTag(sb, indent, "Unk29", FloatUtil.ToString(Unk29)); + RelXml.ValueTag(sb, indent, "Unk30", FloatUtil.ToString(Unk30)); RelXml.StringTag(sb, indent, "AudioTrack0", RelXml.HashString(AudioTrack0)); RelXml.ValueTag(sb, indent, "Unk31", Unk31.ToString()); - RelXml.ValueTag(sb, indent, "Unk32", Unk32.ToString()); + RelXml.StringTag(sb, indent, "Unk32", RelXml.HashString(Unk32)); RelXml.StringTag(sb, indent, "AudioTrack1", RelXml.HashString(AudioTrack1)); RelXml.StringTag(sb, indent, "AudioTrack2", RelXml.HashString(AudioTrack2)); - RelXml.ValueTag(sb, indent, "Unk33", Unk33.ToString()); - RelXml.ValueTag(sb, indent, "Unk34", Unk34.ToString()); - RelXml.ValueTag(sb, indent, "Unk35", Unk35.ToString()); - RelXml.ValueTag(sb, indent, "Unk36", Unk36.ToString()); - RelXml.ValueTag(sb, indent, "Unk37", Unk37.ToString()); - RelXml.ValueTag(sb, indent, "Unk38", Unk38.ToString()); - RelXml.ValueTag(sb, indent, "Unk39", Unk39.ToString()); - RelXml.ValueTag(sb, indent, "Unk40", Unk40.ToString()); - RelXml.ValueTag(sb, indent, "Unk41", Unk41.ToString()); - RelXml.ValueTag(sb, indent, "Unk42", Unk42.ToString()); - RelXml.ValueTag(sb, indent, "Unk43", Unk43.ToString()); - RelXml.ValueTag(sb, indent, "Unk44", Unk44.ToString()); - RelXml.ValueTag(sb, indent, "Unk45", Unk45.ToString()); - RelXml.ValueTag(sb, indent, "Unk46", Unk46.ToString()); - RelXml.ValueTag(sb, indent, "Unk47", Unk47.ToString()); - RelXml.ValueTag(sb, indent, "Unk48", Unk48.ToString()); - RelXml.ValueTag(sb, indent, "Unk49", Unk49.ToString()); - RelXml.ValueTag(sb, indent, "Unk50", Unk50.ToString()); - RelXml.ValueTag(sb, indent, "Unk51", Unk51.ToString()); - RelXml.ValueTag(sb, indent, "Unk52", Unk52.ToString()); - RelXml.ValueTag(sb, indent, "Unk53", Unk53.ToString()); - RelXml.ValueTag(sb, indent, "Unk54", Unk54.ToString()); - RelXml.ValueTag(sb, indent, "Unk55", Unk55.ToString()); - RelXml.ValueTag(sb, indent, "Unk56", Unk56.ToString()); - RelXml.ValueTag(sb, indent, "Unk57", Unk57.ToString()); + RelXml.StringTag(sb, indent, "Unk33", RelXml.HashString(Unk33)); + RelXml.StringTag(sb, indent, "Unk34", RelXml.HashString(Unk34)); + RelXml.StringTag(sb, indent, "Unk35", RelXml.HashString(Unk35)); + RelXml.StringTag(sb, indent, "Unk36", RelXml.HashString(Unk36)); + RelXml.StringTag(sb, indent, "Unk37", RelXml.HashString(Unk37)); + RelXml.StringTag(sb, indent, "Unk38", RelXml.HashString(Unk38)); + RelXml.StringTag(sb, indent, "Unk39", RelXml.HashString(Unk39)); + RelXml.StringTag(sb, indent, "Unk40", RelXml.HashString(Unk40)); + RelXml.StringTag(sb, indent, "Unk41", RelXml.HashString(Unk41)); + RelXml.StringTag(sb, indent, "Unk42", RelXml.HashString(Unk42)); + RelXml.StringTag(sb, indent, "Unk43", RelXml.HashString(Unk43)); + RelXml.StringTag(sb, indent, "Unk44", RelXml.HashString(Unk44)); + RelXml.StringTag(sb, indent, "Unk45", RelXml.HashString(Unk45)); + RelXml.StringTag(sb, indent, "Unk46", RelXml.HashString(Unk46)); + RelXml.StringTag(sb, indent, "Unk47", RelXml.HashString(Unk47)); + RelXml.StringTag(sb, indent, "Unk48", RelXml.HashString(Unk48)); + RelXml.StringTag(sb, indent, "Unk49", RelXml.HashString(Unk49)); + RelXml.StringTag(sb, indent, "Unk50", RelXml.HashString(Unk50)); + RelXml.StringTag(sb, indent, "Unk51", RelXml.HashString(Unk51)); + RelXml.StringTag(sb, indent, "Unk52", RelXml.HashString(Unk52)); + RelXml.StringTag(sb, indent, "Unk53", RelXml.HashString(Unk53)); + RelXml.StringTag(sb, indent, "Unk54", RelXml.HashString(Unk54)); + RelXml.ValueTag(sb, indent, "Unk55", FloatUtil.ToString(Unk55)); + RelXml.StringTag(sb, indent, "Unk56", RelXml.HashString(Unk56)); + RelXml.StringTag(sb, indent, "Unk57", RelXml.HashString(Unk57)); RelXml.ValueTag(sb, indent, "Unk58", Unk58.ToString()); RelXml.ValueTag(sb, indent, "Unk59", Unk59.ToString()); - RelXml.ValueTag(sb, indent, "Unk60", Unk60.ToString()); + RelXml.StringTag(sb, indent, "Unk60", RelXml.HashString(Unk60)); RelXml.ValueTag(sb, indent, "Unk61", Unk61.ToString()); RelXml.ValueTag(sb, indent, "Unk62", Unk62.ToString()); - RelXml.ValueTag(sb, indent, "Unk63", Unk63.ToString()); - RelXml.ValueTag(sb, indent, "Unk64", Unk64.ToString()); - RelXml.ValueTag(sb, indent, "Unk65", Unk65.ToString()); + RelXml.StringTag(sb, indent, "Unk63", RelXml.HashString(Unk63)); + RelXml.StringTag(sb, indent, "Unk64", RelXml.HashString(Unk64)); + RelXml.StringTag(sb, indent, "Unk65", RelXml.HashString(Unk65)); RelXml.ValueTag(sb, indent, "Unk66", Unk66.ToString()); - RelXml.ValueTag(sb, indent, "Unk67", Unk67.ToString()); - RelXml.ValueTag(sb, indent, "Unk68", Unk68.ToString()); - RelXml.ValueTag(sb, indent, "Unk69", Unk69.ToString()); - RelXml.ValueTag(sb, indent, "Unk70", Unk70.ToString()); - RelXml.ValueTag(sb, indent, "Unk71", Unk71.ToString()); + RelXml.StringTag(sb, indent, "Unk67", RelXml.HashString(Unk67)); + RelXml.StringTag(sb, indent, "Unk68", RelXml.HashString(Unk68)); + RelXml.StringTag(sb, indent, "Unk69", RelXml.HashString(Unk69)); + RelXml.StringTag(sb, indent, "Unk70", RelXml.HashString(Unk70)); + RelXml.StringTag(sb, indent, "Unk71", RelXml.HashString(Unk71)); RelXml.ValueTag(sb, indent, "Unk72", Unk72.ToString()); - RelXml.ValueTag(sb, indent, "Unk73", Unk73.ToString()); - RelXml.ValueTag(sb, indent, "Unk74", Unk74.ToString()); - RelXml.ValueTag(sb, indent, "Unk75", Unk75.ToString()); - RelXml.ValueTag(sb, indent, "Unk76", Unk76.ToString()); - RelXml.ValueTag(sb, indent, "Unk77", Unk77.ToString()); - RelXml.ValueTag(sb, indent, "Unk78", Unk78.ToString()); - RelXml.ValueTag(sb, indent, "Unk79", Unk79.ToString()); - RelXml.ValueTag(sb, indent, "Unk80", Unk80.ToString()); - RelXml.ValueTag(sb, indent, "Unk81", Unk81.ToString()); - RelXml.ValueTag(sb, indent, "Unk82", Unk82.ToString()); - RelXml.ValueTag(sb, indent, "Unk83", Unk83.ToString()); - RelXml.ValueTag(sb, indent, "Unk84", Unk84.ToString()); + RelXml.StringTag(sb, indent, "Unk73", RelXml.HashString(Unk73)); + RelXml.StringTag(sb, indent, "Unk74", RelXml.HashString(Unk74)); + RelXml.StringTag(sb, indent, "Unk75", RelXml.HashString(Unk75)); + RelXml.StringTag(sb, indent, "Unk76", RelXml.HashString(Unk76)); + RelXml.ValueTag(sb, indent, "Unk77", FloatUtil.ToString(Unk77)); + RelXml.StringTag(sb, indent, "Unk78", RelXml.HashString(Unk78)); + RelXml.StringTag(sb, indent, "Unk79", RelXml.HashString(Unk79)); + RelXml.StringTag(sb, indent, "Unk80", RelXml.HashString(Unk80)); + RelXml.StringTag(sb, indent, "Unk81", RelXml.HashString(Unk81)); + RelXml.StringTag(sb, indent, "Unk82", RelXml.HashString(Unk82)); + RelXml.StringTag(sb, indent, "Unk83", RelXml.HashString(Unk83)); + RelXml.StringTag(sb, indent, "Unk84", RelXml.HashString(Unk84)); RelXml.ValueTag(sb, indent, "Unk85", Unk85.ToString()); - RelXml.ValueTag(sb, indent, "Unk86", Unk86.ToString()); + RelXml.StringTag(sb, indent, "Unk86", RelXml.HashString(Unk86)); RelXml.ValueTag(sb, indent, "Unk87", Unk87.ToString()); - RelXml.ValueTag(sb, indent, "Unk88", Unk88.ToString()); + RelXml.StringTag(sb, indent, "Unk88", RelXml.HashString(Unk88)); RelXml.ValueTag(sb, indent, "Unk89", Unk89.ToString()); } public override uint[] GetHashTableOffsets() @@ -6060,55 +6206,55 @@ namespace CodeWalker.GameFiles { public FlagsUint Unk00 { get; set; } public uint Unk01 { get; set; } - public uint Unk02 { get; set; } - public uint Unk03 { get; set; } - public uint Unk04 { get; set; } - public uint Unk05 { get; set; } - public uint Unk06 { get; set; } - public uint Unk07 { get; set; } - public uint Unk08 { get; set; } - public uint Unk09 { get; set; } - public uint Unk10 { get; set; } - public uint Unk11 { get; set; } - public uint Unk12 { get; set; } - public uint Unk13 { get; set; } - public uint Unk14 { get; set; } - public uint Unk15 { get; set; } - public uint Unk16 { get; set; } - public uint Unk17 { get; set; } - public uint Unk18 { get; set; } - public uint Unk19 { get; set; } - public uint Unk20 { get; set; } - public uint Unk21 { get; set; } - public uint Unk22 { get; set; } - public uint Unk23 { get; set; } - public uint Unk24 { get; set; } - public uint Unk25 { get; set; } - public uint Unk26 { get; set; } - public uint Unk27 { get; set; } - public uint Unk28 { get; set; } - public uint Unk29 { get; set; } - public uint Unk30 { get; set; } - public uint Unk31 { get; set; } - public uint Unk32 { get; set; } - public uint Unk33 { get; set; } - public uint Unk34 { get; set; } - public uint Unk35 { get; set; } - public uint Unk36 { get; set; } - public uint Unk37 { get; set; } + public MetaHash Unk02 { get; set; } + public MetaHash Unk03 { get; set; } + public MetaHash Unk04 { get; set; } + public MetaHash Unk05 { get; set; } + public MetaHash Unk06 { get; set; } + public MetaHash Unk07 { get; set; } + public float Unk08 { get; set; } + public MetaHash Unk09 { get; set; } + public MetaHash Unk10 { get; set; } + public MetaHash Unk11 { get; set; } + public MetaHash Unk12 { get; set; } + public MetaHash Unk13 { get; set; } + public MetaHash Unk14 { get; set; } + public MetaHash Unk15 { get; set; } + public MetaHash Unk16 { get; set; } + public MetaHash Unk17 { get; set; } + public MetaHash Unk18 { get; set; } + public MetaHash Unk19 { get; set; } + public MetaHash Unk20 { get; set; } + public float Unk21 { get; set; } + public float Unk22 { get; set; } + public float Unk23 { get; set; } + public float Unk24 { get; set; } + public float Unk25 { get; set; } + public float Unk26 { get; set; } + public MetaHash Unk27 { get; set; } + public MetaHash Unk28 { get; set; } + public MetaHash Unk29 { get; set; } + public MetaHash Unk30 { get; set; } + public MetaHash Unk31 { get; set; } + public MetaHash Unk32 { get; set; } + public MetaHash Unk33 { get; set; } + public float Unk34 { get; set; } + public float Unk35 { get; set; } + public float Unk36 { get; set; } + public float Unk37 { get; set; } public uint Unk38 { get; set; } - public uint Unk39 { get; set; } - public uint Unk40 { get; set; } - public uint Unk41 { get; set; } - public uint Unk42 { get; set; } - public uint Unk43 { get; set; } - public uint Unk44 { get; set; } - public uint Unk45 { get; set; } - public uint Unk46 { get; set; } - public uint Unk47 { get; set; } - public uint Unk48 { get; set; } - public uint Unk49 { get; set; } - public uint Unk50 { get; set; } + public float Unk39 { get; set; } + public float Unk40 { get; set; } + public float Unk41 { get; set; } + public float Unk42 { get; set; } + public float Unk43 { get; set; } + public float Unk44 { get; set; } + public MetaHash Unk45 { get; set; } + public MetaHash Unk46 { get; set; } + public MetaHash Unk47 { get; set; } + public MetaHash Unk48 { get; set; } + public MetaHash Unk49 { get; set; } + public uint HasAudioTracks { get; set; } public MetaHash AudioTrack0 { get; set; } public MetaHash AudioTrack1 { get; set; } @@ -6127,7 +6273,7 @@ namespace CodeWalker.GameFiles Unk05 = br.ReadUInt32(); Unk06 = br.ReadUInt32(); Unk07 = br.ReadUInt32(); - Unk08 = br.ReadUInt32(); + Unk08 = br.ReadSingle(); Unk09 = br.ReadUInt32(); Unk10 = br.ReadUInt32(); Unk11 = br.ReadUInt32(); @@ -6140,12 +6286,12 @@ namespace CodeWalker.GameFiles Unk18 = br.ReadUInt32(); Unk19 = br.ReadUInt32(); Unk20 = br.ReadUInt32(); - Unk21 = br.ReadUInt32(); - Unk22 = br.ReadUInt32(); - Unk23 = br.ReadUInt32(); - Unk24 = br.ReadUInt32(); - Unk25 = br.ReadUInt32(); - Unk26 = br.ReadUInt32(); + Unk21 = br.ReadSingle(); + Unk22 = br.ReadSingle(); + Unk23 = br.ReadSingle(); + Unk24 = br.ReadSingle(); + Unk25 = br.ReadSingle(); + Unk26 = br.ReadSingle(); Unk27 = br.ReadUInt32(); Unk28 = br.ReadUInt32(); Unk29 = br.ReadUInt32(); @@ -6153,28 +6299,44 @@ namespace CodeWalker.GameFiles Unk31 = br.ReadUInt32(); Unk32 = br.ReadUInt32(); Unk33 = br.ReadUInt32(); - Unk34 = br.ReadUInt32(); - Unk35 = br.ReadUInt32(); - Unk36 = br.ReadUInt32(); - Unk37 = br.ReadUInt32(); + Unk34 = br.ReadSingle(); + Unk35 = br.ReadSingle(); + Unk36 = br.ReadSingle(); + Unk37 = br.ReadSingle(); Unk38 = br.ReadUInt32(); - Unk39 = br.ReadUInt32(); - Unk40 = br.ReadUInt32(); - Unk41 = br.ReadUInt32(); - Unk42 = br.ReadUInt32(); - Unk43 = br.ReadUInt32(); - Unk44 = br.ReadUInt32(); + Unk39 = br.ReadSingle(); + Unk40 = br.ReadSingle(); + Unk41 = br.ReadSingle(); + Unk42 = br.ReadSingle(); + Unk43 = br.ReadSingle(); + Unk44 = br.ReadSingle(); Unk45 = br.ReadUInt32(); Unk46 = br.ReadUInt32(); Unk47 = br.ReadUInt32(); Unk48 = br.ReadUInt32(); Unk49 = br.ReadUInt32(); - Unk50 = br.ReadUInt32(); - if (Unk50 > 0) + HasAudioTracks = br.ReadUInt32(); + if (HasAudioTracks > 0) { AudioTrack0 = br.ReadUInt32(); AudioTrack1 = br.ReadUInt32(); } + switch (HasAudioTracks) + { + case 0: + case 1: + break; + default: + break; + } + + if (Unk00 != 0) + { } + if (Unk01 != 0) + { } + if (Unk38 != 0) + { } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) @@ -6234,8 +6396,8 @@ namespace CodeWalker.GameFiles bw.Write(Unk47); bw.Write(Unk48); bw.Write(Unk49); - bw.Write(Unk50); - if (Unk50 > 0) + bw.Write(HasAudioTracks); + if (HasAudioTracks > 0) { bw.Write(AudioTrack0); bw.Write(AudioTrack1); @@ -6245,61 +6407,64 @@ namespace CodeWalker.GameFiles { RelXml.ValueTag(sb, indent, "Unk00", "0x" + Unk00.Hex); RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); - RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); - RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); - RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); - RelXml.ValueTag(sb, indent, "Unk05", Unk05.ToString()); - RelXml.ValueTag(sb, indent, "Unk06", Unk06.ToString()); - RelXml.ValueTag(sb, indent, "Unk07", Unk07.ToString()); - RelXml.ValueTag(sb, indent, "Unk08", Unk08.ToString()); - RelXml.ValueTag(sb, indent, "Unk09", Unk09.ToString()); - RelXml.ValueTag(sb, indent, "Unk10", Unk10.ToString()); - RelXml.ValueTag(sb, indent, "Unk11", Unk11.ToString()); - RelXml.ValueTag(sb, indent, "Unk12", Unk12.ToString()); - RelXml.ValueTag(sb, indent, "Unk13", Unk13.ToString()); - RelXml.ValueTag(sb, indent, "Unk14", Unk14.ToString()); - RelXml.ValueTag(sb, indent, "Unk15", Unk15.ToString()); - RelXml.ValueTag(sb, indent, "Unk16", Unk16.ToString()); - RelXml.ValueTag(sb, indent, "Unk17", Unk17.ToString()); - RelXml.ValueTag(sb, indent, "Unk18", Unk18.ToString()); - RelXml.ValueTag(sb, indent, "Unk19", Unk19.ToString()); - RelXml.ValueTag(sb, indent, "Unk20", Unk20.ToString()); - RelXml.ValueTag(sb, indent, "Unk21", Unk21.ToString()); - RelXml.ValueTag(sb, indent, "Unk22", Unk22.ToString()); - RelXml.ValueTag(sb, indent, "Unk23", Unk23.ToString()); - RelXml.ValueTag(sb, indent, "Unk24", Unk24.ToString()); - RelXml.ValueTag(sb, indent, "Unk25", Unk25.ToString()); - RelXml.ValueTag(sb, indent, "Unk26", Unk26.ToString()); - RelXml.ValueTag(sb, indent, "Unk27", Unk27.ToString()); - RelXml.ValueTag(sb, indent, "Unk28", Unk28.ToString()); - RelXml.ValueTag(sb, indent, "Unk29", Unk29.ToString()); - RelXml.ValueTag(sb, indent, "Unk30", Unk30.ToString()); - RelXml.ValueTag(sb, indent, "Unk31", Unk31.ToString()); - RelXml.ValueTag(sb, indent, "Unk32", Unk32.ToString()); - RelXml.ValueTag(sb, indent, "Unk33", Unk33.ToString()); - RelXml.ValueTag(sb, indent, "Unk34", Unk34.ToString()); - RelXml.ValueTag(sb, indent, "Unk35", Unk35.ToString()); - RelXml.ValueTag(sb, indent, "Unk36", Unk36.ToString()); - RelXml.ValueTag(sb, indent, "Unk37", Unk37.ToString()); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); + RelXml.StringTag(sb, indent, "Unk04", RelXml.HashString(Unk04)); + RelXml.StringTag(sb, indent, "Unk05", RelXml.HashString(Unk05)); + RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); + RelXml.StringTag(sb, indent, "Unk07", RelXml.HashString(Unk07)); + RelXml.ValueTag(sb, indent, "Unk08", FloatUtil.ToString(Unk08)); + RelXml.StringTag(sb, indent, "Unk09", RelXml.HashString(Unk09)); + RelXml.StringTag(sb, indent, "Unk10", RelXml.HashString(Unk10)); + RelXml.StringTag(sb, indent, "Unk11", RelXml.HashString(Unk11)); + RelXml.StringTag(sb, indent, "Unk12", RelXml.HashString(Unk12)); + RelXml.StringTag(sb, indent, "Unk13", RelXml.HashString(Unk13)); + RelXml.StringTag(sb, indent, "Unk14", RelXml.HashString(Unk14)); + RelXml.StringTag(sb, indent, "Unk15", RelXml.HashString(Unk15)); + RelXml.StringTag(sb, indent, "Unk16", RelXml.HashString(Unk16)); + RelXml.StringTag(sb, indent, "Unk17", RelXml.HashString(Unk17)); + RelXml.StringTag(sb, indent, "Unk18", RelXml.HashString(Unk18)); + RelXml.StringTag(sb, indent, "Unk19", RelXml.HashString(Unk19)); + RelXml.StringTag(sb, indent, "Unk20", RelXml.HashString(Unk20)); + RelXml.ValueTag(sb, indent, "Unk21", FloatUtil.ToString(Unk21)); + RelXml.ValueTag(sb, indent, "Unk22", FloatUtil.ToString(Unk22)); + RelXml.ValueTag(sb, indent, "Unk23", FloatUtil.ToString(Unk23)); + RelXml.ValueTag(sb, indent, "Unk24", FloatUtil.ToString(Unk24)); + RelXml.ValueTag(sb, indent, "Unk25", FloatUtil.ToString(Unk25)); + RelXml.ValueTag(sb, indent, "Unk26", FloatUtil.ToString(Unk26)); + RelXml.StringTag(sb, indent, "Unk27", RelXml.HashString(Unk27)); + RelXml.StringTag(sb, indent, "Unk28", RelXml.HashString(Unk28)); + RelXml.StringTag(sb, indent, "Unk29", RelXml.HashString(Unk29)); + RelXml.StringTag(sb, indent, "Unk30", RelXml.HashString(Unk30)); + RelXml.StringTag(sb, indent, "Unk31", RelXml.HashString(Unk31)); + RelXml.StringTag(sb, indent, "Unk32", RelXml.HashString(Unk32)); + RelXml.StringTag(sb, indent, "Unk33", RelXml.HashString(Unk33)); + RelXml.ValueTag(sb, indent, "Unk34", FloatUtil.ToString(Unk34)); + RelXml.ValueTag(sb, indent, "Unk35", FloatUtil.ToString(Unk35)); + RelXml.ValueTag(sb, indent, "Unk36", FloatUtil.ToString(Unk36)); + RelXml.ValueTag(sb, indent, "Unk37", FloatUtil.ToString(Unk37)); RelXml.ValueTag(sb, indent, "Unk38", Unk38.ToString()); - RelXml.ValueTag(sb, indent, "Unk39", Unk39.ToString()); - RelXml.ValueTag(sb, indent, "Unk40", Unk40.ToString()); - RelXml.ValueTag(sb, indent, "Unk41", Unk41.ToString()); - RelXml.ValueTag(sb, indent, "Unk42", Unk42.ToString()); - RelXml.ValueTag(sb, indent, "Unk43", Unk43.ToString()); - RelXml.ValueTag(sb, indent, "Unk44", Unk44.ToString()); - RelXml.ValueTag(sb, indent, "Unk45", Unk45.ToString()); - RelXml.ValueTag(sb, indent, "Unk46", Unk46.ToString()); - RelXml.ValueTag(sb, indent, "Unk47", Unk47.ToString()); - RelXml.ValueTag(sb, indent, "Unk48", Unk48.ToString()); - RelXml.ValueTag(sb, indent, "Unk49", Unk49.ToString()); - RelXml.ValueTag(sb, indent, "Unk50", Unk50.ToString()); - RelXml.StringTag(sb, indent, "AudioTrack0", RelXml.HashString(AudioTrack0)); - RelXml.StringTag(sb, indent, "AudioTrack1", RelXml.HashString(AudioTrack1)); + RelXml.ValueTag(sb, indent, "Unk39", FloatUtil.ToString(Unk39)); + RelXml.ValueTag(sb, indent, "Unk40", FloatUtil.ToString(Unk40)); + RelXml.ValueTag(sb, indent, "Unk41", FloatUtil.ToString(Unk41)); + RelXml.ValueTag(sb, indent, "Unk42", FloatUtil.ToString(Unk42)); + RelXml.ValueTag(sb, indent, "Unk43", FloatUtil.ToString(Unk43)); + RelXml.ValueTag(sb, indent, "Unk44", FloatUtil.ToString(Unk44)); + RelXml.StringTag(sb, indent, "Unk45", RelXml.HashString(Unk45)); + RelXml.StringTag(sb, indent, "Unk46", RelXml.HashString(Unk46)); + RelXml.StringTag(sb, indent, "Unk47", RelXml.HashString(Unk47)); + RelXml.StringTag(sb, indent, "Unk48", RelXml.HashString(Unk48)); + RelXml.StringTag(sb, indent, "Unk49", RelXml.HashString(Unk49)); + //RelXml.ValueTag(sb, indent, "HasAudioTracks", HasAudioTracks.ToString()); + if (HasAudioTracks > 0) + { + RelXml.StringTag(sb, indent, "AudioTrack0", RelXml.HashString(AudioTrack0)); + RelXml.StringTag(sb, indent, "AudioTrack1", RelXml.HashString(AudioTrack1)); + } } public override uint[] GetHashTableOffsets() { - if (Unk50 > 0) return new uint[] { 204, 208 }; + if (HasAudioTracks > 0) return new uint[] { 204, 208 }; else return null; } } @@ -6411,13 +6576,13 @@ namespace CodeWalker.GameFiles [TC(typeof(EXP))] public class Dat151ForceRadioTrackAction : Dat151RelData { public FlagsUint Unk0 { get; set; } - public uint Unk1 { get; set; } - public uint Unk2 { get; set; } + public int Unk1 { get; set; } + public int Unk2 { get; set; } public MetaHash AudioTrack0 { get; set; } public MetaHash AudioTrack1 { get; set; } - public uint Unk3 { get; set; } - public uint Unk4 { get; set; } - public uint Unk5 { get; set; } + public float Unk3 { get; set; } + public MetaHash Unk4 { get; set; } + public int Unk5 { get; set; } public uint AudioTracksCount { get; set; } public MetaHash[] AudioTracks { get; set; } @@ -6429,13 +6594,13 @@ namespace CodeWalker.GameFiles public Dat151ForceRadioTrackAction(RelData d, BinaryReader br) : base(d, br) { Unk0 = br.ReadUInt32(); - Unk1 = br.ReadUInt32(); - Unk2 = br.ReadUInt32(); + Unk1 = br.ReadInt32(); + Unk2 = br.ReadInt32(); AudioTrack0 = br.ReadUInt32(); AudioTrack1 = br.ReadUInt32(); - Unk3 = br.ReadUInt32(); + Unk3 = br.ReadSingle(); Unk4 = br.ReadUInt32(); - Unk5 = br.ReadUInt32(); + Unk5 = br.ReadInt32(); AudioTracksCount = br.ReadUInt32(); var tracks = new MetaHash[AudioTracksCount]; for (var i = 0; i < AudioTracksCount; i++) @@ -6444,6 +6609,14 @@ namespace CodeWalker.GameFiles } AudioTracks = tracks; + if (Unk1 != 0) + { } + if (Unk2 != 0) + { } + if (Unk5 != 0) + { } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } @@ -6473,8 +6646,8 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk2", Unk2.ToString()); RelXml.StringTag(sb, indent, "AudioTrack0", RelXml.HashString(AudioTrack0)); RelXml.StringTag(sb, indent, "AudioTrack1", RelXml.HashString(AudioTrack1)); - RelXml.ValueTag(sb, indent, "Unk3", Unk3.ToString()); - RelXml.ValueTag(sb, indent, "Unk4", Unk4.ToString()); + RelXml.ValueTag(sb, indent, "Unk3", FloatUtil.ToString(Unk3)); + RelXml.StringTag(sb, indent, "Unk4", RelXml.HashString(Unk4)); RelXml.ValueTag(sb, indent, "Unk5", Unk5.ToString()); if (AudioTracksCount > 0) { @@ -6507,13 +6680,13 @@ namespace CodeWalker.GameFiles [TC(typeof(EXP))] public class Dat151RadioDjSpeechAction : Dat151RelData { public FlagsUint Unk0 { get; set; } - public uint Unk1 { get; set; } - public uint Unk2 { get; set; } + public int Unk1 { get; set; } + public int Unk2 { get; set; } public MetaHash AudioTrack0 { get; set; } public MetaHash AudioTrack1 { get; set; } - public uint Unk3 { get; set; } - public uint Unk4 { get; set; } - public uint Unk5 { get; set; } + public int Unk3 { get; set; } + public int Unk4 { get; set; } + public int Unk5 { get; set; } public Dat151RadioDjSpeechAction(RelFile rel) : base(rel) { @@ -6523,13 +6696,13 @@ namespace CodeWalker.GameFiles public Dat151RadioDjSpeechAction(RelData d, BinaryReader br) : base(d, br) { Unk0 = br.ReadUInt32(); - Unk1 = br.ReadUInt32(); - Unk2 = br.ReadUInt32(); + Unk1 = br.ReadInt32(); + Unk2 = br.ReadInt32(); AudioTrack0 = br.ReadUInt32(); AudioTrack1 = br.ReadUInt32(); - Unk3 = br.ReadUInt32(); - Unk4 = br.ReadUInt32(); - Unk5 = br.ReadUInt32(); + Unk3 = br.ReadInt32(); + Unk4 = br.ReadInt32(); + Unk5 = br.ReadInt32(); var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) @@ -6558,6 +6731,17 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk3", Unk3.ToString()); RelXml.ValueTag(sb, indent, "Unk4", Unk4.ToString()); RelXml.ValueTag(sb, indent, "Unk5", Unk5.ToString()); + + if (Unk1 != 0) + { } + if (Unk2 != 0) + { } + if (Unk3 != 0) + { } + if (Unk4 != 0) + { } + if (Unk5 != 0) + { } } public override uint[] GetHashTableOffsets() { @@ -8558,71 +8742,208 @@ namespace CodeWalker.GameFiles } } } - [TC(typeof(EXP))] public class Dat151Stream : Dat151RelData + [TC(typeof(EXP))] public class Dat151Weapon : Dat151RelData { - public FlagsUint Flags { get; set; }//flags + public FlagsUint Flags { get; set; } public MetaHash Unk01 { get; set; } public MetaHash Unk02 { get; set; } - public float Unk03 { get; set; } - public float Unk04 { get; set; } + public MetaHash Unk03 { get; set; } + public MetaHash Unk04 { get; set; } public float Unk05 { get; set; } - public float Unk06 { get; set; } + public int Unk06 { get; set; } public float Unk07 { get; set; } - public int Unk08 { get; set; } - public int Unk09 { get; set; } - public int Unk10 { get; set; } + public MetaHash Unk08 { get; set; } + public MetaHash Unk09 { get; set; } + public MetaHash Unk10 { get; set; } public MetaHash Unk11 { get; set; } public MetaHash Unk12 { get; set; } - public MetaHash Unk13 { get; set; } - public float Unk14 { get; set; } - public ushort Unk15 { get; set; } - public ushort Unk16 { get; set; } - public float Unk17 { get; set; } + public MetaHash Unk13 { get; set; }//eg 0xBB0A8AE1 + public MetaHash Unk14 { get; set; } + public MetaHash Unk15 { get; set; } + public MetaHash Unk16 { get; set; } + public MetaHash Unk17 { get; set; } public MetaHash Unk18 { get; set; } - public int Unk19 { get; set; } - public FlagsUint Unk20 { get; set; }//0x05A00000 - public float Unk21 { get; set; } - public float Unk22 { get; set; } + public int Unk19 { get; set; }//0,1,2 + public MetaHash Unk20 { get; set; } + public MetaHash Unk21 { get; set; } + public MetaHash Unk22 { get; set; } + public MetaHash Unk23 { get; set; } + public MetaHash Unk24 { get; set; } + public MetaHash Unk25 { get; set; } + public MetaHash Unk26 { get; set; } + public MetaHash Unk27 { get; set; } + public int Unk28 { get; set; }//0,50 + public int Unk29 { get; set; }//0 + public MetaHash Unk30 { get; set; } + public MetaHash Unk31 { get; set; } + public MetaHash Unk32 { get; set; } + public MetaHash Unk33 { get; set; } + public MetaHash Unk34 { get; set; } - public Dat151Stream(RelFile rel) : base(rel) + public MetaHash Unk35 { get; set; } + public MetaHash Unk36 { get; set; } + public MetaHash Unk37 { get; set; } + public MetaHash Unk38 { get; set; } + public MetaHash Unk39 { get; set; } + public MetaHash Unk40 { get; set; } + public MetaHash Unk41 { get; set; } + public MetaHash Unk42 { get; set; } + public MetaHash Unk43 { get; set; } + public MetaHash Unk44 { get; set; } + public MetaHash Unk45 { get; set; } + public MetaHash Unk46 { get; set; } + public MetaHash Unk47 { get; set; } + + public int Unk48 { get; set; } + public int Unk49 { get; set; } + public int Unk50 { get; set; } + + public MetaHash Unk51 { get; set; } + public MetaHash Unk52 { get; set; } + public MetaHash Unk53 { get; set; } + public MetaHash Unk54 { get; set; } + public MetaHash Unk55 { get; set; } + public MetaHash Unk56 { get; set; } + public MetaHash Unk57 { get; set; } + public MetaHash Unk58 { get; set; } + public MetaHash Unk59 { get; set; } + public MetaHash Unk60 { get; set; } + public MetaHash Unk61 { get; set; } + public MetaHash Unk62 { get; set; } + public int Unk63 { get; set; } + public int Unk64 { get; set; } + public int Unk65 { get; set; } + public int Unk66 { get; set; } + public int Unk67 { get; set; } + + public int Version { get; set; } + + + public Dat151Weapon(RelFile rel) : base(rel) { - Type = Dat151RelType.Stream; + Type = Dat151RelType.Weapon; TypeID = (byte)Type; } - public Dat151Stream(RelData d, BinaryReader br) : base(d, br) + public Dat151Weapon(RelData d, BinaryReader br) : base(d, br) { - Flags = br.ReadUInt32();//flags + Flags = br.ReadUInt32(); Unk01 = br.ReadUInt32(); Unk02 = br.ReadUInt32(); - Unk03 = br.ReadSingle(); - Unk04 = br.ReadSingle(); + Unk03 = br.ReadUInt32(); + Unk04 = br.ReadUInt32(); Unk05 = br.ReadSingle(); - Unk06 = br.ReadSingle(); + Unk06 = br.ReadInt32(); Unk07 = br.ReadSingle(); - Unk08 = br.ReadInt32(); - Unk09 = br.ReadInt32(); - Unk10 = br.ReadInt32(); + Unk08 = br.ReadUInt32(); + Unk09 = br.ReadUInt32(); + Unk10 = br.ReadUInt32(); Unk11 = br.ReadUInt32(); Unk12 = br.ReadUInt32(); - Unk13 = br.ReadUInt32(); - Unk14 = br.ReadSingle(); - Unk15 = br.ReadUInt16(); - Unk16 = br.ReadUInt16(); - Unk17 = br.ReadSingle(); + Unk13 = br.ReadUInt32();//eg 0xBB0A8AE1 + Unk14 = br.ReadUInt32(); + Unk15 = br.ReadUInt32(); + Unk16 = br.ReadUInt32(); + Unk17 = br.ReadUInt32(); Unk18 = br.ReadUInt32(); - Unk19 = br.ReadInt32(); - Unk20 = br.ReadUInt32();//0x05A00000 - Unk21 = br.ReadSingle(); - Unk22 = br.ReadSingle(); + Unk19 = br.ReadInt32();//0,1,2 + Unk20 = br.ReadUInt32(); + Unk21 = br.ReadUInt32(); + Unk22 = br.ReadUInt32(); + Unk23 = br.ReadUInt32(); + Unk24 = br.ReadUInt32(); + Unk25 = br.ReadUInt32(); + Unk26 = br.ReadUInt32(); + Unk27 = br.ReadUInt32(); + Unk28 = br.ReadInt32();//0,50 + Unk29 = br.ReadInt32();//0 + Unk30 = br.ReadUInt32(); + Unk31 = br.ReadUInt32(); + Unk32 = br.ReadUInt32(); + Unk33 = br.ReadUInt32(); + Unk34 = br.ReadUInt32(); + + Version = 0; var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + switch (bytesleft) + { + case 0: + break; + case 52: + case 64: + case 132: + Version = 1; + Unk35 = br.ReadUInt32(); + Unk36 = br.ReadUInt32(); + Unk37 = br.ReadUInt32(); + Unk38 = br.ReadUInt32(); + Unk39 = br.ReadUInt32(); + Unk40 = br.ReadUInt32(); + Unk41 = br.ReadUInt32(); + Unk42 = br.ReadUInt32(); + Unk43 = br.ReadUInt32(); + Unk44 = br.ReadUInt32(); + Unk45 = br.ReadUInt32(); + Unk46 = br.ReadUInt32(); + Unk47 = br.ReadUInt32(); + + if (bytesleft >= 64) + { + Version = 2; + Unk48 = br.ReadInt32(); + Unk49 = br.ReadInt32(); + Unk50 = br.ReadInt32(); + + if (Unk48 != 0) + { }//only rarely hit! + if (Unk49 != 0) + { }//no hit + if (Unk50 != 0) + { }//no hit + + if (bytesleft >= 132) + { + Version = 3; + Unk51 = br.ReadUInt32(); + Unk52 = br.ReadUInt32(); + Unk53 = br.ReadUInt32(); + Unk54 = br.ReadUInt32(); + Unk55 = br.ReadUInt32(); + Unk56 = br.ReadUInt32(); + Unk57 = br.ReadUInt32(); + Unk58 = br.ReadUInt32(); + Unk59 = br.ReadUInt32(); + Unk60 = br.ReadUInt32(); + Unk61 = br.ReadUInt32(); + Unk62 = br.ReadUInt32(); + Unk63 = br.ReadInt32(); + Unk64 = br.ReadInt32(); + Unk65 = br.ReadInt32(); + Unk66 = br.ReadInt32(); + Unk67 = br.ReadInt32(); + + if (bytesleft > 132) + { }//shouldn't get here + } + } + break; + default: + break; + } + bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } + + if (Unk29 != 0) + { }//no hit + + } public override void Write(BinaryWriter bw) { WriteTypeAndOffset(bw); - bw.Write(Flags);//flags + + bw.Write(Flags); bw.Write(Unk01); bw.Write(Unk02); bw.Write(Unk03); @@ -8635,42 +8956,286 @@ namespace CodeWalker.GameFiles bw.Write(Unk10); bw.Write(Unk11); bw.Write(Unk12); - bw.Write(Unk13); + bw.Write(Unk13);//eg 0xBB0A8AE1 bw.Write(Unk14); bw.Write(Unk15); bw.Write(Unk16); bw.Write(Unk17); bw.Write(Unk18); - bw.Write(Unk19); - bw.Write(Unk20);//0x05A00000 + bw.Write(Unk19);//0,1,2 + bw.Write(Unk20); bw.Write(Unk21); bw.Write(Unk22); + bw.Write(Unk23); + bw.Write(Unk24); + bw.Write(Unk25); + bw.Write(Unk26); + bw.Write(Unk27); + bw.Write(Unk28);//0,50 + bw.Write(Unk29);//0 + bw.Write(Unk30); + bw.Write(Unk31); + bw.Write(Unk32); + bw.Write(Unk33); + bw.Write(Unk34); + + if (Version >= 1) + { + bw.Write(Unk35); + bw.Write(Unk36); + bw.Write(Unk37); + bw.Write(Unk38); + bw.Write(Unk39); + bw.Write(Unk40); + bw.Write(Unk41); + bw.Write(Unk42); + bw.Write(Unk43); + bw.Write(Unk44); + bw.Write(Unk45); + bw.Write(Unk46); + bw.Write(Unk47); + + if (Version >= 2) + { + bw.Write(Unk48); + bw.Write(Unk49); + bw.Write(Unk50); + + if (Version >= 3) + { + bw.Write(Unk51); + bw.Write(Unk52); + bw.Write(Unk53); + bw.Write(Unk54); + bw.Write(Unk55); + bw.Write(Unk56); + bw.Write(Unk57); + bw.Write(Unk58); + bw.Write(Unk59); + bw.Write(Unk60); + bw.Write(Unk61); + bw.Write(Unk62); + bw.Write(Unk63); + bw.Write(Unk64); + bw.Write(Unk65); + bw.Write(Unk66); + bw.Write(Unk67); + } + } + } + } public override void WriteXml(StringBuilder sb, int indent) { RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.ValueTag(sb, indent, "Version", Version.ToString()); //CW invention, not an actual field! RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); - RelXml.ValueTag(sb, indent, "Unk03", FloatUtil.ToString(Unk03)); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); + RelXml.StringTag(sb, indent, "Unk04", RelXml.HashString(Unk04)); + RelXml.ValueTag(sb, indent, "Unk05", FloatUtil.ToString(Unk05)); + RelXml.ValueTag(sb, indent, "Unk06", Unk06.ToString()); + RelXml.ValueTag(sb, indent, "Unk07", FloatUtil.ToString(Unk07)); + RelXml.StringTag(sb, indent, "Unk08", RelXml.HashString(Unk08)); + RelXml.StringTag(sb, indent, "Unk09", RelXml.HashString(Unk09)); + RelXml.StringTag(sb, indent, "Unk10", RelXml.HashString(Unk10)); + RelXml.StringTag(sb, indent, "Unk11", RelXml.HashString(Unk11)); + RelXml.StringTag(sb, indent, "Unk12", RelXml.HashString(Unk12)); + RelXml.StringTag(sb, indent, "Unk13", RelXml.HashString(Unk13)); + RelXml.StringTag(sb, indent, "Unk14", RelXml.HashString(Unk14)); + RelXml.StringTag(sb, indent, "Unk15", RelXml.HashString(Unk15)); + RelXml.StringTag(sb, indent, "Unk16", RelXml.HashString(Unk16)); + RelXml.StringTag(sb, indent, "Unk17", RelXml.HashString(Unk17)); + RelXml.StringTag(sb, indent, "Unk18", RelXml.HashString(Unk18)); + RelXml.ValueTag(sb, indent, "Unk19", Unk19.ToString()); + RelXml.StringTag(sb, indent, "Unk20", RelXml.HashString(Unk20)); + RelXml.StringTag(sb, indent, "Unk21", RelXml.HashString(Unk21)); + RelXml.StringTag(sb, indent, "Unk22", RelXml.HashString(Unk22)); + RelXml.StringTag(sb, indent, "Unk23", RelXml.HashString(Unk23)); + RelXml.StringTag(sb, indent, "Unk24", RelXml.HashString(Unk24)); + RelXml.StringTag(sb, indent, "Unk25", RelXml.HashString(Unk25)); + RelXml.StringTag(sb, indent, "Unk26", RelXml.HashString(Unk26)); + RelXml.StringTag(sb, indent, "Unk27", RelXml.HashString(Unk27)); + RelXml.ValueTag(sb, indent, "Unk28", Unk28.ToString()); + RelXml.ValueTag(sb, indent, "Unk29", Unk29.ToString()); + RelXml.StringTag(sb, indent, "Unk30", RelXml.HashString(Unk30)); + RelXml.StringTag(sb, indent, "Unk31", RelXml.HashString(Unk31)); + RelXml.StringTag(sb, indent, "Unk32", RelXml.HashString(Unk32)); + RelXml.StringTag(sb, indent, "Unk33", RelXml.HashString(Unk33)); + RelXml.StringTag(sb, indent, "Unk34", RelXml.HashString(Unk34)); + + if (Version >= 1) + { + RelXml.StringTag(sb, indent, "Unk35", RelXml.HashString(Unk35)); + RelXml.StringTag(sb, indent, "Unk36", RelXml.HashString(Unk36)); + RelXml.StringTag(sb, indent, "Unk37", RelXml.HashString(Unk37)); + RelXml.StringTag(sb, indent, "Unk38", RelXml.HashString(Unk38)); + RelXml.StringTag(sb, indent, "Unk39", RelXml.HashString(Unk39)); + RelXml.StringTag(sb, indent, "Unk40", RelXml.HashString(Unk40)); + RelXml.StringTag(sb, indent, "Unk41", RelXml.HashString(Unk41)); + RelXml.StringTag(sb, indent, "Unk42", RelXml.HashString(Unk42)); + RelXml.StringTag(sb, indent, "Unk43", RelXml.HashString(Unk43)); + RelXml.StringTag(sb, indent, "Unk44", RelXml.HashString(Unk44)); + RelXml.StringTag(sb, indent, "Unk45", RelXml.HashString(Unk45)); + RelXml.StringTag(sb, indent, "Unk46", RelXml.HashString(Unk46)); + RelXml.StringTag(sb, indent, "Unk47", RelXml.HashString(Unk47)); + + if (Version >= 2) + { + RelXml.ValueTag(sb, indent, "Unk48", Unk48.ToString()); + RelXml.ValueTag(sb, indent, "Unk49", Unk49.ToString()); + RelXml.ValueTag(sb, indent, "Unk50", Unk50.ToString()); + + if (Version >= 3) + { + RelXml.StringTag(sb, indent, "Unk51", RelXml.HashString(Unk51)); + RelXml.StringTag(sb, indent, "Unk52", RelXml.HashString(Unk52)); + RelXml.StringTag(sb, indent, "Unk53", RelXml.HashString(Unk53)); + RelXml.StringTag(sb, indent, "Unk54", RelXml.HashString(Unk54)); + RelXml.StringTag(sb, indent, "Unk55", RelXml.HashString(Unk55)); + RelXml.StringTag(sb, indent, "Unk56", RelXml.HashString(Unk56)); + RelXml.StringTag(sb, indent, "Unk57", RelXml.HashString(Unk57)); + RelXml.StringTag(sb, indent, "Unk58", RelXml.HashString(Unk58)); + RelXml.StringTag(sb, indent, "Unk59", RelXml.HashString(Unk59)); + RelXml.StringTag(sb, indent, "Unk60", RelXml.HashString(Unk60)); + RelXml.StringTag(sb, indent, "Unk61", RelXml.HashString(Unk61)); + RelXml.StringTag(sb, indent, "Unk62", RelXml.HashString(Unk62)); + RelXml.ValueTag(sb, indent, "Unk63", Unk63.ToString()); + RelXml.ValueTag(sb, indent, "Unk64", Unk64.ToString()); + RelXml.ValueTag(sb, indent, "Unk65", Unk65.ToString()); + RelXml.ValueTag(sb, indent, "Unk66", Unk66.ToString()); + RelXml.ValueTag(sb, indent, "Unk67", Unk67.ToString()); + } + } + } + } + } + [TC(typeof(EXP))] public class Dat151Explosion : Dat151RelData + { + public FlagsUint Unk01 { get; set; } + public MetaHash Unk02 { get; set; } + public MetaHash Unk03 { get; set; } + public float Unk04 { get; set; } + public float Unk05 { get; set; } + public float Unk06 { get; set; } + public float Unk07 { get; set; } + public float Unk08 { get; set; } + public MetaHash Unk09 { get; set; } + public MetaHash Unk10 { get; set; } + public int Unk11 { get; set; } + public int Unk12 { get; set; } + + public Dat151Explosion(RelFile rel) : base(rel) + { + Type = Dat151RelType.Explosion; + TypeID = (byte)Type; + } + public Dat151Explosion(RelData d, BinaryReader br) : base(d, br) + { + Unk01 = br.ReadUInt32();//flags + Unk02 = br.ReadUInt32();//hash + Unk03 = br.ReadUInt32();//hash + Unk04 = br.ReadSingle();//float + Unk05 = br.ReadSingle();//float + Unk06 = br.ReadSingle();//float + Unk07 = br.ReadSingle();//float + Unk08 = br.ReadSingle();//float + Unk09 = br.ReadUInt32();//hash + Unk10 = br.ReadUInt32();//hash + Unk11 = br.ReadInt32();//0 + Unk12 = br.ReadInt32();//0 + + if (Unk11 != 0) + { } + if (Unk12 != 0) + { } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk01);//flags + bw.Write(Unk02);//hash + bw.Write(Unk03);//hash + bw.Write(Unk04);//float + bw.Write(Unk05);//float + bw.Write(Unk06);//float + bw.Write(Unk07);//float + bw.Write(Unk08);//float + bw.Write(Unk09);//hash + bw.Write(Unk10);//hash + bw.Write(Unk11);//0 + bw.Write(Unk12);//0 + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk01", "0x" + Unk01.Hex); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); RelXml.ValueTag(sb, indent, "Unk04", FloatUtil.ToString(Unk04)); RelXml.ValueTag(sb, indent, "Unk05", FloatUtil.ToString(Unk05)); RelXml.ValueTag(sb, indent, "Unk06", FloatUtil.ToString(Unk06)); RelXml.ValueTag(sb, indent, "Unk07", FloatUtil.ToString(Unk07)); - RelXml.ValueTag(sb, indent, "Unk08", Unk08.ToString()); - RelXml.ValueTag(sb, indent, "Unk09", Unk09.ToString()); - RelXml.ValueTag(sb, indent, "Unk10", Unk10.ToString()); - RelXml.StringTag(sb, indent, "Unk11", RelXml.HashString(Unk11)); - RelXml.StringTag(sb, indent, "Unk12", RelXml.HashString(Unk12)); - RelXml.StringTag(sb, indent, "Unk13", RelXml.HashString(Unk13)); - RelXml.ValueTag(sb, indent, "Unk14", FloatUtil.ToString(Unk14)); - RelXml.ValueTag(sb, indent, "Unk15", Unk15.ToString()); - RelXml.ValueTag(sb, indent, "Unk16", Unk16.ToString()); - RelXml.ValueTag(sb, indent, "Unk17", FloatUtil.ToString(Unk17)); - RelXml.StringTag(sb, indent, "Unk18", RelXml.HashString(Unk18)); - RelXml.ValueTag(sb, indent, "Unk19", Unk19.ToString()); - RelXml.ValueTag(sb, indent, "Unk20", "0x" + Unk20.Hex); - RelXml.ValueTag(sb, indent, "Unk21", FloatUtil.ToString(Unk21)); - RelXml.ValueTag(sb, indent, "Unk22", FloatUtil.ToString(Unk22)); + RelXml.ValueTag(sb, indent, "Unk08", FloatUtil.ToString(Unk08)); + RelXml.StringTag(sb, indent, "Unk09", RelXml.HashString(Unk09)); + RelXml.StringTag(sb, indent, "Unk10", RelXml.HashString(Unk10)); + RelXml.ValueTag(sb, indent, "Unk11", Unk11.ToString()); + RelXml.ValueTag(sb, indent, "Unk12", Unk12.ToString()); + } + } + [TC(typeof(EXP))] public class Dat151PedPVG : Dat151RelData + { + public Dat151PedPVG(RelFile rel) : base(rel) + { + Type = Dat151RelType.PedPVG; + TypeID = (byte)Type; + } + public Dat151PedPVG(RelData d, BinaryReader br) : base(d, br) + { + FlagsUint Unk01 = br.ReadUInt32();//flags? + MetaHash Unk02 = br.ReadUInt32(); + MetaHash Unk03 = br.ReadUInt32();//ped name? + int Unk04 = br.ReadInt32(); + FlagsUint Unk05 = br.ReadUInt32();//0 + FlagsByte Unk06 = br.ReadByte(); + FlagsByte Unk07 = br.ReadByte(); + FlagsByte Unk08 = br.ReadByte(); + + if (Unk04 != 0) + { } + if (Unk05 != 0) + { } + if (Unk06 != 0) + { } + if (Unk07 != 0) + { } + if (Unk08 != 0) + { } + + //yay more weird arrays + //List bytes = new List(); + //while (br.BaseStream.Position < br.BaseStream.Length) + //{ + // bytes.Add(br.ReadByte()); + //} + + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + + } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + //WriteTypeAndOffset(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { } } @@ -8894,27 +9459,6 @@ namespace CodeWalker.GameFiles { } } - [TC(typeof(EXP))] public class Dat151Weapon : Dat151RelData - { - public Dat151Weapon(RelFile rel) : base(rel) - { - Type = Dat151RelType.Weapon; - TypeID = (byte)Type; - } - public Dat151Weapon(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - WriteTypeAndOffset(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - } - } [TC(typeof(EXP))] public class Dat151Unk18 : Dat151RelData { public Dat151Unk18(RelFile rel) : base(rel) @@ -9041,27 +9585,6 @@ namespace CodeWalker.GameFiles { } } - [TC(typeof(EXP))] public class Dat151PedPVG : Dat151RelData - { - public Dat151PedPVG(RelFile rel) : base(rel) - { - Type = Dat151RelType.PedPVG; - TypeID = (byte)Type; - } - public Dat151PedPVG(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - WriteTypeAndOffset(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - } - } [TC(typeof(EXP))] public class Dat151Unk31 : Dat151RelData { public Dat151Unk31(RelFile rel) : base(rel) @@ -9629,27 +10152,6 @@ namespace CodeWalker.GameFiles { } } - [TC(typeof(EXP))] public class Dat151Explosion : Dat151RelData - { - public Dat151Explosion(RelFile rel) : base(rel) - { - Type = Dat151RelType.Explosion; - TypeID = (byte)Type; - } - public Dat151Explosion(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - WriteTypeAndOffset(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - } - } [TC(typeof(EXP))] public class Dat151Unk95 : Dat151RelData { public Dat151Unk95(RelFile rel) : base(rel) diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs index 2fafc7c..3f970b6 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs @@ -3473,6 +3473,9 @@ namespace CodeWalker.GameFiles eVfxGroup = 679492, + silence = 3503773450, //used in game.dat151.rel + null_sound = 3817852694, //used in game.dat151.rel + From 4d2f54c9c8b6042f0a79d335cdf2de118a7234fa Mon Sep 17 00:00:00 2001 From: dexy Date: Fri, 18 Jan 2019 11:36:49 +1100 Subject: [PATCH 101/158] Dat151 progress --- .../GameFiles/FileTypes/RelFile.cs | 279 ++++++++++++++---- 1 file changed, 227 insertions(+), 52 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index 058f041..45eff48 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -538,6 +538,7 @@ namespace CodeWalker.GameFiles case Dat151RelType.RadioStations: return new Dat151RadioStations(d, br); // case Dat151RelType.RadioStation: return new Dat151RadioStation(d, br); case Dat151RelType.RadioMusic: return new Dat151RadioMusic(d, br); + case Dat151RelType.RadioTrackList: return new Dat151RadioTrackList(d, br); case Dat151RelType.Unk49: return new Dat151Unk49(d, br); case Dat151RelType.Unk84: return new Dat151Unk84(d, br); case Dat151RelType.Unk86: return new Dat151Unk86(d, br); @@ -620,7 +621,6 @@ namespace CodeWalker.GameFiles //case Dat151RelType.Unk116: return new Dat151Unk116(d, br); //case Dat151RelType.Unk118: return new Dat151Unk118(d, br); //case Dat151RelType.Unk119: return new Dat151Unk119(d, br); - //case Dat151RelType.Unk120: return new Dat151Unk120(d, br); //case Dat151RelType.Unk121: return new Dat151Unk121(d, br); default: @@ -3264,7 +3264,7 @@ namespace CodeWalker.GameFiles Unk117 = 117, Unk118 = 118, Unk119 = 119, - Unk120 = 120, //radio track list? + RadioTrackList = 120, //radio track list? Unk121 = 121, } @@ -4513,12 +4513,12 @@ namespace CodeWalker.GameFiles public uint Unk02 { get; set; } public ushort Unk03 { get; set; } public ushort Unk04 { get; set; } - public uint Unk05 { get; set; } - public uint Unk06 { get; set; } + public uint Unk05 { get; set; }//what is this? maybe shorts + public uint Unk06 { get; set; }//what is this? maybe shorts public ushort Unk07 { get; set; } public ushort Unk08 { get; set; } - public uint Unk09 { get; set; } - public uint Unk10 { get; set; } + public uint Unk09 { get; set; }//what is this? maybe shorts + public uint Unk10 { get; set; }//what is this? maybe shorts public uint Unk11 { get; set; } public uint Unk12 { get; set; } public uint Unk13 { get; set; } @@ -4756,6 +4756,66 @@ namespace CodeWalker.GameFiles } } } + [TC(typeof(EXP))] public class Dat151RadioTrackList : Dat151RelData + { + public FlagsUint Unk00 { get; set; } + public uint TrackCount { get; set; } + public Dat151HashPair[] Tracks { get; set; } + + public Dat151RadioTrackList(RelFile rel) : base(rel) + { + Type = Dat151RelType.RadioTrackList; + TypeID = (byte)Type; + } + public Dat151RadioTrackList(RelData d, BinaryReader br) : base(d, br) + { + Unk00 = br.ReadUInt32(); + TrackCount = br.ReadUInt32(); + Tracks = new Dat151HashPair[TrackCount]; + for (int i = 0; i < TrackCount; i++) + { + Tracks[i] = new Dat151HashPair(br.ReadUInt32(), br.ReadUInt32()); + } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk00); + bw.Write(TrackCount); + for (int i = 0; i < TrackCount; i++) + { + bw.Write(Tracks[i].Hash0); + bw.Write(Tracks[i].Hash1); + } + + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk00", "0x" + Unk00.Hex); + if (TrackCount > 0) + { + RelXml.OpenTag(sb, indent, "Tracks"); + var cind = indent + 1; + var cind2 = indent + 2; + for (int i = 0; i < TrackCount; i++) + { + RelXml.OpenTag(sb, cind, "Item"); + Tracks[i].WriteXml(sb, cind2); + RelXml.CloseTag(sb, cind, "Item"); + } + RelXml.CloseTag(sb, indent, "Tracks"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "Tracks"); + } + } + } [TC(typeof(EXP))] public class Dat151WeaponAudioItem : Dat151RelData { @@ -9189,6 +9249,54 @@ namespace CodeWalker.GameFiles } [TC(typeof(EXP))] public class Dat151PedPVG : Dat151RelData { + public FlagsUint Unk00 { get; set; }//flags? + public byte Unk01 { get; set; } = 94; + public byte Unk02 { get; set; } = 57; + public byte Unk03 { get; set; } = 245; + public byte ItemCount1 { get; set; } + public UnkStruct[] Items1 { get; set; } + public byte ItemCount2 { get; set; } + public UnkStruct[] Items2 { get; set; } + public byte ItemCount3 { get; set; } + public UnkStruct[] Items3 { get; set; } + public byte Unk07 { get; set; } //item count4? (=0) + + + public class UnkStruct + { + public MetaHash Name { get; set; } + public FlagsUint Unk1 { get; set; } + public FlagsUint Unk2 { get; set; } + + public UnkStruct(BinaryReader br) + { + Name = br.ReadUInt32(); + Unk1 = br.ReadUInt32(); + Unk2 = br.ReadUInt32(); + + if (Unk1 != 0) + { }//no hit + if (Unk2 != 0) + { }//no hit + } + public void Write(BinaryWriter bw) + { + bw.Write(Name); + bw.Write(Unk1); + bw.Write(Unk2); + } + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Name", RelXml.HashString(Name)); + RelXml.ValueTag(sb, indent, "Unk1", Unk1.Value.ToString()); + RelXml.ValueTag(sb, indent, "Unk2", Unk2.Value.ToString()); + } + public override string ToString() + { + return Name.ToString() + ", " + Unk1.Value.ToString() + ", " + Unk2.Value.ToString(); + } + } + public Dat151PedPVG(RelFile rel) : base(rel) { Type = Dat151RelType.PedPVG; @@ -9196,46 +9304,134 @@ namespace CodeWalker.GameFiles } public Dat151PedPVG(RelData d, BinaryReader br) : base(d, br) { - FlagsUint Unk01 = br.ReadUInt32();//flags? - MetaHash Unk02 = br.ReadUInt32(); - MetaHash Unk03 = br.ReadUInt32();//ped name? - int Unk04 = br.ReadInt32(); - FlagsUint Unk05 = br.ReadUInt32();//0 - FlagsByte Unk06 = br.ReadByte(); - FlagsByte Unk07 = br.ReadByte(); - FlagsByte Unk08 = br.ReadByte(); + Unk00 = br.ReadUInt32();//flags? + Unk01 = br.ReadByte();//94 + Unk02 = br.ReadByte();//57 + Unk03 = br.ReadByte();//245 - if (Unk04 != 0) - { } - if (Unk05 != 0) - { } - if (Unk06 != 0) - { } - if (Unk07 != 0) - { } - if (Unk08 != 0) - { } + ItemCount1 = br.ReadByte(); + Items1 = new UnkStruct[ItemCount1]; + for (int i = 0; i < ItemCount1; i++) + { + Items1[i] = new UnkStruct(br); + } - //yay more weird arrays - //List bytes = new List(); - //while (br.BaseStream.Position < br.BaseStream.Length) + ItemCount2 = br.ReadByte(); + Items2 = new UnkStruct[ItemCount2]; + for (int i = 0; i < ItemCount2; i++) + { + Items2[i] = new UnkStruct(br); + } + + ItemCount3 = br.ReadByte(); + Items3 = new UnkStruct[ItemCount3]; + for (int i = 0; i < ItemCount3; i++) + { + Items3[i] = new UnkStruct(br); + } + + Unk07 = br.ReadByte(); + //Items4 = new UnkStruct[Unk07]; + //for (int i = 0; i < Unk07; i++) //{ - // bytes.Add(br.ReadByte()); + // Items4[i] = new UnkStruct(br); //} + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } + //if (Unk06 != 0) + //{ } + //if (Unk04 != 0) + //{ } } public override void Write(BinaryWriter bw) { - base.Write(bw); - //WriteTypeAndOffset(bw); + WriteTypeAndOffset(bw); + + bw.Write(Unk00);//flags? + bw.Write(Unk01);//94 + bw.Write(Unk02);//57 + bw.Write(Unk03);//245 + bw.Write(ItemCount1); + for (int i = 0; i < ItemCount1; i++) + { + Items1[i].Write(bw); + } + bw.Write(ItemCount2); + for (int i = 0; i < ItemCount2; i++) + { + Items2[i].Write(bw); + } + bw.Write(ItemCount3); + for (int i = 0; i < ItemCount3; i++) + { + Items3[i].Write(bw); + } + bw.Write(Unk07); } public override void WriteXml(StringBuilder sb, int indent) { + RelXml.ValueTag(sb, indent, "Unk00", "0x" + Unk00.Hex); + RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); + RelXml.ValueTag(sb, indent, "Unk02", Unk01.ToString()); + RelXml.ValueTag(sb, indent, "Unk03", Unk01.ToString()); + + var cind = indent + 1; + var cind2 = indent + 2; + if (ItemCount1 > 0) + { + RelXml.OpenTag(sb, indent, "Items1"); + for (int i = 0; i < ItemCount1; i++) + { + RelXml.OpenTag(sb, cind, "Item"); + Items1[i].WriteXml(sb, cind2); + RelXml.CloseTag(sb, cind, "Item"); + } + RelXml.CloseTag(sb, indent, "Items1"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "Items1"); + } + + if (ItemCount2 > 0) + { + RelXml.OpenTag(sb, indent, "Items2"); + for (int i = 0; i < ItemCount2; i++) + { + RelXml.OpenTag(sb, cind, "Item"); + Items2[i].WriteXml(sb, cind2); + RelXml.CloseTag(sb, cind, "Item"); + } + RelXml.CloseTag(sb, indent, "Items2"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "Items2"); + } + + if (ItemCount3 > 0) + { + RelXml.OpenTag(sb, indent, "Items3"); + for (int i = 0; i < ItemCount3; i++) + { + RelXml.OpenTag(sb, cind, "Item"); + Items3[i].WriteXml(sb, cind2); + RelXml.CloseTag(sb, cind, "Item"); + } + RelXml.CloseTag(sb, indent, "Items3"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "Items3"); + } + + RelXml.ValueTag(sb, indent, "Unk07", Unk07.ToString()); + } } @@ -9248,7 +9444,7 @@ namespace CodeWalker.GameFiles - + //TODO classes [TC(typeof(EXP))] public class Dat151Unk2 : Dat151RelData { public Dat151Unk2(RelFile rel) : base(rel) @@ -10530,27 +10726,6 @@ namespace CodeWalker.GameFiles { } } - [TC(typeof(EXP))] public class Dat151Unk120 : Dat151RelData - { - public Dat151Unk120(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk120; - TypeID = (byte)Type; - } - public Dat151Unk120(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - WriteTypeAndOffset(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - } - } [TC(typeof(EXP))] public class Dat151Unk121 : Dat151RelData { public Dat151Unk121(RelFile rel) : base(rel) From 35d10a8e489fd85bf01622e7373f60b2ada22d76 Mon Sep 17 00:00:00 2001 From: dexy Date: Sat, 19 Jan 2019 04:31:13 +1100 Subject: [PATCH 102/158] XML to audio dat.rel conversion progress --- .../GameFiles/FileTypes/RelFile.cs | 2585 ++++++++++++++++- CodeWalker.Core/GameFiles/GameFileCache.cs | 41 + CodeWalker.Core/Utils/Xml.cs | 121 + Project/ProjectForm.cs | 2 +- 4 files changed, 2716 insertions(+), 33 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index 45eff48..fc866cc 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -8,6 +8,8 @@ using System.Threading.Tasks; using TC = System.ComponentModel.TypeConverterAttribute; using EXP = System.ComponentModel.ExpandableObjectConverter; using SharpDX; +using System.Xml; +using System.Text.RegularExpressions; @@ -629,9 +631,178 @@ namespace CodeWalker.GameFiles } + public RelData CreateRelData(RelDatFileType relType, int dataType) + { + RelData d = null; + switch (relType) + { + case RelDatFileType.Dat54DataEntries: + switch ((Dat54SoundType)dataType) + { + case Dat54SoundType.LoopingSound: return new Dat54LoopingSound(this); + case Dat54SoundType.EnvelopeSound: return new Dat54EnvelopeSound(this); + case Dat54SoundType.TwinLoopSound: return new Dat54TwinLoopSound(this); + case Dat54SoundType.SpeechSound: return new Dat54SpeechSound(this); + case Dat54SoundType.OnStopSound: return new Dat54OnStopSound(this); + case Dat54SoundType.WrapperSound: return new Dat54WrapperSound(this); + case Dat54SoundType.SequentialSound: return new Dat54SequentialSound(this); + case Dat54SoundType.StreamingSound: return new Dat54StreamingSound(this); + case Dat54SoundType.RetriggeredOverlappedSound: return new Dat54RetriggeredOverlappedSound(this); + case Dat54SoundType.CrossfadeSound: return new Dat54CrossfadeSound(this); + case Dat54SoundType.CollapsingStereoSound: return new Dat54CollapsingStereoSound(this); + case Dat54SoundType.SimpleSound: return new Dat54SimpleSound(this); + case Dat54SoundType.MultitrackSound: return new Dat54MultitrackSound(this); + case Dat54SoundType.RandomizedSound: return new Dat54RandomizedSound(this); + case Dat54SoundType.EnvironmentSound: return new Dat54EnvironmentSound(this); + case Dat54SoundType.DynamicEntitySound: return new Dat54DynamicEntitySound(this); + case Dat54SoundType.SequentialOverlapSound: return new Dat54SequentialOverlapSound(this); + case Dat54SoundType.ModularSynthSound: return new Dat54ModularSynthSound(this); + case Dat54SoundType.GranularSound: return new Dat54GranularSound(this); + case Dat54SoundType.DirectionalSound: return new Dat54DirectionalSound(this); + case Dat54SoundType.KineticSound: return new Dat54KineticSound(this); + case Dat54SoundType.SwitchSound: return new Dat54SwitchSound(this); + case Dat54SoundType.VariableCurveSound: return new Dat54VariableCurveSound(this); + case Dat54SoundType.VariablePrintValueSound: return new Dat54VariablePrintValueSound(this); + case Dat54SoundType.VariableBlockSound: return new Dat54VariableBlockSound(this); + case Dat54SoundType.IfSound: return new Dat54IfSound(this); + case Dat54SoundType.MathOperationSound: return new Dat54MathOperationSound(this); + case Dat54SoundType.ParameterTransformSound: return new Dat54ParameterTransformSound(this); + case Dat54SoundType.FluctuatorSound: return new Dat54FluctuatorSound(this); + case Dat54SoundType.AutomationSound: return new Dat54AutomationSound(this); + case Dat54SoundType.ExternalStreamSound: return new Dat54ExternalStreamSound(this); + case Dat54SoundType.SoundSet: return new Dat54SoundSet(this); + case Dat54SoundType.Unknown: return new Dat54UnknownSound(this); + case Dat54SoundType.Unknown2: return new Dat54UnknownSound2(this); + case Dat54SoundType.SoundList: return new Dat54SoundList(this); + default: + return new Dat54Sound(this, (Dat54SoundType)d.TypeID); //shouldn't get here + } + case RelDatFileType.Dat149: + case RelDatFileType.Dat150: + case RelDatFileType.Dat151: + switch ((Dat151RelType)dataType) + { + case Dat151RelType.AmbientEmitterList: return new Dat151AmbientEmitterList(this); + case Dat151RelType.AmbientZone: return new Dat151AmbientZone(this); + case Dat151RelType.AmbientEmitter: return new Dat151AmbientEmitter(this); + case Dat151RelType.AmbientZoneList: return new Dat151AmbientZoneList(this); + case Dat151RelType.Collision: return new Dat151Collision(this); //maybe for vehicle + case Dat151RelType.WeaponAudioItem: return new Dat151WeaponAudioItem(this); + case Dat151RelType.StartTrackAction: return new Dat151StartTrackAction(this); + case Dat151RelType.StopTrackAction: return new Dat151StopTrackAction(this); + case Dat151RelType.Mood: return new Dat151Mood(this); + case Dat151RelType.SetMoodAction: return new Dat151SetMoodAction(this); + case Dat151RelType.PlayerAction: return new Dat151PlayerAction(this); + case Dat151RelType.StartOneShotAction: return new Dat151StartOneShotAction(this); + case Dat151RelType.StopOneShotAction: return new Dat151StopOneShotAction(this); + case Dat151RelType.FadeOutRadioAction: return new Dat151FadeOutRadioAction(this); + case Dat151RelType.FadeInRadioAction: return new Dat151FadeInRadioAction(this); + case Dat151RelType.Mod: return new Dat151Mod(this); + case Dat151RelType.Interior: return new Dat151Interior(this); + case Dat151RelType.InteriorRoom: return new Dat151InteriorRoom(this); + case Dat151RelType.Unk117: return new Dat151Unk117(this); + case Dat151RelType.Entity: return new Dat151Entity(this); //not sure about this + case Dat151RelType.Unk47: return new Dat151Unk47(this); + case Dat151RelType.Unk83: return new Dat151Unk83(this); + case Dat151RelType.RadioDjSpeechAction: return new Dat151RadioDjSpeechAction(this); + case Dat151RelType.ForceRadioTrackAction: return new Dat151ForceRadioTrackAction(this); + case Dat151RelType.Unk78: return new Dat151Unk78(this); + case Dat151RelType.RadioStations: return new Dat151RadioStations(this); // + case Dat151RelType.RadioStation: return new Dat151RadioStation(this); + case Dat151RelType.RadioMusic: return new Dat151RadioMusic(this); + case Dat151RelType.RadioTrackList: return new Dat151RadioTrackList(this); + case Dat151RelType.Unk49: return new Dat151Unk49(this); + case Dat151RelType.Unk84: return new Dat151Unk84(this); + case Dat151RelType.Unk86: return new Dat151Unk86(this); + case Dat151RelType.Unk81: return new Dat151Unk81(this); + case Dat151RelType.Unk55: return new Dat151Unk55(this); + case Dat151RelType.ShoreLinePool: return new Dat151ShoreLinePool(this); + case Dat151RelType.ShoreLineLake: return new Dat151ShoreLineLake(this); + case Dat151RelType.ShoreLineRiver: return new Dat151ShoreLineRiver(this); + case Dat151RelType.ShoreLineOcean: return new Dat151ShoreLineOcean(this); + case Dat151RelType.ShoreLineList: return new Dat151ShoreLineList(this); + case Dat151RelType.Unk114: return new Dat151Unk114(this); + case Dat151RelType.VehicleEngineGranular: return new Dat151VehicleEngineGranular(this); //maybe not just vehicle + case Dat151RelType.Vehicle: return new Dat151Vehicle(this); + case Dat151RelType.VehicleEngine: return new Dat151VehicleEngine(this); + case Dat151RelType.VehicleScannerParams: return new Dat151VehicleScannerParams(this); //maybe not just vehicle + case Dat151RelType.StaticEmitter: return new Dat151StaticEmitter(this); + case Dat151RelType.Weapon: return new Dat151Weapon(this); + case Dat151RelType.Explosion: return new Dat151Explosion(this); + case Dat151RelType.PedPVG: return new Dat151PedPVG(this); //maybe Ped Voice Group? + //case Dat151RelType.Helicopter: return new Dat151Helicopter(this); //maybe + //case Dat151RelType.SpeechParams: return new Dat151SpeechParams(this); + //case Dat151RelType.Aeroplane: return new Dat151Aeroplane(this); + //case Dat151RelType.AnimalParams: return new Dat151AnimalParams(this); + //case Dat151RelType.Unk2: return new Dat151Unk2(this); + //case Dat151RelType.Unk7: return new Dat151Unk7(this); + //case Dat151RelType.Unk9: return new Dat151Unk9(this); + //case Dat151RelType.Unk11: return new Dat151Unk11(this); + //case Dat151RelType.Unk12: return new Dat151Unk12(this); + //case Dat151RelType.Unk13: return new Dat151Unk13(this); + //case Dat151RelType.Unk15: return new Dat151Unk15(this); + //case Dat151RelType.Unk16: return new Dat151Unk16(this); + //case Dat151RelType.Unk18: return new Dat151Unk18(this); + //case Dat151RelType.Unk22: return new Dat151Unk22(this); + //case Dat151RelType.Unk23: return new Dat151Unk23(this); + //case Dat151RelType.Unk27: return new Dat151Unk27(this); + //case Dat151RelType.Unk28: return new Dat151Unk28(this); + //case Dat151RelType.Unk29: return new Dat151Unk29(this); + //case Dat151RelType.Unk31: return new Dat151Unk31(this); + //case Dat151RelType.Unk33: return new Dat151Unk33(this); + //case Dat151RelType.Unk35: return new Dat151Unk35(this); + //case Dat151RelType.Unk36: return new Dat151Unk36(this); + //case Dat151RelType.Unk40: return new Dat151Unk40(this); + //case Dat151RelType.Unk41: return new Dat151Unk41(this); + //case Dat151RelType.Unk42: return new Dat151Unk42(this); + //case Dat151RelType.Unk45: return new Dat151Unk45(this); + //case Dat151RelType.Unk48: return new Dat151Unk48(this); + //case Dat151RelType.Unk51: return new Dat151Unk51(this); + //case Dat151RelType.Unk53: return new Dat151Unk53(this); + //case Dat151RelType.Unk54: return new Dat151Unk54(this); + //case Dat151RelType.Unk56: return new Dat151Unk56(this); + //case Dat151RelType.Unk59: return new Dat151Unk59(this); + //case Dat151RelType.Unk69: return new Dat151Unk69(this); + //case Dat151RelType.Unk70: return new Dat151Unk70(this); + //case Dat151RelType.Unk71: return new Dat151Unk71(this); + //case Dat151RelType.Unk72: return new Dat151Unk72(this); + //case Dat151RelType.Unk74: return new Dat151Unk74(this); + //case Dat151RelType.Unk75: return new Dat151Unk75(this); + //case Dat151RelType.Unk77: return new Dat151Unk77(this); + //case Dat151RelType.Unk79: return new Dat151Unk79(this); + //case Dat151RelType.Unk80: return new Dat151Unk80(this); + //case Dat151RelType.Unk82: return new Dat151Unk82(this); + //case Dat151RelType.Unk85: return new Dat151Unk85(this); + //case Dat151RelType.Unk95: return new Dat151Unk95(this); + //case Dat151RelType.Unk96: return new Dat151Unk96(this); + //case Dat151RelType.Unk99: return new Dat151Unk99(this); + //case Dat151RelType.Unk100: return new Dat151Unk100(this); + //case Dat151RelType.Unk101: return new Dat151Unk101(this); + //case Dat151RelType.Unk105: return new Dat151Unk105(this); + //case Dat151RelType.Unk106: return new Dat151Unk106(this); + //case Dat151RelType.Unk107: return new Dat151Unk107(this); + //case Dat151RelType.Unk108: return new Dat151Unk108(this); + //case Dat151RelType.Unk109: return new Dat151Unk109(this); + //case Dat151RelType.Unk110: return new Dat151Unk110(this); + //case Dat151RelType.Unk111: return new Dat151Unk111(this); + //case Dat151RelType.Unk112: return new Dat151Unk112(this); + //case Dat151RelType.Unk113: return new Dat151Unk113(this); + //case Dat151RelType.Unk115: return new Dat151Unk115(this); + //case Dat151RelType.Unk116: return new Dat151Unk116(this); + //case Dat151RelType.Unk118: return new Dat151Unk118(this); + //case Dat151RelType.Unk119: return new Dat151Unk119(this); + //case Dat151RelType.Unk121: return new Dat151Unk121(this); - + default: + return new Dat151RelData(this, (Dat151RelType)dataType); + } + default: + d = new RelData(this); + d.TypeID = (byte)dataType; + return d; + } + } @@ -1005,6 +1176,7 @@ namespace CodeWalker.GameFiles BuildPackTable(); + if (DataBlock == null) return null; @@ -1236,6 +1408,16 @@ namespace CodeWalker.GameFiles } + public virtual void ReadXml(XmlNode node) + { + var rawnode = node.SelectSingleNode("RawData"); + if (rawnode != null) + { + Data = Xml.GetRawByteArray(rawnode); + DataLength = (uint)Data.Length; + } + } + public string GetNameString() { @@ -1300,6 +1482,10 @@ namespace CodeWalker.GameFiles public uint HeaderLength { get; set; } = 0; + public RelSoundHeader(XmlNode node) + { + ReadXml(node); + } public RelSoundHeader(BinaryReader br) { var pos = br.BaseStream.Position; @@ -1405,6 +1591,56 @@ namespace CodeWalker.GameFiles if (Bit(31)) RelXml.ValueTag(sb, indent, "Unk26", Unk26.ToString()); //maybe not } + } + public void ReadXml(XmlNode node) + { + Xml.GetChildUIntAttribute(node, "Flags", "value"); + + if ((Flags & 0xFF) != 0xAA) + { + if (Bit(0)) Flags2 = Xml.GetChildUIntAttribute(node, "Flags2", "value"); + if (Bit(1)) Unk01 = (ushort)Xml.GetChildUIntAttribute(node, "Unk01", "value"); + if (Bit(2)) Unk02 = (ushort)Xml.GetChildUIntAttribute(node, "Unk02", "value"); + if (Bit(3)) Unk03 = (ushort)Xml.GetChildUIntAttribute(node, "Unk03", "value"); + if (Bit(4)) Unk04 = (ushort)Xml.GetChildUIntAttribute(node, "Unk04", "value"); + if (Bit(5)) Unk05 = (ushort)Xml.GetChildUIntAttribute(node, "Unk05", "value"); + if (Bit(6)) Unk06 = (ushort)Xml.GetChildUIntAttribute(node, "Unk06", "value"); + if (Bit(7)) Unk07 = (ushort)Xml.GetChildUIntAttribute(node, "Unk07", "value"); + } + if ((Flags & 0xFF00) != 0xAA00) + { + if (Bit(8)) Unk08 = (ushort)Xml.GetChildUIntAttribute(node, "Unk08", "value"); + if (Bit(9)) Unk09 = (ushort)Xml.GetChildUIntAttribute(node, "Unk09", "value"); + if (Bit(10)) UnkHash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "UnkHash1")); + if (Bit(11)) UnkHash2 = XmlRel.GetHash(Xml.GetChildInnerText(node, "UnkHash2")); + if (Bit(12)) Unk10 = (ushort)Xml.GetChildUIntAttribute(node, "Unk10", "value"); + if (Bit(13)) Unk11 = (ushort)Xml.GetChildUIntAttribute(node, "Unk11", "value"); + if (Bit(14)) Unk12 = (ushort)Xml.GetChildUIntAttribute(node, "Unk12", "value"); + if (Bit(15)) CategoryHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "Category")); + } + if ((Flags & 0xFF0000) != 0xAA0000) + { + if (Bit(16)) Unk14 = (ushort)Xml.GetChildUIntAttribute(node, "Unk14", "value"); + if (Bit(17)) Unk15 = (ushort)Xml.GetChildUIntAttribute(node, "Unk15", "value"); + if (Bit(18)) Unk16 = (ushort)Xml.GetChildUIntAttribute(node, "Unk16", "value"); + if (Bit(19)) Unk17 = (ushort)Xml.GetChildUIntAttribute(node, "Unk17", "value"); + if (Bit(20)) UnkHash3 = XmlRel.GetHash(Xml.GetChildInnerText(node, "UnkHash3")); + if (Bit(21)) Unk18 = (ushort)Xml.GetChildUIntAttribute(node, "Unk18", "value"); + if (Bit(22)) Unk19 = (byte)Xml.GetChildUIntAttribute(node, "Unk19", "value"); + if (Bit(23)) Unk20 = (byte)Xml.GetChildUIntAttribute(node, "Unk20", "value"); + } + if ((Flags & 0xFF000000) != 0xAA000000) + { + if (Bit(24)) Unk21 = (byte)Xml.GetChildUIntAttribute(node, "Unk21", "value"); + if (Bit(25)) UnkHash4 = XmlRel.GetHash(Xml.GetChildInnerText(node, "UnkHash4")); + if (Bit(26)) UnkHash5 = XmlRel.GetHash(Xml.GetChildInnerText(node, "UnkHash5")); + if (Bit(27)) Unk22 = (ushort)Xml.GetChildUIntAttribute(node, "Unk22", "value"); + if (Bit(28)) Unk23 = (ushort)Xml.GetChildUIntAttribute(node, "Unk23", "value"); + if (Bit(29)) Unk24 = (ushort)Xml.GetChildUIntAttribute(node, "Unk24", "value"); + if (Bit(30)) Unk25 = (ushort)Xml.GetChildUIntAttribute(node, "Unk25", "value"); + if (Bit(31)) Unk26 = (ushort)Xml.GetChildUIntAttribute(node, "Unk26", "value"); + } + } private bool Bit(int b) @@ -1426,6 +1662,9 @@ namespace CodeWalker.GameFiles public MetaHash[] AudioTrackHashes { get; set; } public MetaHash[] AudioContainers { get; set; } //Relative path to parent wave container (i.e. "RESIDENT/animals") + public RelSound(RelFile rel) : base(rel) + { + } public RelSound(RelData d, BinaryReader br) : base(d) { Header = new RelSoundHeader(br); @@ -1466,6 +1705,30 @@ namespace CodeWalker.GameFiles } RelXml.CloseTag(sb, indent, "AudioTracks"); } + + + public void ReadHeaderXml(XmlNode node) + { + var hnode = node.SelectSingleNode("Header"); + if (hnode == null) return; + + Header = new RelSoundHeader(node); + } + + public void ReadAudioTracksXml(XmlNode node) + { + var atnode = node.SelectSingleNode("AudioTracks"); + if (atnode == null) return; + + var tracknodes = atnode.SelectNodes("Item"); + var tracklist = new List(); + foreach (XmlNode tracknode in tracknodes) + { + tracklist.Add(XmlRel.GetHash(tracknode.InnerText)); + } + AudioTrackHashes = tracklist.ToArray(); + AudioTracksCount = (byte)tracklist.Count; + } } @@ -1518,14 +1781,26 @@ namespace CodeWalker.GameFiles { public Dat54SoundType Type { get; set; } + public Dat54Sound(RelFile rel, Dat54SoundType t) : base(rel) + { + Type = t; + TypeID = (byte)t; + } public Dat54Sound(RelData d, BinaryReader br) : base(d, br) { Type = (Dat54SoundType)TypeID; } + public override void ReadXml(XmlNode node) + { + //don't use this as a fallback case! only for reading the header, for use with all defined Dat54Sounds! + ReadHeaderXml(node); + //base.ReadXml(node); + } public override void WriteXml(StringBuilder sb, int indent) { - WriteHeaderXml(sb, indent); //don't use this as a fallback case! only for writing the header, for use with all defined Dat54Sounds! + //don't use this as a fallback case! only for writing the header, for use with all defined Dat54Sounds! + WriteHeaderXml(sb, indent); //base.WriteXml(sb, indent); } @@ -1543,6 +1818,8 @@ namespace CodeWalker.GameFiles public MetaHash AudioHash { get; set; } //0x6-0xA public MetaHash ParameterHash { get; set; } //0xA-0xE + public Dat54LoopingSound(RelFile rel) : base(rel, Dat54SoundType.LoopingSound) + { } public Dat54LoopingSound(RelData d, BinaryReader br) : base(d, br) { UnkShort0 = br.ReadInt16(); @@ -1552,7 +1829,15 @@ namespace CodeWalker.GameFiles AudioTrackHashes = new[] { AudioHash }; ParameterHash = br.ReadUInt32(); } - + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + UnkShort0 = (short)Xml.GetChildIntAttribute(node, "UnkShort0", "value"); + UnkShort1 = (short)Xml.GetChildIntAttribute(node, "UnkShort1", "value"); + UnkShort2 = (short)Xml.GetChildIntAttribute(node, "UnkShort2", "value"); + AudioHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash")); + ParameterHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash")); + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -1589,6 +1874,8 @@ namespace CodeWalker.GameFiles public float UnkFloat0 { get; set; } //0x44-0x48 public float UnkFloat1 { get; set; } //0x48-0x4C + public Dat54EnvelopeSound(RelFile rel) : base(rel, Dat54SoundType.EnvelopeSound) + { } public Dat54EnvelopeSound(RelData d, BinaryReader br) : base(d, br) { UnkShort0 = br.ReadUInt16(); //0x0-0x2 @@ -1616,7 +1903,33 @@ namespace CodeWalker.GameFiles UnkFloat1 = br.ReadSingle(); //0x48-0x4C AudioTrackHashes = new[] { AudioHash }; } - + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + UnkShort0 = (ushort)Xml.GetChildUIntAttribute(node, "UnkShort0", "value"); + UnkShort1 = (ushort)Xml.GetChildUIntAttribute(node, "UnkShort1", "value"); + UnkShort2 = (ushort)Xml.GetChildUIntAttribute(node, "UnkShort2", "value"); + UnkShort3 = (ushort)Xml.GetChildUIntAttribute(node, "UnkShort3", "value"); + UnkByte0 = (byte)Xml.GetChildUIntAttribute(node, "UnkByte0", "value"); + UnkByte1 = (byte)Xml.GetChildUIntAttribute(node, "UnkByte1", "value"); + UnkInt0 = Xml.GetChildIntAttribute(node, "UnkInt0", "value"); + UnkShort4 = (ushort)Xml.GetChildUIntAttribute(node, "UnkShort4", "value"); + UnkInt1 = Xml.GetChildIntAttribute(node, "UnkInt1", "value"); + UnkInt2 = Xml.GetChildIntAttribute(node, "UnkInt2", "value"); + CurvesUnkHash0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "CurvesUnkHash0")); + CurvesUnkHash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "CurvesUnkHash1")); + CurvesUnkHash2 = XmlRel.GetHash(Xml.GetChildInnerText(node, "CurvesUnkHash2")); + ParameterHash0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash0")); + ParameterHash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash1")); + ParameterHash2 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash2")); + ParameterHash3 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash3")); + ParameterHash4 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash4")); + AudioHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash")); + UnkInt3 = Xml.GetChildIntAttribute(node, "UnkInt3", "value"); + ParameterHash5 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash5")); + UnkFloat0 = Xml.GetChildFloatAttribute(node, "UnkFloat0", "value"); + UnkFloat1 = Xml.GetChildFloatAttribute(node, "UnkFloat1", "value"); + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -1657,6 +1970,8 @@ namespace CodeWalker.GameFiles public MetaHash ParameterHash2 { get; set; } //0x14-0x18 public MetaHash ParameterHash3 { get; set; } //0x18-0x1C + public Dat54TwinLoopSound(RelFile rel) : base(rel, Dat54SoundType.TwinLoopSound) + { } public Dat54TwinLoopSound(RelData d, BinaryReader br) : base(d, br) { UnkShort0 = br.ReadUInt16(); @@ -1671,6 +1986,20 @@ namespace CodeWalker.GameFiles ReadAudioTrackHashes(br); } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + UnkShort0 = (ushort)Xml.GetChildUIntAttribute(node, "UnkShort0", "value"); + UnkShort1 = (ushort)Xml.GetChildUIntAttribute(node, "UnkShort1", "value"); + UnkShort2 = (ushort)Xml.GetChildUIntAttribute(node, "UnkShort2", "value"); + UnkShort3 = (ushort)Xml.GetChildUIntAttribute(node, "UnkShort3", "value"); + UnkHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "UnkHash")); + ParameterHash0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash0")); + ParameterHash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash1")); + ParameterHash2 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash2")); + ParameterHash3 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash3")); + ReadAudioTracksXml(node); + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -1693,6 +2022,8 @@ namespace CodeWalker.GameFiles public MetaHash VoiceDataHash { get; set; } //0x8-0xC public string SpeechName { get; set; } //0xD-... + public Dat54SpeechSound(RelFile rel) : base(rel, Dat54SoundType.SpeechSound) + { } public Dat54SpeechSound(RelData d, BinaryReader br) : base(d, br) { UnkInt0 = br.ReadInt32(); @@ -1700,6 +2031,14 @@ namespace CodeWalker.GameFiles VoiceDataHash = br.ReadUInt32(); SpeechName = br.ReadString(); } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + UnkInt0 = Xml.GetChildIntAttribute(node, "UnkInt0", "value"); + UnkInt1 = Xml.GetChildIntAttribute(node, "UnkInt1", "value"); + VoiceDataHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "VoiceDataHash")); + SpeechName = Xml.GetChildInnerText(node, "SpeechName"); + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -1715,6 +2054,8 @@ namespace CodeWalker.GameFiles public MetaHash AudioHash1 { get; set; } public MetaHash AudioHash2 { get; set; } + public Dat54OnStopSound(RelFile rel) : base(rel, Dat54SoundType.OnStopSound) + { } public Dat54OnStopSound(RelData d, BinaryReader br) : base(d, br) { AudioHash0 = br.ReadUInt32(); @@ -1722,6 +2063,13 @@ namespace CodeWalker.GameFiles AudioHash2 = br.ReadUInt32(); AudioTrackHashes = new[] { AudioHash0, AudioHash1, AudioHash2 }; } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + AudioHash0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash0")); + AudioHash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash1")); + AudioHash2 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash2")); + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -1740,6 +2088,8 @@ namespace CodeWalker.GameFiles public MetaHash[] Variables { get; set; } //0xF public byte[] UnkByteData { get; set; } // ... + public Dat54WrapperSound(RelFile rel) : base(rel, Dat54SoundType.WrapperSound) + { } public Dat54WrapperSound(RelData d, BinaryReader br) : base(d, br) { AudioHash0 = br.ReadUInt32(); @@ -1756,6 +2106,32 @@ namespace CodeWalker.GameFiles AudioTrackHashes = new[] { AudioHash0, AudioHash1 }; } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + AudioHash0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash0")); + FrameStartTime = Xml.GetChildIntAttribute(node, "FrameStartTime", "value"); + AudioHash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash1")); + FrameTimeInterval = (short)Xml.GetChildIntAttribute(node, "FrameTimeInterval", "value"); + var vnode = node.SelectSingleNode("Variables"); + if (vnode != null) + { + var inodes = vnode.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + var ulist = new List(); + foreach (XmlNode inode in inodes) + { + vlist.Add(XmlRel.GetHash(Xml.GetStringAttribute(inode, "key"))); + ulist.Add((byte)Xml.GetIntAttribute(inode, "value")); + } + ItemCount = (byte)vlist.Count; + Variables = vlist.ToArray(); + UnkByteData = ulist.ToArray(); + } + } + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -1784,10 +2160,17 @@ namespace CodeWalker.GameFiles } [TC(typeof(EXP))] public class Dat54SequentialSound : Dat54Sound { + public Dat54SequentialSound(RelFile rel) : base(rel, Dat54SoundType.SequentialSound) + { } public Dat54SequentialSound(RelData d, BinaryReader br) : base(d, br) { ReadAudioTrackHashes(br); } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + ReadAudioTracksXml(node); + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -1798,12 +2181,20 @@ namespace CodeWalker.GameFiles { int UnkInt { get; set; } //0x0-0x4 + public Dat54StreamingSound(RelFile rel) : base(rel, Dat54SoundType.StreamingSound) + { } public Dat54StreamingSound(RelData d, BinaryReader br) : base(d, br) { UnkInt = br.ReadInt32(); ReadAudioTrackHashes(br); } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + UnkInt = Xml.GetChildIntAttribute(node, "UnkInt", "value"); + ReadAudioTracksXml(node); + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -1823,6 +2214,8 @@ namespace CodeWalker.GameFiles public MetaHash AudioHash1 { get; set; } public MetaHash AudioHash2 { get; set; } + public Dat54RetriggeredOverlappedSound(RelFile rel) : base(rel, Dat54SoundType.RetriggeredOverlappedSound) + { } public Dat54RetriggeredOverlappedSound(RelData d, BinaryReader br) : base(d, br) { UnkShort0 = br.ReadUInt16(); @@ -1836,6 +2229,19 @@ namespace CodeWalker.GameFiles AudioHash2 = br.ReadUInt32(); AudioTrackHashes = new[] { AudioHash0, AudioHash1, AudioHash2 }; } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + UnkShort0 = (ushort)Xml.GetChildUIntAttribute(node, "UnkShort0", "value"); + UnkShort1 = (ushort)Xml.GetChildUIntAttribute(node, "UnkShort1", "value"); + UnkShort2 = (ushort)Xml.GetChildUIntAttribute(node, "UnkShort2", "value"); + UnkShort3 = (ushort)Xml.GetChildUIntAttribute(node, "UnkShort3", "value"); + ParameterHash0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash0")); + ParameterHash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash1")); + AudioHash0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash0")); + AudioHash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash1")); + AudioHash2 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash2")); + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -1865,6 +2271,8 @@ namespace CodeWalker.GameFiles public MetaHash ParameterHash3 { get; set; } //0x25-0x29 public MetaHash ParameterHash4 { get; set; } //0x29-0x2D + public Dat54CrossfadeSound(RelFile rel) : base(rel, Dat54SoundType.CrossfadeSound) + { } public Dat54CrossfadeSound(RelData d, BinaryReader br) : base(d, br) { AudioHash0 = br.ReadUInt32(); @@ -1881,6 +2289,22 @@ namespace CodeWalker.GameFiles ParameterHash3 = br.ReadUInt32(); ParameterHash4 = br.ReadUInt32(); } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + AudioHash0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash0")); + AudioHash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash1")); + UnkByte = (byte)Xml.GetChildUIntAttribute(node, "UnkByte", "value"); + UnkFloat0 = Xml.GetChildFloatAttribute(node, "UnkFloat0", "value"); + UnkFloat1 = Xml.GetChildFloatAttribute(node, "UnkFloat1", "value"); + UnkInt = Xml.GetChildIntAttribute(node, "UnkInt", "value"); + UnkCurvesHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "UnkCurvesHash")); + ParameterHash0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash0")); + ParameterHash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash1")); + ParameterHash2 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash2")); + ParameterHash3 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash3")); + ParameterHash4 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash4")); + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -1913,6 +2337,8 @@ namespace CodeWalker.GameFiles public int UnkInt { get; set; } //0x24-0x28 public byte UnkByte { get; set; } //0x2c-0x2D + public Dat54CollapsingStereoSound(RelFile rel) : base(rel, Dat54SoundType.CollapsingStereoSound) + { } public Dat54CollapsingStereoSound(RelData d, BinaryReader br) : base(d, br) { AudioHash0 = br.ReadUInt32(); @@ -1929,6 +2355,22 @@ namespace CodeWalker.GameFiles ParameterHash5 = br.ReadUInt32(); //0x28-0x2C UnkByte = br.ReadByte(); //0x2C-0x2D } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + AudioHash0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash0")); + AudioHash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash1")); + UnkFloat0 = Xml.GetChildFloatAttribute(node, "UnkFloat0", "value"); + UnkFloat1 = Xml.GetChildFloatAttribute(node, "UnkFloat1", "value"); + ParameterHash0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash0")); + ParameterHash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash1")); + ParameterHash2 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash2")); + ParameterHash3 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash3")); + ParameterHash4 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash4")); + ParameterHash5 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash5")); + UnkInt = Xml.GetChildIntAttribute(node, "UnkInt", "value"); + UnkByte = (byte)Xml.GetChildUIntAttribute(node, "UnkByte", "value"); + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -1952,6 +2394,8 @@ namespace CodeWalker.GameFiles public MetaHash FileName { get; set; } //Name of the .wav file public byte WaveSlotNum { get; set; } //Internal index of wave (.awc) container + public Dat54SimpleSound(RelFile rel) : base(rel, Dat54SoundType.SimpleSound) + { } public Dat54SimpleSound(RelData d, BinaryReader br) : base(d, br) { ContainerName = br.ReadUInt32(); @@ -1959,6 +2403,13 @@ namespace CodeWalker.GameFiles FileName = br.ReadUInt32(); WaveSlotNum = br.ReadByte(); } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + ContainerName = XmlRel.GetHash(Xml.GetChildInnerText(node, "ContainerName")); + FileName = XmlRel.GetHash(Xml.GetChildInnerText(node, "FileName")); + WaveSlotNum = (byte)Xml.GetChildUIntAttribute(node, "WaveSlotNum", "value"); + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -1969,10 +2420,17 @@ namespace CodeWalker.GameFiles } [TC(typeof(EXP))] public class Dat54MultitrackSound : Dat54Sound { + public Dat54MultitrackSound(RelFile rel) : base(rel, Dat54SoundType.MultitrackSound) + { } public Dat54MultitrackSound(RelData d, BinaryReader br) : base(d, br) { ReadAudioTrackHashes(br); } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + ReadAudioTracksXml(node); + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -1987,6 +2445,8 @@ namespace CodeWalker.GameFiles public byte ItemCount { get; set; } public float[] AudioTrackUnkFloats { get; set; } //probability..? + public Dat54RandomizedSound(RelFile rel) : base(rel, Dat54SoundType.RandomizedSound) + { } public Dat54RandomizedSound(RelData d, BinaryReader br) : base(d, br) { UnkByte = br.ReadByte(); @@ -2001,6 +2461,32 @@ namespace CodeWalker.GameFiles AudioTrackUnkFloats[i] = br.ReadSingle(); } } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + UnkByte = (byte)Xml.GetChildUIntAttribute(node, "UnkByte", "value"); + UnkBytes = Xml.GetChildRawByteArray(node, "UnkBytes"); + UnkBytesCount = (byte)UnkBytes.Length; + var vnode = node.SelectSingleNode("Items"); + if (vnode != null) + { + var inodes = vnode.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + var ulist = new List(); + foreach (XmlNode inode in inodes) + { + vlist.Add(XmlRel.GetHash(Xml.GetStringAttribute(inode, "key"))); + ulist.Add(Xml.GetFloatAttribute(inode, "value")); + } + ItemCount = (byte)vlist.Count; + AudioTrackHashes = vlist.ToArray(); + AudioTrackUnkFloats = ulist.ToArray(); + } + } + + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -2028,10 +2514,17 @@ namespace CodeWalker.GameFiles { public byte UnkByte { get; set; } + public Dat54EnvironmentSound(RelFile rel) : base(rel, Dat54SoundType.EnvironmentSound) + { } public Dat54EnvironmentSound(RelData d, BinaryReader br) : base(d, br) { UnkByte = br.ReadByte(); } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + UnkByte = (byte)Xml.GetChildUIntAttribute(node, "UnkByte", "value"); + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -2043,6 +2536,8 @@ namespace CodeWalker.GameFiles public byte ItemCount { get; set; } public MetaHash[] UnkHashes { get; set; } + public Dat54DynamicEntitySound(RelFile rel) : base(rel, Dat54SoundType.DynamicEntitySound) + { } public Dat54DynamicEntitySound(RelData d, BinaryReader br) : base(d, br) { ItemCount = br.ReadByte(); @@ -2052,6 +2547,25 @@ namespace CodeWalker.GameFiles UnkHashes[i] = br.ReadUInt32(); } } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + var vnode = node.SelectSingleNode("Items"); + if (vnode != null) + { + var inodes = vnode.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + vlist.Add(XmlRel.GetHash(inode.InnerText)); + } + ItemCount = (byte)vlist.Count; + UnkHashes = vlist.ToArray(); + } + } + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -2078,6 +2592,8 @@ namespace CodeWalker.GameFiles public MetaHash ParameterHash0 { get; set; } //0x2-0x6 public MetaHash ParameterHash1 { get; set; } //0x6-0xA + public Dat54SequentialOverlapSound(RelFile rel) : base(rel, Dat54SoundType.SequentialOverlapSound) + { } public Dat54SequentialOverlapSound(RelData d, BinaryReader br) : base(d, br) { UnkShort = br.ReadUInt16(); @@ -2086,6 +2602,13 @@ namespace CodeWalker.GameFiles ReadAudioTrackHashes(br); } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + UnkShort = (ushort)Xml.GetChildUIntAttribute(node, "UnkShort", "value"); + ParameterHash0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash0")); + ParameterHash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash1")); + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -2104,6 +2627,8 @@ namespace CodeWalker.GameFiles public int UnkItemCount { get; set; } public Dat54ModularSynthSoundData[] UnkItems { get; set; } //0x28-.. + public Dat54ModularSynthSound(RelFile rel) : base(rel, Dat54SoundType.ModularSynthSound) + { } public Dat54ModularSynthSound(RelData d, BinaryReader br) : base(d, br) { OptAmpUnkHash = br.ReadUInt32(); //0x0-0x4 @@ -2123,6 +2648,34 @@ namespace CodeWalker.GameFiles UnkItems[i] = new Dat54ModularSynthSoundData(br); } } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + OptAmpUnkHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "OptAmpUnkHash")); + UnkHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "UnkHash")); + UnkFloat = Xml.GetChildFloatAttribute(node, "UnkFloat", "value"); + UnkInt = Xml.GetChildIntAttribute(node, "UnkInt", "value"); + TrackCount = Xml.GetChildIntAttribute(node, "TrackCount", "value"); + ReadAudioTracksXml(node); + var vnode = node.SelectSingleNode("UnkItems"); + if (vnode != null) + { + var inodes = vnode.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + var v = new Dat54ModularSynthSoundData(); + v.ReadXml(inode); + vlist.Add(v); + } + UnkItemCount = (byte)vlist.Count; + UnkItems = vlist.ToArray(); + } + } + + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -2157,12 +2710,20 @@ namespace CodeWalker.GameFiles public MetaHash ParameterHash { get; set; } public float Value { get; set; } + public Dat54ModularSynthSoundData() + { } public Dat54ModularSynthSoundData(BinaryReader br) { UnkHash = br.ReadUInt32(); ParameterHash = br.ReadUInt32(); Value = br.ReadSingle(); } + public void ReadXml(XmlNode node) + { + UnkHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "UnkHash")); + ParameterHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash")); + Value = Xml.GetChildFloatAttribute(node, "Value", "value"); + } public void WriteXml(StringBuilder sb, int indent) { RelXml.StringTag(sb, indent, "UnkHash", RelXml.HashString(UnkHash)); @@ -2201,6 +2762,8 @@ namespace CodeWalker.GameFiles public byte UnkVecCount { get; set; } //0x7C-0x7D public Vector2[] UnkVecData { get; set; } //0x7D-... + public Dat54GranularSound(RelFile rel) : base(rel, Dat54SoundType.GranularSound) + { } public Dat54GranularSound(RelData d, BinaryReader br) : base(d, br) { WaveSlotIndex = br.ReadInt32(); @@ -2248,6 +2811,34 @@ namespace CodeWalker.GameFiles UnkVecData[i] = new Vector2(br.ReadSingle(), br.ReadSingle()); } } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + WaveSlotIndex = (byte)Xml.GetChildIntAttribute(node, "WaveSlotIndex", "value"); + Wave1 = new Dat54GranularSoundFile(node, "Wave1"); + Wave2 = new Dat54GranularSoundFile(node, "Wave2"); + Wave3 = new Dat54GranularSoundFile(node, "Wave3"); + Wave4 = new Dat54GranularSoundFile(node, "Wave4"); + Wave5 = new Dat54GranularSoundFile(node, "Wave5"); + Wave6 = new Dat54GranularSoundFile(node, "Wave6"); + DataItem1 = new Dat54GranularSoundData(node, "DataItem1"); + DataItem2 = new Dat54GranularSoundData(node, "DataItem2"); + DataItem3 = new Dat54GranularSoundData(node, "DataItem3"); + DataItem4 = new Dat54GranularSoundData(node, "DataItem4"); + DataItem5 = new Dat54GranularSoundData(node, "DataItem5"); + DataItem6 = new Dat54GranularSoundData(node, "DataItem6"); + UnkInt0 = Xml.GetChildIntAttribute(node, "UnkInt0", "value"); + UnkInt1 = Xml.GetChildIntAttribute(node, "UnkInt1", "value"); + UnkShort0 = (ushort)Xml.GetChildUIntAttribute(node, "UnkShort0", "value"); + UnkShort1 = (ushort)Xml.GetChildUIntAttribute(node, "UnkShort1", "value"); + UnkShort2 = (ushort)Xml.GetChildUIntAttribute(node, "UnkShort2", "value"); + UnkShort3 = (ushort)Xml.GetChildUIntAttribute(node, "UnkShort3", "value"); + UnkShort4 = (ushort)Xml.GetChildUIntAttribute(node, "UnkShort4", "value"); + UnkShort5 = (ushort)Xml.GetChildUIntAttribute(node, "UnkShort5", "value"); + TrackName = XmlRel.GetHash(Xml.GetChildInnerText(node, "TrackName")); + UnkVecData = Xml.GetChildRawVector2Array(node, "UnkVecData"); + UnkVecCount = (byte)UnkVecData?.Length; + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -2281,11 +2872,21 @@ namespace CodeWalker.GameFiles public MetaHash ContainerName { get; set; } //0x0-0x4 public MetaHash FileName { get; set; } //0x4-0x8 + public Dat54GranularSoundFile(XmlNode node, string varName) + { + ReadXml(node, varName); + } public Dat54GranularSoundFile(BinaryReader br) { ContainerName = br.ReadUInt32(); FileName = br.ReadUInt32(); } + public void ReadXml(XmlNode node, string varName) + { + var cnode = node.SelectSingleNode(varName); + ContainerName = XmlRel.GetHash(Xml.GetChildInnerText(cnode, "ContainerName")); + FileName = XmlRel.GetHash(Xml.GetChildInnerText(cnode, "FileName")); + } public void WriteXml(StringBuilder sb, int indent, string varName) { var cind = indent + 1; @@ -2307,6 +2908,10 @@ namespace CodeWalker.GameFiles public byte UnkByte1 { get; set; } //0x3-0x4 public float UnkFloat { get; set; } //0x4-0x8 + public Dat54GranularSoundData(XmlNode node, string varName) + { + ReadXml(node, varName); + } public Dat54GranularSoundData(BinaryReader br) { UnkFlags0 = br.ReadByte(); @@ -2315,6 +2920,15 @@ namespace CodeWalker.GameFiles UnkByte1 = br.ReadByte(); UnkFloat = br.ReadSingle(); } + public void ReadXml(XmlNode node, string varName) + { + var cnode = node.SelectSingleNode(varName); + UnkFlags0 = (byte)Xml.GetChildIntAttribute(cnode, "UnkFlags0", "value"); + UnkFlags1 = (byte)Xml.GetChildIntAttribute(cnode, "UnkFlags1", "value"); + UnkByte0 = (byte)Xml.GetChildIntAttribute(cnode, "UnkByte0", "value"); + UnkByte1 = (byte)Xml.GetChildIntAttribute(cnode, "UnkByte1", "value"); + UnkFloat = (byte)Xml.GetChildFloatAttribute(cnode, "UnkFloat", "value"); + } public void WriteXml(StringBuilder sb, int indent, string varName) { var cind = indent + 1; @@ -2340,6 +2954,8 @@ namespace CodeWalker.GameFiles public float UnkFloat3 { get; set; } //0x10-0x14 public float UnkFloat4 { get; set; } //0x14-0x18 + public Dat54DirectionalSound(RelFile rel) : base(rel, Dat54SoundType.DirectionalSound) + { } public Dat54DirectionalSound(RelData d, BinaryReader br) : base(d, br) { AudioHash = br.ReadUInt32(); @@ -2350,6 +2966,16 @@ namespace CodeWalker.GameFiles UnkFloat3 = br.ReadSingle(); UnkFloat4 = br.ReadSingle(); } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + AudioHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash")); + UnkFloat0 = (byte)Xml.GetChildFloatAttribute(node, "UnkFloat0", "value"); + UnkFloat1 = (byte)Xml.GetChildFloatAttribute(node, "UnkFloat1", "value"); + UnkFloat2 = (byte)Xml.GetChildFloatAttribute(node, "UnkFloat2", "value"); + UnkFloat3 = (byte)Xml.GetChildFloatAttribute(node, "UnkFloat3", "value"); + UnkFloat4 = (byte)Xml.GetChildFloatAttribute(node, "UnkFloat4", "value"); + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -2368,6 +2994,8 @@ namespace CodeWalker.GameFiles public float UnkFloat1 { get; set; } public float UnkFloat2 { get; set; } + public Dat54KineticSound(RelFile rel) : base(rel, Dat54SoundType.KineticSound) + { } public Dat54KineticSound(RelData d, BinaryReader br) : base(d, br) { AudioHash = br.ReadUInt32(); @@ -2376,6 +3004,14 @@ namespace CodeWalker.GameFiles UnkFloat1 = br.ReadSingle(); UnkFloat2 = br.ReadSingle(); } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + AudioHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash")); + UnkFloat0 = (byte)Xml.GetChildFloatAttribute(node, "UnkFloat0", "value"); + UnkFloat1 = (byte)Xml.GetChildFloatAttribute(node, "UnkFloat1", "value"); + UnkFloat2 = (byte)Xml.GetChildFloatAttribute(node, "UnkFloat2", "value"); + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -2389,12 +3025,20 @@ namespace CodeWalker.GameFiles { public MetaHash ParameterHash { get; set; } //0x0-0x4 + public Dat54SwitchSound(RelFile rel) : base(rel, Dat54SoundType.SwitchSound) + { } public Dat54SwitchSound(RelData d, BinaryReader br) : base(d, br) { ParameterHash = br.ReadUInt32(); ReadAudioTrackHashes(br); } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + ParameterHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash")); + ReadAudioTracksXml(node); + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -2409,6 +3053,8 @@ namespace CodeWalker.GameFiles public MetaHash ParameterHash1 { get; set; } //0x8-0xC public MetaHash UnkCurvesHash { get; set; } //0xC-0x10 + public Dat54VariableCurveSound(RelFile rel) : base(rel, Dat54SoundType.VariableCurveSound) + { } public Dat54VariableCurveSound(RelData d, BinaryReader br) : base(d, br) { AudioHash = br.ReadUInt32(); @@ -2417,6 +3063,14 @@ namespace CodeWalker.GameFiles ParameterHash1 = br.ReadUInt32(); UnkCurvesHash = br.ReadUInt32(); } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + AudioHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash")); + ParameterHash0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash0")); + ParameterHash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash1")); + UnkCurvesHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "UnkCurvesHash")); + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -2431,11 +3085,19 @@ namespace CodeWalker.GameFiles public MetaHash ParameterHash { get; set; } //0x0-0x4 public string VariableString { get; set; } + public Dat54VariablePrintValueSound(RelFile rel) : base(rel, Dat54SoundType.VariablePrintValueSound) + { } public Dat54VariablePrintValueSound(RelData d, BinaryReader br) : base(d, br) { ParameterHash = br.ReadUInt32(); VariableString = br.ReadString(); } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + ParameterHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash")); + VariableString = Xml.GetChildInnerText(node, "VariableString"); + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -2449,6 +3111,8 @@ namespace CodeWalker.GameFiles public byte VariableCount { get; set; } public Dat54VariableData[] Variables { get; set; } + public Dat54VariableBlockSound(RelFile rel) : base(rel, Dat54SoundType.VariableBlockSound) + { } public Dat54VariableBlockSound(RelData d, BinaryReader br) : base(d, br) { AudioHash = br.ReadUInt32(); @@ -2460,6 +3124,28 @@ namespace CodeWalker.GameFiles Variables[i] = new Dat54VariableData(br); } } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + AudioHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash")); + var vnode = node.SelectSingleNode("Variables"); + if (vnode != null) + { + var inodes = vnode.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + var v = new Dat54VariableData(); + v.ReadXml(inode); + vlist.Add(v); + } + VariableCount = (byte)vlist.Count; + Variables = vlist.ToArray(); + } + } + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -2491,6 +3177,8 @@ namespace CodeWalker.GameFiles public float UnkFloat { get; set; } public byte Flags { get; set; } + public Dat54VariableData() + { } public Dat54VariableData(BinaryReader br) { Name = br.ReadUInt32(); @@ -2498,6 +3186,13 @@ namespace CodeWalker.GameFiles UnkFloat = br.ReadSingle(); Flags = br.ReadByte(); } + public void ReadXml(XmlNode node) + { + Name = XmlRel.GetHash(Xml.GetChildInnerText(node, "Name")); + Value = Xml.GetChildFloatAttribute(node, "Value", "value"); + UnkFloat = Xml.GetChildFloatAttribute(node, "UnkFloat", "value"); + Flags = (byte)Xml.GetChildIntAttribute(node, "Flags", "value"); + } public void WriteXml(StringBuilder sb, int indent) { RelXml.StringTag(sb, indent, "Name", RelXml.HashString(Name)); @@ -2519,6 +3214,8 @@ namespace CodeWalker.GameFiles public float UnkFloat { get; set; } public MetaHash ParameterHash2 { get; set; } + public Dat54IfSound(RelFile rel) : base(rel, Dat54SoundType.IfSound) + { } public Dat54IfSound(RelData d, BinaryReader br) : base(d, br) { AudioHash1 = br.ReadUInt32(); @@ -2529,6 +3226,16 @@ namespace CodeWalker.GameFiles UnkFloat = br.ReadSingle(); ParameterHash2 = br.ReadUInt32(); } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + AudioHash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash1")); + AudioHash2 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash2")); + ParameterHash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash1")); + UnkByte = (byte)Xml.GetChildIntAttribute(node, "UnkByte", "value"); + UnkFloat = Xml.GetChildFloatAttribute(node, "UnkFloat", "value"); + ParameterHash2 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash2")); + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -2546,6 +3253,8 @@ namespace CodeWalker.GameFiles public byte UnkDataCount { get; set; } public Dat54MathOperationSoundData[] UnkData { get; set; } + public Dat54MathOperationSound(RelFile rel) : base(rel, Dat54SoundType.MathOperationSound) + { } public Dat54MathOperationSound(RelData d, BinaryReader br) : base(d, br) { AudioHash = br.ReadUInt32(); @@ -2557,6 +3266,28 @@ namespace CodeWalker.GameFiles UnkData[i] = new Dat54MathOperationSoundData(br); } } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + AudioHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash")); + var vnode = node.SelectSingleNode("UnkData"); + if (vnode != null) + { + var inodes = vnode.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + var v = new Dat54MathOperationSoundData(); + v.ReadXml(inode); + vlist.Add(v); + } + UnkDataCount = (byte)vlist.Count; + UnkData = vlist.ToArray(); + } + } + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -2591,6 +3322,8 @@ namespace CodeWalker.GameFiles public MetaHash ParameterHash0 { get; set; } //0x15-0x19 public MetaHash ParameterHash1 { get; set; } //0x19-0x1D + public Dat54MathOperationSoundData() + { } public Dat54MathOperationSoundData(BinaryReader br) { UnkByte = br.ReadByte(); @@ -2602,6 +3335,17 @@ namespace CodeWalker.GameFiles ParameterHash0 = br.ReadUInt32(); ParameterHash1 = br.ReadUInt32(); } + public void ReadXml(XmlNode node) + { + UnkByte = (byte)Xml.GetChildIntAttribute(node, "UnkByte", "value"); + UnkInt0 = Xml.GetChildIntAttribute(node, "UnkInt0", "value"); + UnkInt1 = Xml.GetChildIntAttribute(node, "UnkInt1", "value"); + UnkInt2 = Xml.GetChildIntAttribute(node, "UnkInt2", "value"); + UnkInt3 = Xml.GetChildIntAttribute(node, "UnkInt3", "value"); + UnkInt4 = Xml.GetChildIntAttribute(node, "UnkInt4", "value"); + ParameterHash0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash0")); + ParameterHash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash1")); + } public void WriteXml(StringBuilder sb, int indent) { RelXml.ValueTag(sb, indent, "UnkByte", UnkByte.ToString()); @@ -2624,6 +3368,8 @@ namespace CodeWalker.GameFiles public int ItemCount { get; set; } public Dat54ParameterTransformSoundData[] Items { get; set; } + public Dat54ParameterTransformSound(RelFile rel) : base(rel, Dat54SoundType.ParameterTransformSound) + { } public Dat54ParameterTransformSound(RelData d, BinaryReader br) : base(d, br) { AudioHash = br.ReadUInt32(); @@ -2635,6 +3381,28 @@ namespace CodeWalker.GameFiles Items[i] = new Dat54ParameterTransformSoundData(br); } } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + AudioHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash")); + var vnode = node.SelectSingleNode("Items"); + if (vnode != null) + { + var inodes = vnode.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + var v = new Dat54ParameterTransformSoundData(); + v.ReadXml(inode); + vlist.Add(v); + } + ItemCount = vlist.Count; + Items = vlist.ToArray(); + } + } + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -2666,6 +3434,8 @@ namespace CodeWalker.GameFiles public int NestedDataCount { get; set; } public Dat54ParameterTransformSoundData2[] NestedData { get; set; } //0x10.. + public Dat54ParameterTransformSoundData() + { } public Dat54ParameterTransformSoundData(BinaryReader br) { ParameterHash = br.ReadUInt32(); @@ -2678,6 +3448,29 @@ namespace CodeWalker.GameFiles NestedData[i] = new Dat54ParameterTransformSoundData2(br); } } + public void ReadXml(XmlNode node) + { + ParameterHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash")); + UnkFloat0 = Xml.GetChildFloatAttribute(node, "UnkFloat0", "value"); + UnkFloat1 = Xml.GetChildFloatAttribute(node, "UnkFloat1", "value"); + var vnode = node.SelectSingleNode("NestedData"); + if (vnode != null) + { + var inodes = vnode.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + var v = new Dat54ParameterTransformSoundData2(); + v.ReadXml(inode); + vlist.Add(v); + } + NestedDataCount = vlist.Count; + NestedData = vlist.ToArray(); + } + } + } public void WriteXml(StringBuilder sb, int indent) { RelXml.StringTag(sb, indent, "ParameterHash", RelXml.HashString(ParameterHash)); @@ -2716,6 +3509,8 @@ namespace CodeWalker.GameFiles public int NestedItemCount { get; set; } public Vector2[] NestedItems { get; set; } //0x18-... + public Dat54ParameterTransformSoundData2() + { } public Dat54ParameterTransformSoundData2(BinaryReader br) { UnkFloat0 = br.ReadSingle(); @@ -2730,6 +3525,15 @@ namespace CodeWalker.GameFiles NestedItems[i] = new Vector2(br.ReadSingle(), br.ReadSingle()); } } + public void ReadXml(XmlNode node) + { + UnkFloat0 = Xml.GetChildFloatAttribute(node, "UnkFloat0", "value"); + UnkInt = Xml.GetChildIntAttribute(node, "UnkInt", "value"); + ParameterHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash")); + UnkFloat1 = Xml.GetChildFloatAttribute(node, "UnkFloat1", "value"); + UnkFloat2 = Xml.GetChildFloatAttribute(node, "UnkFloat2", "value"); + NestedItems = Xml.GetChildRawVector2Array(node, "Vectors"); + } public void WriteXml(StringBuilder sb, int indent) { RelXml.ValueTag(sb, indent, "UnkFloat0", FloatUtil.ToString(UnkFloat0)); @@ -2750,6 +3554,8 @@ namespace CodeWalker.GameFiles public int ItemCount { get; set; } public Dat54FluctuatorSoundData[] Items { get; set; } + public Dat54FluctuatorSound(RelFile rel) : base(rel, Dat54SoundType.FluctuatorSound) + { } public Dat54FluctuatorSound(RelData d, BinaryReader br) : base(d, br) { AudioHash = br.ReadUInt32(); @@ -2761,6 +3567,28 @@ namespace CodeWalker.GameFiles Items[i] = new Dat54FluctuatorSoundData(br); } } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + AudioHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash")); + var vnode = node.SelectSingleNode("Items"); + if (vnode != null) + { + var inodes = vnode.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + var v = new Dat54FluctuatorSoundData(); + v.ReadXml(inode); + vlist.Add(v); + } + ItemCount = vlist.Count; + Items = vlist.ToArray(); + } + } + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -2801,6 +3629,8 @@ namespace CodeWalker.GameFiles public float UnkFloat09 { get; set; } //0x2A-0x2E public float UnkFloat10 { get; set; } //0x2E-0x32 + public Dat54FluctuatorSoundData() + { } public Dat54FluctuatorSoundData(BinaryReader br) { UnkByte0 = br.ReadByte(); @@ -2818,6 +3648,23 @@ namespace CodeWalker.GameFiles UnkFloat09 = br.ReadSingle(); UnkFloat10 = br.ReadSingle(); } + public void ReadXml(XmlNode node) + { + UnkByte0 = (byte)Xml.GetChildIntAttribute(node, "UnkByte0", "value"); + UnkByte1 = (byte)Xml.GetChildIntAttribute(node, "UnkByte1", "value"); + ParameterHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash")); + UnkFloat00 = Xml.GetChildFloatAttribute(node, "UnkFloat00", "value"); + UnkFloat01 = Xml.GetChildFloatAttribute(node, "UnkFloat01", "value"); + UnkFloat02 = Xml.GetChildFloatAttribute(node, "UnkFloat02", "value"); + UnkFloat03 = Xml.GetChildFloatAttribute(node, "UnkFloat03", "value"); + UnkFloat04 = Xml.GetChildFloatAttribute(node, "UnkFloat04", "value"); + UnkFloat05 = Xml.GetChildFloatAttribute(node, "UnkFloat05", "value"); + UnkFloat06 = Xml.GetChildFloatAttribute(node, "UnkFloat06", "value"); + UnkFloat07 = Xml.GetChildFloatAttribute(node, "UnkFloat07", "value"); + UnkFloat08 = Xml.GetChildFloatAttribute(node, "UnkFloat08", "value"); + UnkFloat09 = Xml.GetChildFloatAttribute(node, "UnkFloat09", "value"); + UnkFloat10 = Xml.GetChildFloatAttribute(node, "UnkFloat10", "value"); + } public void WriteXml(StringBuilder sb, int indent) { RelXml.ValueTag(sb, indent, "UnkByte0", UnkByte0.ToString()); @@ -2852,6 +3699,8 @@ namespace CodeWalker.GameFiles public int UnkDataCount { get; set; } // array data count 0x1C-0x20 public Dat54AutomationSoundData[] UnkData { get; set; } //0x20- + public Dat54AutomationSound(RelFile rel) : base(rel, Dat54SoundType.AutomationSound) + { } public Dat54AutomationSound(RelData d, BinaryReader br) : base(d, br) { AudioHash0 = br.ReadUInt32(); @@ -2869,6 +3718,34 @@ namespace CodeWalker.GameFiles UnkData[i] = new Dat54AutomationSoundData(br); } } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + AudioHash0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash0")); + UnkFloat0 = Xml.GetChildFloatAttribute(node, "UnkFloat0", "value"); + UnkFloat1 = Xml.GetChildFloatAttribute(node, "UnkFloat1", "value"); + ParameterHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash")); + AudioHash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash1")); + WaveSlotId = Xml.GetChildIntAttribute(node, "WaveSlotId", "value"); + UnkHash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "UnkHash1")); + var vnode = node.SelectSingleNode("UnkData"); + if (vnode != null) + { + var inodes = vnode.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + var v = new Dat54AutomationSoundData(); + v.ReadXml(inode); + vlist.Add(v); + } + UnkDataCount = vlist.Count; + UnkData = vlist.ToArray(); + } + } + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -2903,11 +3780,18 @@ namespace CodeWalker.GameFiles public int UnkInt { get; set; } //0x0-0x1 public MetaHash UnkHash { get; set; } //0x2-0x6 + public Dat54AutomationSoundData() + { } public Dat54AutomationSoundData(BinaryReader br) { UnkInt = br.ReadInt32(); UnkHash = br.ReadUInt32(); } + public void ReadXml(XmlNode node) + { + UnkInt = Xml.GetChildIntAttribute(node, "UnkInt", "value"); + UnkHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "UnkHash")); + } public void WriteXml(StringBuilder sb, int indent) { RelXml.ValueTag(sb, indent, "UnkInt", UnkInt.ToString()); @@ -2920,6 +3804,8 @@ namespace CodeWalker.GameFiles } [TC(typeof(EXP))] public class Dat54ExternalStreamSound : Dat54Sound { + public Dat54ExternalStreamSound(RelFile rel) : base(rel, Dat54SoundType.ExternalStreamSound) + { } public Dat54ExternalStreamSound(RelData d, BinaryReader br) : base(d, br) { ReadAudioTrackHashes(br); @@ -2943,6 +3829,11 @@ namespace CodeWalker.GameFiles //var bytearr = bytes.ToArray(); } //hits here! } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + ReadAudioTracksXml(node); + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -2954,6 +3845,8 @@ namespace CodeWalker.GameFiles public int ItemCount { get; set; } public Dat54SoundSetItem[] Items { get; set; } + public Dat54SoundSet(RelFile rel) : base(rel, Dat54SoundType.SoundSet) + { } public Dat54SoundSet(RelData d, BinaryReader br) : base(d, br) { ItemCount = br.ReadInt32(); @@ -2965,6 +3858,27 @@ namespace CodeWalker.GameFiles AudioTrackHashes[i] = Items[i].SoundName; } } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + var vnode = node.SelectSingleNode("Items"); + if (vnode != null) + { + var inodes = vnode.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + var v = new Dat54SoundSetItem(); + v.ReadXml(inode); + vlist.Add(v); + } + ItemCount = vlist.Count; + Items = vlist.ToArray(); + } + } + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -2992,11 +3906,18 @@ namespace CodeWalker.GameFiles public MetaHash ScriptName { get; set; } public MetaHash SoundName { get; set; } + public Dat54SoundSetItem() + { } public Dat54SoundSetItem(BinaryReader br) { ScriptName = br.ReadUInt32(); SoundName = br.ReadUInt32(); } + public void ReadXml(XmlNode node) + { + ScriptName = XmlRel.GetHash(Xml.GetChildInnerText(node, "ScriptName")); + SoundName = XmlRel.GetHash(Xml.GetChildInnerText(node, "SoundName")); + } public void WriteXml(StringBuilder sb, int indent) { RelXml.StringTag(sb, indent, "ScriptName", RelXml.HashString(ScriptName)); @@ -3012,6 +3933,8 @@ namespace CodeWalker.GameFiles public byte UnkDataCount { get; set; } public Dat54UnknownSoundData[] UnkData { get; set; } + public Dat54UnknownSound(RelFile rel) : base(rel, Dat54SoundType.Unknown) + { } public Dat54UnknownSound(RelData d, BinaryReader br) : base(d, br) { UnkDataCount = br.ReadByte(); @@ -3023,6 +3946,27 @@ namespace CodeWalker.GameFiles AudioTrackHashes[i] = UnkData[i].AudioTrack;// br.ReadUInt32(); } } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + var vnode = node.SelectSingleNode("UnkData"); + if (vnode != null) + { + var inodes = vnode.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + var v = new Dat54UnknownSoundData(); + v.ReadXml(inode); + vlist.Add(v); + } + UnkDataCount = (byte)vlist.Count; + UnkData = vlist.ToArray(); + } + } + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -3052,6 +3996,8 @@ namespace CodeWalker.GameFiles public byte UnkByte2 { get; set; } public MetaHash AudioTrack { get; set; } + public Dat54UnknownSoundData() + { } public Dat54UnknownSoundData(BinaryReader br) { UnkByte0 = br.ReadByte(); @@ -3059,6 +4005,13 @@ namespace CodeWalker.GameFiles UnkByte2 = br.ReadByte(); AudioTrack = br.ReadUInt32(); } + public void ReadXml(XmlNode node) + { + UnkByte0 = (byte)Xml.GetChildIntAttribute(node, "UnkByte0", "value"); + UnkByte1 = (byte)Xml.GetChildIntAttribute(node, "UnkByte1", "value"); + UnkByte2 = (byte)Xml.GetChildIntAttribute(node, "UnkByte2", "value"); + AudioTrack = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack")); + } public void WriteXml(StringBuilder sb, int indent) { RelXml.ValueTag(sb, indent, "UnkByte0", UnkByte0.ToString()); @@ -3076,6 +4029,8 @@ namespace CodeWalker.GameFiles public uint UnkCount { get; set; } public MetaHash[] UnkItems { get; set; } + public Dat54UnknownSound2(RelFile rel) : base(rel, Dat54SoundType.Unknown2) + { } public Dat54UnknownSound2(RelData d, BinaryReader br) : base(d, br) { UnkCount = br.ReadUInt32(); @@ -3085,6 +4040,25 @@ namespace CodeWalker.GameFiles UnkItems[i] = br.ReadUInt32(); } } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + var vnode = node.SelectSingleNode("Items"); + if (vnode != null) + { + var inodes = vnode.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + vlist.Add(XmlRel.GetHash(inode.InnerText)); + } + UnkCount = (uint)vlist.Count; + UnkItems = vlist.ToArray(); + } + } + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -3111,6 +4085,8 @@ namespace CodeWalker.GameFiles public uint Count { get; set; } public MetaHash[] Items { get; set; } + public Dat54SoundList(RelFile rel) : base(rel, Dat54SoundType.SoundList) + { } public Dat54SoundList(RelData d, BinaryReader br) : base(d, br) { UnkShort = br.ReadUInt16(); @@ -3123,6 +4099,26 @@ namespace CodeWalker.GameFiles if (br.BaseStream.Position != br.BaseStream.Length) { } } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + UnkShort = (ushort)Xml.GetChildUIntAttribute(node, "UnkShort", "value"); + var vnode = node.SelectSingleNode("Items"); + if (vnode != null) + { + var inodes = vnode.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + vlist.Add(XmlRel.GetHash(inode.InnerText)); + } + Count = (uint)vlist.Count; + Items = vlist.ToArray(); + } + } + } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); @@ -3274,6 +4270,11 @@ namespace CodeWalker.GameFiles public uint NameTableOffset { get; set; } public Dat151RelData(RelFile rel) : base(rel) { } + public Dat151RelData(RelFile rel, Dat151RelType type) : base(rel) + { + Type = type; + TypeID = (byte)type; + } public Dat151RelData(RelData d, BinaryReader br) : base(d) { Type = (Dat151RelType)TypeID; @@ -3307,6 +4308,11 @@ namespace CodeWalker.GameFiles Hash0 = hash0; Hash1 = hash1; } + public void ReadXml(XmlNode node) + { + Hash0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Hash0")); + Hash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Hash1")); + } public void WriteXml(StringBuilder sb, int indent) { RelXml.StringTag(sb, indent, "Hash0", RelXml.HashString(Hash0)); @@ -3381,6 +4387,24 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "Emitters"); } } + public override void ReadXml(XmlNode node) + { + var vnode = node.SelectSingleNode("Emitters"); + if (vnode != null) + { + var inodes = vnode.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + vlist.Add(XmlRel.GetHash(inode.InnerText)); + } + EmitterCount = (uint)vlist.Count; + EmitterHashes = vlist.ToArray(); + } + } + } } [TC(typeof(EXP))] public class Dat151AmbientZone : Dat151RelData { @@ -3434,6 +4458,11 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "Hash", RelXml.HashString(Hash)); RelXml.ValueTag(sb, indent, "Value", FloatUtil.ToString(Value)); } + public void ReadXml(XmlNode node) + { + Hash = XmlRel.GetHash(Xml.GetChildInnerText(node, "Hash")); + Value = Xml.GetChildFloatAttribute(node, "Value", "value"); + } public override string ToString() { return Hash.ToString() + ": " + FloatUtil.ToString(Value); @@ -3675,6 +4704,64 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "ExtParams"); } } + public override void ReadXml(XmlNode node) + { + Flags0 = Xml.GetChildUIntAttribute(node, "Flags0", "value"); + Shape = Xml.GetEnumValue(Xml.GetChildInnerText(node, "Shape")); + Flags1 = Xml.GetChildUIntAttribute(node, "Flags1", "value"); + OuterPos = Xml.GetChildVector3Attributes(node, "OuterPos", "x", "y", "z"); + OuterSize = Xml.GetChildVector3Attributes(node, "OuterSize", "x", "y", "z"); + OuterVec1 = Xml.GetChildVector4Attributes(node, "OuterVec1", "x", "y", "z", "w"); + OuterVec2 = Xml.GetChildVector4Attributes(node, "OuterVec2", "x", "y", "z", "w"); + OuterAngle = Xml.GetChildUIntAttribute(node, "OuterAngle", "value"); + OuterVec3 = Xml.GetChildVector3Attributes(node, "OuterVec3", "x", "y", "z"); + InnerPos = Xml.GetChildVector3Attributes(node, "InnerPos", "x", "y", "z"); + InnerSize = Xml.GetChildVector3Attributes(node, "InnerSize", "x", "y", "z"); + InnerVec1 = Xml.GetChildVector4Attributes(node, "InnerVec1", "x", "y", "z", "w"); + InnerVec2 = Xml.GetChildVector4Attributes(node, "InnerVec2", "x", "y", "z", "w"); + InnerAngle = Xml.GetChildUIntAttribute(node, "InnerAngle", "value"); + InnerVec3 = Xml.GetChildVector3Attributes(node, "InnerVec3", "x", "y", "z"); + UnkVec1 = Xml.GetChildVector4Attributes(node, "UnkVec1", "x", "y", "z", "w"); + UnkVec2 = Xml.GetChildVector4Attributes(node, "UnkVec2", "x", "y", "z", "w"); + UnkVec3 = Xml.GetChildVector4Attributes(node, "UnkVec3", "x", "y", "z", "w"); + Flags2 = Xml.GetChildUIntAttribute(node, "Flags2", "value"); + Unk14 = (byte)Xml.GetChildUIntAttribute(node, "Unk14", "value"); + Unk15 = (byte)Xml.GetChildUIntAttribute(node, "Unk15", "value"); + Unk16 = (byte)Xml.GetChildUIntAttribute(node, "Unk16", "value"); + var vnode = node.SelectSingleNode("Hashes"); + if (vnode != null) + { + var inodes = vnode.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + vlist.Add(XmlRel.GetHash(inode.InnerText)); + } + HashesCount = (byte)vlist.Count; + Hashes = vlist.ToArray(); + } + } + var vnode2 = node.SelectSingleNode("ExtParams"); + if (vnode2 != null) + { + var inodes = vnode2.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + var v = new ExtParam(); + v.ReadXml(inode); + vlist.Add(v); + } + ExtParamsCount = (uint)vlist.Count; + ExtParams = vlist.ToArray(); + } + } + + } } [TC(typeof(EXP))] public class Dat151AmbientEmitter : Dat151RelData { @@ -3729,6 +4816,12 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Value", FloatUtil.ToString(Value)); RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); } + public void ReadXml(XmlNode node) + { + Hash = XmlRel.GetHash(Xml.GetChildInnerText(node, "Hash")); + Value = Xml.GetChildFloatAttribute(node, "Value", "value"); + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + } public override string ToString() { return Hash.ToString() + ": " + FloatUtil.ToString(Value) + ": " + Flags.ToString(); @@ -4113,6 +5206,51 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "ExtParams"); } } + public override void ReadXml(XmlNode node) + { + Flags0 = Xml.GetChildUIntAttribute(node, "Flags0", "value"); + Flags1 = Xml.GetChildUIntAttribute(node, "Flags1", "value"); + Flags2 = Xml.GetChildUIntAttribute(node, "Flags2", "value"); + Position = Xml.GetChildVector3Attributes(node, "Position", "x", "y", "z"); + Flags3 = Xml.GetChildUIntAttribute(node, "Flags3", "value"); + Hash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Hash1")); + Hash2 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Hash2")); + Flags4 = Xml.GetChildUIntAttribute(node, "Flags4", "value"); + Flags5 = Xml.GetChildUIntAttribute(node, "Flags5", "value"); + Flags6 = Xml.GetChildUIntAttribute(node, "Flags6", "value"); + Unk01 = Xml.GetChildFloatAttribute(node, "Unk01", "value"); + InnerRad = Xml.GetChildFloatAttribute(node, "InnerRad", "value"); + OuterRad = Xml.GetChildFloatAttribute(node, "OuterRad", "value"); + Unk02 = (byte)Xml.GetChildUIntAttribute(node, "Unk02", "value"); + Unk03 = (byte)Xml.GetChildUIntAttribute(node, "Unk03", "value"); + Unk04 = (byte)Xml.GetChildUIntAttribute(node, "Unk04", "value"); + Unk05 = (byte)Xml.GetChildUIntAttribute(node, "Unk05", "value"); + Unk06 = (ushort)Xml.GetChildUIntAttribute(node, "Unk06", "value"); + Unk07 = (ushort)Xml.GetChildUIntAttribute(node, "Unk07", "value"); + Unk08 = (byte)Xml.GetChildUIntAttribute(node, "Unk08", "value"); + Unk09 = (byte)Xml.GetChildUIntAttribute(node, "Unk09", "value"); + Unk10 = (byte)Xml.GetChildUIntAttribute(node, "Unk10", "value"); + Unk11 = (byte)Xml.GetChildUIntAttribute(node, "Unk11", "value"); + Unk12 = (byte)Xml.GetChildUIntAttribute(node, "Unk12", "value"); + Unk13 = (byte)Xml.GetChildUIntAttribute(node, "Unk13", "value"); + var vnode2 = node.SelectSingleNode("ExtParams"); + if (vnode2 != null) + { + var inodes = vnode2.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + var v = new ExtParam(); + v.ReadXml(inode); + vlist.Add(v); + } + ExtParamsCount = (ushort)vlist.Count; + ExtParams = vlist.ToArray(); + } + } + } } [TC(typeof(EXP))] public class Dat151AmbientZoneList : Dat151RelData { @@ -4168,6 +5306,24 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "Zones"); } } + public override void ReadXml(XmlNode node) + { + var vnode = node.SelectSingleNode("Zones"); + if (vnode != null) + { + var inodes = vnode.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + vlist.Add(XmlRel.GetHash(inode.InnerText)); + } + ZoneCount = (uint)vlist.Count; + ZoneHashes = vlist.ToArray(); + } + } + } } [TC(typeof(EXP))] public class Dat151StaticEmitter : Dat151RelData { @@ -4277,6 +5433,30 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk21", FloatUtil.ToString(Unk21)); RelXml.ValueTag(sb, indent, "Unk22", FloatUtil.ToString(Unk22)); } + public override void ReadXml(XmlNode node) + { + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Position = Xml.GetChildVector3Attributes(node, "Position", "x", "y", "z"); + Unk06 = Xml.GetChildFloatAttribute(node, "Unk06", "value"); + Unk07 = Xml.GetChildFloatAttribute(node, "Unk07", "value"); + Unk08 = Xml.GetChildIntAttribute(node, "Unk08", "value"); + Unk09 = Xml.GetChildIntAttribute(node, "Unk09", "value"); + Unk10 = Xml.GetChildIntAttribute(node, "Unk10", "value"); + Unk11 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk11")); + Unk12 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk12")); + Unk13 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk13")); + Unk14 = Xml.GetChildFloatAttribute(node, "Unk14", "value"); + Unk15 = (ushort)Xml.GetChildUIntAttribute(node, "Unk15", "value"); + Unk16 = (ushort)Xml.GetChildUIntAttribute(node, "Unk16", "value"); + Unk17 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk17")); + Unk18 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk18")); + Unk19 = Xml.GetChildIntAttribute(node, "Unk19", "value"); + Unk20 = Xml.GetChildUIntAttribute(node, "Unk20", "value"); + Unk21 = Xml.GetChildFloatAttribute(node, "Unk21", "value"); + Unk22 = Xml.GetChildFloatAttribute(node, "Unk22", "value"); + } } [TC(typeof(EXP))] public class Dat151Interior : Dat151RelData { @@ -4351,6 +5531,27 @@ namespace CodeWalker.GameFiles } return offsets.ToArray(); } + public override void ReadXml(XmlNode node) + { + Unk0 = Xml.GetChildUIntAttribute(node, "Unk0", "value"); + Unk1 = Xml.GetChildUIntAttribute(node, "Unk1", "value"); + Unk2 = Xml.GetChildUIntAttribute(node, "Unk2", "value"); + var vnode = node.SelectSingleNode("Rooms"); + if (vnode != null) + { + var inodes = vnode.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + vlist.Add(XmlRel.GetHash(inode.InnerText)); + } + RoomsCount = (uint)vlist.Count; + Rooms = vlist.ToArray(); + } + } + } } [TC(typeof(EXP))] public class Dat151InteriorRoom : Dat151RelData { @@ -4439,6 +5640,25 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "Unk13", RelXml.HashString(Unk13)); RelXml.StringTag(sb, indent, "Unk14", RelXml.HashString(Unk14)); } + public override void ReadXml(XmlNode node) + { + Flags0 = Xml.GetChildUIntAttribute(node, "Flags0", "value"); + MloRoom = XmlRel.GetHash(Xml.GetChildInnerText(node, "MloRoom")); + Hash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Hash1")); + Unk02 = Xml.GetChildUIntAttribute(node, "Unk02", "value"); + Unk03 = Xml.GetChildFloatAttribute(node, "Unk03", "value"); + Unk04 = Xml.GetChildFloatAttribute(node, "Unk04", "value"); + Unk05 = Xml.GetChildFloatAttribute(node, "Unk05", "value"); + Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); + Unk07 = Xml.GetChildFloatAttribute(node, "Unk07", "value"); + Unk08 = Xml.GetChildFloatAttribute(node, "Unk08", "value"); + Unk09 = Xml.GetChildFloatAttribute(node, "Unk09", "value"); + Unk10 = Xml.GetChildFloatAttribute(node, "Unk10", "value"); + Unk11 = Xml.GetChildFloatAttribute(node, "Unk11", "value"); + Unk12 = Xml.GetChildFloatAttribute(node, "Unk12", "value"); + Unk13 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk13")); + Unk14 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk14")); + } public override uint[] GetHashTableOffsets() { return new uint[] { 8 }; @@ -4496,6 +5716,24 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "Stations"); } } + public override void ReadXml(XmlNode node) + { + var vnode = node.SelectSingleNode("Stations"); + if (vnode != null) + { + var inodes = vnode.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + vlist.Add(XmlRel.GetHash(inode.InnerText)); + } + StationsCount = (uint)vlist.Count; + Stations = vlist.ToArray(); + } + } + } public override uint[] GetHashTableOffsets() { var offsets = new List(); @@ -4614,6 +5852,38 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "AudioTracks"); } } + public override void ReadXml(XmlNode node) + { + Unk00 = Xml.GetChildUIntAttribute(node, "Unk00", "value"); + Unk01 = Xml.GetChildUIntAttribute(node, "Unk01", "value"); + Unk02 = Xml.GetChildUIntAttribute(node, "Unk02", "value"); + Unk03 = (ushort)Xml.GetChildUIntAttribute(node, "Unk03", "value"); + Unk04 = (ushort)Xml.GetChildUIntAttribute(node, "Unk04", "value"); + Unk05 = Xml.GetChildUIntAttribute(node, "Unk05", "value"); + Unk06 = Xml.GetChildUIntAttribute(node, "Unk06", "value"); + Unk07 = (ushort)Xml.GetChildUIntAttribute(node, "Unk07", "value"); + Unk08 = (ushort)Xml.GetChildUIntAttribute(node, "Unk08", "value"); + Unk09 = Xml.GetChildUIntAttribute(node, "Unk09", "value"); + Unk10 = Xml.GetChildUIntAttribute(node, "Unk10", "value"); + Unk11 = Xml.GetChildUIntAttribute(node, "Unk11", "value"); + Unk12 = Xml.GetChildUIntAttribute(node, "Unk12", "value"); + Unk13 = Xml.GetChildUIntAttribute(node, "Unk13", "value"); + var vnode = node.SelectSingleNode("AudioTracks"); + if (vnode != null) + { + var inodes = vnode.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + vlist.Add(XmlRel.GetHash(inode.InnerText)); + } + AudioTracksCount = (uint)vlist.Count; + AudioTracks = vlist.ToArray(); + } + } + } public override uint[] GetHashTableOffsets() { var offsets = new List(); @@ -4722,7 +5992,7 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk00", "0x" + Unk00.Hex); RelXml.ValueTag(sb, indent, "MusicType", MusicType.ToString()); RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); - RelXml.ValueTag(sb, indent, "Unk02", Unk03.ToString()); + RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); RelXml.ValueTag(sb, indent, "Unk05", Unk05.ToString()); @@ -4755,6 +6025,44 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "Playlists"); } } + public override void ReadXml(XmlNode node) + { + Unk00 = Xml.GetChildUIntAttribute(node, "Unk00", "value"); + MusicType = (byte)Xml.GetChildUIntAttribute(node, "MusicType", "value"); + Unk01 = Xml.GetChildUIntAttribute(node, "Unk01", "value"); + Unk02 = Xml.GetChildUIntAttribute(node, "Unk02", "value"); + Unk03 = (byte)Xml.GetChildUIntAttribute(node, "Unk03", "value"); + Unk04 = Xml.GetChildUIntAttribute(node, "Unk04", "value"); + Unk05 = Xml.GetChildUIntAttribute(node, "Unk05", "value"); + Unk06 = Xml.GetChildUIntAttribute(node, "Unk06", "value"); + Unk07 = Xml.GetChildUIntAttribute(node, "Unk07", "value"); + Unk08 = Xml.GetChildUIntAttribute(node, "Unk08", "value"); + Unk09 = Xml.GetChildUIntAttribute(node, "Unk09", "value"); + Unk10 = Xml.GetChildUIntAttribute(node, "Unk10", "value"); + Unk11 = Xml.GetChildUIntAttribute(node, "Unk11", "value"); + Unk12 = Xml.GetChildUIntAttribute(node, "Unk12", "value"); + Unk13 = Xml.GetChildUIntAttribute(node, "Unk13", "value"); + Unk14 = Xml.GetChildUIntAttribute(node, "Unk14", "value"); + Unk15 = Xml.GetChildUIntAttribute(node, "Unk15", "value"); + Unk16 = (ushort)Xml.GetChildUIntAttribute(node, "Unk16", "value"); + var vnode2 = node.SelectSingleNode("Playlists"); + if (vnode2 != null) + { + var inodes = vnode2.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + var v = new Dat151HashPair(); + v.ReadXml(inode); + vlist.Add(v); + } + PlaylistCount = (uint)vlist.Count; + Playlists = vlist.ToArray(); + } + } + } } [TC(typeof(EXP))] public class Dat151RadioTrackList : Dat151RelData { @@ -4815,6 +6123,27 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "Tracks"); } } + public override void ReadXml(XmlNode node) + { + Unk00 = Xml.GetChildUIntAttribute(node, "Unk00", "value"); + var vnode2 = node.SelectSingleNode("Tracks"); + if (vnode2 != null) + { + var inodes = vnode2.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + var v = new Dat151HashPair(); + v.ReadXml(inode); + vlist.Add(v); + } + TrackCount = (uint)vlist.Count; + Tracks = vlist.ToArray(); + } + } + } } [TC(typeof(EXP))] public class Dat151WeaponAudioItem : Dat151RelData @@ -4876,6 +6205,27 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "AudioItems"); } } + public override void ReadXml(XmlNode node) + { + AudioTrack0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack0")); + var vnode2 = node.SelectSingleNode("AudioItems"); + if (vnode2 != null) + { + var inodes = vnode2.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + var v = new Dat151HashPair(); + v.ReadXml(inode); + vlist.Add(v); + } + AudioItemCount = (uint)vlist.Count; + AudioItems = vlist.ToArray(); + } + } + } public override uint[] GetHashTableOffsets() { var offsets = new List(); @@ -5001,6 +6351,39 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "Items"); } } + public override void ReadXml(XmlNode node) + { + Unk0 = Xml.GetChildUIntAttribute(node, "Unk0", "value"); + Unk1 = Xml.GetChildIntAttribute(node, "Unk1", "value"); + Unk2 = Xml.GetChildIntAttribute(node, "Unk2", "value"); + AudioTrack0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack0")); + AudioTrack1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack1")); + Unk3 = Xml.GetChildFloatAttribute(node, "Unk3", "value"); + Unk4 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk4")); + AudioTrack2 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack2")); + Unk5 = Xml.GetChildFloatAttribute(node, "Unk5", "value"); + Unk6 = Xml.GetChildIntAttribute(node, "Unk6", "value"); + Unk7 = Xml.GetChildIntAttribute(node, "Unk7", "value"); + Unk8 = Xml.GetChildFloatAttribute(node, "Unk8", "value"); + Unk9 = Xml.GetChildIntAttribute(node, "Unk9", "value"); + var vnode2 = node.SelectSingleNode("Items"); + if (vnode2 != null) + { + var inodes = vnode2.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + var v = new Dat151HashPair(); + v.ReadXml(inode); + vlist.Add(v); + } + ItemCount = (uint)vlist.Count; + Items = vlist.ToArray(); + } + } + } public override uint[] GetHashTableOffsets() { return new uint[] { 12, 16, 28 }; @@ -5060,6 +6443,16 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk3", FloatUtil.ToString(Unk3)); RelXml.ValueTag(sb, indent, "Unk4", Unk4.ToString()); } + public override void ReadXml(XmlNode node) + { + Unk0 = Xml.GetChildUIntAttribute(node, "Unk0", "value"); + Unk1 = Xml.GetChildIntAttribute(node, "Unk1", "value"); + Unk2 = Xml.GetChildIntAttribute(node, "Unk2", "value"); + AudioTrack0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack0")); + AudioTrack1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack1")); + Unk3 = Xml.GetChildFloatAttribute(node, "Unk3", "value"); + Unk4 = Xml.GetChildIntAttribute(node, "Unk4", "value"); + } public override uint[] GetHashTableOffsets() { return new uint[] { 12, 16 }; @@ -5118,6 +6511,17 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "AudioTrack2", RelXml.HashString(AudioTrack2)); RelXml.StringTag(sb, indent, "AudioTrack3", RelXml.HashString(AudioTrack3)); } + public void ReadXml(XmlNode node) + { + AudioTrack0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack0")); + AudioTrack1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack1")); + Unk1 = Xml.GetChildFloatAttribute(node, "Unk1", "value"); + Unk2 = Xml.GetChildFloatAttribute(node, "Unk2", "value"); + Unk3 = Xml.GetChildFloatAttribute(node, "Unk3", "value"); + Unk4 = Xml.GetChildFloatAttribute(node, "Unk4", "value"); + AudioTrack2 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack2")); + AudioTrack3 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack3")); + } } [TC(typeof(EXP))] public class Dat151Mood : Dat151RelData { @@ -5185,6 +6589,29 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "MoodItems"); } } + public override void ReadXml(XmlNode node) + { + Unk0 = Xml.GetChildUIntAttribute(node, "Unk0", "value"); + Unk1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk1")); + Unk2 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk2")); + var vnode2 = node.SelectSingleNode("MoodItems"); + if (vnode2 != null) + { + var inodes = vnode2.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + var v = new Dat151MoodItem(); + v.ReadXml(inode); + vlist.Add(v); + } + MoodItemCount = (uint)vlist.Count; + MoodItems = vlist.ToArray(); + } + } + } public override uint[] GetHashTableOffsets() { var offsets = new List(); @@ -5266,6 +6693,19 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk5", Unk5.ToString()); RelXml.ValueTag(sb, indent, "Unk6", Unk6.ToString()); } + public override void ReadXml(XmlNode node) + { + Unk0 = Xml.GetChildUIntAttribute(node, "Unk0", "value"); + Unk1 = Xml.GetChildIntAttribute(node, "Unk1", "value"); + Unk2 = Xml.GetChildIntAttribute(node, "Unk2", "value"); + AudioTrack0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack0")); + AudioTrack1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack1")); + Unk3 = Xml.GetChildFloatAttribute(node, "Unk3", "value"); + AudioTrack2 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack2")); + Unk4 = Xml.GetChildFloatAttribute(node, "Unk4", "value"); + Unk5 = Xml.GetChildIntAttribute(node, "Unk5", "value"); + Unk6 = Xml.GetChildIntAttribute(node, "Unk6", "value"); + } public override uint[] GetHashTableOffsets() { return new uint[] { 12, 16, 24 }; @@ -5324,6 +6764,24 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "AudioTracks"); } } + public override void ReadXml(XmlNode node) + { + var vnode = node.SelectSingleNode("AudioTracks"); + if (vnode != null) + { + var inodes = vnode.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + vlist.Add(XmlRel.GetHash(inode.InnerText)); + } + AudioTrackCount = (uint)vlist.Count; + AudioTracks = vlist.ToArray(); + } + } + } public override uint[] GetHashTableOffsets() { var offsets = new List(); @@ -5406,6 +6864,20 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk7", Unk7.ToString()); RelXml.ValueTag(sb, indent, "Unk8", Unk8.ToString()); } + public override void ReadXml(XmlNode node) + { + Unk0 = Xml.GetChildUIntAttribute(node, "Unk0", "value"); + Unk1 = Xml.GetChildIntAttribute(node, "Unk1", "value"); + Unk2 = Xml.GetChildIntAttribute(node, "Unk2", "value"); + AudioTrack0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack0")); + AudioTrack1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack1")); + Unk3 = Xml.GetChildFloatAttribute(node, "Unk3", "value"); + Unk4 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk4")); + Unk5 = Xml.GetChildIntAttribute(node, "Unk5", "value"); + Unk6 = Xml.GetChildIntAttribute(node, "Unk6", "value"); + Unk7 = Xml.GetChildIntAttribute(node, "Unk7", "value"); + Unk8 = Xml.GetChildIntAttribute(node, "Unk8", "value"); + } public override uint[] GetHashTableOffsets() { return new uint[] { 12, 16 }; @@ -5465,6 +6937,15 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "AudioTrack1", RelXml.HashString(AudioTrack1)); RelXml.ValueTag(sb, indent, "Unk3", Unk3.ToString()); } + public override void ReadXml(XmlNode node) + { + Unk0 = Xml.GetChildUIntAttribute(node, "Unk0", "value"); + Unk1 = Xml.GetChildIntAttribute(node, "Unk1", "value"); + Unk2 = Xml.GetChildIntAttribute(node, "Unk2", "value"); + AudioTrack0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack0")); + AudioTrack1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack1")); + Unk3 = Xml.GetChildIntAttribute(node, "Unk3", "value"); + } public override uint[] GetHashTableOffsets() { return new uint[] { 12, 16 }; @@ -5526,6 +7007,16 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk3", FloatUtil.ToString(Unk3)); RelXml.ValueTag(sb, indent, "Unk4", FloatUtil.ToString(Unk4)); } + public override void ReadXml(XmlNode node) + { + Unk0 = Xml.GetChildUIntAttribute(node, "Unk0", "value"); + Unk1 = Xml.GetChildIntAttribute(node, "Unk1", "value"); + Unk2 = Xml.GetChildIntAttribute(node, "Unk2", "value"); + AudioTrack0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack0")); + AudioTrack1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack1")); + Unk3 = Xml.GetChildFloatAttribute(node, "Unk3", "value"); + Unk4 = Xml.GetChildFloatAttribute(node, "Unk4", "value"); + } public override uint[] GetHashTableOffsets() { return new uint[] { 12, 16 }; @@ -5587,6 +7078,16 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk3", FloatUtil.ToString(Unk3)); RelXml.ValueTag(sb, indent, "Unk4", FloatUtil.ToString(Unk4)); } + public override void ReadXml(XmlNode node) + { + Unk0 = Xml.GetChildUIntAttribute(node, "Unk0", "value"); + Unk1 = Xml.GetChildIntAttribute(node, "Unk1", "value"); + Unk2 = Xml.GetChildIntAttribute(node, "Unk2", "value"); + AudioTrack0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack0")); + AudioTrack1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack1")); + Unk3 = Xml.GetChildFloatAttribute(node, "Unk3", "value"); + Unk4 = Xml.GetChildFloatAttribute(node, "Unk4", "value"); + } public override uint[] GetHashTableOffsets() { return new uint[] { 12, 16 }; @@ -5667,7 +7168,7 @@ namespace CodeWalker.GameFiles if (AudioTracks1Count == 0) { AudioTrack0 = br.ReadUInt32(); - AudioTracks2 = new MetaHash[] { AudioTrack0 }; + //AudioTracks2 = new MetaHash[] { AudioTrack0 }; } else //if (AudioTracks1Count > 0) { @@ -5719,7 +7220,7 @@ namespace CodeWalker.GameFiles if (AudioTracks1Count == 0) { - bw.Write(AudioTracks2[0]);//hrmm + bw.Write(AudioTrack0);//hrmm } else //if (AudioTracks1Count > 0) { @@ -5790,6 +7291,60 @@ namespace CodeWalker.GameFiles } } + public override void ReadXml(XmlNode node) + { + Unk00 = Xml.GetChildUIntAttribute(node, "Unk00", "value"); + Unk01 = Xml.GetChildIntAttribute(node, "Unk01", "value"); + Unk02 = Xml.GetChildIntAttribute(node, "Unk02", "value"); + Unk03 = Xml.GetChildIntAttribute(node, "Unk03", "value"); + Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk04")); + Unk05 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk05")); + Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); + Unk07 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk07")); + Unk08 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk08")); + Unk09 = Xml.GetChildFloatAttribute(node, "Unk09", "value"); + Unk10 = Xml.GetChildFloatAttribute(node, "Unk10", "value"); + Unk11 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk11")); + Unk12 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk12")); + Unk13 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk13")); + Unk14 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk14")); + Unk15 = (byte)Xml.GetChildUIntAttribute(node, "Unk15", "value"); + Unk16 = (byte)Xml.GetChildUIntAttribute(node, "Unk16", "value"); + Unk17 = (byte)Xml.GetChildUIntAttribute(node, "Unk17", "value"); + AudioTrack0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack0")); + var vnode2 = node.SelectSingleNode("AudioTracks1"); + if (vnode2 != null) + { + var inodes = vnode2.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + var v = new Dat151HashPair(); + v.ReadXml(inode); + vlist.Add(v); + } + AudioTracks1Count = (byte)vlist.Count; + AudioTracks1 = vlist.ToArray(); + } + } + var vnode = node.SelectSingleNode("AudioTracks2"); + if (vnode != null) + { + var inodes = vnode.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + vlist.Add(XmlRel.GetHash(inode.InnerText)); + } + AudioTracks2Count = (uint)vlist.Count; + AudioTracks2 = vlist.ToArray(); + } + } + } public override uint[] GetHashTableOffsets() { var offsets = new List(); @@ -5844,6 +7399,10 @@ namespace CodeWalker.GameFiles { RelXml.StringTag(sb, indent, "AudioTrack0", RelXml.HashString(AudioTrack0)); } + public override void ReadXml(XmlNode node) + { + AudioTrack0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack0")); + } public override uint[] GetHashTableOffsets() { return new uint[] { 0 }; @@ -6257,6 +7816,103 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "Unk88", RelXml.HashString(Unk88)); RelXml.ValueTag(sb, indent, "Unk89", Unk89.ToString()); } + public override void ReadXml(XmlNode node) + { + Unk00 = Xml.GetChildUIntAttribute(node, "Unk00", "value"); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk04")); + Unk05 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk05")); + Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); + Unk07 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk07")); + Unk08 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk08")); + Unk09 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk09")); + Unk10 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk10")); + Unk11 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk11")); + Unk12 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk12")); + Unk13 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk13")); + Unk14 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk14")); + Unk15 = Xml.GetChildIntAttribute(node, "Unk15", "value"); + Unk16 = Xml.GetChildIntAttribute(node, "Unk16", "value"); + Unk17 = Xml.GetChildIntAttribute(node, "Unk17", "value"); + Unk18 = Xml.GetChildIntAttribute(node, "Unk18", "value"); + Unk19 = Xml.GetChildFloatAttribute(node, "Unk19", "value"); + Unk20 = Xml.GetChildIntAttribute(node, "Unk20", "value"); + Unk21 = Xml.GetChildFloatAttribute(node, "Unk21", "value"); + Unk22 = Xml.GetChildFloatAttribute(node, "Unk22", "value"); + Unk23 = Xml.GetChildFloatAttribute(node, "Unk23", "value"); + Unk24 = Xml.GetChildFloatAttribute(node, "Unk24", "value"); + Unk25 = Xml.GetChildFloatAttribute(node, "Unk25", "value"); + Unk26 = Xml.GetChildFloatAttribute(node, "Unk26", "value"); + Unk27 = Xml.GetChildIntAttribute(node, "Unk27", "value"); + Unk28 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk28")); + Unk29 = Xml.GetChildFloatAttribute(node, "Unk29", "value"); + Unk30 = Xml.GetChildFloatAttribute(node, "Unk30", "value"); + AudioTrack0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack0")); + Unk31 = Xml.GetChildIntAttribute(node, "Unk31", "value"); + Unk32 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk32")); + AudioTrack1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack1")); + AudioTrack2 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack2")); + Unk33 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk33")); + Unk34 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk34")); + Unk35 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk35")); + Unk36 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk36")); + Unk37 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk37")); + Unk38 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk38")); + Unk39 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk39")); + Unk40 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk40")); + Unk41 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk41")); + Unk42 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk42")); + Unk43 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk43")); + Unk44 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk44")); + Unk45 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk45")); + Unk46 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk46")); + Unk47 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk47")); + Unk48 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk48")); + Unk49 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk49")); + Unk50 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk50")); + Unk51 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk51")); + Unk52 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk52")); + Unk53 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk53")); + Unk54 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk54")); + Unk55 = Xml.GetChildFloatAttribute(node, "Unk55", "value"); + Unk56 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk56")); + Unk57 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk57")); + Unk58 = Xml.GetChildIntAttribute(node, "Unk58", "value"); + Unk59 = Xml.GetChildIntAttribute(node, "Unk59", "value"); + Unk60 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk60")); + Unk61 = Xml.GetChildIntAttribute(node, "Unk61", "value"); + Unk62 = Xml.GetChildIntAttribute(node, "Unk62", "value"); + Unk63 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk63")); + Unk64 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk64")); + Unk65 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk65")); + Unk66 = Xml.GetChildIntAttribute(node, "Unk66", "value"); + Unk67 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk67")); + Unk68 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk68")); + Unk69 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk69")); + Unk70 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk70")); + Unk71 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk71")); + Unk72 = Xml.GetChildIntAttribute(node, "Unk72", "value"); + Unk73 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk73")); + Unk74 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk74")); + Unk75 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk75")); + Unk76 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk76")); + Unk77 = Xml.GetChildFloatAttribute(node, "Unk77", "value"); + Unk78 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk78")); + Unk79 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk79")); + Unk80 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk80")); + Unk81 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk81")); + Unk82 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk82")); + Unk83 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk83")); + Unk84 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk84")); + Unk85 = Xml.GetChildIntAttribute(node, "Unk85", "value"); + Unk86 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk86")); + Unk87 = Xml.GetChildIntAttribute(node, "Unk87", "value"); + Unk88 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk88")); + Unk89 = Xml.GetChildIntAttribute(node, "Unk89", "value"); + + } public override uint[] GetHashTableOffsets() { return new uint[] { 124, 136, 140 }; @@ -6522,6 +8178,65 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "AudioTrack1", RelXml.HashString(AudioTrack1)); } } + public override void ReadXml(XmlNode node) + { + Unk00 = Xml.GetChildUIntAttribute(node, "Unk00", "value"); + Unk01 = Xml.GetChildUIntAttribute(node, "Unk01", "value"); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk04")); + Unk05 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk05")); + Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); + Unk07 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk07")); + Unk08 = Xml.GetChildFloatAttribute(node, "Unk08", "value"); + Unk09 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk09")); + Unk10 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk10")); + Unk11 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk11")); + Unk12 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk12")); + Unk13 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk13")); + Unk14 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk14")); + Unk15 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk15")); + Unk16 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk16")); + Unk17 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk17")); + Unk18 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk18")); + Unk19 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk19")); + Unk20 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk20")); + Unk21 = Xml.GetChildFloatAttribute(node, "Unk21", "value"); + Unk22 = Xml.GetChildFloatAttribute(node, "Unk22", "value"); + Unk23 = Xml.GetChildFloatAttribute(node, "Unk23", "value"); + Unk24 = Xml.GetChildFloatAttribute(node, "Unk24", "value"); + Unk25 = Xml.GetChildFloatAttribute(node, "Unk25", "value"); + Unk26 = Xml.GetChildFloatAttribute(node, "Unk26", "value"); + Unk27 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk27")); + Unk28 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk28")); + Unk29 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk29")); + Unk30 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk30")); + Unk31 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk31")); + Unk32 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk32")); + Unk33 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk33")); + Unk34 = Xml.GetChildFloatAttribute(node, "Unk34", "value"); + Unk35 = Xml.GetChildFloatAttribute(node, "Unk35", "value"); + Unk36 = Xml.GetChildFloatAttribute(node, "Unk36", "value"); + Unk37 = Xml.GetChildFloatAttribute(node, "Unk37", "value"); + Unk38 = Xml.GetChildUIntAttribute(node, "Unk38", "value"); + Unk39 = Xml.GetChildFloatAttribute(node, "Unk39", "value"); + Unk40 = Xml.GetChildFloatAttribute(node, "Unk40", "value"); + Unk41 = Xml.GetChildFloatAttribute(node, "Unk41", "value"); + Unk42 = Xml.GetChildFloatAttribute(node, "Unk42", "value"); + Unk43 = Xml.GetChildFloatAttribute(node, "Unk43", "value"); + Unk44 = Xml.GetChildFloatAttribute(node, "Unk44", "value"); + Unk45 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk45")); + Unk46 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk46")); + Unk47 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk47")); + Unk48 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk48")); + Unk49 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk49")); + if (node.SelectSingleNode("AudioTrack0") != null) + { + HasAudioTracks = 1; + AudioTrack0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack0")); + AudioTrack1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack1")); + } + } public override uint[] GetHashTableOffsets() { if (HasAudioTracks > 0) return new uint[] { 204, 208 }; @@ -6563,6 +8278,12 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "AudioTrack0", RelXml.HashString(AudioTrack0)); RelXml.ValueTag(sb, indent, "Unk1", FloatUtil.ToString(Unk1)); } + public override void ReadXml(XmlNode node) + { + Unk0 = Xml.GetChildUIntAttribute(node, "Unk0", "value"); + AudioTrack0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack0")); + Unk1 = Xml.GetChildFloatAttribute(node, "Unk1", "value"); + } public override uint[] GetHashTableOffsets() { return new uint[] { 4 }; @@ -6623,6 +8344,26 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "AudioItems"); } } + public override void ReadXml(XmlNode node) + { + var vnode2 = node.SelectSingleNode("AudioItems"); + if (vnode2 != null) + { + var inodes = vnode2.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + var v = new Dat151HashPair(); + v.ReadXml(inode); + vlist.Add(v); + } + AudioItemCount = (uint)vlist.Count; + AudioItems = vlist.ToArray(); + } + } + } public override uint[] GetHashTableOffsets() { var offsets = new List(); @@ -6725,6 +8466,32 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "AudioTracks"); } } + public override void ReadXml(XmlNode node) + { + Unk0 = Xml.GetChildUIntAttribute(node, "Unk0", "value"); + Unk1 = Xml.GetChildIntAttribute(node, "Unk1", "value"); + Unk2 = Xml.GetChildIntAttribute(node, "Unk2", "value"); + AudioTrack0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack0")); + AudioTrack1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack1")); + Unk3 = Xml.GetChildFloatAttribute(node, "Unk3", "value"); + Unk4 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk4")); + Unk5 = Xml.GetChildIntAttribute(node, "Unk5", "value"); + var vnode = node.SelectSingleNode("AudioTracks"); + if (vnode != null) + { + var inodes = vnode.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + vlist.Add(XmlRel.GetHash(inode.InnerText)); + } + AudioTracksCount = (uint)vlist.Count; + AudioTracks = vlist.ToArray(); + } + } + } public override uint[] GetHashTableOffsets() { var offsets = new List(); @@ -6744,8 +8511,8 @@ namespace CodeWalker.GameFiles public int Unk2 { get; set; } public MetaHash AudioTrack0 { get; set; } public MetaHash AudioTrack1 { get; set; } - public int Unk3 { get; set; } - public int Unk4 { get; set; } + public float Unk3 { get; set; } + public MetaHash Unk4 { get; set; } public int Unk5 { get; set; } public Dat151RadioDjSpeechAction(RelFile rel) : base(rel) @@ -6760,10 +8527,21 @@ namespace CodeWalker.GameFiles Unk2 = br.ReadInt32(); AudioTrack0 = br.ReadUInt32(); AudioTrack1 = br.ReadUInt32(); - Unk3 = br.ReadInt32(); - Unk4 = br.ReadInt32(); + Unk3 = br.ReadSingle(); + Unk4 = br.ReadUInt32(); Unk5 = br.ReadInt32(); + if (Unk1 != 0) + { } + if (Unk2 != 0) + { } + if (Unk3 != 0) + { } + if (Unk4 != 0) + { } + if (Unk5 != 0) + { } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } @@ -6788,20 +8566,20 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk2", Unk2.ToString()); RelXml.StringTag(sb, indent, "AudioTrack0", RelXml.HashString(AudioTrack0)); RelXml.StringTag(sb, indent, "AudioTrack1", RelXml.HashString(AudioTrack1)); - RelXml.ValueTag(sb, indent, "Unk3", Unk3.ToString()); - RelXml.ValueTag(sb, indent, "Unk4", Unk4.ToString()); + RelXml.ValueTag(sb, indent, "Unk3", FloatUtil.ToString(Unk3)); + RelXml.StringTag(sb, indent, "Unk4", RelXml.HashString(Unk4)); RelXml.ValueTag(sb, indent, "Unk5", Unk5.ToString()); - - if (Unk1 != 0) - { } - if (Unk2 != 0) - { } - if (Unk3 != 0) - { } - if (Unk4 != 0) - { } - if (Unk5 != 0) - { } + } + public override void ReadXml(XmlNode node) + { + Unk0 = Xml.GetChildUIntAttribute(node, "Unk0", "value"); + Unk1 = Xml.GetChildIntAttribute(node, "Unk1", "value"); + Unk2 = Xml.GetChildIntAttribute(node, "Unk2", "value"); + AudioTrack0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack0")); + AudioTrack1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack1")); + Unk3 = Xml.GetChildFloatAttribute(node, "Unk3", "value"); + Unk4 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk4")); + Unk5 = Xml.GetChildIntAttribute(node, "Unk5", "value"); } public override uint[] GetHashTableOffsets() { @@ -6863,6 +8641,26 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "AudioItems"); } } + public override void ReadXml(XmlNode node) + { + var vnode2 = node.SelectSingleNode("AudioItems"); + if (vnode2 != null) + { + var inodes = vnode2.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + var v = new Dat151HashPair(); + v.ReadXml(inode); + vlist.Add(v); + } + AudioItemCount = (uint)vlist.Count; + AudioItems = vlist.ToArray(); + } + } + } public override uint[] GetHashTableOffsets() { var offsets = new List(); @@ -6928,6 +8726,26 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "AudioItems"); } } + public override void ReadXml(XmlNode node) + { + var vnode2 = node.SelectSingleNode("AudioItems"); + if (vnode2 != null) + { + var inodes = vnode2.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + var v = new Dat151HashPair(); + v.ReadXml(inode); + vlist.Add(v); + } + AudioItemCount = (uint)vlist.Count; + AudioItems = vlist.ToArray(); + } + } + } public override uint[] GetHashTableOffsets() { var offsets = new List(); @@ -6993,6 +8811,26 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "AudioItems"); } } + public override void ReadXml(XmlNode node) + { + var vnode2 = node.SelectSingleNode("AudioItems"); + if (vnode2 != null) + { + var inodes = vnode2.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + var v = new Dat151HashPair(); + v.ReadXml(inode); + vlist.Add(v); + } + AudioItemCount = (uint)vlist.Count; + AudioItems = vlist.ToArray(); + } + } + } public override uint[] GetHashTableOffsets() { var offsets = new List(); @@ -7058,6 +8896,26 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "AudioItems"); } } + public override void ReadXml(XmlNode node) + { + var vnode2 = node.SelectSingleNode("AudioItems"); + if (vnode2 != null) + { + var inodes = vnode2.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + var v = new Dat151HashPair(); + v.ReadXml(inode); + vlist.Add(v); + } + AudioItemCount = (uint)vlist.Count; + AudioItems = vlist.ToArray(); + } + } + } public override uint[] GetHashTableOffsets() { var offsets = new List(); @@ -7123,6 +8981,26 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "AudioItems"); } } + public override void ReadXml(XmlNode node) + { + var vnode2 = node.SelectSingleNode("AudioItems"); + if (vnode2 != null) + { + var inodes = vnode2.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + var v = new Dat151HashPair(); + v.ReadXml(inode); + vlist.Add(v); + } + AudioItemCount = (uint)vlist.Count; + AudioItems = vlist.ToArray(); + } + } + } public override uint[] GetHashTableOffsets() { var offsets = new List(); @@ -7188,6 +9066,26 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "AudioItems"); } } + public override void ReadXml(XmlNode node) + { + var vnode2 = node.SelectSingleNode("AudioItems"); + if (vnode2 != null) + { + var inodes = vnode2.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + var v = new Dat151HashPair(); + v.ReadXml(inode); + vlist.Add(v); + } + AudioItemCount = (uint)vlist.Count; + AudioItems = vlist.ToArray(); + } + } + } public override uint[] GetHashTableOffsets() { var offsets = new List(); @@ -7245,6 +9143,15 @@ namespace CodeWalker.GameFiles } Points = points; + //switch (Unk12) + //{ + // case 4.267251f: + // case 2.055879f: + // break; + // default: + // break; + //} + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } @@ -7290,8 +9197,27 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk10", Unk10.ToString()); RelXml.ValueTag(sb, indent, "Unk11", Unk11.ToString()); RelXml.ValueTag(sb, indent, "Unk12", FloatUtil.ToString(Unk12)); + //RelXml.StringTag(sb, indent, "Unk12", RelXml.HashString(Unk12)); RelXml.WriteRawArray(sb, Points, indent, "Points", "", RelXml.FormatVector2, 1); } + public override void ReadXml(XmlNode node) + { + Unk01 = Xml.GetChildUIntAttribute(node, "Unk01", "value"); + Unk02 = Xml.GetChildVector4Attributes(node, "Unk02", "x", "y", "z", "w"); + Unk03 = Xml.GetChildIntAttribute(node, "Unk03", "value"); + Unk04 = Xml.GetChildIntAttribute(node, "Unk04", "value"); + Unk05 = Xml.GetChildIntAttribute(node, "Unk05", "value"); + Unk06 = Xml.GetChildIntAttribute(node, "Unk06", "value"); + Unk07 = Xml.GetChildIntAttribute(node, "Unk07", "value"); + Unk08 = Xml.GetChildIntAttribute(node, "Unk08", "value"); + Unk09 = Xml.GetChildIntAttribute(node, "Unk09", "value"); + Unk10 = Xml.GetChildIntAttribute(node, "Unk10", "value"); + Unk11 = Xml.GetChildIntAttribute(node, "Unk11", "value"); + Unk12 = Xml.GetChildFloatAttribute(node, "Unk12", "value"); + //Unk12 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk12")); + Points = Xml.GetChildRawVector2Array(node, "Points"); + PointsCount = Points?.Length ?? 0; + } } [TC(typeof(EXP))] public class Dat151ShoreLineLake : Dat151RelData { @@ -7363,6 +9289,16 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk05", Unk05.ToString()); RelXml.WriteRawArray(sb, Points, indent, "Points", "", RelXml.FormatVector2, 1); } + public override void ReadXml(XmlNode node) + { + Unk01 = Xml.GetChildUIntAttribute(node, "Unk01", "value"); + Unk02 = Xml.GetChildVector4Attributes(node, "Unk02", "x", "y", "z", "w"); + Unk03 = Xml.GetChildIntAttribute(node, "Unk03", "value"); + Unk04 = Xml.GetChildIntAttribute(node, "Unk04", "value"); + Unk05 = Xml.GetChildUIntAttribute(node, "Unk05", "value"); + Points = Xml.GetChildRawVector2Array(node, "Points"); + PointsCount = Points?.Length ?? 0; + } } [TC(typeof(EXP))] public class Dat151ShoreLineRiver : Dat151RelData { @@ -7433,6 +9369,17 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk06", Unk06.ToString()); RelXml.WriteRawArray(sb, Points, indent, "Points", "", RelXml.FormatVector3, 1); } + public override void ReadXml(XmlNode node) + { + Unk01 = Xml.GetChildUIntAttribute(node, "Unk01", "value"); + Unk02 = Xml.GetChildVector4Attributes(node, "Unk02", "x", "y", "z", "w"); + Unk03 = Xml.GetChildFloatAttribute(node, "Unk03", "value"); + Unk04 = Xml.GetChildUIntAttribute(node, "Unk04", "value"); + Unk05 = Xml.GetChildUIntAttribute(node, "Unk05", "value"); + Unk06 = Xml.GetChildUIntAttribute(node, "Unk06", "value"); + Points = Xml.GetChildRawVector3Array(node, "Points"); + PointsCount = (uint)(Points?.Length ?? 0); + } } [TC(typeof(EXP))] public class Dat151ShoreLineOcean : Dat151RelData { @@ -7528,6 +9475,23 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk12", FloatUtil.ToString(Unk12)); RelXml.WriteRawArray(sb, Points, indent, "Points", "", RelXml.FormatVector2, 1); } + public override void ReadXml(XmlNode node) + { + Unk01 = Xml.GetChildUIntAttribute(node, "Unk01", "value"); + Unk02 = Xml.GetChildVector4Attributes(node, "Unk02", "x", "y", "z", "w"); + Unk03 = Xml.GetChildFloatAttribute(node, "Unk03", "value"); + Unk04 = Xml.GetChildUIntAttribute(node, "Unk04", "value"); + Unk05 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk05")); + Unk06 = Xml.GetChildFloatAttribute(node, "Unk06", "value"); + Unk07 = Xml.GetChildFloatAttribute(node, "Unk07", "value"); + Unk08 = Xml.GetChildFloatAttribute(node, "Unk08", "value"); + Unk09 = Xml.GetChildFloatAttribute(node, "Unk09", "value"); + Unk10 = Xml.GetChildFloatAttribute(node, "Unk10", "value"); + Unk11 = Xml.GetChildFloatAttribute(node, "Unk11", "value"); + Unk12 = Xml.GetChildFloatAttribute(node, "Unk12", "value"); + Points = Xml.GetChildRawVector2Array(node, "Points"); + PointsCount = (uint)(Points?.Length ?? 0); + } } [TC(typeof(EXP))] public class Dat151ShoreLineList : Dat151RelData { @@ -7581,6 +9545,24 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "ShoreLines"); } } + public override void ReadXml(XmlNode node) + { + var vnode = node.SelectSingleNode("ShoreLines"); + if (vnode != null) + { + var inodes = vnode.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + vlist.Add(XmlRel.GetHash(inode.InnerText)); + } + ShoreLineCount = (uint)vlist.Count; + ShoreLines = vlist.ToArray(); + } + } + } } @@ -7656,6 +9638,27 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "Items"); } } + public override void ReadXml(XmlNode node) + { + var vnode = node.SelectSingleNode("Items"); + if (vnode != null) + { + var inodes = vnode.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + ItemValue v = new ItemValue(); + v.Unk0 = Xml.GetChildUIntAttribute(inode, "Unk0", "value"); + v.Unk1 = Xml.GetChildUIntAttribute(inode, "Unk1", "value"); + vlist.Add(v); + } + ItemCount = (uint)vlist.Count; + Items = vlist.ToArray(); + } + } + } } [TC(typeof(EXP))] public class Dat151VehicleEngineGranular : Dat151RelData { @@ -8024,6 +10027,69 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk58", Unk58.ToString()); RelXml.ValueTag(sb, indent, "Unk59", FloatUtil.ToString(Unk59)); } + public override void ReadXml(XmlNode node) + { + Unk00 = Xml.GetChildUIntAttribute(node, "Unk00", "value"); + Unk01 = Xml.GetChildIntAttribute(node, "Unk01", "value"); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + Unk04 = Xml.GetChildIntAttribute(node, "Unk04", "value"); + Unk05 = Xml.GetChildIntAttribute(node, "Unk05", "value"); + Unk06 = Xml.GetChildIntAttribute(node, "Unk06", "value"); + Unk07 = Xml.GetChildIntAttribute(node, "Unk07", "value"); + Unk08 = Xml.GetChildIntAttribute(node, "Unk08", "value"); + Unk09 = Xml.GetChildIntAttribute(node, "Unk09", "value"); + Unk10 = Xml.GetChildIntAttribute(node, "Unk10", "value"); + Unk11 = Xml.GetChildIntAttribute(node, "Unk11", "value"); + Unk12 = Xml.GetChildIntAttribute(node, "Unk12", "value"); + Unk13 = Xml.GetChildIntAttribute(node, "Unk13", "value"); + Unk14 = Xml.GetChildIntAttribute(node, "Unk14", "value"); + Unk15 = Xml.GetChildIntAttribute(node, "Unk15", "value"); + Unk16 = Xml.GetChildIntAttribute(node, "Unk16", "value"); + Unk17 = Xml.GetChildIntAttribute(node, "Unk17", "value"); + Unk18 = Xml.GetChildIntAttribute(node, "Unk18", "value"); + Unk19 = Xml.GetChildIntAttribute(node, "Unk19", "value"); + Unk20 = Xml.GetChildIntAttribute(node, "Unk20", "value"); + Unk21 = Xml.GetChildIntAttribute(node, "Unk21", "value"); + Unk22 = Xml.GetChildFloatAttribute(node, "Unk22", "value"); + Unk23 = Xml.GetChildFloatAttribute(node, "Unk23", "value"); + Unk24 = Xml.GetChildFloatAttribute(node, "Unk24", "value"); + Unk25 = Xml.GetChildFloatAttribute(node, "Unk25", "value"); + Unk26 = Xml.GetChildFloatAttribute(node, "Unk26", "value"); + Unk27 = Xml.GetChildFloatAttribute(node, "Unk27", "value"); + Unk28 = Xml.GetChildFloatAttribute(node, "Unk28", "value"); + Unk29 = Xml.GetChildIntAttribute(node, "Unk29", "value"); + Unk30 = Xml.GetChildIntAttribute(node, "Unk30", "value"); + Unk31 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk31")); + Unk32 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk32")); + Unk33 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk33")); + Unk34 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk34")); + Unk35 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk35")); + Unk36 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk36")); + Unk37 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk37")); + Unk38 = Xml.GetChildIntAttribute(node, "Unk38", "value"); + Unk39 = Xml.GetChildIntAttribute(node, "Unk39", "value"); + Unk40 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk40")); + Unk41 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk41")); + Unk42 = Xml.GetChildIntAttribute(node, "Unk42", "value"); + Unk43 = Xml.GetChildIntAttribute(node, "Unk43", "value"); + Unk44 = Xml.GetChildIntAttribute(node, "Unk44", "value"); + Unk45 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk45")); + Unk46 = Xml.GetChildIntAttribute(node, "Unk46", "value"); + Unk47 = Xml.GetChildIntAttribute(node, "Unk47", "value"); + Unk48 = Xml.GetChildIntAttribute(node, "Unk48", "value"); + Unk49 = Xml.GetChildIntAttribute(node, "Unk49", "value"); + Unk50 = Xml.GetChildIntAttribute(node, "Unk50", "value"); + Unk51 = Xml.GetChildIntAttribute(node, "Unk51", "value"); + Unk52 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk52")); + Unk53 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk53")); + Unk54 = Xml.GetChildIntAttribute(node, "Unk54", "value"); + Unk55 = Xml.GetChildIntAttribute(node, "Unk55", "value"); + Unk56 = Xml.GetChildIntAttribute(node, "Unk56", "value"); + Unk57 = Xml.GetChildIntAttribute(node, "Unk57", "value"); + Unk58 = Xml.GetChildIntAttribute(node, "Unk58", "value"); + Unk59 = Xml.GetChildFloatAttribute(node, "Unk59", "value"); + } } [TC(typeof(EXP))] public class Dat151Vehicle : Dat151RelData { @@ -8096,16 +10162,16 @@ namespace CodeWalker.GameFiles public int Unk60 { get; set; } public float Unk61 { get; set; } public int Unk62 { get; set; } - public MetaHash Unk63 { get; set; }//flags?? 0xE38FCF16 + public MetaHash Unk63 { get; set; } public int Unk64 { get; set; } public ushort Unk65 { get; set; } public ushort Unk66 { get; set; } - public MetaHash Unk67 { get; set; }//flags? 0x536F6CAC - public MetaHash Unk68 { get; set; }//flags?? 0xE38FCF16 - public MetaHash Unk69 { get; set; }//flags? 0x7C9B8D8C + public MetaHash Unk67 { get; set; } + public MetaHash Unk68 { get; set; } + public MetaHash Unk69 { get; set; } public int Unk70 { get; set; } - public MetaHash Unk71 { get; set; }//flags?? 0xE38FCF16 - public MetaHash Unk72 { get; set; }//flags?? 0xE38FCF16 + public MetaHash Unk71 { get; set; } + public MetaHash Unk72 { get; set; } public Dat151Vehicle(RelFile rel) : base(rel) { @@ -8456,6 +10522,82 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "Unk71", RelXml.HashString(Unk71)); RelXml.StringTag(sb, indent, "Unk72", RelXml.HashString(Unk72)); } + public override void ReadXml(XmlNode node) + { + Unk00 = Xml.GetChildUIntAttribute(node, "Unk00", "value"); + Engine = XmlRel.GetHash(Xml.GetChildInnerText(node, "Engine")); + EngineGranular = XmlRel.GetHash(Xml.GetChildInnerText(node, "EngineGranular")); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + DoorOpen = XmlRel.GetHash(Xml.GetChildInnerText(node, "DoorOpen")); + DoorClose = XmlRel.GetHash(Xml.GetChildInnerText(node, "DoorClose")); + Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); + Unk07 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk07")); + Unk08 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk08")); + Unk09 = Xml.GetChildFloatAttribute(node, "Unk09", "value"); + Unk10 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk10")); + Unk11 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk11")); + Unk12 = Xml.GetChildFloatAttribute(node, "Unk12", "value"); + Unk13 = Xml.GetChildFloatAttribute(node, "Unk13", "value"); + Unk14 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk14")); + Unk15 = Xml.GetChildIntAttribute(node, "Unk15", "value"); + Unk16 = Xml.GetChildIntAttribute(node, "Unk16", "value"); + Unk17 = Xml.GetChildIntAttribute(node, "Unk17", "value"); + ScannerParams = XmlRel.GetHash(Xml.GetChildInnerText(node, "ScannerParams")); + JumpLandIntact = XmlRel.GetHash(Xml.GetChildInnerText(node, "JumpLandIntact")); + JumpLandLoose = XmlRel.GetHash(Xml.GetChildInnerText(node, "JumpLandLoose")); + Unk21 = Xml.GetChildIntAttribute(node, "Unk21", "value"); + Unk22 = Xml.GetChildIntAttribute(node, "Unk22", "value"); + Unk23 = Xml.GetChildUIntAttribute(node, "Unk23", "value"); + Unk24 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk24")); + Unk25 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk25")); + Unk26 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk26")); + Unk27 = Xml.GetChildUIntAttribute(node, "Unk27", "value"); + Unk28 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk28")); + Unk29 = Xml.GetChildUIntAttribute(node, "Unk29", "value"); + Unk30 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk30")); + Unk31 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk31")); + Unk32 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk32")); + Unk33 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk33")); + Unk34 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk34")); + Unk35 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk35")); + Unk36 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk36")); + Unk37 = Xml.GetChildFloatAttribute(node, "Unk37", "value"); + Unk38 = Xml.GetChildFloatAttribute(node, "Unk38", "value"); + Unk39 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk39")); + Unk40 = Xml.GetChildIntAttribute(node, "Unk40", "value"); + Unk41 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk41")); + Unk42 = Xml.GetChildIntAttribute(node, "Unk42", "value"); + Unk43 = Xml.GetChildIntAttribute(node, "Unk43", "value"); + Unk44 = Xml.GetChildIntAttribute(node, "Unk44", "value"); + Unk45 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk45")); + Unk46 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk46")); + Unk47 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk47")); + TurretSounds = XmlRel.GetHash(Xml.GetChildInnerText(node, "TurretSounds")); + Unk49 = Xml.GetChildIntAttribute(node, "Unk49", "value"); + Unk50 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk50")); + Unk51 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk51")); + Unk52 = Xml.GetChildIntAttribute(node, "Unk52", "value"); + Unk53 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk53")); + Unk54 = Xml.GetChildFloatAttribute(node, "Unk54", "value"); + Unk55 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk55")); + Unk56 = Xml.GetChildIntAttribute(node, "Unk56", "value"); + Unk57 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk57")); + Unk58 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk58")); + Unk59 = Xml.GetChildFloatAttribute(node, "Unk59", "value"); + Unk60 = Xml.GetChildIntAttribute(node, "Unk60", "value"); + Unk61 = Xml.GetChildFloatAttribute(node, "Unk61", "value"); + Unk62 = Xml.GetChildIntAttribute(node, "Unk62", "value"); + Unk63 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk63")); + Unk64 = Xml.GetChildIntAttribute(node, "Unk64", "value"); + Unk65 = (ushort)Xml.GetChildUIntAttribute(node, "Unk65", "value"); + Unk66 = (ushort)Xml.GetChildUIntAttribute(node, "Unk66", "value"); + Unk67 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk67")); + Unk68 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk68")); + Unk69 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk69")); + Unk70 = Xml.GetChildIntAttribute(node, "Unk70", "value"); + Unk71 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk71")); + Unk72 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk72")); + } } [TC(typeof(EXP))] public class Dat151VehicleEngine : Dat151RelData { @@ -8694,7 +10836,7 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "Ignition", RelXml.HashString(Ignition)); RelXml.StringTag(sb, indent, "ShutDown", RelXml.HashString(ShutDown)); RelXml.StringTag(sb, indent, "Unk30", RelXml.HashString(Unk30)); - RelXml.StringTag(sb, indent, "Unk31", RelXml.HashString(ExhaustPops)); + RelXml.StringTag(sb, indent, "ExhaustPops", RelXml.HashString(ExhaustPops)); RelXml.StringTag(sb, indent, "Unk32", RelXml.HashString(Unk32)); RelXml.ValueTag(sb, indent, "Unk33", Unk33.ToString()); RelXml.ValueTag(sb, indent, "Unk34", Unk34.ToString()); @@ -8721,6 +10863,66 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "Unk55", RelXml.HashString(Unk55)); RelXml.StringTag(sb, indent, "ExhaustPopsUpgraded", RelXml.HashString(ExhaustPopsUpgraded)); } + public override void ReadXml(XmlNode node) + { + Unk00 = Xml.GetChildIntAttribute(node, "Unk00", "value"); + Unk01 = Xml.GetChildIntAttribute(node, "Unk01", "value"); + Unk02 = Xml.GetChildIntAttribute(node, "Unk02", "value"); + Unk03 = Xml.GetChildIntAttribute(node, "Unk03", "value"); + Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk04")); + Unk05 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk05")); + Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); + Unk07 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk07")); + Unk08 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk08")); + Unk09 = Xml.GetChildIntAttribute(node, "Unk09", "value"); + Unk10 = Xml.GetChildIntAttribute(node, "Unk10", "value"); + Unk11 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk11")); + Unk12 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk12")); + Unk13 = Xml.GetChildIntAttribute(node, "Unk13", "value"); + Unk14 = Xml.GetChildIntAttribute(node, "Unk14", "value"); + Unk15 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk15")); + Unk16 = Xml.GetChildIntAttribute(node, "Unk16", "value"); + Unk17 = Xml.GetChildIntAttribute(node, "Unk17", "value"); + Turbo = XmlRel.GetHash(Xml.GetChildInnerText(node, "Turbo")); + Unk19 = Xml.GetChildIntAttribute(node, "Unk19", "value"); + Unk20 = Xml.GetChildIntAttribute(node, "Unk20", "value"); + Unk21 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk21")); + Unk22 = Xml.GetChildIntAttribute(node, "Unk22", "value"); + Unk23 = Xml.GetChildIntAttribute(node, "Unk23", "value"); + Transmission = XmlRel.GetHash(Xml.GetChildInnerText(node, "Transmission")); + Unk25 = Xml.GetChildIntAttribute(node, "Unk25", "value"); + Unk26 = Xml.GetChildIntAttribute(node, "Unk26", "value"); + Unk27 = Xml.GetChildIntAttribute(node, "Unk27", "value"); + Ignition = XmlRel.GetHash(Xml.GetChildInnerText(node, "Ignition")); + ShutDown = XmlRel.GetHash(Xml.GetChildInnerText(node, "ShutDown")); + Unk30 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk30")); + ExhaustPops = XmlRel.GetHash(Xml.GetChildInnerText(node, "ExhaustPops")); + Unk32 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk32")); + Unk33 = Xml.GetChildIntAttribute(node, "Unk33", "value"); + Unk34 = Xml.GetChildIntAttribute(node, "Unk34", "value"); + StartupMaster = XmlRel.GetHash(Xml.GetChildInnerText(node, "StartupMaster")); + Unk36 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk36")); + Unk37 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk37")); + Unk38 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk38")); + Unk39 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk39")); + Unk40 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk40")); + Unk41 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk41")); + Unk42 = Xml.GetChildIntAttribute(node, "Unk42", "value"); + Unk43 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk43")); + Unk44 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk44")); + Unk45 = Xml.GetChildIntAttribute(node, "Unk45", "value"); + Unk46 = Xml.GetChildIntAttribute(node, "Unk46", "value"); + Unk47 = Xml.GetChildIntAttribute(node, "Unk47", "value"); + Unk48 = Xml.GetChildIntAttribute(node, "Unk48", "value"); + Unk49 = Xml.GetChildIntAttribute(node, "Unk49", "value"); + Unk50 = Xml.GetChildIntAttribute(node, "Unk50", "value"); + DumpValve = XmlRel.GetHash(Xml.GetChildInnerText(node, "DumpValve")); + Unk52 = Xml.GetChildIntAttribute(node, "Unk52", "value"); + TransmissionUpgraded = XmlRel.GetHash(Xml.GetChildInnerText(node, "TransmissionUpgraded")); + TurboUpgraded = XmlRel.GetHash(Xml.GetChildInnerText(node, "TurboUpgraded")); + Unk55 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk55")); + ExhaustPopsUpgraded = XmlRel.GetHash(Xml.GetChildInnerText(node, "ExhaustPopsUpgraded")); + } } [TC(typeof(EXP))] public class Dat151VehicleScannerParams : Dat151RelData { @@ -8801,6 +11003,30 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "Params"); } } + public override void ReadXml(XmlNode node) + { + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + var vnode = node.SelectSingleNode("Params"); + if (vnode != null) + { + var inodes = vnode.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + var v = new Param(); + v.Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(inode, "Unk01")); + v.Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(inode, "Unk02")); + v.Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(inode, "Unk03")); + v.Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(inode, "Unk04")); + vlist.Add(v); + } + ParamCount = vlist.Count; + Params = vlist.ToArray(); + } + } + } } [TC(typeof(EXP))] public class Dat151Weapon : Dat151RelData { @@ -9169,6 +11395,90 @@ namespace CodeWalker.GameFiles } } } + public override void ReadXml(XmlNode node) + { + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Version = Xml.GetChildIntAttribute(node, "Version", "value"); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk04")); + Unk05 = Xml.GetChildFloatAttribute(node, "Unk05", "value"); + Unk06 = Xml.GetChildIntAttribute(node, "Unk06", "value"); + Unk07 = Xml.GetChildFloatAttribute(node, "Unk07", "value"); + Unk08 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk08")); + Unk09 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk09")); + Unk10 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk10")); + Unk11 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk11")); + Unk12 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk12")); + Unk13 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk13")); + Unk14 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk14")); + Unk15 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk15")); + Unk16 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk16")); + Unk17 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk17")); + Unk18 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk18")); + Unk19 = Xml.GetChildIntAttribute(node, "Unk19", "value"); + Unk20 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk20")); + Unk21 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk21")); + Unk22 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk22")); + Unk23 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk23")); + Unk24 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk24")); + Unk25 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk25")); + Unk26 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk26")); + Unk27 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk27")); + Unk28 = Xml.GetChildIntAttribute(node, "Unk28", "value"); + Unk29 = Xml.GetChildIntAttribute(node, "Unk29", "value"); + Unk30 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk30")); + Unk31 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk31")); + Unk32 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk32")); + Unk33 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk33")); + Unk34 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk34")); + + if (Version >= 1) + { + Unk35 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk35")); + Unk36 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk36")); + Unk37 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk37")); + Unk38 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk38")); + Unk39 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk39")); + Unk40 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk40")); + Unk41 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk41")); + Unk42 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk42")); + Unk43 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk43")); + Unk44 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk44")); + Unk45 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk45")); + Unk46 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk46")); + Unk47 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk47")); + + if (Version >= 2) + { + Unk48 = Xml.GetChildIntAttribute(node, "Unk48", "value"); + Unk49 = Xml.GetChildIntAttribute(node, "Unk49", "value"); + Unk50 = Xml.GetChildIntAttribute(node, "Unk50", "value"); + + if (Version >= 3) + { + Unk51 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk51")); + Unk52 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk52")); + Unk53 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk53")); + Unk54 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk54")); + Unk55 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk55")); + Unk56 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk56")); + Unk57 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk57")); + Unk58 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk58")); + Unk59 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk59")); + Unk60 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk60")); + Unk61 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk61")); + Unk62 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk62")); + Unk63 = Xml.GetChildIntAttribute(node, "Unk63", "value"); + Unk64 = Xml.GetChildIntAttribute(node, "Unk64", "value"); + Unk65 = Xml.GetChildIntAttribute(node, "Unk65", "value"); + Unk66 = Xml.GetChildIntAttribute(node, "Unk66", "value"); + Unk67 = Xml.GetChildIntAttribute(node, "Unk67", "value"); + } + } + } + } } [TC(typeof(EXP))] public class Dat151Explosion : Dat151RelData { @@ -9246,6 +11556,21 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk11", Unk11.ToString()); RelXml.ValueTag(sb, indent, "Unk12", Unk12.ToString()); } + public override void ReadXml(XmlNode node) + { + Unk01 = Xml.GetChildUIntAttribute(node, "Unk01", "value"); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + Unk04 = Xml.GetChildFloatAttribute(node, "Unk04", "value"); + Unk05 = Xml.GetChildFloatAttribute(node, "Unk05", "value"); + Unk06 = Xml.GetChildFloatAttribute(node, "Unk06", "value"); + Unk07 = Xml.GetChildFloatAttribute(node, "Unk07", "value"); + Unk08 = Xml.GetChildFloatAttribute(node, "Unk08", "value"); + Unk09 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk09")); + Unk10 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk10")); + Unk11 = Xml.GetChildIntAttribute(node, "Unk11", "value"); + Unk12 = Xml.GetChildIntAttribute(node, "Unk12", "value"); + } } [TC(typeof(EXP))] public class Dat151PedPVG : Dat151RelData { @@ -9268,6 +11593,8 @@ namespace CodeWalker.GameFiles public FlagsUint Unk1 { get; set; } public FlagsUint Unk2 { get; set; } + public UnkStruct() + { } public UnkStruct(BinaryReader br) { Name = br.ReadUInt32(); @@ -9291,6 +11618,12 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk1", Unk1.Value.ToString()); RelXml.ValueTag(sb, indent, "Unk2", Unk2.Value.ToString()); } + public void ReadXml(XmlNode node) + { + Name = XmlRel.GetHash(Xml.GetChildInnerText(node, "Name")); + Unk1 = Xml.GetChildUIntAttribute(node, "Unk1", "value"); + Unk2 = Xml.GetChildUIntAttribute(node, "Unk2", "value"); + } public override string ToString() { return Name.ToString() + ", " + Unk1.Value.ToString() + ", " + Unk2.Value.ToString(); @@ -9433,6 +11766,65 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk07", Unk07.ToString()); } + public override void ReadXml(XmlNode node) + { + Unk00 = Xml.GetChildUIntAttribute(node, "Unk00", "value"); + Unk01 = (byte)Xml.GetChildUIntAttribute(node, "Unk01", "value"); + Unk02 = (byte)Xml.GetChildUIntAttribute(node, "Unk02", "value"); + Unk03 = (byte)Xml.GetChildUIntAttribute(node, "Unk03", "value"); + var vnode = node.SelectSingleNode("Items1"); + if (vnode != null) + { + var inodes = vnode.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + var v = new UnkStruct(); + v.ReadXml(inode); + vlist.Add(v); + } + ItemCount1 = (byte)vlist.Count; + Items1 = vlist.ToArray(); + } + } + var vnode2 = node.SelectSingleNode("Items2"); + if (vnode2 != null) + { + var inodes = vnode2.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + var v = new UnkStruct(); + v.ReadXml(inode); + vlist.Add(v); + } + ItemCount2 = (byte)vlist.Count; + Items2 = vlist.ToArray(); + } + } + var vnode3 = node.SelectSingleNode("Items3"); + if (vnode3 != null) + { + var inodes = vnode3.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + var v = new UnkStruct(); + v.ReadXml(inode); + vlist.Add(v); + } + ItemCount3 = (byte)vlist.Count; + Items3 = vlist.ToArray(); + } + } + Unk07 = (byte)Xml.GetChildUIntAttribute(node, "Unk07", "value"); + } } @@ -10841,7 +13233,14 @@ namespace CodeWalker.GameFiles break; } - OpenTag(sb, iindent, "Item type=\"" + typeid + "\""); + var ntoffset = ""; + var dat151item = item as Dat151RelData; + if (dat151item != null) + { + ntoffset = " ntOffset=\"" + dat151item.NameTableOffset.ToString() + "\""; + } + + OpenTag(sb, iindent, "Item type=\"" + typeid + "\"" + ntoffset); StringTag(sb, icindent, "Name", item.Name ?? RelXml.HashString(item.NameHash)); @@ -10861,6 +13260,128 @@ namespace CodeWalker.GameFiles } + public class XmlRel + { + + public static RelFile GetRel(string xml) + { + XmlDocument doc = new XmlDocument(); + doc.LoadXml(xml); + return GetRel(doc); + } + + public static RelFile GetRel(XmlDocument doc) + { + + var node = doc.DocumentElement; + var reltypestr = node.Name.Substring(3); + var reltypeint = uint.Parse(reltypestr); + var reltype = (RelDatFileType)reltypeint; + + switch (reltype) + { + case RelDatFileType.Dat4://TODO! + case RelDatFileType.Dat54DataEntries://TODO! + break;// return null; //TODO + } + + RelFile rel = new RelFile(); + rel.RelType = reltype; + rel.DataUnkVal = Xml.GetChildUIntAttribute(node, "Version", "value"); + + var ntnode = node.SelectSingleNode("NameTable"); + if (ntnode != null) + { + var ntstrs = new List(); + var ntitems = ntnode.SelectNodes("Item"); + foreach (XmlNode ntitem in ntitems) + { + ntstrs.Add(ntitem.InnerText); + } + rel.NameTable = ntstrs.ToArray(); + rel.NameTableCount = (uint)ntstrs.Count; + } + + var itemsnode = node.SelectSingleNode("Items"); + if (itemsnode != null) + { + var itemslist = new List(); + var items = itemsnode.SelectNodes("Item"); + foreach (XmlNode item in items) + { + var ntoffset = Xml.GetUIntAttribute(item, "ntOffset"); + var typestr = Xml.GetStringAttribute(item, "type"); + var typeid = -1; + switch (reltype) + { + case RelDatFileType.Dat54DataEntries: + Dat54SoundType st; + if (Enum.TryParse(typestr, out st)) + { + typeid = (int)st; + } + break; + case RelDatFileType.Dat149: + case RelDatFileType.Dat150: + case RelDatFileType.Dat151: + Dat151RelType rt; + if (Enum.TryParse(typestr, out rt)) + { + typeid = (int)rt; + } + break; + } + if (typeid < 0) + { + if (!int.TryParse(typestr, out typeid)) + { + continue;//couldn't determine type! + } + } + + + RelData rd = rel.CreateRelData(reltype, typeid); + rd.Name = Xml.GetChildInnerText(item, "Name"); + rd.NameHash = XmlRel.GetHash(rd.Name); + rd.ReadXml(item); + itemslist.Add(rd); + + + var dat151data = rd as Dat151RelData; + if (dat151data != null) + { + dat151data.NameTableOffset = ntoffset; + } + + } + + rel.RelDatas = itemslist.ToArray();//this one will get sorted on save + rel.RelDatasSorted = itemslist.ToArray(); + } + + + return rel; + } + + + public static MetaHash GetHash(string str) + { + if (string.IsNullOrEmpty(str)) + { + return 0; + } + if (str.StartsWith("hash_")) + { + return Convert.ToUInt32(str.Substring(5), 16); + } + else + { + return JenkHash.GenHash(str); + } + } + + } + } diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index c3736de..34e1d0f 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -2401,6 +2401,47 @@ namespace CodeWalker.GameFiles + var relxml = RelXml.GetXml(rel); //XML test... + var rel3 = XmlRel.GetRel(relxml); + if (rel3 != null) + { + if (rel3.RelDatasSorted?.Length != rel.RelDatasSorted?.Length) + { } //check nothing went missing... + + + data = rel3.Save(); //full roundtrip! + if (data != null) + { + var rel4 = new RelFile(); + rel4.Load(data, rfe); //insanity check + + if (data.Length != rbfe.FileUncompressedSize) + { } + else if (data.Length != rel.RawFileData.Length) + { } + else + { + for (int i = 0; i < data.Length; i++) //raw file test + if (data[i] != rel.RawFileData[i]) + { break; } + } + + var relxml2 = RelXml.GetXml(rel4); //full insanity + if (relxml2.Length != relxml.Length) + { } + if (relxml2 != relxml) + { } + + } + else + { } + } + else + { } + + + + //sbi.Clear(); //foreach (var rd in rel.RelDatas) //{ diff --git a/CodeWalker.Core/Utils/Xml.cs b/CodeWalker.Core/Utils/Xml.cs index 8d5fb13..adc9d26 100644 --- a/CodeWalker.Core/Utils/Xml.cs +++ b/CodeWalker.Core/Utils/Xml.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; +using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Xml; @@ -32,6 +33,14 @@ namespace CodeWalker int.TryParse(val, out i); return i; } + public static uint GetUIntAttribute(XmlNode node, string attribute) + { + if (node == null) return 0; + string val = node.Attributes[attribute]?.InnerText; + uint i; + uint.TryParse(val, out i); + return i; + } public static float GetFloatAttribute(XmlNode node, string attribute) { if (node == null) return 0; @@ -183,5 +192,117 @@ namespace CodeWalker return child; } + + + + public static byte[] GetRawByteArray(XmlNode node) + { + if (node == null) return new byte[0]; + var data = new List(); + var split = Regex.Split(node.InnerText, @"[\s\r\n\t]"); + for (int i = 0; i < split.Length; i++) + { + if (!string.IsNullOrEmpty(split[i])) + { + var str = split[i]; + if (string.IsNullOrEmpty(str)) continue; + var val = Convert.ToByte(str, 16); + data.Add(val); + } + } + return data.ToArray(); + } + public static byte[] GetChildRawByteArray(XmlNode node, string name) + { + var cnode = node.SelectSingleNode(name); + return GetRawByteArray(cnode); + } + + public static Vector2[] GetRawVector2Array(XmlNode node) + { + if (node == null) return new Vector2[0]; + float x = 0f; + float y = 0f; + var items = new List(); + var split = node.InnerText.Split('\n');// Regex.Split(node.InnerText, @"[\s\r\n\t]"); + for (int i = 0; i < split.Length; i++) + { + var s = split[i]?.Trim(); + if (string.IsNullOrEmpty(s)) continue; + var split2 = s.Split(',');// Regex.Split(s, @"[\s\t]"); + int c = 0; + x = 0f; y = 0f; + for (int n = 0; n < split2.Length; n++) + { + var ts = split2[n]?.Trim(); + if (string.IsNullOrEmpty(ts)) continue; + var f = FloatUtil.Parse(ts); + switch (c) + { + case 0: x = f; break; + case 1: y = f; break; + //case 2: z = f; break; + } + c++; + } + if (c >= 2) + { + var val = new Vector2(x, y); + items.Add(val); + } + } + + return items.ToArray(); + } + public static Vector2[] GetChildRawVector2Array(XmlNode node, string name) + { + var cnode = node.SelectSingleNode(name); + return GetRawVector2Array(cnode); + } + + public static Vector3[] GetRawVector3Array(XmlNode node) + { + if (node == null) return new Vector3[0]; + float x = 0f; + float y = 0f; + float z = 0f; + var items = new List(); + var split = node.InnerText.Split('\n');// Regex.Split(node.InnerText, @"[\s\r\n\t]"); + for (int i = 0; i < split.Length; i++) + { + var s = split[i]?.Trim(); + if (string.IsNullOrEmpty(s)) continue; + var split2 = s.Split(',');// Regex.Split(s, @"[\s\t]"); + int c = 0; + x = 0f; y = 0f; + for (int n = 0; n < split2.Length; n++) + { + var ts = split2[n]?.Trim(); + if (string.IsNullOrEmpty(ts)) continue; + var f = FloatUtil.Parse(ts); + switch (c) + { + case 0: x = f; break; + case 1: y = f; break; + case 2: z = f; break; + } + c++; + } + if (c >= 3) + { + var val = new Vector3(x, y, z); + items.Add(val); + } + } + + return items.ToArray(); + } + public static Vector3[] GetChildRawVector3Array(XmlNode node, string name) + { + var cnode = node.SelectSingleNode(name); + return GetRawVector3Array(cnode); + } + + } } diff --git a/Project/ProjectForm.cs b/Project/ProjectForm.cs index 8a7e0c0..acb8105 100644 --- a/Project/ProjectForm.cs +++ b/Project/ProjectForm.cs @@ -1528,7 +1528,7 @@ namespace CodeWalker.Project cent.rotation = new Vector4(0, 0, 0, 1); cent.scaleXY = 1.0f; cent.scaleZ = 1.0f; - cent.flags = 1572872; + cent.flags = 32; //1572872; cent.parentIndex = -1; cent.lodDist = 200.0f; cent.lodLevel = rage__eLodType.LODTYPES_DEPTH_ORPHANHD; From 6533d842bcd72f565db03a481d910c80d9fd0b42 Mon Sep 17 00:00:00 2001 From: dexy Date: Sat, 19 Jan 2019 14:28:45 +1100 Subject: [PATCH 103/158] XML to audio dat.rel conversion progress --- .../GameFiles/FileTypes/RelFile.cs | 146 +++++++++++++----- CodeWalker.Core/Utils/Utils.cs | 5 + Project/Panels/EditAudioZonePanel.Designer.cs | 74 +++++++-- Project/Panels/EditAudioZonePanel.cs | 51 +++++- Project/ProjectForm.cs | 4 +- 5 files changed, 225 insertions(+), 55 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index fc866cc..417f393 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -824,10 +824,14 @@ namespace CodeWalker.GameFiles { ntlength += (uint)name.Length + 1; } + if ((NameTableLength != ntlength)&&(NameTableLength!=0)) + { } NameTableLength = ntlength; } else { + if ((NameTableLength != 4)&& (NameTableLength != 0)) + { } NameTableCount = 0; NameTableLength = 4; } @@ -848,7 +852,7 @@ namespace CodeWalker.GameFiles break; case RelDatFileType.Dat4://TODO! case RelDatFileType.Dat54DataEntries://TODO! - default://TODO..? + //default://TODO..? return; } @@ -867,32 +871,60 @@ namespace CodeWalker.GameFiles var rd = RelDatasSorted[i]; - switch ((Dat151RelType)rd.TypeID)//must be a better way of doing this! + switch (RelType) { - case Dat151RelType.AmbientEmitter: - case Dat151RelType.AmbientZone: - case Dat151RelType.Unk101: - case Dat151RelType.Unk35: - while ((ms.Position & 0xF) != 0) bw.Write((byte)0); //align to nearest 16 bytes - break; - case Dat151RelType.Mood: - case Dat151RelType.Unk70: - case Dat151RelType.Unk29: - case Dat151RelType.SpeechParams: - case Dat151RelType.Unk11: - case Dat151RelType.Unk41: - case Dat151RelType.Unk2: - case Dat151RelType.AmbientEmitterList: - case Dat151RelType.Weapon: - case Dat151RelType.Vehicle: - case Dat151RelType.StopTrackAction: + case RelDatFileType.Dat10ModularSynth: while ((ms.Position & 3) != 0) bw.Write((byte)0); //align these to nearest 4 bytes break; - + case RelDatFileType.Dat15DynamicMixer: + switch (rd.TypeID) + { + case 0: + case 6: + case 5: + case 7: + case 8: + while ((ms.Position & 3) != 0) bw.Write((byte)0); //align these to nearest 4 bytes + break; + default: + break; + } + break; + case RelDatFileType.Dat149: + case RelDatFileType.Dat150: + case RelDatFileType.Dat151: + switch ((Dat151RelType)rd.TypeID)//must be a better way of doing this! + { + case Dat151RelType.AmbientEmitter: + case Dat151RelType.AmbientZone: + case Dat151RelType.Unk101: + case Dat151RelType.Unk35: + while ((ms.Position & 0xF) != 0) bw.Write((byte)0); //align to nearest 16 bytes + break; + case Dat151RelType.Mood: + case Dat151RelType.Unk70: + case Dat151RelType.Unk29: + case Dat151RelType.SpeechParams: + case Dat151RelType.Unk11: + case Dat151RelType.Unk41: + case Dat151RelType.Unk2: + case Dat151RelType.AmbientEmitterList: + case Dat151RelType.Weapon: + case Dat151RelType.Vehicle: + case Dat151RelType.StopTrackAction: + while ((ms.Position & 3) != 0) bw.Write((byte)0); //align these to nearest 4 bytes + break; + } + break; + //case RelDatFileType.Dat4://TODO! + //case RelDatFileType.Dat54DataEntries://TODO! + // //default://TODO..? + // return; } + var pos = ms.Position; - if (ms.Position != rd.DataOffset) + if ((ms.Position != rd.DataOffset)&&(rd.DataOffset!=0)) { } rd.DataOffset = (uint)ms.Position; rd.Write(bw); @@ -908,7 +940,7 @@ namespace CodeWalker.GameFiles ms.Position = 0; ms.Read(buf, 0, buf.Length); - if ((DataBlock?.Length ?? 0) != buf.Length) + if ((DataBlock!=null)&&(DataBlock.Length != buf.Length)) { } DataBlock = buf; @@ -928,22 +960,37 @@ namespace CodeWalker.GameFiles break; case RelDatFileType.Dat4://TODO! case RelDatFileType.Dat54DataEntries://TODO! - default://TODO..? + //default://TODO..? return; } //for the correct index ordering, needs to be in order of hashes, but with bits rotated right by 8 (why!?) var sorted = RelDatasSorted.ToList(); - //sorted.Sort((a, b) => { return ((uint)a.NameHash).CompareTo((uint)b.NameHash); }); - sorted.Sort((a, b) => + switch (RelType) { - var ah = (uint)a.NameHash; - var bh = (uint)b.NameHash; - var av = (ah >> 8) | (ah << 24); - var bv = (bh >> 8) | (bh << 24); - return av.CompareTo(bv); - }); + case RelDatFileType.Dat15DynamicMixer: + //don't sort? sort alphabetically? + //break; + case RelDatFileType.Dat149: + case RelDatFileType.Dat150: + case RelDatFileType.Dat151: + case RelDatFileType.Dat10ModularSynth: + case RelDatFileType.Dat22Categories: + case RelDatFileType.Dat16Curves: + sorted.Sort((a, b) => + { + var ah = (uint)a.NameHash; + var bh = (uint)b.NameHash; + var av = (ah >> 8) | (ah << 24); + var bv = (bh >> 8) | (bh << 24); + return av.CompareTo(bv); + }); + break; + default: + sorted.Sort((a, b) => { return ((uint)a.NameHash).CompareTo((uint)b.NameHash); }); + break; + } RelDatas = sorted.ToArray(); @@ -4429,7 +4476,9 @@ namespace CodeWalker.GameFiles public Vector3 InnerVec3 { get; set; } public Vector4 UnkVec1 { get; set; } public Vector4 UnkVec2 { get; set; } - public Vector4 UnkVec3 { get; set; } + public MetaHash UnkHash0 { get; set; } + public MetaHash UnkHash1 { get; set; } + public Vector2 UnkVec3 { get; set; } public FlagsUint Flags2 { get; set; } public byte Unk14 { get; set; } public byte Unk15 { get; set; } @@ -4499,7 +4548,9 @@ namespace CodeWalker.GameFiles InnerVec3 = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); UnkVec1 = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); UnkVec2 = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); - UnkVec3 = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); + UnkHash0 = br.ReadUInt32(); + UnkHash1 = br.ReadUInt32(); + UnkVec3 = new Vector2(br.ReadSingle(), br.ReadSingle()); Flags2 = br.ReadUInt32(); Unk14 = br.ReadByte(); @@ -4562,6 +4613,11 @@ namespace CodeWalker.GameFiles if (Flags2 != 0) { }//eg 0xAE64583B, 0x61083310, 0xCAE96294, 0x1C376176 + if (UnkHash0 != 0) + { } + if (UnkHash1 != 0) + { } + #endregion } @@ -4621,10 +4677,14 @@ namespace CodeWalker.GameFiles bw.Write(UnkVec2.Y); bw.Write(UnkVec2.Z); bw.Write(UnkVec2.W); + //bw.Write(UnkVec3.X); + //bw.Write(UnkVec3.Y); + //bw.Write(UnkVec3.Z); + //bw.Write(UnkVec3.W); + bw.Write(UnkHash0); + bw.Write(UnkHash1); bw.Write(UnkVec3.X); bw.Write(UnkVec3.Y); - bw.Write(UnkVec3.Z); - bw.Write(UnkVec3.W); bw.Write(Flags2); bw.Write(Unk14); @@ -4666,7 +4726,11 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "InnerVec3 " + FloatUtil.GetVector3XmlString(InnerVec3)); RelXml.SelfClosingTag(sb, indent, "UnkVec1 " + FloatUtil.GetVector4XmlString(UnkVec1)); RelXml.SelfClosingTag(sb, indent, "UnkVec2 " + FloatUtil.GetVector4XmlString(UnkVec2)); - RelXml.SelfClosingTag(sb, indent, "UnkVec3 " + FloatUtil.GetVector4XmlString(UnkVec3)); + //RelXml.SelfClosingTag(sb, indent, "UnkVec3 " + FloatUtil.GetVector4XmlString(UnkVec3)); + RelXml.StringTag(sb, indent, "UnkHash0", RelXml.HashString(UnkHash0)); + RelXml.StringTag(sb, indent, "UnkHash1", RelXml.HashString(UnkHash1)); + RelXml.SelfClosingTag(sb, indent, "UnkVec3 " + FloatUtil.GetVector2XmlString(UnkVec3)); + RelXml.ValueTag(sb, indent, "Flags2", "0x" + Flags2.Hex); RelXml.ValueTag(sb, indent, "Unk14", Unk14.ToString()); RelXml.ValueTag(sb, indent, "Unk15", Unk15.ToString()); @@ -4723,7 +4787,11 @@ namespace CodeWalker.GameFiles InnerVec3 = Xml.GetChildVector3Attributes(node, "InnerVec3", "x", "y", "z"); UnkVec1 = Xml.GetChildVector4Attributes(node, "UnkVec1", "x", "y", "z", "w"); UnkVec2 = Xml.GetChildVector4Attributes(node, "UnkVec2", "x", "y", "z", "w"); - UnkVec3 = Xml.GetChildVector4Attributes(node, "UnkVec3", "x", "y", "z", "w"); + //UnkVec3 = Xml.GetChildVector4Attributes(node, "UnkVec3", "x", "y", "z", "w"); + UnkHash0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "UnkHash0")); + UnkHash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "UnkHash1")); + UnkVec3 = Xml.GetChildVector2Attributes(node, "UnkVec3", "x", "y"); + Flags2 = Xml.GetChildUIntAttribute(node, "Flags2", "value"); Unk14 = (byte)Xml.GetChildUIntAttribute(node, "Unk14", "value"); Unk15 = (byte)Xml.GetChildUIntAttribute(node, "Unk15", "value"); @@ -11710,8 +11778,8 @@ namespace CodeWalker.GameFiles { RelXml.ValueTag(sb, indent, "Unk00", "0x" + Unk00.Hex); RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); - RelXml.ValueTag(sb, indent, "Unk02", Unk01.ToString()); - RelXml.ValueTag(sb, indent, "Unk03", Unk01.ToString()); + RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); + RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); var cind = indent + 1; var cind2 = indent + 2; diff --git a/CodeWalker.Core/Utils/Utils.cs b/CodeWalker.Core/Utils/Utils.cs index 08b9204..2f0ef16 100644 --- a/CodeWalker.Core/Utils/Utils.cs +++ b/CodeWalker.Core/Utils/Utils.cs @@ -114,6 +114,11 @@ namespace CodeWalker var c = CultureInfo.InvariantCulture; return v.X.ToString(c) + ", " + v.Y.ToString(c); } + public static string GetVector2XmlString(Vector2 v) + { + var c = CultureInfo.InvariantCulture; + return string.Format("x=\"{0}\" y=\"{1}\"", v.X.ToString(c), v.Y.ToString(c)); + } public static string GetVector3String(Vector3 v) { var c = CultureInfo.InvariantCulture; diff --git a/Project/Panels/EditAudioZonePanel.Designer.cs b/Project/Panels/EditAudioZonePanel.Designer.cs index 778d243..aa826dc 100644 --- a/Project/Panels/EditAudioZonePanel.Designer.cs +++ b/Project/Panels/EditAudioZonePanel.Designer.cs @@ -80,6 +80,10 @@ this.label16 = new System.Windows.Forms.Label(); this.InnerPosTextBox = new System.Windows.Forms.TextBox(); this.GoToButton = new System.Windows.Forms.Button(); + this.label24 = new System.Windows.Forms.Label(); + this.Hash0TextBox = new System.Windows.Forms.TextBox(); + this.label25 = new System.Windows.Forms.Label(); + this.Hash1TextBox = new System.Windows.Forms.TextBox(); this.tabControl1.SuspendLayout(); this.tabPage1.SuspendLayout(); this.SuspendLayout(); @@ -98,6 +102,10 @@ // // tabPage1 // + this.tabPage1.Controls.Add(this.label25); + this.tabPage1.Controls.Add(this.Hash1TextBox); + this.tabPage1.Controls.Add(this.label24); + this.tabPage1.Controls.Add(this.Hash0TextBox); this.tabPage1.Controls.Add(this.label22); this.tabPage1.Controls.Add(this.UnkBytesTextBox); this.tabPage1.Controls.Add(this.DeleteButton); @@ -179,7 +187,7 @@ this.DeleteButton.Location = new System.Drawing.Point(343, 3); this.DeleteButton.Name = "DeleteButton"; this.DeleteButton.Size = new System.Drawing.Size(93, 23); - this.DeleteButton.TabIndex = 77; + this.DeleteButton.TabIndex = 81; this.DeleteButton.Text = "Delete zone"; this.DeleteButton.UseVisualStyleBackColor = true; this.DeleteButton.Click += new System.EventHandler(this.DeleteButton_Click); @@ -190,7 +198,7 @@ this.AddToProjectButton.Location = new System.Drawing.Point(452, 3); this.AddToProjectButton.Name = "AddToProjectButton"; this.AddToProjectButton.Size = new System.Drawing.Size(93, 23); - this.AddToProjectButton.TabIndex = 76; + this.AddToProjectButton.TabIndex = 80; this.AddToProjectButton.Text = "Add to project"; this.AddToProjectButton.UseVisualStyleBackColor = true; this.AddToProjectButton.Click += new System.EventHandler(this.AddToProjectButton_Click); @@ -218,21 +226,21 @@ // this.label20.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.label20.AutoSize = true; - this.label20.Location = new System.Drawing.Point(340, 278); + this.label20.Location = new System.Drawing.Point(340, 303); this.label20.Name = "label20"; this.label20.Size = new System.Drawing.Size(193, 13); - this.label20.TabIndex = 74; + this.label20.TabIndex = 78; this.label20.Text = "Ext params: Name (hash), Value (float)"; // // ExtParamsTextBox // this.ExtParamsTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.ExtParamsTextBox.Location = new System.Drawing.Point(335, 295); + this.ExtParamsTextBox.Location = new System.Drawing.Point(335, 319); this.ExtParamsTextBox.Multiline = true; this.ExtParamsTextBox.Name = "ExtParamsTextBox"; this.ExtParamsTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.ExtParamsTextBox.Size = new System.Drawing.Size(209, 116); - this.ExtParamsTextBox.TabIndex = 75; + this.ExtParamsTextBox.Size = new System.Drawing.Size(209, 92); + this.ExtParamsTextBox.TabIndex = 79; this.ExtParamsTextBox.WordWrap = false; this.ExtParamsTextBox.TextChanged += new System.EventHandler(this.ExtParamsTextBox_TextChanged); // @@ -240,10 +248,10 @@ // this.label19.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.label19.AutoSize = true; - this.label19.Location = new System.Drawing.Point(340, 134); + this.label19.Location = new System.Drawing.Point(340, 183); this.label19.Name = "label19"; this.label19.Size = new System.Drawing.Size(46, 13); - this.label19.TabIndex = 72; + this.label19.TabIndex = 76; this.label19.Text = "Hashes:"; // // label15 @@ -306,12 +314,12 @@ // HashesTextBox // this.HashesTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.HashesTextBox.Location = new System.Drawing.Point(335, 151); + this.HashesTextBox.Location = new System.Drawing.Point(335, 199); this.HashesTextBox.Multiline = true; this.HashesTextBox.Name = "HashesTextBox"; this.HashesTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.HashesTextBox.Size = new System.Drawing.Size(209, 116); - this.HashesTextBox.TabIndex = 73; + this.HashesTextBox.Size = new System.Drawing.Size(209, 92); + this.HashesTextBox.TabIndex = 77; this.HashesTextBox.WordWrap = false; this.HashesTextBox.TextChanged += new System.EventHandler(this.HashesTextBox_TextChanged); // @@ -634,6 +642,44 @@ this.GoToButton.UseVisualStyleBackColor = true; this.GoToButton.Click += new System.EventHandler(this.GoToButton_Click); // + // label24 + // + this.label24.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label24.AutoSize = true; + this.label24.Location = new System.Drawing.Point(340, 130); + this.label24.Name = "label24"; + this.label24.Size = new System.Drawing.Size(44, 13); + this.label24.TabIndex = 72; + this.label24.Text = "Hash 0:"; + // + // Hash0TextBox + // + this.Hash0TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.Hash0TextBox.Location = new System.Drawing.Point(390, 127); + this.Hash0TextBox.Name = "Hash0TextBox"; + this.Hash0TextBox.Size = new System.Drawing.Size(155, 20); + this.Hash0TextBox.TabIndex = 73; + this.Hash0TextBox.TextChanged += new System.EventHandler(this.Hash0TextBox_TextChanged); + // + // label25 + // + this.label25.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label25.AutoSize = true; + this.label25.Location = new System.Drawing.Point(340, 154); + this.label25.Name = "label25"; + this.label25.Size = new System.Drawing.Size(44, 13); + this.label25.TabIndex = 74; + this.label25.Text = "Hash 1:"; + // + // Hash1TextBox + // + this.Hash1TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.Hash1TextBox.Location = new System.Drawing.Point(390, 151); + this.Hash1TextBox.Name = "Hash1TextBox"; + this.Hash1TextBox.Size = new System.Drawing.Size(155, 20); + this.Hash1TextBox.TabIndex = 75; + this.Hash1TextBox.TextChanged += new System.EventHandler(this.Hash1TextBox_TextChanged); + // // EditAudioZonePanel // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -703,5 +749,9 @@ private System.Windows.Forms.Button DeleteButton; private System.Windows.Forms.Label label22; private System.Windows.Forms.TextBox UnkBytesTextBox; + private System.Windows.Forms.Label label25; + private System.Windows.Forms.TextBox Hash1TextBox; + private System.Windows.Forms.Label label24; + private System.Windows.Forms.TextBox Hash0TextBox; } } \ No newline at end of file diff --git a/Project/Panels/EditAudioZonePanel.cs b/Project/Panels/EditAudioZonePanel.cs index 2cdcda9..a0627bd 100644 --- a/Project/Panels/EditAudioZonePanel.cs +++ b/Project/Panels/EditAudioZonePanel.cs @@ -72,6 +72,8 @@ namespace CodeWalker.Project.Panels Flags0TextBox.Text = string.Empty; Flags1TextBox.Text = string.Empty; Flags2TextBox.Text = string.Empty; + Hash0TextBox.Text = string.Empty; + Hash1TextBox.Text = string.Empty; HashesTextBox.Text = string.Empty; ExtParamsTextBox.Text = string.Empty; populatingui = false; @@ -99,11 +101,13 @@ namespace CodeWalker.Project.Panels OuterVec3TextBox.Text = FloatUtil.GetVector3String(z.OuterVec3); UnkVec1TextBox.Text = FloatUtil.GetVector4String(z.UnkVec1); UnkVec2TextBox.Text = FloatUtil.GetVector4String(z.UnkVec2); - UnkVec3TextBox.Text = FloatUtil.GetVector4String(z.UnkVec3); + UnkVec3TextBox.Text = FloatUtil.GetVector2String(z.UnkVec3); UnkBytesTextBox.Text = string.Format("{0}, {1}, {2}", z.Unk14, z.Unk15, z.Unk16); Flags0TextBox.Text = z.Flags0.Hex; Flags1TextBox.Text = z.Flags1.Hex; Flags2TextBox.Text = z.Flags2.Hex; + Hash0TextBox.Text = z.UnkHash0.ToString(); + Hash1TextBox.Text = z.UnkHash1.ToString(); StringBuilder sb = new StringBuilder(); if (z.Hashes != null) @@ -410,7 +414,7 @@ namespace CodeWalker.Project.Panels if (populatingui) return; if (CurrentZone?.AudioZone == null) return; - var vec = FloatUtil.ParseVector4String(UnkVec3TextBox.Text); + var vec = FloatUtil.ParseVector2String(UnkVec3TextBox.Text); if (CurrentZone.AudioZone.UnkVec3 != vec) { CurrentZone.AudioZone.UnkVec3 = vec; @@ -489,6 +493,48 @@ namespace CodeWalker.Project.Panels } } + private void Hash0TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentZone?.AudioZone == null) return; + + var hashstr = Hash0TextBox.Text; + uint hash = 0; + if (!uint.TryParse(hashstr, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(hashstr); + JenkIndex.Ensure(hashstr); + } + + if (CurrentZone.AudioZone.UnkHash0 != hash) + { + CurrentZone.AudioZone.UnkHash0 = hash; + + ProjectItemChanged(); + } + } + + private void Hash1TextBox_TextChanged(object sender, EventArgs e) + { + if (populatingui) return; + if (CurrentZone?.AudioZone == null) return; + + var hashstr = Hash1TextBox.Text; + uint hash = 0; + if (!uint.TryParse(hashstr, out hash))//don't re-hash hashes + { + hash = JenkHash.GenHash(hashstr); + JenkIndex.Ensure(hashstr); + } + + if (CurrentZone.AudioZone.UnkHash1 != hash) + { + CurrentZone.AudioZone.UnkHash1 = hash; + + ProjectItemChanged(); + } + } + private void HashesTextBox_TextChanged(object sender, EventArgs e) { if (populatingui) return; @@ -570,6 +616,5 @@ namespace CodeWalker.Project.Panels ProjectForm.SetProjectItem(CurrentZone); ProjectForm.DeleteAudioZone(); } - } } diff --git a/Project/ProjectForm.cs b/Project/ProjectForm.cs index acb8105..128df9f 100644 --- a/Project/ProjectForm.cs +++ b/Project/ProjectForm.cs @@ -4591,7 +4591,9 @@ namespace CodeWalker.Project zone.OuterVec3 = cp ? copy.AudioZone.OuterVec3 : Vector3.Zero; zone.UnkVec1 = cp ? copy.AudioZone.UnkVec1 : new Vector4(0, 0, 1, 0); zone.UnkVec2 = cp ? copy.AudioZone.UnkVec2 : new Vector4(1, -1, -1, 0); - zone.UnkVec3 = cp ? copy.AudioZone.UnkVec3 : new Vector4(0, 0, -1, 0); + zone.UnkHash0 = cp ? copy.AudioZone.UnkHash0 : 0; + zone.UnkHash1 = cp ? copy.AudioZone.UnkHash1 : 0; + zone.UnkVec3 = cp ? copy.AudioZone.UnkVec3 : new Vector2(-1, 0); zone.Unk14 = cp ? copy.AudioZone.Unk14 : (byte)4; zone.Unk15 = cp ? copy.AudioZone.Unk15 : (byte)1; zone.Unk16 = cp ? copy.AudioZone.Unk16 : (byte)0; From 3c38006a2bb5ae5e5fbc5aae42b888a81859e3d4 Mon Sep 17 00:00:00 2001 From: dexy Date: Sat, 19 Jan 2019 21:04:43 +1100 Subject: [PATCH 104/158] Dat54 progress --- .../GameFiles/FileTypes/RelFile.cs | 1043 +++++++++++++++-- CodeWalker.Core/GameFiles/GameFileCache.cs | 38 +- 2 files changed, 997 insertions(+), 84 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index 417f393..ef2073c 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -239,7 +239,7 @@ namespace CodeWalker.GameFiles ParseDataBlock(); - //BuildWavesMaps(); + //BuildHashMaps(); Loaded = true; @@ -846,13 +846,7 @@ namespace CodeWalker.GameFiles switch (RelType) { - case RelDatFileType.Dat149: - case RelDatFileType.Dat150: - case RelDatFileType.Dat151: - break; case RelDatFileType.Dat4://TODO! - case RelDatFileType.Dat54DataEntries://TODO! - //default://TODO..? return; } @@ -924,12 +918,12 @@ namespace CodeWalker.GameFiles var pos = ms.Position; - if ((ms.Position != rd.DataOffset)&&(rd.DataOffset!=0)) + if ((ms.Position != rd.DataOffset) && (rd.DataOffset != 0)) { } rd.DataOffset = (uint)ms.Position; rd.Write(bw); var lengthwritten = ms.Position - pos; - if (lengthwritten != rd.DataLength) + if ((lengthwritten != rd.DataLength) && (rd.DataLength != 0)) { } rd.DataLength = (uint)lengthwritten; @@ -954,13 +948,7 @@ namespace CodeWalker.GameFiles switch (RelType) { - case RelDatFileType.Dat149: - case RelDatFileType.Dat150: - case RelDatFileType.Dat151: - break; case RelDatFileType.Dat4://TODO! - case RelDatFileType.Dat54DataEntries://TODO! - //default://TODO..? return; } @@ -978,6 +966,7 @@ namespace CodeWalker.GameFiles case RelDatFileType.Dat10ModularSynth: case RelDatFileType.Dat22Categories: case RelDatFileType.Dat16Curves: + case RelDatFileType.Dat54DataEntries: sorted.Sort((a, b) => { var ah = (uint)a.NameHash; @@ -1022,13 +1011,7 @@ namespace CodeWalker.GameFiles switch (RelType) { - case RelDatFileType.Dat149: - case RelDatFileType.Dat150: - case RelDatFileType.Dat151: - break; case RelDatFileType.Dat4://TODO! - case RelDatFileType.Dat54DataEntries://TODO! - default://TODO..? return; } @@ -1037,14 +1020,43 @@ namespace CodeWalker.GameFiles { var offsets = rd.GetHashTableOffsets(); if (offsets == null) continue; - var rdoffset = rd.DataOffset + 12; + var rdoffset = rd.DataOffset + 8; + var rs = rd as RelSound; + if (rs?.Header != null) + { + rdoffset += 1 + rs.Header.CalcHeaderLength(); + } + else + { + rdoffset += 4; //typeid + nt offset + } for (int i = 0; i < offsets.Length; i++) { htoffsets.Add(rdoffset + offsets[i]); + + int idx = htoffsets.Count - 1; + if ((HashTableOffsets != null) && (idx < HashTableOffsets.Length)) + { + if (htoffsets[idx] != HashTableOffsets[idx]) + { } + } } } if (htoffsets.Count > 0) { + if (HashTableOffsets != null) + { + if (HashTableOffsets.Length != htoffsets.Count) + { } + else + { + for (int i = 0; i < htoffsets.Count; i++) + { + if (htoffsets[i] != HashTableOffsets[i]) + { } + } + } + } HashTableOffsets = htoffsets.ToArray(); } else @@ -1056,7 +1068,53 @@ namespace CodeWalker.GameFiles } private void BuildPackTable() { - //TODO + switch (RelType) + { + case RelDatFileType.Dat4://TODO! + return; + } + + var ptoffsets = new List(); + foreach (var rd in RelDatasSorted) + { + var offsets = rd.GetPackTableOffsets(); + if (offsets == null) continue; + var rdoffset = rd.DataOffset + 8; + var rs = rd as RelSound; + if (rs?.Header != null) + { + rdoffset += 1 + rs.Header.CalcHeaderLength(); + } + else + { + rdoffset += 4; //typeid + nt offset + } + for (int i = 0; i < offsets.Length; i++) + { + ptoffsets.Add(rdoffset + offsets[i]); + } + } + if (ptoffsets.Count > 0) + { + if (PackTableOffsets != null) + { + if (PackTableOffsets.Length != ptoffsets.Count) + { } + else + { + for (int i = 0; i < ptoffsets.Count; i++) + { + if (ptoffsets[i] != PackTableOffsets[i]) + { } + } + } + } + PackTableOffsets = ptoffsets.ToArray(); + } + else + { + PackTableOffsets = null; + } PackTableCount = (uint)(PackTableOffsets?.Length ?? 0); } @@ -1075,12 +1133,13 @@ namespace CodeWalker.GameFiles case RelDatFileType.Dat151: relType = RelDatFileType.Dat151; break; - case RelDatFileType.Dat54DataEntries: - break; default: break; } + if ((relType != RelDatFileType.Dat54DataEntries))// && (relType != RelDatFileType.Dat4)) + { return; } + if (HashTableOffsets != null) { @@ -1097,7 +1156,7 @@ namespace CodeWalker.GameFiles var rs = rd as RelSound; if (rs != null) { - rdoffset += rs.Header.HeaderLength; + rdoffset += 1 + rs.Header.HeaderLength; } var key = new HashesMapKey() { @@ -1128,6 +1187,12 @@ namespace CodeWalker.GameFiles var rd = RelDatasSorted[i]; if ((dboffset >= rd.DataOffset) && (dboffset < rd.DataOffset + rd.DataLength)) { + var rdoffset = rd.DataOffset; + var rs = rd as RelSound; + if (rs != null) + { + rdoffset += 1 + rs.Header.HeaderLength; + } var key = new HashesMapKey() { FileType = relType, @@ -1138,7 +1203,7 @@ namespace CodeWalker.GameFiles { Item = rd, Hash = BitConverter.ToUInt32(DataBlock, (int)dboffset), - Offset = dboffset - rd.DataOffset, + Offset = dboffset - rdoffset, Count = 1 }; AddHashesMapItem(ref key, val); @@ -1440,6 +1505,10 @@ namespace CodeWalker.GameFiles { return null; } + public virtual uint[] GetPackTableOffsets() + { + return null; + } public virtual void Write(BinaryWriter bw) { @@ -1503,8 +1572,8 @@ namespace CodeWalker.GameFiles public ushort Unk07 { get; set; } //0x15-0x17 public ushort Unk08 { get; set; } //0x17-0x19 public ushort Unk09 { get; set; } //0x19-0x1B - public MetaHash UnkHash1 { get; set; } //0x1B-0x1F - public MetaHash UnkHash2 { get; set; } //0x1F-0x23 + public int UnkInt1 { get; set; } //0x1B-0x1F + public int UnkInt2 { get; set; } //0x1F-0x23 public ushort Unk10 { get; set; } //0x23-0x25 public ushort Unk11 { get; set; } //0x25-0x27 public ushort Unk12 { get; set; } //0x27-0x29 @@ -1532,6 +1601,7 @@ namespace CodeWalker.GameFiles public RelSoundHeader(XmlNode node) { ReadXml(node); + HeaderLength = CalcHeaderLength(); } public RelSoundHeader(BinaryReader br) { @@ -1555,8 +1625,8 @@ namespace CodeWalker.GameFiles { if (Bit(8)) Unk08 = br.ReadUInt16(); if (Bit(9)) Unk09 = br.ReadUInt16(); - if (Bit(10)) UnkHash1 = br.ReadUInt32(); - if (Bit(11)) UnkHash2 = br.ReadUInt32(); + if (Bit(10)) UnkInt1 = br.ReadInt32(); + if (Bit(11)) UnkInt2 = br.ReadInt32(); if (Bit(12)) Unk10 = br.ReadUInt16(); if (Bit(13)) Unk11 = br.ReadUInt16(); if (Bit(14)) Unk12 = br.ReadUInt16(); @@ -1589,6 +1659,58 @@ namespace CodeWalker.GameFiles } + public void Write(BinaryWriter bw) + { + bw.Write(Flags); + + //if (Flags.Value != 0xAAAAAAAA) + if ((Flags & 0xFF) != 0xAA) + { + if (Bit(0)) bw.Write(Flags2); + if (Bit(1)) bw.Write(Unk01); + if (Bit(2)) bw.Write(Unk02); + if (Bit(3)) bw.Write(Unk03); + if (Bit(4)) bw.Write(Unk04); + if (Bit(5)) bw.Write(Unk05); + if (Bit(6)) bw.Write(Unk06); + if (Bit(7)) bw.Write(Unk07); + } + if ((Flags & 0xFF00) != 0xAA00) + { + if (Bit(8)) bw.Write(Unk08); + if (Bit(9)) bw.Write(Unk09); + if (Bit(10)) bw.Write(UnkInt1); + if (Bit(11)) bw.Write(UnkInt2); + if (Bit(12)) bw.Write(Unk10); + if (Bit(13)) bw.Write(Unk11); + if (Bit(14)) bw.Write(Unk12); + if (Bit(15)) bw.Write(CategoryHash); + } + if ((Flags & 0xFF0000) != 0xAA0000) + { + if (Bit(16)) bw.Write(Unk14); + if (Bit(17)) bw.Write(Unk15); + if (Bit(18)) bw.Write(Unk16); + if (Bit(19)) bw.Write(Unk17); + if (Bit(20)) bw.Write(UnkHash3); + if (Bit(21)) bw.Write(Unk18); + if (Bit(22)) bw.Write(Unk19); + if (Bit(23)) bw.Write(Unk20); + } + if ((Flags & 0xFF000000) != 0xAA000000) + { + if (Bit(24)) bw.Write(Unk21); + if (Bit(25)) bw.Write(UnkHash4); + if (Bit(26)) bw.Write(UnkHash5); + if (Bit(27)) bw.Write(Unk22); + if (Bit(28)) bw.Write(Unk23); + if (Bit(29)) bw.Write(Unk24); + if (Bit(30)) bw.Write(Unk25); //maybe not + if (Bit(31)) bw.Write(Unk26); //maybe not + } + + } + public void WriteXml(StringBuilder sb, int indent) { RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); @@ -1608,8 +1730,8 @@ namespace CodeWalker.GameFiles { if (Bit(8)) RelXml.ValueTag(sb, indent, "Unk08", Unk08.ToString()); if (Bit(9)) RelXml.ValueTag(sb, indent, "Unk09", Unk09.ToString()); - if (Bit(10)) RelXml.StringTag(sb, indent, "UnkHash1", RelXml.HashString(UnkHash1)); - if (Bit(11)) RelXml.StringTag(sb, indent, "UnkHash2", RelXml.HashString(UnkHash2)); + if (Bit(10)) RelXml.ValueTag(sb, indent, "UnkInt1", UnkInt1.ToString()); + if (Bit(11)) RelXml.ValueTag(sb, indent, "UnkInt2", UnkInt2.ToString()); if (Bit(12)) RelXml.ValueTag(sb, indent, "Unk10", Unk10.ToString()); if (Bit(13)) RelXml.ValueTag(sb, indent, "Unk11", Unk11.ToString()); if (Bit(14)) RelXml.ValueTag(sb, indent, "Unk12", Unk12.ToString()); @@ -1641,7 +1763,7 @@ namespace CodeWalker.GameFiles } public void ReadXml(XmlNode node) { - Xml.GetChildUIntAttribute(node, "Flags", "value"); + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); if ((Flags & 0xFF) != 0xAA) { @@ -1658,8 +1780,8 @@ namespace CodeWalker.GameFiles { if (Bit(8)) Unk08 = (ushort)Xml.GetChildUIntAttribute(node, "Unk08", "value"); if (Bit(9)) Unk09 = (ushort)Xml.GetChildUIntAttribute(node, "Unk09", "value"); - if (Bit(10)) UnkHash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "UnkHash1")); - if (Bit(11)) UnkHash2 = XmlRel.GetHash(Xml.GetChildInnerText(node, "UnkHash2")); + if (Bit(10)) UnkInt1 = Xml.GetChildIntAttribute(node, "UnkInt1", "value"); + if (Bit(11)) UnkInt2 = Xml.GetChildIntAttribute(node, "UnkInt2", "value"); if (Bit(12)) Unk10 = (ushort)Xml.GetChildUIntAttribute(node, "Unk10", "value"); if (Bit(13)) Unk11 = (ushort)Xml.GetChildUIntAttribute(node, "Unk11", "value"); if (Bit(14)) Unk12 = (ushort)Xml.GetChildUIntAttribute(node, "Unk12", "value"); @@ -1690,6 +1812,58 @@ namespace CodeWalker.GameFiles } + + public uint CalcHeaderLength() + { + uint length = 4; + if ((Flags & 0xFF) != 0xAA) + { + if (Bit(0)) length += 4;// Flags2 = br.ReadUInt32(); + if (Bit(1)) length += 2;// Unk01 = br.ReadUInt16(); + if (Bit(2)) length += 2;// Unk02 = br.ReadUInt16(); + if (Bit(3)) length += 2;// Unk03 = br.ReadUInt16(); + if (Bit(4)) length += 2;// Unk04 = br.ReadUInt16(); + if (Bit(5)) length += 2;// Unk05 = br.ReadUInt16(); + if (Bit(6)) length += 2;// Unk06 = br.ReadUInt16(); + if (Bit(7)) length += 2;// Unk07 = br.ReadUInt16(); + } + if ((Flags & 0xFF00) != 0xAA00) + { + if (Bit(8)) length += 2;// Unk08 = br.ReadUInt16(); + if (Bit(9)) length += 2;// Unk09 = br.ReadUInt16(); + if (Bit(10)) length += 4;// UnkHash1 = br.ReadUInt32(); + if (Bit(11)) length += 4;// UnkHash2 = br.ReadUInt32(); + if (Bit(12)) length += 2;// Unk10 = br.ReadUInt16(); + if (Bit(13)) length += 2;// Unk11 = br.ReadUInt16(); + if (Bit(14)) length += 2;// Unk12 = br.ReadUInt16(); + if (Bit(15)) length += 4;// CategoryHash = br.ReadUInt32(); + } + if ((Flags & 0xFF0000) != 0xAA0000) + { + if (Bit(16)) length += 2;// Unk14 = br.ReadUInt16(); + if (Bit(17)) length += 2;// Unk15 = br.ReadUInt16(); + if (Bit(18)) length += 2;// Unk16 = br.ReadUInt16(); + if (Bit(19)) length += 2;// Unk17 = br.ReadUInt16(); + if (Bit(20)) length += 4;// UnkHash3 = br.ReadUInt32(); + if (Bit(21)) length += 2;// Unk18 = br.ReadUInt16(); + if (Bit(22)) length += 1;// Unk19 = br.ReadByte(); + if (Bit(23)) length += 1;// Unk20 = br.ReadByte(); + } + if ((Flags & 0xFF000000) != 0xAA000000) + { + if (Bit(24)) length += 1;// Unk21 = br.ReadByte(); + if (Bit(25)) length += 4;// UnkHash4 = br.ReadUInt32(); + if (Bit(26)) length += 4;// UnkHash5 = br.ReadUInt32(); + if (Bit(27)) length += 2;// Unk22 = br.ReadUInt16(); + if (Bit(28)) length += 2;// Unk23 = br.ReadUInt16(); + if (Bit(29)) length += 2;// Unk24 = br.ReadUInt16(); + if (Bit(30)) length += 2;// Unk25 = br.ReadUInt16(); //maybe not + if (Bit(31)) length += 2;// Unk26 = br.ReadUInt16(); //maybe not + } + + return length; + } + private bool Bit(int b) { return ((Flags & (1u << b)) != 0); @@ -1697,7 +1871,7 @@ namespace CodeWalker.GameFiles public override string ToString() { - return string.Format("{0}: {1}, {2}, {3}, {4}, {5}, {6}, {7}", Flags.Hex, Flags2.Hex, CategoryHash, UnkHash1, UnkHash2, UnkHash3, UnkHash4, UnkHash5); + return string.Format("{0}: {1}, {2}, {3}, {4}, {5}, {6}, {7}", Flags.Hex, Flags2.Hex, CategoryHash, UnkInt1, UnkInt2, UnkHash3, UnkHash4, UnkHash5); } } @@ -1726,6 +1900,20 @@ namespace CodeWalker.GameFiles AudioTrackHashes[i] = br.ReadUInt32(); } } + public void WriteAudioTrackHashes(BinaryWriter bw) + { + bw.Write(AudioTracksCount); + for (int i = 0; i < AudioTracksCount; i++) + { + bw.Write(AudioTrackHashes[i]); + } + } + + public override void Write(BinaryWriter bw) + { + bw.Write(TypeID); + Header?.Write(bw); + } public override void WriteXml(StringBuilder sb, int indent) { @@ -1759,7 +1947,7 @@ namespace CodeWalker.GameFiles var hnode = node.SelectSingleNode("Header"); if (hnode == null) return; - Header = new RelSoundHeader(node); + Header = new RelSoundHeader(hnode); } public void ReadAudioTracksXml(XmlNode node) @@ -1776,6 +1964,17 @@ namespace CodeWalker.GameFiles AudioTrackHashes = tracklist.ToArray(); AudioTracksCount = (byte)tracklist.Count; } + + public uint[] GetAudioTracksHashTableOffsets(uint offset = 0) + { + var offsets = new List(); + for (uint i = 0; i < AudioTracksCount; i++) + { + offsets.Add(offset + 1 + i * 4); + } + return offsets.ToArray(); + } + } @@ -1894,6 +2093,19 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "AudioHash", RelXml.HashString(AudioHash)); RelXml.StringTag(sb, indent, "ParameterHash", RelXml.HashString(ParameterHash)); } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(UnkShort0); + bw.Write(UnkShort1); + bw.Write(UnkShort2); + bw.Write(AudioHash); + bw.Write(ParameterHash); + } + public override uint[] GetHashTableOffsets() + { + return new uint[] { 6 }; + } } [TC(typeof(EXP))] public class Dat54EnvelopeSound : Dat54Sound { @@ -1987,9 +2199,9 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "UnkByte0", UnkByte0.ToString()); RelXml.ValueTag(sb, indent, "UnkByte1", UnkByte1.ToString()); RelXml.ValueTag(sb, indent, "UnkInt0", UnkInt0.ToString()); - RelXml.ValueTag(sb, indent, "UnkShort4", UnkShort3.ToString()); - RelXml.ValueTag(sb, indent, "UnkInt1", UnkInt0.ToString()); - RelXml.ValueTag(sb, indent, "UnkInt2", UnkInt0.ToString()); + RelXml.ValueTag(sb, indent, "UnkShort4", UnkShort4.ToString()); + RelXml.ValueTag(sb, indent, "UnkInt1", UnkInt1.ToString()); + RelXml.ValueTag(sb, indent, "UnkInt2", UnkInt2.ToString()); RelXml.StringTag(sb, indent, "CurvesUnkHash0", RelXml.HashString(CurvesUnkHash0)); RelXml.StringTag(sb, indent, "CurvesUnkHash1", RelXml.HashString(CurvesUnkHash1)); RelXml.StringTag(sb, indent, "CurvesUnkHash2", RelXml.HashString(CurvesUnkHash2)); @@ -2004,6 +2216,37 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "UnkFloat0", FloatUtil.ToString(UnkFloat0)); RelXml.ValueTag(sb, indent, "UnkFloat1", FloatUtil.ToString(UnkFloat1)); } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(UnkShort0); //0x0-0x2 + bw.Write(UnkShort1); //0x2-0x4 + bw.Write(UnkShort2); //0x4-0x6 + bw.Write(UnkShort3); //0x6-0x8 + bw.Write(UnkByte0); //0x8-0x9 + bw.Write(UnkByte1); //0x9-0xA + bw.Write(UnkInt0); //0xA-0xE + bw.Write(UnkShort4); //0xE-0x10 + bw.Write(UnkInt1); //0x10-0x14 + bw.Write(UnkInt2); //0x14-0x18 + bw.Write(CurvesUnkHash0); //0x18-0x1C + bw.Write(CurvesUnkHash1); //0x1C-0x20 + bw.Write(CurvesUnkHash2); //0x20-0x24 + bw.Write(ParameterHash0); //0x24-0x28 + bw.Write(ParameterHash1); //0x28-0x2C + bw.Write(ParameterHash2); //0x2C-0x30 + bw.Write(ParameterHash3); //0x30-0x34 + bw.Write(ParameterHash4); //0x34-0x38 + bw.Write(AudioHash); //0x38-0x3C + bw.Write(UnkInt3); //0x3C-0x40 + bw.Write(ParameterHash5); //0x40-0x44 + bw.Write(UnkFloat0); //0x44-0x48 + bw.Write(UnkFloat1); //0x48-0x4C + } + public override uint[] GetHashTableOffsets() + { + return new uint[] { 56 }; + } } [TC(typeof(EXP))] public class Dat54TwinLoopSound : Dat54Sound { @@ -2061,6 +2304,25 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "ParameterHash3", RelXml.HashString(ParameterHash3)); WriteAudioTracksXml(sb, indent); } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(UnkShort0); + bw.Write(UnkShort1); + bw.Write(UnkShort2); + bw.Write(UnkShort3); + bw.Write(UnkHash); + bw.Write(ParameterHash0); + bw.Write(ParameterHash1); + bw.Write(ParameterHash2); + bw.Write(ParameterHash3); + + WriteAudioTrackHashes(bw); + } + public override uint[] GetHashTableOffsets() + { + return GetAudioTracksHashTableOffsets(28); + } } [TC(typeof(EXP))] public class Dat54SpeechSound : Dat54Sound { @@ -2094,6 +2356,14 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "VoiceDataHash", RelXml.HashString(VoiceDataHash)); RelXml.StringTag(sb, indent, "SpeechName", SpeechName); } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(UnkInt0); + bw.Write(UnkInt1); + bw.Write(VoiceDataHash); + bw.Write(SpeechName); + } } [TC(typeof(EXP))] public class Dat54OnStopSound : Dat54Sound { @@ -2124,6 +2394,17 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "AudioHash1", RelXml.HashString(AudioHash1)); RelXml.StringTag(sb, indent, "AudioHash2", RelXml.HashString(AudioHash2)); } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(AudioHash0); + bw.Write(AudioHash1); + bw.Write(AudioHash2); + } + public override uint[] GetHashTableOffsets() + { + return new uint[] { 0, 4, 8 }; + } } [TC(typeof(EXP))] public class Dat54WrapperSound : Dat54Sound { @@ -2204,6 +2485,29 @@ namespace CodeWalker.GameFiles } WriteAudioTracksXml(sb, indent); } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(AudioHash0); + bw.Write(FrameStartTime); + bw.Write(AudioHash1); + bw.Write(FrameTimeInterval); + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) + { + bw.Write(Variables[i]); + } + if (UnkByteData != null) + { + bw.Write(UnkByteData); + } + else + { } + } + public override uint[] GetHashTableOffsets() + { + return new uint[] { 0, 8 }; + } } [TC(typeof(EXP))] public class Dat54SequentialSound : Dat54Sound { @@ -2223,6 +2527,15 @@ namespace CodeWalker.GameFiles base.WriteXml(sb, indent); WriteAudioTracksXml(sb, indent); } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + WriteAudioTrackHashes(bw); + } + public override uint[] GetHashTableOffsets() + { + return GetAudioTracksHashTableOffsets(); + } } [TC(typeof(EXP))] public class Dat54StreamingSound : Dat54Sound { @@ -2248,6 +2561,16 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "UnkInt", UnkInt.ToString()); WriteAudioTracksXml(sb, indent); } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(UnkInt); + WriteAudioTrackHashes(bw); + } + public override uint[] GetHashTableOffsets() + { + return GetAudioTracksHashTableOffsets(4); + } } [TC(typeof(EXP))] public class Dat54RetriggeredOverlappedSound : Dat54Sound { @@ -2302,6 +2625,23 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "AudioHash1", RelXml.HashString(AudioHash1)); RelXml.StringTag(sb, indent, "AudioHash2", RelXml.HashString(AudioHash2)); } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(UnkShort0); + bw.Write(UnkShort1); + bw.Write(UnkShort2); + bw.Write(UnkShort3); + bw.Write(ParameterHash0); + bw.Write(ParameterHash1); + bw.Write(AudioHash0); + bw.Write(AudioHash1); + bw.Write(AudioHash2); + } + public override uint[] GetHashTableOffsets() + { + return new uint[] { 16, 20, 24 }; + } } [TC(typeof(EXP))] public class Dat54CrossfadeSound : Dat54Sound { @@ -2368,6 +2708,26 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "ParameterHash3", RelXml.HashString(ParameterHash3)); RelXml.StringTag(sb, indent, "ParameterHash4", RelXml.HashString(ParameterHash4)); } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(AudioHash0); + bw.Write(AudioHash1); + bw.Write(UnkByte); + bw.Write(UnkFloat0); + bw.Write(UnkFloat1); + bw.Write(UnkInt); + bw.Write(UnkCurvesHash); + bw.Write(ParameterHash0); + bw.Write(ParameterHash1); + bw.Write(ParameterHash2); + bw.Write(ParameterHash3); + bw.Write(ParameterHash4); + } + public override uint[] GetHashTableOffsets() + { + return new uint[] { 0, 4 }; + } } [TC(typeof(EXP))] public class Dat54CollapsingStereoSound : Dat54Sound { @@ -2434,6 +2794,26 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "ParameterHash5", RelXml.HashString(ParameterHash5)); RelXml.ValueTag(sb, indent, "UnkByte", UnkByte.ToString()); } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(AudioHash0); + bw.Write(AudioHash1); + bw.Write(UnkFloat0); //0x8 + bw.Write(UnkFloat1); //0xC + bw.Write(ParameterHash0); //0x10 + bw.Write(ParameterHash1); //0x14 + bw.Write(ParameterHash2); //0x18 + bw.Write(ParameterHash3); //0x1C + bw.Write(ParameterHash4); //0x20 + bw.Write(UnkInt); //0x24-0x28 + bw.Write(ParameterHash5); //0x28-0x2C + bw.Write(UnkByte); //0x2C-0x2D + } + public override uint[] GetHashTableOffsets() + { + return new uint[] { 0, 4 }; + } } [TC(typeof(EXP))] public class Dat54SimpleSound : Dat54Sound { @@ -2449,6 +2829,8 @@ namespace CodeWalker.GameFiles AudioContainers = new[] { ContainerName }; FileName = br.ReadUInt32(); WaveSlotNum = br.ReadByte(); + if (br.BaseStream.Position < br.BaseStream.Length) + { } } public override void ReadXml(XmlNode node) { @@ -2464,6 +2846,17 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "FileName", RelXml.HashString(FileName)); RelXml.ValueTag(sb, indent, "WaveSlotNum", WaveSlotNum.ToString()); } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(ContainerName); + bw.Write(FileName); + bw.Write(WaveSlotNum); + } + public override uint[] GetPackTableOffsets() + { + return new uint[] { 0 }; + } } [TC(typeof(EXP))] public class Dat54MultitrackSound : Dat54Sound { @@ -2483,6 +2876,15 @@ namespace CodeWalker.GameFiles base.WriteXml(sb, indent); WriteAudioTracksXml(sb, indent); } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + WriteAudioTrackHashes(bw); + } + public override uint[] GetHashTableOffsets() + { + return GetAudioTracksHashTableOffsets(); + } } [TC(typeof(EXP))] public class Dat54RandomizedSound : Dat54Sound { @@ -2556,6 +2958,29 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "Items"); } } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(UnkByte); + bw.Write(UnkBytesCount); + bw.Write(UnkBytes); + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) + { + bw.Write(AudioTrackHashes[i]); + bw.Write(AudioTrackUnkFloats[i]); + } + } + public override uint[] GetHashTableOffsets() + { + var offset = 3u + UnkBytesCount; + var offsets = new List(); + for (uint i = 0; i < ItemCount; i++) + { + offsets.Add(offset + i * 8); + } + return offsets.ToArray(); + } } [TC(typeof(EXP))] public class Dat54EnvironmentSound : Dat54Sound { @@ -2566,6 +2991,8 @@ namespace CodeWalker.GameFiles public Dat54EnvironmentSound(RelData d, BinaryReader br) : base(d, br) { UnkByte = br.ReadByte(); + if (br.BaseStream.Position < br.BaseStream.Length) + { } } public override void ReadXml(XmlNode node) { @@ -2577,6 +3004,11 @@ namespace CodeWalker.GameFiles base.WriteXml(sb, indent); RelXml.ValueTag(sb, indent, "UnkByte", UnkByte.ToString()); } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(UnkByte); + } } [TC(typeof(EXP))] public class Dat54DynamicEntitySound : Dat54Sound { @@ -2632,6 +3064,15 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "Items"); } } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) + { + bw.Write(UnkHashes[i]); + } + } } [TC(typeof(EXP))] public class Dat54SequentialOverlapSound : Dat54Sound { @@ -2655,6 +3096,8 @@ namespace CodeWalker.GameFiles UnkShort = (ushort)Xml.GetChildUIntAttribute(node, "UnkShort", "value"); ParameterHash0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash0")); ParameterHash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash1")); + + ReadAudioTracksXml(node); } public override void WriteXml(StringBuilder sb, int indent) { @@ -2662,6 +3105,20 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "UnkShort", UnkShort.ToString()); RelXml.StringTag(sb, indent, "ParameterHash0", RelXml.HashString(ParameterHash0)); RelXml.StringTag(sb, indent, "ParameterHash1", RelXml.HashString(ParameterHash1)); + + WriteAudioTracksXml(sb, indent); + } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(UnkShort); + bw.Write(ParameterHash0); + bw.Write(ParameterHash1); + WriteAudioTrackHashes(bw); + } + public override uint[] GetHashTableOffsets() + { + return GetAudioTracksHashTableOffsets(10); } } [TC(typeof(EXP))] public class Dat54ModularSynthSound : Dat54Sound @@ -2750,6 +3207,33 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "UnkItems"); } } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(OptAmpUnkHash); //0x0-0x4 + bw.Write(UnkHash); //0x4-0x8 + bw.Write(UnkFloat); //0x8-0xC + bw.Write(UnkInt); //0xC-0x10 + bw.Write(TrackCount); //0x10-0x14 + for (int i = 0; i < 4; i++) + { + bw.Write(AudioTrackHashes[i]); + } + bw.Write(UnkItemCount); + for (int i = 0; i < UnkItemCount; i++) + { + UnkItems[i].Write(bw); + } + } + public override uint[] GetHashTableOffsets() + { + var offsets = new List(); + for (uint i = 0; i < 4; i++) + { + offsets.Add(20 + i * 4); + } + return offsets.ToArray(); + } } [TC(typeof(EXP))] public class Dat54ModularSynthSoundData { @@ -2777,6 +3261,12 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "ParameterHash", RelXml.HashString(ParameterHash)); RelXml.ValueTag(sb, indent, "Value", FloatUtil.ToString(Value)); } + public void Write(BinaryWriter bw) + { + bw.Write(UnkHash); + bw.Write(ParameterHash); + bw.Write(Value); + } public override string ToString() { return UnkHash.ToString() + ": " + ParameterHash.ToString() + ": " + FloatUtil.ToString(Value); @@ -2913,6 +3403,52 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "TrackName", RelXml.HashString(TrackName)); RelXml.WriteRawArray(sb, UnkVecData, indent, "UnkVecData", "", RelXml.FormatVector2, 1); } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + + bw.Write(WaveSlotIndex); + + Wave1.Write(bw); + Wave2.Write(bw); + Wave3.Write(bw); + Wave4.Write(bw); + Wave5.Write(bw); + Wave6.Write(bw); + + DataItem1.Write(bw); + DataItem2.Write(bw); + DataItem3.Write(bw); + DataItem4.Write(bw); + DataItem5.Write(bw); + DataItem6.Write(bw); + + bw.Write(UnkInt0); + bw.Write(UnkInt1); + bw.Write(UnkShort0); + bw.Write(UnkShort1); + bw.Write(UnkShort2); + bw.Write(UnkShort3); + bw.Write(UnkShort4); + bw.Write(UnkShort5); + + bw.Write(TrackName); + + bw.Write(UnkVecCount); + for (int i = 0; i < UnkVecCount; i++) + { + bw.Write(UnkVecData[i].X); + bw.Write(UnkVecData[i].Y); + } + } + public override uint[] GetHashTableOffsets() + { + return new uint[] { 120 }; + } + public override uint[] GetPackTableOffsets() + { + return new uint[] { 4, 12, 20, 28, 36, 44 }; + } } [TC(typeof(EXP))] public class Dat54GranularSoundFile { @@ -2942,6 +3478,11 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, cind, "FileName", RelXml.HashString(FileName)); RelXml.CloseTag(sb, indent, varName); } + public void Write(BinaryWriter bw) + { + bw.Write(ContainerName); + bw.Write(FileName); + } public override string ToString() { return ContainerName.ToString() + ": " + FileName.ToString(); @@ -2974,7 +3515,7 @@ namespace CodeWalker.GameFiles UnkFlags1 = (byte)Xml.GetChildIntAttribute(cnode, "UnkFlags1", "value"); UnkByte0 = (byte)Xml.GetChildIntAttribute(cnode, "UnkByte0", "value"); UnkByte1 = (byte)Xml.GetChildIntAttribute(cnode, "UnkByte1", "value"); - UnkFloat = (byte)Xml.GetChildFloatAttribute(cnode, "UnkFloat", "value"); + UnkFloat = Xml.GetChildFloatAttribute(cnode, "UnkFloat", "value"); } public void WriteXml(StringBuilder sb, int indent, string varName) { @@ -2987,6 +3528,14 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, cind, "UnkFloat", FloatUtil.ToString(UnkFloat)); RelXml.CloseTag(sb, indent, varName); } + public void Write(BinaryWriter bw) + { + bw.Write(UnkFlags0); + bw.Write(UnkFlags1); + bw.Write(UnkByte0); + bw.Write(UnkByte1); + bw.Write(UnkFloat); + } public override string ToString() { return UnkFlags0.ToString() + ": " + UnkFlags1.ToString() + ": " + UnkByte0.ToString() + ": " + UnkByte1.ToString() + ": " + FloatUtil.ToString(UnkFloat); @@ -3017,11 +3566,11 @@ namespace CodeWalker.GameFiles { base.ReadXml(node); AudioHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash")); - UnkFloat0 = (byte)Xml.GetChildFloatAttribute(node, "UnkFloat0", "value"); - UnkFloat1 = (byte)Xml.GetChildFloatAttribute(node, "UnkFloat1", "value"); - UnkFloat2 = (byte)Xml.GetChildFloatAttribute(node, "UnkFloat2", "value"); - UnkFloat3 = (byte)Xml.GetChildFloatAttribute(node, "UnkFloat3", "value"); - UnkFloat4 = (byte)Xml.GetChildFloatAttribute(node, "UnkFloat4", "value"); + UnkFloat0 = Xml.GetChildFloatAttribute(node, "UnkFloat0", "value"); + UnkFloat1 = Xml.GetChildFloatAttribute(node, "UnkFloat1", "value"); + UnkFloat2 = Xml.GetChildFloatAttribute(node, "UnkFloat2", "value"); + UnkFloat3 = Xml.GetChildFloatAttribute(node, "UnkFloat3", "value"); + UnkFloat4 = Xml.GetChildFloatAttribute(node, "UnkFloat4", "value"); } public override void WriteXml(StringBuilder sb, int indent) { @@ -3033,6 +3582,20 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "UnkFloat3", FloatUtil.ToString(UnkFloat3)); RelXml.ValueTag(sb, indent, "UnkFloat4", FloatUtil.ToString(UnkFloat4)); } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(AudioHash); + bw.Write(UnkFloat0); + bw.Write(UnkFloat1); + bw.Write(UnkFloat2); + bw.Write(UnkFloat3); + bw.Write(UnkFloat4); + } + public override uint[] GetHashTableOffsets() + { + return new uint[] { 0 }; + } } [TC(typeof(EXP))] public class Dat54KineticSound : Dat54Sound { @@ -3055,9 +3618,9 @@ namespace CodeWalker.GameFiles { base.ReadXml(node); AudioHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash")); - UnkFloat0 = (byte)Xml.GetChildFloatAttribute(node, "UnkFloat0", "value"); - UnkFloat1 = (byte)Xml.GetChildFloatAttribute(node, "UnkFloat1", "value"); - UnkFloat2 = (byte)Xml.GetChildFloatAttribute(node, "UnkFloat2", "value"); + UnkFloat0 = Xml.GetChildFloatAttribute(node, "UnkFloat0", "value"); + UnkFloat1 = Xml.GetChildFloatAttribute(node, "UnkFloat1", "value"); + UnkFloat2 = Xml.GetChildFloatAttribute(node, "UnkFloat2", "value"); } public override void WriteXml(StringBuilder sb, int indent) { @@ -3067,6 +3630,18 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "UnkFloat1", FloatUtil.ToString(UnkFloat1)); RelXml.ValueTag(sb, indent, "UnkFloat2", FloatUtil.ToString(UnkFloat2)); } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(AudioHash); + bw.Write(UnkFloat0); + bw.Write(UnkFloat1); + bw.Write(UnkFloat2); + } + public override uint[] GetHashTableOffsets() + { + return new uint[] { 0 }; + } } [TC(typeof(EXP))] public class Dat54SwitchSound : Dat54Sound { @@ -3092,6 +3667,16 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "ParameterHash", RelXml.HashString(ParameterHash)); WriteAudioTracksXml(sb, indent); } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(ParameterHash); + WriteAudioTrackHashes(bw); + } + public override uint[] GetHashTableOffsets() + { + return GetAudioTracksHashTableOffsets(4); + } } [TC(typeof(EXP))] public class Dat54VariableCurveSound : Dat54Sound { @@ -3126,6 +3711,18 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "ParameterHash1", RelXml.HashString(ParameterHash1)); RelXml.StringTag(sb, indent, "UnkCurvesHash", RelXml.HashString(UnkCurvesHash)); } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(AudioHash); + bw.Write(ParameterHash0); + bw.Write(ParameterHash1); + bw.Write(UnkCurvesHash); + } + public override uint[] GetHashTableOffsets() + { + return new uint[] { 0 }; + } } [TC(typeof(EXP))] public class Dat54VariablePrintValueSound : Dat54Sound { @@ -3151,6 +3748,12 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "ParameterHash", RelXml.HashString(ParameterHash)); RelXml.StringTag(sb, indent, "VariableString", VariableString); } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(ParameterHash); + bw.Write(VariableString); + } } [TC(typeof(EXP))] public class Dat54VariableBlockSound : Dat54Sound { @@ -3216,6 +3819,20 @@ namespace CodeWalker.GameFiles } } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(AudioHash); + bw.Write(VariableCount); + for (int i = 0; i < VariableCount; i++) + { + Variables[i].Write(bw); + } + } + public override uint[] GetHashTableOffsets() + { + return new uint[] { 0 }; + } } [TC(typeof(EXP))] public class Dat54VariableData { @@ -3247,6 +3864,13 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "UnkFloat", FloatUtil.ToString(UnkFloat)); RelXml.ValueTag(sb, indent, "Flags", Flags.ToString()); } + public void Write(BinaryWriter bw) + { + bw.Write(Name); + bw.Write(Value); + bw.Write(UnkFloat); + bw.Write(Flags); + } public override string ToString() { return Name + ": " + FloatUtil.ToString(Value) + ": " + FloatUtil.ToString(UnkFloat) + ": " + Flags.ToString(); @@ -3293,6 +3917,20 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "UnkFloat", FloatUtil.ToString(UnkFloat)); RelXml.StringTag(sb, indent, "ParameterHash2", RelXml.HashString(ParameterHash2)); } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(AudioHash1); + bw.Write(AudioHash2); + bw.Write(ParameterHash1); + bw.Write(UnkByte); + bw.Write(UnkFloat); + bw.Write(ParameterHash2); + } + public override uint[] GetHashTableOffsets() + { + return new uint[] { 0, 4 }; + } } [TC(typeof(EXP))] public class Dat54MathOperationSound : Dat54Sound { @@ -3357,6 +3995,20 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "UnkData"); } } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(AudioHash); + bw.Write(UnkDataCount); + for (int i = 0; i < UnkDataCount; i++) + { + UnkData[i].Write(bw); + } + } + public override uint[] GetHashTableOffsets() + { + return new uint[] { 0 }; + } } [TC(typeof(EXP))] public class Dat54MathOperationSoundData { @@ -3404,6 +4056,17 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "ParameterHash0", RelXml.HashString(ParameterHash0)); RelXml.StringTag(sb, indent, "ParameterHash1", RelXml.HashString(ParameterHash1)); } + public void Write(BinaryWriter bw) + { + bw.Write(UnkByte); + bw.Write(UnkInt0); + bw.Write(UnkInt1); + bw.Write(UnkInt2); + bw.Write(UnkInt3); + bw.Write(UnkInt4); + bw.Write(ParameterHash0); + bw.Write(ParameterHash1); + } public override string ToString() { return ParameterHash0.ToString() + ", " + ParameterHash1.ToString(); @@ -3472,6 +4135,20 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "Items"); } } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(AudioHash); + bw.Write(ItemCount); //0x4-0x8 + for (int i = 0; i < ItemCount; i++) + { + Items[i].Write(bw); + } + } + public override uint[] GetHashTableOffsets() + { + return new uint[] { 0 }; + } } [TC(typeof(EXP))] public class Dat54ParameterTransformSoundData { @@ -3541,6 +4218,17 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "NestedData"); } } + public void Write(BinaryWriter bw) + { + bw.Write(ParameterHash); + bw.Write(UnkFloat0); + bw.Write(UnkFloat1); + bw.Write(NestedDataCount); + for (int i = 0; i < NestedDataCount; i++) + { + NestedData[i].Write(bw); + } + } public override string ToString() { return ParameterHash.ToString() + ", " + NestedDataCount.ToString(); @@ -3580,6 +4268,7 @@ namespace CodeWalker.GameFiles UnkFloat1 = Xml.GetChildFloatAttribute(node, "UnkFloat1", "value"); UnkFloat2 = Xml.GetChildFloatAttribute(node, "UnkFloat2", "value"); NestedItems = Xml.GetChildRawVector2Array(node, "Vectors"); + NestedItemCount = NestedItems?.Length ?? 0; } public void WriteXml(StringBuilder sb, int indent) { @@ -3590,6 +4279,20 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "UnkFloat2", FloatUtil.ToString(UnkFloat2)); RelXml.WriteRawArray(sb, NestedItems, indent, "Vectors", "", RelXml.FormatVector2, 1); } + public void Write(BinaryWriter bw) + { + bw.Write(UnkFloat0); + bw.Write(UnkInt); + bw.Write(ParameterHash); + bw.Write(UnkFloat1); + bw.Write(UnkFloat2); + bw.Write(NestedItemCount); + for (int i = 0; i < NestedItemCount; i++) + { + bw.Write(NestedItems[i].X); + bw.Write(NestedItems[i].Y); + } + } public override string ToString() { return ParameterHash.ToString() + ", " + NestedItemCount.ToString(); @@ -3658,6 +4361,20 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "Items"); } } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(AudioHash); + bw.Write(ItemCount); //0x4-0x8 + for (int i = 0; i < ItemCount; i++) + { + Items[i].Write(bw); + } + } + public override uint[] GetHashTableOffsets() + { + return new uint[] { 0 }; + } } [TC(typeof(EXP))] public class Dat54FluctuatorSoundData { @@ -3729,6 +4446,23 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "UnkFloat09", FloatUtil.ToString(UnkFloat09)); RelXml.ValueTag(sb, indent, "UnkFloat10", FloatUtil.ToString(UnkFloat10)); } + public void Write(BinaryWriter bw) + { + bw.Write(UnkByte0); + bw.Write(UnkByte1); + bw.Write(ParameterHash); + bw.Write(UnkFloat00); + bw.Write(UnkFloat01); + bw.Write(UnkFloat02); + bw.Write(UnkFloat03); + bw.Write(UnkFloat04); + bw.Write(UnkFloat05); + bw.Write(UnkFloat06); + bw.Write(UnkFloat07); + bw.Write(UnkFloat08); + bw.Write(UnkFloat09); + bw.Write(UnkFloat10); + } public override string ToString() { return ParameterHash.ToString(); @@ -3741,8 +4475,8 @@ namespace CodeWalker.GameFiles public float UnkFloat1 { get; set; } //0x8-0xC public MetaHash ParameterHash { get; set; } //0xC-0x10 public MetaHash AudioHash1 { get; set; } - public int WaveSlotId { get; set; } //0x14-0x18 - public MetaHash UnkHash1 { get; set; } //0x18-0x1C + public MetaHash WaveSlotId { get; set; } //0x14-0x18 + public MetaHash UnkHash1 { get; set; } //0x18-0x1C //pack hash? public int UnkDataCount { get; set; } // array data count 0x1C-0x20 public Dat54AutomationSoundData[] UnkData { get; set; } //0x20- @@ -3756,7 +4490,7 @@ namespace CodeWalker.GameFiles ParameterHash = br.ReadUInt32(); AudioHash1 = br.ReadUInt32(); AudioTrackHashes = new[] { AudioHash0, AudioHash1 }; - WaveSlotId = br.ReadInt32(); + WaveSlotId = br.ReadUInt32(); UnkHash1 = br.ReadUInt32(); UnkDataCount = br.ReadInt32(); UnkData = new Dat54AutomationSoundData[UnkDataCount]; @@ -3773,7 +4507,7 @@ namespace CodeWalker.GameFiles UnkFloat1 = Xml.GetChildFloatAttribute(node, "UnkFloat1", "value"); ParameterHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash")); AudioHash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash1")); - WaveSlotId = Xml.GetChildIntAttribute(node, "WaveSlotId", "value"); + WaveSlotId = XmlRel.GetHash(Xml.GetChildInnerText(node, "WaveSlotId")); UnkHash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "UnkHash1")); var vnode = node.SelectSingleNode("UnkData"); if (vnode != null) @@ -3801,7 +4535,7 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "UnkFloat1", FloatUtil.ToString(UnkFloat1)); RelXml.StringTag(sb, indent, "ParameterHash", RelXml.HashString(ParameterHash)); RelXml.StringTag(sb, indent, "AudioHash1", RelXml.HashString(AudioHash1)); - RelXml.ValueTag(sb, indent, "WaveSlotId", WaveSlotId.ToString()); + RelXml.StringTag(sb, indent, "WaveSlotId", RelXml.HashString(WaveSlotId)); RelXml.StringTag(sb, indent, "UnkHash1", RelXml.HashString(UnkHash1)); if (UnkDataCount > 0) { @@ -3821,6 +4555,30 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "UnkData"); } } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(AudioHash0); + bw.Write(UnkFloat0); + bw.Write(UnkFloat1); + bw.Write(ParameterHash); + bw.Write(AudioHash1); + bw.Write(WaveSlotId); + bw.Write(UnkHash1); + bw.Write(UnkDataCount); + for (int i = 0; i < UnkDataCount; i++) + { + UnkData[i].Write(bw); + } + } + public override uint[] GetHashTableOffsets() + { + return new uint[] { 0, 16 }; + } + public override uint[] GetPackTableOffsets() + { + return new uint[] { 20 }; + } } [TC(typeof(EXP))] public class Dat54AutomationSoundData { @@ -3833,6 +4591,9 @@ namespace CodeWalker.GameFiles { UnkInt = br.ReadInt32(); UnkHash = br.ReadUInt32(); + + if (UnkInt != 0)//should be pack hash? + { } } public void ReadXml(XmlNode node) { @@ -3844,6 +4605,11 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "UnkInt", UnkInt.ToString()); RelXml.StringTag(sb, indent, "UnkHash", RelXml.HashString(UnkHash)); } + public void Write(BinaryWriter bw) + { + bw.Write(UnkInt); + bw.Write(UnkHash); + } public override string ToString() { return UnkInt.ToString() + ", " + UnkHash.ToString(); @@ -3851,40 +4617,93 @@ namespace CodeWalker.GameFiles } [TC(typeof(EXP))] public class Dat54ExternalStreamSound : Dat54Sound { + public MetaHash Unk0 { get; set; } + public MetaHash Unk1 { get; set; } + public MetaHash Unk2 { get; set; } + public MetaHash Unk3 { get; set; } + public Dat54ExternalStreamSound(RelFile rel) : base(rel, Dat54SoundType.ExternalStreamSound) { } public Dat54ExternalStreamSound(RelData d, BinaryReader br) : base(d, br) { ReadAudioTrackHashes(br); - //FlagsUint u1 = br.ReadUInt32(); - //FlagsUint u2 = br.ReadUInt32(); - //FlagsUint u3 = br.ReadUInt32(); - //FlagsUint u4 = br.ReadUInt32(); + Unk0 = br.ReadUInt32(); + Unk1 = br.ReadUInt32(); + + if (AudioTracksCount == 0) + { + Unk2 = br.ReadUInt32(); + Unk3 = br.ReadUInt32(); + } - //TODO: could be more to read! if (br.BaseStream.Position != br.BaseStream.Length) { - var bytes = new List(); - while (br.BaseStream.Position < br.BaseStream.Length) - { - byte b = br.ReadByte(); - bytes.Add(b); - if (b != 0) - { }//no hits here - } - //var bytearr = bytes.ToArray(); - } //hits here! + + //var bytes = new List(); + //while (br.BaseStream.Position < br.BaseStream.Length) + //{ + // byte b = br.ReadByte(); + // bytes.Add(b); + // if (b != 0) + // { }//no hits here + //} + ////var bytearr = bytes.ToArray(); + + } } public override void ReadXml(XmlNode node) { base.ReadXml(node); ReadAudioTracksXml(node); + Unk0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk0")); + Unk1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk1")); + if (AudioTracksCount == 0) + { + Unk2 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk2")); + Unk3 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk3")); + } } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); WriteAudioTracksXml(sb, indent); + RelXml.StringTag(sb, indent, "Unk0", RelXml.HashString(Unk0)); + RelXml.StringTag(sb, indent, "Unk1", RelXml.HashString(Unk1)); + if (AudioTracksCount == 0) + { + RelXml.StringTag(sb, indent, "Unk2", RelXml.HashString(Unk2)); + RelXml.StringTag(sb, indent, "Unk3", RelXml.HashString(Unk3)); + } + } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + WriteAudioTrackHashes(bw); + + bw.Write(Unk0); + bw.Write(Unk1); + + if (AudioTracksCount == 0) + { + bw.Write(Unk2); + bw.Write(Unk3); + } + + } + public override uint[] GetHashTableOffsets() + { + var list = GetAudioTracksHashTableOffsets().ToList(); + uint offs = (uint)list.Count * 4 + 1; + list.Add(offs);// Unk0 + list.Add(offs + 4);// Unk1 + if (AudioTracksCount == 0) + { + list.Add(offs + 8);// Unk2 + list.Add(offs + 12);// Unk3 + } + return list.ToArray(); + //return GetAudioTracksHashTableOffsets(); } } [TC(typeof(EXP))] public class Dat54SoundSet : Dat54Sound @@ -3947,6 +4766,24 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "Items"); } } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) + { + Items[i].Write(bw); + } + } + public override uint[] GetHashTableOffsets() + { + var offsets = new List(); + for (uint i = 0; i < ItemCount; i++) + { + offsets.Add(8 + i * 8); + } + return offsets.ToArray(); + } } [TC(typeof(EXP))] public class Dat54SoundSetItem { @@ -3970,6 +4807,11 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "ScriptName", RelXml.HashString(ScriptName)); RelXml.StringTag(sb, indent, "SoundName", RelXml.HashString(SoundName)); } + public void Write(BinaryWriter bw) + { + bw.Write(ScriptName); + bw.Write(SoundName); + } public override string ToString() { return ScriptName.ToString() + ": " + SoundName.ToString(); @@ -4035,6 +4877,24 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "UnkData"); } } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(UnkDataCount); + for (int i = 0; i < UnkDataCount; i++) + { + UnkData[i].Write(bw); + } + } + public override uint[] GetHashTableOffsets() + { + var offsets = new List(); + for (uint i = 0; i < UnkDataCount; i++) + { + offsets.Add(4 + i * 7); + } + return offsets.ToArray(); + } } [TC(typeof(EXP))] public class Dat54UnknownSoundData { @@ -4066,6 +4926,13 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "UnkByte2", UnkByte2.ToString()); RelXml.StringTag(sb, indent, "AudioTrack", RelXml.HashString(AudioTrack)); } + public void Write(BinaryWriter bw) + { + bw.Write(UnkByte0); + bw.Write(UnkByte1); + bw.Write(UnkByte2); + bw.Write(AudioTrack); + } public override string ToString() { return UnkByte0.ToString() + ": " + UnkByte1.ToString() + ": " + UnkByte2.ToString(); @@ -4125,6 +4992,24 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "Items"); } } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(UnkCount); + for (int i = 0; i < UnkCount; i++) + { + bw.Write(UnkItems[i]); + } + } + public override uint[] GetHashTableOffsets() + { + var offsets = new List(); + for (uint i = 0; i < UnkCount; i++) + { + offsets.Add(4 + i * 4); + } + return offsets.ToArray(); + } } [TC(typeof(EXP))] public class Dat54SoundList : Dat54Sound { @@ -4186,6 +5071,16 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "Items"); } } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(UnkShort); + bw.Write(Count); + for (int i = 0; i < Count; i++) + { + bw.Write(Items[i]); + } + } } @@ -4677,10 +5572,6 @@ namespace CodeWalker.GameFiles bw.Write(UnkVec2.Y); bw.Write(UnkVec2.Z); bw.Write(UnkVec2.W); - //bw.Write(UnkVec3.X); - //bw.Write(UnkVec3.Y); - //bw.Write(UnkVec3.Z); - //bw.Write(UnkVec3.W); bw.Write(UnkHash0); bw.Write(UnkHash1); bw.Write(UnkVec3.X); @@ -4726,11 +5617,9 @@ namespace CodeWalker.GameFiles RelXml.SelfClosingTag(sb, indent, "InnerVec3 " + FloatUtil.GetVector3XmlString(InnerVec3)); RelXml.SelfClosingTag(sb, indent, "UnkVec1 " + FloatUtil.GetVector4XmlString(UnkVec1)); RelXml.SelfClosingTag(sb, indent, "UnkVec2 " + FloatUtil.GetVector4XmlString(UnkVec2)); - //RelXml.SelfClosingTag(sb, indent, "UnkVec3 " + FloatUtil.GetVector4XmlString(UnkVec3)); RelXml.StringTag(sb, indent, "UnkHash0", RelXml.HashString(UnkHash0)); RelXml.StringTag(sb, indent, "UnkHash1", RelXml.HashString(UnkHash1)); RelXml.SelfClosingTag(sb, indent, "UnkVec3 " + FloatUtil.GetVector2XmlString(UnkVec3)); - RelXml.ValueTag(sb, indent, "Flags2", "0x" + Flags2.Hex); RelXml.ValueTag(sb, indent, "Unk14", Unk14.ToString()); RelXml.ValueTag(sb, indent, "Unk15", Unk15.ToString()); @@ -4787,11 +5676,9 @@ namespace CodeWalker.GameFiles InnerVec3 = Xml.GetChildVector3Attributes(node, "InnerVec3", "x", "y", "z"); UnkVec1 = Xml.GetChildVector4Attributes(node, "UnkVec1", "x", "y", "z", "w"); UnkVec2 = Xml.GetChildVector4Attributes(node, "UnkVec2", "x", "y", "z", "w"); - //UnkVec3 = Xml.GetChildVector4Attributes(node, "UnkVec3", "x", "y", "z", "w"); UnkHash0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "UnkHash0")); UnkHash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "UnkHash1")); UnkVec3 = Xml.GetChildVector2Attributes(node, "UnkVec3", "x", "y"); - Flags2 = Xml.GetChildUIntAttribute(node, "Flags2", "value"); Unk14 = (byte)Xml.GetChildUIntAttribute(node, "Unk14", "value"); Unk15 = (byte)Xml.GetChildUIntAttribute(node, "Unk15", "value"); diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index 34e1d0f..8baced0 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -2286,6 +2286,9 @@ namespace CodeWalker.GameFiles StringBuilder sbh = new StringBuilder(); StringBuilder sbi = new StringBuilder(); + bool savetest = true; + bool xmltest = true; + foreach (RpfFile rpf in RpfMan.AllRpfs) { foreach (RpfEntry entry in rpf.AllEntries) @@ -2374,6 +2377,8 @@ namespace CodeWalker.GameFiles sb.AppendLine(); + if (!savetest) continue; + byte[] data = rel.Save(); if (data != null) @@ -2389,6 +2394,8 @@ namespace CodeWalker.GameFiles { break; } } } + else + { } RelFile rel2 = new RelFile(); @@ -2400,6 +2407,7 @@ namespace CodeWalker.GameFiles { } + if (!xmltest) continue; var relxml = RelXml.GetXml(rel); //XML test... var rel3 = XmlRel.GetRel(relxml); @@ -2467,17 +2475,35 @@ namespace CodeWalker.GameFiles string hashstrs = sbh.ToString(); - var wavesmap = RelFile.HashesMap; - if (wavesmap.Count > 0) + var hashmap = RelFile.HashesMap; + if (hashmap.Count > 0) { } var sb2 = new StringBuilder(); - foreach (var kvp in wavesmap) + foreach (var kvp in hashmap) { + string itemtype = kvp.Key.ItemType.ToString(); if (kvp.Key.FileType == RelDatFileType.Dat151) { - sb2.Append(((Dat151RelType)kvp.Key.ItemType).ToString()); + itemtype = ((Dat151RelType)kvp.Key.ItemType).ToString(); + } + else if (kvp.Key.FileType == RelDatFileType.Dat54DataEntries) + { + itemtype = ((Dat54SoundType)kvp.Key.ItemType).ToString(); + } + else + { + itemtype = kvp.Key.FileType.ToString() + ".Unk" + kvp.Key.ItemType.ToString(); + } + if (kvp.Key.IsContainer) + { + itemtype += " (container)"; + } + + //if (kvp.Key.FileType == RelDatFileType.Dat151) + { + sb2.Append(itemtype); sb2.Append(" "); foreach (var val in kvp.Value) { @@ -2490,8 +2516,8 @@ namespace CodeWalker.GameFiles } - var dat151str = sb2.ToString(); - if (!string.IsNullOrEmpty(dat151str)) + var hashmapstr = sb2.ToString(); + if (!string.IsNullOrEmpty(hashmapstr)) { } } From f1562e6da071379ec91dc76f7c9ebbcab3f5a032 Mon Sep 17 00:00:00 2001 From: dexy Date: Sat, 19 Jan 2019 22:39:47 +1100 Subject: [PATCH 105/158] Audio dat.rel XML editing --- .../GameFiles/MetaTypes/MetaXml.cs | 1 + ExploreForm.cs | 2 +- Forms/MetaForm.cs | 2 + Forms/RelForm.Designer.cs | 499 ++++++++++++------ Forms/RelForm.cs | 351 +++++++++++- Forms/RelForm.resx | 44 ++ 6 files changed, 741 insertions(+), 158 deletions(-) diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs index 6ccbb68..07e42a7 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs @@ -1837,6 +1837,7 @@ namespace CodeWalker.GameFiles PSO = 2, RBF = 3, CacheFile = 4, + AudioRel = 5, } } diff --git a/ExploreForm.cs b/ExploreForm.cs index 7d14932..afe8792 100644 --- a/ExploreForm.cs +++ b/ExploreForm.cs @@ -1580,7 +1580,7 @@ namespace CodeWalker private void ViewRel(string name, string path, byte[] data, RpfFileEntry e) { var rel = RpfFile.GetFile(e, data); - RelForm f = new RelForm(); + RelForm f = new RelForm(this); f.Show(); f.LoadRel(rel); } diff --git a/Forms/MetaForm.cs b/Forms/MetaForm.cs index ed3c1d4..e7d9e10 100644 --- a/Forms/MetaForm.cs +++ b/Forms/MetaForm.cs @@ -400,6 +400,8 @@ namespace CodeWalker.Forms modified = false; + StatusLabel.Text = metaFormat.ToString() + " file saved successfully at " + DateTime.Now.ToString(); + return true; //victory! } catch (Exception ex) diff --git a/Forms/RelForm.Designer.cs b/Forms/RelForm.Designer.cs index 90da09d..74d18d6 100644 --- a/Forms/RelForm.Designer.cs +++ b/Forms/RelForm.Designer.cs @@ -32,6 +32,8 @@ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RelForm)); this.RelPropertyGrid = new CodeWalker.WinForms.PropertyGridFix(); this.MainTabControl = new System.Windows.Forms.TabControl(); + this.XmlTabPage = new System.Windows.Forms.TabPage(); + this.XmlTextBox = new FastColoredTextBoxNS.FastColoredTextBox(); this.DetailsTabPage = new System.Windows.Forms.TabPage(); this.NameTableTabPage = new System.Windows.Forms.TabPage(); this.MainTextBox = new CodeWalker.WinForms.TextBoxFix(); @@ -42,15 +44,35 @@ this.SearchTextBox = new System.Windows.Forms.TextBox(); this.SearchButton = new System.Windows.Forms.Button(); this.SearchResultsGrid = new CodeWalker.WinForms.PropertyGridFix(); - this.CloseButton = new System.Windows.Forms.Button(); - this.XmlTabPage = new System.Windows.Forms.TabPage(); - this.XmlTextBox = new FastColoredTextBoxNS.FastColoredTextBox(); + this.MainToolbar = new System.Windows.Forms.ToolStrip(); + this.NewButton = new System.Windows.Forms.ToolStripSplitButton(); + this.OpenButton = new System.Windows.Forms.ToolStripSplitButton(); + this.SaveButton = new System.Windows.Forms.ToolStripSplitButton(); + this.MainStatusStrip = new System.Windows.Forms.StatusStrip(); + this.StatusLabel = new System.Windows.Forms.ToolStripStatusLabel(); + this.MainMenu = new System.Windows.Forms.MenuStrip(); + this.FileMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.FileNewMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.FileOpenMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.FileSaveMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.FileSaveAsMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.FileCloseMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.EditMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.wIPToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.ViewMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.wIPToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.OpenFileDialog = new System.Windows.Forms.OpenFileDialog(); + this.SaveFileDialog = new System.Windows.Forms.SaveFileDialog(); this.MainTabControl.SuspendLayout(); + this.XmlTabPage.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.XmlTextBox)).BeginInit(); this.DetailsTabPage.SuspendLayout(); this.NameTableTabPage.SuspendLayout(); this.SearchTabPage.SuspendLayout(); - this.XmlTabPage.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.XmlTextBox)).BeginInit(); + this.MainToolbar.SuspendLayout(); + this.MainStatusStrip.SuspendLayout(); + this.MainMenu.SuspendLayout(); this.SuspendLayout(); // // RelPropertyGrid @@ -61,159 +83,30 @@ this.RelPropertyGrid.HelpVisible = false; this.RelPropertyGrid.Location = new System.Drawing.Point(6, 6); this.RelPropertyGrid.Name = "RelPropertyGrid"; - this.RelPropertyGrid.Size = new System.Drawing.Size(644, 356); + this.RelPropertyGrid.Size = new System.Drawing.Size(819, 448); this.RelPropertyGrid.TabIndex = 0; // // MainTabControl // - this.MainTabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); this.MainTabControl.Controls.Add(this.XmlTabPage); this.MainTabControl.Controls.Add(this.DetailsTabPage); this.MainTabControl.Controls.Add(this.NameTableTabPage); this.MainTabControl.Controls.Add(this.SearchTabPage); - this.MainTabControl.Location = new System.Drawing.Point(5, 5); + this.MainTabControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainTabControl.Location = new System.Drawing.Point(0, 49); this.MainTabControl.Margin = new System.Windows.Forms.Padding(0); this.MainTabControl.Name = "MainTabControl"; this.MainTabControl.SelectedIndex = 0; - this.MainTabControl.Size = new System.Drawing.Size(664, 394); + this.MainTabControl.Size = new System.Drawing.Size(839, 486); this.MainTabControl.TabIndex = 1; // - // DetailsTabPage - // - this.DetailsTabPage.Controls.Add(this.RelPropertyGrid); - this.DetailsTabPage.Location = new System.Drawing.Point(4, 22); - this.DetailsTabPage.Name = "DetailsTabPage"; - this.DetailsTabPage.Padding = new System.Windows.Forms.Padding(3); - this.DetailsTabPage.Size = new System.Drawing.Size(656, 368); - this.DetailsTabPage.TabIndex = 1; - this.DetailsTabPage.Text = "Details"; - this.DetailsTabPage.UseVisualStyleBackColor = true; - // - // NameTableTabPage - // - this.NameTableTabPage.Controls.Add(this.MainTextBox); - this.NameTableTabPage.Location = new System.Drawing.Point(4, 22); - this.NameTableTabPage.Name = "NameTableTabPage"; - this.NameTableTabPage.Padding = new System.Windows.Forms.Padding(3); - this.NameTableTabPage.Size = new System.Drawing.Size(656, 368); - this.NameTableTabPage.TabIndex = 0; - this.NameTableTabPage.Text = "Names"; - this.NameTableTabPage.UseVisualStyleBackColor = true; - // - // MainTextBox - // - this.MainTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.MainTextBox.Font = new System.Drawing.Font("Courier New", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.MainTextBox.HideSelection = false; - this.MainTextBox.Location = new System.Drawing.Point(6, 6); - this.MainTextBox.Multiline = true; - this.MainTextBox.Name = "MainTextBox"; - this.MainTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; - this.MainTextBox.Size = new System.Drawing.Size(644, 356); - this.MainTextBox.TabIndex = 1; - this.MainTextBox.WordWrap = false; - // - // SearchTabPage - // - this.SearchTabPage.Controls.Add(this.SearchTextRadio); - this.SearchTabPage.Controls.Add(this.SearchHashRadio); - this.SearchTabPage.Controls.Add(this.label12); - this.SearchTabPage.Controls.Add(this.SearchTextBox); - this.SearchTabPage.Controls.Add(this.SearchButton); - this.SearchTabPage.Controls.Add(this.SearchResultsGrid); - this.SearchTabPage.Location = new System.Drawing.Point(4, 22); - this.SearchTabPage.Name = "SearchTabPage"; - this.SearchTabPage.Size = new System.Drawing.Size(656, 368); - this.SearchTabPage.TabIndex = 2; - this.SearchTabPage.Text = "Search"; - this.SearchTabPage.UseVisualStyleBackColor = true; - // - // SearchTextRadio - // - this.SearchTextRadio.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.SearchTextRadio.AutoSize = true; - this.SearchTextRadio.Location = new System.Drawing.Point(343, 4); - this.SearchTextRadio.Name = "SearchTextRadio"; - this.SearchTextRadio.Size = new System.Drawing.Size(46, 17); - this.SearchTextRadio.TabIndex = 36; - this.SearchTextRadio.Text = "Text"; - this.SearchTextRadio.UseVisualStyleBackColor = true; - // - // SearchHashRadio - // - this.SearchHashRadio.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.SearchHashRadio.AutoSize = true; - this.SearchHashRadio.Checked = true; - this.SearchHashRadio.Location = new System.Drawing.Point(287, 4); - this.SearchHashRadio.Name = "SearchHashRadio"; - this.SearchHashRadio.Size = new System.Drawing.Size(50, 17); - this.SearchHashRadio.TabIndex = 35; - this.SearchHashRadio.TabStop = true; - this.SearchHashRadio.Text = "Hash"; - this.SearchHashRadio.UseVisualStyleBackColor = true; - // - // label12 - // - this.label12.AutoSize = true; - this.label12.Location = new System.Drawing.Point(8, 6); - this.label12.Name = "label12"; - this.label12.Size = new System.Drawing.Size(30, 13); - this.label12.TabIndex = 32; - this.label12.Text = "Find:"; - // - // SearchTextBox - // - this.SearchTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.SearchTextBox.Location = new System.Drawing.Point(44, 3); - this.SearchTextBox.Name = "SearchTextBox"; - this.SearchTextBox.Size = new System.Drawing.Size(237, 20); - this.SearchTextBox.TabIndex = 33; - this.SearchTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.SearchTextBox_KeyDown); - // - // SearchButton - // - this.SearchButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.SearchButton.Location = new System.Drawing.Point(395, 2); - this.SearchButton.Name = "SearchButton"; - this.SearchButton.Size = new System.Drawing.Size(68, 23); - this.SearchButton.TabIndex = 34; - this.SearchButton.Text = "Search"; - this.SearchButton.UseVisualStyleBackColor = true; - this.SearchButton.Click += new System.EventHandler(this.SearchButton_Click); - // - // SearchResultsGrid - // - this.SearchResultsGrid.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.SearchResultsGrid.HelpVisible = false; - this.SearchResultsGrid.Location = new System.Drawing.Point(3, 31); - this.SearchResultsGrid.Name = "SearchResultsGrid"; - this.SearchResultsGrid.Size = new System.Drawing.Size(647, 331); - this.SearchResultsGrid.TabIndex = 1; - // - // CloseButton - // - this.CloseButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.CloseButton.Location = new System.Drawing.Point(584, 409); - this.CloseButton.Name = "CloseButton"; - this.CloseButton.Size = new System.Drawing.Size(75, 23); - this.CloseButton.TabIndex = 2; - this.CloseButton.Text = "Close"; - this.CloseButton.UseVisualStyleBackColor = true; - this.CloseButton.Click += new System.EventHandler(this.CloseButton_Click); - // // XmlTabPage // this.XmlTabPage.Controls.Add(this.XmlTextBox); this.XmlTabPage.Location = new System.Drawing.Point(4, 22); this.XmlTabPage.Name = "XmlTabPage"; - this.XmlTabPage.Size = new System.Drawing.Size(656, 368); + this.XmlTabPage.Padding = new System.Windows.Forms.Padding(3); + this.XmlTabPage.Size = new System.Drawing.Size(831, 460); this.XmlTabPage.TabIndex = 3; this.XmlTabPage.Text = "XML"; this.XmlTabPage.UseVisualStyleBackColor = true; @@ -247,36 +140,327 @@ this.XmlTextBox.Language = FastColoredTextBoxNS.Language.XML; this.XmlTextBox.LeftBracket = '<'; this.XmlTextBox.LeftBracket2 = '('; - this.XmlTextBox.Location = new System.Drawing.Point(0, 0); + this.XmlTextBox.Location = new System.Drawing.Point(3, 3); this.XmlTextBox.Name = "XmlTextBox"; this.XmlTextBox.Paddings = new System.Windows.Forms.Padding(0); this.XmlTextBox.RightBracket = '>'; this.XmlTextBox.RightBracket2 = ')'; this.XmlTextBox.SelectionColor = System.Drawing.Color.FromArgb(((int)(((byte)(60)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(255))))); this.XmlTextBox.ServiceColors = ((FastColoredTextBoxNS.ServiceColors)(resources.GetObject("XmlTextBox.ServiceColors"))); - this.XmlTextBox.Size = new System.Drawing.Size(656, 368); + this.XmlTextBox.Size = new System.Drawing.Size(825, 454); this.XmlTextBox.TabIndex = 2; this.XmlTextBox.Zoom = 100; + this.XmlTextBox.TextChanged += new System.EventHandler(this.XmlTextBox_TextChanged); + this.XmlTextBox.VisibleRangeChangedDelayed += new System.EventHandler(this.XmlTextBox_VisibleRangeChangedDelayed); + // + // DetailsTabPage + // + this.DetailsTabPage.Controls.Add(this.RelPropertyGrid); + this.DetailsTabPage.Location = new System.Drawing.Point(4, 22); + this.DetailsTabPage.Name = "DetailsTabPage"; + this.DetailsTabPage.Padding = new System.Windows.Forms.Padding(3); + this.DetailsTabPage.Size = new System.Drawing.Size(831, 460); + this.DetailsTabPage.TabIndex = 1; + this.DetailsTabPage.Text = "Details"; + this.DetailsTabPage.UseVisualStyleBackColor = true; + // + // NameTableTabPage + // + this.NameTableTabPage.Controls.Add(this.MainTextBox); + this.NameTableTabPage.Location = new System.Drawing.Point(4, 22); + this.NameTableTabPage.Name = "NameTableTabPage"; + this.NameTableTabPage.Padding = new System.Windows.Forms.Padding(3); + this.NameTableTabPage.Size = new System.Drawing.Size(831, 460); + this.NameTableTabPage.TabIndex = 0; + this.NameTableTabPage.Text = "Names"; + this.NameTableTabPage.UseVisualStyleBackColor = true; + // + // MainTextBox + // + this.MainTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.MainTextBox.Font = new System.Drawing.Font("Courier New", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.MainTextBox.HideSelection = false; + this.MainTextBox.Location = new System.Drawing.Point(6, 6); + this.MainTextBox.Multiline = true; + this.MainTextBox.Name = "MainTextBox"; + this.MainTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.MainTextBox.Size = new System.Drawing.Size(819, 448); + this.MainTextBox.TabIndex = 1; + this.MainTextBox.WordWrap = false; + // + // SearchTabPage + // + this.SearchTabPage.Controls.Add(this.SearchTextRadio); + this.SearchTabPage.Controls.Add(this.SearchHashRadio); + this.SearchTabPage.Controls.Add(this.label12); + this.SearchTabPage.Controls.Add(this.SearchTextBox); + this.SearchTabPage.Controls.Add(this.SearchButton); + this.SearchTabPage.Controls.Add(this.SearchResultsGrid); + this.SearchTabPage.Location = new System.Drawing.Point(4, 22); + this.SearchTabPage.Name = "SearchTabPage"; + this.SearchTabPage.Size = new System.Drawing.Size(831, 460); + this.SearchTabPage.TabIndex = 2; + this.SearchTabPage.Text = "Search"; + this.SearchTabPage.UseVisualStyleBackColor = true; + // + // SearchTextRadio + // + this.SearchTextRadio.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.SearchTextRadio.AutoSize = true; + this.SearchTextRadio.Location = new System.Drawing.Point(518, 4); + this.SearchTextRadio.Name = "SearchTextRadio"; + this.SearchTextRadio.Size = new System.Drawing.Size(46, 17); + this.SearchTextRadio.TabIndex = 36; + this.SearchTextRadio.Text = "Text"; + this.SearchTextRadio.UseVisualStyleBackColor = true; + // + // SearchHashRadio + // + this.SearchHashRadio.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.SearchHashRadio.AutoSize = true; + this.SearchHashRadio.Checked = true; + this.SearchHashRadio.Location = new System.Drawing.Point(462, 4); + this.SearchHashRadio.Name = "SearchHashRadio"; + this.SearchHashRadio.Size = new System.Drawing.Size(50, 17); + this.SearchHashRadio.TabIndex = 35; + this.SearchHashRadio.TabStop = true; + this.SearchHashRadio.Text = "Hash"; + this.SearchHashRadio.UseVisualStyleBackColor = true; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(8, 6); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(30, 13); + this.label12.TabIndex = 32; + this.label12.Text = "Find:"; + // + // SearchTextBox + // + this.SearchTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.SearchTextBox.Location = new System.Drawing.Point(44, 3); + this.SearchTextBox.Name = "SearchTextBox"; + this.SearchTextBox.Size = new System.Drawing.Size(412, 20); + this.SearchTextBox.TabIndex = 33; + this.SearchTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.SearchTextBox_KeyDown); + // + // SearchButton + // + this.SearchButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.SearchButton.Location = new System.Drawing.Point(570, 2); + this.SearchButton.Name = "SearchButton"; + this.SearchButton.Size = new System.Drawing.Size(68, 23); + this.SearchButton.TabIndex = 34; + this.SearchButton.Text = "Search"; + this.SearchButton.UseVisualStyleBackColor = true; + this.SearchButton.Click += new System.EventHandler(this.SearchButton_Click); + // + // SearchResultsGrid + // + this.SearchResultsGrid.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.SearchResultsGrid.HelpVisible = false; + this.SearchResultsGrid.Location = new System.Drawing.Point(3, 31); + this.SearchResultsGrid.Name = "SearchResultsGrid"; + this.SearchResultsGrid.Size = new System.Drawing.Size(822, 423); + this.SearchResultsGrid.TabIndex = 1; + // + // MainToolbar + // + this.MainToolbar.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.NewButton, + this.OpenButton, + this.SaveButton}); + this.MainToolbar.Location = new System.Drawing.Point(0, 24); + this.MainToolbar.Name = "MainToolbar"; + this.MainToolbar.Size = new System.Drawing.Size(839, 25); + this.MainToolbar.TabIndex = 9; + this.MainToolbar.Text = "Main Toolbar"; + // + // NewButton + // + this.NewButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.NewButton.Image = ((System.Drawing.Image)(resources.GetObject("NewButton.Image"))); + this.NewButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.NewButton.Name = "NewButton"; + this.NewButton.Size = new System.Drawing.Size(32, 22); + this.NewButton.Text = "New..."; + this.NewButton.ButtonClick += new System.EventHandler(this.NewButton_ButtonClick); + // + // OpenButton + // + this.OpenButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.OpenButton.Image = ((System.Drawing.Image)(resources.GetObject("OpenButton.Image"))); + this.OpenButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.OpenButton.Name = "OpenButton"; + this.OpenButton.Size = new System.Drawing.Size(32, 22); + this.OpenButton.Text = "Open..."; + this.OpenButton.ButtonClick += new System.EventHandler(this.OpenButton_ButtonClick); + // + // SaveButton + // + this.SaveButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.SaveButton.Image = ((System.Drawing.Image)(resources.GetObject("SaveButton.Image"))); + this.SaveButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.SaveButton.Name = "SaveButton"; + this.SaveButton.Size = new System.Drawing.Size(32, 22); + this.SaveButton.Text = "Save"; + this.SaveButton.ButtonClick += new System.EventHandler(this.SaveButton_ButtonClick); + // + // MainStatusStrip + // + this.MainStatusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.StatusLabel}); + this.MainStatusStrip.Location = new System.Drawing.Point(0, 535); + this.MainStatusStrip.Name = "MainStatusStrip"; + this.MainStatusStrip.Size = new System.Drawing.Size(839, 22); + this.MainStatusStrip.TabIndex = 7; + this.MainStatusStrip.Text = "Main Status Strip"; + // + // StatusLabel + // + this.StatusLabel.Name = "StatusLabel"; + this.StatusLabel.Size = new System.Drawing.Size(824, 17); + this.StatusLabel.Spring = true; + this.StatusLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // MainMenu + // + this.MainMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.FileMenu, + this.EditMenu, + this.ViewMenu}); + this.MainMenu.Location = new System.Drawing.Point(0, 0); + this.MainMenu.Name = "MainMenu"; + this.MainMenu.Size = new System.Drawing.Size(839, 24); + this.MainMenu.TabIndex = 8; + this.MainMenu.Text = "Main Menu"; + // + // FileMenu + // + this.FileMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.FileNewMenu, + this.FileOpenMenu, + this.FileSaveMenu, + this.FileSaveAsMenu, + this.toolStripSeparator1, + this.FileCloseMenu}); + this.FileMenu.Name = "FileMenu"; + this.FileMenu.Size = new System.Drawing.Size(37, 20); + this.FileMenu.Text = "File"; + // + // FileNewMenu + // + this.FileNewMenu.Name = "FileNewMenu"; + this.FileNewMenu.Size = new System.Drawing.Size(145, 22); + this.FileNewMenu.Text = "New"; + this.FileNewMenu.Click += new System.EventHandler(this.FileNewMenu_Click); + // + // FileOpenMenu + // + this.FileOpenMenu.Name = "FileOpenMenu"; + this.FileOpenMenu.Size = new System.Drawing.Size(145, 22); + this.FileOpenMenu.Text = "Open..."; + this.FileOpenMenu.Click += new System.EventHandler(this.FileOpenMenu_Click); + // + // FileSaveMenu + // + this.FileSaveMenu.Name = "FileSaveMenu"; + this.FileSaveMenu.Size = new System.Drawing.Size(145, 22); + this.FileSaveMenu.Text = "Save"; + this.FileSaveMenu.Click += new System.EventHandler(this.FileSaveMenu_Click); + // + // FileSaveAsMenu + // + this.FileSaveAsMenu.Name = "FileSaveAsMenu"; + this.FileSaveAsMenu.Size = new System.Drawing.Size(145, 22); + this.FileSaveAsMenu.Text = "Save As..."; + this.FileSaveAsMenu.Click += new System.EventHandler(this.FileSaveAsMenu_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(142, 6); + // + // FileCloseMenu + // + this.FileCloseMenu.Name = "FileCloseMenu"; + this.FileCloseMenu.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.F4))); + this.FileCloseMenu.Size = new System.Drawing.Size(145, 22); + this.FileCloseMenu.Text = "Close"; + this.FileCloseMenu.Click += new System.EventHandler(this.FileCloseMenu_Click); + // + // EditMenu + // + this.EditMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.wIPToolStripMenuItem}); + this.EditMenu.Enabled = false; + this.EditMenu.Name = "EditMenu"; + this.EditMenu.Size = new System.Drawing.Size(39, 20); + this.EditMenu.Text = "Edit"; + // + // wIPToolStripMenuItem + // + this.wIPToolStripMenuItem.Name = "wIPToolStripMenuItem"; + this.wIPToolStripMenuItem.Size = new System.Drawing.Size(106, 22); + this.wIPToolStripMenuItem.Text = "[WIP!]"; + // + // ViewMenu + // + this.ViewMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.wIPToolStripMenuItem1}); + this.ViewMenu.Enabled = false; + this.ViewMenu.Name = "ViewMenu"; + this.ViewMenu.Size = new System.Drawing.Size(44, 20); + this.ViewMenu.Text = "View"; + // + // wIPToolStripMenuItem1 + // + this.wIPToolStripMenuItem1.Name = "wIPToolStripMenuItem1"; + this.wIPToolStripMenuItem1.Size = new System.Drawing.Size(106, 22); + this.wIPToolStripMenuItem1.Text = "[WIP!]"; + // + // OpenFileDialog + // + this.OpenFileDialog.Filter = "XML files|*.xml|All files|*.*"; + // + // SaveFileDialog + // + this.SaveFileDialog.Filter = "XML files|*.xml|All files|*.*"; // // RelForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(671, 441); - this.Controls.Add(this.CloseButton); + this.ClientSize = new System.Drawing.Size(839, 557); this.Controls.Add(this.MainTabControl); + this.Controls.Add(this.MainToolbar); + this.Controls.Add(this.MainStatusStrip); + this.Controls.Add(this.MainMenu); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Name = "RelForm"; - this.Text = "REL Viewer - CodeWalker by dexyfex"; + this.Text = "Audio dat.rel Editor - CodeWalker by dexyfex"; this.MainTabControl.ResumeLayout(false); + this.XmlTabPage.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.XmlTextBox)).EndInit(); this.DetailsTabPage.ResumeLayout(false); this.NameTableTabPage.ResumeLayout(false); this.NameTableTabPage.PerformLayout(); this.SearchTabPage.ResumeLayout(false); this.SearchTabPage.PerformLayout(); - this.XmlTabPage.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.XmlTextBox)).EndInit(); + this.MainToolbar.ResumeLayout(false); + this.MainToolbar.PerformLayout(); + this.MainStatusStrip.ResumeLayout(false); + this.MainStatusStrip.PerformLayout(); + this.MainMenu.ResumeLayout(false); + this.MainMenu.PerformLayout(); this.ResumeLayout(false); + this.PerformLayout(); } @@ -287,7 +471,6 @@ private System.Windows.Forms.TabPage NameTableTabPage; private System.Windows.Forms.TabPage DetailsTabPage; private WinForms.TextBoxFix MainTextBox; - private System.Windows.Forms.Button CloseButton; private System.Windows.Forms.TabPage SearchTabPage; private WinForms.PropertyGridFix SearchResultsGrid; private System.Windows.Forms.RadioButton SearchTextRadio; @@ -297,5 +480,25 @@ private System.Windows.Forms.Button SearchButton; private System.Windows.Forms.TabPage XmlTabPage; private FastColoredTextBoxNS.FastColoredTextBox XmlTextBox; + private System.Windows.Forms.ToolStrip MainToolbar; + private System.Windows.Forms.ToolStripSplitButton NewButton; + private System.Windows.Forms.ToolStripSplitButton OpenButton; + private System.Windows.Forms.ToolStripSplitButton SaveButton; + private System.Windows.Forms.StatusStrip MainStatusStrip; + private System.Windows.Forms.ToolStripStatusLabel StatusLabel; + private System.Windows.Forms.MenuStrip MainMenu; + private System.Windows.Forms.ToolStripMenuItem FileMenu; + private System.Windows.Forms.ToolStripMenuItem FileNewMenu; + private System.Windows.Forms.ToolStripMenuItem FileOpenMenu; + private System.Windows.Forms.ToolStripMenuItem FileSaveMenu; + private System.Windows.Forms.ToolStripMenuItem FileSaveAsMenu; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem FileCloseMenu; + private System.Windows.Forms.ToolStripMenuItem EditMenu; + private System.Windows.Forms.ToolStripMenuItem wIPToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem ViewMenu; + private System.Windows.Forms.ToolStripMenuItem wIPToolStripMenuItem1; + private System.Windows.Forms.OpenFileDialog OpenFileDialog; + private System.Windows.Forms.SaveFileDialog SaveFileDialog; } } \ No newline at end of file diff --git a/Forms/RelForm.cs b/Forms/RelForm.cs index 585b0e5..ca544a3 100644 --- a/Forms/RelForm.cs +++ b/Forms/RelForm.cs @@ -1,18 +1,31 @@ using CodeWalker.GameFiles; +using FastColoredTextBoxNS; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; +using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; +using System.Xml; namespace CodeWalker.Forms { public partial class RelForm : Form { + private string xml; + public string Xml + { + get { return xml; } + set + { + xml = value; + UpdateTextBoxFromData(); + } + } private string fileName; @@ -30,9 +43,19 @@ namespace CodeWalker.Forms private RelFile CurrentFile { get; set; } + private bool modified = false; + private bool LoadingXml = false; + private bool DelayHighlight = false; - public RelForm() + private ExploreForm exploreForm = null; + public RpfFileEntry rpfFileEntry { get; private set; } = null; + private MetaFormat metaFormat = MetaFormat.XML; + + + public RelForm(ExploreForm owner) { + exploreForm = owner; + InitializeComponent(); } @@ -40,7 +63,49 @@ namespace CodeWalker.Forms private void UpdateFormTitle() { - Text = fileName + " - REL Viewer - CodeWalker by dexyfex"; + Text = fileName + " - Audio dat.rel Editor - CodeWalker by dexyfex"; + } + + private void UpdateTextBoxFromData() + { + LoadingXml = true; + XmlTextBox.Text = ""; + XmlTextBox.Language = Language.XML; + DelayHighlight = false; + + if (string.IsNullOrEmpty(xml)) + { + LoadingXml = false; + return; + } + //if (xml.Length > (1048576 * 5)) + //{ + // XmlTextBox.Language = Language.Custom; + // XmlTextBox.Text = "[XML size > 10MB - Not shown due to performance limitations - Please use an external viewer for this file.]"; + // return; + //} + //else + if (xml.Length > (1024 * 512)) + { + XmlTextBox.Language = Language.Custom; + DelayHighlight = true; + } + //else + //{ + // XmlTextBox.Language = Language.XML; + //} + + + Cursor = Cursors.WaitCursor; + + + + XmlTextBox.Text = xml; + //XmlTextBox.IsChanged = false; + XmlTextBox.ClearUndo(); + + Cursor = Cursors.Default; + LoadingXml = false; } @@ -59,7 +124,11 @@ namespace CodeWalker.Forms CurrentFile = rel; - XmlTextBox.Text = RelXml.GetXml(rel); + rpfFileEntry = rel?.RpfFileEntry; + + Xml = RelXml.GetXml(rel); + + metaFormat = MetaFormat.AudioRel; StringBuilder sb = new StringBuilder(); if (rel != null) @@ -106,6 +175,216 @@ namespace CodeWalker.Forms } + + + private bool SaveRel(XmlDocument doc) + { + + if (!(exploreForm?.EditMode ?? false)) return false; + if (rpfFileEntry?.Parent == null) return false; + + byte[] data = null; + +#if !DEBUG + try +#endif + { + switch (metaFormat) + { + default: + case MetaFormat.XML: + return false;//what are we even doing here? + case MetaFormat.AudioRel: + var rel = XmlRel.GetRel(doc); + if ((rel?.RelDatasSorted == null) || (rel.RelDatasSorted.Length == 0)) + { + MessageBox.Show("Schema not supported.", "Cannot import REL XML"); + return false; + } + data = rel.Save(); + break; + } + } +#if !DEBUG + catch (Exception ex) + { + MessageBox.Show("Exception encountered!\r\n" + ex.ToString(), "Cannot convert XML"); + return false; + } +#endif + if (data == null) + { + MessageBox.Show("Schema not supported. (Unspecified error - data was null!)", "Cannot convert XML"); + return false; + } + + if (!rpfFileEntry.Path.ToLowerInvariant().StartsWith("mods")) + { + if (MessageBox.Show("This file is NOT located in the mods folder - Are you SURE you want to save this file?\r\nWARNING: This could cause permanent damage to your game!!!", "WARNING: Are you sure about this?", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return false;//that was a close one + } + } + + try + { + if (!(exploreForm?.EnsureRpfValidEncryption(rpfFileEntry.File) ?? false)) return false; + + var newentry = RpfFile.CreateFile(rpfFileEntry.Parent, rpfFileEntry.Name, data); + if (newentry != rpfFileEntry) + { } + rpfFileEntry = newentry; + + exploreForm?.RefreshMainListViewInvoke(); //update the file details in explorer... + + modified = false; + + StatusLabel.Text = metaFormat.ToString() + " file saved successfully at " + DateTime.Now.ToString(); + + return true; //victory! + } + catch (Exception ex) + { + MessageBox.Show("Error saving file to RPF! The RPF archive may be corrupted...\r\n" + ex.ToString(), "Really Bad Error"); + } + + return false; + } + + + + + private bool CloseDocument() + { + if (modified) + { + var res = MessageBox.Show("Do you want to save the current document before closing it?", "Save before closing", MessageBoxButtons.YesNoCancel); + switch (res) + { + case DialogResult.Yes: + SaveDocument(); + break; + case DialogResult.Cancel: + return false; + } + } + + FilePath = ""; + FileName = ""; + Xml = ""; + RelPropertyGrid.SelectedObject = null; + MainTextBox.Text = ""; + modified = false; + rpfFileEntry = null; + + return true; + } + private void NewDocument() + { + if (!CloseDocument()) return; + + FileName = "New.xml"; + rpfFileEntry = null; + + //TODO: decide XML/REL format..? + } + private void OpenDocument() + { + if (OpenFileDialog.ShowDialog() != DialogResult.OK) return; + + if (!CloseDocument()) return; + + var fn = OpenFileDialog.FileName; + + if (!File.Exists(fn)) return; //couldn't find file? + + Xml = File.ReadAllText(fn); + + modified = false; + FilePath = fn; + FileName = new FileInfo(fn).Name; + RelPropertyGrid.SelectedObject = null; + MainTextBox.Text = ""; + rpfFileEntry = null; + + //TODO: open raw REL..? + } + private void SaveDocument(bool saveAs = false) + { + if ((metaFormat != MetaFormat.XML) && (saveAs == false)) + { + var doc = new XmlDocument(); + try + { + doc.LoadXml(xml); + } + catch (Exception ex) + { + MessageBox.Show("There's something wrong with your XML document:\r\n" + ex.Message, "Unable to parse XML"); + return; + } + if (SaveRel(doc)) + { + return; + } + //if REL saving failed for whatever reason, fallback to saving the XML in the filesystem. + saveAs = true; + } + + if (string.IsNullOrEmpty(FileName)) saveAs = true; + if (string.IsNullOrEmpty(FilePath)) saveAs = true; + else if ((FilePath.ToLowerInvariant().StartsWith(GTAFolder.CurrentGTAFolder.ToLowerInvariant()))) saveAs = true; + if (!File.Exists(FilePath)) saveAs = true; + + var fn = FilePath; + if (saveAs) + { + if (!string.IsNullOrEmpty(fn)) + { + var dir = new FileInfo(fn).DirectoryName; + if (!Directory.Exists(dir)) dir = ""; + SaveFileDialog.InitialDirectory = dir; + } + SaveFileDialog.FileName = FileName; + if (SaveFileDialog.ShowDialog() != DialogResult.OK) return; + fn = SaveFileDialog.FileName; + } + + File.WriteAllText(fn, xml); + + modified = false; + FilePath = fn; + FileName = new FileInfo(fn).Name; + metaFormat = MetaFormat.XML; + } + + + + + + + Style BlueStyle = new TextStyle(Brushes.Blue, null, FontStyle.Regular); + Style RedStyle = new TextStyle(Brushes.Red, null, FontStyle.Regular); + Style MaroonStyle = new TextStyle(Brushes.Maroon, null, FontStyle.Regular); + + private void HTMLSyntaxHighlight(Range range) + { + //clear style of changed range + range.ClearStyle(BlueStyle, MaroonStyle, RedStyle); + //tag brackets highlighting + range.SetStyle(BlueStyle, @"<|/>|"); + //tag name + range.SetStyle(MaroonStyle, @"<(?[!\w]+)"); + //end of tag + range.SetStyle(MaroonStyle, @"\w+)>"); + //attributes + range.SetStyle(RedStyle, @"(?\S+?)='[^']*'|(?\S+)=""[^""]*""|(?\S+)=\S+"); + //attribute values + range.SetStyle(BlueStyle, @"\S+?=(?'[^']*')|\S+=(?""[^""]*"")|\S+=(?\S+)"); + } + + + private void Search() { SearchResultsGrid.SelectedObject = null; @@ -167,12 +446,6 @@ namespace CodeWalker.Forms } - - private void CloseButton_Click(object sender, EventArgs e) - { - Close(); - } - private void SearchButton_Click(object sender, EventArgs e) { Search(); @@ -185,5 +458,65 @@ namespace CodeWalker.Forms Search(); } } + + private void FileNewMenu_Click(object sender, EventArgs e) + { + NewDocument(); + } + + private void FileOpenMenu_Click(object sender, EventArgs e) + { + OpenDocument(); + } + + private void FileSaveMenu_Click(object sender, EventArgs e) + { + SaveDocument(); + } + + private void FileSaveAsMenu_Click(object sender, EventArgs e) + { + SaveDocument(true); + } + + private void FileCloseMenu_Click(object sender, EventArgs e) + { + Close(); + } + + private void NewButton_ButtonClick(object sender, EventArgs e) + { + NewDocument(); + } + + private void OpenButton_ButtonClick(object sender, EventArgs e) + { + OpenDocument(); + } + + private void SaveButton_ButtonClick(object sender, EventArgs e) + { + SaveDocument(); + } + + private void XmlTextBox_TextChanged(object sender, TextChangedEventArgs e) + { + if (!LoadingXml) + { + xml = XmlTextBox.Text; + modified = true; + } + } + + private void XmlTextBox_VisibleRangeChangedDelayed(object sender, EventArgs e) + { + //this approach is much faster to load, but no outlining is available + + //highlight only visible area of text + if (DelayHighlight) + { + HTMLSyntaxHighlight(XmlTextBox.VisibleRange); + } + } } } diff --git a/Forms/RelForm.resx b/Forms/RelForm.resx index 4d27add..0ddade0 100644 --- a/Forms/RelForm.resx +++ b/Forms/RelForm.resx @@ -135,7 +135,51 @@ CgAAAAAAAAAATgABAAH4/////P///woAAAAAAAAAAKQAAQAB9/////z///8KAAAAAAAAAACWAAEACw== + + 22, 15 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADESURBVDhPzZI7DgIhGIQ5grUnsPQMnMgLWMo1bDyJiYUV + h7CxEo1Aiw7+E9ldWF+Nk0w2wMy3/z5UqRDCwjk3iTEmGmvsS6Ste2gtJYvrdjklJK9xLtGhcAeEdqtZ + Ouw3uUgA1tgXSH0SGdsyfD0dcwHXAmqRk0pXCNMsN+y893OpPYVDjFw8d9JaD2yMqUNYgjkBCmd36bgJ + 6b+DMUAJkXr9K9QANM6QkfpD/f/gYwCESfgnfgWg/gcw5peAdyzxX6TUDfMCML1omZa9AAAAAElFTkSu + QmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEcSURBVDhPlZKxqsIwFIb7Bvc+idxHuPQVXFpQcOhe8Amc + OqqzCBdU6HQfQIfunVwKoi7FQQeF9GrajufmhDYkTaMY+EjPyf//TZtY9aCUfhVFQRggQbBfSV4PFJ8v + GekMf8HqzqE3jXhIhRwsqKyWxYpJ3bzcMpBD4jgG27Y1RACaZ+sEPvoLbmqCa/f7AzLyJ2gGcDO+bXe6 + ajugDypMiBJQluU3f2DiZ+YmT3eANWIyIyKgFsv/AOs2k4wSgIXneRBFEaRpyhew10ZbwNb3fU1oYrPe + qAF5no/CMNSEJsbjiRqAty9JEk1ownEcNaA6BeK6riY2cdgf+SwC2Gf8BEGgCU2slis+iwB2mQZ4Ak3h + K0QAIeQTi/cp4B9tCZE2c6oRhQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABWSURBVDhPY6AK+Pbt238S8PsvX74YQLVCAEjCyckJjj+8 + /wjHyGIguq2tDdMQUgwAYZghUO2kGwDCID1Q7fgNQMbIamhrADF41IBBaQA5GKqdEsDAAADtDPd9n5qK + lQAAAABJRU5ErkJggg== + + + + 143, 15 + + + 281, 15 + + + 391, 15 + + + 526, 15 + AAABAAMAICAAAAAAGACoDAAANgAAABAQAAAAABgAaAMAAN4MAABAQAAAAAAYACgyAABGEAAAKAAAACAA From 33af1b45f8ef085c7c3dd6db0767be25b847b287 Mon Sep 17 00:00:00 2001 From: dexy Date: Sun, 20 Jan 2019 09:34:44 +1100 Subject: [PATCH 106/158] RPF Explorer import/export .rel XML options --- CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs | 11 +++++++++++ ExploreForm.cs | 16 ++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs index 07e42a7..f52b643 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs @@ -46,6 +46,11 @@ namespace CodeWalker.GameFiles CutFile cut = RpfFile.GetFile(e, data); return GetXml(cut, out filename); } + else if (fnl.EndsWith(".rel")) + { + RelFile rel = RpfFile.GetFile(e, data); + return GetXml(rel, out filename); + } filename = fn; return string.Empty; } @@ -99,6 +104,12 @@ namespace CodeWalker.GameFiles filename = string.Empty; return string.Empty; } + public static string GetXml(RelFile rel, out string filename) + { + var fn = (rel?.RpfFileEntry?.Name) ?? ""; + filename = fn + ".xml"; + return RelXml.GetXml(rel); + } diff --git a/ExploreForm.cs b/ExploreForm.cs index afe8792..82f73c5 100644 --- a/ExploreForm.cs +++ b/ExploreForm.cs @@ -1316,6 +1316,7 @@ namespace CodeWalker case FileTypeAction.ViewYtyp: case FileTypeAction.ViewJPso: case FileTypeAction.ViewCut: + case FileTypeAction.ViewRel: return true; } return false; @@ -2269,6 +2270,10 @@ namespace CodeWalker MessageBox.Show(fname + ": RBF XML import not yet supported.", "Cannot import XML"); continue; } + if (fnamel.EndsWith(".rel.xml")) + { + mformat = MetaFormat.AudioRel; + } fname = fname.Substring(0, fname.Length - trimlength); fnamel = fnamel.Substring(0, fnamel.Length - trimlength); @@ -2311,6 +2316,17 @@ namespace CodeWalker //todo! break; } + case MetaFormat.AudioRel: + { + var rel = XmlRel.GetRel(doc); + if ((rel.RelDatasSorted == null) || (rel.RelDatas == null)) + { + MessageBox.Show(fname + ": Schema not supported.", "Cannot import REL XML"); + continue; + } + data = rel.Save(); + break; + } } From 053d561480f2d953e8a958e3fd626268cb9bba1c Mon Sep 17 00:00:00 2001 From: dexy Date: Sun, 20 Jan 2019 10:04:52 +1100 Subject: [PATCH 107/158] Remembering custom names from imported .rel.xml and .pso.xml files --- CodeWalker.Core/GameFiles/FileTypes/RelFile.cs | 1 + CodeWalker.Core/GameFiles/MetaTypes/XmlPso.cs | 1 + 2 files changed, 2 insertions(+) diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index ef2073c..ff5c716 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -14331,6 +14331,7 @@ namespace CodeWalker.GameFiles } else { + JenkIndex.Ensure(str); return JenkHash.GenHash(str); } } diff --git a/CodeWalker.Core/GameFiles/MetaTypes/XmlPso.cs b/CodeWalker.Core/GameFiles/MetaTypes/XmlPso.cs index 6db51fd..27032ef 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/XmlPso.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/XmlPso.cs @@ -1087,6 +1087,7 @@ namespace CodeWalker.GameFiles } else { + JenkIndex.Ensure(str); return JenkHash.GenHash(str); } } From d028f6e8761643feb65d8ae305ddb717c7bee680 Mon Sep 17 00:00:00 2001 From: dexy Date: Sun, 20 Jan 2019 10:27:46 +1100 Subject: [PATCH 108/158] XML, .meta, .txt files can now be edited directly when RPF Explorer in edit mode --- ExploreForm.cs | 16 ++++----- Forms/TextForm.cs | 80 +++++++++++++++++++++++++++++++++++++++++-- Forms/XmlForm.cs | 86 +++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 168 insertions(+), 14 deletions(-) diff --git a/ExploreForm.cs b/ExploreForm.cs index 82f73c5..8525d7e 100644 --- a/ExploreForm.cs +++ b/ExploreForm.cs @@ -1361,10 +1361,10 @@ namespace CodeWalker switch (ft.DefaultAction) { case FileTypeAction.ViewText: - ViewText(name, path, data); + ViewText(name, path, data, item.File); break; case FileTypeAction.ViewXml: - ViewXml(name, path, data); + ViewXml(name, path, data, item.File); break; case FileTypeAction.ViewYtd: ViewYtd(name, path, data, item.File); @@ -1467,19 +1467,19 @@ namespace CodeWalker f.Show(); f.LoadData(name, path, data); } - private void ViewXml(string name, string path, byte[] data) + private void ViewXml(string name, string path, byte[] data, RpfFileEntry e) { string xml = Encoding.UTF8.GetString(data); - XmlForm f = new XmlForm(); + XmlForm f = new XmlForm(this); f.Show(); - f.LoadXml(name, path, xml); + f.LoadXml(name, path, xml, e); } - private void ViewText(string name, string path, byte[] data) + private void ViewText(string name, string path, byte[] data, RpfFileEntry e) { string txt = Encoding.UTF8.GetString(data); - TextForm f = new TextForm(); + TextForm f = new TextForm(this); f.Show(); - f.LoadText(name, path, txt); + f.LoadText(name, path, txt, e); } private void ViewYtd(string name, string path, byte[] data, RpfFileEntry e) { diff --git a/Forms/TextForm.cs b/Forms/TextForm.cs index 484dbcd..3b7929d 100644 --- a/Forms/TextForm.cs +++ b/Forms/TextForm.cs @@ -1,4 +1,5 @@ -using CodeWalker.Properties; +using CodeWalker.GameFiles; +using CodeWalker.Properties; using FastColoredTextBoxNS; using System; using System.Collections.Generic; @@ -40,19 +41,26 @@ namespace CodeWalker.Forms private bool modified = false; + private ExploreForm exploreForm = null; + public RpfFileEntry rpfFileEntry { get; private set; } = null; - public TextForm() + + + public TextForm(ExploreForm owner) { + exploreForm = owner; + InitializeComponent(); } - public void LoadText(string filename, string filepath, string text) + public void LoadText(string filename, string filepath, string text, RpfFileEntry e) { FileName = filename; FilePath = filepath; TextValue = text; + rpfFileEntry = e; modified = false; } @@ -128,6 +136,16 @@ namespace CodeWalker.Forms } private void SaveDocument(bool saveAs = false) { + if (saveAs == false) + { + if (SaveToRPF(textValue)) + { + return; + } + //if saving to RPF failed for whatever reason, fallback to saving the file in the filesystem. + saveAs = true; + } + if (string.IsNullOrEmpty(FileName)) saveAs = true; if (string.IsNullOrEmpty(FilePath)) saveAs = true; else if ((FilePath.ToLowerInvariant().StartsWith(GTAFolder.CurrentGTAFolder.ToLowerInvariant()))) saveAs = true; @@ -154,6 +172,62 @@ namespace CodeWalker.Forms FileName = new FileInfo(fn).Name; } + + + + private bool SaveToRPF(string txt) + { + + if (!(exploreForm?.EditMode ?? false)) return false; + if (rpfFileEntry?.Parent == null) return false; + + byte[] data = null; + + data = Encoding.UTF8.GetBytes(txt); + + if (data == null) + { + MessageBox.Show("Unspecified error - data was null!", "Cannot save file"); + return false; + } + + if (!rpfFileEntry.Path.ToLowerInvariant().StartsWith("mods")) + { + if (MessageBox.Show("This file is NOT located in the mods folder - Are you SURE you want to save this file?\r\nWARNING: This could cause permanent damage to your game!!!", "WARNING: Are you sure about this?", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return false;//that was a close one + } + } + + try + { + if (!(exploreForm?.EnsureRpfValidEncryption(rpfFileEntry.File) ?? false)) return false; + + var newentry = RpfFile.CreateFile(rpfFileEntry.Parent, rpfFileEntry.Name, data); + if (newentry != rpfFileEntry) + { } + rpfFileEntry = newentry; + + exploreForm?.RefreshMainListViewInvoke(); //update the file details in explorer... + + modified = false; + + StatusLabel.Text = "Text file saved successfully at " + DateTime.Now.ToString(); + + return true; //victory! + } + catch (Exception ex) + { + MessageBox.Show("Error saving file to RPF! The RPF archive may be corrupted...\r\n" + ex.ToString(), "Really Bad Error"); + } + + return false; + } + + + + + private void MainTextBox_TextChanged(object sender, TextChangedEventArgs e) { textValue = MainTextBox.Text; diff --git a/Forms/XmlForm.cs b/Forms/XmlForm.cs index d814453..778638f 100644 --- a/Forms/XmlForm.cs +++ b/Forms/XmlForm.cs @@ -1,4 +1,5 @@ -using CodeWalker.Properties; +using CodeWalker.GameFiles; +using CodeWalker.Properties; using FastColoredTextBoxNS; using System; using System.Collections.Generic; @@ -10,6 +11,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; +using System.Xml; namespace CodeWalker.Forms { @@ -42,19 +44,25 @@ namespace CodeWalker.Forms private bool LoadingXml = false; private bool DelayHighlight = false; + private ExploreForm exploreForm = null; + public RpfFileEntry rpfFileEntry { get; private set; } = null; - public XmlForm() + + public XmlForm(ExploreForm owner) { + exploreForm = owner; + InitializeComponent(); } - public void LoadXml(string filename, string filepath, string xml) + public void LoadXml(string filename, string filepath, string xml, RpfFileEntry e) { FileName = filename; FilePath = filepath; Xml = xml; + rpfFileEntry = e; modified = false; } @@ -153,6 +161,26 @@ namespace CodeWalker.Forms } private void SaveDocument(bool saveAs = false) { + if (saveAs == false) + { + var doc = new XmlDocument(); + try + { + doc.LoadXml(xml); + } + catch (Exception ex) + { + MessageBox.Show("There's something wrong with your XML document:\r\n" + ex.Message, "Unable to parse XML"); + return; + } + if (SaveToRPF(xml)) + { + return; + } + //if saving to RPF failed for whatever reason, fallback to saving the file in the filesystem. + saveAs = true; + } + if (string.IsNullOrEmpty(FileName)) saveAs = true; if (string.IsNullOrEmpty(FilePath)) saveAs = true; else if ((FilePath.ToLowerInvariant().StartsWith(GTAFolder.CurrentGTAFolder.ToLowerInvariant()))) saveAs = true; @@ -183,6 +211,58 @@ namespace CodeWalker.Forms + private bool SaveToRPF(string txt) + { + + if (!(exploreForm?.EditMode ?? false)) return false; + if (rpfFileEntry?.Parent == null) return false; + + byte[] data = null; + + data = Encoding.UTF8.GetBytes(txt); + + if (data == null) + { + MessageBox.Show("Unspecified error - data was null!", "Cannot save XML file"); + return false; + } + + if (!rpfFileEntry.Path.ToLowerInvariant().StartsWith("mods")) + { + if (MessageBox.Show("This file is NOT located in the mods folder - Are you SURE you want to save this file?\r\nWARNING: This could cause permanent damage to your game!!!", "WARNING: Are you sure about this?", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return false;//that was a close one + } + } + + try + { + if (!(exploreForm?.EnsureRpfValidEncryption(rpfFileEntry.File) ?? false)) return false; + + var newentry = RpfFile.CreateFile(rpfFileEntry.Parent, rpfFileEntry.Name, data); + if (newentry != rpfFileEntry) + { } + rpfFileEntry = newentry; + + exploreForm?.RefreshMainListViewInvoke(); //update the file details in explorer... + + modified = false; + + StatusLabel.Text = "XML file saved successfully at " + DateTime.Now.ToString(); + + return true; //victory! + } + catch (Exception ex) + { + MessageBox.Show("Error saving file to RPF! The RPF archive may be corrupted...\r\n" + ex.ToString(), "Really Bad Error"); + } + + return false; + } + + + + Style BlueStyle = new TextStyle(Brushes.Blue, null, FontStyle.Regular); From 63a7b1bceb41bdb112a2250a43f4ddbd22f95ebd Mon Sep 17 00:00:00 2001 From: dexy Date: Sun, 20 Jan 2019 10:45:16 +1100 Subject: [PATCH 109/158] Updated names for rel.xml --- .../GameFiles/FileTypes/RelFile.cs | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index ff5c716..25a5f8e 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -6291,8 +6291,8 @@ namespace CodeWalker.GameFiles public int Unk08 { get; set; } public int Unk09 { get; set; } public int Unk10 { get; set; } - public MetaHash Unk11 { get; set; } - public MetaHash Unk12 { get; set; } + public MetaHash Interior { get; set; } + public MetaHash Room { get; set; } public MetaHash Unk13 { get; set; } public float Unk14 { get; set; } public ushort Unk15 { get; set; } @@ -6320,8 +6320,8 @@ namespace CodeWalker.GameFiles Unk08 = br.ReadInt32(); Unk09 = br.ReadInt32(); Unk10 = br.ReadInt32(); - Unk11 = br.ReadUInt32(); - Unk12 = br.ReadUInt32(); + Interior = br.ReadUInt32(); + Room = br.ReadUInt32(); Unk13 = br.ReadUInt32(); Unk14 = br.ReadSingle(); Unk15 = br.ReadUInt16(); @@ -6351,8 +6351,8 @@ namespace CodeWalker.GameFiles bw.Write(Unk08); bw.Write(Unk09); bw.Write(Unk10); - bw.Write(Unk11); - bw.Write(Unk12); + bw.Write(Interior); + bw.Write(Room); bw.Write(Unk13); bw.Write(Unk14); bw.Write(Unk15); @@ -6375,8 +6375,8 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk08", Unk08.ToString()); RelXml.ValueTag(sb, indent, "Unk09", Unk09.ToString()); RelXml.ValueTag(sb, indent, "Unk10", Unk10.ToString()); - RelXml.StringTag(sb, indent, "Unk11", RelXml.HashString(Unk11)); - RelXml.StringTag(sb, indent, "Unk12", RelXml.HashString(Unk12)); + RelXml.StringTag(sb, indent, "Interior", RelXml.HashString(Interior)); + RelXml.StringTag(sb, indent, "Room", RelXml.HashString(Room)); RelXml.StringTag(sb, indent, "Unk13", RelXml.HashString(Unk13)); RelXml.ValueTag(sb, indent, "Unk14", FloatUtil.ToString(Unk14)); RelXml.ValueTag(sb, indent, "Unk15", Unk15.ToString()); @@ -6399,8 +6399,8 @@ namespace CodeWalker.GameFiles Unk08 = Xml.GetChildIntAttribute(node, "Unk08", "value"); Unk09 = Xml.GetChildIntAttribute(node, "Unk09", "value"); Unk10 = Xml.GetChildIntAttribute(node, "Unk10", "value"); - Unk11 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk11")); - Unk12 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk12")); + Interior = XmlRel.GetHash(Xml.GetChildInnerText(node, "Interior")); + Room = XmlRel.GetHash(Xml.GetChildInnerText(node, "Room")); Unk13 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk13")); Unk14 = Xml.GetChildFloatAttribute(node, "Unk14", "value"); Unk15 = (ushort)Xml.GetChildUIntAttribute(node, "Unk15", "value"); @@ -11051,7 +11051,7 @@ namespace CodeWalker.GameFiles public FlagsUint Unk00 { get; set; } //2432719400 0x91005A28 public MetaHash Engine { get; set; } public MetaHash EngineGranular { get; set; } - public MetaHash Unk03 { get; set; } + public MetaHash Horns { get; set; } public MetaHash DoorOpen { get; set; } public MetaHash DoorClose { get; set; } public MetaHash Unk06 { get; set; } @@ -11138,7 +11138,7 @@ namespace CodeWalker.GameFiles Unk00 = br.ReadUInt32(); //2432719400 0x91005A28 Engine = br.ReadUInt32(); EngineGranular = br.ReadUInt32(); - Unk03 = br.ReadUInt32(); + Horns = br.ReadUInt32(); DoorOpen = br.ReadUInt32(); DoorClose = br.ReadUInt32(); Unk06 = br.ReadUInt32(); @@ -11315,7 +11315,7 @@ namespace CodeWalker.GameFiles bw.Write(Unk00); //2432719400 0x91005A28 bw.Write(Engine); bw.Write(EngineGranular); - bw.Write(Unk03); + bw.Write(Horns); bw.Write(DoorOpen); bw.Write(DoorClose); bw.Write(Unk06); @@ -11406,7 +11406,7 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk00", "0x" + Unk00.Hex); RelXml.StringTag(sb, indent, "Engine", RelXml.HashString(Engine)); RelXml.StringTag(sb, indent, "EngineGranular", RelXml.HashString(EngineGranular)); - RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); + RelXml.StringTag(sb, indent, "Horns", RelXml.HashString(Horns)); RelXml.StringTag(sb, indent, "DoorOpen", RelXml.HashString(DoorOpen)); RelXml.StringTag(sb, indent, "DoorClose", RelXml.HashString(DoorClose)); RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); @@ -11482,7 +11482,7 @@ namespace CodeWalker.GameFiles Unk00 = Xml.GetChildUIntAttribute(node, "Unk00", "value"); Engine = XmlRel.GetHash(Xml.GetChildInnerText(node, "Engine")); EngineGranular = XmlRel.GetHash(Xml.GetChildInnerText(node, "EngineGranular")); - Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + Horns = XmlRel.GetHash(Xml.GetChildInnerText(node, "Horns")); DoorOpen = XmlRel.GetHash(Xml.GetChildInnerText(node, "DoorOpen")); DoorClose = XmlRel.GetHash(Xml.GetChildInnerText(node, "DoorClose")); Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); From 6d8a7856356e3d9fd2121aa64cb59e494639cb30 Mon Sep 17 00:00:00 2001 From: dexy Date: Sun, 20 Jan 2019 16:54:42 +1100 Subject: [PATCH 110/158] XML editing for audioconfig.dat4.rel --- .../GameFiles/FileTypes/RelFile.cs | 970 +++++++++++++++++- CodeWalker.Core/GameFiles/GameFileCache.cs | 97 +- CodeWalker.Core/Utils/Xml.cs | 45 + 3 files changed, 1020 insertions(+), 92 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index 25a5f8e..b72eb23 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -75,7 +75,7 @@ namespace CodeWalker.GameFiles public uint[] NameTableOffsets { get; set; } public string[] NameTable { get; set; } public uint IndexCount { get; set; } - public uint IndexStringFlags { get; set; } + public uint IndexStringFlags { get; set; } = 2524; public RelIndexHash[] IndexHashes { get; set; } public RelIndexString[] IndexStrings { get; set; } public uint HashTableCount { get; set; } @@ -87,10 +87,10 @@ namespace CodeWalker.GameFiles public RelData[] RelDatas { get; set; } public RelData[] RelDatasSorted { get; set; } - //testing zone for decoding .rel audio files. - public Dictionary RelDataDict { get; set; } = new Dictionary(); + public bool IsAudioConfig { get; set; } + //fields used by the editor: public bool HasChanged { get; set; } = false; @@ -156,6 +156,7 @@ namespace CodeWalker.GameFiles { if ((RelType == RelDatFileType.Dat4) && (NameTableLength == 4))//audioconfig.dat4.rel //checking NameTableLength here doesn't make sense! { + IsAudioConfig = true; IndexStringFlags = br.ReadUInt32(); //what is this? 2524 if (IndexStringFlags != 2524) { } @@ -174,6 +175,7 @@ namespace CodeWalker.GameFiles ristr.Offset = br.ReadUInt32(); ristr.Length = br.ReadUInt32(); indexstrs[i] = ristr; + JenkIndex.Ensure(ristr.Name.ToLowerInvariant()); } IndexStrings = indexstrs; } @@ -431,8 +433,22 @@ namespace CodeWalker.GameFiles private RelData ReadData4(RelData d, BinaryReader br) { - if (NameTableLength == 4) //(for audioconfig.dat4.rel) + if (IsAudioConfig) //(for audioconfig.dat4.rel) { + switch ((Dat4ConfigType)d.TypeID) + { + case Dat4ConfigType.Int: return new Dat4ConfigInt(d, br); + case Dat4ConfigType.Int2: return new Dat4ConfigInt2(d, br); + case Dat4ConfigType.Float: return new Dat4ConfigFloat(d, br); + case Dat4ConfigType.String: return new Dat4ConfigString(d, br); + case Dat4ConfigType.Orientation: return new Dat4ConfigOrientation(d, br); + case Dat4ConfigType.VariableList: return new Dat4ConfigVariableList(d, br); + case Dat4ConfigType.WaveSlot: return new Dat4ConfigWaveSlot(d, br); + case Dat4ConfigType.WaveSlotsList: return new Dat4ConfigWaveSlotsList(d, br); + case Dat4ConfigType.UnkER: return new Dat4ConfigUnkER(d, br); + default: + break; + } } else //(for eg speech.dat4.rel) { @@ -797,6 +813,32 @@ namespace CodeWalker.GameFiles default: return new Dat151RelData(this, (Dat151RelType)dataType); } + case RelDatFileType.Dat4: + if (IsAudioConfig) + { + switch((Dat4ConfigType)dataType) + { + case Dat4ConfigType.Int: return new Dat4ConfigInt(this); + case Dat4ConfigType.Int2: return new Dat4ConfigInt2(this); + case Dat4ConfigType.Float: return new Dat4ConfigFloat(this); + case Dat4ConfigType.String: return new Dat4ConfigString(this); + case Dat4ConfigType.Orientation: return new Dat4ConfigOrientation(this); + case Dat4ConfigType.VariableList: return new Dat4ConfigVariableList(this); + case Dat4ConfigType.WaveSlot: return new Dat4ConfigWaveSlot(this); + case Dat4ConfigType.WaveSlotsList: return new Dat4ConfigWaveSlotsList(this); + case Dat4ConfigType.UnkER: return new Dat4ConfigUnkER(this); + default: + d = new RelData(this); + d.TypeID = (byte)dataType; + return d; + } + } + else + { + d = new RelData(this); + d.TypeID = (byte)dataType; + return d; + } default: d = new RelData(this); d.TypeID = (byte)dataType; @@ -847,7 +889,12 @@ namespace CodeWalker.GameFiles switch (RelType) { case RelDatFileType.Dat4://TODO! - return; + if (!IsAudioConfig) + { + DataBlock = null; + return; + } + break; } @@ -910,10 +957,17 @@ namespace CodeWalker.GameFiles break; } break; - //case RelDatFileType.Dat4://TODO! - //case RelDatFileType.Dat54DataEntries://TODO! - // //default://TODO..? - // return; + case RelDatFileType.Dat4: + if (IsAudioConfig) + { + switch ((Dat4ConfigType)rd.TypeID) + { + case Dat4ConfigType.Orientation: + while ((ms.Position & 0xF) != 0) bw.Write((byte)0); //align to nearest 16 bytes + break; + } + } + break; } @@ -949,7 +1003,8 @@ namespace CodeWalker.GameFiles switch (RelType) { case RelDatFileType.Dat4://TODO! - return; + if(!IsAudioConfig) return; + break; } @@ -958,8 +1013,6 @@ namespace CodeWalker.GameFiles switch (RelType) { case RelDatFileType.Dat15DynamicMixer: - //don't sort? sort alphabetically? - //break; case RelDatFileType.Dat149: case RelDatFileType.Dat150: case RelDatFileType.Dat151: @@ -977,31 +1030,41 @@ namespace CodeWalker.GameFiles }); break; default: - sorted.Sort((a, b) => { return ((uint)a.NameHash).CompareTo((uint)b.NameHash); }); + if (!IsAudioConfig)//don't sort audioconfig + { + sorted.Sort((a, b) => { return ((uint)a.NameHash).CompareTo((uint)b.NameHash); }); + } break; } RelDatas = sorted.ToArray(); - - var hashes = new RelIndexHash[RelDatas.Length]; - for (int i = 0; i < RelDatas.Length; i++) - { - var rd = RelDatas[i]; - hashes[i] = new RelIndexHash() { Name = rd.NameHash, Offset = rd.DataOffset, Length = rd.DataLength }; - } - //if (hashes.Length != IndexHashes.Length) - //{ } - - IndexHashes = hashes; - //IndexCount = (uint)hashes.Length; - - if ((RelType == RelDatFileType.Dat4) && (NameTableLength == 4)) + if (IsAudioConfig) { + var strs = new RelIndexString[RelDatas.Length]; + for (int i = 0; i < RelDatas.Length; i++) + { + var rd = RelDatas[i]; + strs[i] = new RelIndexString() { Name = rd.Name, Offset = rd.DataOffset, Length = rd.DataLength }; + } + IndexStrings = strs; IndexCount = (uint)(IndexStrings?.Length ?? 0); } else { + + var hashes = new RelIndexHash[RelDatas.Length]; + for (int i = 0; i < RelDatas.Length; i++) + { + var rd = RelDatas[i]; + hashes[i] = new RelIndexHash() { Name = rd.NameHash, Offset = rd.DataOffset, Length = rd.DataLength }; + } + //if (hashes.Length != IndexHashes.Length) + //{ } + + IndexHashes = hashes; + //IndexCount = (uint)hashes.Length; + IndexCount = (uint)(IndexHashes?.Length ?? 0); } } @@ -1009,12 +1072,6 @@ namespace CodeWalker.GameFiles { if (RelDatasSorted == null) return; - switch (RelType) - { - case RelDatFileType.Dat4://TODO! - return; - } - var htoffsets = new List(); foreach (var rd in RelDatasSorted) { @@ -1068,11 +1125,6 @@ namespace CodeWalker.GameFiles } private void BuildPackTable() { - switch (RelType) - { - case RelDatFileType.Dat4://TODO! - return; - } var ptoffsets = new List(); foreach (var rd in RelDatasSorted) @@ -1137,7 +1189,7 @@ namespace CodeWalker.GameFiles break; } - if ((relType != RelDatFileType.Dat54DataEntries))// && (relType != RelDatFileType.Dat4)) + if (relType != RelDatFileType.Dat4) { return; } @@ -1326,7 +1378,7 @@ namespace CodeWalker.GameFiles bw.Write(IndexCount); if (IndexCount > 0) { - if ((RelType == RelDatFileType.Dat4) && (NameTableLength == 4))//audioconfig.dat4.rel //checking NameTableLength here doesn't make sense! + if (IsAudioConfig)//audioconfig.dat4.rel { bw.Write(IndexStringFlags); //should be 2524..? could be a length? for (uint i = 0; i < IndexCount; i++) @@ -1932,13 +1984,20 @@ namespace CodeWalker.GameFiles public void WriteAudioTracksXml(StringBuilder sb, int indent) { if (AudioTrackHashes == null) return; - RelXml.OpenTag(sb, indent, "AudioTracks"); - var cind = indent + 1; - foreach (var hash in AudioTrackHashes) + if (AudioTrackHashes.Length > 0) { - RelXml.StringTag(sb, cind, "Item", RelXml.HashString(hash)); + RelXml.OpenTag(sb, indent, "AudioTracks"); + var cind = indent + 1; + foreach (var hash in AudioTrackHashes) + { + RelXml.StringTag(sb, cind, "Item", RelXml.HashString(hash)); + } + RelXml.CloseTag(sb, indent, "AudioTracks"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "AudioTracks"); } - RelXml.CloseTag(sb, indent, "AudioTracks"); } @@ -14134,8 +14193,800 @@ namespace CodeWalker.GameFiles + #region dat4 (config) + public enum Dat4ConfigType : byte + { + Int = 0, + Int2 = 1, + Float = 2, + String = 3, + Orientation = 5, + VariableList = 7, + WaveSlot = 8, + WaveSlotsList = 9, + UnkER = 10, + } + + [TC(typeof(EXP))] public class Dat4ConfigData : RelData + { + public Dat4ConfigType Type { get; set; } + public uint NameTableOffset { get; set; } + public FlagsUint Flags { get; set; } = 0xAAAAAAAA; + + public Dat4ConfigData(RelFile rel) : base(rel) { } + public Dat4ConfigData(RelFile rel, Dat4ConfigType type) : base(rel) + { + Type = type; + TypeID = (byte)type; + } + public Dat4ConfigData(RelData d, BinaryReader br) : base(d) + { + Type = (Dat4ConfigType)TypeID; + + br.BaseStream.Position = 0; //1 byte was read already (TypeID) + + NameTableOffset = ((br.ReadUInt32() >> 8) & 0xFFFFFF); + Flags = br.ReadUInt32(); + + if (Flags != 0xAAAAAAAA) + { } + } + + public override void Write(BinaryWriter bw) + { + //don't use this as a fallback case, since it won't write as raw data + //base.Write(bw); + var val = ((NameTableOffset & 0xFFFFFF) << 8) + TypeID; + bw.Write(val); + bw.Write(Flags); + } + + public override void WriteXml(StringBuilder sb, int indent) + { + //base.WriteXml(sb, indent); + //RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + } + public override void ReadXml(XmlNode node) + { + //base.ReadXml(node); + //Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Flags = 0xAAAAAAAA; //it's always this value so what's the point of putting it in XML? + } + + public override string ToString() + { + return GetBaseString() + ": " + Type.ToString(); + } + } + + [TC(typeof(EXP))] public class Dat4ConfigInt : Dat4ConfigData + { + public int Value { get; set; } + + public Dat4ConfigInt(RelFile rel) : base(rel) + { + Type = Dat4ConfigType.Int; + TypeID = (byte)Type; + } + public Dat4ConfigInt(RelData d, BinaryReader br) : base(d, br) + { + Value = br.ReadInt32(); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(Value); + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Value", Value.ToString()); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + Value = Xml.GetChildIntAttribute(node, "Value", "value"); + } + } + [TC(typeof(EXP))] public class Dat4ConfigInt2 : Dat4ConfigData + { + public int Value { get; set; } + + public Dat4ConfigInt2(RelFile rel) : base(rel) + { + Type = Dat4ConfigType.Int2; + TypeID = (byte)Type; + } + public Dat4ConfigInt2(RelData d, BinaryReader br) : base(d, br) + { + Value = br.ReadInt32(); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(Value); + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Value", Value.ToString()); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + Value = Xml.GetChildIntAttribute(node, "Value", "value"); + } + } + [TC(typeof(EXP))] public class Dat4ConfigFloat : Dat4ConfigData + { + public float Value { get; set; } + + public Dat4ConfigFloat(RelFile rel) : base(rel) + { + Type = Dat4ConfigType.Float; + TypeID = (byte)Type; + } + public Dat4ConfigFloat(RelData d, BinaryReader br) : base(d, br) + { + Value = br.ReadSingle(); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(Value); + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Value", FloatUtil.ToString(Value)); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + Value = Xml.GetChildFloatAttribute(node, "Value", "value"); + } + } + [TC(typeof(EXP))] public class Dat4ConfigString : Dat4ConfigData + { + public string Value { get; set; } + + public Dat4ConfigString(RelFile rel) : base(rel) + { + Type = Dat4ConfigType.String; + TypeID = (byte)Type; + } + public Dat4ConfigString(RelData d, BinaryReader br) : base(d, br) + { + var data = br.ReadBytes(64); + Value = Encoding.ASCII.GetString(data).Replace("\0", ""); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + + byte[] data = new byte[64]; + int len = Math.Min(Value?.Length ?? 0, 64); + if (len > 0) + { + Encoding.ASCII.GetBytes(Value, 0, len, data, 0); + } + bw.Write(data); + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.StringTag(sb, indent, "Value", Value); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + Value = Xml.GetChildInnerText(node, "Value"); + } + } + [TC(typeof(EXP))] public class Dat4ConfigOrientation : Dat4ConfigData + { + public Vector3 Vec1 { get; set; } + public Vector3 Vec2 { get; set; } + + public Dat4ConfigOrientation(RelFile rel) : base(rel) + { + Type = Dat4ConfigType.Orientation; + TypeID = (byte)Type; + } + public Dat4ConfigOrientation(RelData d, BinaryReader br) : base(d, br) + { + Vec1 = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); + Vec2 = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(Vec1.X); + bw.Write(Vec1.Y); + bw.Write(Vec1.Z); + bw.Write(Vec2.X); + bw.Write(Vec2.Y); + bw.Write(Vec2.Z); + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.SelfClosingTag(sb, indent, "Vec1 " + FloatUtil.GetVector3XmlString(Vec1)); + RelXml.SelfClosingTag(sb, indent, "Vec2 " + FloatUtil.GetVector3XmlString(Vec2)); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + Vec1 = Xml.GetChildVector3Attributes(node, "Vec1", "x", "y", "z"); + Vec2 = Xml.GetChildVector3Attributes(node, "Vec2", "x", "y", "z"); + } + } + [TC(typeof(EXP))] public class Dat4ConfigVariableList : Dat4ConfigData + { + public int VariableCount { get; set; } + public VariableValue[] Variables { get; set; } + public class VariableValue + { + public MetaHash Name { get; set; } + public float Value { get; set; } + + public VariableValue() { } + public VariableValue(BinaryReader br) + { + Name = br.ReadUInt32(); + Value = br.ReadSingle(); + } + public void Write(BinaryWriter bw) + { + bw.Write(Name); + bw.Write(Value); + } + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Name", RelXml.HashString(Name)); + RelXml.ValueTag(sb, indent, "Value", FloatUtil.ToString(Value)); + } + public void ReadXml(XmlNode node) + { + Name = XmlRel.GetHash(Xml.GetChildInnerText(node, "Name")); + Value = Xml.GetChildFloatAttribute(node, "Value", "value"); + } + } + + public Dat4ConfigVariableList(RelFile rel) : base(rel) + { + Type = Dat4ConfigType.VariableList; + TypeID = (byte)Type; + } + public Dat4ConfigVariableList(RelData d, BinaryReader br) : base(d, br) + { + VariableCount = br.ReadInt32(); + Variables = new VariableValue[VariableCount]; + for (int i = 0; i < VariableCount; i++) + { + Variables[i] = new VariableValue(br); + } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(VariableCount); + for (int i = 0; i < VariableCount; i++) + { + Variables[i].Write(bw); + } + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + if (VariableCount > 0) + { + RelXml.OpenTag(sb, indent, "Variables"); + var cind = indent + 1; + var cind2 = indent + 2; + for (int i = 0; i < VariableCount; i++) + { + RelXml.OpenTag(sb, cind, "Item"); + Variables[i].WriteXml(sb, cind2); + RelXml.CloseTag(sb, cind, "Item"); + } + RelXml.CloseTag(sb, indent, "Variables"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "Variables"); + } + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + var vnode = node.SelectSingleNode("Variables"); + if (vnode != null) + { + var inodes = vnode.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + var v = new VariableValue(); + v.ReadXml(inode); + vlist.Add(v); + } + VariableCount = vlist.Count; + Variables = vlist.ToArray(); + } + } + } + } + [TC(typeof(EXP))] public class Dat4ConfigWaveSlot : Dat4ConfigData + { + public int Unk1 { get; set; } + public int Unk2 { get; set; } + public int Unk3 { get; set; } + public MetaHash Unk4 { get; set; } + public int Unk5 { get; set; } + public int Unk6 { get; set; } + + public Dat4ConfigWaveSlot(RelFile rel) : base(rel) + { + Type = Dat4ConfigType.WaveSlot; + TypeID = (byte)Type; + } + public Dat4ConfigWaveSlot(RelData d, BinaryReader br) : base(d, br) + { + Unk1 = br.ReadInt32(); + Unk2 = br.ReadInt32(); + Unk3 = br.ReadInt32(); + Unk4 = br.ReadUInt32(); + Unk5 = br.ReadInt32(); + Unk6 = br.ReadInt32(); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(Unk1); + bw.Write(Unk2); + bw.Write(Unk3); + bw.Write(Unk4); + bw.Write(Unk5); + bw.Write(Unk6); + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Unk1", Unk1.ToString()); + RelXml.ValueTag(sb, indent, "Unk2", Unk2.ToString()); + RelXml.ValueTag(sb, indent, "Unk3", Unk3.ToString()); + RelXml.StringTag(sb, indent, "Unk4", RelXml.HashString(Unk4)); + RelXml.ValueTag(sb, indent, "Unk5", Unk5.ToString()); + RelXml.ValueTag(sb, indent, "Unk6", Unk6.ToString()); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + Unk1 = Xml.GetChildIntAttribute(node, "Unk1", "value"); + Unk2 = Xml.GetChildIntAttribute(node, "Unk2", "value"); + Unk3 = Xml.GetChildIntAttribute(node, "Unk3", "value"); + Unk4 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk4")); + Unk5 = Xml.GetChildIntAttribute(node, "Unk5", "value"); + Unk6 = Xml.GetChildIntAttribute(node, "Unk6", "value"); + } + } + [TC(typeof(EXP))] public class Dat4ConfigWaveSlotsList : Dat4ConfigData + { + public int WaveSlotsCount { get; set; } + public MetaHash[] WaveSlots { get; set; } + + public Dat4ConfigWaveSlotsList(RelFile rel) : base(rel) + { + Type = Dat4ConfigType.WaveSlotsList; + TypeID = (byte)Type; + } + public Dat4ConfigWaveSlotsList(RelData d, BinaryReader br) : base(d, br) + { + WaveSlotsCount = br.ReadInt32(); + WaveSlots = new MetaHash[WaveSlotsCount]; + for (int i = 0; i < WaveSlotsCount; i++) + { + WaveSlots[i] = br.ReadUInt32(); + } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(WaveSlotsCount); + for (int i = 0; i < WaveSlotsCount; i++) + { + bw.Write(WaveSlots[i]); + } + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + if (WaveSlots?.Length > 0) + { + RelXml.OpenTag(sb, indent, "WaveSlots"); + var cind = indent + 1; + foreach (var hash in WaveSlots) + { + RelXml.StringTag(sb, cind, "Item", RelXml.HashString(hash)); + } + RelXml.CloseTag(sb, indent, "WaveSlots"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "WaveSlots"); + } + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + var atnode = node.SelectSingleNode("WaveSlots"); + if (atnode == null) return; + + var slotnodes = atnode.SelectNodes("Item"); + var slotlist = new List(); + foreach (XmlNode slotnode in slotnodes) + { + slotlist.Add(XmlRel.GetHash(slotnode.InnerText)); + } + WaveSlots = slotlist.ToArray(); + WaveSlotsCount = (byte)slotlist.Count; + } + public override uint[] GetHashTableOffsets() + { + var offsets = new List(); + for (uint i = 0; i < WaveSlotsCount; i++) + { + offsets.Add(8 + i * 4); + } + return offsets.ToArray(); + } + } + [TC(typeof(EXP))] public class Dat4ConfigUnkER : Dat4ConfigData + { + float Unk1 { get; set; } + float Unk2 { get; set; } + float Unk3 { get; set; } + float Unk4 { get; set; } + float Unk5 { get; set; } + float Unk6 { get; set; } + float Unk7 { get; set; } + int UnkItemsCount { get; set; } + UnkItem[] UnkItems { get; set; } + Vector4 UnkVec1 { get; set; } + Vector4 UnkVec2 { get; set; } + Vector4 UnkVec3 { get; set; } + Vector4 UnkVec4 { get; set; } + Vector4 UnkVec5 { get; set; } + Vector4 UnkVec6 { get; set; } + Vector4 UnkVec7 { get; set; } + Vector4 UnkVec8 { get; set; } + Vector4 UnkVec9 { get; set; } + int UnkVecCount1 { get; set; } + Vector4[] UnkVecs1 { get; set; } + int UnkVecCount2 { get; set; } + Vector4[] UnkVecs2 { get; set; } + int UnkVecCount3 { get; set; } + Vector4[] UnkVecs3 { get; set; } + + + public class UnkItem + { + public float UnkFloat { get; set; } + public int UnkInt { get; set; } + + public UnkItem() { } + public UnkItem(BinaryReader br) + { + UnkFloat = br.ReadSingle(); + UnkInt = br.ReadInt32(); + } + public void Write(BinaryWriter bw) + { + bw.Write(UnkFloat); + bw.Write(UnkInt); + } + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "UnkFloat", FloatUtil.ToString(UnkFloat)); + RelXml.ValueTag(sb, indent, "UnkInt", UnkInt.ToString()); + } + public void ReadXml(XmlNode node) + { + UnkFloat = Xml.GetChildFloatAttribute(node, "UnkFloat", "value"); + UnkInt = Xml.GetChildIntAttribute(node, "UnkInt", "value"); + } + public override string ToString() + { + return FloatUtil.ToString(UnkFloat) + ", " + UnkInt.ToString(); + } + } + + + public Dat4ConfigUnkER(RelFile rel) : base(rel) + { + Type = Dat4ConfigType.UnkER; + TypeID = (byte)Type; + } + public Dat4ConfigUnkER(RelData d, BinaryReader br) : base(d, br) + { + Unk1 = br.ReadSingle(); + Unk2 = br.ReadSingle(); + Unk3 = br.ReadSingle(); + Unk4 = br.ReadSingle(); + Unk5 = br.ReadSingle(); + Unk6 = br.ReadSingle(); + Unk7 = br.ReadSingle(); + UnkItemsCount = br.ReadInt32(); + UnkItems = new UnkItem[UnkItemsCount]; + for (int i = 0; i < UnkItemsCount; i++) + { + UnkItems[i] = new UnkItem(br); + } + UnkVec1 = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); + UnkVec2 = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); + UnkVec3 = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); + UnkVec4 = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); + UnkVec5 = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); + UnkVec6 = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); + UnkVec7 = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); + UnkVec8 = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); + UnkVec9 = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); + UnkVecCount1 = br.ReadInt32(); + UnkVecs1 = new Vector4[UnkVecCount1]; + for (int i = 0; i < UnkVecCount1; i++) + { + UnkVecs1[i] = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); + } + UnkVecCount2 = br.ReadInt32(); + UnkVecs2 = new Vector4[UnkVecCount1]; + for (int i = 0; i < UnkVecCount2; i++) + { + UnkVecs2[i] = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); + } + UnkVecCount3 = br.ReadInt32(); + UnkVecs3 = new Vector4[UnkVecCount1]; + for (int i = 0; i < UnkVecCount3; i++) + { + UnkVecs3[i] = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); + } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + base.Write(bw); + bw.Write(Unk1); + bw.Write(Unk2); + bw.Write(Unk3); + bw.Write(Unk4); + bw.Write(Unk5); + bw.Write(Unk6); + bw.Write(Unk7); + bw.Write(UnkItemsCount); + for (int i = 0; i < UnkItemsCount; i++) + { + UnkItems[i].Write(bw); + } + bw.Write(UnkVec1.X); + bw.Write(UnkVec1.Y); + bw.Write(UnkVec1.Z); + bw.Write(UnkVec1.W); + bw.Write(UnkVec2.X); + bw.Write(UnkVec2.Y); + bw.Write(UnkVec2.Z); + bw.Write(UnkVec2.W); + bw.Write(UnkVec3.X); + bw.Write(UnkVec3.Y); + bw.Write(UnkVec3.Z); + bw.Write(UnkVec3.W); + bw.Write(UnkVec4.X); + bw.Write(UnkVec4.Y); + bw.Write(UnkVec4.Z); + bw.Write(UnkVec4.W); + bw.Write(UnkVec5.X); + bw.Write(UnkVec5.Y); + bw.Write(UnkVec5.Z); + bw.Write(UnkVec5.W); + bw.Write(UnkVec6.X); + bw.Write(UnkVec6.Y); + bw.Write(UnkVec6.Z); + bw.Write(UnkVec6.W); + bw.Write(UnkVec7.X); + bw.Write(UnkVec7.Y); + bw.Write(UnkVec7.Z); + bw.Write(UnkVec7.W); + bw.Write(UnkVec8.X); + bw.Write(UnkVec8.Y); + bw.Write(UnkVec8.Z); + bw.Write(UnkVec8.W); + bw.Write(UnkVec9.X); + bw.Write(UnkVec9.Y); + bw.Write(UnkVec9.Z); + bw.Write(UnkVec9.W); + bw.Write(UnkVecCount1); + for (int i = 0; i < UnkVecCount1; i++) + { + bw.Write(UnkVecs1[i].X); + bw.Write(UnkVecs1[i].Y); + bw.Write(UnkVecs1[i].Z); + bw.Write(UnkVecs1[i].W); + } + bw.Write(UnkVecCount2); + for (int i = 0; i < UnkVecCount2; i++) + { + bw.Write(UnkVecs2[i].X); + bw.Write(UnkVecs2[i].Y); + bw.Write(UnkVecs2[i].Z); + bw.Write(UnkVecs2[i].W); + } + bw.Write(UnkVecCount3); + for (int i = 0; i < UnkVecCount3; i++) + { + bw.Write(UnkVecs3[i].X); + bw.Write(UnkVecs3[i].Y); + bw.Write(UnkVecs3[i].Z); + bw.Write(UnkVecs3[i].W); + } + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + var cind = indent + 1; + var cind2 = indent + 2; + RelXml.ValueTag(sb, indent, "Unk1", FloatUtil.ToString(Unk1)); + RelXml.ValueTag(sb, indent, "Unk2", FloatUtil.ToString(Unk2)); + RelXml.ValueTag(sb, indent, "Unk3", FloatUtil.ToString(Unk3)); + RelXml.ValueTag(sb, indent, "Unk4", FloatUtil.ToString(Unk4)); + RelXml.ValueTag(sb, indent, "Unk5", FloatUtil.ToString(Unk5)); + RelXml.ValueTag(sb, indent, "Unk6", FloatUtil.ToString(Unk6)); + RelXml.ValueTag(sb, indent, "Unk7", FloatUtil.ToString(Unk7)); + if (UnkItemsCount > 0) + { + RelXml.OpenTag(sb, indent, "UnkItems"); + for (int i = 0; i < UnkItemsCount; i++) + { + RelXml.OpenTag(sb, cind, "Item"); + UnkItems[i].WriteXml(sb, cind2); + RelXml.CloseTag(sb, cind, "Item"); + } + RelXml.CloseTag(sb, indent, "UnkItems"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "UnkItems"); + } + RelXml.SelfClosingTag(sb, indent, "UnkVec1 " + FloatUtil.GetVector4XmlString(UnkVec1)); + RelXml.SelfClosingTag(sb, indent, "UnkVec2 " + FloatUtil.GetVector4XmlString(UnkVec2)); + RelXml.SelfClosingTag(sb, indent, "UnkVec3 " + FloatUtil.GetVector4XmlString(UnkVec3)); + RelXml.SelfClosingTag(sb, indent, "UnkVec4 " + FloatUtil.GetVector4XmlString(UnkVec4)); + RelXml.SelfClosingTag(sb, indent, "UnkVec5 " + FloatUtil.GetVector4XmlString(UnkVec5)); + RelXml.SelfClosingTag(sb, indent, "UnkVec6 " + FloatUtil.GetVector4XmlString(UnkVec6)); + RelXml.SelfClosingTag(sb, indent, "UnkVec7 " + FloatUtil.GetVector4XmlString(UnkVec7)); + RelXml.SelfClosingTag(sb, indent, "UnkVec8 " + FloatUtil.GetVector4XmlString(UnkVec8)); + RelXml.SelfClosingTag(sb, indent, "UnkVec9 " + FloatUtil.GetVector4XmlString(UnkVec9)); + RelXml.WriteRawArray(sb, UnkVecs1, indent, "UnkVecs1", "", RelXml.FormatVector4, 1); + RelXml.WriteRawArray(sb, UnkVecs2, indent, "UnkVecs2", "", RelXml.FormatVector4, 1); + RelXml.WriteRawArray(sb, UnkVecs3, indent, "UnkVecs3", "", RelXml.FormatVector4, 1); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + Unk1 = Xml.GetChildFloatAttribute(node, "Unk1", "value"); + Unk2 = Xml.GetChildFloatAttribute(node, "Unk2", "value"); + Unk3 = Xml.GetChildFloatAttribute(node, "Unk3", "value"); + Unk4 = Xml.GetChildFloatAttribute(node, "Unk4", "value"); + Unk5 = Xml.GetChildFloatAttribute(node, "Unk5", "value"); + Unk6 = Xml.GetChildFloatAttribute(node, "Unk6", "value"); + Unk7 = Xml.GetChildFloatAttribute(node, "Unk7", "value"); + var vnode = node.SelectSingleNode("UnkItems"); + if (vnode != null) + { + var inodes = vnode.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + var v = new UnkItem(); + v.ReadXml(inode); + vlist.Add(v); + } + UnkItemsCount = vlist.Count; + UnkItems = vlist.ToArray(); + } + } + UnkVec1 = Xml.GetChildVector4Attributes(node, "UnkVec1", "x", "y", "z", "w"); + UnkVec2 = Xml.GetChildVector4Attributes(node, "UnkVec2", "x", "y", "z", "w"); + UnkVec3 = Xml.GetChildVector4Attributes(node, "UnkVec3", "x", "y", "z", "w"); + UnkVec4 = Xml.GetChildVector4Attributes(node, "UnkVec4", "x", "y", "z", "w"); + UnkVec5 = Xml.GetChildVector4Attributes(node, "UnkVec5", "x", "y", "z", "w"); + UnkVec6 = Xml.GetChildVector4Attributes(node, "UnkVec6", "x", "y", "z", "w"); + UnkVec7 = Xml.GetChildVector4Attributes(node, "UnkVec7", "x", "y", "z", "w"); + UnkVec8 = Xml.GetChildVector4Attributes(node, "UnkVec8", "x", "y", "z", "w"); + UnkVec9 = Xml.GetChildVector4Attributes(node, "UnkVec9", "x", "y", "z", "w"); + UnkVecs1 = Xml.GetChildRawVector4Array(node, "UnkVecs1"); + UnkVecs2 = Xml.GetChildRawVector4Array(node, "UnkVecs2"); + UnkVecs3 = Xml.GetChildRawVector4Array(node, "UnkVecs3"); + UnkVecCount1 = UnkVecs1?.Length ?? 0; + UnkVecCount2 = UnkVecs2?.Length ?? 0; + UnkVecCount3 = UnkVecs3?.Length ?? 0; + } + } + + + //[TC(typeof(EXP))] public class Dat4ConfigBlankTemplateItem : Dat4ConfigData + //{ + // public Dat4ConfigBlankTemplateItem(RelFile rel) : base(rel) + // { + // Type = Dat4ConfigType.RELTYPE; + // TypeID = (byte)Type; + // } + // public Dat4ConfigBlankTemplateItem(RelData d, BinaryReader br) : base(d, br) + // { + // var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + // if (bytesleft != 0) + // { } + // } + // public override void Write(BinaryWriter bw) + // { + // base.Write(bw); + // } + // public override void WriteXml(StringBuilder sb, int indent) + // { + // base.WriteXml(sb, indent); + // } + // public override void ReadXml(XmlNode node) + // { + // base.ReadXml(node); + // } + //} + + + + + #endregion + + #region dat4 (speech) + + #endregion + public class RelXml : MetaXmlBase { @@ -14157,6 +15008,11 @@ namespace CodeWalker.GameFiles ValueTag(sb, cindent, "Version", rel.DataUnkVal.ToString()); + if (rel.IsAudioConfig) + { + ValueTag(sb, cindent, "IsAudioConfig", "true"); + } + if (rel.NameTable != null) { OpenTag(sb, cindent, "NameTable"); @@ -14184,6 +15040,9 @@ namespace CodeWalker.GameFiles case RelDatFileType.Dat151: typeid = ((Dat151RelType)item.TypeID).ToString(); break; + case RelDatFileType.Dat4: + if (rel.IsAudioConfig) typeid = ((Dat4ConfigType)item.TypeID).ToString(); + break; default: break; } @@ -14194,6 +15053,11 @@ namespace CodeWalker.GameFiles { ntoffset = " ntOffset=\"" + dat151item.NameTableOffset.ToString() + "\""; } + var dat4config = item as Dat4ConfigData; + if (dat4config != null) + { + ntoffset = " ntOffset=\"" + dat4config.NameTableOffset.ToString() + "\""; + } OpenTag(sb, iindent, "Item type=\"" + typeid + "\"" + ntoffset); @@ -14243,6 +15107,7 @@ namespace CodeWalker.GameFiles RelFile rel = new RelFile(); rel.RelType = reltype; rel.DataUnkVal = Xml.GetChildUIntAttribute(node, "Version", "value"); + rel.IsAudioConfig = Xml.GetChildBoolAttribute(node, "IsAudioConfig", "value"); var ntnode = node.SelectSingleNode("NameTable"); if (ntnode != null) @@ -14285,6 +15150,16 @@ namespace CodeWalker.GameFiles typeid = (int)rt; } break; + case RelDatFileType.Dat4: + if (rel.IsAudioConfig) + { + Dat4ConfigType ct; + if (Enum.TryParse(typestr, out ct)) + { + typeid = (int)ct; + } + } + break; } if (typeid < 0) { @@ -14307,6 +15182,11 @@ namespace CodeWalker.GameFiles { dat151data.NameTableOffset = ntoffset; } + var dat4config = rd as Dat4ConfigData; + if (dat4config != null) + { + dat4config.NameTableOffset = ntoffset; + } } diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index 8baced0..2bd7ea3 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -2376,53 +2376,14 @@ namespace CodeWalker.GameFiles sb.AppendLine(); + byte[] data; - if (!savetest) continue; - - - byte[] data = rel.Save(); - if (data != null) + if (savetest) { - if (data.Length != rbfe.FileUncompressedSize) - { } - else if (data.Length != rel.RawFileData.Length) - { } - else - { - for (int i = 0; i < data.Length; i++) //raw file test - if (data[i] != rel.RawFileData[i]) - { break; } - } - } - else - { } - - RelFile rel2 = new RelFile(); - rel2.Load(data, rfe);//roundtrip test - - if (rel2.IndexCount != rel.IndexCount) - { } - if (rel2.RelDatas == null) - { } - - - if (!xmltest) continue; - - var relxml = RelXml.GetXml(rel); //XML test... - var rel3 = XmlRel.GetRel(relxml); - if (rel3 != null) - { - if (rel3.RelDatasSorted?.Length != rel.RelDatasSorted?.Length) - { } //check nothing went missing... - - - data = rel3.Save(); //full roundtrip! + data = rel.Save(); if (data != null) { - var rel4 = new RelFile(); - rel4.Load(data, rfe); //insanity check - if (data.Length != rbfe.FileUncompressedSize) { } else if (data.Length != rel.RawFileData.Length) @@ -2434,20 +2395,62 @@ namespace CodeWalker.GameFiles { break; } } - var relxml2 = RelXml.GetXml(rel4); //full insanity - if (relxml2.Length != relxml.Length) + + RelFile rel2 = new RelFile(); + rel2.Load(data, rfe);//roundtrip test + + if (rel2.IndexCount != rel.IndexCount) { } - if (relxml2 != relxml) + if (rel2.RelDatas == null) { } } else { } + } - else - { } + + if (xmltest) + { + var relxml = RelXml.GetXml(rel); //XML test... + var rel3 = XmlRel.GetRel(relxml); + if (rel3 != null) + { + if (rel3.RelDatasSorted?.Length != rel.RelDatasSorted?.Length) + { } //check nothing went missing... + data = rel3.Save(); //full roundtrip! + if (data != null) + { + var rel4 = new RelFile(); + rel4.Load(data, rfe); //insanity check + + if (data.Length != rbfe.FileUncompressedSize) + { } + else if (data.Length != rel.RawFileData.Length) + { } + else + { + for (int i = 0; i < data.Length; i++) //raw file test + if (data[i] != rel.RawFileData[i]) + { break; } + } + + var relxml2 = RelXml.GetXml(rel4); //full insanity + if (relxml2.Length != relxml.Length) + { } + if (relxml2 != relxml) + { } + + } + else + { } + } + else + { } + + } //sbi.Clear(); diff --git a/CodeWalker.Core/Utils/Xml.cs b/CodeWalker.Core/Utils/Xml.cs index adc9d26..1baf5cf 100644 --- a/CodeWalker.Core/Utils/Xml.cs +++ b/CodeWalker.Core/Utils/Xml.cs @@ -303,6 +303,51 @@ namespace CodeWalker return GetRawVector3Array(cnode); } + public static Vector4[] GetRawVector4Array(XmlNode node) + { + if (node == null) return new Vector4[0]; + float x = 0f; + float y = 0f; + float z = 0f; + float w = 0f; + var items = new List(); + var split = node.InnerText.Split('\n');// Regex.Split(node.InnerText, @"[\s\r\n\t]"); + for (int i = 0; i < split.Length; i++) + { + var s = split[i]?.Trim(); + if (string.IsNullOrEmpty(s)) continue; + var split2 = s.Split(',');// Regex.Split(s, @"[\s\t]"); + int c = 0; + x = 0f; y = 0f; + for (int n = 0; n < split2.Length; n++) + { + var ts = split2[n]?.Trim(); + if (string.IsNullOrEmpty(ts)) continue; + var f = FloatUtil.Parse(ts); + switch (c) + { + case 0: x = f; break; + case 1: y = f; break; + case 2: z = f; break; + case 3: w = f; break; + } + c++; + } + if (c >= 4) + { + var val = new Vector4(x, y, z, w); + items.Add(val); + } + } + + return items.ToArray(); + } + public static Vector4[] GetChildRawVector4Array(XmlNode node, string name) + { + var cnode = node.SelectSingleNode(name); + return GetRawVector4Array(cnode); + } + } } From 402fe391f3e563d20887c6052a6097e495c41da3 Mon Sep 17 00:00:00 2001 From: dexy Date: Mon, 21 Jan 2019 10:50:49 +1100 Subject: [PATCH 111/158] Speech dat4.rel progress, dat151 XML improvements --- .../GameFiles/FileTypes/RelFile.cs | 331 ++++++++++++++---- CodeWalker.Core/GameFiles/GameFileCache.cs | 6 + 2 files changed, 260 insertions(+), 77 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index b72eb23..639e36c 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -452,6 +452,25 @@ namespace CodeWalker.GameFiles } else //(for eg speech.dat4.rel) { + //switch (d.DataLength) + //{ + // case 4: + // return new Dat4SpeechHash(d, br); + // case 8: + // if (d.Data[0] == 4)//container hash, with typeid and ntoffset + // { + // return new Dat4SpeechContainer(d, br); + // } + // else if (d.Data[0] == 7) + // { + // return new Dat4SpeechByteArray(d, br); + // } + // else + // { return d; }//shouldn't get here! + // default: + // return new Dat4SpeechByteArray(d, br); + //} + } return d; } @@ -886,15 +905,11 @@ namespace CodeWalker.GameFiles if (RelDatasSorted == null) return; - switch (RelType) + if ((RelType == RelDatFileType.Dat4) && (!IsAudioConfig)) { - case RelDatFileType.Dat4://TODO! - if (!IsAudioConfig) - { - DataBlock = null; - return; - } - break; + //speech dat4.rel riles - need more work + DataBlock = null; + return; } @@ -1000,12 +1015,6 @@ namespace CodeWalker.GameFiles if (RelDatas == null) return; if (RelDatasSorted == null) return; - switch (RelType) - { - case RelDatFileType.Dat4://TODO! - if(!IsAudioConfig) return; - break; - } //for the correct index ordering, needs to be in order of hashes, but with bits rotated right by 8 (why!?) @@ -1030,7 +1039,7 @@ namespace CodeWalker.GameFiles }); break; default: - if (!IsAudioConfig)//don't sort audioconfig + if (!IsAudioConfig)//don't sort audioconfig (only sort speech dat4's) { sorted.Sort((a, b) => { return ((uint)a.NameHash).CompareTo((uint)b.NameHash); }); } @@ -1079,11 +1088,12 @@ namespace CodeWalker.GameFiles if (offsets == null) continue; var rdoffset = rd.DataOffset + 8; var rs = rd as RelSound; + var ss = rd as Dat4SpeechData; if (rs?.Header != null) { rdoffset += 1 + rs.Header.CalcHeaderLength(); } - else + else if (ss == null)//don't add 4 for speech! { rdoffset += 4; //typeid + nt offset } @@ -1133,11 +1143,12 @@ namespace CodeWalker.GameFiles if (offsets == null) continue; var rdoffset = rd.DataOffset + 8; var rs = rd as RelSound; + var ss = rd as Dat4SpeechData; if (rs?.Header != null) { rdoffset += 1 + rs.Header.CalcHeaderLength(); } - else + else if (ss == null)//don't add 4 for speech! { rdoffset += 4; //typeid + nt offset } @@ -6343,7 +6354,7 @@ namespace CodeWalker.GameFiles { public FlagsUint Flags { get; set; }//flags public MetaHash Unk01 { get; set; } - public MetaHash Unk02 { get; set; } + public MetaHash RadioStation { get; set; } public Vector3 Position { get; set; } public float Unk06 { get; set; } public float Unk07 { get; set; } @@ -6372,7 +6383,7 @@ namespace CodeWalker.GameFiles { Flags = br.ReadUInt32();//flags Unk01 = br.ReadUInt32(); - Unk02 = br.ReadUInt32(); + RadioStation = br.ReadUInt32(); Position = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); Unk06 = br.ReadSingle(); Unk07 = br.ReadSingle(); @@ -6401,7 +6412,7 @@ namespace CodeWalker.GameFiles WriteTypeAndOffset(bw); bw.Write(Flags);//flags bw.Write(Unk01); - bw.Write(Unk02); + bw.Write(RadioStation); bw.Write(Position.X); bw.Write(Position.Y); bw.Write(Position.Z); @@ -6427,7 +6438,7 @@ namespace CodeWalker.GameFiles { RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); - RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.StringTag(sb, indent, "RadioStation", RelXml.HashString(RadioStation)); RelXml.SelfClosingTag(sb, indent, "Position " + FloatUtil.GetVector3XmlString(Position)); RelXml.ValueTag(sb, indent, "Unk06", FloatUtil.ToString(Unk06)); RelXml.ValueTag(sb, indent, "Unk07", FloatUtil.ToString(Unk07)); @@ -6451,7 +6462,7 @@ namespace CodeWalker.GameFiles { Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); - Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + RadioStation = XmlRel.GetHash(Xml.GetChildInnerText(node, "RadioStation")); Position = Xml.GetChildVector3Attributes(node, "Position", "x", "y", "z"); Unk06 = Xml.GetChildFloatAttribute(node, "Unk06", "value"); Unk07 = Xml.GetChildFloatAttribute(node, "Unk07", "value"); @@ -6764,16 +6775,9 @@ namespace CodeWalker.GameFiles public uint Unk01 { get; set; } public uint Unk02 { get; set; } public ushort Unk03 { get; set; } + public string RadioName { get; set; } public ushort Unk04 { get; set; } - public uint Unk05 { get; set; }//what is this? maybe shorts - public uint Unk06 { get; set; }//what is this? maybe shorts - public ushort Unk07 { get; set; } - public ushort Unk08 { get; set; } - public uint Unk09 { get; set; }//what is this? maybe shorts - public uint Unk10 { get; set; }//what is this? maybe shorts - public uint Unk11 { get; set; } - public uint Unk12 { get; set; } - public uint Unk13 { get; set; } + public uint AudioTracksCount { get; set; } public MetaHash[] AudioTracks { get; set; } @@ -6788,16 +6792,15 @@ namespace CodeWalker.GameFiles Unk01 = br.ReadUInt32(); Unk02 = br.ReadUInt32(); Unk03 = br.ReadUInt16(); + + var data = br.ReadBytes(32); + RadioName = Encoding.ASCII.GetString(data).Replace("\0", ""); + Unk04 = br.ReadUInt16(); - Unk05 = br.ReadUInt32(); - Unk06 = br.ReadUInt32(); - Unk07 = br.ReadUInt16(); - Unk08 = br.ReadUInt16(); - Unk09 = br.ReadUInt32(); - Unk10 = br.ReadUInt32(); - Unk11 = br.ReadUInt32(); - Unk12 = br.ReadUInt32(); - Unk13 = br.ReadUInt32(); + + if (Unk04 != 0) + { } + AudioTracksCount = br.ReadUInt32(); var tracks = new MetaHash[AudioTracksCount]; for (int i = 0; i < AudioTracksCount; i++) @@ -6818,16 +6821,17 @@ namespace CodeWalker.GameFiles bw.Write(Unk01); bw.Write(Unk02); bw.Write(Unk03); + + byte[] data = new byte[32]; + int len = Math.Min(RadioName?.Length ?? 0, 32); + if (len > 0) + { + Encoding.ASCII.GetBytes(RadioName, 0, len, data, 0); + } + bw.Write(data); + bw.Write(Unk04); - bw.Write(Unk05); - bw.Write(Unk06); - bw.Write(Unk07); - bw.Write(Unk08); - bw.Write(Unk09); - bw.Write(Unk10); - bw.Write(Unk11); - bw.Write(Unk12); - bw.Write(Unk13); + bw.Write(AudioTracksCount); for (int i = 0; i < AudioTracksCount; i++) { @@ -6840,16 +6844,10 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); + RelXml.StringTag(sb, indent, "RadioName", RadioName); RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); - RelXml.ValueTag(sb, indent, "Unk05", Unk05.ToString()); - RelXml.ValueTag(sb, indent, "Unk06", Unk06.ToString()); - RelXml.ValueTag(sb, indent, "Unk07", Unk07.ToString()); - RelXml.ValueTag(sb, indent, "Unk08", Unk08.ToString()); - RelXml.ValueTag(sb, indent, "Unk09", Unk09.ToString()); - RelXml.ValueTag(sb, indent, "Unk10", Unk10.ToString()); - RelXml.ValueTag(sb, indent, "Unk11", Unk11.ToString()); - RelXml.ValueTag(sb, indent, "Unk12", Unk12.ToString()); - RelXml.ValueTag(sb, indent, "Unk13", Unk13.ToString()); + + if (AudioTracksCount > 0) { RelXml.OpenTag(sb, indent, "AudioTracks"); @@ -6872,16 +6870,10 @@ namespace CodeWalker.GameFiles Unk01 = Xml.GetChildUIntAttribute(node, "Unk01", "value"); Unk02 = Xml.GetChildUIntAttribute(node, "Unk02", "value"); Unk03 = (ushort)Xml.GetChildUIntAttribute(node, "Unk03", "value"); + RadioName = Xml.GetChildInnerText(node, "RadioName"); Unk04 = (ushort)Xml.GetChildUIntAttribute(node, "Unk04", "value"); - Unk05 = Xml.GetChildUIntAttribute(node, "Unk05", "value"); - Unk06 = Xml.GetChildUIntAttribute(node, "Unk06", "value"); - Unk07 = (ushort)Xml.GetChildUIntAttribute(node, "Unk07", "value"); - Unk08 = (ushort)Xml.GetChildUIntAttribute(node, "Unk08", "value"); - Unk09 = Xml.GetChildUIntAttribute(node, "Unk09", "value"); - Unk10 = Xml.GetChildUIntAttribute(node, "Unk10", "value"); - Unk11 = Xml.GetChildUIntAttribute(node, "Unk11", "value"); - Unk12 = Xml.GetChildUIntAttribute(node, "Unk12", "value"); - Unk13 = Xml.GetChildUIntAttribute(node, "Unk13", "value"); + + var vnode = node.SelectSingleNode("AudioTracks"); if (vnode != null) { @@ -6967,6 +6959,29 @@ namespace CodeWalker.GameFiles this.Playlists = items; + + if (Unk04 != 0) + { } + if (Unk05 != 0) + { } + if (Unk06 != 0) + { } + if (Unk07 != 0) + { } + if (Unk08 != 0) + { } + if (Unk09 != 0) + { } + if (Unk10 != 0) + { } + if (Unk11 != 0) + { } + if (Unk12 != 0) + { } + if (Unk13 != 0) + { } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } @@ -10677,7 +10692,7 @@ namespace CodeWalker.GameFiles [TC(typeof(EXP))] public class Dat151VehicleEngineGranular : Dat151RelData { public FlagsUint Unk00 { get; set; } - public int Unk01 { get; set; } + public int MasterVolume { get; set; } public MetaHash Unk02 { get; set; } public MetaHash Unk03 { get; set; } public int Unk04 { get; set; } @@ -10745,7 +10760,7 @@ namespace CodeWalker.GameFiles public Dat151VehicleEngineGranular(RelData d, BinaryReader br) : base(d, br) { Unk00 = br.ReadUInt32(); - Unk01 = br.ReadInt32(); + MasterVolume = br.ReadInt32(); Unk02 = br.ReadUInt32(); Unk03 = br.ReadUInt32(); Unk04 = br.ReadInt32(); @@ -10915,7 +10930,7 @@ namespace CodeWalker.GameFiles { WriteTypeAndOffset(bw); bw.Write(Unk00); - bw.Write(Unk01); + bw.Write(MasterVolume); bw.Write(Unk02); bw.Write(Unk03); bw.Write(Unk04); @@ -10981,7 +10996,7 @@ namespace CodeWalker.GameFiles public override void WriteXml(StringBuilder sb, int indent) { RelXml.ValueTag(sb, indent, "Unk00", "0x" + Unk00.Hex); - RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); + RelXml.ValueTag(sb, indent, "MasterVolume", MasterVolume.ToString()); RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); @@ -11044,7 +11059,7 @@ namespace CodeWalker.GameFiles public override void ReadXml(XmlNode node) { Unk00 = Xml.GetChildUIntAttribute(node, "Unk00", "value"); - Unk01 = Xml.GetChildIntAttribute(node, "Unk01", "value"); + MasterVolume = Xml.GetChildIntAttribute(node, "MasterVolume", "value"); Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); Unk04 = Xml.GetChildIntAttribute(node, "Unk04", "value"); @@ -11649,7 +11664,7 @@ namespace CodeWalker.GameFiles public MetaHash ExhaustPops { get; set; } public MetaHash Unk32 { get; set; } public int Unk33 { get; set; } - public int Unk34 { get; set; } + public int FansVolume { get; set; } public MetaHash StartupMaster { get; set; } public MetaHash Unk36 { get; set; } public MetaHash Unk37 { get; set; } @@ -11714,7 +11729,7 @@ namespace CodeWalker.GameFiles ExhaustPops = br.ReadUInt32(); Unk32 = br.ReadUInt32(); Unk33 = br.ReadInt32(); - Unk34 = br.ReadInt32(); + FansVolume = br.ReadInt32(); StartupMaster = br.ReadUInt32(); Unk36 = br.ReadUInt32(); Unk37 = br.ReadUInt32(); @@ -11792,7 +11807,7 @@ namespace CodeWalker.GameFiles bw.Write(ExhaustPops); bw.Write(Unk32); bw.Write(Unk33); - bw.Write(Unk34); + bw.Write(FansVolume); bw.Write(StartupMaster); bw.Write(Unk36); bw.Write(Unk37); @@ -11853,7 +11868,7 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "ExhaustPops", RelXml.HashString(ExhaustPops)); RelXml.StringTag(sb, indent, "Unk32", RelXml.HashString(Unk32)); RelXml.ValueTag(sb, indent, "Unk33", Unk33.ToString()); - RelXml.ValueTag(sb, indent, "Unk34", Unk34.ToString()); + RelXml.ValueTag(sb, indent, "FansVolume", FansVolume.ToString()); RelXml.StringTag(sb, indent, "StartupMaster", RelXml.HashString(StartupMaster)); RelXml.StringTag(sb, indent, "Unk36", RelXml.HashString(Unk36)); RelXml.StringTag(sb, indent, "Unk37", RelXml.HashString(Unk37)); @@ -11913,7 +11928,7 @@ namespace CodeWalker.GameFiles ExhaustPops = XmlRel.GetHash(Xml.GetChildInnerText(node, "ExhaustPops")); Unk32 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk32")); Unk33 = Xml.GetChildIntAttribute(node, "Unk33", "value"); - Unk34 = Xml.GetChildIntAttribute(node, "Unk34", "value"); + FansVolume = Xml.GetChildIntAttribute(node, "FansVolume", "value"); StartupMaster = XmlRel.GetHash(Xml.GetChildInnerText(node, "StartupMaster")); Unk36 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk36")); Unk37 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk37")); @@ -14985,6 +15000,159 @@ namespace CodeWalker.GameFiles #region dat4 (speech) + public enum Dat4SpeechType : byte + { + ByteArray = 0, + Hash = 4, + Container = 8, + } + + [TC(typeof(EXP))] public class Dat4SpeechData : RelData + { + public Dat4SpeechType Type { get; set; } + public Dat4SpeechData(RelFile rel) : base(rel) + { } + public Dat4SpeechData(RelData d, BinaryReader br) : base(d) + { + br.BaseStream.Position = 0; //1 byte was read already (TypeID) + } + } + [TC(typeof(EXP))] public class Dat4SpeechByteArray : Dat4SpeechData + { + public byte[] Bytes { get; set; } + + public Dat4SpeechByteArray(RelFile rel) : base(rel) + { + Type = Dat4SpeechType.ByteArray; + TypeID = (byte)Type; + } + public Dat4SpeechByteArray(RelData d, BinaryReader br) : base(d, br) + { + Type = Dat4SpeechType.ByteArray; + TypeID = (byte)Type; + + int dataLength = (int)br.BaseStream.Length; + int arrayLength = dataLength; + if (dataLength >= 4) + { + arrayLength = br.ReadByte(); + } + Bytes = br.ReadBytes(arrayLength); + + if (br.BaseStream.Position != br.BaseStream.Length) + { } + } + + public override void Write(BinaryWriter bw) + { + byte arrayLength = (byte)(Bytes?.Length ?? 0); + if (arrayLength >= 4) + { + bw.Write(arrayLength); + } + bw.Write(Bytes); + } + + public override void WriteXml(StringBuilder sb, int indent) + { + } + public override void ReadXml(XmlNode node) + { + } + + public override string ToString() + { + return GetBaseString() + ": " + Type.ToString(); + } + } + [TC(typeof(EXP))] public class Dat4SpeechHash : Dat4SpeechData + { + public MetaHash Hash { get; set; } + + public Dat4SpeechHash(RelFile rel) : base(rel) + { + Type = Dat4SpeechType.Hash; + TypeID = (byte)Type; + } + public Dat4SpeechHash(RelData d, BinaryReader br) : base(d, br) + { + Type = Dat4SpeechType.Hash; + TypeID = (byte)Type; + + Hash = br.ReadUInt32(); + + if (br.BaseStream.Position != br.BaseStream.Length) + { } + } + + public override void Write(BinaryWriter bw) + { + bw.Write(Hash); + } + + public override void WriteXml(StringBuilder sb, int indent) + { + } + public override void ReadXml(XmlNode node) + { + } + public override uint[] GetHashTableOffsets() + { + return new uint[] { 0 }; + } + + public override string ToString() + { + return GetBaseString() + ": " + Type.ToString() + ": " + Hash.ToString(); + } + } + [TC(typeof(EXP))] public class Dat4SpeechContainer : Dat4SpeechData + { + public uint NameTableOffset { get; set; } + public MetaHash ContainerHash { get; set; } + + public Dat4SpeechContainer(RelFile rel) : base(rel) + { + Type = Dat4SpeechType.Container; + TypeID = (byte)Type; + } + public Dat4SpeechContainer(RelData d, BinaryReader br) : base(d, br) + { + Type = Dat4SpeechType.Container; + TypeID = (byte)Type; + + NameTableOffset = ((br.ReadUInt32() >> 8) & 0xFFFFFF); + ContainerHash = br.ReadUInt32(); + + if (br.BaseStream.Position != br.BaseStream.Length) + { } + } + + public override void Write(BinaryWriter bw) + { + bw.Write(((NameTableOffset & 0xFFFFFF) << 8) + 4 /*TypeID*/); + bw.Write(ContainerHash); + } + + public override void WriteXml(StringBuilder sb, int indent) + { + } + public override void ReadXml(XmlNode node) + { + } + public override uint[] GetPackTableOffsets() + { + return new uint[] { 4 }; + } + + public override string ToString() + { + return GetBaseString() + ": " + Type.ToString() + ": " + ContainerHash.ToString(); + } + } + + + #endregion @@ -15042,6 +15210,7 @@ namespace CodeWalker.GameFiles break; case RelDatFileType.Dat4: if (rel.IsAudioConfig) typeid = ((Dat4ConfigType)item.TypeID).ToString(); + else typeid = ((Dat4SpeechType)item.TypeID).ToString(); break; default: break; @@ -15159,6 +15328,14 @@ namespace CodeWalker.GameFiles typeid = (int)ct; } } + else + { + Dat4SpeechType spt; + if (Enum.TryParse(typestr, out spt)) + { + typeid = (int)spt; + } + } break; } if (typeid < 0) diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index 2bd7ea3..cf398b5 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -2304,6 +2304,9 @@ namespace CodeWalker.GameFiles RelFile rel = new RelFile(rfe); RpfMan.LoadFile(rel, rfe); + + #region string building + if (rel.NameTable == null) { sb.AppendLine(rfe.Path + ": no strings found"); @@ -2376,6 +2379,9 @@ namespace CodeWalker.GameFiles sb.AppendLine(); + #endregion + + byte[] data; if (savetest) From d7be3a70d4017948e10c6f05ff3cf4e468695015 Mon Sep 17 00:00:00 2001 From: dexy Date: Mon, 21 Jan 2019 12:24:02 +1100 Subject: [PATCH 112/158] Updated names for game.dat151.rel --- .../GameFiles/FileTypes/RelFile.cs | 98 +++++++++---------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index 639e36c..18a65b0 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -963,7 +963,7 @@ namespace CodeWalker.GameFiles case Dat151RelType.SpeechParams: case Dat151RelType.Unk11: case Dat151RelType.Unk41: - case Dat151RelType.Unk2: + case Dat151RelType.VehicleTrailer: case Dat151RelType.AmbientEmitterList: case Dat151RelType.Weapon: case Dat151RelType.Vehicle: @@ -5165,11 +5165,11 @@ namespace CodeWalker.GameFiles public enum Dat151RelType : byte //not sure how correct these are? { Collision = 1, //maybe for vehicle - Unk2 = 2, + VehicleTrailer = 2, Vehicle = 3, VehicleEngine = 4, Entity = 5, //not sure about this - StaticEmitter = 6,//probably + StaticEmitter = 6,//radio emitter? Unk7 = 7, Helicopter = 8, //maybe Unk9 = 9, @@ -5178,10 +5178,10 @@ namespace CodeWalker.GameFiles Unk13 = 13, SpeechParams = 14, Unk15 = 15, - Unk16 = 16, + Boat = 16, Weapon = 17, Unk18 = 18, - Unk22 = 22, + Unk22 = 22,//player/creature? Unk23 = 23, RadioStations = 24, // RadioStation = 25, @@ -5210,10 +5210,10 @@ namespace CodeWalker.GameFiles WeaponAudioItem = 50, Unk51 = 51, Mod = 52, //what actually is a "mod" here? a change in some audio settings maybe? - Unk53 = 53, + Train = 53, Unk54 = 54, Unk55 = 55, - Unk56 = 56, + Bicycle = 56, Aeroplane = 57, Unk59 = 59, Mood = 62, @@ -5271,7 +5271,7 @@ namespace CodeWalker.GameFiles Unk116 = 116, Unk117 = 117, Unk118 = 118, - Unk119 = 119, + Unk119 = 119, //prop_bush..? RadioTrackList = 120, //radio track list? Unk121 = 121, } @@ -11161,7 +11161,7 @@ namespace CodeWalker.GameFiles public MetaHash Unk30 { get; set; } public MetaHash Unk31 { get; set; } public MetaHash Unk32 { get; set; } - public MetaHash Unk33 { get; set; }//flags?? 0xB807DF3E + public MetaHash StartupSequence { get; set; }//flags?? 0xB807DF3E public MetaHash Unk34 { get; set; }//flags?? 0xE38FCF16 public MetaHash Unk35 { get; set; } public MetaHash Unk36 { get; set; } @@ -11248,7 +11248,7 @@ namespace CodeWalker.GameFiles Unk30 = br.ReadUInt32(); Unk31 = br.ReadUInt32(); Unk32 = br.ReadUInt32(); - Unk33 = br.ReadUInt32();//flags?? 0xB807DF3E + StartupSequence = br.ReadUInt32();//flags?? 0xB807DF3E Unk34 = br.ReadUInt32();//flags?? 0xE38FCF16 Unk35 = br.ReadUInt32(); Unk36 = br.ReadUInt32(); @@ -11425,7 +11425,7 @@ namespace CodeWalker.GameFiles bw.Write(Unk30); bw.Write(Unk31); bw.Write(Unk32); - bw.Write(Unk33);//flags?? 0xB807DF3E + bw.Write(StartupSequence);//flags?? 0xB807DF3E bw.Write(Unk34);//flags?? 0xE38FCF16 bw.Write(Unk35); bw.Write(Unk36); @@ -11510,7 +11510,7 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "Unk30", RelXml.HashString(Unk30)); RelXml.StringTag(sb, indent, "Unk31", RelXml.HashString(Unk31)); RelXml.StringTag(sb, indent, "Unk32", RelXml.HashString(Unk32)); - RelXml.StringTag(sb, indent, "Unk33", RelXml.HashString(Unk33)); + RelXml.StringTag(sb, indent, "StartupSequence", RelXml.HashString(StartupSequence)); RelXml.StringTag(sb, indent, "Unk34", RelXml.HashString(Unk34)); RelXml.StringTag(sb, indent, "Unk35", RelXml.HashString(Unk35)); RelXml.StringTag(sb, indent, "Unk36", RelXml.HashString(Unk36)); @@ -11586,7 +11586,7 @@ namespace CodeWalker.GameFiles Unk30 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk30")); Unk31 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk31")); Unk32 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk32")); - Unk33 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk33")); + StartupSequence = XmlRel.GetHash(Xml.GetChildInnerText(node, "StartupSequence")); Unk34 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk34")); Unk35 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk35")); Unk36 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk36")); @@ -11645,13 +11645,13 @@ namespace CodeWalker.GameFiles public MetaHash Unk12 { get; set; }//flags? float? public int Unk13 { get; set; } public int Unk14 { get; set; } - public MetaHash Unk15 { get; set; } + public MetaHash AirIntake { get; set; } public int Unk16 { get; set; } public int Unk17 { get; set; } public MetaHash Turbo { get; set; } public int Unk19 { get; set; } public int Unk20 { get; set; } - public MetaHash Unk21 { get; set; } + public MetaHash DumpValve { get; set; } public int Unk22 { get; set; } public int Unk23 { get; set; } public MetaHash Transmission { get; set; } @@ -11681,11 +11681,11 @@ namespace CodeWalker.GameFiles public int Unk48 { get; set; } public int Unk49 { get; set; } public int Unk50 { get; set; } - public MetaHash DumpValve { get; set; } + public MetaHash DumpValveUpgraded { get; set; } public int Unk52 { get; set; } public MetaHash TransmissionUpgraded { get; set; } public MetaHash TurboUpgraded { get; set; } - public MetaHash Unk55 { get; set; } + public MetaHash AirIntakeUpgraded { get; set; } public MetaHash ExhaustPopsUpgraded { get; set; } public Dat151VehicleEngine(RelFile rel) : base(rel) @@ -11710,13 +11710,13 @@ namespace CodeWalker.GameFiles Unk12 = br.ReadUInt32();//flags? float? Unk13 = br.ReadInt32(); Unk14 = br.ReadInt32(); - Unk15 = br.ReadUInt32(); + AirIntake = br.ReadUInt32(); Unk16 = br.ReadInt32(); Unk17 = br.ReadInt32(); Turbo = br.ReadUInt32(); Unk19 = br.ReadInt32(); Unk20 = br.ReadInt32(); - Unk21 = br.ReadUInt32(); + DumpValve = br.ReadUInt32(); Unk22 = br.ReadInt32(); Unk23 = br.ReadInt32(); Transmission = br.ReadUInt32(); @@ -11746,11 +11746,11 @@ namespace CodeWalker.GameFiles Unk48 = br.ReadInt32(); Unk49 = br.ReadInt32(); Unk50 = br.ReadInt32(); - DumpValve = br.ReadUInt32();//float? + DumpValveUpgraded = br.ReadUInt32();//float? Unk52 = br.ReadInt32(); TransmissionUpgraded = br.ReadUInt32(); TurboUpgraded = br.ReadUInt32(); - Unk55 = br.ReadUInt32(); + AirIntakeUpgraded = br.ReadUInt32(); ExhaustPopsUpgraded = br.ReadUInt32(); if ((Unk38 != 0) && (Unk38 != 0x4022A088))//float? @@ -11788,13 +11788,13 @@ namespace CodeWalker.GameFiles bw.Write(Unk12);//flags? float? bw.Write(Unk13); bw.Write(Unk14); - bw.Write(Unk15); + bw.Write(AirIntake); bw.Write(Unk16); bw.Write(Unk17); bw.Write(Turbo); bw.Write(Unk19); bw.Write(Unk20); - bw.Write(Unk21); + bw.Write(DumpValve); bw.Write(Unk22); bw.Write(Unk23); bw.Write(Transmission); @@ -11824,11 +11824,11 @@ namespace CodeWalker.GameFiles bw.Write(Unk48); bw.Write(Unk49); bw.Write(Unk50); - bw.Write(DumpValve);//float? + bw.Write(DumpValveUpgraded);//float? bw.Write(Unk52); bw.Write(TransmissionUpgraded); bw.Write(TurboUpgraded); - bw.Write(Unk55); + bw.Write(AirIntakeUpgraded); bw.Write(ExhaustPopsUpgraded); } @@ -11849,13 +11849,13 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "Unk12", RelXml.HashString(Unk12)); RelXml.ValueTag(sb, indent, "Unk13", Unk13.ToString()); RelXml.ValueTag(sb, indent, "Unk14", Unk14.ToString()); - RelXml.StringTag(sb, indent, "Unk15", RelXml.HashString(Unk15)); + RelXml.StringTag(sb, indent, "AirIntake", RelXml.HashString(AirIntake)); RelXml.ValueTag(sb, indent, "Unk16", Unk16.ToString()); RelXml.ValueTag(sb, indent, "Unk17", Unk17.ToString()); RelXml.StringTag(sb, indent, "Turbo", RelXml.HashString(Turbo)); RelXml.ValueTag(sb, indent, "Unk19", Unk19.ToString()); RelXml.ValueTag(sb, indent, "Unk20", Unk20.ToString()); - RelXml.StringTag(sb, indent, "Unk21", RelXml.HashString(Unk21)); + RelXml.StringTag(sb, indent, "DumpValve", RelXml.HashString(DumpValve)); RelXml.ValueTag(sb, indent, "Unk22", Unk22.ToString()); RelXml.ValueTag(sb, indent, "Unk23", Unk23.ToString()); RelXml.StringTag(sb, indent, "Transmission", RelXml.HashString(Transmission)); @@ -11885,11 +11885,11 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk48", Unk48.ToString()); RelXml.ValueTag(sb, indent, "Unk49", Unk49.ToString()); RelXml.ValueTag(sb, indent, "Unk50", Unk50.ToString()); - RelXml.StringTag(sb, indent, "DumpValve", RelXml.HashString(DumpValve)); + RelXml.StringTag(sb, indent, "DumpValveUpgraded", RelXml.HashString(DumpValveUpgraded)); RelXml.ValueTag(sb, indent, "Unk52", Unk52.ToString()); RelXml.StringTag(sb, indent, "TransmissionUpgraded", RelXml.HashString(TransmissionUpgraded)); RelXml.StringTag(sb, indent, "TurboUpgraded", RelXml.HashString(TurboUpgraded)); - RelXml.StringTag(sb, indent, "Unk55", RelXml.HashString(Unk55)); + RelXml.StringTag(sb, indent, "AirIntakeUpgraded", RelXml.HashString(AirIntakeUpgraded)); RelXml.StringTag(sb, indent, "ExhaustPopsUpgraded", RelXml.HashString(ExhaustPopsUpgraded)); } public override void ReadXml(XmlNode node) @@ -11909,13 +11909,13 @@ namespace CodeWalker.GameFiles Unk12 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk12")); Unk13 = Xml.GetChildIntAttribute(node, "Unk13", "value"); Unk14 = Xml.GetChildIntAttribute(node, "Unk14", "value"); - Unk15 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk15")); + AirIntake = XmlRel.GetHash(Xml.GetChildInnerText(node, "AirIntake")); Unk16 = Xml.GetChildIntAttribute(node, "Unk16", "value"); Unk17 = Xml.GetChildIntAttribute(node, "Unk17", "value"); Turbo = XmlRel.GetHash(Xml.GetChildInnerText(node, "Turbo")); Unk19 = Xml.GetChildIntAttribute(node, "Unk19", "value"); Unk20 = Xml.GetChildIntAttribute(node, "Unk20", "value"); - Unk21 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk21")); + DumpValve = XmlRel.GetHash(Xml.GetChildInnerText(node, "DumpValve")); Unk22 = Xml.GetChildIntAttribute(node, "Unk22", "value"); Unk23 = Xml.GetChildIntAttribute(node, "Unk23", "value"); Transmission = XmlRel.GetHash(Xml.GetChildInnerText(node, "Transmission")); @@ -11945,11 +11945,11 @@ namespace CodeWalker.GameFiles Unk48 = Xml.GetChildIntAttribute(node, "Unk48", "value"); Unk49 = Xml.GetChildIntAttribute(node, "Unk49", "value"); Unk50 = Xml.GetChildIntAttribute(node, "Unk50", "value"); - DumpValve = XmlRel.GetHash(Xml.GetChildInnerText(node, "DumpValve")); + DumpValveUpgraded = XmlRel.GetHash(Xml.GetChildInnerText(node, "DumpValveUpgraded")); Unk52 = Xml.GetChildIntAttribute(node, "Unk52", "value"); TransmissionUpgraded = XmlRel.GetHash(Xml.GetChildInnerText(node, "TransmissionUpgraded")); TurboUpgraded = XmlRel.GetHash(Xml.GetChildInnerText(node, "TurboUpgraded")); - Unk55 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk55")); + AirIntakeUpgraded = XmlRel.GetHash(Xml.GetChildInnerText(node, "AirIntakeUpgraded")); ExhaustPopsUpgraded = XmlRel.GetHash(Xml.GetChildInnerText(node, "ExhaustPopsUpgraded")); } } @@ -12866,14 +12866,14 @@ namespace CodeWalker.GameFiles //TODO classes - [TC(typeof(EXP))] public class Dat151Unk2 : Dat151RelData + [TC(typeof(EXP))] public class Dat151VehicleTrailer : Dat151RelData { - public Dat151Unk2(RelFile rel) : base(rel) + public Dat151VehicleTrailer(RelFile rel) : base(rel) { - Type = Dat151RelType.Unk2; + Type = Dat151RelType.VehicleTrailer; TypeID = (byte)Type; } - public Dat151Unk2(RelData d, BinaryReader br) : base(d, br) + public Dat151VehicleTrailer(RelData d, BinaryReader br) : base(d, br) { var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) @@ -13055,14 +13055,14 @@ namespace CodeWalker.GameFiles { } } - [TC(typeof(EXP))] public class Dat151Unk16 : Dat151RelData + [TC(typeof(EXP))] public class Dat151Boat : Dat151RelData { - public Dat151Unk16(RelFile rel) : base(rel) + public Dat151Boat(RelFile rel) : base(rel) { - Type = Dat151RelType.Unk16; + Type = Dat151RelType.Boat; TypeID = (byte)Type; } - public Dat151Unk16(RelData d, BinaryReader br) : base(d, br) + public Dat151Boat(RelData d, BinaryReader br) : base(d, br) { var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) @@ -13412,14 +13412,14 @@ namespace CodeWalker.GameFiles { } } - [TC(typeof(EXP))] public class Dat151Unk53 : Dat151RelData + [TC(typeof(EXP))] public class Dat151Train : Dat151RelData { - public Dat151Unk53(RelFile rel) : base(rel) + public Dat151Train(RelFile rel) : base(rel) { - Type = Dat151RelType.Unk53; + Type = Dat151RelType.Train; TypeID = (byte)Type; } - public Dat151Unk53(RelData d, BinaryReader br) : base(d, br) + public Dat151Train(RelData d, BinaryReader br) : base(d, br) { var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) @@ -13454,14 +13454,14 @@ namespace CodeWalker.GameFiles { } } - [TC(typeof(EXP))] public class Dat151Unk56 : Dat151RelData + [TC(typeof(EXP))] public class Dat151Bicycle : Dat151RelData { - public Dat151Unk56(RelFile rel) : base(rel) + public Dat151Bicycle(RelFile rel) : base(rel) { - Type = Dat151RelType.Unk56; + Type = Dat151RelType.Bicycle; TypeID = (byte)Type; } - public Dat151Unk56(RelData d, BinaryReader br) : base(d, br) + public Dat151Bicycle(RelData d, BinaryReader br) : base(d, br) { var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) From c14590ff42070f30de663af68e5043e452798075 Mon Sep 17 00:00:00 2001 From: dexy Date: Mon, 21 Jan 2019 17:30:43 +1100 Subject: [PATCH 113/158] Generate LOD Lights tool (WIP) --- .../GameFiles/FileTypes/YmapFile.cs | 104 ++++- CodeWalker.Core/GameFiles/GameFileCache.cs | 77 ++++ CodeWalker.Core/GameFiles/MetaTypes/Meta.cs | 7 + CodeWalker.csproj | 9 + .../Panels/GenerateLODLightsPanel.Designer.cs | 111 +++++ Project/Panels/GenerateLODLightsPanel.cs | 262 +++++++++++ Project/Panels/GenerateLODLightsPanel.resx | 416 ++++++++++++++++++ Project/ProjectForm.Designer.cs | 50 ++- Project/ProjectForm.cs | 11 + 9 files changed, 1019 insertions(+), 28 deletions(-) create mode 100644 Project/Panels/GenerateLODLightsPanel.Designer.cs create mode 100644 Project/Panels/GenerateLODLightsPanel.cs create mode 100644 Project/Panels/GenerateLODLightsPanel.resx diff --git a/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs index 9712ff0..1d8185e 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YmapFile.cs @@ -46,6 +46,8 @@ namespace CodeWalker.GameFiles public YmapDistantLODLights DistantLODLights { get; set; } + public YmapLODLights LODLights { get; set; } + public YmapTimeCycleModifier[] TimeCycleModifiers { get; set; } public YmapCarGen[] CarGenerators { get; set; } @@ -116,7 +118,7 @@ namespace CodeWalker.GameFiles EnsureInstances(Meta); - EnsureLodLights(Meta); + EnsureLODLights(Meta); EnsureDistantLODLights(Meta); @@ -379,11 +381,22 @@ namespace CodeWalker.GameFiles } } - private void EnsureLodLights(Meta Meta) + private void EnsureLODLights(Meta Meta) { - //TODO! if (_CMapData.LODLightsSOA.direction.Count1 != 0) { + var soa = _CMapData.LODLightsSOA; + LODLights = new YmapLODLights(); + LODLights.Ymap = this; + LODLights.CLODLight = soa; + LODLights.direction = MetaTypes.ConvertDataArray(Meta, MetaName.VECTOR3, soa.direction); + LODLights.falloff = MetaTypes.GetFloatArray(Meta, soa.falloff); + LODLights.falloffExponent = MetaTypes.GetFloatArray(Meta, soa.falloffExponent); + LODLights.timeAndStateFlags = MetaTypes.GetUintArray(Meta, soa.timeAndStateFlags); + LODLights.hash = MetaTypes.GetUintArray(Meta, soa.hash); + LODLights.coneInnerAngle = MetaTypes.GetByteArray(Meta, soa.coneInnerAngle); + LODLights.coneOuterAngleOrCapExt = MetaTypes.GetByteArray(Meta, soa.coneOuterAngleOrCapExt); + LODLights.coronaIntensity = MetaTypes.GetByteArray(Meta, soa.coronaIntensity); } } @@ -391,11 +404,12 @@ namespace CodeWalker.GameFiles { if (_CMapData.DistantLODLightsSOA.position.Count1 != 0) { + var soa = _CMapData.DistantLODLightsSOA; DistantLODLights = new YmapDistantLODLights(); DistantLODLights.Ymap = this; - DistantLODLights.CDistantLODLight = _CMapData.DistantLODLightsSOA; - DistantLODLights.colours = MetaTypes.GetUintArray(Meta, _CMapData.DistantLODLightsSOA.RGBI); - DistantLODLights.positions = MetaTypes.ConvertDataArray(Meta, MetaName.VECTOR3, _CMapData.DistantLODLightsSOA.position); + DistantLODLights.CDistantLODLight = soa; + DistantLODLights.colours = MetaTypes.GetUintArray(Meta, soa.RGBI); + DistantLODLights.positions = MetaTypes.ConvertDataArray(Meta, MetaName.VECTOR3, soa.position); DistantLODLights.CalcBB(); } } @@ -480,6 +494,8 @@ namespace CodeWalker.GameFiles public void BuildCEntityDefs() { //recreates the CEntityDefs and CMloInstanceDefs arrays from AllEntities. + //TODO: save entity extensions!!? + CEntityDefs = null; CMloInstanceDefs = null; if (AllEntities == null) @@ -659,8 +675,34 @@ namespace CodeWalker.GameFiles mapdata.instancedData = new rage__fwInstancedMapData(); } - mapdata.LODLightsSOA = new CLODLight(); - mapdata.DistantLODLightsSOA = new CDistantLODLight(); + if ((LODLights != null) && (LODLights.direction != null)) + { + var soa = new CLODLight(); + soa.direction = mb.AddItemArrayPtr(MetaName.VECTOR3, LODLights.direction); + soa.falloff = mb.AddFloatArrayPtr(LODLights.falloff); + soa.falloffExponent = mb.AddFloatArrayPtr(LODLights.falloffExponent); + soa.timeAndStateFlags = mb.AddUintArrayPtr(LODLights.timeAndStateFlags); + soa.hash = mb.AddUintArrayPtr(LODLights.hash); + soa.coneInnerAngle = mb.AddByteArrayPtr(LODLights.coneInnerAngle); + soa.coneOuterAngleOrCapExt = mb.AddByteArrayPtr(LODLights.coneOuterAngleOrCapExt); + soa.coronaIntensity = mb.AddByteArrayPtr(LODLights.coronaIntensity); + mapdata.LODLightsSOA = soa; + } + else + { + mapdata.LODLightsSOA = new CLODLight(); + } + if ((DistantLODLights != null) && (DistantLODLights.positions != null)) + { + var soa = DistantLODLights.CDistantLODLight;//to copy base vars + soa.position = mb.AddItemArrayPtr(MetaName.VECTOR3, DistantLODLights.positions); + soa.RGBI = mb.AddUintArrayPtr(DistantLODLights.colours); + mapdata.DistantLODLightsSOA = soa; + } + else + { + mapdata.DistantLODLightsSOA = new CDistantLODLight(); + } @@ -700,6 +742,14 @@ namespace CodeWalker.GameFiles { mb.AddStructureInfo(MetaName.CCarGen); } + if ((LODLights != null) && (LODLights.direction != null)) + { + mb.AddStructureInfo(MetaName.VECTOR3); + } + if ((DistantLODLights != null) && (DistantLODLights.positions != null)) + { + mb.AddStructureInfo(MetaName.VECTOR3); + } mb.AddEnumInfo(MetaName.rage__eLodType); //LODTYPES_ mb.AddEnumInfo(MetaName.rage__ePriorityLevel); //PRI_ @@ -2127,6 +2177,44 @@ namespace CodeWalker.GameFiles } } + [TypeConverter(typeof(ExpandableObjectConverter))] + public class YmapLODLights + { + public CLODLight CLODLight { get; set; } + public MetaVECTOR3[] direction { get; set; } + public float[] falloff { get; set; } + public float[] falloffExponent { get; set; } + public uint[] timeAndStateFlags { get; set; } + public uint[] hash { get; set; } + public byte[] coneInnerAngle { get; set; } + public byte[] coneOuterAngleOrCapExt { get; set; } + public byte[] coronaIntensity { get; set; } + + public Vector3 BBMin { get; set; } + public Vector3 BBMax { get; set; } + public YmapFile Ymap { get; set; } + + public void CalcBB() + { + //if (positions != null) + //{ + // Vector3 min = new Vector3(float.MaxValue); + // Vector3 max = new Vector3(float.MinValue); + // for (int i = 0; i < positions.Length; i++) + // { + // var p = positions[i]; + // Vector3 pv = p.ToVector3(); + // min = Vector3.Min(min, pv); + // max = Vector3.Max(max, pv); + // } + // BBMin = min; + // BBMax = max; + //} + + } + } + + [TypeConverter(typeof(ExpandableObjectConverter))] public class YmapTimeCycleModifier { diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index cf398b5..ce33956 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -2245,6 +2245,83 @@ namespace CodeWalker.GameFiles return drawable; } + public DrawableBase TryGetDrawable(Archetype arche, out bool waitingForLoad) + { + waitingForLoad = false; + if (arche == null) return null; + uint drawhash = arche.Hash; + DrawableBase drawable = null; + if ((arche.DrawableDict != 0))// && (arche.DrawableDict != arche.Hash)) + { + //try get drawable from ydd... + YddFile ydd = GetYdd(arche.DrawableDict); + if (ydd != null) + { + if (ydd.Loaded) + { + if (ydd.Dict != null) + { + Drawable d; + ydd.Dict.TryGetValue(drawhash, out d); //can't out to base class? + drawable = d; + if (drawable == null) + { + return null; //drawable wasn't in dict!! + } + } + else + { + return null; //ydd has no dict + } + } + else + { + waitingForLoad = true; + return null; //ydd not loaded yet + } + } + else + { + //return null; //couldn't find drawable dict... quit now? + } + } + if (drawable == null) + { + //try get drawable from ydr. + YdrFile ydr = GetYdr(drawhash); + if (ydr != null) + { + if (ydr.Loaded) + { + drawable = ydr.Drawable; + } + else + { + waitingForLoad = true; + } + } + else + { + YftFile yft = GetYft(drawhash); + if (yft != null) + { + if (yft.Loaded) + { + if (yft.Fragment != null) + { + drawable = yft.Fragment.Drawable; + } + } + else + { + waitingForLoad = true; + } + } + } + } + + return drawable; + } diff --git a/CodeWalker.Core/GameFiles/MetaTypes/Meta.cs b/CodeWalker.Core/GameFiles/MetaTypes/Meta.cs index f51874c..5d9857f 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/Meta.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/Meta.cs @@ -1009,6 +1009,13 @@ namespace CodeWalker.GameFiles return x.ToString() + ", " + y.ToString() + ", " + z.ToString(); } + public MetaVECTOR3(Vector3 v) + { + x = v.X; + y = v.Y; + z = v.Z; + } + public Vector3 ToVector3() { return new Vector3(x, y, z); diff --git a/CodeWalker.csproj b/CodeWalker.csproj index b9da053..7221417 100644 --- a/CodeWalker.csproj +++ b/CodeWalker.csproj @@ -143,6 +143,12 @@ AboutForm.cs + + Form + + + GenerateLODLightsPanel.cs + Form @@ -571,6 +577,9 @@ AboutForm.cs + + GenerateLODLightsPanel.cs + BrowseForm.cs diff --git a/Project/Panels/GenerateLODLightsPanel.Designer.cs b/Project/Panels/GenerateLODLightsPanel.Designer.cs new file mode 100644 index 0000000..0b96b56 --- /dev/null +++ b/Project/Panels/GenerateLODLightsPanel.Designer.cs @@ -0,0 +1,111 @@ +namespace CodeWalker.Project.Panels +{ + partial class GenerateLODLightsPanel + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GenerateLODLightsPanel)); + this.StatusLabel = new System.Windows.Forms.Label(); + this.GenerateButton = new System.Windows.Forms.Button(); + this.label2 = new System.Windows.Forms.Label(); + this.NameTextBox = new System.Windows.Forms.TextBox(); + this.label81 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // StatusLabel + // + this.StatusLabel.AutoSize = true; + this.StatusLabel.Location = new System.Drawing.Point(73, 218); + this.StatusLabel.Name = "StatusLabel"; + this.StatusLabel.Size = new System.Drawing.Size(95, 13); + this.StatusLabel.TabIndex = 56; + this.StatusLabel.Text = "Ready to generate"; + // + // GenerateButton + // + this.GenerateButton.Location = new System.Drawing.Point(76, 167); + this.GenerateButton.Name = "GenerateButton"; + this.GenerateButton.Size = new System.Drawing.Size(75, 23); + this.GenerateButton.TabIndex = 55; + this.GenerateButton.Text = "Generate"; + this.GenerateButton.UseVisualStyleBackColor = true; + this.GenerateButton.Click += new System.EventHandler(this.GenerateButton_Click); + // + // label2 + // + this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.label2.Location = new System.Drawing.Point(12, 9); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(459, 108); + this.label2.TabIndex = 54; + this.label2.Text = resources.GetString("label2.Text"); + // + // NameTextBox + // + this.NameTextBox.Location = new System.Drawing.Point(76, 130); + this.NameTextBox.Name = "NameTextBox"; + this.NameTextBox.Size = new System.Drawing.Size(177, 20); + this.NameTextBox.TabIndex = 57; + this.NameTextBox.Text = "myproject"; + // + // label81 + // + this.label81.AutoSize = true; + this.label81.Location = new System.Drawing.Point(11, 133); + this.label81.Name = "label81"; + this.label81.Size = new System.Drawing.Size(38, 13); + this.label81.TabIndex = 58; + this.label81.Text = "Name:"; + // + // GenerateLODLightsPanel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(497, 255); + this.Controls.Add(this.NameTextBox); + this.Controls.Add(this.label81); + this.Controls.Add(this.StatusLabel); + this.Controls.Add(this.GenerateButton); + this.Controls.Add(this.label2); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "GenerateLODLightsPanel"; + this.Text = "Generate LOD Lights ymaps"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label StatusLabel; + private System.Windows.Forms.Button GenerateButton; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox NameTextBox; + private System.Windows.Forms.Label label81; + } +} \ No newline at end of file diff --git a/Project/Panels/GenerateLODLightsPanel.cs b/Project/Panels/GenerateLODLightsPanel.cs new file mode 100644 index 0000000..b411ba3 --- /dev/null +++ b/Project/Panels/GenerateLODLightsPanel.cs @@ -0,0 +1,262 @@ +using CodeWalker.GameFiles; +using SharpDX; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CodeWalker.Project.Panels +{ + public partial class GenerateLODLightsPanel : ProjectPanel + { + public ProjectForm ProjectForm { get; set; } + public ProjectFile CurrentProjectFile { get; set; } + + + public GenerateLODLightsPanel(ProjectForm projectForm) + { + ProjectForm = projectForm; + InitializeComponent(); + + if (ProjectForm?.WorldForm == null) + { + //could happen in some other startup mode - world form is required for this.. + GenerateButton.Enabled = false; + UpdateStatus("Unable to generate - World View not available!"); + } + } + + + public void SetProject(ProjectFile project) + { + CurrentProjectFile = project; + + } + + private void GenerateComplete() + { + try + { + if (InvokeRequired) + { + Invoke(new Action(() => { GenerateComplete(); })); + } + else + { + GenerateButton.Enabled = true; + } + } + catch { } + } + + + private void UpdateStatus(string text) + { + try + { + if (InvokeRequired) + { + Invoke(new Action(() => { UpdateStatus(text); })); + } + else + { + StatusLabel.Text = text; + } + } + catch { } + } + + + + private void GenerateButton_Click(object sender, EventArgs e) + { + //var space = ProjectForm?.WorldForm?.Space; + //if (space == null) return; + var gameFileCache = ProjectForm?.WorldForm?.GameFileCache; + if (gameFileCache == null) return; + + var path = ProjectForm.CurrentProjectFile.GetFullFilePath("navmeshes") + "\\"; + + GenerateButton.Enabled = false; + + + List projectYmaps = ProjectForm.CurrentProjectFile.YmapFiles; + + var pname = NameTextBox.Text; + + Task.Run(() => + { + + + var position = new List(); + var colour = new List(); + var direction = new List(); + var falloff = new List(); + var falloffExponent = new List(); + var timeAndStateFlags = new List(); + var hash = new List(); + var coneInnerAngle = new List(); + var coneOuterAngleOrCapExt = new List(); + var coronaIntensity = new List(); + var eemin = new Vector3(float.MaxValue); + var eemax = new Vector3(float.MinValue); + var semin = new Vector3(float.MaxValue); + var semax = new Vector3(float.MinValue); + + foreach (var ymap in projectYmaps) + { + + foreach (var ent in ymap.AllEntities) + { + if (ent.Archetype == null) continue; + + bool waiting = false; + var dwbl = gameFileCache.TryGetDrawable(ent.Archetype, out waiting); + while (waiting) + { + dwbl = gameFileCache.TryGetDrawable(ent.Archetype, out waiting); + UpdateStatus("Waiting for " + ent.Archetype.AssetName + " to load..."); + Thread.Sleep(20); + } + UpdateStatus("Adding lights from " + ent.Archetype.Name + "..."); + if (dwbl != null) + { + Drawable ddwbl = dwbl as Drawable; + FragDrawable fdwbl = dwbl as FragDrawable; + LightAttributes_s[] lightAttrs = null; + if (ddwbl != null) + { + lightAttrs = ddwbl.LightAttributes; + } + else if (fdwbl != null) + { + lightAttrs = fdwbl.OwnerFragment?.LightAttributes; + } + if (lightAttrs != null) + { + eemin = Vector3.Min(eemin, ent.BBMin); + eemax = Vector3.Max(eemax, ent.BBMax); + semin = Vector3.Min(semin, ent.BBMin - ent._CEntityDef.lodDist); + semax = Vector3.Max(semax, ent.BBMax + ent._CEntityDef.lodDist); + + + foreach (var la in lightAttrs) + { + //transform this light with the entity position and orientation + //generate lights data from it! + + Vector3 lpos = new Vector3(la.PositionX, la.PositionY, la.PositionZ); + Vector3 ldir = new Vector3(la.DirectionX, la.DirectionY, la.DirectionZ); + Vector3 epos = ent.Orientation.Multiply(lpos) + ent.Position; + Vector3 edir = ent.Orientation.Multiply(ldir); + + uint r = la.ColorR; + uint g = la.ColorG; + uint b = la.ColorB; + uint i = (byte)la.Intensity; + uint c = (i << 24) + (r << 16) + (g << 8) + b; + + uint h = 0; //TODO: what hash to use??? + + uint t = la.TimeFlags; + + var maxext = (byte)Math.Max(Math.Max(la.ExtentX, la.ExtentY), la.ExtentZ); + + + position.Add(new MetaVECTOR3(epos)); + colour.Add(c); + direction.Add(new MetaVECTOR3(edir)); + falloff.Add(la.Falloff); + falloffExponent.Add(la.FalloffExponent); + timeAndStateFlags.Add(t); + hash.Add(h); + coneInnerAngle.Add((byte)la.ConeInnerAngle); + coneOuterAngleOrCapExt.Add(Math.Max((byte)la.ConeOuterAngle, maxext)); + coronaIntensity.Add((byte)la.CoronaIntensity); + + + } + } + } + } + } + + + if (position.Count == 0) + { + MessageBox.Show("No lights found in project!"); + return; + } + + + var lodymap = new YmapFile(); + var distymap = new YmapFile(); + var ll = new YmapLODLights(); + var dl = new YmapDistantLODLights(); + var cdl = new CDistantLODLight(); + cdl.category = 1; + dl.CDistantLODLight = cdl; + dl.positions = position.ToArray(); + dl.colours = colour.ToArray(); + ll.direction = direction.ToArray(); + ll.falloff = falloff.ToArray(); + ll.falloffExponent = falloffExponent.ToArray(); + ll.timeAndStateFlags = timeAndStateFlags.ToArray(); + ll.hash = hash.ToArray(); + ll.coneInnerAngle = coneInnerAngle.ToArray(); + ll.coneOuterAngleOrCapExt = coneOuterAngleOrCapExt.ToArray(); + ll.coronaIntensity = coronaIntensity.ToArray(); + + + lodymap._CMapData.flags = 0; + distymap._CMapData.flags = 2; + lodymap._CMapData.contentFlags = 128; + distymap._CMapData.contentFlags = 256; + + lodymap._CMapData.entitiesExtentsMin = eemin; + lodymap._CMapData.entitiesExtentsMax = eemax; + lodymap._CMapData.streamingExtentsMin = semin - 1000f; + lodymap._CMapData.streamingExtentsMax = semax + 1000f; + distymap._CMapData.entitiesExtentsMin = eemin; + distymap._CMapData.entitiesExtentsMax = eemax; + distymap._CMapData.streamingExtentsMin = semin - 5000f; //make it huge + distymap._CMapData.streamingExtentsMax = semax + 5000f; + + lodymap.LODLights = ll; + distymap.DistantLODLights = dl; + + var lodname = pname + "_lodlights"; + var distname = pname + "_distantlights"; + lodymap.Name = lodname; + lodymap._CMapData.name = JenkHash.GenHash(lodname); + lodymap.RpfFileEntry = new RpfResourceFileEntry(); + lodymap.RpfFileEntry.Name = lodname + ".ymap"; + lodymap.RpfFileEntry.NameLower = lodname + ".ymap"; + distymap.Name = distname; + distymap._CMapData.name = JenkHash.GenHash(distname); + distymap.RpfFileEntry = new RpfResourceFileEntry(); + distymap.RpfFileEntry.Name = distname + ".ymap"; + distymap.RpfFileEntry.NameLower = distname + ".ymap"; + + lodymap._CMapData.parent = distymap._CMapData.name; + + ProjectForm.Invoke((MethodInvoker)delegate + { + ProjectForm.AddYmapToProject(lodymap); + ProjectForm.AddYmapToProject(distymap); + }); + + var stats = ""; + UpdateStatus("Process complete. " + stats); + GenerateComplete(); + + }); + } + } +} diff --git a/Project/Panels/GenerateLODLightsPanel.resx b/Project/Panels/GenerateLODLightsPanel.resx new file mode 100644 index 0000000..4f1f85d --- /dev/null +++ b/Project/Panels/GenerateLODLightsPanel.resx @@ -0,0 +1,416 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + This tool allows for generating LOD Lights ymap files for the entities in the current project. + +Make sure that all archetypes and drawables containing lights info are either in base game files or in a DLC that is currently loaded by CodeWalker. + +Generated ymap files will be named in the format name_distantlights.ymap and name_lodlights.ymap, and will be added to the project. + + + + + AAABAAMAICAAAAAAGACoDAAANgAAABAQAAAAABgAaAMAAN4MAABAQAAAAAAYACgyAABGEAAAKAAAACAA + AABAAAAAAQAYAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/u3v+Pn6//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7+/vX3/rzA3OHl9fz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7//+zv+3Z6qcLI5Pr7/wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP7+/+br+15in6+33vf5/wAAAAAAAAAAAAAAAP7+//7+/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//v8//v8//3+/wAAAAAAAAAAAAAAAAAAAP7+/+Ho+1dana20 + 4/b4/wAAAAAAAPz9//P2/+Tp/ezw/vz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///X4 + /9Pa+tPa+/H1//z9/wAAAAAAAAAAAAAAAP7+/93k+SsscaSr3PX3/wAAAP7+//L1/7W98AcWgrvC8Pj6 + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/+bs/xohiAEJdrvF9+7y//z9/wAAAAAAAAAA + AP7+/9rh+CEkapmh0/T3/wAAAPj6/9HZ/AEHcgEEb9LZ+/r7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP7//+/z/3F+zAAAXwQLcZai3fb4/wAAAAAAAAAAAP3+/97l/E9Tmaau4fT3/wAAAO/0/1dd + sAAAV7a/8/H1//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPr8/+jv/46Y3QUUf6Ot + 5PX4/wAAAAAAAAAAAP3+/9zj+3Z6wLe/7fX4/wAAAPD0/212xnaAzerw//z9/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/+/z/+Dm+/D0//z9/wAAAAAAAP7+//j6/9Pd+UhLjb/H + 9/D0//3+//n7/+nt/+jt//n7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7///7+//7+//7+/wAAAAAAAPr8/+7z/83W+ImU2A0UdFNarr/K9env//X4//z9//3+//7//wAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///j6/+Pq/255 + xhckjE5XsVVftUlTqwAKeTA9nr3H8+7z//v8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+//b4/9Tc+Sc0mRonj8rV/crX/ZSb48rX/brG8wwWgQAEdJei + 4efu//n7//7+//z9//z9//z9//z9//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//f5/+3y/+nv/+ft + /8vV+io2mImU2M7c/7vG9yIvlQAOfCg4mM3Y/s/c/4aR1AQRfGtzwtni/ebt/9vi/tri/tXd+9Tc+O3x + /vz9/wAAAAAAAAAAAAAAAAAAAAAAAPn6/87V+FVftkRPrFlnvSEqjQoUfmJvwWFvvg0TfQQIcxEchwAD + cy89n19rvVVitQwZgwAAaiMrkT9NqTVBoiw3mhQihig1mNLX+fv8/wAAAAAAAAAAAAAAAAAAAAAAAPb5 + /52l4EFLqoCK03yF0VBctGhyw52o5GVrvQAAaneBzsHM+jA3mhYgiTtIpJOf3ouW2AAAbmh0wbbA8bS+ + 7qiz5pCb16+56e/z//3+/wAAAAAAAAAAAAAAAAAAAAAAAPv8//H1/+vw/+zx/+nv/7/J9YqP3MbP/8LM + +hwqkFZftaCp5EhRrcTQ+9jj/8rW/UJMqn6J0ebt//X3//f5//b4//X3//f5//z9/wAAAAAAAAAAAAAA + AAAAAAAAAP7+//z9//3+/wAAAAAAAP3+/+7z/6at64iP3aWs7XN8zRIfhyUykp2o5MHM+oKM0xonjY6X + 2+jv//v8/wAAAP7+//n7//b5//r7//7//wAAAAAAAAAAAAAAAP7+//f5/+rw/9Pa9fL0/v7//wAAAAAA + APv8//H1/+Tr/7i/91liu0NPq0VQrS06m0NNqDdCoYqU1+nv//v8/wAAAAAAAPn7/9zi/qSt59ri/fL1 + //v8//7//wAAAPz9//D0/8rT+h0sjkVQrPD0/wAAAAAAAAAAAAAAAAAAAPz9/+7z/8LL9Jqk4aGq6LW/ + 8c3W9+Xs/vH1//v8/wAAAAAAAAAAAPf5/6at5gAAbxIfh6u16+Po/fr7/wAAAPb5/6ev5gAIeAAPernC + 8fX4/wAAAAAAAP3+//v8//z9/wAAAP3+//j6//P3//P2//b4//r8//7+//7+//v8//r8//3+/wAAAPv8 + /+Xr/nuIzwAAbBseg5Sb2fb5/wAAAPf5/8DF8pWe3d/n/vT3//39/wAAAPv8/+zx/87V9+3x/v3+/wAA + AP3+//j6//X4//v8/wAAAAAAAPn7/+Dm/snR9fD0//39//z8/fv8/+3y/8LK9aGq4dfd9/n7/wAAAPz9 + //b5//X4//v8/wAAAAAAAP7+/+7z/4aP1gEPet7k/f39/wAAAPf5/83U+ZCZ2u3x/v7+/wAAAPP3/215 + wgAJd7fB8/L1//7+/wAAAP3+//j6//f5//r8//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAPj6/87W/AAA + X2duue3y//7+/wAAAPD0/05asBQfidzj/P39/wAAAPX4/6Su6AAAXBccgtff/vv8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP3/3F8xhYli9Xe/fn6/wAAAAAAAO3y/1pltQAJd9be + /fv8/wAAAPz9/+rw/36I0Bknjs/W+vv8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAPf5/8HI7tnf+/X4//7+/wAAAAAAAO/0/3R7xgAAb9ng/Pz9/wAAAAAAAPn7/+Ln/dLY+fP2//3+ + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//r7//v8//7+/wAAAAAAAAAA + APb4/7/F84eP0e/0//7+/wAAAAAAAP7+//z9//v8//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz9//b5//X4//v8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////w////4 + P///+D////g8//D4MH/geCB/4Dggf+A4IH/wOCD/+DAB//hgAf//gAP//wAAB/AAAAPwAAAD8AAAA/AA + AAfjAAEHgYADAQPgBwEDEAEBAghgAQwIIEH8CCB//Bggf/wYMH/8ODD///h/////////////KAAAABAA + AAAgAAAAAQAYAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+vv/fL1/v///wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///4+Vx7/F5v///wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAP///4CHtrS62////////////////////wAAAAAAAAAAAP////H0/vf6/v// + /////////4yTwrrB4f///+zw+7rA6P39/////wAAAAAAAAAAAP///56l2BkcguXr/P///////42Uw8jO + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2OL+NjZ7AAArX2Ok + 4uz/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 2eP/LjJ1DAxKfYTE4Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//f7//f7//v7//v// + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/gILIR0eVeoHC3eb/8fX/+/z/AAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+Pr/ + +Pr/+Pr/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+vv/+vv/+/z//f3//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/2eP9ZWeqHx1obnOz4Or/8fX/+/z/AAAAAAAAAAAAAAAA/v7/ + +/z/9fj/8vb/8PX/7vT/8fb/9fj/+fr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/9fj/9fj/9Pj/9Pf/9vn/+/z//v7/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP9ODp9AAA5jZDQ5O7/8PX/+/z/AAAA + AAAAAAAA/v7/+/z/9Pf/7fP/5u//wsz6j5XfuMDx7fL/9vn//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+Pr/8/b/5+3/2eH/2uP/ + 5u3/7fP/8/b/+vv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3ef/U1ebBgVKio/O + 4uz/8fX/+/z/AAAAAAAA/v///P3/9fj/7fP/4uv/hIzZHSWPAABmU1i14ub/9/r/+/z/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9Pf/ + 7/X/09z/TlSzNzWYj5bh5O7/6/L/8vb/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fX/ + 2eP/QUWIEhBZbnSz3uj/8fb/+/z/AAAAAAAA/f7/+Pr/7/T/6PH/iI7cAABvAABqAABncXjK6O//9fj/ + +/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+/z/8/f/2uD/Z27EAABnAABiBgl4jJTd5vD/6O//8vX/+fv//f7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8fb/2OP/Mjd6AQE6ZGup4er/8fX/+/z/AAAAAAAA+vz/8fX/6/T/xM/8ExyJAABwAABu + GySRxc387fT/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vz/8/f/1Nr/MzqhAABhAxOBAARyBgp5jpLg5Oz/7PP/9Pf/+vz//v7/ + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP/KCtvBwZOjJHS4Or/8fX/+/z/AAAA/f7/9/n/7fP/3+j/ + UFq3AABtAAZ3BAh6mZ/n5vD/7vP/+Pr//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/6e//sbb1KzWcAABwBhaBAAFyAgp6fITR + 1d777/T/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3+j/WF2hBglTnaTj5O3/8PX/+/z/AAAA + /P3/9Pf/6vL/k5riAAByAAR0AABrY2vE4ur/6vH/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/7fL/5O3/ytX/RU6w + AABpAA5+AABuAABnhord6e7/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/7/T/3+j/k5jbT1KdgYjJ + 3uf+8fX/+/z/AAAA+/z/9fn/4ef/NDqhAABnAABrJjCU0Nn/5/D/8fX/+vv//v7/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + 9vn/7vP/6vP/ztb/O0CmAABpAABrQkuoxMn57PH/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/ + 2+X/en/CUFGak5nY3+j/8fX//P3/AAAA/P3/9fj/4en/i5DbNT2hIyuTpqzv4uz/7vP/9/n//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/9vn/7/P/6vL/ytH/X2i9XWi7wsf/6e//8/f/+Pr//v7/AAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/WF2hW1ylvMD+3uf/8PX/+/z/AAAA/f7/9vn/7fP/4uj/j5Pgf4LV3+X/6fD/ + 9Pf//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/8vX/7fP/5+//5u7/6vD/8PT/9vn//P3//v7/ + AAAAAAAAAAAAAAAAAAAA/f7/9/n/7fP/0tz9LDJzNjh/nqTk2uT/7fL/9/n//f7//f7/+fv/8/b/7PL/ + 3eX/zM//5ev/9fj/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f3/+vv/9/n/9vn/9fj/9vn/ + +fr//P3//v7/AAAAAAAAAAAA/v///f7/+vv/9vn/7/T/5vD/2Ob/VFubERNdoajk4u//5O7/7vP/9vj/ + +fr/+vv/+Pr/9fj/9Pj/9fj/9fj/+Pr//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///v7/ + /f7//P3//P3//f3//v7//v//AAAAAAAAAAAA/f7/+vz/9vn/8fX/7vT/5O3/3eb/z9n/cHjICxN5d37L + z9n/2eP/5O3/6/L/8PT/9Pf/9/n/+vv/+vv/+/z//P3//f3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+Pr/8/b/7vT/6vL/z9r+jZjeQUeq + IiuQCBN3AAFrBRB8Nj2iUViym6XlydH/4+z/6/L/8PT/9/n/+/z//f7//v//AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/8fX/6/L/3uf/ + mKTkLzibAABoAAB0Fx+HDBh7FSGDAg16AABYAABlCBB/Ji2UhYza1+D/6PL/7fL/9Pf/+vv//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/9/n/ + 8PT/7PT/z9j/XmO+AABtAABcMDSXoajsu8X7VV+5hYzblZ/fTVSxFSKMAABkAABnAAN2Qkmpsbrz5e3/ + 6vH/8fX/+Pr//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/P3/9/n/8PX/7PT/vcn3LTOZAABaAgR1ZWzD0Nf/5vL/1OP/l53lzs3/6fP/4+7/sLzwZ23CBxSD + AABnAABlHiaSmqHo3+j/5+//7/T/9vn//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/ + /v7//v7//v7//f7/+/z/9vj/7vP/7PX/tcLzEBeGAABkPEWlqLPt2eX/4e7/3On/uMX1gofVe3vPhYzY + z93+5/X/4e3/lJ3gHiOPAABtAABqChiEbHLIytD/5/D/7PL/8/f/+Pr/+fr/+Pr/+Pr/+Pr/+Pr/+Pr/ + +Pr/+fv/+vv/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+fv/9/n/9vj/9fj/9Pf/8fX/7PL/4uv/l6HgDhF7AAN4iZDe0d7/3uz/4vD/w83/VVm3 + ICiSAAFyAABlAABwaHTD1N//2un/3er/w838ZW3BEyOJJzKVAQ16NDmfwsn75fD/5u7/7PL/7vP/7fP/ + 7fP/7fL/7fP/7vP/7/T/8fb/9Pj/9vn/+fr//f3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/+Pr/9Pf/8fX/7vT/7PL/6/L/6fH/5u7/6vX/tsD0CQx4AAFwkZvi7ff/4vD/ + 4fD/z9j/OkGlAABiAABwBxWAAAt7BBN+P0uofYLUztb/4O7/6fb/6fP/qa7xQkyoBg56AABqMjugx8/+ + 5fH/4Ov/4On/3uj/3eb/3+j/3uj/1+L/0d3/1d7/3+f/7fL/9vj/+vz//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+fr/8/f/6/L/2d//v8j6vcf5ucP1wMv8wM3+vMj6PkqoAABo + UF25usP7tsPyvsr6sLrwQ0utAABqAAV1OUameIDRKDWZAAd2GyeOLDecmaHntsL0pbLom6riq7LzUlu0 + AANzBhR/AAZ0NT+ja3bBY2i/XGG6UViyWl65XGG7XGC6TVWvQU6pPkalODygqK7p8vb/+vz//v7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/7/T/wcj2R0ysExeFERmGDxuIFB6K + FBqICxSEAABsAAByDBiDCRSBBRCADhaFCRODAAh4AxF/AAl4CxeDHSaPAAp6AAN0AA19AAd3CBOBEBqH + BhGBAAh5AABwAAByAAh5BhSCAxWCAABsAABvAABlAABnAABxAABjAABmAABhAABdAABYAABhCAt/q7Lr + 8/f/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+fv/3uT/SE2vAABn + CBB/GiCMLzmfLTWcGByJFRyKGCOOMj2gHymRDxiGGyOPLDCXBRF/AAh3BhaCEyKMICqTKC2WNDqfIzCV + Awx6Eh+JHiaPAAR3AAZ5CxSDICWQX2q7Q1CqAA1+AAFxDxuHiZTbVGC4dHnQnabrTVqzY23EUV62Slau + LjaZXWm9sLjz5ez/9vn/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +Pv/4+n+e4LPfoPVpqv2vsf/zNX/zdb/xtH/v8v8pK7spKfysLb3vcr4ws784ej/hI/YAAZ1AAJzVF25 + yM//3Of/5+//i5LcAABpMzyfp6vxoKznlqHhqbbtx9H/8fz/kpvfAABiAABph4zc5PD/2OP/193/3un/ + 1+D/2OH/1+D/0Nr/zNL/3+j/6/L/7/T/9vn//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+Pr/9Pf/6vD/5u3/3+b/4uv/6PD/5+//5O3/5/P/sL3sXmS7mZzoz9f/3+z/4e// + mKLiEiKKCBF/KTWZr7T06/f/3ev/VF2zChSBipPcz9v+4u7/3ur/3ev/5/X/qrPrISmSDRJ2Xmq/3ur/ + 4uv/6vH/7fP/7fL/7/T/7vP/7fP/7fP/8PX/8fX/9Pf/+Pr/+/z//v7/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+Pr/9vn/9Pf/8vb/8vb/8/b/9Pf/7/T/6/L/tL/ubXLH + en/Ti43gqavy0t3/nafjMj6fJzaaAAV1GyeOYmW7Nz6fAABgNj6i1N//3uz/2uX/3Oj/5PH/wcj7FR2J + AAN0gong0tr/6fH/7/P/9vj/+Pr/+fv/+fv/+Pr/+Pr/+Pr/+fv/+vv//P3//f7//v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+/z/+/z/+/z//f3//f7/ + +fv/8fX/5Oz/jpbfc3jObnXLcXfOk5rks7b4iY3dR1KvDhuEAABoAABlEBV9U12ytcD13Or/3en/3ej/ + 1eL/q7fvGR+MKDKZbnnNxc/76PD/8fX/+fr//f7//v//AAAA/v7//f7//f3//P3//f3//f7//v//AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//f7//v7/AAAA + AAAAAAAAAAAAAAAA/f7/9vn/7/T/yNH5lJrleoDVmZ3pmpzpc3nPfoTWf4bYVFy3HSaLZ3PGsrb8v8r8 + y9n9q7jre4LRf4fUgIvXAwZ1AABrhYjb0NX/6PH/8PX/+Pr//f7/AAAAAAAA/v///f3/+vv/+Pr/9/r/ + 9/n/+Pr/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f7/+/z/+fr/9vj/9/n/ + +vz/+vv/+/z//v7/AAAAAAAAAAAAAAAA/v7/+vz/8/f/7PL/2uT/t8H1srP6vcH+nKTnSlOxV2C7TVaz + WGS8QUqmSlSuSFOtR1GtbXTKVl23ARB5AAh2AABnd33P3eP/4ur/7/T/9/n//P3/AAAAAAAAAAAA/P3/ + 9/n/8vb/7PH/6fD/7PL/7vP/8vb/9vn/+/z//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/+Pr/ + 8/b/7/T/8Pb/6vH/3eP97vL++fr//P3/AAAAAAAAAAAAAAAAAAAA/f7/+vv/9fj/7/T/5+//z9f+t7v4 + uLn9Z2zFLzucFCGIMz6gGCCMAAd4AAl2Dx2EER+GXWK8c3XLKzKXd4LP4er/6/L/8PX/9/n//P3//v// + AAAAAAAA/v7/+fv/8/b/7PP/y9H/i4/erLbt4er/5e3/7fP/8/b/+fv//f3//v7/AAAAAAAAAAAAAAAA + /v7/+/z/9vj/8PT/6/L/3+n/x9H9aHTAZGvG3+b9+Pr/+/z/AAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + +Pr/8vb/6/H/3OX+wMn4maDmdHrPWGG6T1a1eoHWcHfOTlayUlq1SlKubHjAxMj/0dn/4+v/7PL/8vb/ + +Pr//P3//v7/AAAAAAAAAAAA/f7/+fr/7vP/xsv5YGXAHymRKjKYYWS9rbLz4u3/6/P/8vb/+fr//f7/ + AAAAAAAAAAAA/v//+/z/9vj/7fL/5e3/xs7/Y23BIiiSAABeLTab3+b/9/r/+/z/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAA/f7/+vz/9vj/8PX/6vH/3eb/ydL8xM/6uMPyt733w8j/zNb/1Nz/3OT/4uz/5u7/ + 7fP/8vb/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAA/f7/+fv/7vP/jpHiAAJ1CxaBER6GAABoFRmGbXbH + 0Nf/7PL/9fj//P3/AAAAAAAAAAAA/v7/+fv/8/f/4Of/hYvbKDGZAABuAABdAAZyi5La5+7/9vn/+/z/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/9ff/8vb/7/X/7fP/6/L/5u3/5ez/6fD/ + 7PP/7/T/8fX/9Pf/9/n/+vv//P3//v7//v//AAAAAAAAAAAAAAAAAAAA/v7/+fv/8fb/2eH9fIbQExqH + AABrAAp6AAFyAABwS0+uztX39vn/+vz/AAAAAAAAAAAA/f7/+Pr/8ff/qbLpAABrAABhAABwDBWAfobX + 5e3/8PX/9vn//f3/AAAAAAAA/v///f7/+/z/+vv/+vv/+vz//P3//v7//v///v7//P3/+vz/+Pr/9/n/ + 9vj/9vj/9vj/9vj/9/n/+fr/+/z//P3//f7//v7//f7//P3/+/z/+vz/+/z//P3//v7/AAAA/v7/+/z/ + 9fj/7/T/5/H/uML1U1e1AAh5AABuAABvMjmdv8bz9vr/+vv/AAAAAAAAAAAA/f7/+fv/7/T/iY7aDxSA + GiONa3XHsr7w4Oj/6/H/9Pf/+vz//v7/AAAA/v///P3/+Pr/9Pf/8/f/9fj/9fj/9vn/+/z//v7/AAAA + AAAAAAAA/v7//f7//P3/+/z/+/z//P3//f7//v//AAAAAAAAAAAA/v7/+/z/9/n/9vn/9vn/9Pj/9vn/ + +/z//v7/AAAA/f7/+vz/9fj/7/T/6vL/3ef/i5PbGRqJBQl5jJbZ6vH/9Pj/+/z/AAAAAAAAAAAA/f7/ + +fv/8fT/1Nn9t7/0wcr54er/7fT/8fX/9fj/+vv//f7/AAAAAAAA/f3/+Pr/8PT/6/L/3uX/ztb/5Or/ + 8/f/+Pr//f7/AAAAAAAAAAAA/f7/+vz/+Pr/+fv/+fv/+vv//f3//v//AAAAAAAAAAAA/P3/9/n/7vL/ + 193/ztf/5u3/7vP/9Pf/+/z//v7/AAAA/v7//P3/+Pr/8fX/7PP/5/D/sLfxoKnk4+r/8vf/9/n//f3/ + AAAAAAAAAAAA/v7/+/z/9vn/9Pf/8vb/8fb/8fX/9Pf/+Pr//P3//v7/AAAAAAAA/v7/+vv/8vb/5+7/ + y9H/WWO9KSmSkZXj6vD/+Pv//P3/AAAAAAAA/f7/+Pr/9fj/8vb/6O7/7vP/9fj/+Pr//f7/AAAAAAAA + /v//+vv/8vb/7PP/hYraKiqKlp7i6PD/7fP/9ff/+/z//v7/AAAAAAAA/f7/+vv/9ff/8fX/8PX/8vb/ + 8/f/9vn/+/z//v7/AAAAAAAAAAAAAAAA/f7/+/z/+vv/+fr/+fr/+vv//P3//v7/AAAAAAAAAAAAAAAA + /P3/9fj/7PL/1d7/RUysAABhAABlg4ja6/D/+Pr//P3/AAAAAAAA+/z/9fj/6e7/2eD/h4/bnaXg7PH/ + 9fj/+/z/AAAAAAAA/v7/+Pr/8PX/y9X1JDGVAABaERWDoKnp6PH/7vP/9/n//P3/AAAAAAAAAAAA/v7/ + /P3/+vv/+fv/+fv/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//v7//v7//v//AAAAAAAA + AAAAAAAAAAAA/v7/+fv/8PX/7PX/ipPdAABsAABlQ1Cp3Ob/7vP/9/n//f7/AAAAAAAA+fv/9Pj/yNH5 + Ule2DBJ8Ljie0df+8fb/+fv//v7/AAAA/v7/+Pr/7/X/hY3YAABxAAl7AABuEBaEs7nz6fH/8fX/+vv/ + /v7/AAAAAAAAAAAAAAAA/v///v7//v7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9vn/7PL/0tn/LzidAQFsAAB0iZHb6vP/8PT/+fv//v//AAAA + /v7/+Pr/8vf/r7rqAAV4AABdPUen1N//7PL/9vn//f7/AAAA/v7/+fr/7/T/yc75S1G0AABrARKAAABp + Qker0df/7fP/9/n//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/5+7/cXXNAAd2AABuMDebzdT97PL/ + 9vj//P3/AAAAAAAA/v7/9/n/7/X/tL/uFCCLAABqHSqRvcf46fD/9Pf//f3/AAAAAAAA+vv/8vX/6vH/ + yM3+JC2XAABtAAV2Agx9q7Ly7vT/9vn//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/4uj/WWO1AAVx + KTaYu8T07fT/8vb/+vv//v7/AAAAAAAA/v7/9/n/7vX/vsn1Iy2SAABrAQ99mp/o6PD/9Pf//P3/AAAA + AAAA/P3/9/n/7vP/6fL/s7z2DBB/AABeQ0uttrr56e7/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +fv/4ef6g4zNbXfFw8v27fT/8vb/+Pr//f3/AAAAAAAAAAAA/v7/9/n/7vT/yNL7MjucAABtBxF/nKLo + 6fH/9Pf//P3/AAAAAAAA/v7/+/z/9fj/7fL/6/T/jZXbLzScrrP14en/7fL/+fv//v7/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+vz/8PP91dr34+f/8vb/8/f/9/r//P3//v//AAAAAAAAAAAA/v7/+Pr/8PX/1N3/ + QUqmAQRxBQ98m6Dm7PL/9fj//P3/AAAAAAAAAAAA/v7/+/z/9ff/8PX/5ez/ytH94ej/8vb/9vj/+/z/ + /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA + /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ + 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA + AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file diff --git a/Project/ProjectForm.Designer.cs b/Project/ProjectForm.Designer.cs index 5e87ad8..bf77d6c 100644 --- a/Project/ProjectForm.Designer.cs +++ b/Project/ProjectForm.Designer.cs @@ -133,6 +133,8 @@ this.AudioNewAmbientEmitterListMenu = new System.Windows.Forms.ToolStripMenuItem(); this.AudioNewAmbientZoneMenu = new System.Windows.Forms.ToolStripMenuItem(); this.AudioNewAmbientZoneListMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.AudioNewInteriorMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.AudioNewInteriorRoomMenu = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator24 = new System.Windows.Forms.ToolStripSeparator(); this.AudioAddToProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); this.AudioRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); @@ -170,8 +172,7 @@ this.ToolbarSaveButton = new System.Windows.Forms.ToolStripButton(); this.ToolbarSaveAllButton = new System.Windows.Forms.ToolStripButton(); this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); - this.AudioNewInteriorMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.AudioNewInteriorRoomMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ToolsLODLightsGeneratorMenu = new System.Windows.Forms.ToolStripMenuItem(); this.MainMenu.SuspendLayout(); this.MainToolbar.SuspendLayout(); this.SuspendLayout(); @@ -1022,6 +1023,22 @@ this.AudioNewAmbientZoneListMenu.Text = "New Ambient Zone List"; this.AudioNewAmbientZoneListMenu.Click += new System.EventHandler(this.AudioNewAmbientZoneListMenu_Click); // + // AudioNewInteriorMenu + // + this.AudioNewInteriorMenu.Enabled = false; + this.AudioNewInteriorMenu.Name = "AudioNewInteriorMenu"; + this.AudioNewInteriorMenu.Size = new System.Drawing.Size(216, 22); + this.AudioNewInteriorMenu.Text = "New Interior"; + this.AudioNewInteriorMenu.Click += new System.EventHandler(this.AudioNewInteriorMenu_Click); + // + // AudioNewInteriorRoomMenu + // + this.AudioNewInteriorRoomMenu.Enabled = false; + this.AudioNewInteriorRoomMenu.Name = "AudioNewInteriorRoomMenu"; + this.AudioNewInteriorRoomMenu.Size = new System.Drawing.Size(216, 22); + this.AudioNewInteriorRoomMenu.Text = "New Interior Room"; + this.AudioNewInteriorRoomMenu.Click += new System.EventHandler(this.AudioNewInteriorRoomMenu_Click); + // // toolStripSeparator24 // this.toolStripSeparator24.Name = "toolStripSeparator24"; @@ -1047,6 +1064,7 @@ // this.ToolsMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.ToolsManifestGeneratorMenu, + this.ToolsLODLightsGeneratorMenu, this.ToolsNavMeshGeneratorMenu, this.toolStripSeparator2, this.ToolsImportMenyooXmlMenu}); @@ -1057,14 +1075,14 @@ // ToolsManifestGeneratorMenu // this.ToolsManifestGeneratorMenu.Name = "ToolsManifestGeneratorMenu"; - this.ToolsManifestGeneratorMenu.Size = new System.Drawing.Size(193, 22); + this.ToolsManifestGeneratorMenu.Size = new System.Drawing.Size(196, 22); this.ToolsManifestGeneratorMenu.Text = "Manifest Generator..."; this.ToolsManifestGeneratorMenu.Click += new System.EventHandler(this.ToolsManifestGeneratorMenu_Click); // // ToolsNavMeshGeneratorMenu // this.ToolsNavMeshGeneratorMenu.Name = "ToolsNavMeshGeneratorMenu"; - this.ToolsNavMeshGeneratorMenu.Size = new System.Drawing.Size(193, 22); + this.ToolsNavMeshGeneratorMenu.Size = new System.Drawing.Size(196, 22); this.ToolsNavMeshGeneratorMenu.Text = "Nav Mesh Generator..."; this.ToolsNavMeshGeneratorMenu.Visible = false; this.ToolsNavMeshGeneratorMenu.Click += new System.EventHandler(this.ToolsNavMeshGeneratorMenu_Click); @@ -1072,12 +1090,12 @@ // toolStripSeparator2 // this.toolStripSeparator2.Name = "toolStripSeparator2"; - this.toolStripSeparator2.Size = new System.Drawing.Size(190, 6); + this.toolStripSeparator2.Size = new System.Drawing.Size(193, 6); // // ToolsImportMenyooXmlMenu // this.ToolsImportMenyooXmlMenu.Name = "ToolsImportMenyooXmlMenu"; - this.ToolsImportMenyooXmlMenu.Size = new System.Drawing.Size(193, 22); + this.ToolsImportMenyooXmlMenu.Size = new System.Drawing.Size(196, 22); this.ToolsImportMenyooXmlMenu.Text = "Import Menyoo XML..."; this.ToolsImportMenyooXmlMenu.Click += new System.EventHandler(this.ToolsImportMenyooXmlMenu_Click); // @@ -1318,21 +1336,12 @@ this.toolStripSeparator5.Name = "toolStripSeparator5"; this.toolStripSeparator5.Size = new System.Drawing.Size(6, 25); // - // AudioNewInteriorMenu + // ToolsLODLightsGeneratorMenu // - this.AudioNewInteriorMenu.Enabled = false; - this.AudioNewInteriorMenu.Name = "AudioNewInteriorMenu"; - this.AudioNewInteriorMenu.Size = new System.Drawing.Size(216, 22); - this.AudioNewInteriorMenu.Text = "New Interior"; - this.AudioNewInteriorMenu.Click += new System.EventHandler(this.AudioNewInteriorMenu_Click); - // - // AudioNewInteriorRoomMenu - // - this.AudioNewInteriorRoomMenu.Enabled = false; - this.AudioNewInteriorRoomMenu.Name = "AudioNewInteriorRoomMenu"; - this.AudioNewInteriorRoomMenu.Size = new System.Drawing.Size(216, 22); - this.AudioNewInteriorRoomMenu.Text = "New Interior Room"; - this.AudioNewInteriorRoomMenu.Click += new System.EventHandler(this.AudioNewInteriorRoomMenu_Click); + this.ToolsLODLightsGeneratorMenu.Name = "ToolsLODLightsGeneratorMenu"; + this.ToolsLODLightsGeneratorMenu.Size = new System.Drawing.Size(196, 22); + this.ToolsLODLightsGeneratorMenu.Text = "LOD Lights Generator..."; + this.ToolsLODLightsGeneratorMenu.Click += new System.EventHandler(this.ToolsLODLightsGeneratorMenu_Click); // // ProjectForm // @@ -1502,5 +1511,6 @@ private System.Windows.Forms.ToolStripMenuItem FileOpenAudioDatMenu; private System.Windows.Forms.ToolStripMenuItem AudioNewInteriorMenu; private System.Windows.Forms.ToolStripMenuItem AudioNewInteriorRoomMenu; + private System.Windows.Forms.ToolStripMenuItem ToolsLODLightsGeneratorMenu; } } \ No newline at end of file diff --git a/Project/ProjectForm.cs b/Project/ProjectForm.cs index 128df9f..94cf868 100644 --- a/Project/ProjectForm.cs +++ b/Project/ProjectForm.cs @@ -327,6 +327,13 @@ namespace CodeWalker.Project (panel) => { panel.SetProject(CurrentProjectFile); }, //updateFunc (panel) => { return true; }); //findFunc } + public void ShowGenerateLODLightsPanel(bool promote) + { + ShowPanel(promote, + () => { return new GenerateLODLightsPanel(this); }, //createFunc + (panel) => { panel.SetProject(CurrentProjectFile); }, //updateFunc + (panel) => { return true; }); //findFunc + } public void ShowGenerateNavMeshPanel(bool promote) { ShowPanel(promote, @@ -6840,6 +6847,10 @@ namespace CodeWalker.Project { ShowEditProjectManifestPanel(false); } + private void ToolsLODLightsGeneratorMenu_Click(object sender, EventArgs e) + { + ShowGenerateLODLightsPanel(false); + } private void ToolsNavMeshGeneratorMenu_Click(object sender, EventArgs e) { ShowGenerateNavMeshPanel(false); From 7f16c8436077584faece4ff914e50b21acbff68f Mon Sep 17 00:00:00 2001 From: dexy Date: Mon, 21 Jan 2019 19:30:49 +1100 Subject: [PATCH 114/158] Generate LOD Lights now using bone ids --- Project/Panels/GenerateLODLightsPanel.cs | 60 +++++++++++++++++++++++- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/Project/Panels/GenerateLODLightsPanel.cs b/Project/Panels/GenerateLODLightsPanel.cs index b411ba3..85c9860 100644 --- a/Project/Panels/GenerateLODLightsPanel.cs +++ b/Project/Panels/GenerateLODLightsPanel.cs @@ -151,15 +151,71 @@ namespace CodeWalker.Project.Panels //transform this light with the entity position and orientation //generate lights data from it! + + //gotta transform the light position by the given bone! annoying + Bone bone = null; + Matrix xform = Matrix.Identity; + int boneidx = 0; + var skeleton = dwbl.Skeleton; + if (skeleton?.Bones?.Data != null) + { + for (int j = 0; j < skeleton.Bones.Data.Count; j++) + { + var tbone = skeleton.Bones.Data[j]; + if (tbone.Id == la.BoneId) + { + boneidx = j; + bone = tbone; + break; + } + } + if (bone != null) + { + var modeltransforms = skeleton.Transformations; + var fragtransforms = fdwbl?.OwnerFragmentPhys?.OwnerFragPhysLod?.FragTransforms?.Data; + var fragtransformid = fdwbl?.OwnerFragmentPhys?.OwnerFragPhysIndex ?? 0; + var fragoffset = fdwbl?.OwnerFragmentPhys?.OwnerFragPhysLod.Unknown_30h ?? Vector4.Zero; + fragoffset.W = 0.0f; + + if ((fragtransforms != null))// && (fragtransformid < fragtransforms.Length)) + { + if (fragtransformid < fragtransforms.Length) + { + xform = fragtransforms[fragtransformid]; + xform.Row4 += fragoffset; + } + } + else + { + //when using the skeleton's matrices, they need to be transformed by parent + xform = modeltransforms[boneidx]; + xform.Column4 = Vector4.UnitW; + //xform = Matrix.Identity; + ushort[] pinds = skeleton.ParentIndices; + ushort parentind = ((pinds != null) && (boneidx < pinds.Length)) ? pinds[boneidx] : (ushort)65535; + while (parentind < pinds.Length) + { + Matrix ptrans = (parentind < modeltransforms.Length) ? modeltransforms[parentind] : Matrix.Identity; + ptrans.Column4 = Vector4.UnitW; + xform = Matrix.Multiply(ptrans, xform); + parentind = ((pinds != null) && (parentind < pinds.Length)) ? pinds[parentind] : (ushort)65535; + } + } + } + } + + + Vector3 lpos = new Vector3(la.PositionX, la.PositionY, la.PositionZ); Vector3 ldir = new Vector3(la.DirectionX, la.DirectionY, la.DirectionZ); - Vector3 epos = ent.Orientation.Multiply(lpos) + ent.Position; + Vector3 bpos = xform.Multiply(lpos); + Vector3 epos = ent.Orientation.Multiply(bpos) + ent.Position; Vector3 edir = ent.Orientation.Multiply(ldir); uint r = la.ColorR; uint g = la.ColorG; uint b = la.ColorB; - uint i = (byte)la.Intensity; + uint i = (byte)Math.Min(la.Intensity*4, 255); uint c = (i << 24) + (r << 16) + (g << 8) + b; uint h = 0; //TODO: what hash to use??? From 38b9b8fc0ab89898ee1bb96665c4f73845635f0d Mon Sep 17 00:00:00 2001 From: dexy Date: Mon, 21 Jan 2019 21:05:32 +1100 Subject: [PATCH 115/158] Generate LOD Lights type added --- CodeWalker.Core/Utils/Matrices.cs | 8 ++++++++ Project/Panels/GenerateLODLightsPanel.cs | 21 ++++++++++++--------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/CodeWalker.Core/Utils/Matrices.cs b/CodeWalker.Core/Utils/Matrices.cs index f259b6f..580b553 100644 --- a/CodeWalker.Core/Utils/Matrices.cs +++ b/CodeWalker.Core/Utils/Matrices.cs @@ -27,6 +27,14 @@ namespace CodeWalker return new Vector3(x, y, z); //this quick mul ignores W... } + public static Vector3 MultiplyRot(this Matrix m, Vector3 v) + { + float x = (((m.M11 * v.X) + (m.M21 * v.Y)) + (m.M31 * v.Z));// + m.M41; + float y = (((m.M12 * v.X) + (m.M22 * v.Y)) + (m.M32 * v.Z));// + m.M42; + float z = (((m.M13 * v.X) + (m.M23 * v.Y)) + (m.M33 * v.Z));// + m.M43; + return new Vector3(x, y, z); + //this quick mul ignores W and translation... + } public static Vector4 Multiply(this Matrix m, Vector4 v) { diff --git a/Project/Panels/GenerateLODLightsPanel.cs b/Project/Panels/GenerateLODLightsPanel.cs index 85c9860..c8b9365 100644 --- a/Project/Panels/GenerateLODLightsPanel.cs +++ b/Project/Panels/GenerateLODLightsPanel.cs @@ -177,13 +177,10 @@ namespace CodeWalker.Project.Panels var fragoffset = fdwbl?.OwnerFragmentPhys?.OwnerFragPhysLod.Unknown_30h ?? Vector4.Zero; fragoffset.W = 0.0f; - if ((fragtransforms != null))// && (fragtransformid < fragtransforms.Length)) + if ((fragtransforms != null) && (fragtransformid < fragtransforms.Length)) { - if (fragtransformid < fragtransforms.Length) - { - xform = fragtransforms[fragtransformid]; - xform.Row4 += fragoffset; - } + xform = fragtransforms[fragtransformid]; + xform.Row4 += fragoffset; } else { @@ -209,8 +206,9 @@ namespace CodeWalker.Project.Panels Vector3 lpos = new Vector3(la.PositionX, la.PositionY, la.PositionZ); Vector3 ldir = new Vector3(la.DirectionX, la.DirectionY, la.DirectionZ); Vector3 bpos = xform.Multiply(lpos); + Vector3 bdir = xform.MultiplyRot(ldir); Vector3 epos = ent.Orientation.Multiply(bpos) + ent.Position; - Vector3 edir = ent.Orientation.Multiply(ldir); + Vector3 edir = ent.Orientation.Multiply(bdir); uint r = la.ColorR; uint g = la.ColorG; @@ -218,9 +216,14 @@ namespace CodeWalker.Project.Panels uint i = (byte)Math.Min(la.Intensity*4, 255); uint c = (i << 24) + (r << 16) + (g << 8) + b; - uint h = 0; //TODO: what hash to use??? + uint h = 123456; //TODO: what hash to use??? - uint t = la.TimeFlags; + //@Calcium: + //1 = point + //2 = spot + //4 = capsule + uint type = 1; + uint t = la.TimeFlags + (type << 26); var maxext = (byte)Math.Max(Math.Max(la.ExtentX, la.ExtentY), la.ExtentZ); From 239ff7fd8e3268430b61e7b6db1f4e763956b507 Mon Sep 17 00:00:00 2001 From: dexy Date: Tue, 22 Jan 2019 10:03:28 +1100 Subject: [PATCH 116/158] Fixed bug in Generate LOD Lights when ymaps had no entities --- Project/Panels/GenerateLODLightsPanel.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Project/Panels/GenerateLODLightsPanel.cs b/Project/Panels/GenerateLODLightsPanel.cs index c8b9365..064abe3 100644 --- a/Project/Panels/GenerateLODLightsPanel.cs +++ b/Project/Panels/GenerateLODLightsPanel.cs @@ -111,7 +111,7 @@ namespace CodeWalker.Project.Panels foreach (var ymap in projectYmaps) { - + if (ymap?.AllEntities == null) continue; foreach (var ent in ymap.AllEntities) { if (ent.Archetype == null) continue; @@ -253,6 +253,7 @@ namespace CodeWalker.Project.Panels return; } + UpdateStatus("Creating new ymap files..."); var lodymap = new YmapFile(); var distymap = new YmapFile(); @@ -281,11 +282,11 @@ namespace CodeWalker.Project.Panels lodymap._CMapData.entitiesExtentsMin = eemin; lodymap._CMapData.entitiesExtentsMax = eemax; lodymap._CMapData.streamingExtentsMin = semin - 1000f; - lodymap._CMapData.streamingExtentsMax = semax + 1000f; + lodymap._CMapData.streamingExtentsMax = semax + 1000f; //vanilla = ~1km distymap._CMapData.entitiesExtentsMin = eemin; distymap._CMapData.entitiesExtentsMax = eemax; distymap._CMapData.streamingExtentsMin = semin - 5000f; //make it huge - distymap._CMapData.streamingExtentsMax = semax + 5000f; + distymap._CMapData.streamingExtentsMax = semax + 5000f; //vanilla = ~3km lodymap.LODLights = ll; distymap.DistantLODLights = dl; @@ -305,6 +306,9 @@ namespace CodeWalker.Project.Panels lodymap._CMapData.parent = distymap._CMapData.name; + + UpdateStatus("Adding new ymap files to project..."); + ProjectForm.Invoke((MethodInvoker)delegate { ProjectForm.AddYmapToProject(lodymap); From 56b148a0706201b5bb1912c2d8337311223e18e8 Mon Sep 17 00:00:00 2001 From: dexy Date: Tue, 22 Jan 2019 12:57:16 +1100 Subject: [PATCH 117/158] Dat151 name updates --- .../GameFiles/FileTypes/RelFile.cs | 88 +++++++++---------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index 18a65b0..2e1920b 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -587,7 +587,7 @@ namespace CodeWalker.GameFiles case Dat151RelType.ShoreLineOcean: return new Dat151ShoreLineOcean(d, br); case Dat151RelType.ShoreLineList: return new Dat151ShoreLineList(d, br); - case Dat151RelType.Unk114: return new Dat151Unk114(d, br); + case Dat151RelType.RadioTrackLabels: return new Dat151RadioTrackLabels(d, br); case Dat151RelType.VehicleEngineGranular: return new Dat151VehicleEngineGranular(d, br); //maybe not just vehicle case Dat151RelType.Vehicle: return new Dat151Vehicle(d, br); case Dat151RelType.VehicleEngine: return new Dat151VehicleEngine(d, br); @@ -756,7 +756,7 @@ namespace CodeWalker.GameFiles case Dat151RelType.ShoreLineRiver: return new Dat151ShoreLineRiver(this); case Dat151RelType.ShoreLineOcean: return new Dat151ShoreLineOcean(this); case Dat151RelType.ShoreLineList: return new Dat151ShoreLineList(this); - case Dat151RelType.Unk114: return new Dat151Unk114(this); + case Dat151RelType.RadioTrackLabels: return new Dat151RadioTrackLabels(this); case Dat151RelType.VehicleEngineGranular: return new Dat151VehicleEngineGranular(this); //maybe not just vehicle case Dat151RelType.Vehicle: return new Dat151Vehicle(this); case Dat151RelType.VehicleEngine: return new Dat151VehicleEngine(this); @@ -5204,7 +5204,7 @@ namespace CodeWalker.GameFiles Interior = 44, Unk45 = 45, InteriorRoom = 46, - Unk47 = 47, + Unk47 = 47, //door? Unk48 = 48, Unk49 = 49, //doors/gates? WeaponAudioItem = 50, @@ -5266,7 +5266,7 @@ namespace CodeWalker.GameFiles Unk111 = 111, Unk112 = 112, Unk113 = 113, - Unk114 = 114, + RadioTrackLabels = 114, Unk115 = 115, Unk116 = 116, Unk117 = 117, @@ -6772,7 +6772,7 @@ namespace CodeWalker.GameFiles [TC(typeof(EXP))] public class Dat151RadioStation : Dat151RelData { public FlagsUint Unk00 { get; set; } - public uint Unk01 { get; set; } + public uint WheelPosition { get; set; } public uint Unk02 { get; set; } public ushort Unk03 { get; set; } public string RadioName { get; set; } @@ -6789,7 +6789,7 @@ namespace CodeWalker.GameFiles public Dat151RadioStation(RelData d, BinaryReader br) : base(d, br) { Unk00 = br.ReadUInt32(); - Unk01 = br.ReadUInt32(); + WheelPosition = br.ReadUInt32(); Unk02 = br.ReadUInt32(); Unk03 = br.ReadUInt16(); @@ -6818,7 +6818,7 @@ namespace CodeWalker.GameFiles WriteTypeAndOffset(bw); bw.Write(Unk00); - bw.Write(Unk01); + bw.Write(WheelPosition); bw.Write(Unk02); bw.Write(Unk03); @@ -6841,7 +6841,7 @@ namespace CodeWalker.GameFiles public override void WriteXml(StringBuilder sb, int indent) { RelXml.ValueTag(sb, indent, "Unk00", "0x" + Unk00.Hex); - RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); + RelXml.ValueTag(sb, indent, "WheelPosition", WheelPosition.ToString()); RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); RelXml.StringTag(sb, indent, "RadioName", RadioName); @@ -6867,7 +6867,7 @@ namespace CodeWalker.GameFiles public override void ReadXml(XmlNode node) { Unk00 = Xml.GetChildUIntAttribute(node, "Unk00", "value"); - Unk01 = Xml.GetChildUIntAttribute(node, "Unk01", "value"); + WheelPosition = Xml.GetChildUIntAttribute(node, "WheelPosition", "value"); Unk02 = Xml.GetChildUIntAttribute(node, "Unk02", "value"); Unk03 = (ushort)Xml.GetChildUIntAttribute(node, "Unk03", "value"); RadioName = Xml.GetChildInnerText(node, "RadioName"); @@ -10595,40 +10595,40 @@ namespace CodeWalker.GameFiles } - [TC(typeof(EXP))] public class Dat151Unk114 : Dat151RelData + [TC(typeof(EXP))] public class Dat151RadioTrackLabels : Dat151RelData { - public uint ItemCount { get; set; } - public ItemValue[] Items { get; set; } + public uint LabelCount { get; set; } + public LabelData[] Labels { get; set; } - public struct ItemValue + public struct LabelData { - public uint Unk0 { get; set; } - public uint Unk1 { get; set; } + public uint Time { get; set; } + public uint Label { get; set; } - public ItemValue(uint unk0, uint unk1) + public LabelData(uint time, uint trackID) { - Unk0 = unk0; - Unk1 = unk1; + Time = time; + Label = trackID; } public override string ToString() { - return Unk0.ToString() + ": " + Unk1.ToString(); + return Time.ToString() + ": " + Label.ToString(); } } - public Dat151Unk114(RelFile rel) : base(rel) + public Dat151RadioTrackLabels(RelFile rel) : base(rel) { - Type = Dat151RelType.Unk114; + Type = Dat151RelType.RadioTrackLabels; TypeID = (byte)Type; } - public Dat151Unk114(RelData d, BinaryReader br) : base(d, br) + public Dat151RadioTrackLabels(RelData d, BinaryReader br) : base(d, br) { - ItemCount = br.ReadUInt32(); - Items = new ItemValue[ItemCount]; - for (int i = 0; i < ItemCount; i++) + LabelCount = br.ReadUInt32(); + Labels = new LabelData[LabelCount]; + for (int i = 0; i < LabelCount; i++) { - Items[i] = new ItemValue(br.ReadUInt32(), br.ReadUInt32()); + Labels[i] = new LabelData(br.ReadUInt32(), br.ReadUInt32()); } var bytesleft = br.BaseStream.Length - br.BaseStream.Position; @@ -10639,52 +10639,52 @@ namespace CodeWalker.GameFiles { WriteTypeAndOffset(bw); - bw.Write(ItemCount); - for (int i = 0; i < ItemCount; i++) + bw.Write(LabelCount); + for (int i = 0; i < LabelCount; i++) { - bw.Write(Items[i].Unk0); - bw.Write(Items[i].Unk1); + bw.Write(Labels[i].Time); + bw.Write(Labels[i].Label); } } public override void WriteXml(StringBuilder sb, int indent) { - if (ItemCount > 0) + if (LabelCount > 0) { - RelXml.OpenTag(sb, indent, "Items"); + RelXml.OpenTag(sb, indent, "Labels"); var cind = indent + 1; var cind2 = indent + 2; - for (int i = 0; i < ItemCount; i++) + for (int i = 0; i < LabelCount; i++) { RelXml.OpenTag(sb, cind, "Item"); - RelXml.ValueTag(sb, cind2, "Unk0", Items[i].Unk0.ToString()); - RelXml.ValueTag(sb, cind2, "Unk1", Items[i].Unk1.ToString()); + RelXml.ValueTag(sb, cind2, "Time", Labels[i].Time.ToString()); + RelXml.ValueTag(sb, cind2, "Label", Labels[i].Label.ToString()); RelXml.CloseTag(sb, cind, "Item"); } - RelXml.CloseTag(sb, indent, "Items"); + RelXml.CloseTag(sb, indent, "Labels"); } else { - RelXml.SelfClosingTag(sb, indent, "Items"); + RelXml.SelfClosingTag(sb, indent, "Labels"); } } public override void ReadXml(XmlNode node) { - var vnode = node.SelectSingleNode("Items"); + var vnode = node.SelectSingleNode("Labels"); if (vnode != null) { var inodes = vnode.SelectNodes("Item"); if (inodes?.Count > 0) { - var vlist = new List(); + var vlist = new List(); foreach (XmlNode inode in inodes) { - ItemValue v = new ItemValue(); - v.Unk0 = Xml.GetChildUIntAttribute(inode, "Unk0", "value"); - v.Unk1 = Xml.GetChildUIntAttribute(inode, "Unk1", "value"); + LabelData v = new LabelData(); + v.Time = Xml.GetChildUIntAttribute(inode, "Time", "value"); + v.Label = Xml.GetChildUIntAttribute(inode, "Label", "value"); vlist.Add(v); } - ItemCount = (uint)vlist.Count; - Items = vlist.ToArray(); + LabelCount = (uint)vlist.Count; + Labels = vlist.ToArray(); } } } From cad229163b41edee55ecab1b9c99969d5d2e9832 Mon Sep 17 00:00:00 2001 From: dexy Date: Tue, 22 Jan 2019 13:34:21 +1100 Subject: [PATCH 118/158] Generate LOD Lights now using drawable's light type --- Project/Panels/GenerateLODLightsPanel.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Project/Panels/GenerateLODLightsPanel.cs b/Project/Panels/GenerateLODLightsPanel.cs index 064abe3..c874d4c 100644 --- a/Project/Panels/GenerateLODLightsPanel.cs +++ b/Project/Panels/GenerateLODLightsPanel.cs @@ -81,7 +81,7 @@ namespace CodeWalker.Project.Panels var gameFileCache = ProjectForm?.WorldForm?.GameFileCache; if (gameFileCache == null) return; - var path = ProjectForm.CurrentProjectFile.GetFullFilePath("navmeshes") + "\\"; + var path = ProjectForm.CurrentProjectFile.GetFullFilePath("lodlights") + "\\"; GenerateButton.Enabled = false; @@ -222,7 +222,7 @@ namespace CodeWalker.Project.Panels //1 = point //2 = spot //4 = capsule - uint type = 1; + uint type = la.Type; uint t = la.TimeFlags + (type << 26); var maxext = (byte)Math.Max(Math.Max(la.ExtentX, la.ExtentY), la.ExtentZ); From 2cf51e154ee40f5be9ac9a95a70eb2ff432b5929 Mon Sep 17 00:00:00 2001 From: dexy Date: Fri, 25 Jan 2019 08:56:58 +1100 Subject: [PATCH 119/158] Generate LOD Lights adjustments --- Project/Panels/GenerateLODLightsPanel.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Project/Panels/GenerateLODLightsPanel.cs b/Project/Panels/GenerateLODLightsPanel.cs index c874d4c..9cd8ec3 100644 --- a/Project/Panels/GenerateLODLightsPanel.cs +++ b/Project/Panels/GenerateLODLightsPanel.cs @@ -216,14 +216,15 @@ namespace CodeWalker.Project.Panels uint i = (byte)Math.Min(la.Intensity*4, 255); uint c = (i << 24) + (r << 16) + (g << 8) + b; - uint h = 123456; //TODO: what hash to use??? + uint h = 0; //TODO: what hash to use??? //@Calcium: //1 = point //2 = spot //4 = capsule uint type = la.Type; - uint t = la.TimeFlags + (type << 26); + uint unk = 1;//that is this? 2 bits + uint t = la.TimeFlags + (type << 26) + (unk << 24); var maxext = (byte)Math.Max(Math.Max(la.ExtentX, la.ExtentY), la.ExtentZ); @@ -237,7 +238,7 @@ namespace CodeWalker.Project.Panels hash.Add(h); coneInnerAngle.Add((byte)la.ConeInnerAngle); coneOuterAngleOrCapExt.Add(Math.Max((byte)la.ConeOuterAngle, maxext)); - coronaIntensity.Add((byte)la.CoronaIntensity); + coronaIntensity.Add((byte)(la.CoronaIntensity*6)); } From 449fcb7424252525f71d6514a93564fa6b05d800 Mon Sep 17 00:00:00 2001 From: dexy Date: Fri, 25 Jan 2019 09:23:53 +1100 Subject: [PATCH 120/158] Dat151 name updates --- .../GameFiles/FileTypes/RelFile.cs | 182 +++++++++--------- 1 file changed, 91 insertions(+), 91 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index 2e1920b..d095e9c 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -587,7 +587,7 @@ namespace CodeWalker.GameFiles case Dat151RelType.ShoreLineOcean: return new Dat151ShoreLineOcean(d, br); case Dat151RelType.ShoreLineList: return new Dat151ShoreLineList(d, br); - case Dat151RelType.RadioTrackLabels: return new Dat151RadioTrackLabels(d, br); + case Dat151RelType.RadioTrackEvents: return new Dat151RadioTrackEvents(d, br); case Dat151RelType.VehicleEngineGranular: return new Dat151VehicleEngineGranular(d, br); //maybe not just vehicle case Dat151RelType.Vehicle: return new Dat151Vehicle(d, br); case Dat151RelType.VehicleEngine: return new Dat151VehicleEngine(d, br); @@ -756,7 +756,7 @@ namespace CodeWalker.GameFiles case Dat151RelType.ShoreLineRiver: return new Dat151ShoreLineRiver(this); case Dat151RelType.ShoreLineOcean: return new Dat151ShoreLineOcean(this); case Dat151RelType.ShoreLineList: return new Dat151ShoreLineList(this); - case Dat151RelType.RadioTrackLabels: return new Dat151RadioTrackLabels(this); + case Dat151RelType.RadioTrackEvents: return new Dat151RadioTrackEvents(this); case Dat151RelType.VehicleEngineGranular: return new Dat151VehicleEngineGranular(this); //maybe not just vehicle case Dat151RelType.Vehicle: return new Dat151Vehicle(this); case Dat151RelType.VehicleEngine: return new Dat151VehicleEngine(this); @@ -5266,7 +5266,7 @@ namespace CodeWalker.GameFiles Unk111 = 111, Unk112 = 112, Unk113 = 113, - RadioTrackLabels = 114, + RadioTrackEvents = 114, Unk115 = 115, Unk116 = 116, Unk117 = 117, @@ -6900,7 +6900,7 @@ namespace CodeWalker.GameFiles return offsets.ToArray(); } } - [TC(typeof(EXP))] public class Dat151RadioMusic : Dat151RelData + [TC(typeof(EXP))] public class Dat151RadioMusic : Dat151RelData //name eg: radioname_music { public FlagsUint Unk00 { get; set; } public byte MusicType { get; set; }//maybe int? @@ -10595,40 +10595,40 @@ namespace CodeWalker.GameFiles } - [TC(typeof(EXP))] public class Dat151RadioTrackLabels : Dat151RelData + [TC(typeof(EXP))] public class Dat151RadioTrackEvents : Dat151RelData { - public uint LabelCount { get; set; } - public LabelData[] Labels { get; set; } + public uint EventCount { get; set; } + public EventData[] Events { get; set; } - public struct LabelData + public struct EventData { public uint Time { get; set; } - public uint Label { get; set; } + public uint Event { get; set; } - public LabelData(uint time, uint trackID) + public EventData(uint time, uint trackID) { Time = time; - Label = trackID; + Event = trackID; } public override string ToString() { - return Time.ToString() + ": " + Label.ToString(); + return Time.ToString() + ": " + Event.ToString(); } } - public Dat151RadioTrackLabels(RelFile rel) : base(rel) + public Dat151RadioTrackEvents(RelFile rel) : base(rel) { - Type = Dat151RelType.RadioTrackLabels; + Type = Dat151RelType.RadioTrackEvents; TypeID = (byte)Type; } - public Dat151RadioTrackLabels(RelData d, BinaryReader br) : base(d, br) + public Dat151RadioTrackEvents(RelData d, BinaryReader br) : base(d, br) { - LabelCount = br.ReadUInt32(); - Labels = new LabelData[LabelCount]; - for (int i = 0; i < LabelCount; i++) + EventCount = br.ReadUInt32(); + Events = new EventData[EventCount]; + for (int i = 0; i < EventCount; i++) { - Labels[i] = new LabelData(br.ReadUInt32(), br.ReadUInt32()); + Events[i] = new EventData(br.ReadUInt32(), br.ReadUInt32()); } var bytesleft = br.BaseStream.Length - br.BaseStream.Position; @@ -10639,52 +10639,52 @@ namespace CodeWalker.GameFiles { WriteTypeAndOffset(bw); - bw.Write(LabelCount); - for (int i = 0; i < LabelCount; i++) + bw.Write(EventCount); + for (int i = 0; i < EventCount; i++) { - bw.Write(Labels[i].Time); - bw.Write(Labels[i].Label); + bw.Write(Events[i].Time); + bw.Write(Events[i].Event); } } public override void WriteXml(StringBuilder sb, int indent) { - if (LabelCount > 0) + if (EventCount > 0) { - RelXml.OpenTag(sb, indent, "Labels"); + RelXml.OpenTag(sb, indent, "Events"); var cind = indent + 1; var cind2 = indent + 2; - for (int i = 0; i < LabelCount; i++) + for (int i = 0; i < EventCount; i++) { RelXml.OpenTag(sb, cind, "Item"); - RelXml.ValueTag(sb, cind2, "Time", Labels[i].Time.ToString()); - RelXml.ValueTag(sb, cind2, "Label", Labels[i].Label.ToString()); + RelXml.ValueTag(sb, cind2, "Time", Events[i].Time.ToString()); + RelXml.ValueTag(sb, cind2, "Event", Events[i].Event.ToString()); RelXml.CloseTag(sb, cind, "Item"); } - RelXml.CloseTag(sb, indent, "Labels"); + RelXml.CloseTag(sb, indent, "Events"); } else { - RelXml.SelfClosingTag(sb, indent, "Labels"); + RelXml.SelfClosingTag(sb, indent, "Events"); } } public override void ReadXml(XmlNode node) { - var vnode = node.SelectSingleNode("Labels"); + var vnode = node.SelectSingleNode("Events"); if (vnode != null) { var inodes = vnode.SelectNodes("Item"); if (inodes?.Count > 0) { - var vlist = new List(); + var vlist = new List(); foreach (XmlNode inode in inodes) { - LabelData v = new LabelData(); + EventData v = new EventData(); v.Time = Xml.GetChildUIntAttribute(inode, "Time", "value"); - v.Label = Xml.GetChildUIntAttribute(inode, "Label", "value"); + v.Event = Xml.GetChildUIntAttribute(inode, "Event", "value"); vlist.Add(v); } - LabelCount = (uint)vlist.Count; - Labels = vlist.ToArray(); + EventCount = (uint)vlist.Count; + Events = vlist.ToArray(); } } } @@ -11148,9 +11148,9 @@ namespace CodeWalker.GameFiles public FlagsUint Unk23 { get; set; } //public FlagsUshort Unk23a { get; set; }//0x0002 //public FlagsUshort Unk23b { get; set; }//0x0801 - public MetaHash Unk24 { get; set; } - public MetaHash Unk25 { get; set; } - public MetaHash Unk26 { get; set; } + public MetaHash IndicatorOn { get; set; } + public MetaHash IndicatorOff { get; set; } + public MetaHash Handbrake { get; set; } public FlagsUint Unk27 { get; set; } //public FlagsUshort Unk27a { get; set; } //public FlagsUshort Unk27b { get; set; } @@ -11186,7 +11186,7 @@ namespace CodeWalker.GameFiles public MetaHash Unk55 { get; set; } public int Unk56 { get; set; } public MetaHash Unk57 { get; set; } - public MetaHash Unk58 { get; set; } + public MetaHash ShutdownBeep { get; set; } public float Unk59 { get; set; } public int Unk60 { get; set; } public float Unk61 { get; set; } @@ -11235,9 +11235,9 @@ namespace CodeWalker.GameFiles Unk23 = br.ReadUInt32(); //Unk23a = br.ReadUInt16();//0x0002 //Unk23b = br.ReadUInt16();//0x0801 - Unk24 = br.ReadUInt32(); - Unk25 = br.ReadUInt32(); - Unk26 = br.ReadUInt32(); + IndicatorOn = br.ReadUInt32(); + IndicatorOff = br.ReadUInt32(); + Handbrake = br.ReadUInt32(); Unk27 = br.ReadUInt32(); //Unk27a = br.ReadUInt16(); //Unk27b = br.ReadUInt16(); @@ -11273,7 +11273,7 @@ namespace CodeWalker.GameFiles Unk55 = br.ReadUInt32(); Unk56 = br.ReadInt32(); Unk57 = br.ReadUInt32(); - Unk58 = br.ReadUInt32(); + ShutdownBeep = br.ReadUInt32(); Unk59 = br.ReadSingle(); Unk60 = br.ReadInt32(); Unk61 = br.ReadSingle(); @@ -11412,9 +11412,9 @@ namespace CodeWalker.GameFiles bw.Write(Unk23); //bw.Write(Unk23a);//0x0002 //bw.Write(Unk23b);//0x0801 - bw.Write(Unk24); - bw.Write(Unk25); - bw.Write(Unk26); + bw.Write(IndicatorOn); + bw.Write(IndicatorOff); + bw.Write(Handbrake); bw.Write(Unk27); //bw.Write(Unk27a); //bw.Write(Unk27b); @@ -11450,7 +11450,7 @@ namespace CodeWalker.GameFiles bw.Write(Unk55); bw.Write(Unk56); bw.Write(Unk57); - bw.Write(Unk58); + bw.Write(ShutdownBeep); bw.Write(Unk59); bw.Write(Unk60); bw.Write(Unk61); @@ -11501,9 +11501,9 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk21", Unk21.ToString()); RelXml.ValueTag(sb, indent, "Unk22", Unk22.ToString()); RelXml.ValueTag(sb, indent, "Unk23", "0x" + Unk23.Hex); - RelXml.StringTag(sb, indent, "Unk24", RelXml.HashString(Unk24)); - RelXml.StringTag(sb, indent, "Unk25", RelXml.HashString(Unk25)); - RelXml.StringTag(sb, indent, "Unk26", RelXml.HashString(Unk26)); + RelXml.StringTag(sb, indent, "IndicatorOn", RelXml.HashString(IndicatorOn)); + RelXml.StringTag(sb, indent, "IndicatorOff", RelXml.HashString(IndicatorOff)); + RelXml.StringTag(sb, indent, "Handbrake", RelXml.HashString(Handbrake)); RelXml.ValueTag(sb, indent, "Unk27", "0x" + Unk27.Hex); RelXml.StringTag(sb, indent, "Unk28", RelXml.HashString(Unk28)); RelXml.ValueTag(sb, indent, "Unk29", "0x" + Unk29.Hex); @@ -11535,7 +11535,7 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "Unk55", RelXml.HashString(Unk55)); RelXml.ValueTag(sb, indent, "Unk56", Unk56.ToString()); RelXml.StringTag(sb, indent, "Unk57", RelXml.HashString(Unk57)); - RelXml.StringTag(sb, indent, "Unk58", RelXml.HashString(Unk58)); + RelXml.StringTag(sb, indent, "ShutdownBeep", RelXml.HashString(ShutdownBeep)); RelXml.ValueTag(sb, indent, "Unk59", FloatUtil.ToString(Unk59)); RelXml.ValueTag(sb, indent, "Unk60", Unk60.ToString()); RelXml.ValueTag(sb, indent, "Unk61", FloatUtil.ToString(Unk61)); @@ -11577,9 +11577,9 @@ namespace CodeWalker.GameFiles Unk21 = Xml.GetChildIntAttribute(node, "Unk21", "value"); Unk22 = Xml.GetChildIntAttribute(node, "Unk22", "value"); Unk23 = Xml.GetChildUIntAttribute(node, "Unk23", "value"); - Unk24 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk24")); - Unk25 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk25")); - Unk26 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk26")); + IndicatorOn = XmlRel.GetHash(Xml.GetChildInnerText(node, "IndicatorOn")); + IndicatorOff = XmlRel.GetHash(Xml.GetChildInnerText(node, "IndicatorOff")); + Handbrake = XmlRel.GetHash(Xml.GetChildInnerText(node, "Handbrake")); Unk27 = Xml.GetChildUIntAttribute(node, "Unk27", "value"); Unk28 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk28")); Unk29 = Xml.GetChildUIntAttribute(node, "Unk29", "value"); @@ -11611,7 +11611,7 @@ namespace CodeWalker.GameFiles Unk55 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk55")); Unk56 = Xml.GetChildIntAttribute(node, "Unk56", "value"); Unk57 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk57")); - Unk58 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk58")); + ShutdownBeep = XmlRel.GetHash(Xml.GetChildInnerText(node, "ShutdownBeep")); Unk59 = Xml.GetChildFloatAttribute(node, "Unk59", "value"); Unk60 = Xml.GetChildIntAttribute(node, "Unk60", "value"); Unk61 = Xml.GetChildFloatAttribute(node, "Unk61", "value"); @@ -11634,15 +11634,15 @@ namespace CodeWalker.GameFiles public int Unk01 { get; set; } public int Unk02 { get; set; } public int Unk03 { get; set; } - public MetaHash Unk04 { get; set; } - public MetaHash Unk05 { get; set; } - public MetaHash Unk06 { get; set; } - public MetaHash Unk07 { get; set; } - public MetaHash Unk08 { get; set; } + public MetaHash EngineLow { get; set; } + public MetaHash EngineHigh { get; set; } + public MetaHash ExhaustLow { get; set; } + public MetaHash ExhaustHigh { get; set; } + public MetaHash RevsOff { get; set; } public int Unk09 { get; set; } public int Unk10 { get; set; } - public MetaHash Unk11 { get; set; } - public MetaHash Unk12 { get; set; }//flags? float? + public MetaHash EngineIdleLoop { get; set; } + public MetaHash ExhaustIdleLoop { get; set; } public int Unk13 { get; set; } public int Unk14 { get; set; } public MetaHash AirIntake { get; set; } @@ -11699,15 +11699,15 @@ namespace CodeWalker.GameFiles Unk01 = br.ReadInt32(); Unk02 = br.ReadInt32(); Unk03 = br.ReadInt32(); - Unk04 = br.ReadUInt32(); - Unk05 = br.ReadUInt32(); - Unk06 = br.ReadUInt32(); - Unk07 = br.ReadUInt32(); - Unk08 = br.ReadUInt32(); + EngineLow = br.ReadUInt32(); + EngineHigh = br.ReadUInt32(); + ExhaustLow = br.ReadUInt32(); + ExhaustHigh = br.ReadUInt32(); + RevsOff = br.ReadUInt32(); Unk09 = br.ReadInt32(); Unk10 = br.ReadInt32(); - Unk11 = br.ReadUInt32(); - Unk12 = br.ReadUInt32();//flags? float? + EngineIdleLoop = br.ReadUInt32(); + ExhaustIdleLoop = br.ReadUInt32(); Unk13 = br.ReadInt32(); Unk14 = br.ReadInt32(); AirIntake = br.ReadUInt32(); @@ -11777,15 +11777,15 @@ namespace CodeWalker.GameFiles bw.Write(Unk01); bw.Write(Unk02); bw.Write(Unk03); - bw.Write(Unk04); - bw.Write(Unk05); - bw.Write(Unk06); - bw.Write(Unk07); - bw.Write(Unk08); + bw.Write(EngineLow); + bw.Write(EngineHigh); + bw.Write(ExhaustLow); + bw.Write(ExhaustHigh); + bw.Write(RevsOff); bw.Write(Unk09); bw.Write(Unk10); - bw.Write(Unk11); - bw.Write(Unk12);//flags? float? + bw.Write(EngineIdleLoop); + bw.Write(ExhaustIdleLoop); bw.Write(Unk13); bw.Write(Unk14); bw.Write(AirIntake); @@ -11838,15 +11838,15 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); - RelXml.StringTag(sb, indent, "Unk04", RelXml.HashString(Unk04)); - RelXml.StringTag(sb, indent, "Unk05", RelXml.HashString(Unk05)); - RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); - RelXml.StringTag(sb, indent, "Unk07", RelXml.HashString(Unk07)); - RelXml.StringTag(sb, indent, "Unk08", RelXml.HashString(Unk08)); + RelXml.StringTag(sb, indent, "EngineLow", RelXml.HashString(EngineLow)); + RelXml.StringTag(sb, indent, "EngineHigh", RelXml.HashString(EngineHigh)); + RelXml.StringTag(sb, indent, "ExhaustLow", RelXml.HashString(ExhaustLow)); + RelXml.StringTag(sb, indent, "ExhaustHigh", RelXml.HashString(ExhaustHigh)); + RelXml.StringTag(sb, indent, "RevsOff", RelXml.HashString(RevsOff)); RelXml.ValueTag(sb, indent, "Unk09", Unk09.ToString()); RelXml.ValueTag(sb, indent, "Unk10", Unk10.ToString()); - RelXml.StringTag(sb, indent, "Unk11", RelXml.HashString(Unk11)); - RelXml.StringTag(sb, indent, "Unk12", RelXml.HashString(Unk12)); + RelXml.StringTag(sb, indent, "EngineIdleLoop", RelXml.HashString(EngineIdleLoop)); + RelXml.StringTag(sb, indent, "ExhaustIdleLoop", RelXml.HashString(ExhaustIdleLoop)); RelXml.ValueTag(sb, indent, "Unk13", Unk13.ToString()); RelXml.ValueTag(sb, indent, "Unk14", Unk14.ToString()); RelXml.StringTag(sb, indent, "AirIntake", RelXml.HashString(AirIntake)); @@ -11898,15 +11898,15 @@ namespace CodeWalker.GameFiles Unk01 = Xml.GetChildIntAttribute(node, "Unk01", "value"); Unk02 = Xml.GetChildIntAttribute(node, "Unk02", "value"); Unk03 = Xml.GetChildIntAttribute(node, "Unk03", "value"); - Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk04")); - Unk05 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk05")); - Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); - Unk07 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk07")); - Unk08 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk08")); + EngineLow = XmlRel.GetHash(Xml.GetChildInnerText(node, "EngineLow")); + EngineHigh = XmlRel.GetHash(Xml.GetChildInnerText(node, "EngineHigh")); + ExhaustLow = XmlRel.GetHash(Xml.GetChildInnerText(node, "ExhaustLow")); + ExhaustHigh = XmlRel.GetHash(Xml.GetChildInnerText(node, "ExhaustHigh")); + RevsOff = XmlRel.GetHash(Xml.GetChildInnerText(node, "RevsOff")); Unk09 = Xml.GetChildIntAttribute(node, "Unk09", "value"); Unk10 = Xml.GetChildIntAttribute(node, "Unk10", "value"); - Unk11 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk11")); - Unk12 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk12")); + EngineIdleLoop = XmlRel.GetHash(Xml.GetChildInnerText(node, "EngineIdleLoop")); + ExhaustIdleLoop = XmlRel.GetHash(Xml.GetChildInnerText(node, "ExhaustIdleLoop")); Unk13 = Xml.GetChildIntAttribute(node, "Unk13", "value"); Unk14 = Xml.GetChildIntAttribute(node, "Unk14", "value"); AirIntake = XmlRel.GetHash(Xml.GetChildInnerText(node, "AirIntake")); From 0790169e2e072dc4636bad7ea16da5ded1c95ea7 Mon Sep 17 00:00:00 2001 From: dexy Date: Sat, 26 Jan 2019 09:00:38 +1100 Subject: [PATCH 121/158] Generate LOD Lights streetLight research, fix for MenyooXML import static objects --- Project/Panels/GenerateLODLightsPanel.cs | 11 ++++++++--- Project/ProjectForm.cs | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/Project/Panels/GenerateLODLightsPanel.cs b/Project/Panels/GenerateLODLightsPanel.cs index 9cd8ec3..22894a7 100644 --- a/Project/Panels/GenerateLODLightsPanel.cs +++ b/Project/Panels/GenerateLODLightsPanel.cs @@ -218,12 +218,16 @@ namespace CodeWalker.Project.Panels uint h = 0; //TODO: what hash to use??? + //any other way to know if it's a streetlight? + var name = ent.Archetype.Name; + bool isStreetLight = (name != null) && (name.Contains("street") || name.Contains("traffic")); + //@Calcium: //1 = point //2 = spot //4 = capsule uint type = la.Type; - uint unk = 1;//that is this? 2 bits + uint unk = isStreetLight ? 1u : 0;//2 bits - isStreetLight low bit, unk high bit uint t = la.TimeFlags + (type << 26) + (unk << 24); var maxext = (byte)Math.Max(Math.Max(la.ExtentX, la.ExtentY), la.ExtentZ); @@ -240,7 +244,7 @@ namespace CodeWalker.Project.Panels coneOuterAngleOrCapExt.Add(Math.Max((byte)la.ConeOuterAngle, maxext)); coronaIntensity.Add((byte)(la.CoronaIntensity*6)); - + //final lights should be sorted by isStreetLight (1 first!) and then hash } } } @@ -261,7 +265,8 @@ namespace CodeWalker.Project.Panels var ll = new YmapLODLights(); var dl = new YmapDistantLODLights(); var cdl = new CDistantLODLight(); - cdl.category = 1; + cdl.category = 1;//0=small, 1=med, 2=large + cdl.numStreetLights = 0;//todo? dl.CDistantLODLight = cdl; dl.positions = position.ToArray(); dl.colours = colour.ToArray(); diff --git a/Project/ProjectForm.cs b/Project/ProjectForm.cs index 94cf868..6a3ddde 100644 --- a/Project/ProjectForm.cs +++ b/Project/ProjectForm.cs @@ -2042,7 +2042,7 @@ namespace CodeWalker.Project cent.rotation = placement.Rotation; cent.scaleXY = 1.0f; cent.scaleZ = 1.0f; - cent.flags = placement.Dynamic ? 32u : 0;// 1572872; //? + cent.flags = placement.Dynamic ? 0 : 32u;// 1572872; //32 = static cent.parentIndex = -1; cent.lodDist = placement.LodDistance; cent.lodLevel = rage__eLodType.LODTYPES_DEPTH_ORPHANHD; From 9c41a212176ae0de2bd26d2b9f7b6003378ca348 Mon Sep 17 00:00:00 2001 From: dexy Date: Sat, 26 Jan 2019 09:56:44 +1100 Subject: [PATCH 122/158] Dat151 and Dat54 name and type updates --- .../GameFiles/FileTypes/RelFile.cs | 178 +++++++++--------- .../GameFiles/MetaTypes/MetaNames.cs | 26 +++ 2 files changed, 110 insertions(+), 94 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index d095e9c..df54703 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -3357,14 +3357,14 @@ namespace CodeWalker.GameFiles public Dat54GranularSoundData DataItem4 { get; set; } //0x4C-0x54 public Dat54GranularSoundData DataItem5 { get; set; } //0x54-0x5C public Dat54GranularSoundData DataItem6 { get; set; } //0x5C-0x64 - public int UnkInt0 { get; set; } //0x64-0x68 - public int UnkInt1 { get; set; } //0x68-0x6C - public ushort UnkShort0 { get; set; } //0x6C-0x6E - public ushort UnkShort1 { get; set; } //0x6E-0x70 - public ushort UnkShort2 { get; set; } //0x70-0x72 - public ushort UnkShort3 { get; set; } //0x72-0x74 - public ushort UnkShort4 { get; set; } //0x74-0x76 - public ushort UnkShort5 { get; set; } //0x76-0x78 + public float UnkFloat0 { get; set; } //0x64-0x68 + public float UnkFloat1 { get; set; } //0x68-0x6C + public short UnkShort0 { get; set; } //0x6C-0x6E + public short UnkShort1 { get; set; } //0x6E-0x70 + public short UnkShort2 { get; set; } //0x70-0x72 + public short UnkShort3 { get; set; } //0x72-0x74 + public short UnkShort4 { get; set; } //0x74-0x76 + public short UnkShort5 { get; set; } //0x76-0x78 public MetaHash TrackName { get; set; } //0x78-0x7C public byte UnkVecCount { get; set; } //0x7C-0x7D public Vector2[] UnkVecData { get; set; } //0x7D-... @@ -3398,14 +3398,14 @@ namespace CodeWalker.GameFiles DataItem5 = new Dat54GranularSoundData(br); DataItem6 = new Dat54GranularSoundData(br); - UnkInt0 = br.ReadInt32(); - UnkInt1 = br.ReadInt32(); - UnkShort0 = br.ReadUInt16(); - UnkShort1 = br.ReadUInt16(); - UnkShort2 = br.ReadUInt16(); - UnkShort3 = br.ReadUInt16(); - UnkShort4 = br.ReadUInt16(); - UnkShort5 = br.ReadUInt16(); + UnkFloat0 = br.ReadSingle(); + UnkFloat1 = br.ReadSingle(); + UnkShort0 = br.ReadInt16(); + UnkShort1 = br.ReadInt16(); + UnkShort2 = br.ReadInt16(); + UnkShort3 = br.ReadInt16(); + UnkShort4 = br.ReadInt16(); + UnkShort5 = br.ReadInt16(); TrackName = br.ReadUInt32(); @@ -3434,14 +3434,14 @@ namespace CodeWalker.GameFiles DataItem4 = new Dat54GranularSoundData(node, "DataItem4"); DataItem5 = new Dat54GranularSoundData(node, "DataItem5"); DataItem6 = new Dat54GranularSoundData(node, "DataItem6"); - UnkInt0 = Xml.GetChildIntAttribute(node, "UnkInt0", "value"); - UnkInt1 = Xml.GetChildIntAttribute(node, "UnkInt1", "value"); - UnkShort0 = (ushort)Xml.GetChildUIntAttribute(node, "UnkShort0", "value"); - UnkShort1 = (ushort)Xml.GetChildUIntAttribute(node, "UnkShort1", "value"); - UnkShort2 = (ushort)Xml.GetChildUIntAttribute(node, "UnkShort2", "value"); - UnkShort3 = (ushort)Xml.GetChildUIntAttribute(node, "UnkShort3", "value"); - UnkShort4 = (ushort)Xml.GetChildUIntAttribute(node, "UnkShort4", "value"); - UnkShort5 = (ushort)Xml.GetChildUIntAttribute(node, "UnkShort5", "value"); + UnkFloat0 = Xml.GetChildFloatAttribute(node, "UnkFloat0", "value"); + UnkFloat1 = Xml.GetChildFloatAttribute(node, "UnkFloat1", "value"); + UnkShort0 = (short)Xml.GetChildIntAttribute(node, "UnkShort0", "value"); + UnkShort1 = (short)Xml.GetChildIntAttribute(node, "UnkShort1", "value"); + UnkShort2 = (short)Xml.GetChildIntAttribute(node, "UnkShort2", "value"); + UnkShort3 = (short)Xml.GetChildIntAttribute(node, "UnkShort3", "value"); + UnkShort4 = (short)Xml.GetChildIntAttribute(node, "UnkShort4", "value"); + UnkShort5 = (short)Xml.GetChildIntAttribute(node, "UnkShort5", "value"); TrackName = XmlRel.GetHash(Xml.GetChildInnerText(node, "TrackName")); UnkVecData = Xml.GetChildRawVector2Array(node, "UnkVecData"); UnkVecCount = (byte)UnkVecData?.Length; @@ -3462,8 +3462,8 @@ namespace CodeWalker.GameFiles DataItem4.WriteXml(sb, indent, "DataItem4"); DataItem5.WriteXml(sb, indent, "DataItem5"); DataItem6.WriteXml(sb, indent, "DataItem6"); - RelXml.ValueTag(sb, indent, "UnkInt0", UnkInt0.ToString()); - RelXml.ValueTag(sb, indent, "UnkInt1", UnkInt1.ToString()); + RelXml.ValueTag(sb, indent, "UnkFloat0", FloatUtil.ToString(UnkFloat0)); + RelXml.ValueTag(sb, indent, "UnkFloat1", FloatUtil.ToString(UnkFloat1)); RelXml.ValueTag(sb, indent, "UnkShort0", UnkShort0.ToString()); RelXml.ValueTag(sb, indent, "UnkShort1", UnkShort1.ToString()); RelXml.ValueTag(sb, indent, "UnkShort2", UnkShort2.ToString()); @@ -3493,8 +3493,8 @@ namespace CodeWalker.GameFiles DataItem5.Write(bw); DataItem6.Write(bw); - bw.Write(UnkInt0); - bw.Write(UnkInt1); + bw.Write(UnkFloat0); + bw.Write(UnkFloat1); bw.Write(UnkShort0); bw.Write(UnkShort1); bw.Write(UnkShort2); @@ -10693,8 +10693,8 @@ namespace CodeWalker.GameFiles { public FlagsUint Unk00 { get; set; } public int MasterVolume { get; set; } - public MetaHash Unk02 { get; set; } - public MetaHash Unk03 { get; set; } + public MetaHash EngineAccel { get; set; } + public MetaHash ExhaustAccel { get; set; } public int Unk04 { get; set; } public int Unk05 { get; set; } public int Unk06 { get; set; } @@ -10722,12 +10722,12 @@ namespace CodeWalker.GameFiles public float Unk28 { get; set; } public int Unk29 { get; set; } public int Unk30 { get; set; } - public MetaHash Unk31 { get; set; } - public MetaHash Unk32 { get; set; } - public MetaHash Unk33 { get; set; } - public MetaHash Unk34 { get; set; } - public MetaHash Unk35 { get; set; } - public MetaHash Unk36 { get; set; } + public MetaHash EngineSubmix { get; set; } + public MetaHash EngineSubmixPreset { get; set; } + public MetaHash ExhaustSubmix { get; set; } + public MetaHash ExhaustSubmixPreset { get; set; } + public MetaHash EngineAccelNPC { get; set; } + public MetaHash ExhaustAccelNPC { get; set; } public MetaHash Unk37 { get; set; } public int Unk38 { get; set; } public int Unk39 { get; set; } @@ -10736,7 +10736,7 @@ namespace CodeWalker.GameFiles public int Unk42 { get; set; } public int Unk43 { get; set; } public int Unk44 { get; set; } - public MetaHash Unk45 { get; set; } + public MetaHash IdleSub { get; set; } public int Unk46 { get; set; } public int Unk47 { get; set; } public int Unk48 { get; set; } @@ -10761,8 +10761,8 @@ namespace CodeWalker.GameFiles { Unk00 = br.ReadUInt32(); MasterVolume = br.ReadInt32(); - Unk02 = br.ReadUInt32(); - Unk03 = br.ReadUInt32(); + EngineAccel = br.ReadUInt32(); + ExhaustAccel = br.ReadUInt32(); Unk04 = br.ReadInt32(); Unk05 = br.ReadInt32(); Unk06 = br.ReadInt32(); @@ -10790,12 +10790,12 @@ namespace CodeWalker.GameFiles Unk28 = br.ReadSingle(); Unk29 = br.ReadInt32(); Unk30 = br.ReadInt32(); - Unk31 = br.ReadUInt32(); - Unk32 = br.ReadUInt32(); - Unk33 = br.ReadUInt32(); - Unk34 = br.ReadUInt32(); - Unk35 = br.ReadUInt32(); - Unk36 = br.ReadUInt32(); + EngineSubmix = br.ReadUInt32(); + EngineSubmixPreset = br.ReadUInt32(); + ExhaustSubmix = br.ReadUInt32(); + ExhaustSubmixPreset = br.ReadUInt32(); + EngineAccelNPC = br.ReadUInt32(); + ExhaustAccelNPC = br.ReadUInt32(); Unk37 = br.ReadUInt32(); Unk38 = br.ReadInt32(); Unk39 = br.ReadInt32(); @@ -10804,7 +10804,7 @@ namespace CodeWalker.GameFiles Unk42 = br.ReadInt32(); Unk43 = br.ReadInt32(); Unk44 = br.ReadInt32(); - Unk45 = br.ReadUInt32(); + IdleSub = br.ReadUInt32(); Unk46 = br.ReadInt32(); Unk47 = br.ReadInt32(); Unk48 = br.ReadInt32(); @@ -10931,8 +10931,8 @@ namespace CodeWalker.GameFiles WriteTypeAndOffset(bw); bw.Write(Unk00); bw.Write(MasterVolume); - bw.Write(Unk02); - bw.Write(Unk03); + bw.Write(EngineAccel); + bw.Write(ExhaustAccel); bw.Write(Unk04); bw.Write(Unk05); bw.Write(Unk06); @@ -10960,12 +10960,12 @@ namespace CodeWalker.GameFiles bw.Write(Unk28); bw.Write(Unk29); bw.Write(Unk30); - bw.Write(Unk31); - bw.Write(Unk32); - bw.Write(Unk33); - bw.Write(Unk34); - bw.Write(Unk35); - bw.Write(Unk36); + bw.Write(EngineSubmix); + bw.Write(EngineSubmixPreset); + bw.Write(ExhaustSubmix); + bw.Write(ExhaustSubmixPreset); + bw.Write(EngineAccelNPC); + bw.Write(ExhaustAccelNPC); bw.Write(Unk37); bw.Write(Unk38); bw.Write(Unk39); @@ -10974,7 +10974,7 @@ namespace CodeWalker.GameFiles bw.Write(Unk42); bw.Write(Unk43); bw.Write(Unk44); - bw.Write(Unk45); + bw.Write(IdleSub); bw.Write(Unk46); bw.Write(Unk47); bw.Write(Unk48); @@ -10997,8 +10997,8 @@ namespace CodeWalker.GameFiles { RelXml.ValueTag(sb, indent, "Unk00", "0x" + Unk00.Hex); RelXml.ValueTag(sb, indent, "MasterVolume", MasterVolume.ToString()); - RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); - RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); + RelXml.StringTag(sb, indent, "EngineAccel", RelXml.HashString(EngineAccel)); + RelXml.StringTag(sb, indent, "ExhaustAccel", RelXml.HashString(ExhaustAccel)); RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); RelXml.ValueTag(sb, indent, "Unk05", Unk05.ToString()); RelXml.ValueTag(sb, indent, "Unk06", Unk06.ToString()); @@ -11026,12 +11026,12 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk28", FloatUtil.ToString(Unk28)); RelXml.ValueTag(sb, indent, "Unk29", Unk29.ToString()); RelXml.ValueTag(sb, indent, "Unk30", Unk30.ToString()); - RelXml.StringTag(sb, indent, "Unk31", RelXml.HashString(Unk31)); - RelXml.StringTag(sb, indent, "Unk32", RelXml.HashString(Unk32)); - RelXml.StringTag(sb, indent, "Unk33", RelXml.HashString(Unk33)); - RelXml.StringTag(sb, indent, "Unk34", RelXml.HashString(Unk34)); - RelXml.StringTag(sb, indent, "Unk35", RelXml.HashString(Unk35)); - RelXml.StringTag(sb, indent, "Unk36", RelXml.HashString(Unk36)); + RelXml.StringTag(sb, indent, "EngineSubmix", RelXml.HashString(EngineSubmix)); + RelXml.StringTag(sb, indent, "EngineSubmixPreset", RelXml.HashString(EngineSubmixPreset)); + RelXml.StringTag(sb, indent, "ExhaustSubmix", RelXml.HashString(ExhaustSubmix)); + RelXml.StringTag(sb, indent, "ExhaustSubmixPreset", RelXml.HashString(ExhaustSubmixPreset)); + RelXml.StringTag(sb, indent, "EngineAccelNPC", RelXml.HashString(EngineAccelNPC)); + RelXml.StringTag(sb, indent, "ExhaustAccelNPC", RelXml.HashString(ExhaustAccelNPC)); RelXml.StringTag(sb, indent, "Unk37", RelXml.HashString(Unk37)); RelXml.ValueTag(sb, indent, "Unk38", Unk38.ToString()); RelXml.ValueTag(sb, indent, "Unk39", Unk39.ToString()); @@ -11040,7 +11040,7 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk42", Unk42.ToString()); RelXml.ValueTag(sb, indent, "Unk43", Unk43.ToString()); RelXml.ValueTag(sb, indent, "Unk44", Unk44.ToString()); - RelXml.StringTag(sb, indent, "Unk45", RelXml.HashString(Unk45)); + RelXml.StringTag(sb, indent, "IdleSub", RelXml.HashString(IdleSub)); RelXml.ValueTag(sb, indent, "Unk46", Unk46.ToString()); RelXml.ValueTag(sb, indent, "Unk47", Unk47.ToString()); RelXml.ValueTag(sb, indent, "Unk48", Unk48.ToString()); @@ -11060,8 +11060,8 @@ namespace CodeWalker.GameFiles { Unk00 = Xml.GetChildUIntAttribute(node, "Unk00", "value"); MasterVolume = Xml.GetChildIntAttribute(node, "MasterVolume", "value"); - Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); - Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + EngineAccel = XmlRel.GetHash(Xml.GetChildInnerText(node, "EngineAccel")); + ExhaustAccel = XmlRel.GetHash(Xml.GetChildInnerText(node, "ExhaustAccel")); Unk04 = Xml.GetChildIntAttribute(node, "Unk04", "value"); Unk05 = Xml.GetChildIntAttribute(node, "Unk05", "value"); Unk06 = Xml.GetChildIntAttribute(node, "Unk06", "value"); @@ -11089,12 +11089,12 @@ namespace CodeWalker.GameFiles Unk28 = Xml.GetChildFloatAttribute(node, "Unk28", "value"); Unk29 = Xml.GetChildIntAttribute(node, "Unk29", "value"); Unk30 = Xml.GetChildIntAttribute(node, "Unk30", "value"); - Unk31 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk31")); - Unk32 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk32")); - Unk33 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk33")); - Unk34 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk34")); - Unk35 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk35")); - Unk36 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk36")); + EngineSubmix = XmlRel.GetHash(Xml.GetChildInnerText(node, "EngineSubmix")); + EngineSubmixPreset = XmlRel.GetHash(Xml.GetChildInnerText(node, "EngineSubmixPreset")); + ExhaustSubmix = XmlRel.GetHash(Xml.GetChildInnerText(node, "ExhaustSubmix")); + ExhaustSubmixPreset = XmlRel.GetHash(Xml.GetChildInnerText(node, "ExhaustSubmixPreset")); + EngineAccelNPC = XmlRel.GetHash(Xml.GetChildInnerText(node, "EngineAccelNPC")); + ExhaustAccelNPC = XmlRel.GetHash(Xml.GetChildInnerText(node, "ExhaustAccelNPC")); Unk37 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk37")); Unk38 = Xml.GetChildIntAttribute(node, "Unk38", "value"); Unk39 = Xml.GetChildIntAttribute(node, "Unk39", "value"); @@ -11103,7 +11103,7 @@ namespace CodeWalker.GameFiles Unk42 = Xml.GetChildIntAttribute(node, "Unk42", "value"); Unk43 = Xml.GetChildIntAttribute(node, "Unk43", "value"); Unk44 = Xml.GetChildIntAttribute(node, "Unk44", "value"); - Unk45 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk45")); + IdleSub = XmlRel.GetHash(Xml.GetChildInnerText(node, "IdleSub")); Unk46 = Xml.GetChildIntAttribute(node, "Unk46", "value"); Unk47 = Xml.GetChildIntAttribute(node, "Unk47", "value"); Unk48 = Xml.GetChildIntAttribute(node, "Unk48", "value"); @@ -11146,42 +11146,36 @@ namespace CodeWalker.GameFiles public int Unk21 { get; set; } public int Unk22 { get; set; } public FlagsUint Unk23 { get; set; } - //public FlagsUshort Unk23a { get; set; }//0x0002 - //public FlagsUshort Unk23b { get; set; }//0x0801 public MetaHash IndicatorOn { get; set; } public MetaHash IndicatorOff { get; set; } public MetaHash Handbrake { get; set; } public FlagsUint Unk27 { get; set; } - //public FlagsUshort Unk27a { get; set; } - //public FlagsUshort Unk27b { get; set; } public MetaHash Unk28 { get; set; } public FlagsUint Unk29 { get; set; } - //public FlagsUshort Unk29a { get; set; }//0x0070 - //public FlagsUshort Unk29b { get; set; }//0x55fc public MetaHash Unk30 { get; set; } public MetaHash Unk31 { get; set; } public MetaHash Unk32 { get; set; } - public MetaHash StartupSequence { get; set; }//flags?? 0xB807DF3E - public MetaHash Unk34 { get; set; }//flags?? 0xE38FCF16 + public MetaHash StartupSequence { get; set; }// 0xB807DF3E + public MetaHash Unk34 { get; set; }// 0xE38FCF16 public MetaHash Unk35 { get; set; } public MetaHash Unk36 { get; set; } public float Unk37 { get; set; } public float Unk38 { get; set; } public MetaHash Unk39 { get; set; } public int Unk40 { get; set; } - public MetaHash Unk41 { get; set; }//flags? 0x49DF3CF8 0x8E53EC78 + public MetaHash Sirens { get; set; }// 0x49DF3CF8 0x8E53EC78 public int Unk42 { get; set; } public int Unk43 { get; set; } public int Unk44 { get; set; } public MetaHash Unk45 { get; set; } public MetaHash Unk46 { get; set; } - public MetaHash Unk47 { get; set; }//flags? 0x83FC62DA + public MetaHash Unk47 { get; set; }// 0x83FC62DA public MetaHash TurretSounds { get; set; } public int Unk49 { get; set; } - public MetaHash Unk50 { get; set; }//flags? 0x65A95A8B, 0x85439DAD - public MetaHash Unk51 { get; set; }//flags? 0x6213618E, 0x990D0483 + public MetaHash Unk50 { get; set; }// 0x65A95A8B, 0x85439DAD + public MetaHash Unk51 { get; set; }// 0x6213618E, 0x990D0483 public int Unk52 { get; set; } - public MetaHash Unk53 { get; set; }//flags? 0x04D73241, 0x7F471776 + public MetaHash Unk53 { get; set; }// 0x04D73241, 0x7F471776 public float Unk54 { get; set; } public MetaHash Unk55 { get; set; } public int Unk56 { get; set; } @@ -11239,8 +11233,6 @@ namespace CodeWalker.GameFiles IndicatorOff = br.ReadUInt32(); Handbrake = br.ReadUInt32(); Unk27 = br.ReadUInt32(); - //Unk27a = br.ReadUInt16(); - //Unk27b = br.ReadUInt16(); Unk28 = br.ReadUInt32(); Unk29 = br.ReadUInt32(); //Unk29a = br.ReadUInt16();//0x0070 @@ -11256,7 +11248,7 @@ namespace CodeWalker.GameFiles Unk38 = br.ReadSingle(); Unk39 = br.ReadUInt32(); Unk40 = br.ReadInt32(); - Unk41 = br.ReadUInt32();//flags? 0x49DF3CF8 0x8E53EC78 + Sirens = br.ReadUInt32();//flags? 0x49DF3CF8 0x8E53EC78 Unk42 = br.ReadInt32(); Unk43 = br.ReadInt32(); Unk44 = br.ReadInt32(); @@ -11416,8 +11408,6 @@ namespace CodeWalker.GameFiles bw.Write(IndicatorOff); bw.Write(Handbrake); bw.Write(Unk27); - //bw.Write(Unk27a); - //bw.Write(Unk27b); bw.Write(Unk28); bw.Write(Unk29); //bw.Write(Unk29a);//0x0070 @@ -11433,7 +11423,7 @@ namespace CodeWalker.GameFiles bw.Write(Unk38); bw.Write(Unk39); bw.Write(Unk40); - bw.Write(Unk41);//flags? 0x49DF3CF8 0x8E53EC78 + bw.Write(Sirens);//flags? 0x49DF3CF8 0x8E53EC78 bw.Write(Unk42); bw.Write(Unk43); bw.Write(Unk44); @@ -11518,7 +11508,7 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk38", FloatUtil.ToString(Unk38)); RelXml.StringTag(sb, indent, "Unk39", RelXml.HashString(Unk39)); RelXml.ValueTag(sb, indent, "Unk40", Unk40.ToString()); - RelXml.StringTag(sb, indent, "Unk41", RelXml.HashString(Unk41)); + RelXml.StringTag(sb, indent, "Sirens", RelXml.HashString(Sirens)); RelXml.ValueTag(sb, indent, "Unk42", Unk42.ToString()); RelXml.ValueTag(sb, indent, "Unk43", Unk43.ToString()); RelXml.ValueTag(sb, indent, "Unk44", Unk44.ToString()); @@ -11594,7 +11584,7 @@ namespace CodeWalker.GameFiles Unk38 = Xml.GetChildFloatAttribute(node, "Unk38", "value"); Unk39 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk39")); Unk40 = Xml.GetChildIntAttribute(node, "Unk40", "value"); - Unk41 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk41")); + Sirens = XmlRel.GetHash(Xml.GetChildInnerText(node, "Sirens")); Unk42 = Xml.GetChildIntAttribute(node, "Unk42", "value"); Unk43 = Xml.GetChildIntAttribute(node, "Unk43", "value"); Unk44 = Xml.GetChildIntAttribute(node, "Unk44", "value"); diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs index 3f970b6..361e7cb 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs @@ -3484,6 +3484,32 @@ namespace CodeWalker.GameFiles + + + + + + + + //GranularSound dat54.rel FileName hashes from NotGigo + engine_accel = 3748922026, + exhaust_accel = 598446449, + engine_decel = 2556723864, + exhaust_decel = 780159042, + engine_idle = 1025030561, + exhaust_idle = 396221610, + + + + + + + + + + + + //from dav90's PSO_RBF_XMLExport_V5.7 AutoJunctionAdjustments = 1352439928, vLocation = 929088795, From 7d72c9be3ae5ba28b4de458ddbfdc4123bc11a06 Mon Sep 17 00:00:00 2001 From: dexy Date: Sat, 26 Jan 2019 10:24:20 +1100 Subject: [PATCH 123/158] Generate LOD Lights making random hashes, now sorting by streetLight and hash --- Project/Panels/GenerateLODLightsPanel.cs | 105 +++++++++++++++++------ 1 file changed, 79 insertions(+), 26 deletions(-) diff --git a/Project/Panels/GenerateLODLightsPanel.cs b/Project/Panels/GenerateLODLightsPanel.cs index 22894a7..3c7e556 100644 --- a/Project/Panels/GenerateLODLightsPanel.cs +++ b/Project/Panels/GenerateLODLightsPanel.cs @@ -93,21 +93,12 @@ namespace CodeWalker.Project.Panels Task.Run(() => { - - var position = new List(); - var colour = new List(); - var direction = new List(); - var falloff = new List(); - var falloffExponent = new List(); - var timeAndStateFlags = new List(); - var hash = new List(); - var coneInnerAngle = new List(); - var coneOuterAngleOrCapExt = new List(); - var coronaIntensity = new List(); + var lights = new List(); var eemin = new Vector3(float.MaxValue); var eemax = new Vector3(float.MinValue); var semin = new Vector3(float.MaxValue); var semax = new Vector3(float.MinValue); + var rnd = new Random(); foreach (var ymap in projectYmaps) { @@ -216,11 +207,12 @@ namespace CodeWalker.Project.Panels uint i = (byte)Math.Min(la.Intensity*4, 255); uint c = (i << 24) + (r << 16) + (g << 8) + b; - uint h = 0; //TODO: what hash to use??? + uint h = (uint)rnd.NextLong(); //TODO: what hash to use??? //any other way to know if it's a streetlight? var name = ent.Archetype.Name; bool isStreetLight = (name != null) && (name.Contains("street") || name.Contains("traffic")); + //isStreetLight = rnd.Next() > 2000000000;//DEBUG //@Calcium: //1 = point @@ -231,20 +223,23 @@ namespace CodeWalker.Project.Panels uint t = la.TimeFlags + (type << 26) + (unk << 24); var maxext = (byte)Math.Max(Math.Max(la.ExtentX, la.ExtentY), la.ExtentZ); - - position.Add(new MetaVECTOR3(epos)); - colour.Add(c); - direction.Add(new MetaVECTOR3(edir)); - falloff.Add(la.Falloff); - falloffExponent.Add(la.FalloffExponent); - timeAndStateFlags.Add(t); - hash.Add(h); - coneInnerAngle.Add((byte)la.ConeInnerAngle); - coneOuterAngleOrCapExt.Add(Math.Max((byte)la.ConeOuterAngle, maxext)); - coronaIntensity.Add((byte)(la.CoronaIntensity*6)); - //final lights should be sorted by isStreetLight (1 first!) and then hash + + var light = new Light(); + light.position = new MetaVECTOR3(epos); + light.colour = c; + light.direction = new MetaVECTOR3(edir); + light.falloff = la.Falloff; + light.falloffExponent = la.FalloffExponent; + light.timeAndStateFlags = t; + light.hash = h; + light.coneInnerAngle = (byte)la.ConeInnerAngle; + light.coneOuterAngleOrCapExt = Math.Max((byte)la.ConeOuterAngle, maxext); + light.coronaIntensity = (byte)(la.CoronaIntensity * 6); + light.isStreetLight = isStreetLight; + lights.Add(light); + } } } @@ -252,12 +247,51 @@ namespace CodeWalker.Project.Panels } - if (position.Count == 0) + if (lights.Count == 0) { MessageBox.Show("No lights found in project!"); return; } + + + //final lights should be sorted by isStreetLight (1 first!) and then hash + lights.Sort((a, b) => + { + if (a.isStreetLight != b.isStreetLight) return b.isStreetLight.CompareTo(a.isStreetLight); + return a.hash.CompareTo(b.hash); + }); + + + + var position = new List(); + var colour = new List(); + var direction = new List(); + var falloff = new List(); + var falloffExponent = new List(); + var timeAndStateFlags = new List(); + var hash = new List(); + var coneInnerAngle = new List(); + var coneOuterAngleOrCapExt = new List(); + var coronaIntensity = new List(); + ushort numStreetLights = 0; + foreach (var light in lights) + { + position.Add(light.position); + colour.Add(light.colour); + direction.Add(light.direction); + falloff.Add(light.falloff); + falloffExponent.Add(light.falloffExponent); + timeAndStateFlags.Add(light.timeAndStateFlags); + hash.Add(light.hash); + coneInnerAngle.Add(light.coneInnerAngle); + coneOuterAngleOrCapExt.Add(light.coneOuterAngleOrCapExt); + coronaIntensity.Add(light.coronaIntensity); + if (light.isStreetLight) numStreetLights++; + } + + + UpdateStatus("Creating new ymap files..."); var lodymap = new YmapFile(); @@ -266,7 +300,7 @@ namespace CodeWalker.Project.Panels var dl = new YmapDistantLODLights(); var cdl = new CDistantLODLight(); cdl.category = 1;//0=small, 1=med, 2=large - cdl.numStreetLights = 0;//todo? + cdl.numStreetLights = numStreetLights; dl.CDistantLODLight = cdl; dl.positions = position.ToArray(); dl.colours = colour.ToArray(); @@ -327,5 +361,24 @@ namespace CodeWalker.Project.Panels }); } + + + + public class Light + { + public MetaVECTOR3 position { get; set; } + public uint colour { get; set; } + public MetaVECTOR3 direction { get; set; } + public float falloff { get; set; } + public float falloffExponent { get; set; } + public uint timeAndStateFlags { get; set; } + public uint hash { get; set; } + public byte coneInnerAngle { get; set; } + public byte coneOuterAngleOrCapExt { get; set; } + public byte coronaIntensity { get; set; } + + public bool isStreetLight { get; set; } + } + } } From 3e2dd8970255a3a2e283a245baa4e5b25e68e042 Mon Sep 17 00:00:00 2001 From: dexy Date: Sat, 26 Jan 2019 21:00:13 +1100 Subject: [PATCH 124/158] Trying to generate hash for LOD lights --- CodeWalker.Core/Utils/Vectors.cs | 5 + Project/Panels/GenerateLODLightsPanel.cs | 173 ++++++++++++++++++++++- 2 files changed, 171 insertions(+), 7 deletions(-) diff --git a/CodeWalker.Core/Utils/Vectors.cs b/CodeWalker.Core/Utils/Vectors.cs index 1e748d7..b7552bd 100644 --- a/CodeWalker.Core/Utils/Vectors.cs +++ b/CodeWalker.Core/Utils/Vectors.cs @@ -25,6 +25,11 @@ namespace CodeWalker return new Vector4((float)Math.Floor(v.X), (float)Math.Floor(v.Y), (float)Math.Floor(v.Z), (float)Math.Floor(v.W)); } + public static Vector4 Abs(this Vector4 v) + { + return new Vector4(Math.Abs(v.X), Math.Abs(v.Y), Math.Abs(v.Z), Math.Abs(v.W)); + } + public static Quaternion ToQuaternion(this Vector4 v) { return new Quaternion(v); diff --git a/Project/Panels/GenerateLODLightsPanel.cs b/Project/Panels/GenerateLODLightsPanel.cs index 3c7e556..eedf6c0 100644 --- a/Project/Panels/GenerateLODLightsPanel.cs +++ b/Project/Panels/GenerateLODLightsPanel.cs @@ -98,7 +98,7 @@ namespace CodeWalker.Project.Panels var eemax = new Vector3(float.MinValue); var semin = new Vector3(float.MaxValue); var semax = new Vector3(float.MinValue); - var rnd = new Random(); + //var rnd = new Random(); foreach (var ymap in projectYmaps) { @@ -137,8 +137,9 @@ namespace CodeWalker.Project.Panels semax = Vector3.Max(semax, ent.BBMax + ent._CEntityDef.lodDist); - foreach (var la in lightAttrs) + for (int li = 0; li 2000000000;//DEBUG + //var name = ent.Archetype.Name; + var flags = la.Flags; + bool isStreetLight = (((flags >> 10) & 1u) == 1);// (name != null) && (name.Contains("street") || name.Contains("traffic")); + isStreetLight = false; //TODO: fix this! + //@Calcium: //1 = point @@ -220,7 +231,7 @@ namespace CodeWalker.Project.Panels //4 = capsule uint type = la.Type; uint unk = isStreetLight ? 1u : 0;//2 bits - isStreetLight low bit, unk high bit - uint t = la.TimeFlags + (type << 26) + (unk << 24); + uint t = la.TimeFlags | (type << 26) | (unk << 24); var maxext = (byte)Math.Max(Math.Max(la.ExtentX, la.ExtentY), la.ExtentZ); @@ -364,6 +375,154 @@ namespace CodeWalker.Project.Panels + private uint GetLightHash(YmapEntityDef ent, int lightIndex) + { + unchecked + { + + //var aabb1 = GetAABB(ent); + var aabb = GetAABB2(ent); + + var hashData = new int[7]; + hashData[0] = (int)(aabb.Min.X * 10.0f); + hashData[1] = (int)(aabb.Min.Y * 10.0f); + hashData[2] = (int)(aabb.Min.Z * 10.0f); + hashData[3] = (int)(aabb.Max.X * 10.0f); + hashData[4] = (int)(aabb.Max.Y * 10.0f); + hashData[5] = (int)(aabb.Max.Z * 10.0f); + hashData[6] = lightIndex; + + + int v3 = 7; + int v4 = 0;//=hashData index + int v5 = (int)0xDEADBEEF + 28;// -559038709; + int v6 = (int)0xDEADBEEF + 28; + int v7 = (int)0xDEADBEEF + 28; + + uint v8 = 2; + do + { + int v9 = hashData[v4 + 2] + v5; + int v10 = hashData[v4 + 1] + v6; + int v11 = hashData[v4 + 0] - v9; + int v13 = v10 + v9; + int v14 = (v7 + v11) ^ RotateLeft(v9, 4); + int v17 = v13 + v14; + int v18 = (v10 - v14) ^ RotateLeft(v14, 6); + int v21 = v17 + v18; + int v22 = (v13 - v18) ^ RotateLeft(v18, 8); + int v25 = v21 + v22; + int v26 = (v17 - v22) ^ RotateLeft(v22, 16); + int v29 = (v21 - v26) ^ RotateRight(v26, 13); + int v30 = v25 - v29; + v7 = v25 + v26; + v6 = v7 + v29; + v5 = v30 ^ RotateLeft(v29, 4); + v4 += 3; + v3 -= 3; + --v8; + } + while (v8 > 0); + + int v32 = v3 - 1; //should always be 0 + if (v32 != 0) + { } + + int v50 = v7 + hashData[v4]; + int v34 = (v6 ^ v5) - RotateLeft(v6, 14); + int v35 = (v34 ^ v50) - RotateLeft(v34, 11); + int v36 = (v35 ^ v6) - RotateRight(v35, 7); + int v37 = (v36 ^ v34) - RotateLeft(v36, 16); + int v51 = (v35 ^ v37) - RotateLeft(v37, 4); + int v38 = (v51 ^ v36) - RotateLeft(v51, 14); + int v53 = (v38 ^ v37) - RotateRight(v38, 8); + return (uint)v53; + + } + } + + + private AABB_s GetAABB(YmapEntityDef ent) + { + var arch = ent.Archetype; + var ori = ent.Orientation; + Vector3 bbmin = ent.Position - ent.BSRadius; //sphere + Vector3 bbmax = ent.Position + ent.BSRadius; + if (arch != null) + { + Vector3[] c = new Vector3[8]; + Vector3 abmin = arch.BBMin * ent.Scale; //entity box + Vector3 abmax = arch.BBMax * ent.Scale; + c[0] = abmin; + c[1] = new Vector3(abmin.X, abmin.Y, abmax.Z); + c[2] = new Vector3(abmin.X, abmax.Y, abmin.Z); + c[3] = new Vector3(abmin.X, abmax.Y, abmax.Z); + c[4] = new Vector3(abmax.X, abmin.Y, abmin.Z); + c[5] = new Vector3(abmax.X, abmin.Y, abmax.Z); + c[6] = new Vector3(abmax.X, abmax.Y, abmin.Z); + c[7] = abmax; + bbmin = new Vector3(float.MaxValue); + bbmax = new Vector3(float.MinValue); + for (int j = 0; j < 8; j++) + { + Vector3 corn = ori.Multiply(c[j]) + ent.Position; + bbmin = Vector3.Min(bbmin, corn); + bbmax = Vector3.Max(bbmax, corn); + } + } + AABB_s b = new AABB_s(); + b.Min = new Vector4(bbmin, 0f); + b.Max = new Vector4(bbmax, 0f); + return b; + } + private AABB_s GetAABB2(YmapEntityDef ent) + { + var arch = ent.Archetype; + var ori = ent.Orientation; + var pos = ent.Position; + var sca = ent.Scale; + var mat = Matrix.Transformation(Vector3.Zero, Quaternion.Identity, sca, Vector3.Zero, ori, pos); + var matabs = mat; + matabs.Column1 = mat.Column1.Abs(); + matabs.Column2 = mat.Column2.Abs(); + matabs.Column3 = mat.Column3.Abs(); + matabs.Column4 = mat.Column4.Abs(); + Vector3 bbmin = pos - ent.BSRadius; //sphere + Vector3 bbmax = pos + ent.BSRadius; + if (arch != null) + { + var bbcenter = (arch.BBMax + arch.BBMin) * 0.5f; + var bbextent = (arch.BBMax - arch.BBMin) * 0.5f; + var ncenter = Vector3.TransformCoordinate(bbcenter, mat); + var nextent = Vector3.TransformNormal(bbextent, matabs); + bbmin = ncenter - nextent; + bbmax = ncenter + nextent; + } + AABB_s b = new AABB_s(); + b.Min = new Vector4(bbmin, 0f); + b.Max = new Vector4(bbmax, 0f); + return b; + } + + + + private static uint RotateLeft(uint value, int count) + { + return (value << count) | (value >> (32 - count)); + } + private static uint RotateRight(uint value, int count) + { + return (value >> count) | (value << (32 - count)); + } + private static int RotateLeft(int value, int count) + { + return (int)RotateLeft((uint)value, count); + } + private static int RotateRight(int value, int count) + { + return (int)RotateRight((uint)value, count); + } + public class Light { public MetaVECTOR3 position { get; set; } From 3819d538903777f0bc1527050110f8ca31743073 Mon Sep 17 00:00:00 2001 From: dexy Date: Sun, 27 Jan 2019 17:14:10 +1100 Subject: [PATCH 125/158] Updated ResourceBaseTypes, added Save method to YtdFile --- .../GameFiles/FileTypes/YtdFile.cs | 8 + CodeWalker.Core/GameFiles/GameFileCache.cs | 73 +- CodeWalker.Core/GameFiles/MetaTypes/Meta.cs | 13 +- CodeWalker.Core/GameFiles/Resources/Bounds.cs | 104 ++- CodeWalker.Core/GameFiles/Resources/Clip.cs | 18 +- .../GameFiles/Resources/Drawable.cs | 31 +- CodeWalker.Core/GameFiles/Resources/Frag.cs | 363 ++++------ .../GameFiles/Resources/Particle.cs | 142 ++-- .../GameFiles/Resources/ResourceBaseTypes.cs | 675 +++++++++++++++--- .../GameFiles/Resources/ResourceData.cs | 19 +- .../GameFiles/Resources/Texture.cs | 35 +- CodeWalker.Core/World/Space.cs | 16 +- Project/Panels/GenerateLODLightsPanel.cs | 4 +- 13 files changed, 966 insertions(+), 535 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/YtdFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YtdFile.cs index 5915e5f..ff3ce26 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YtdFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YtdFile.cs @@ -45,5 +45,13 @@ namespace CodeWalker.GameFiles } + public byte[] Save() + { + byte[] data = ResourceBuilder.Build(TextureDict, 13); //ytd is type/version 13... + + return data; + } + + } } diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index ce33956..4f51144 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -164,19 +164,20 @@ namespace CodeWalker.GameFiles RpfMan.BuildExtendedJenkIndex = BuildExtendedJenkIndex; RpfMan.Init(GTAFolder, UpdateStatus, ErrorLog);//, true); - //RE test area! - //TestAudioRels(); - InitGlobal(); InitDlc(); + + //RE test area! + //TestAudioRels(); //TestAudioYmts(); //TestMetas(); //TestPsos(); //TestYcds(); + //TestYtds(); //TestYmaps(); //TestPlacements(); //TestDrawables(); @@ -2106,13 +2107,11 @@ namespace CodeWalker.GameFiles private void AddTextureLookups(YtdFile ytd) { - if (ytd == null) return; - if (ytd.TextureDict == null) return; - if (ytd.TextureDict.TextureNameHashes == null) return; + if (ytd?.TextureDict?.TextureNameHashes?.data_items == null) return; lock (textureSyncRoot) { - foreach (uint hash in ytd.TextureDict.TextureNameHashes) + foreach (uint hash in ytd.TextureDict.TextureNameHashes.data_items) { textureLookup[hash] = ytd.RpfFileEntry; } @@ -2864,6 +2863,66 @@ namespace CodeWalker.GameFiles //{ //} } + public void TestYtds() + { + var errorfiles = new List(); + foreach (RpfFile file in AllRpfs) + { + foreach (RpfEntry entry in file.AllEntries) + { + //try + { + if (entry.NameLower.EndsWith(".ytd")) + { + UpdateStatus(string.Format(entry.Path)); + YtdFile ytdfile = null; + try + { + ytdfile = RpfMan.GetFile(entry); + } + catch(Exception ex) + { + UpdateStatus("Error! " + ex.ToString()); + errorfiles.Add(entry); + } + if ((ytdfile != null) && (ytdfile.TextureDict != null)) + { + var fentry = entry as RpfFileEntry; + if (fentry == null) + { continue; } //shouldn't happen + + var bytes = ytdfile.Save(); + + string origlen = TextUtil.GetBytesReadable(fentry.FileSize); + string bytelen = TextUtil.GetBytesReadable(bytes.Length); + + if (ytdfile.TextureDict.Textures?.Count == 0) + { } + + + var ytd2 = new YtdFile(); + //ytd2.Load(bytes, fentry); + RpfFile.LoadResourceFile(ytd2, bytes, 13); + + if (ytd2.TextureDict == null) + { continue; } + if (ytd2.TextureDict.Textures?.Count != ytdfile.TextureDict.Textures?.Count) + { continue; } + + + + } + } + } + //catch (Exception ex) + //{ + // UpdateStatus("Error! " + ex.ToString()); + //} + } + } + if (errorfiles.Count > 0) + { } + } public void TestYmaps() { foreach (RpfFile file in AllRpfs) diff --git a/CodeWalker.Core/GameFiles/MetaTypes/Meta.cs b/CodeWalker.Core/GameFiles/MetaTypes/Meta.cs index 5d9857f..b636eef 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/Meta.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/Meta.cs @@ -54,6 +54,8 @@ namespace CodeWalker.GameFiles public string Name { get; private set; } //public string[] Strings { get; set; } + private string_r NameBlock = null; + /// /// Reads the data-block from a stream. @@ -107,6 +109,9 @@ namespace CodeWalker.GameFiles (ulong)this.NamePointer // offset ); + if (!string.IsNullOrEmpty(Name)) + { } + //Strings = MetaTypes.GetStrings(this); } @@ -121,7 +126,7 @@ namespace CodeWalker.GameFiles this.StructureInfosPointer = this.StructureInfos?.FilePosition ?? 0; this.EnumInfosPointer = this.EnumInfos?.FilePosition ?? 0; this.DataBlocksPointer = this.DataBlocks?.FilePosition ?? 0; - //this.NamePointer = this.Name?.Position ?? 0; //TODO: fix + this.NamePointer = this.NameBlock?.FilePosition ?? 0; this.UselessPointer = 0; this.StructureInfosCount = (short)(this.StructureInfos?.Count ?? 0); this.EnumInfosCount = (short)(this.EnumInfos?.Count ?? 0); @@ -162,7 +167,11 @@ namespace CodeWalker.GameFiles if ((StructureInfos != null) && (StructureInfos.Count > 0)) list.Add(StructureInfos); if ((EnumInfos != null) && (EnumInfos.Count > 0)) list.Add(EnumInfos); if ((DataBlocks != null) && (DataBlocks.Count > 0)) list.Add(DataBlocks); - //if (Name != null) list.Add(Name); //TODO: fix + if (!string.IsNullOrEmpty(Name)) + { + NameBlock = (string_r)Name; + list.Add(NameBlock); + } return list.ToArray(); } diff --git a/CodeWalker.Core/GameFiles/Resources/Bounds.cs b/CodeWalker.Core/GameFiles/Resources/Bounds.cs index 1f25591..dea2416 100644 --- a/CodeWalker.Core/GameFiles/Resources/Bounds.cs +++ b/CodeWalker.Core/GameFiles/Resources/Bounds.cs @@ -53,9 +53,7 @@ namespace CodeWalker.GameFiles public uint Unknown_14h { get; set; } // 0x00000001 public uint Unknown_18h { get; set; } // 0x00000001 public uint Unknown_1Ch { get; set; } // 0x00000001 - //public ResourceSimpleList64 BoundNameHashes; - public ResourceSimpleList64Ptr BoundNameHashesPtr { get; set; } - public uint[] BoundNameHashes { get; set; } + public ResourceSimpleList64_uint BoundNameHashes; public ResourcePointerList64 Bounds { get; set; } /// @@ -70,9 +68,7 @@ namespace CodeWalker.GameFiles this.Unknown_14h = reader.ReadUInt32(); this.Unknown_18h = reader.ReadUInt32(); this.Unknown_1Ch = reader.ReadUInt32(); - //this.BoundNameHashes = reader.ReadBlock>(); - this.BoundNameHashesPtr = reader.ReadStruct(); - this.BoundNameHashes = reader.ReadUintsAt(this.BoundNameHashesPtr.EntriesPointer, this.BoundNameHashesPtr.EntriesCount); + this.BoundNameHashes = reader.ReadBlock(); this.Bounds = reader.ReadBlock>(); } @@ -88,14 +84,14 @@ namespace CodeWalker.GameFiles writer.Write(this.Unknown_14h); writer.Write(this.Unknown_18h); writer.Write(this.Unknown_1Ch); - //writer.WriteBlock(this.BoundNameHashes); //TODO: fix! - //writer.WriteBlock(this.Bounds); + writer.WriteBlock(this.BoundNameHashes); + writer.WriteBlock(this.Bounds); } public override Tuple[] GetParts() { return new Tuple[] { - //new Tuple(0x20, BoundNameHashes), //TODO: fix! + new Tuple(0x20, BoundNameHashes), new Tuple(0x30, Bounds) }; } @@ -196,16 +192,16 @@ namespace CodeWalker.GameFiles writer.Write(this.BoundingSphereRadius); writer.Write(this.Unknown_18h); writer.Write(this.Unknown_1Ch); - //writer.WriteBlock(this.BoundingBoxMax); //TODO: FIX!! + writer.Write(this.BoundingBoxMax); writer.Write(this.Margin); - //writer.WriteBlock(this.BoundingBoxMin); + writer.Write(this.BoundingBoxMin); writer.Write(this.Unknown_3Ch); - //writer.WriteBlock(this.BoundingBoxCenter); + writer.Write(this.BoundingBoxCenter); writer.Write(this.MaterialIndex); writer.Write(this.ProceduralId); writer.Write(this.RoomId_and_PedDensity); writer.Write(this.Unknown_4Fh); - //writer.WriteBlock(this.Center); + writer.Write(this.Center); writer.Write(this.PolyFlags); writer.Write(this.MaterialColorIndex); writer.Write(this.Unknown_5Eh); @@ -329,9 +325,7 @@ namespace CodeWalker.GameFiles public BoundVertex_s[] p1data { get; set; } - public BoundPolygon[] Polygons { get; set; } - public Vector3[] Vertices { get; set; } public uint[] Unknown_B8h_Data { get; set; } public uint[] Unknown_C0h_Data { get; set; } @@ -408,10 +402,9 @@ namespace CodeWalker.GameFiles if (this.Unknown_C0h_Data != null) { - ulong[] ptrlist = reader.ReadUlongsAt(this.Unknown_C8h_Pointer, (uint)Unknown_C0h_Data.Length);//8 - //reader.Position += Unknown_C0h_Data.Length * 8; //account for ptrlist read - Unknown_C8h_Data = new uint[Unknown_C0h_Data.Length][]; //8 - for (int i = 0; i < Unknown_C0h_Data.Length; i++) //8 + ulong[] ptrlist = reader.ReadUlongsAt(this.Unknown_C8h_Pointer, 8);//(uint)Unknown_C0h_Data.Length + Unknown_C8h_Data = new uint[8][]; //Unknown_C0h_Data.Length + for (int i = 0; i < 8; i++) //Unknown_C0h_Data.Length { Unknown_C8h_Data[i] = reader.ReadUintsAt(ptrlist[i], Unknown_C0h_Data[i]); } @@ -1091,9 +1084,10 @@ namespace CodeWalker.GameFiles } // structure data - public ulong NodesPointer { get; set; } - public uint NodesCount { get; set; } - public uint Count2 { get; set; } + //public ulong NodesPointer { get; set; } + //public uint NodesCount { get; set; } + //public uint Count2 { get; set; } + public ResourceSimpleList64b_s Nodes { get; set; } public uint Unknown_10h { get; set; } // 0x00000000 public uint Unknown_14h { get; set; } // 0x00000000 public uint Unknown_18h { get; set; } // 0x00000000 @@ -1103,14 +1097,12 @@ namespace CodeWalker.GameFiles public Vector4 BoundingBoxCenter { get; set; } public Vector4 QuantumInverse { get; set; } public Vector4 Quantum { get; set; } // bounding box dimension / 2^16 - //public ResourceSimpleList64 Trees { get; set; } - public ResourceSimpleList64Ptr TreesPtr { get; set; } - public BVHTreeInfo_s[] Trees { get; set; } + public ResourceSimpleList64_s Trees { get; set; } // reference data - //public ResourceSimpleArray2 Nodes; - public BVHNode_s[] Nodes { get; set; } - public BVHNode_s[] Nodes_Unk1 { get; set; } + ////public ResourceSimpleArray2 Nodes; + //public BVHNode_s[] Nodes { get; set; } + //public BVHNode_s[] Nodes_Unk1 { get; set; } /// /// Reads the data-block from a stream. @@ -1118,40 +1110,34 @@ namespace CodeWalker.GameFiles public override void Read(ResourceDataReader reader, params object[] parameters) { // read structure data - this.NodesPointer = reader.ReadUInt64(); - this.NodesCount = reader.ReadUInt32(); - this.Count2 = reader.ReadUInt32(); + //this.NodesPointer = reader.ReadUInt64(); + //this.NodesCount = reader.ReadUInt32(); + //this.Count2 = reader.ReadUInt32(); + this.Nodes = reader.ReadBlock>(); this.Unknown_10h = reader.ReadUInt32(); this.Unknown_14h = reader.ReadUInt32(); this.Unknown_18h = reader.ReadUInt32(); this.Unknown_1Ch = reader.ReadUInt32(); - //this.BoundingBoxMin = reader.ReadBlock(); - //this.BoundingBoxMax = reader.ReadBlock(); - //this.BoundingBoxCenter = reader.ReadBlock(); - //this.QuantumInverse = reader.ReadBlock(); - //this.Quantum = reader.ReadBlock(); this.BoundingBoxMin = reader.ReadStruct(); this.BoundingBoxMax = reader.ReadStruct(); this.BoundingBoxCenter = reader.ReadStruct(); this.QuantumInverse = reader.ReadStruct(); this.Quantum = reader.ReadStruct(); - //this.Trees = reader.ReadBlock>(); - this.TreesPtr = reader.ReadStruct(); - this.Trees = reader.ReadStructsAt(this.TreesPtr.EntriesPointer, this.TreesPtr.EntriesCount); + this.Trees = reader.ReadBlock>(); // read reference data - //this.Nodes = reader.ReadBlockAt>( - // this.NodesPointer, // offset - // this.NodesCount, - // this.Count2 - this.NodesCount - //); - - this.Nodes = reader.ReadStructsAt(this.NodesPointer, this.NodesCount); - - this.Nodes_Unk1 = reader.ReadStructsAt(this.NodesPointer + NodesCount * 16 /*sizeof(BVHNode_s)*/, Count2 - NodesCount); + ////this.Nodes = reader.ReadBlockAt>( + //// this.NodesPointer, // offset + //// this.NodesCount, + //// this.Count2 - this.NodesCount + ////); + //this.Nodes = reader.ReadStructsAt(this.NodesPointer, this.NodesCount); + //this.Nodes_Unk1 = reader.ReadStructsAt(this.NodesPointer + NodesCount * 16 /*sizeof(BVHNode_s)*/, Count2 - NodesCount); + //if (Nodes_Unk1 != null) + //{ } } /// @@ -1166,19 +1152,20 @@ namespace CodeWalker.GameFiles //TODO: fix // write structure data - writer.Write(this.NodesPointer); - writer.Write(this.NodesCount); - writer.Write(this.Count2); + //writer.Write(this.NodesPointer); + //writer.Write(this.NodesCount); + //writer.Write(this.Count2); + writer.WriteBlock(this.Nodes); writer.Write(this.Unknown_10h); writer.Write(this.Unknown_14h); writer.Write(this.Unknown_18h); writer.Write(this.Unknown_1Ch); - //writer.WriteBlock(this.BoundingBoxMin); - //writer.WriteBlock(this.BoundingBoxMax); - //writer.WriteBlock(this.BoundingBoxCenter); - //writer.WriteBlock(this.QuantumInverse); - //writer.WriteBlock(this.Quantum); - //writer.WriteBlock(this.Trees); //TODO: fix + writer.Write(this.BoundingBoxMin); + writer.Write(this.BoundingBoxMax); + writer.Write(this.BoundingBoxCenter); + writer.Write(this.QuantumInverse); + writer.Write(this.Quantum); + writer.WriteBlock(this.Trees); } /// @@ -1195,12 +1182,13 @@ namespace CodeWalker.GameFiles public override Tuple[] GetParts() { return new Tuple[] { + new Tuple(0x0, Nodes), //new Tuple(0x20, BoundingBoxMin), //new Tuple(0x30, BoundingBoxMax), //new Tuple(0x40, BoundingBoxCenter), //new Tuple(0x50, QuantumInverse), //new Tuple(0x60, Quantum), - //new Tuple(0x70, Trees) //TODO: fix! + new Tuple(0x70, Trees) }; } } diff --git a/CodeWalker.Core/GameFiles/Resources/Clip.cs b/CodeWalker.Core/GameFiles/Resources/Clip.cs index 67bc2e1..ba392b3 100644 --- a/CodeWalker.Core/GameFiles/Resources/Clip.cs +++ b/CodeWalker.Core/GameFiles/Resources/Clip.cs @@ -291,9 +291,9 @@ namespace CodeWalker.GameFiles public uint Unknown_38h { get; set; } public uint Unknown_3Ch { get; set; } public ResourcePointerList64 Sequences { get; set; } - //public ResourceSimpleList64 Unknown_50h { get; set; } - public ResourceSimpleList64Ptr BoneIdsPtr { get; set; } - public AnimationBoneId[] BoneIds { get; set; } + public ResourceSimpleList64_s BoneIds { get; set; } + //public ResourceSimpleList64Ptr BoneIdsPtr { get; set; } + //public AnimationBoneId[] BoneIds { get; set; } public YcdFile Ycd { get; set; } @@ -323,10 +323,10 @@ namespace CodeWalker.GameFiles this.Unknown_38h = reader.ReadUInt32(); //314 174 1238 390 sequences length? this.Unknown_3Ch = reader.ReadUInt32(); //2 2 2 2 material/type? this.Sequences = reader.ReadBlock>(); - //this.Unknown_50h = reader.ReadBlock>(); - this.BoneIdsPtr = reader.ReadStruct(); - //this.BoneIds = reader.ReadUintsAt(this.BoneIdsPtr.EntriesPointer, this.BoneIdsPtr.EntriesCount); - this.BoneIds = reader.ReadStructsAt(this.BoneIdsPtr.EntriesPointer, this.BoneIdsPtr.EntriesCount); + this.BoneIds = reader.ReadBlock>(); + //this.BoneIdsPtr = reader.ReadStruct(); + ////this.BoneIds = reader.ReadUintsAt(this.BoneIdsPtr.EntriesPointer, this.BoneIdsPtr.EntriesCount); + //this.BoneIds = reader.ReadStructsAt(this.BoneIdsPtr.EntriesPointer, this.BoneIdsPtr.EntriesCount); } public override void Write(ResourceDataWriter writer, params object[] parameters) @@ -352,14 +352,14 @@ namespace CodeWalker.GameFiles writer.Write(this.Unknown_38h); writer.Write(this.Unknown_3Ch); writer.WriteBlock(this.Sequences); - //writer.WriteBlock(this.Unknown_50h);//todo: fix!! + writer.WriteBlock(this.BoneIds); } public override Tuple[] GetParts() { return new Tuple[] { new Tuple(0x40, Sequences), - //new Tuple(0x50, Unknown_50h)//todo: fix! + new Tuple(0x50, BoneIds) }; } } diff --git a/CodeWalker.Core/GameFiles/Resources/Drawable.cs b/CodeWalker.Core/GameFiles/Resources/Drawable.cs index 72acf0b..32f945a 100644 --- a/CodeWalker.Core/GameFiles/Resources/Drawable.cs +++ b/CodeWalker.Core/GameFiles/Resources/Drawable.cs @@ -2345,18 +2345,13 @@ namespace CodeWalker.GameFiles // structure data public ulong NamePointer { get; set; } - public ulong LightAttributesPointer { get; set; } - public ushort LightAttributesCount1 { get; set; } - public ushort LightAttributesCount2 { get; set; } - public uint Unknown_BCh { get; set; } // 0x00000000 + public ResourceSimpleList64_s LightAttributes { get; set; } public uint Unknown_C0h { get; set; } // 0x00000000 public uint Unknown_C4h { get; set; } // 0x00000000 public ulong BoundPointer { get; set; } // reference data public string Name { get; set; } - //public ResourceSimpleArray LightAttributes { get; set; } - public LightAttributes_s[] LightAttributes { get; set; } public Bounds Bound { get; set; } public string ErrorMessage { get; set; } @@ -2370,10 +2365,7 @@ namespace CodeWalker.GameFiles // read structure data this.NamePointer = reader.ReadUInt64(); - this.LightAttributesPointer = reader.ReadUInt64(); - this.LightAttributesCount1 = reader.ReadUInt16(); - this.LightAttributesCount2 = reader.ReadUInt16(); - this.Unknown_BCh = reader.ReadUInt32(); + this.LightAttributes = reader.ReadBlock>(); this.Unknown_C0h = reader.ReadUInt32(); this.Unknown_C4h = reader.ReadUInt32(); this.BoundPointer = reader.ReadUInt64(); @@ -2385,11 +2377,6 @@ namespace CodeWalker.GameFiles this.Name = reader.ReadStringAt(//BlockAt( this.NamePointer // offset ); - //this.LightAttributes = reader.ReadBlockAt>( - // this.LightAttributesPointer, // offset - // this.LightAttributesCount1 - //); - this.LightAttributes = reader.ReadStructsAt(this.LightAttributesPointer, this.LightAttributesCount1); this.Bound = reader.ReadBlockAt( this.BoundPointer // offset @@ -2410,16 +2397,11 @@ namespace CodeWalker.GameFiles // update structure data //this.NamePointer = (ulong)(this.Name != null ? this.Name.Position : 0); //TODO: fix - //this.LightAttributesPointer = (ulong)(this.LightAttributes != null ? this.LightAttributes.Position : 0); this.BoundPointer = (ulong)(this.Bound != null ? this.Bound.FilePosition : 0); - //TODO: fix // write structure data writer.Write(this.NamePointer); - writer.Write(this.LightAttributesPointer); - writer.Write(this.LightAttributesCount1); - writer.Write(this.LightAttributesCount2); - writer.Write(this.Unknown_BCh); + writer.WriteBlock(this.LightAttributes); writer.Write(this.Unknown_C0h); writer.Write(this.Unknown_C4h); writer.Write(this.BoundPointer); @@ -2432,10 +2414,15 @@ namespace CodeWalker.GameFiles { var list = new List(base.GetReferences()); //if (Name != null) list.Add(Name); //TODO: fix - //if (LightAttributes != null) list.Add(LightAttributes); //TODO: fix if (Bound != null) list.Add(Bound); return list.ToArray(); } + public override Tuple[] GetParts() + { + return new Tuple[] { + new Tuple(0xB0, LightAttributes), + }; + } public override string ToString() diff --git a/CodeWalker.Core/GameFiles/Resources/Frag.cs b/CodeWalker.Core/GameFiles/Resources/Frag.cs index afab44f..e6fd88a 100644 --- a/CodeWalker.Core/GameFiles/Resources/Frag.cs +++ b/CodeWalker.Core/GameFiles/Resources/Frag.cs @@ -101,9 +101,9 @@ namespace CodeWalker.GameFiles public uint Unknown_104h { get; set; } // 0x00000000 public uint Unknown_108h { get; set; } // 0x00000000 public uint Unknown_10Ch { get; set; } // 0x00000000 - //public ResourceSimpleList64 LightAttributes { get; set; } - public ResourceSimpleList64Ptr LightAttributesPtr { get; set; } - public LightAttributes_s[] LightAttributes { get; set; } + public ResourceSimpleList64_s LightAttributes { get; set; } + //public ResourceSimpleList64Ptr LightAttributesPtr { get; set; } + //public LightAttributes_s[] LightAttributes { get; set; } public ulong Unknown_120h_Pointer { get; set; } public uint Unknown_128h { get; set; } // 0x00000000 public uint Unknown_12Ch { get; set; } // 0x00000000 @@ -182,9 +182,7 @@ namespace CodeWalker.GameFiles this.Unknown_104h = reader.ReadUInt32(); this.Unknown_108h = reader.ReadUInt32(); this.Unknown_10Ch = reader.ReadUInt32(); - //this.LightAttributes = reader.ReadBlock>(); - this.LightAttributesPtr = reader.ReadStruct(); - this.LightAttributes = reader.ReadStructsAt(LightAttributesPtr.EntriesPointer, LightAttributesPtr.EntriesCount); + this.LightAttributes = reader.ReadBlock>(); this.Unknown_120h_Pointer = reader.ReadUInt64(); this.Unknown_128h = reader.ReadUInt32(); this.Unknown_12Ch = reader.ReadUInt32(); @@ -276,15 +274,13 @@ namespace CodeWalker.GameFiles this.DrawablePointer = (ulong)(this.Drawable != null ? this.Drawable.FilePosition : 0); this.Unknown_28h_Pointer = (ulong)(this.Unknown_28h_Data != null ? this.Unknown_28h_Data.FilePosition : 0); this.Unknown_30h_Pointer = (ulong)(this.Unknown_30h_Data != null ? this.Unknown_30h_Data.FilePosition : 0); - //this.cc00 = (uint)(this.pxxxxx_0data != null ? this.pxxxxx_0data.Count : 0); + this.Count0 = (uint)(this.Unknown_28h_Data != null ? this.Unknown_28h_Data.Count : 0); ////this.NamePointer = (ulong)(this.Name != null ? this.Name.Position : 0); //TODO: fix!!! - //this.cnt1 = (ushort)(this.pxxxxx_2data != null ? this.pxxxxx_2data.Count : 0); this.Unknown_A8h_Pointer = (ulong)(this.Unknown_A8h_Data != null ? this.Unknown_A8h_Data.FilePosition : 0); - //this.anotherCount = (byte)(this.pxxxxx_3data != null ? this.pxxxxx_3data.Count : 0); + this.Count3 = (byte)(this.Unknown_E0h_Data != null ? this.Unknown_E0h_Data.Count : 0); this.Unknown_E0h_Pointer = (ulong)(this.Unknown_E0h_Data != null ? this.Unknown_E0h_Data.FilePosition : 0); this.PhysicsLODGroupPointer = (ulong)(this.PhysicsLODGroup != null ? this.PhysicsLODGroup.FilePosition : 0); this.Drawable2Pointer = (ulong)(this.Drawable2 != null ? this.Drawable2.FilePosition : 0); - //this.cntxx51a = (ushort)(this.pxxxxx_5data != null ? this.pxxxxx_5data.Count : 0); this.Unknown_120h_Pointer = (ulong)(this.Unknown_120h_Data != null ? this.Unknown_120h_Data.FilePosition : 0); // write structure data @@ -343,7 +339,7 @@ namespace CodeWalker.GameFiles writer.Write(this.Unknown_104h); writer.Write(this.Unknown_108h); writer.Write(this.Unknown_10Ch); - //writer.WriteBlock(this.LightAttributes); //TODO: fix! + writer.WriteBlock(this.LightAttributes); writer.Write(this.Unknown_120h_Pointer); writer.Write(this.Unknown_128h); writer.Write(this.Unknown_12Ch); @@ -371,7 +367,7 @@ namespace CodeWalker.GameFiles { return new Tuple[] { new Tuple(0x60, Clothes), - //new Tuple(0x110, LightAttributes) //TODO: fix! + new Tuple(0x110, LightAttributes) }; } } @@ -777,63 +773,37 @@ namespace CodeWalker.GameFiles public uint Unknown_14h { get; set; } public uint Unknown_18h { get; set; } public uint Unknown_1Ch { get; set; } // 0x00000000 - //public ResourceSimpleList64 Unknown_20h { get; set; } - //public ResourceSimpleList64 Unknown_30h { get; set; } - //public ResourceSimpleList64 Unknown_40h { get; set; } - public ResourceSimpleList64Ptr Unknown_20hPtr { get; set; } - public ResourceSimpleList64Ptr Unknown_30hPtr { get; set; } - public ResourceSimpleList64Ptr Unknown_40hPtr { get; set; } - public float[] Unknown_20h { get; set; } - public float[] Unknown_30h { get; set; } - public float[] Unknown_40h { get; set; } + public ResourceSimpleList64_float Unknown_20h { get; set; } + public ResourceSimpleList64_float Unknown_30h { get; set; } + public ResourceSimpleList64_float Unknown_40h { get; set; } public uint Unknown_50h { get; set; } // 0x00000000 public uint Unknown_54h { get; set; } // 0x00000000 public uint Unknown_58h { get; set; } // 0x00000000 public uint Unknown_5Ch { get; set; } // 0x00000000 - //public ResourceSimpleList64 Unknown_60h { get; set; } - //public ResourceSimpleList64 Unknown_70h { get; set; } - //public ResourceSimpleList64 Unknown_80h { get; set; } - public ResourceSimpleList64Ptr Unknown_60hPtr { get; set; } - public ResourceSimpleList64Ptr Unknown_70hPtr { get; set; } - public ResourceSimpleList64Ptr Unknown_80hPtr { get; set; } - public float[] Unknown_60h { get; set; } - public uint[] Unknown_70h { get; set; } - public uint[] Unknown_80h { get; set; } + public ResourceSimpleList64_float Unknown_60h { get; set; } + public ResourceSimpleList64_uint Unknown_70h { get; set; } + public ResourceSimpleList64_uint Unknown_80h { get; set; } public uint Unknown_90h { get; set; } // 0x00000000 public uint Unknown_94h { get; set; } // 0x00000000 public uint Unknown_98h { get; set; } // 0x00000000 public uint Unknown_9Ch { get; set; } // 0x00000000 - //public ResourceSimpleList64 Unknown_A0h { get; set; } - //public ResourceSimpleList64 Unknown_B0h { get; set; } - //public ResourceSimpleList64 Unknown_C0h { get; set; } - public ResourceSimpleList64Ptr Unknown_A0hPtr { get; set; } - public ResourceSimpleList64Ptr Unknown_B0hPtr { get; set; } - public ResourceSimpleList64Ptr Unknown_C0hPtr { get; set; } - public float[] Unknown_A0h { get; set; } - public uint[] Unknown_B0h { get; set; } - public uint[] Unknown_C0h { get; set; } + public ResourceSimpleList64_float Unknown_A0h { get; set; } + public ResourceSimpleList64_uint Unknown_B0h { get; set; } + public ResourceSimpleList64_uint Unknown_C0h { get; set; } public uint Unknown_D0h { get; set; } // 0x00000000 public uint Unknown_D4h { get; set; } // 0x00000000 public uint Unknown_D8h { get; set; } // 0x00000000 public uint Unknown_DCh { get; set; } // 0x00000000 - //public ResourceSimpleList64 Unknown_E0h { get; set; } - //public ResourceSimpleList64 Unknown_F0h { get; set; } - //public ResourceSimpleList64 Unknown_100h { get; set; } - public ResourceSimpleList64Ptr Unknown_E0hPtr { get; set; } - public ResourceSimpleList64Ptr Unknown_F0hPtr { get; set; } - public ResourceSimpleList64Ptr Unknown_100hPtr { get; set; } - public ushort[] Unknown_E0h { get; set; } - public ushort[] Unknown_F0h { get; set; } - public ushort[] Unknown_100h { get; set; } + public ResourceSimpleList64_ushort Unknown_E0h { get; set; } + public ResourceSimpleList64_ushort Unknown_F0h { get; set; } + public ResourceSimpleList64_ushort Unknown_100h { get; set; } public uint Unknown_110h { get; set; } // 0x00000000 public uint Unknown_114h { get; set; } // 0x00000000 public uint Unknown_118h { get; set; } // 0x00000000 public uint Unknown_11Ch { get; set; } // 0x00000000 public uint Unknown_120h { get; set; } // 0x00000000 public uint Unknown_124h { get; set; } // 0x00000000 - //public ResourceSimpleList64 Unknown_128h { get; set; } - public ResourceSimpleList64Ptr Unknown_128hPtr { get; set; } - public uint[] Unknown_128h { get; set; } + public ResourceSimpleList64_uint Unknown_128h { get; set; } public uint Unknown_138h { get; set; } // 0x00000000 public uint Unknown_13Ch { get; set; } // 0x00000000 @@ -851,50 +821,37 @@ namespace CodeWalker.GameFiles this.Unknown_14h = reader.ReadUInt32(); this.Unknown_18h = reader.ReadUInt32(); this.Unknown_1Ch = reader.ReadUInt32(); - this.Unknown_20hPtr = reader.ReadStruct(); - this.Unknown_30hPtr = reader.ReadStruct(); - this.Unknown_40hPtr = reader.ReadStruct(); - this.Unknown_20h = reader.ReadFloatsAt(Unknown_20hPtr.EntriesPointer, Unknown_20hPtr.EntriesCount); - this.Unknown_30h = reader.ReadFloatsAt(Unknown_30hPtr.EntriesPointer, Unknown_30hPtr.EntriesCount); - this.Unknown_40h = reader.ReadFloatsAt(Unknown_40hPtr.EntriesPointer, Unknown_40hPtr.EntriesCount); + this.Unknown_20h = reader.ReadBlock(); + this.Unknown_30h = reader.ReadBlock(); + this.Unknown_40h = reader.ReadBlock(); this.Unknown_50h = reader.ReadUInt32(); this.Unknown_54h = reader.ReadUInt32(); this.Unknown_58h = reader.ReadUInt32(); this.Unknown_5Ch = reader.ReadUInt32(); - this.Unknown_60hPtr = reader.ReadStruct(); - this.Unknown_70hPtr = reader.ReadStruct(); - this.Unknown_80hPtr = reader.ReadStruct(); - this.Unknown_60h = reader.ReadFloatsAt(Unknown_60hPtr.EntriesPointer, Unknown_60hPtr.EntriesCount); - this.Unknown_70h = reader.ReadUintsAt(Unknown_70hPtr.EntriesPointer, Unknown_70hPtr.EntriesCount); - this.Unknown_80h = reader.ReadUintsAt(Unknown_80hPtr.EntriesPointer, Unknown_80hPtr.EntriesCount); + this.Unknown_60h = reader.ReadBlock(); + this.Unknown_70h = reader.ReadBlock(); + this.Unknown_80h = reader.ReadBlock(); this.Unknown_90h = reader.ReadUInt32(); this.Unknown_94h = reader.ReadUInt32(); this.Unknown_98h = reader.ReadUInt32(); this.Unknown_9Ch = reader.ReadUInt32(); - this.Unknown_A0hPtr = reader.ReadStruct(); - this.Unknown_B0hPtr = reader.ReadStruct(); - this.Unknown_C0hPtr = reader.ReadStruct(); - this.Unknown_A0h = reader.ReadFloatsAt(Unknown_A0hPtr.EntriesPointer, Unknown_A0hPtr.EntriesCount); - this.Unknown_B0h = reader.ReadUintsAt(Unknown_B0hPtr.EntriesPointer, Unknown_B0hPtr.EntriesCount); - this.Unknown_C0h = reader.ReadUintsAt(Unknown_C0hPtr.EntriesPointer, Unknown_C0hPtr.EntriesCount); + this.Unknown_A0h = reader.ReadBlock(); + this.Unknown_B0h = reader.ReadBlock(); + this.Unknown_C0h = reader.ReadBlock(); this.Unknown_D0h = reader.ReadUInt32(); this.Unknown_D4h = reader.ReadUInt32(); this.Unknown_D8h = reader.ReadUInt32(); this.Unknown_DCh = reader.ReadUInt32(); - this.Unknown_E0hPtr = reader.ReadStruct(); - this.Unknown_F0hPtr = reader.ReadStruct(); - this.Unknown_100hPtr = reader.ReadStruct(); - this.Unknown_E0h = reader.ReadUshortsAt(Unknown_E0hPtr.EntriesPointer, Unknown_E0hPtr.EntriesCount); - this.Unknown_F0h = reader.ReadUshortsAt(Unknown_F0hPtr.EntriesPointer, Unknown_F0hPtr.EntriesCount); - this.Unknown_100h = reader.ReadUshortsAt(Unknown_100hPtr.EntriesPointer, Unknown_100hPtr.EntriesCount); + this.Unknown_E0h = reader.ReadBlock(); + this.Unknown_F0h = reader.ReadBlock(); + this.Unknown_100h = reader.ReadBlock(); this.Unknown_110h = reader.ReadUInt32(); this.Unknown_114h = reader.ReadUInt32(); this.Unknown_118h = reader.ReadUInt32(); this.Unknown_11Ch = reader.ReadUInt32(); this.Unknown_120h = reader.ReadUInt32(); this.Unknown_124h = reader.ReadUInt32(); - this.Unknown_128hPtr = reader.ReadStruct(); - this.Unknown_128h = reader.ReadUintsAt(Unknown_128hPtr.EntriesPointer, Unknown_128hPtr.EntriesCount); + this.Unknown_128h = reader.ReadBlock(); this.Unknown_138h = reader.ReadUInt32(); this.Unknown_13Ch = reader.ReadUInt32(); } @@ -913,37 +870,37 @@ namespace CodeWalker.GameFiles writer.Write(this.Unknown_14h); writer.Write(this.Unknown_18h); writer.Write(this.Unknown_1Ch); - //writer.WriteBlock(this.Unknown_20h); //TODO: fix! - //writer.WriteBlock(this.Unknown_30h); - //writer.WriteBlock(this.Unknown_40h); + writer.WriteBlock(this.Unknown_20h); + writer.WriteBlock(this.Unknown_30h); + writer.WriteBlock(this.Unknown_40h); writer.Write(this.Unknown_50h); writer.Write(this.Unknown_54h); writer.Write(this.Unknown_58h); writer.Write(this.Unknown_5Ch); - //writer.WriteBlock(this.Unknown_60h); - //writer.WriteBlock(this.Unknown_70h); - //writer.WriteBlock(this.Unknown_80h); + writer.WriteBlock(this.Unknown_60h); + writer.WriteBlock(this.Unknown_70h); + writer.WriteBlock(this.Unknown_80h); writer.Write(this.Unknown_90h); writer.Write(this.Unknown_94h); writer.Write(this.Unknown_98h); writer.Write(this.Unknown_9Ch); - //writer.WriteBlock(this.Unknown_A0h); - //writer.WriteBlock(this.Unknown_B0h); - //writer.WriteBlock(this.Unknown_C0h); + writer.WriteBlock(this.Unknown_A0h); + writer.WriteBlock(this.Unknown_B0h); + writer.WriteBlock(this.Unknown_C0h); writer.Write(this.Unknown_D0h); writer.Write(this.Unknown_D4h); writer.Write(this.Unknown_D8h); writer.Write(this.Unknown_DCh); - //writer.WriteBlock(this.Unknown_E0h); - //writer.WriteBlock(this.Unknown_F0h); - //writer.WriteBlock(this.Unknown_100h); + writer.WriteBlock(this.Unknown_E0h); + writer.WriteBlock(this.Unknown_F0h); + writer.WriteBlock(this.Unknown_100h); writer.Write(this.Unknown_110h); writer.Write(this.Unknown_114h); writer.Write(this.Unknown_118h); writer.Write(this.Unknown_11Ch); writer.Write(this.Unknown_120h); writer.Write(this.Unknown_124h); - //writer.WriteBlock(this.Unknown_128h); + writer.WriteBlock(this.Unknown_128h); writer.Write(this.Unknown_138h); writer.Write(this.Unknown_13Ch); } @@ -951,19 +908,19 @@ namespace CodeWalker.GameFiles public override Tuple[] GetParts() { return new Tuple[] { - //new Tuple(0x20, Unknown_20h), //TODO: fix! - //new Tuple(0x30, Unknown_30h), - //new Tuple(0x40, Unknown_40h), - //new Tuple(0x60, Unknown_60h), - //new Tuple(0x70, Unknown_70h), - //new Tuple(0x80, Unknown_80h), - //new Tuple(0xA0, Unknown_A0h), - //new Tuple(0xB0, Unknown_B0h), - //new Tuple(0xC0, Unknown_C0h), - //new Tuple(0xE0, Unknown_E0h), - //new Tuple(0xF0, Unknown_F0h), - //new Tuple(0x100, Unknown_100h), - //new Tuple(0x128, Unknown_128h) + new Tuple(0x20, Unknown_20h), + new Tuple(0x30, Unknown_30h), + new Tuple(0x40, Unknown_40h), + new Tuple(0x60, Unknown_60h), + new Tuple(0x70, Unknown_70h), + new Tuple(0x80, Unknown_80h), + new Tuple(0xA0, Unknown_A0h), + new Tuple(0xB0, Unknown_B0h), + new Tuple(0xC0, Unknown_C0h), + new Tuple(0xE0, Unknown_E0h), + new Tuple(0xF0, Unknown_F0h), + new Tuple(0x100, Unknown_100h), + new Tuple(0x128, Unknown_128h) }; } } @@ -1092,36 +1049,16 @@ namespace CodeWalker.GameFiles public uint Unknown_44h { get; set; } // 0x00000000 public uint Unknown_48h { get; set; } // 0x00000000 public uint Unknown_4Ch { get; set; } // 0x00000000 - //public ResourceSimpleList64 Unknown_50h { get; set; } - //public ResourceSimpleList64 Unknown_60h { get; set; } - //public ResourceSimpleList64 Unknown_70h { get; set; } - //public ResourceSimpleList64 Unknown_80h { get; set; } - //public ResourceSimpleList64 Unknown_90h { get; set; } - //public ResourceSimpleList64 Unknown_A0h { get; set; } - //public ResourceSimpleList64 Unknown_B0h { get; set; } - //public ResourceSimpleList64 Unknown_C0h { get; set; } - //public ResourceSimpleList64 Unknown_D0h { get; set; } - //public ResourceSimpleList64 Unknown_E0h { get; set; } - public ResourceSimpleList64Ptr Unknown_50hPtr { get; set; } - public ResourceSimpleList64Ptr Unknown_60hPtr { get; set; } - public ResourceSimpleList64Ptr Unknown_70hPtr { get; set; } - public ResourceSimpleList64Ptr Unknown_80hPtr { get; set; } - public ResourceSimpleList64Ptr Unknown_90hPtr { get; set; } - public ResourceSimpleList64Ptr Unknown_A0hPtr { get; set; } - public ResourceSimpleList64Ptr Unknown_B0hPtr { get; set; } - public ResourceSimpleList64Ptr Unknown_C0hPtr { get; set; } - public ResourceSimpleList64Ptr Unknown_D0hPtr { get; set; } - public ResourceSimpleList64Ptr Unknown_E0hPtr { get; set; } - public Vector4[] Unknown_50h { get; set; } - public ushort[] Unknown_60h { get; set; } - public ushort[] Unknown_70h { get; set; } - public ushort[] Unknown_80h { get; set; } - public ushort[] Unknown_90h { get; set; } - public Vector4[] Unknown_A0h { get; set; } - public ushort[] Unknown_B0h { get; set; } - public ushort[] Unknown_C0h { get; set; } - public ushort[] Unknown_D0h { get; set; } - public ushort[] Unknown_E0h { get; set; } + public ResourceSimpleList64_s Unknown_50h { get; set; } + public ResourceSimpleList64_ushort Unknown_60h { get; set; } + public ResourceSimpleList64_ushort Unknown_70h { get; set; } + public ResourceSimpleList64_ushort Unknown_80h { get; set; } + public ResourceSimpleList64_ushort Unknown_90h { get; set; } + public ResourceSimpleList64_s Unknown_A0h { get; set; } + public ResourceSimpleList64_ushort Unknown_B0h { get; set; } + public ResourceSimpleList64_ushort Unknown_C0h { get; set; } + public ResourceSimpleList64_ushort Unknown_D0h { get; set; } + public ResourceSimpleList64_ushort Unknown_E0h { get; set; } public uint Unknown_F0h { get; set; } // 0x00000000 public uint Unknown_F4h { get; set; } // 0x00000000 public uint Unknown_F8h { get; set; } // 0x00000000 @@ -1146,12 +1083,8 @@ namespace CodeWalker.GameFiles public uint Unknown_144h { get; set; } // 0x00000000 public uint Unknown_148h { get; set; } // 0x00000000 public uint Unknown_14Ch { get; set; } // 0x00000000 - //public ResourceSimpleList64 Unknown_150h { get; set; } - //public ResourceSimpleList64 Unknown_160h { get; set; } - public ResourceSimpleList64Ptr Unknown_150hPtr { get; set; } - public ResourceSimpleList64Ptr Unknown_160hPtr { get; set; } - public ushort[] Unknown_150h { get; set; } - public ushort[] Unknown_160h { get; set; } + public ResourceSimpleList64_ushort Unknown_150h { get; set; } + public ResourceSimpleList64_ushort Unknown_160h { get; set; } public uint Unknown_170h { get; set; } // 0x00000000 public uint Unknown_174h { get; set; } // 0x00000000 public uint Unknown_178h { get; set; } // 0x00000000 @@ -1187,36 +1120,16 @@ namespace CodeWalker.GameFiles this.Unknown_44h = reader.ReadUInt32(); this.Unknown_48h = reader.ReadUInt32(); this.Unknown_4Ch = reader.ReadUInt32(); - //this.Unknown_50h = reader.ReadBlock>(); - //this.Unknown_60h = reader.ReadBlock>(); - //this.Unknown_70h = reader.ReadBlock>(); - //this.Unknown_80h = reader.ReadBlock>(); - //this.Unknown_90h = reader.ReadBlock>(); - //this.Unknown_A0h = reader.ReadBlock>(); - //this.Unknown_B0h = reader.ReadBlock>(); - //this.Unknown_C0h = reader.ReadBlock>(); - //this.Unknown_D0h = reader.ReadBlock>(); - //this.Unknown_E0h = reader.ReadBlock>(); - this.Unknown_50hPtr = reader.ReadStruct(); - this.Unknown_60hPtr = reader.ReadStruct(); - this.Unknown_70hPtr = reader.ReadStruct(); - this.Unknown_80hPtr = reader.ReadStruct(); - this.Unknown_90hPtr = reader.ReadStruct(); - this.Unknown_A0hPtr = reader.ReadStruct(); - this.Unknown_B0hPtr = reader.ReadStruct(); - this.Unknown_C0hPtr = reader.ReadStruct(); - this.Unknown_D0hPtr = reader.ReadStruct(); - this.Unknown_E0hPtr = reader.ReadStruct(); - this.Unknown_50h = reader.ReadStructsAt(Unknown_50hPtr.EntriesPointer, Unknown_50hPtr.EntriesCount); - this.Unknown_60h = reader.ReadUshortsAt(Unknown_60hPtr.EntriesPointer, Unknown_60hPtr.EntriesCount); - this.Unknown_70h = reader.ReadUshortsAt(Unknown_70hPtr.EntriesPointer, Unknown_70hPtr.EntriesCount); - this.Unknown_80h = reader.ReadUshortsAt(Unknown_80hPtr.EntriesPointer, Unknown_80hPtr.EntriesCount); - this.Unknown_90h = reader.ReadUshortsAt(Unknown_90hPtr.EntriesPointer, Unknown_90hPtr.EntriesCount); - this.Unknown_A0h = reader.ReadStructsAt(Unknown_A0hPtr.EntriesPointer, Unknown_A0hPtr.EntriesCount); - this.Unknown_B0h = reader.ReadUshortsAt(Unknown_B0hPtr.EntriesPointer, Unknown_B0hPtr.EntriesCount); - this.Unknown_C0h = reader.ReadUshortsAt(Unknown_C0hPtr.EntriesPointer, Unknown_C0hPtr.EntriesCount); - this.Unknown_D0h = reader.ReadUshortsAt(Unknown_D0hPtr.EntriesPointer, Unknown_D0hPtr.EntriesCount); - this.Unknown_E0h = reader.ReadUshortsAt(Unknown_E0hPtr.EntriesPointer, Unknown_E0hPtr.EntriesCount); + this.Unknown_50h = reader.ReadBlock>(); + this.Unknown_60h = reader.ReadBlock(); + this.Unknown_70h = reader.ReadBlock(); + this.Unknown_80h = reader.ReadBlock(); + this.Unknown_90h = reader.ReadBlock(); + this.Unknown_A0h = reader.ReadBlock>(); + this.Unknown_B0h = reader.ReadBlock(); + this.Unknown_C0h = reader.ReadBlock(); + this.Unknown_D0h = reader.ReadBlock(); + this.Unknown_E0h = reader.ReadBlock(); this.Unknown_F0h = reader.ReadUInt32(); this.Unknown_F4h = reader.ReadUInt32(); this.Unknown_F8h = reader.ReadUInt32(); @@ -1241,12 +1154,8 @@ namespace CodeWalker.GameFiles this.Unknown_144h = reader.ReadUInt32(); this.Unknown_148h = reader.ReadUInt32(); this.Unknown_14Ch = reader.ReadUInt32(); - //this.Unknown_150h = reader.ReadBlock>(); - //this.Unknown_160h = reader.ReadBlock>(); - this.Unknown_150hPtr = reader.ReadStruct(); - this.Unknown_160hPtr = reader.ReadStruct(); - this.Unknown_150h = reader.ReadUshortsAt(Unknown_150hPtr.EntriesPointer, Unknown_150hPtr.EntriesCount); - this.Unknown_160h = reader.ReadUshortsAt(Unknown_160hPtr.EntriesPointer, Unknown_160hPtr.EntriesCount); + this.Unknown_150h = reader.ReadBlock(); + this.Unknown_160h = reader.ReadBlock(); this.Unknown_170h = reader.ReadUInt32(); this.Unknown_174h = reader.ReadUInt32(); this.Unknown_178h = reader.ReadUInt32(); @@ -1283,16 +1192,16 @@ namespace CodeWalker.GameFiles writer.Write(this.Unknown_44h); writer.Write(this.Unknown_48h); writer.Write(this.Unknown_4Ch); - //writer.WriteBlock(this.Unknown_50h); //TODO: fix this! - //writer.WriteBlock(this.Unknown_60h); - //writer.WriteBlock(this.Unknown_70h); - //writer.WriteBlock(this.Unknown_80h); - //writer.WriteBlock(this.Unknown_90h); - //writer.WriteBlock(this.Unknown_A0h); - //writer.WriteBlock(this.Unknown_B0h); - //writer.WriteBlock(this.Unknown_C0h); - //writer.WriteBlock(this.Unknown_D0h); - //writer.WriteBlock(this.Unknown_E0h); + writer.WriteBlock(this.Unknown_50h); + writer.WriteBlock(this.Unknown_60h); + writer.WriteBlock(this.Unknown_70h); + writer.WriteBlock(this.Unknown_80h); + writer.WriteBlock(this.Unknown_90h); + writer.WriteBlock(this.Unknown_A0h); + writer.WriteBlock(this.Unknown_B0h); + writer.WriteBlock(this.Unknown_C0h); + writer.WriteBlock(this.Unknown_D0h); + writer.WriteBlock(this.Unknown_E0h); writer.Write(this.Unknown_F0h); writer.Write(this.Unknown_F4h); writer.Write(this.Unknown_F8h); @@ -1317,8 +1226,8 @@ namespace CodeWalker.GameFiles writer.Write(this.Unknown_144h); writer.Write(this.Unknown_148h); writer.Write(this.Unknown_14Ch); - //writer.WriteBlock(this.Unknown_150h); //TODO: fix - //writer.WriteBlock(this.Unknown_160h); + writer.WriteBlock(this.Unknown_150h); + writer.WriteBlock(this.Unknown_160h); writer.Write(this.Unknown_170h); writer.Write(this.Unknown_174h); writer.Write(this.Unknown_178h); @@ -1332,18 +1241,18 @@ namespace CodeWalker.GameFiles public override Tuple[] GetParts() { return new Tuple[] { - //new Tuple(0x50, Unknown_50h), //TODO: fix this - //new Tuple(0x60, Unknown_60h), - //new Tuple(0x70, Unknown_70h), - //new Tuple(0x80, Unknown_80h), - //new Tuple(0x90, Unknown_90h), - //new Tuple(0xA0, Unknown_A0h), - //new Tuple(0xB0, Unknown_B0h), - //new Tuple(0xC0, Unknown_C0h), - //new Tuple(0xD0, Unknown_D0h), - //new Tuple(0xE0, Unknown_E0h), - //new Tuple(0x150, Unknown_150h), - //new Tuple(0x160, Unknown_160h) + new Tuple(0x50, Unknown_50h), + new Tuple(0x60, Unknown_60h), + new Tuple(0x70, Unknown_70h), + new Tuple(0x80, Unknown_80h), + new Tuple(0x90, Unknown_90h), + new Tuple(0xA0, Unknown_A0h), + new Tuple(0xB0, Unknown_B0h), + new Tuple(0xC0, Unknown_C0h), + new Tuple(0xD0, Unknown_D0h), + new Tuple(0xE0, Unknown_E0h), + new Tuple(0x150, Unknown_150h), + new Tuple(0x160, Unknown_160h) }; } } @@ -1382,15 +1291,8 @@ namespace CodeWalker.GameFiles public uint Unknown_64h { get; set; } // 0x00000000 public uint Unknown_68h { get; set; } // 0x00000000 public uint Unknown_6Ch { get; set; } // 0x00000000 - public ResourceSimpleList64Ptr Unknown_70hPtr { get; set; } - public Vector4[] Unknown_70h { get; set; } - //public uint Unknown_70h { get; set; } // 0x00000000 - //public uint Unknown_74h { get; set; } // 0x00000000 - //public uint Unknown_78h { get; set; } // 0x00000000 - //public uint Unknown_7Ch { get; set; } // 0x00000000 - //public ResourceSimpleList64 Unknown_80h { get; set; } - public ResourceSimpleList64Ptr Unknown_80hPtr { get; set; } - public Vector4[] Unknown_80h { get; set; } + public ResourceSimpleList64_s Unknown_70h { get; set; } + public ResourceSimpleList64_s Unknown_80h { get; set; } public uint Unknown_90h { get; set; } // 0x00000000 public uint Unknown_94h { get; set; } // 0x00000000 public uint Unknown_98h { get; set; } // 0x00000000 @@ -1419,12 +1321,8 @@ namespace CodeWalker.GameFiles public uint Unknown_F4h { get; set; } // 0x00000000 public uint Unknown_F8h { get; set; } public uint Unknown_FCh { get; set; } // 0x00000000 - //public ResourceSimpleList64 Unknown_100h { get; set; } - //public ResourceSimpleList64 Unknown_110h { get; set; } - public ResourceSimpleList64Ptr Unknown_100hPtr { get; set; } - public ResourceSimpleList64Ptr Unknown_110hPtr { get; set; } - public Vector4[] Unknown_100h { get; set; } - public Vector4[] Unknown_110h { get; set; } + public ResourceSimpleList64_s Unknown_100h { get; set; } + public ResourceSimpleList64_s Unknown_110h { get; set; } public uint Unknown_120h { get; set; } // 0x00000000 public uint Unknown_124h { get; set; } // 0x00000000 public uint Unknown_128h { get; set; } // 0x00000000 @@ -1486,15 +1384,8 @@ namespace CodeWalker.GameFiles this.Unknown_64h = reader.ReadUInt32(); this.Unknown_68h = reader.ReadUInt32(); this.Unknown_6Ch = reader.ReadUInt32(); - this.Unknown_70hPtr = reader.ReadStruct(); - this.Unknown_70h = reader.ReadStructsAt(Unknown_70hPtr.EntriesPointer, Unknown_70hPtr.EntriesCount); - //this.Unknown_70h = reader.ReadUInt32(); - //this.Unknown_74h = reader.ReadUInt32(); - //this.Unknown_78h = reader.ReadUInt32(); - //this.Unknown_7Ch = reader.ReadUInt32(); - //this.Unknown_80h = reader.ReadBlock>(); - this.Unknown_80hPtr = reader.ReadStruct(); - this.Unknown_80h = reader.ReadStructsAt(Unknown_80hPtr.EntriesPointer, Unknown_80hPtr.EntriesCount); + this.Unknown_70h = reader.ReadBlock>(); + this.Unknown_80h = reader.ReadBlock>(); this.Unknown_90h = reader.ReadUInt32(); this.Unknown_94h = reader.ReadUInt32(); this.Unknown_98h = reader.ReadUInt32(); @@ -1523,12 +1414,8 @@ namespace CodeWalker.GameFiles this.Unknown_F4h = reader.ReadUInt32(); this.Unknown_F8h = reader.ReadUInt32(); this.Unknown_FCh = reader.ReadUInt32(); - //this.Unknown_100h = reader.ReadBlock>(); - //this.Unknown_110h = reader.ReadBlock>(); - this.Unknown_100hPtr = reader.ReadStruct(); - this.Unknown_110hPtr = reader.ReadStruct(); - this.Unknown_100h = reader.ReadStructsAt(Unknown_100hPtr.EntriesPointer, Unknown_100hPtr.EntriesCount); - this.Unknown_110h = reader.ReadStructsAt(Unknown_110hPtr.EntriesPointer, Unknown_110hPtr.EntriesCount); + this.Unknown_100h = reader.ReadBlock>(); + this.Unknown_110h = reader.ReadBlock>(); this.Unknown_120h = reader.ReadUInt32(); this.Unknown_124h = reader.ReadUInt32(); this.Unknown_128h = reader.ReadUInt32(); @@ -1602,11 +1489,8 @@ namespace CodeWalker.GameFiles writer.Write(this.Unknown_64h); writer.Write(this.Unknown_68h); writer.Write(this.Unknown_6Ch); - //writer.Write(this.Unknown_70h); - //writer.Write(this.Unknown_74h); - //writer.Write(this.Unknown_78h); - //writer.Write(this.Unknown_7Ch); - //writer.WriteBlock(this.Unknown_80h); //TODO: fix + writer.WriteBlock(this.Unknown_70h); + writer.WriteBlock(this.Unknown_80h); writer.Write(this.Unknown_90h); writer.Write(this.Unknown_94h); writer.Write(this.Unknown_98h); @@ -1635,8 +1519,8 @@ namespace CodeWalker.GameFiles writer.Write(this.Unknown_F4h); writer.Write(this.Unknown_F8h); writer.Write(this.Unknown_FCh); - //writer.WriteBlock(this.Unknown_100h); //TODO: fix - //writer.WriteBlock(this.Unknown_110h); + writer.WriteBlock(this.Unknown_100h); + writer.WriteBlock(this.Unknown_110h); writer.Write(this.Unknown_120h); writer.Write(this.Unknown_124h); writer.Write(this.Unknown_128h); @@ -1676,9 +1560,10 @@ namespace CodeWalker.GameFiles public override Tuple[] GetParts() { return new Tuple[] { - //new Tuple(0x80, Unknown_80h), //TODO: fix - //new Tuple(0x100, Unknown_100h), - //new Tuple(0x110, Unknown_110h) + new Tuple(0x70, Unknown_70h), + new Tuple(0x80, Unknown_80h), + new Tuple(0x100, Unknown_100h), + new Tuple(0x110, Unknown_110h) }; } } diff --git a/CodeWalker.Core/GameFiles/Resources/Particle.cs b/CodeWalker.Core/GameFiles/Resources/Particle.cs index 37a0bef..421ebe4 100644 --- a/CodeWalker.Core/GameFiles/Resources/Particle.cs +++ b/CodeWalker.Core/GameFiles/Resources/Particle.cs @@ -116,12 +116,12 @@ namespace CodeWalker.GameFiles base.Write(writer, parameters); // update structure data - //this.NamePointer = (ulong)(this.Name != null ? this.Name.Position : 0);//TODO: fix?! - //this.TextureDictionaryPointer = (ulong)(this.TextureDictionary != null ? this.TextureDictionary.Position : 0); - //this.DrawableDictionaryPointer = (ulong)(this.DrawableDictionary != null ? this.DrawableDictionary.Position : 0); - //this.ParticleRuleDictionaryPointer = (ulong)(this.ParticleRuleDictionary != null ? this.ParticleRuleDictionary.Position : 0); - //this.EmitterRuleDictionaryPointer = (ulong)(this.EffectRuleDictionary != null ? this.EffectRuleDictionary.Position : 0); - //this.EffectRuleDictionaryPointer = (ulong)(this.EmitterRuleDictionary != null ? this.EmitterRuleDictionary.Position : 0); + this.NamePointer = (ulong)(this.Name != null ? this.Name.FilePosition : 0); + this.TextureDictionaryPointer = (ulong)(this.TextureDictionary != null ? this.TextureDictionary.FilePosition : 0); + this.DrawableDictionaryPointer = (ulong)(this.DrawableDictionary != null ? this.DrawableDictionary.FilePosition : 0); + this.ParticleRuleDictionaryPointer = (ulong)(this.ParticleRuleDictionary != null ? this.ParticleRuleDictionary.FilePosition : 0); + this.EmitterRuleDictionaryPointer = (ulong)(this.EffectRuleDictionary != null ? this.EffectRuleDictionary.FilePosition : 0); + this.EffectRuleDictionaryPointer = (ulong)(this.EmitterRuleDictionary != null ? this.EmitterRuleDictionary.FilePosition : 0); // write structure data writer.Write(this.NamePointer); @@ -142,13 +142,13 @@ namespace CodeWalker.GameFiles public override IResourceBlock[] GetReferences() { - var list = new List(base.GetReferences()); //TODO: fix!! - //if (Name != null) list.Add(Name); - //if (TextureDictionary != null) list.Add(TextureDictionary); - //if (DrawableDictionary != null) list.Add(DrawableDictionary); - //if (ParticleRuleDictionary != null) list.Add(ParticleRuleDictionary); - //if (EffectRuleDictionary != null) list.Add(EffectRuleDictionary); - //if (EmitterRuleDictionary != null) list.Add(EmitterRuleDictionary); + var list = new List(base.GetReferences()); + if (Name != null) list.Add(Name); + if (TextureDictionary != null) list.Add(TextureDictionary); + if (DrawableDictionary != null) list.Add(DrawableDictionary); + if (ParticleRuleDictionary != null) list.Add(ParticleRuleDictionary); + if (EffectRuleDictionary != null) list.Add(EffectRuleDictionary); + if (EmitterRuleDictionary != null) list.Add(EmitterRuleDictionary); return list.ToArray(); } } @@ -350,10 +350,12 @@ namespace CodeWalker.GameFiles public override void Write(ResourceDataWriter writer, params object[] parameters) { // update structure data - //this.HashesPointer = (ulong)(this.Hashes != null ? this.Hashes.Position : 0); - ////this.HashesCount1 = (ushort)(this.Hashes != null ? this.Hashes.Count : 0); - //this.EffectRulesPointer = (ulong)(this.EmitterRules != null ? this.EmitterRules.Position : 0); - ////this.EffectRulesCount1 = (ushort)(this.EffectRules != null ? this.EffectRules.Count : 0); + this.HashesPointer = (ulong)(this.Hashes != null ? this.Hashes.FilePosition : 0); + this.HashesCount1 = (ushort)(this.Hashes != null ? this.Hashes.Count : 0); + this.HashesCount2 = this.HashesCount1; + this.EffectRulesPointer = (ulong)(this.EmitterRules != null ? this.EmitterRules.FilePosition : 0); + this.EffectRulesCount1 = (ushort)(this.EmitterRules != null ? this.EmitterRules.Count : 0); + this.EffectRulesCount2 = this.EffectRulesCount1; // write structure data writer.Write(this.VFT); @@ -548,10 +550,10 @@ namespace CodeWalker.GameFiles public override void Write(ResourceDataWriter writer, params object[] parameters) { - //// update structure data //TODO: fix! - //this.NamePointer = (ulong)(this.Name != null ? this.Name.Position : 0); - //this.p9 = (ulong)(this.p9data != null ? this.p9data.Position : 0); - //this.p10 = (ulong)(this.p10data != null ? this.p10data.Position : 0); + // update structure data + this.NamePointer = (ulong)(this.Name != null ? this.Name.FilePosition : 0); + this.p9 = (ulong)(this.p9data != null ? this.p9data.FilePosition : 0); + this.p10 = (ulong)(this.p10data != null ? this.p10data.FilePosition : 0); // write structure data writer.Write(this.VFT); @@ -622,9 +624,9 @@ namespace CodeWalker.GameFiles public override IResourceBlock[] GetReferences() { var list = new List(); - //if (Name != null) list.Add(Name); - //if (p9data != null) list.Add(p9data); - //if (p10data != null) list.Add(p10data); + if (Name != null) list.Add(Name); + if (p9data != null) list.Add(p9data); + if (p10data != null) list.Add(p10data); return list.ToArray(); } @@ -732,9 +734,9 @@ namespace CodeWalker.GameFiles /// public override void Write(ResourceDataWriter writer, params object[] parameters) { - // update structure data //TODO: fix!! - //this.EmitterRulePointer = (ulong)(this.EmitterRule != null ? this.EmitterRule.Position : 0); - //this.p1 = (ulong)(this.p1data != null ? this.p1data.Position : 0); + // update structure data + this.EmitterRulePointer = (ulong)(this.EmitterRule != null ? this.EmitterRule.FilePosition : 0); + this.p1 = (ulong)(this.p1data != null ? this.p1data.FilePosition : 0); // write structure data writer.Write(this.VFT); @@ -943,13 +945,13 @@ namespace CodeWalker.GameFiles public override void Write(ResourceDataWriter writer, params object[] parameters) { - //// update structure data - //this.NamePointer = (ulong)(this.Name != null ? this.Name.Position : 0); - //this.EventEmittersPointer = (ulong)(this.EventEmitters != null ? this.EventEmitters.Position : 0); - ////this.c3b = (ushort)(this.p3data != null ? this.p3data.Count : 0); - //this.p4 = (ulong)(this.p4data != null ? this.p4data.Position : 0); - //this.KeyframePropsPointer = (ulong)(this.KeyframeProps != null ? this.KeyframeProps.Position : 0); - ////this.refcnt2 = (ushort)(this.refs != null ? this.refs.Count : 0); + // update structure data + this.NamePointer = (ulong)(this.Name != null ? this.Name.FilePosition : 0); + this.EventEmittersPointer = (ulong)(this.EventEmitters != null ? this.EventEmitters.FilePosition : 0); + //this.c3b = (ushort)(this.p3data != null ? this.p3data.Count : 0); + this.p4 = (ulong)(this.p4data != null ? this.p4data.FilePosition : 0); + this.KeyframePropsPointer = (ulong)(this.KeyframeProps != null ? this.KeyframeProps.FilePosition : 0); + //this.refcnt2 = (ushort)(this.refs != null ? this.refs.Count : 0); // write structure data writer.Write(this.VFT); @@ -1020,10 +1022,10 @@ namespace CodeWalker.GameFiles public override IResourceBlock[] GetReferences() { var list = new List(); - //if (Name != null) list.Add(Name); - //if (EventEmitters != null) list.Add(EventEmitters); - //if (p4data != null) list.Add(p4data); - //if (KeyframeProps != null) list.Add(KeyframeProps); + if (Name != null) list.Add(Name); + if (EventEmitters != null) list.Add(EventEmitters); + if (p4data != null) list.Add(p4data); + if (KeyframeProps != null) list.Add(KeyframeProps); return list.ToArray(); } @@ -1302,11 +1304,11 @@ namespace CodeWalker.GameFiles public override void Write(ResourceDataWriter writer, params object[] parameters) { // update structure data - //this.p1 = (ulong)(this.p1data != null ? this.p1data.Position : 0); - //this.p2 = (ulong)(this.p2data != null ? this.p2data.Position : 0); - //this.p3 = (ulong)(this.p3data != null ? this.p3data.Position : 0); - //this.p4 = (ulong)(this.EmitterRule != null ? this.EmitterRule.Position : 0); - //this.p5 = (ulong)(this.ParticleRule != null ? this.ParticleRule.Position : 0); + this.p1 = (ulong)(this.p1data != null ? this.p1data.FilePosition : 0); + this.p2 = (ulong)(this.p2data != null ? this.p2data.FilePosition : 0); + this.p3 = (ulong)(this.p3data != null ? this.p3data.FilePosition : 0); + this.p4 = (ulong)(this.EmitterRule != null ? this.EmitterRule.FilePosition : 0); + this.p5 = (ulong)(this.ParticleRule != null ? this.ParticleRule.FilePosition : 0); // write structure data writer.Write(this.VFT); @@ -1337,11 +1339,11 @@ namespace CodeWalker.GameFiles public override IResourceBlock[] GetReferences() { var list = new List(); - //if (p1data != null) list.Add(p1data); - //if (p2data != null) list.Add(p2data); - //if (p3data != null) list.Add(p3data); - //if (EmitterRule != null) list.Add(EmitterRule); - //if (ParticleRule != null) list.Add(ParticleRule); + if (p1data != null) list.Add(p1data); + if (p2data != null) list.Add(p2data); + if (p3data != null) list.Add(p3data); + if (EmitterRule != null) list.Add(EmitterRule); + if (ParticleRule != null) list.Add(ParticleRule); return list.ToArray(); } } @@ -1426,7 +1428,7 @@ namespace CodeWalker.GameFiles public override void Write(ResourceDataWriter writer, params object[] parameters) { // update structure data - //this.p1 = (ulong)(this.p1data != null ? this.p1data.Position : 0); + this.p1 = (ulong)(this.p1data != null ? this.p1data.FilePosition : 0); // write structure data writer.Write(this.p1); @@ -1597,7 +1599,7 @@ namespace CodeWalker.GameFiles public override void Write(ResourceDataWriter writer, params object[] parameters) { // update structure data - //this.Unknown_8h_Pointer = (ulong)(this.Unknown_8h_Data != null ? this.Unknown_8h_Data.Position : 0); + this.Unknown_8h_Pointer = (ulong)(this.Unknown_8h_Data != null ? this.Unknown_8h_Data.FilePosition : 0); // write structure data writer.Write(this.Unknown_0h); @@ -1741,12 +1743,12 @@ namespace CodeWalker.GameFiles public override void Write(ResourceDataWriter writer, params object[] parameters) { // update structure data - //this.NamePointer = (ulong)(this.Name != null ? this.Name.Position : 0); - //this.p2 = (ulong)(this.p2data != null ? this.p2data.Position : 0); - //this.p3 = (ulong)(this.p3data != null ? this.p3data.Position : 0); - //this.p4 = (ulong)(this.p4data != null ? this.p4data.Position : 0); - //this.KeyframePropsPointer = (ulong)(this.KeyframeProps != null ? this.KeyframeProps.Position : 0); - ////this.refcnt2 = (ushort)(this.refs != null ? this.refs.Count : 0); + this.NamePointer = (ulong)(this.Name != null ? this.Name.FilePosition : 0); + this.p2 = (ulong)(this.p2data != null ? this.p2data.FilePosition : 0); + this.p3 = (ulong)(this.p3data != null ? this.p3data.FilePosition : 0); + this.p4 = (ulong)(this.p4data != null ? this.p4data.FilePosition : 0); + this.KeyframePropsPointer = (ulong)(this.KeyframeProps != null ? this.KeyframeProps.FilePosition : 0); + //this.refcnt2 = (ushort)(this.refs != null ? this.refs.Count : 0); // write structure data writer.Write(this.VFT); @@ -1796,11 +1798,11 @@ namespace CodeWalker.GameFiles public override IResourceBlock[] GetReferences() { var list = new List(); - //if (Name != null) list.Add(Name); - //if (p2data != null) list.Add(p2data); - //if (p3data != null) list.Add(p3data); - //if (p4data != null) list.Add(p4data); - //if (KeyframeProps != null) list.Add(KeyframeProps); + if (Name != null) list.Add(Name); + if (p2data != null) list.Add(p2data); + if (p3data != null) list.Add(p3data); + if (p4data != null) list.Add(p4data); + if (KeyframeProps != null) list.Add(KeyframeProps); return list.ToArray(); } @@ -2027,7 +2029,7 @@ namespace CodeWalker.GameFiles public override void Write(ResourceDataWriter writer, params object[] parameters) { // update structure data - ////this.p1 = (ulong)(this.p1data != null ? this.p1data.Position : 0); + this.p1 = (ulong)(this.p1data != null ? this.p1data.FilePosition : 0); // write structure data writer.Write(this.p1); @@ -2073,7 +2075,7 @@ namespace CodeWalker.GameFiles public override void Write(ResourceDataWriter writer, params object[] parameters) { // update structure data - ////this.p1 = (ulong)(this.p1data != null ? this.p1data.Position : 0); + this.p1 = (ulong)(this.p1data != null ? this.p1data.FilePosition : 0); // write structure data writer.Write(this.Unknown_0h); @@ -4074,8 +4076,8 @@ namespace CodeWalker.GameFiles base.Write(writer, parameters); // update structure data - //this.TexturePointer = (ulong)(this.Texture != null ? this.Texture.Position : 0); - //this.NamePointer = (ulong)(this.Name != null ? this.Name.Position : 0); + this.TexturePointer = (ulong)(this.Texture != null ? this.Texture.FilePosition : 0); + this.NamePointer = (ulong)(this.Name != null ? this.Name.FilePosition : 0); // write structure data writer.Write(this.Unknown_18h); @@ -4091,8 +4093,8 @@ namespace CodeWalker.GameFiles public override IResourceBlock[] GetReferences() { var list = new List(base.GetReferences()); - //if (Texture != null) list.Add(Texture); - //if (Name != null) list.Add(Name); + if (Texture != null) list.Add(Texture); + if (Name != null) list.Add(Name); return list.ToArray(); } } @@ -4248,9 +4250,9 @@ namespace CodeWalker.GameFiles public override void Write(ResourceDataWriter writer, params object[] parameters) { - //// update structure data - //this.Unknown_10h_Pointer = (ulong)(this.Unknown_10h_Data != null ? this.Unknown_10h_Data.Position : 0); - //this.DrawablePointer = (ulong)(this.Drawable != null ? this.Drawable.Position : 0); + // update structure data + this.Unknown_10h_Pointer = (ulong)(this.Unknown_10h_Data != null ? this.Unknown_10h_Data.FilePosition : 0); + this.DrawablePointer = (ulong)(this.Drawable != null ? this.Drawable.FilePosition : 0); // write structure data writer.Write(this.Unknown_0h); diff --git a/CodeWalker.Core/GameFiles/Resources/ResourceBaseTypes.cs b/CodeWalker.Core/GameFiles/Resources/ResourceBaseTypes.cs index dabe245..8712c4a 100644 --- a/CodeWalker.Core/GameFiles/Resources/ResourceBaseTypes.cs +++ b/CodeWalker.Core/GameFiles/Resources/ResourceBaseTypes.cs @@ -658,6 +658,9 @@ namespace CodeWalker.GameFiles //public ResourceSimpleArray Entries; public T[] data_items { get; private set; } + private ResourceSimpleArray data_block;//used for saving. + + /// /// Reads the data-block from a stream. /// @@ -693,9 +696,9 @@ namespace CodeWalker.GameFiles public override void Write(ResourceDataWriter writer, params object[] parameters) { // update structure data //TODO: fix - //this.EntriesPointer = (ulong)(this.Entries != null ? this.Entries.Position : 0); - //this.EntriesCount = (ushort)(this.Entries != null ? this.Entries.Count : 0); - //this.EntriesCapacity = (ushort)(this.Entries != null ? this.Entries.Count : 0); + this.EntriesPointer = (ulong)(this.data_block != null ? this.data_block.FilePosition : 0); + this.EntriesCount = (ushort)(this.data_block != null ? this.data_block.Count : 0); + this.EntriesCapacity = (ushort)(this.data_block != null ? this.data_block.Count : 0); // write structure data writer.Write(this.EntriesPointer); @@ -711,6 +714,518 @@ namespace CodeWalker.GameFiles { var list = new List(); //if (Entries != null) list.Add(Entries); + + data_block = new ResourceSimpleArray(); + data_block.Data = new List(); + data_block.Data.AddRange(data_items); + list.Add(data_block); + + return list.ToArray(); + } + + public override string ToString() + { + return "(Count: " + EntriesCount.ToString() + ")"; + } + } + [TypeConverter(typeof(ExpandableObjectConverter))] public class ResourceSimpleList64_s : ResourceSystemBlock where T : struct + { + public override long BlockLength + { + get { return 16; } + } + + // structure data + public ulong EntriesPointer { get; private set; } + public ushort EntriesCount { get; private set; } + public ushort EntriesCapacity { get; private set; } + + // reference data + public T[] data_items { get; private set; } + + private ResourceSystemStructBlock data_block;//used for saving. + + + /// + /// Reads the data-block from a stream. + /// + public override void Read(ResourceDataReader reader, params object[] parameters) + { + // read structure data + this.EntriesPointer = reader.ReadUInt64(); + this.EntriesCount = reader.ReadUInt16(); + this.EntriesCapacity = reader.ReadUInt16(); + reader.Position += 4; + + // read reference data + + //TODO: NEEDS TO BE TESTED!!! + data_items = reader.ReadStructsAt(EntriesPointer, EntriesCount); + } + + /// + /// Writes the data-block to a stream. + /// + public override void Write(ResourceDataWriter writer, params object[] parameters) + { + // update structure data //TODO: fix + this.EntriesPointer = (ulong)(this.data_block != null ? this.data_block.FilePosition : 0); + this.EntriesCount = (ushort)(this.data_block != null ? this.data_block.ItemCount : 0); + this.EntriesCapacity = (ushort)(this.data_block != null ? this.data_block.ItemCount : 0); + + // write structure data + writer.Write(this.EntriesPointer); + writer.Write(this.EntriesCount); + writer.Write(this.EntriesCapacity); + writer.Write((uint)0x00000000); + } + + /// + /// Returns a list of data blocks which are referenced by this block. + /// + public override IResourceBlock[] GetReferences() + { + var list = new List(); + //if (Entries != null) list.Add(Entries); + + data_block = new ResourceSystemStructBlock(data_items); + + list.Add(data_block); + + return list.ToArray(); + } + + public override string ToString() + { + return "(Count: " + EntriesCount.ToString() + ")"; + } + } + [TypeConverter(typeof(ExpandableObjectConverter))] public class ResourceSimpleList64b_s : ResourceSystemBlock where T : struct + { + //this version uses uints for the count/cap! + + public override long BlockLength + { + get { return 16; } + } + + // structure data + public ulong EntriesPointer { get; private set; } + public uint EntriesCount { get; private set; } + public uint EntriesCapacity { get; private set; } + + // reference data + public T[] data_items { get; private set; } + + private ResourceSystemStructBlock data_block;//used for saving. + + + /// + /// Reads the data-block from a stream. + /// + public override void Read(ResourceDataReader reader, params object[] parameters) + { + // read structure data + this.EntriesPointer = reader.ReadUInt64(); + this.EntriesCount = reader.ReadUInt32(); + this.EntriesCapacity = reader.ReadUInt32(); + //reader.Position += 4; + + // read reference data + + //TODO: NEEDS TO BE TESTED!!! + data_items = reader.ReadStructsAt(EntriesPointer, EntriesCount); + } + + /// + /// Writes the data-block to a stream. + /// + public override void Write(ResourceDataWriter writer, params object[] parameters) + { + // update structure data //TODO: fix + this.EntriesPointer = (ulong)(this.data_block != null ? this.data_block.FilePosition : 0); + this.EntriesCount = (ushort)(this.data_block != null ? this.data_block.ItemCount : 0); + this.EntriesCapacity = (ushort)(this.data_block != null ? this.data_block.ItemCount : 0); + + // write structure data + writer.Write(this.EntriesPointer); + writer.Write(this.EntriesCount); + writer.Write(this.EntriesCapacity); + //writer.Write((uint)0x00000000); + } + + /// + /// Returns a list of data blocks which are referenced by this block. + /// + public override IResourceBlock[] GetReferences() + { + var list = new List(); + //if (Entries != null) list.Add(Entries); + + data_block = new ResourceSystemStructBlock(data_items); + + list.Add(data_block); + + return list.ToArray(); + } + + public override string ToString() + { + return "(Count: " + EntriesCount.ToString() + ")"; + } + } + [TypeConverter(typeof(ExpandableObjectConverter))] public class ResourceSimpleList64_byte : ResourceSystemBlock + { + public override long BlockLength + { + get { return 16; } + } + + // structure data + public ulong EntriesPointer { get; private set; } + public ushort EntriesCount { get; private set; } + public ushort EntriesCapacity { get; private set; } + + // reference data + public byte[] data_items { get; private set; } + + private ResourceSystemStructBlock data_block;//used for saving. + + + /// + /// Reads the data-block from a stream. + /// + public override void Read(ResourceDataReader reader, params object[] parameters) + { + // read structure data + this.EntriesPointer = reader.ReadUInt64(); + this.EntriesCount = reader.ReadUInt16(); + this.EntriesCapacity = reader.ReadUInt16(); + reader.Position += 4; + + // read reference data + + //TODO: NEEDS TO BE TESTED!!! + data_items = reader.ReadBytesAt(EntriesPointer, EntriesCount); + } + + /// + /// Writes the data-block to a stream. + /// + public override void Write(ResourceDataWriter writer, params object[] parameters) + { + // update structure data //TODO: fix + this.EntriesPointer = (ulong)(this.data_block != null ? this.data_block.FilePosition : 0); + this.EntriesCount = (ushort)(this.data_block != null ? this.data_block.ItemCount : 0); + this.EntriesCapacity = (ushort)(this.data_block != null ? this.data_block.ItemCount : 0); + + // write structure data + writer.Write(this.EntriesPointer); + writer.Write(this.EntriesCount); + writer.Write(this.EntriesCapacity); + writer.Write((uint)0x00000000); + } + + /// + /// Returns a list of data blocks which are referenced by this block. + /// + public override IResourceBlock[] GetReferences() + { + var list = new List(); + //if (Entries != null) list.Add(Entries); + + data_block = new ResourceSystemStructBlock(data_items); + + list.Add(data_block); + + return list.ToArray(); + } + + public override string ToString() + { + return "(Count: " + EntriesCount.ToString() + ")"; + } + } + [TypeConverter(typeof(ExpandableObjectConverter))] public class ResourceSimpleList64_ushort : ResourceSystemBlock + { + public override long BlockLength + { + get { return 16; } + } + + // structure data + public ulong EntriesPointer { get; private set; } + public ushort EntriesCount { get; private set; } + public ushort EntriesCapacity { get; private set; } + + // reference data + public ushort[] data_items { get; private set; } + + private ResourceSystemStructBlock data_block;//used for saving. + + + /// + /// Reads the data-block from a stream. + /// + public override void Read(ResourceDataReader reader, params object[] parameters) + { + // read structure data + this.EntriesPointer = reader.ReadUInt64(); + this.EntriesCount = reader.ReadUInt16(); + this.EntriesCapacity = reader.ReadUInt16(); + reader.Position += 4; + + // read reference data + + //TODO: NEEDS TO BE TESTED!!! + data_items = reader.ReadUshortsAt(EntriesPointer, EntriesCount); + } + + /// + /// Writes the data-block to a stream. + /// + public override void Write(ResourceDataWriter writer, params object[] parameters) + { + // update structure data //TODO: fix + this.EntriesPointer = (ulong)(this.data_block != null ? this.data_block.FilePosition : 0); + this.EntriesCount = (ushort)(this.data_block != null ? this.data_block.ItemCount : 0); + this.EntriesCapacity = (ushort)(this.data_block != null ? this.data_block.ItemCount : 0); + + // write structure data + writer.Write(this.EntriesPointer); + writer.Write(this.EntriesCount); + writer.Write(this.EntriesCapacity); + writer.Write((uint)0x00000000); + } + + /// + /// Returns a list of data blocks which are referenced by this block. + /// + public override IResourceBlock[] GetReferences() + { + var list = new List(); + //if (Entries != null) list.Add(Entries); + + data_block = new ResourceSystemStructBlock(data_items); + + list.Add(data_block); + + return list.ToArray(); + } + + public override string ToString() + { + return "(Count: " + EntriesCount.ToString() + ")"; + } + } + [TypeConverter(typeof(ExpandableObjectConverter))] public class ResourceSimpleList64_uint : ResourceSystemBlock + { + public override long BlockLength + { + get { return 16; } + } + + // structure data + public ulong EntriesPointer { get; private set; } + public ushort EntriesCount { get; private set; } + public ushort EntriesCapacity { get; private set; } + + // reference data + public uint[] data_items { get; private set; } + + private ResourceSystemStructBlock data_block;//used for saving. + + + /// + /// Reads the data-block from a stream. + /// + public override void Read(ResourceDataReader reader, params object[] parameters) + { + // read structure data + this.EntriesPointer = reader.ReadUInt64(); + this.EntriesCount = reader.ReadUInt16(); + this.EntriesCapacity = reader.ReadUInt16(); + reader.Position += 4; + + // read reference data + + //TODO: NEEDS TO BE TESTED!!! + data_items = reader.ReadUintsAt(EntriesPointer, EntriesCount); + } + + /// + /// Writes the data-block to a stream. + /// + public override void Write(ResourceDataWriter writer, params object[] parameters) + { + // update structure data //TODO: fix + this.EntriesPointer = (ulong)(this.data_block != null ? this.data_block.FilePosition : 0); + this.EntriesCount = (ushort)(this.data_block != null ? this.data_block.ItemCount : 0); + this.EntriesCapacity = (ushort)(this.data_block != null ? this.data_block.ItemCount : 0); + + // write structure data + writer.Write(this.EntriesPointer); + writer.Write(this.EntriesCount); + writer.Write(this.EntriesCapacity); + writer.Write((uint)0x00000000); + } + + /// + /// Returns a list of data blocks which are referenced by this block. + /// + public override IResourceBlock[] GetReferences() + { + var list = new List(); + //if (Entries != null) list.Add(Entries); + + data_block = new ResourceSystemStructBlock(data_items); + + list.Add(data_block); + + return list.ToArray(); + } + + public override string ToString() + { + return "(Count: " + EntriesCount.ToString() + ")"; + } + } + [TypeConverter(typeof(ExpandableObjectConverter))] public class ResourceSimpleList64_ulong : ResourceSystemBlock + { + public override long BlockLength + { + get { return 16; } + } + + // structure data + public ulong EntriesPointer { get; private set; } + public ushort EntriesCount { get; private set; } + public ushort EntriesCapacity { get; private set; } + + // reference data + public ulong[] data_items { get; private set; } + + private ResourceSystemStructBlock data_block;//used for saving. + + + /// + /// Reads the data-block from a stream. + /// + public override void Read(ResourceDataReader reader, params object[] parameters) + { + // read structure data + this.EntriesPointer = reader.ReadUInt64(); + this.EntriesCount = reader.ReadUInt16(); + this.EntriesCapacity = reader.ReadUInt16(); + reader.Position += 4; + + // read reference data + + //TODO: NEEDS TO BE TESTED!!! + data_items = reader.ReadUlongsAt(EntriesPointer, EntriesCount); + } + + /// + /// Writes the data-block to a stream. + /// + public override void Write(ResourceDataWriter writer, params object[] parameters) + { + // update structure data //TODO: fix + this.EntriesPointer = (ulong)(this.data_block != null ? this.data_block.FilePosition : 0); + this.EntriesCount = (ushort)(this.data_block != null ? this.data_block.ItemCount : 0); + this.EntriesCapacity = (ushort)(this.data_block != null ? this.data_block.ItemCount : 0); + + // write structure data + writer.Write(this.EntriesPointer); + writer.Write(this.EntriesCount); + writer.Write(this.EntriesCapacity); + writer.Write((uint)0x00000000); + } + + /// + /// Returns a list of data blocks which are referenced by this block. + /// + public override IResourceBlock[] GetReferences() + { + var list = new List(); + //if (Entries != null) list.Add(Entries); + + data_block = new ResourceSystemStructBlock(data_items); + + list.Add(data_block); + + return list.ToArray(); + } + + public override string ToString() + { + return "(Count: " + EntriesCount.ToString() + ")"; + } + } + [TypeConverter(typeof(ExpandableObjectConverter))] public class ResourceSimpleList64_float : ResourceSystemBlock + { + public override long BlockLength + { + get { return 16; } + } + + // structure data + public ulong EntriesPointer { get; private set; } + public ushort EntriesCount { get; private set; } + public ushort EntriesCapacity { get; private set; } + + // reference data + public float[] data_items { get; private set; } + + private ResourceSystemStructBlock data_block;//used for saving. + + + /// + /// Reads the data-block from a stream. + /// + public override void Read(ResourceDataReader reader, params object[] parameters) + { + // read structure data + this.EntriesPointer = reader.ReadUInt64(); + this.EntriesCount = reader.ReadUInt16(); + this.EntriesCapacity = reader.ReadUInt16(); + reader.Position += 4; + + // read reference data + + //TODO: NEEDS TO BE TESTED!!! + data_items = reader.ReadFloatsAt(EntriesPointer, EntriesCount); + } + + /// + /// Writes the data-block to a stream. + /// + public override void Write(ResourceDataWriter writer, params object[] parameters) + { + // update structure data //TODO: fix + this.EntriesPointer = (ulong)(this.data_block != null ? this.data_block.FilePosition : 0); + this.EntriesCount = (ushort)(this.data_block != null ? this.data_block.ItemCount : 0); + this.EntriesCapacity = (ushort)(this.data_block != null ? this.data_block.ItemCount : 0); + + // write structure data + writer.Write(this.EntriesPointer); + writer.Write(this.EntriesCount); + writer.Write(this.EntriesCapacity); + writer.Write((uint)0x00000000); + } + + /// + /// Returns a list of data blocks which are referenced by this block. + /// + public override IResourceBlock[] GetReferences() + { + var list = new List(); + //if (Entries != null) list.Add(Entries); + + data_block = new ResourceSystemStructBlock(data_items); + + list.Add(data_block); + return list.ToArray(); } @@ -752,53 +1267,23 @@ namespace CodeWalker.GameFiles } - //// structure data - //public List data_pointers; - - //// reference data - //public List data_items; - public ulong[] data_pointers { get; private set; } - public T[] data_items { get; private set; } + public T[] data_items { get; set; } public ResourcePointerArray64() { - //data_items = new List(); } public override void Read(ResourceDataReader reader, params object[] parameters) { int numElements = Convert.ToInt32(parameters[0]); - // read structure data - //data_pointers = new List(); - //for (int i = 0; i < numElements; i++) - //{ - // data_pointers.Add(reader.ReadUInt64()); - //} data_pointers = reader.ReadUlongsAt((ulong)reader.Position, (uint)numElements); - //foreach (var dp in data_pointers) - //{ - // if (dp == 0) - // { - - // } - //} - - // read reference data - //data_items = new List(); - //for (int i = 0; i < numElements; i++) - //{ - // data_items.Add( - // reader.ReadBlockAt(data_pointers[i]) - // ); - //} - data_items = new T[numElements]; for (int i = 0; i < numElements; i++) { @@ -811,13 +1296,13 @@ namespace CodeWalker.GameFiles public override void Write(ResourceDataWriter writer, params object[] parameters) { // update... - //data_pointers = new List(); - //foreach (var x in data_items) - // if (x != null) - // data_pointers.Add((uint)x.Position); - // else - // data_pointers.Add((uint)0); - //TODO: fix! + var list = new List(); + foreach (var x in data_items) + if (x != null) + list.Add((uint)x.FilePosition); + else + list.Add((uint)0); + data_pointers = list.ToArray(); // write... foreach (var x in data_pointers) @@ -928,68 +1413,29 @@ namespace CodeWalker.GameFiles [TypeConverter(typeof(ExpandableObjectConverter))] public class ResourcePointerArray64_s : ResourceSystemBlock, IList where T : struct { - //public int GetNonEmptyNumber() - //{ - // int i = 0; - // foreach (var q in data_items) - // if (q != null) - // i++; - // return i; - //} - public override long BlockLength { get { return (data_items != null) ? 8 * data_items.Length : 0; } } - //// structure data - //public List data_pointers; - - //// reference data - //public List data_items; - public ulong[] data_pointers { get; private set; } public T[] data_items { get; private set; } + private ResourceSystemStructBlock[] data_blocks = null; + public ResourcePointerArray64_s() { - //data_items = new List(); } public override void Read(ResourceDataReader reader, params object[] parameters) { int numElements = Convert.ToInt32(parameters[0]); - // read structure data - //data_pointers = new List(); - //for (int i = 0; i < numElements; i++) - //{ - // data_pointers.Add(reader.ReadUInt64()); - //} - data_pointers = reader.ReadUlongsAt((ulong)reader.Position, (uint)numElements); - - //foreach (var dp in data_pointers) - //{ - // if (dp == 0) - // { - - // } - //} - - // read reference data - //data_items = new List(); - //for (int i = 0; i < numElements; i++) - //{ - // data_items.Add( - // reader.ReadBlockAt(data_pointers[i]) - // ); - //} - data_items = new T[numElements]; for (int i = 0; i < numElements; i++) { @@ -1001,13 +1447,20 @@ namespace CodeWalker.GameFiles public override void Write(ResourceDataWriter writer, params object[] parameters) { // update... - //data_pointers = new List(); + var list = new List(); + if (data_blocks != null) + { + foreach (var x in data_blocks) + { + list.Add((ulong)x.FilePosition); + } + } //foreach (var x in data_items) // if (x != null) // data_pointers.Add((uint)x.Position); // else // data_pointers.Add((uint)0); - //TODO: fix! + data_pointers = list.ToArray(); // write... foreach (var x in data_pointers) @@ -1019,7 +1472,18 @@ namespace CodeWalker.GameFiles { var list = new List(); - //foreach (var x in data_items) //TODO: fix + var blocks = new List>(); + if (data_items != null) + { + foreach (var x in data_items) + { + var block = new ResourceSystemStructBlock(new[] { x }); + blocks.Add(block); + list.Add(block); + } + } + data_blocks = blocks.ToArray(); + //foreach (var x in data_items) // list.Add(x); return list.ToArray(); @@ -1133,6 +1597,7 @@ namespace CodeWalker.GameFiles public ulong[] data_pointers { get; private set; } public T[] data_items { get; private set; } + private ResourcePointerArray64 data_block;//used for saving. public override void Read(ResourceDataReader reader, params object[] parameters) @@ -1159,10 +1624,11 @@ namespace CodeWalker.GameFiles public override void Write(ResourceDataWriter writer, params object[] parameters) { - // update... //TODO: fix... - //this.EntriesPointer = (ulong)(this.Entries != null ? this.Entries.Position : 0); - //this.EntriesCount = (ushort)(this.Entries != null ? this.Entries.Count : 0); - //this.EntriesCapacity = (ushort)(this.Entries != null ? this.Entries.Count : 0); + // update... + this.EntriesPointer = (ulong)(this.data_block != null ? this.data_block.FilePosition : 0); + this.EntriesCount = (ushort)(this.data_block != null ? this.data_block.Count : 0); + this.EntriesCapacity = (ushort)(this.data_block != null ? this.data_block.Count : 0); + // write... writer.Write(EntriesPointer); @@ -1174,7 +1640,12 @@ namespace CodeWalker.GameFiles public override IResourceBlock[] GetReferences() { var list = new List(); - //if (Entries != null) list.Add(Entries); //TODO: fix.. + + //if (Entries != null) list.Add(Entries); + data_block = new ResourcePointerArray64(); + data_block.data_items = data_items; + list.Add(data_block); + return list.ToArray(); } @@ -1358,8 +1829,8 @@ namespace CodeWalker.GameFiles foreach (var x in ptr_list) writer.Write(x); - foreach (var x in Data) - x.Write(writer); + //foreach (var x in Data) + // x.Write(writer); } @@ -1369,7 +1840,7 @@ namespace CodeWalker.GameFiles { var children = new List(); - //if (Data != null) children.AddRange(Data); + if (Data != null) children.AddRange(Data); return children.ToArray(); } @@ -1378,15 +1849,15 @@ namespace CodeWalker.GameFiles { var children = new List>(); - if (Data != null) - { - long len = 8 * Data.Count; - foreach (var f in Data) - { - children.Add(new Tuple(len, f)); - len += f.BlockLength; - } - } + //if (Data != null) + //{ + // long len = 8 * Data.Count; + // foreach (var f in Data) + // { + // children.Add(new Tuple(len, f)); + // len += f.BlockLength; + // } + //} return children.ToArray(); } diff --git a/CodeWalker.Core/GameFiles/Resources/ResourceData.cs b/CodeWalker.Core/GameFiles/Resources/ResourceData.cs index f9ee6ae..53e2b20 100644 --- a/CodeWalker.Core/GameFiles/Resources/ResourceData.cs +++ b/CodeWalker.Core/GameFiles/Resources/ResourceData.cs @@ -87,6 +87,19 @@ namespace CodeWalker.GameFiles var systemSize = resentry.SystemSize; var graphicsSize = resentry.GraphicsSize; + //if (data != null) + //{ + // if (systemSize > data.Length) + // { + // systemSize = data.Length; + // graphicsSize = 0; + // } + // else if ((systemSize + graphicsSize) > data.Length) + // { + // graphicsSize = data.Length - systemSize; + // } + //} + this.systemStream = new MemoryStream(data, 0, systemSize); this.graphicsStream = new MemoryStream(data, systemSize, graphicsSize); this.blockPool = new Dictionary>(); @@ -735,8 +748,12 @@ namespace CodeWalker.GameFiles public override void Write(ResourceDataWriter writer, params object[] parameters) { + byte[] data = MetaTypes.ConvertArrayToBytes(Items); - writer.Write(data); + if (data != null) + { + writer.Write(data); + } } } diff --git a/CodeWalker.Core/GameFiles/Resources/Texture.cs b/CodeWalker.Core/GameFiles/Resources/Texture.cs index 60b12aa..8b0c977 100644 --- a/CodeWalker.Core/GameFiles/Resources/Texture.cs +++ b/CodeWalker.Core/GameFiles/Resources/Texture.cs @@ -24,12 +24,12 @@ namespace CodeWalker.GameFiles public uint Unknown_14h { get; set; } // 0x00000000 public uint Unknown_18h { get; set; } // 0x00000001 public uint Unknown_1Ch { get; set; } // 0x00000000 - public ResourceSimpleList64Ptr TextureNameHashesPtr { get; set; } - public uint[] TextureNameHashes { get; set; } + public ResourceSimpleList64_uint TextureNameHashes { get; set; } public ResourcePointerList64 Textures { get; set; } public Dictionary Dict { get; set; } + public long MemoryUsage { get @@ -51,8 +51,8 @@ namespace CodeWalker.GameFiles public TextureDictionary() { - //this.TextureNameHashes = new ResourceSimpleList64(); - this.Textures = new ResourcePointerList64(); + //this.TextureNameHashes = new ResourceSimpleList64_uint(); + //this.Textures = new ResourcePointerList64(); } /// @@ -67,18 +67,16 @@ namespace CodeWalker.GameFiles this.Unknown_14h = reader.ReadUInt32(); this.Unknown_18h = reader.ReadUInt32(); this.Unknown_1Ch = reader.ReadUInt32(); - this.TextureNameHashesPtr = reader.ReadStruct(); - this.TextureNameHashes = reader.ReadUintsAt(this.TextureNameHashesPtr.EntriesPointer, this.TextureNameHashesPtr.EntriesCount); - //this.TextureNameHashes = reader.ReadBlock>(); + this.TextureNameHashes = reader.ReadBlock(); this.Textures = reader.ReadBlock>(); var dict = new Dictionary(); - if ((Textures != null) && (Textures.data_items != null) && (TextureNameHashes != null)) + if ((Textures?.data_items != null) && (TextureNameHashes?.data_items != null)) { - for (int i = 0; (i < Textures.data_items.Length) && (i < TextureNameHashes.Length); i++) + for (int i = 0; (i < Textures.data_items.Length) && (i < TextureNameHashes.data_items.Length); i++) { var tex = Textures.data_items[i]; - var hash = TextureNameHashes[i]; + var hash = TextureNameHashes.data_items[i]; dict[hash] = tex; } } @@ -92,19 +90,20 @@ namespace CodeWalker.GameFiles { base.Write(writer, parameters); + // write structure data writer.Write(this.Unknown_10h); writer.Write(this.Unknown_14h); writer.Write(this.Unknown_18h); writer.Write(this.Unknown_1Ch); - //writer.WriteBlock(this.TextureNameHashes); //TODO: fix! - //writer.WriteBlock(this.Textures); + writer.WriteBlock(this.TextureNameHashes); + writer.WriteBlock(this.Textures); } public override Tuple[] GetParts() { return new Tuple[] { - //new Tuple(0x20, TextureNameHashes), //TODO: fix! + new Tuple(0x20, TextureNameHashes), new Tuple(0x30, Textures) }; } @@ -163,6 +162,8 @@ namespace CodeWalker.GameFiles public string Name { get; set; } public uint NameHash { get; set; } + private string_r NameBlock = null; + /// /// Reads the data-block from a stream. /// @@ -202,7 +203,7 @@ namespace CodeWalker.GameFiles public override void Write(ResourceDataWriter writer, params object[] parameters) { // update structure data - //this.NamePointer = (ulong)(this.Name != null ? this.Name.Position : 0); //TODO: fix + this.NamePointer = (ulong)(this.NameBlock != null ? this.NameBlock.FilePosition : 0); // write structure data writer.Write(this.VFT); @@ -228,7 +229,11 @@ namespace CodeWalker.GameFiles public override IResourceBlock[] GetReferences() { var list = new List(); - //if (Name != null) list.Add(Name); //TODO: fix + if (!string.IsNullOrEmpty(Name)) + { + NameBlock = (string_r)Name; + list.Add(NameBlock); + } return list.ToArray(); } diff --git a/CodeWalker.Core/World/Space.cs b/CodeWalker.Core/World/Space.cs index c34eada..0454e99 100644 --- a/CodeWalker.Core/World/Space.cs +++ b/CodeWalker.Core/World/Space.cs @@ -1285,7 +1285,7 @@ namespace CodeWalker.World { continue; } if (bgeom.Polygons == null) { continue; } - if ((bgeom.BVH == null) || (bgeom.BVH.Trees == null)) + if ((bgeom.BVH?.Nodes?.data_items == null) || (bgeom.BVH?.Trees?.data_items == null)) { continue; } box.Minimum = bgeom.BoundingBoxMin; @@ -1299,9 +1299,9 @@ namespace CodeWalker.World var q = bgeom.BVH.Quantum.XYZ(); var c = bgeom.BVH.BoundingBoxCenter.XYZ(); var cg = bgeom.CenterGeom; - for (int t = 0; t < bgeom.BVH.Trees.Length; t++) + for (int t = 0; t < bgeom.BVH.Trees.data_items.Length; t++) { - var tree = bgeom.BVH.Trees[t]; + var tree = bgeom.BVH.Trees.data_items[t]; box.Minimum = new Vector3(tree.MinX, tree.MinY, tree.MinZ) * q + c; box.Maximum = new Vector3(tree.MaxX, tree.MaxY, tree.MaxZ) * q + c; if (!ray.Intersects(ref box, out bvhboxhittest)) @@ -1315,7 +1315,7 @@ namespace CodeWalker.World int lastind = tree.NodeIndex2; while (nodeind < lastind) { - var node = bgeom.BVH.Nodes[nodeind]; + var node = bgeom.BVH.Nodes.data_items[nodeind]; box.Minimum = new Vector3(node.MinX, node.MinY, node.MinZ) * q + c; box.Maximum = new Vector3(node.MaxX, node.MaxY, node.MaxZ) * q + c; bool nodehit = ray.Intersects(ref box, out bvhboxhittest); @@ -1567,7 +1567,7 @@ namespace CodeWalker.World { continue; } if (bgeom.Polygons == null) { continue; } - if ((bgeom.BVH == null) || (bgeom.BVH.Trees == null)) + if ((bgeom.BVH?.Nodes?.data_items == null) || (bgeom.BVH?.Trees?.data_items == null)) { continue; } box.Minimum = bgeom.BoundingBoxMin; @@ -1578,9 +1578,9 @@ namespace CodeWalker.World var q = bgeom.BVH.Quantum.XYZ(); var c = bgeom.BVH.BoundingBoxCenter.XYZ(); var cg = bgeom.CenterGeom; - for (int t = 0; t < bgeom.BVH.Trees.Length; t++) + for (int t = 0; t < bgeom.BVH.Trees.data_items.Length; t++) { - var tree = bgeom.BVH.Trees[t]; + var tree = bgeom.BVH.Trees.data_items[t]; box.Minimum = new Vector3(tree.MinX, tree.MinY, tree.MinZ) * q + c; box.Maximum = new Vector3(tree.MaxX, tree.MaxY, tree.MaxZ) * q + c; if (!sph.Intersects(ref box)) @@ -1590,7 +1590,7 @@ namespace CodeWalker.World int lastind = tree.NodeIndex2; while (nodeind < lastind) { - var node = bgeom.BVH.Nodes[nodeind]; + var node = bgeom.BVH.Nodes.data_items[nodeind]; box.Minimum = new Vector3(node.MinX, node.MinY, node.MinZ) * q + c; box.Maximum = new Vector3(node.MaxX, node.MaxY, node.MaxZ) * q + c; bool nodehit = sph.Intersects(ref box); diff --git a/Project/Panels/GenerateLODLightsPanel.cs b/Project/Panels/GenerateLODLightsPanel.cs index eedf6c0..2f0fc84 100644 --- a/Project/Panels/GenerateLODLightsPanel.cs +++ b/Project/Panels/GenerateLODLightsPanel.cs @@ -123,11 +123,11 @@ namespace CodeWalker.Project.Panels LightAttributes_s[] lightAttrs = null; if (ddwbl != null) { - lightAttrs = ddwbl.LightAttributes; + lightAttrs = ddwbl.LightAttributes?.data_items; } else if (fdwbl != null) { - lightAttrs = fdwbl.OwnerFragment?.LightAttributes; + lightAttrs = fdwbl.OwnerFragment?.LightAttributes?.data_items; } if (lightAttrs != null) { From 40f1d8131888b4dc5ce9dd65be6dad05fba93ea3 Mon Sep 17 00:00:00 2001 From: dexy Date: Sun, 27 Jan 2019 21:50:24 +1100 Subject: [PATCH 126/158] Updated ResourceBaseTypes, added Save method to YbnFile --- .../GameFiles/FileTypes/YbnFile.cs | 8 + CodeWalker.Core/GameFiles/GameFileCache.cs | 151 +++++ CodeWalker.Core/GameFiles/Resources/Bounds.cs | 547 +++++++++++------- .../GameFiles/Resources/ResourceBaseTypes.cs | 79 ++- .../GameFiles/Resources/ResourceData.cs | 74 --- 5 files changed, 585 insertions(+), 274 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/YbnFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YbnFile.cs index 3e86c68..d8f47b3 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YbnFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YbnFile.cs @@ -40,5 +40,13 @@ namespace CodeWalker.GameFiles Loaded = true; } + + public byte[] Save() + { + byte[] data = ResourceBuilder.Build(Bounds, 43); //ybn is type/version 43... + + return data; + } + } } diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index 4f51144..1ad9ec5 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -178,6 +178,7 @@ namespace CodeWalker.GameFiles //TestPsos(); //TestYcds(); //TestYtds(); + //TestYbns(); //TestYmaps(); //TestPlacements(); //TestDrawables(); @@ -2911,6 +2912,156 @@ namespace CodeWalker.GameFiles + } + } + } + //catch (Exception ex) + //{ + // UpdateStatus("Error! " + ex.ToString()); + //} + } + } + if (errorfiles.Count > 0) + { } + } + public void TestYbns() + { + var errorfiles = new List(); + foreach (RpfFile file in AllRpfs) + { + foreach (RpfEntry entry in file.AllEntries) + { + //try + { + if (entry.NameLower.EndsWith(".ybn")) + { + UpdateStatus(string.Format(entry.Path)); + YbnFile ybn = null; + try + { + ybn = RpfMan.GetFile(entry); + } + catch (Exception ex) + { + UpdateStatus("Error! " + ex.ToString()); + errorfiles.Add(entry); + } + if ((ybn != null) && (ybn.Bounds != null)) + { + var fentry = entry as RpfFileEntry; + if (fentry == null) + { continue; } //shouldn't happen + + var bytes = ybn.Save(); + + string origlen = TextUtil.GetBytesReadable(fentry.FileSize); + string bytelen = TextUtil.GetBytesReadable(bytes.Length); + + + var ybn2 = new YbnFile(); + RpfFile.LoadResourceFile(ybn2, bytes, 43); + + if (ybn2.Bounds == null) + { continue; } + if (ybn2.Bounds.Type != ybn.Bounds.Type) + { continue; } + + //quick check of roundtrip + switch (ybn2.Bounds.Type) + { + case 0: //return new BoundSphere(); + { + var a = ybn.Bounds as BoundSphere; + var b = ybn2.Bounds as BoundSphere; + if (b == null) + { continue; } + break; + } + case 1: //return new BoundCapsule(); + { + var a = ybn.Bounds as BoundCapsule; + var b = ybn2.Bounds as BoundCapsule; + if (b == null) + { continue; } + break; + } + case 3: //return new BoundBox(); + { + var a = ybn.Bounds as BoundBox; + var b = ybn2.Bounds as BoundBox; + if (b == null) + { continue; } + break; + } + case 4: //return new BoundGeometry(); + { + var a = ybn.Bounds as BoundGeometry; + var b = ybn2.Bounds as BoundGeometry; + if (b == null) + { continue; } + if (a.Polygons?.Length != b.Polygons?.Length) + { continue; } + for (int i = 0; i < a.Polygons.Length; i++) + { + var pa = a.Polygons[i]; + var pb = b.Polygons[i]; + if (pa.Type != pb.Type) + { } + } + break; + } + case 8: //return new BoundBVH(); + { + var a = ybn.Bounds as BoundBVH; + var b = ybn2.Bounds as BoundBVH; + if (b == null) + { continue; } + if (a.BVH?.Nodes?.data_items?.Length != b.BVH?.Nodes?.data_items?.Length) + { } + if (a.Polygons?.Length != b.Polygons?.Length) + { continue; } + for (int i = 0; i < a.Polygons.Length; i++) + { + var pa = a.Polygons[i]; + var pb = b.Polygons[i]; + if (pa.Type != pb.Type) + { } + } + break; + } + case 10: //return new BoundComposite(); + { + var a = ybn.Bounds as BoundComposite; + var b = ybn2.Bounds as BoundComposite; + if (b == null) + { continue; } + if (a.Children?.data_items?.Length != b.Children?.data_items?.Length) + { } + break; + } + case 12: //return new BoundDisc(); + { + var a = ybn.Bounds as BoundDisc; + var b = ybn2.Bounds as BoundDisc; + if (b == null) + { continue; } + break; + } + case 13: //return new BoundCylinder(); + { + var a = ybn.Bounds as BoundCylinder; + var b = ybn2.Bounds as BoundCylinder; + if (b == null) + { continue; } + break; + } + case 15: //return null; //TODO: find out what this is! + default: //return null; // throw new Exception("Unknown bound type"); + break; + } + + + } } } diff --git a/CodeWalker.Core/GameFiles/Resources/Bounds.cs b/CodeWalker.Core/GameFiles/Resources/Bounds.cs index dea2416..a85b03f 100644 --- a/CodeWalker.Core/GameFiles/Resources/Bounds.cs +++ b/CodeWalker.Core/GameFiles/Resources/Bounds.cs @@ -277,6 +277,88 @@ namespace CodeWalker.GameFiles } [TC(typeof(EXP))] public class BoundBox : Bounds { } + [TC(typeof(EXP))] public class BoundDisc : Bounds + { + public override long BlockLength + { + get { return 128; } + } + + // structure data + public uint Unknown_70h { get; set; } // 0x00000000 + public uint Unknown_74h { get; set; } // 0x00000000 + public uint Unknown_78h { get; set; } // 0x00000000 + public uint Unknown_7Ch { get; set; } // 0x00000000 + + /// + /// Reads the data-block from a stream. + /// + public override void Read(ResourceDataReader reader, params object[] parameters) + { + base.Read(reader, parameters); + + // read structure data + this.Unknown_70h = reader.ReadUInt32(); + this.Unknown_74h = reader.ReadUInt32(); + this.Unknown_78h = reader.ReadUInt32(); + this.Unknown_7Ch = reader.ReadUInt32(); + } + + /// + /// Writes the data-block to a stream. + /// + public override void Write(ResourceDataWriter writer, params object[] parameters) + { + base.Write(writer, parameters); + + // write structure data + writer.Write(this.Unknown_70h); + writer.Write(this.Unknown_74h); + writer.Write(this.Unknown_78h); + writer.Write(this.Unknown_7Ch); + } + } + [TC(typeof(EXP))] public class BoundCylinder : Bounds + { + public override long BlockLength + { + get { return 128; } + } + + // structure data + public uint Unknown_70h { get; set; } // 0x00000000 + public uint Unknown_74h { get; set; } // 0x00000000 + public uint Unknown_78h { get; set; } // 0x00000000 + public uint Unknown_7Ch { get; set; } // 0x00000000 + + /// + /// Reads the data-block from a stream. + /// + public override void Read(ResourceDataReader reader, params object[] parameters) + { + base.Read(reader, parameters); + + // read structure data + this.Unknown_70h = reader.ReadUInt32(); + this.Unknown_74h = reader.ReadUInt32(); + this.Unknown_78h = reader.ReadUInt32(); + this.Unknown_7Ch = reader.ReadUInt32(); + } + + /// + /// Writes the data-block to a stream. + /// + public override void Write(ResourceDataWriter writer, params object[] parameters) + { + base.Write(writer, parameters); + + // write structure data + writer.Write(this.Unknown_70h); + writer.Write(this.Unknown_74h); + writer.Write(this.Unknown_78h); + writer.Write(this.Unknown_7Ch); + } + } [TC(typeof(EXP))] public class BoundGeometry : Bounds { public override long BlockLength @@ -329,11 +411,20 @@ namespace CodeWalker.GameFiles public Vector3[] Vertices { get; set; } public uint[] Unknown_B8h_Data { get; set; } public uint[] Unknown_C0h_Data { get; set; } - public uint[][] Unknown_C8h_Data { get; set; } + public BoundUnknown1 Unknown_C8h_Data { get; set; } public BoundMaterial_s[] Materials { get; set; } public BoundMaterialColour[] MaterialColours { get; set; } public byte[] PolygonMaterialIndices { get; set; } + private ResourceSystemStructBlock p1dataBlock = null; + private ResourceSystemDataBlock PolygonsBlock = null; + private ResourceSystemStructBlock VerticesBlock = null; + private ResourceSystemStructBlock Unknown_B8h_Block = null; + private ResourceSystemStructBlock Unknown_C0h_Block = null; + private ResourceSystemStructBlock MaterialsBlock = null; + private ResourceSystemStructBlock MaterialColoursBlock = null; + private ResourceSystemStructBlock PolygonMaterialIndicesBlock = null; + /// /// Reads the data-block from a stream. /// @@ -398,16 +489,11 @@ namespace CodeWalker.GameFiles } this.Unknown_B8h_Data = reader.ReadUintsAt(this.Unknown_B8h_Pointer, this.VerticesCount); - this.Unknown_C0h_Data = reader.ReadUintsAt(this.Unknown_C0h_Pointer, 8); + this.Unknown_C0h_Data = reader.ReadUintsAt(this.Unknown_C0h_Pointer, 8);//item counts if (this.Unknown_C0h_Data != null) { - ulong[] ptrlist = reader.ReadUlongsAt(this.Unknown_C8h_Pointer, 8);//(uint)Unknown_C0h_Data.Length - Unknown_C8h_Data = new uint[8][]; //Unknown_C0h_Data.Length - for (int i = 0; i < 8; i++) //Unknown_C0h_Data.Length - { - Unknown_C8h_Data[i] = reader.ReadUintsAt(ptrlist[i], Unknown_C0h_Data[i]); - } + this.Unknown_C8h_Data = reader.ReadBlockAt(this.Unknown_C8h_Pointer, this.Unknown_C0h_Data); } this.Materials = reader.ReadStructsAt(this.MaterialsPointer, this.MaterialsCount); @@ -430,7 +516,7 @@ namespace CodeWalker.GameFiles { var offset = i * 16; byte b0 = polygonData[offset]; - polygonData[offset] = (byte)(b0 & 0x7F);//mask it off + polygonData[offset] = (byte)(b0 & 0xF8);//mask it off BoundPolygonType type = (BoundPolygonType)(b0 & 7); BoundPolygon p = null; switch (type) @@ -475,20 +561,20 @@ namespace CodeWalker.GameFiles base.Write(writer, parameters); // update structure data - //this.Unknown_78h_Pointer = (ulong)(this.p1data != null ? this.p1data.Position : 0); - //this.PolygonsPointer = (ulong)(this.Polygons != null ? this.Polygons.Position : 0); - //this.VerticesPointer = (ulong)(this.Vertices != null ? this.Vertices.Position : 0); - //this.Unknown_B8h_Pointer = (ulong)(this.Unknown_B8h_Data != null ? this.Unknown_B8h_Data.Position : 0); - //this.Unknown_C0h_Pointer = (ulong)(this.Unknown_C0h_Data != null ? this.Unknown_C0h_Data.Position : 0); - //this.Unknown_C8h_Pointer = (ulong)(this.Unknown_C8h_Data != null ? this.Unknown_C8h_Data.Position : 0); - //this.VerticesCount = (uint)(this.Vertices != null ? this.Vertices.Count : 0); - //this.PolygonsCount = (uint)(this.Polygons != null ? this.Polygons.Count : 0); - //this.MaterialsPointer = (ulong)(this.Materials != null ? this.Materials.Position : 0); - //this.Unknown_F8h_Pointer = (ulong)(this.Unknown_F8h_Data != null ? this.Unknown_F8h_Data.Position : 0); - //this.PolygonMaterialIndicesPointer = (ulong)(this.PolygonMaterialIndices != null ? this.PolygonMaterialIndices.Position : 0); - //this.MaterialsCount = (byte)(this.Materials != null ? this.Materials.Count : 0); - //this.Count2 = (byte)(this.Unknown_F8h_Data != null ? this.Unknown_F8h_Data.Count : 0); - //TODO: fix all this + this.Unknown_78h_Pointer = (ulong)(this.p1dataBlock != null ? this.p1dataBlock.FilePosition : 0); + this.PolygonsPointer = (ulong)(this.PolygonsBlock != null ? this.PolygonsBlock.FilePosition : 0); + this.VerticesPointer = (ulong)(this.VerticesBlock != null ? this.VerticesBlock.FilePosition : 0); + this.Unknown_B8h_Pointer = (ulong)(this.Unknown_B8h_Block != null ? this.Unknown_B8h_Block.FilePosition : 0); + this.Unknown_C0h_Pointer = (ulong)(this.Unknown_C0h_Block != null ? this.Unknown_C0h_Block.FilePosition : 0); + this.Unknown_C8h_Pointer = (ulong)(this.Unknown_C8h_Data != null ? this.Unknown_C8h_Data.FilePosition : 0); + this.VerticesCount = (uint)(this.VerticesBlock != null ? this.VerticesBlock.ItemCount : 0); + this.PolygonsCount = (uint)(this.Polygons != null ? this.Polygons.Length : 0); + this.MaterialsPointer = (ulong)(this.MaterialsBlock != null ? this.MaterialsBlock.FilePosition : 0); + this.MaterialColoursPointer = (ulong)(this.MaterialColoursBlock != null ? this.MaterialColoursBlock.FilePosition : 0); + this.PolygonMaterialIndicesPointer = (ulong)(this.PolygonMaterialIndicesBlock != null ? this.PolygonMaterialIndicesBlock.FilePosition : 0); + this.MaterialsCount = (byte)(this.MaterialsBlock != null ? this.MaterialsBlock.ItemCount : 0); + this.MaterialColoursCount = (byte)(this.MaterialColoursBlock != null ? this.MaterialColoursBlock.ItemCount : 0); + // write structure data writer.Write(this.Unknown_70h); @@ -540,16 +626,151 @@ namespace CodeWalker.GameFiles public override IResourceBlock[] GetReferences() { var list = new List(base.GetReferences()); - //if (p1data != null) list.Add(p1data); - //if (Polygons != null) list.Add(Polygons); - //if (Vertices != null) list.Add(Vertices); - //if (Unknown_B8h_Data != null) list.Add(Unknown_B8h_Data); - //if (Unknown_C0h_Data != null) list.Add(Unknown_C0h_Data); - //if (Unknown_C8h_Data != null) list.Add(Unknown_C8h_Data); - //if (Materials != null) list.Add(Materials); - //if (Unknown_F8h_Data != null) list.Add(Unknown_F8h_Data); - //if (PolygonMaterialIndices != null) list.Add(PolygonMaterialIndices); - //TODO: fix all these! + if (p1data != null) + { + p1dataBlock = new ResourceSystemStructBlock(p1data); + list.Add(p1dataBlock); + } + if (Polygons != null) + { + MemoryStream ms = new MemoryStream(); + BinaryWriter bw = new BinaryWriter(ms); + foreach (var poly in Polygons) + { + poly.Write(bw); + } + var polydata = new byte[ms.Length]; + ms.Position = 0; + ms.Read(polydata, 0, polydata.Length); + for (int i = 0; i < Polygons.Length; i++) + { + var o = i * 16; + var t = (byte)Polygons[i].Type; + var b = polydata[o]; + polydata[o] = (byte)((b & 0xF8) | (t & 7)); //add the poly types back in! + } + + if (polydata.Length != (Polygons.Length * 16)) + { } + + PolygonsBlock = new ResourceSystemDataBlock(polydata); + list.Add(PolygonsBlock); + } + if (Vertices != null) + { + var verts = new List(); + foreach (var v in Vertices) + { + var vq = v / Quantum; //Vertices[i] = new Vector3(bv.X, bv.Y, bv.Z) * Quantum; + var vs = new BoundVertex_s(vq); + verts.Add(vs); + } + VerticesBlock = new ResourceSystemStructBlock(verts.ToArray()); + list.Add(VerticesBlock); + } + if (Unknown_B8h_Data != null) + { + Unknown_B8h_Block = new ResourceSystemStructBlock(Unknown_B8h_Data); + list.Add(Unknown_B8h_Block); + } + if (Unknown_C0h_Data != null) + { + Unknown_C0h_Block = new ResourceSystemStructBlock(Unknown_C0h_Data); + list.Add(Unknown_C0h_Block); + } + if (Unknown_C8h_Data != null) + { + list.Add(Unknown_C8h_Data);//this one is already a resource block! + } + if (Materials != null) + { + MaterialsBlock = new ResourceSystemStructBlock(Materials); + list.Add(MaterialsBlock); + } + if (MaterialColours != null) + { + MaterialColoursBlock = new ResourceSystemStructBlock(MaterialColours); + list.Add(MaterialColoursBlock); + } + if (PolygonMaterialIndices != null) + { + PolygonMaterialIndicesBlock = new ResourceSystemStructBlock(PolygonMaterialIndices); + list.Add(PolygonMaterialIndicesBlock); + } + return list.ToArray(); + } + } + + [TC(typeof(EXP))] public class BoundUnknown1 : ResourceSystemBlock + { + public uint[][] Items { get; private set; } + + private ResourceSystemStructBlock[] ItemBlocks = null; + + + public override long BlockLength + { + get + { + return Items != null ? (Items.Length*8) : 0; //main pointer array has 8 items, 8 bytes each + } + } + + public BoundUnknown1() { } + public BoundUnknown1(uint[][] items) + { + Items = items; + } + + public override void Read(ResourceDataReader reader, params object[] parameters) + { + if (parameters?.Length < 1) + { return; } //shouldn't happen! + + var itemcounts = (uint[])parameters[0]; + ulong ptr = (ulong)reader.Position; //pointer array pointer + + if (itemcounts != null) + { + ulong[] ptrlist = reader.ReadUlongsAt(ptr, (uint)itemcounts.Length); + Items = new uint[itemcounts.Length][]; + for (int i = 0; i < itemcounts.Length; i++) + { + Items[i] = reader.ReadUintsAt(ptrlist[i], itemcounts[i]); + } + } + } + + public override void Write(ResourceDataWriter writer, params object[] parameters) + { + + //just write the pointer array. + if (ItemBlocks != null) + { + foreach (var item in ItemBlocks) + { + writer.Write((ulong)item.FilePosition); + } + } + + } + + public override IResourceBlock[] GetReferences() + { + var list = new List(base.GetReferences()); + + var ilist = new List>(); + if (Items != null) + { + foreach (var item in Items) + { + var block = new ResourceSystemStructBlock(item); + ilist.Add(block); + list.Add(block); + } + } + ItemBlocks = ilist.ToArray(); + return list.ToArray(); } } @@ -586,8 +807,16 @@ namespace CodeWalker.GameFiles public short X { get; set; } public short Y { get; set; } public short Z { get; set; } + + public BoundVertex_s(Vector3 v) + { + X = (short)v.X; + Y = (short)v.Y; + Z = (short)v.Z; + } } - public enum BoundPolygonType + + public enum BoundPolygonType : byte { Triangle = 0, Sphere = 1, @@ -599,7 +828,7 @@ namespace CodeWalker.GameFiles { public BoundPolygonType Type { get; set; } public abstract void Read(byte[] bytes, int offset); - + public abstract void Write(BinaryWriter bw); public override string ToString() { return Type.ToString(); @@ -637,7 +866,16 @@ namespace CodeWalker.GameFiles edgeIndex2 = BitConverter.ToInt16(bytes, offset + 12); edgeIndex3 = BitConverter.ToInt16(bytes, offset + 14); } - + public override void Write(BinaryWriter bw) + { + bw.Write(triArea); + bw.Write(triIndex1); + bw.Write(triIndex2); + bw.Write(triIndex3); + bw.Write(edgeIndex1); + bw.Write(edgeIndex2); + bw.Write(edgeIndex3); + } public override string ToString() { return base.ToString() + ": " + vertIndex1.ToString() + ", " + vertIndex2.ToString() + ", " + vertIndex3.ToString(); @@ -663,7 +901,14 @@ namespace CodeWalker.GameFiles unused0 = BitConverter.ToUInt32(bytes, offset + 8); unused1 = BitConverter.ToUInt32(bytes, offset + 12); } - + public override void Write(BinaryWriter bw) + { + bw.Write(sphereType); + bw.Write(sphereIndex); + bw.Write(sphereRadius); + bw.Write(unused0); + bw.Write(unused1); + } public override string ToString() { return base.ToString() + ": " + sphereIndex.ToString() + ", " + sphereRadius.ToString(); @@ -691,7 +936,15 @@ namespace CodeWalker.GameFiles unused0 = BitConverter.ToUInt16(bytes, offset + 10); unused1 = BitConverter.ToUInt32(bytes, offset + 12); } - + public override void Write(BinaryWriter bw) + { + bw.Write(capsuleType); + bw.Write(capsuleIndex1); + bw.Write(capsuleRadius); + bw.Write(capsuleIndex2); + bw.Write(unused0); + bw.Write(unused1); + } public override string ToString() { return base.ToString() + ": " + capsuleIndex1.ToString() + ", " + capsuleIndex2.ToString() + ", " + capsuleRadius.ToString(); @@ -719,7 +972,15 @@ namespace CodeWalker.GameFiles boxIndex4 = BitConverter.ToInt16(bytes, offset + 10); unused0 = BitConverter.ToUInt32(bytes, offset + 12); } - + public override void Write(BinaryWriter bw) + { + bw.Write(boxType); + bw.Write(boxIndex1); + bw.Write(boxIndex2); + bw.Write(boxIndex3); + bw.Write(boxIndex4); + bw.Write(unused0); + } public override string ToString() { return base.ToString() + ": " + boxIndex1.ToString() + ", " + boxIndex2.ToString() + ", " + boxIndex3.ToString() + ", " + boxIndex4.ToString(); @@ -747,12 +1008,21 @@ namespace CodeWalker.GameFiles unused0 = BitConverter.ToUInt16(bytes, offset + 10); unused1 = BitConverter.ToUInt32(bytes, offset + 12); } - + public override void Write(BinaryWriter bw) + { + bw.Write(cylinderType); + bw.Write(cylinderIndex1); + bw.Write(cylinderRadius); + bw.Write(cylinderIndex2); + bw.Write(unused0); + bw.Write(unused1); + } public override string ToString() { return base.ToString() + ": " + cylinderIndex1.ToString() + ", " + cylinderIndex2.ToString() + ", " + cylinderRadius.ToString(); } } + [TC(typeof(EXP))] public class BoundBVH : BoundGeometry { public override long BlockLength @@ -855,11 +1125,6 @@ namespace CodeWalker.GameFiles // reference data public ResourcePointerArray64 Children { get; set; } - //public ResourceSimpleArray ChildrenTransformation1 { get; set; } - //public ResourceSimpleArray ChildrenTransformation2 { get; set; } - //public ResourceSimpleArray ChildrenBoundingBoxes { get; set; } - //public ResourceSimpleArray Unknown_90h_Data { get; set; } - //public ResourceSimpleArray Unknown_98h_Data { get; set; } public Matrix[] ChildrenTransformation1 { get; set; } public Matrix[] ChildrenTransformation2 { get; set; } public AABB_s[] ChildrenBoundingBoxes { get; set; } @@ -868,6 +1133,14 @@ namespace CodeWalker.GameFiles public BVH BVH { get; set; } + + private ResourceSystemStructBlock ChildrenTransformation1Block = null; + private ResourceSystemStructBlock ChildrenTransformation2Block = null; + private ResourceSystemStructBlock ChildrenBoundingBoxesBlock = null; + private ResourceSystemStructBlock Unknown_90h_Block = null; + private ResourceSystemStructBlock Unknown_98h_Block = null; + + /// /// Reads the data-block from a stream. /// @@ -901,35 +1174,12 @@ namespace CodeWalker.GameFiles } } - //this.ChildrenTransformation1 = reader.ReadBlockAt>( - // this.ChildrenTransformation1Pointer, // offset - // this.ChildrenCount1 - //); - //this.ChildrenTransformation2 = reader.ReadBlockAt>( - // this.ChildrenTransformation2Pointer, // offset - // this.ChildrenCount1 - //); - //this.ChildrenBoundingBoxes = reader.ReadBlockAt>( - // this.ChildrenBoundingBoxesPointer, // offset - // this.ChildrenCount1 - //); - //this.Unknown_90h_Data = reader.ReadBlockAt>( - // this.Unknown_90h_Pointer, // offset - // this.ChildrenCount1 - //); - //this.Unknown_98h_Data = reader.ReadBlockAt>( - // this.Unknown_98h_Pointer, // offset - // this.ChildrenCount1 - //); - - this.ChildrenTransformation1 = reader.ReadStructsAt(this.ChildrenTransformation1Pointer, this.ChildrenCount1); this.ChildrenTransformation2 = reader.ReadStructsAt(this.ChildrenTransformation2Pointer, this.ChildrenCount1); this.ChildrenBoundingBoxes = reader.ReadStructsAt(this.ChildrenBoundingBoxesPointer, this.ChildrenCount1); this.Unknown_90h_Data = reader.ReadStructsAt(this.Unknown_90h_Pointer, this.ChildrenCount1); this.Unknown_98h_Data = reader.ReadStructsAt(this.Unknown_98h_Pointer, this.ChildrenCount1); - this.BVH = reader.ReadBlockAt( this.BVHPointer // offset ); @@ -944,12 +1194,11 @@ namespace CodeWalker.GameFiles // update structure data this.ChildrenPointer = (ulong)(this.Children != null ? this.Children.FilePosition : 0); - //this.ChildrenTransformation1Pointer = (ulong)(this.ChildrenTransformation1 != null ? this.ChildrenTransformation1.Position : 0); - //this.ChildrenTransformation2Pointer = (ulong)(this.ChildrenTransformation2 != null ? this.ChildrenTransformation2.Position : 0); - //this.ChildrenBoundingBoxesPointer = (ulong)(this.ChildrenBoundingBoxes != null ? this.ChildrenBoundingBoxes.Position : 0); - //this.Unknown_90h_Pointer = (ulong)(this.Unknown_90h_Data != null ? this.Unknown_90h_Data.Position : 0); - //this.Unknown_98h_Pointer = (ulong)(this.Unknown_98h_Data != null ? this.Unknown_98h_Data.Position : 0); - //TODO: fix + this.ChildrenTransformation1Pointer = (ulong)(this.ChildrenTransformation1Block != null ? this.ChildrenTransformation1Block.FilePosition : 0); + this.ChildrenTransformation2Pointer = (ulong)(this.ChildrenTransformation2Block != null ? this.ChildrenTransformation2Block.FilePosition : 0); + this.ChildrenBoundingBoxesPointer = (ulong)(this.ChildrenBoundingBoxesBlock != null ? this.ChildrenBoundingBoxesBlock.FilePosition : 0); + this.Unknown_90h_Pointer = (ulong)(this.Unknown_90h_Block != null ? this.Unknown_90h_Block.FilePosition : 0); + this.Unknown_98h_Pointer = (ulong)(this.Unknown_98h_Block != null ? this.Unknown_98h_Block.FilePosition : 0); this.ChildrenCount1 = (ushort)(this.Children != null ? this.Children.Count : 0); this.ChildrenCount2 = (ushort)(this.Children != null ? this.Children.Count : 0); this.BVHPointer = (ulong)(this.BVH != null ? this.BVH.FilePosition : 0); @@ -974,11 +1223,31 @@ namespace CodeWalker.GameFiles { var list = new List(base.GetReferences()); if (Children != null) list.Add(Children); - //if (ChildrenTransformation1 != null) list.Add(ChildrenTransformation1); //TODO: fix - //if (ChildrenTransformation2 != null) list.Add(ChildrenTransformation2); - //if (ChildrenBoundingBoxes != null) list.Add(ChildrenBoundingBoxes); - //if (Unknown_90h_Data != null) list.Add(Unknown_90h_Data); - //if (Unknown_98h_Data != null) list.Add(Unknown_98h_Data); + if (ChildrenTransformation1 != null) + { + ChildrenTransformation1Block = new ResourceSystemStructBlock(ChildrenTransformation1); + list.Add(ChildrenTransformation1Block); + } + if (ChildrenTransformation2 != null) + { + ChildrenTransformation2Block = new ResourceSystemStructBlock(ChildrenTransformation2); + list.Add(ChildrenTransformation2Block); + } + if (ChildrenBoundingBoxes != null) + { + ChildrenBoundingBoxesBlock = new ResourceSystemStructBlock(ChildrenBoundingBoxes); + list.Add(ChildrenBoundingBoxesBlock); + } + if (Unknown_90h_Data != null) + { + Unknown_90h_Block = new ResourceSystemStructBlock(Unknown_90h_Data); + list.Add(Unknown_90h_Block); + } + if (Unknown_98h_Data != null) + { + Unknown_98h_Block = new ResourceSystemStructBlock(Unknown_98h_Data); + list.Add(Unknown_98h_Block); + } if (BVH != null) list.Add(BVH); return list.ToArray(); } @@ -993,88 +1262,6 @@ namespace CodeWalker.GameFiles } } - [TC(typeof(EXP))] public class BoundDisc : Bounds - { - public override long BlockLength - { - get { return 128; } - } - - // structure data - public uint Unknown_70h { get; set; } // 0x00000000 - public uint Unknown_74h { get; set; } // 0x00000000 - public uint Unknown_78h { get; set; } // 0x00000000 - public uint Unknown_7Ch { get; set; } // 0x00000000 - - /// - /// Reads the data-block from a stream. - /// - public override void Read(ResourceDataReader reader, params object[] parameters) - { - base.Read(reader, parameters); - - // read structure data - this.Unknown_70h = reader.ReadUInt32(); - this.Unknown_74h = reader.ReadUInt32(); - this.Unknown_78h = reader.ReadUInt32(); - this.Unknown_7Ch = reader.ReadUInt32(); - } - - /// - /// Writes the data-block to a stream. - /// - public override void Write(ResourceDataWriter writer, params object[] parameters) - { - base.Write(writer, parameters); - - // write structure data - writer.Write(this.Unknown_70h); - writer.Write(this.Unknown_74h); - writer.Write(this.Unknown_78h); - writer.Write(this.Unknown_7Ch); - } - } - [TC(typeof(EXP))] public class BoundCylinder : Bounds - { - public override long BlockLength - { - get { return 128; } - } - - // structure data - public uint Unknown_70h { get; set; } // 0x00000000 - public uint Unknown_74h { get; set; } // 0x00000000 - public uint Unknown_78h { get; set; } // 0x00000000 - public uint Unknown_7Ch { get; set; } // 0x00000000 - - /// - /// Reads the data-block from a stream. - /// - public override void Read(ResourceDataReader reader, params object[] parameters) - { - base.Read(reader, parameters); - - // read structure data - this.Unknown_70h = reader.ReadUInt32(); - this.Unknown_74h = reader.ReadUInt32(); - this.Unknown_78h = reader.ReadUInt32(); - this.Unknown_7Ch = reader.ReadUInt32(); - } - - /// - /// Writes the data-block to a stream. - /// - public override void Write(ResourceDataWriter writer, params object[] parameters) - { - base.Write(writer, parameters); - - // write structure data - writer.Write(this.Unknown_70h); - writer.Write(this.Unknown_74h); - writer.Write(this.Unknown_78h); - writer.Write(this.Unknown_7Ch); - } - } [TC(typeof(EXP))] public class BVH : ResourceSystemBlock { @@ -1084,9 +1271,6 @@ namespace CodeWalker.GameFiles } // structure data - //public ulong NodesPointer { get; set; } - //public uint NodesCount { get; set; } - //public uint Count2 { get; set; } public ResourceSimpleList64b_s Nodes { get; set; } public uint Unknown_10h { get; set; } // 0x00000000 public uint Unknown_14h { get; set; } // 0x00000000 @@ -1099,10 +1283,6 @@ namespace CodeWalker.GameFiles public Vector4 Quantum { get; set; } // bounding box dimension / 2^16 public ResourceSimpleList64_s Trees { get; set; } - // reference data - ////public ResourceSimpleArray2 Nodes; - //public BVHNode_s[] Nodes { get; set; } - //public BVHNode_s[] Nodes_Unk1 { get; set; } /// /// Reads the data-block from a stream. @@ -1110,9 +1290,6 @@ namespace CodeWalker.GameFiles public override void Read(ResourceDataReader reader, params object[] parameters) { // read structure data - //this.NodesPointer = reader.ReadUInt64(); - //this.NodesCount = reader.ReadUInt32(); - //this.Count2 = reader.ReadUInt32(); this.Nodes = reader.ReadBlock>(); this.Unknown_10h = reader.ReadUInt32(); this.Unknown_14h = reader.ReadUInt32(); @@ -1123,21 +1300,8 @@ namespace CodeWalker.GameFiles this.BoundingBoxCenter = reader.ReadStruct(); this.QuantumInverse = reader.ReadStruct(); this.Quantum = reader.ReadStruct(); - this.Trees = reader.ReadBlock>(); - // read reference data - ////this.Nodes = reader.ReadBlockAt>( - //// this.NodesPointer, // offset - //// this.NodesCount, - //// this.Count2 - this.NodesCount - ////); - - //this.Nodes = reader.ReadStructsAt(this.NodesPointer, this.NodesCount); - //this.Nodes_Unk1 = reader.ReadStructsAt(this.NodesPointer + NodesCount * 16 /*sizeof(BVHNode_s)*/, Count2 - NodesCount); - - //if (Nodes_Unk1 != null) - //{ } } /// @@ -1145,16 +1309,8 @@ namespace CodeWalker.GameFiles /// public override void Write(ResourceDataWriter writer, params object[] parameters) { - // update structure data - //this.NodesPointer = (ulong)(this.Nodes != null ? this.Nodes.Position : 0); - //this.NodesCount = (uint)(this.Nodes != null ? this.Nodes.Array1.Count : 0); - //this.Count2 = (uint)(this.Nodes != null ? this.Nodes.Array1.Count + this.Nodes.Array2.Count : 0); - //TODO: fix // write structure data - //writer.Write(this.NodesPointer); - //writer.Write(this.NodesCount); - //writer.Write(this.Count2); writer.WriteBlock(this.Nodes); writer.Write(this.Unknown_10h); writer.Write(this.Unknown_14h); @@ -1174,7 +1330,7 @@ namespace CodeWalker.GameFiles public override IResourceBlock[] GetReferences() { var list = new List(); - //if (Nodes != null) list.Add(Nodes); //TODO: fix! + //if (Nodes != null) list.Add(Nodes); //if (Trees != null) list.Add(Trees); return list.ToArray(); } @@ -1183,11 +1339,6 @@ namespace CodeWalker.GameFiles { return new Tuple[] { new Tuple(0x0, Nodes), - //new Tuple(0x20, BoundingBoxMin), - //new Tuple(0x30, BoundingBoxMax), - //new Tuple(0x40, BoundingBoxCenter), - //new Tuple(0x50, QuantumInverse), - //new Tuple(0x60, Quantum), new Tuple(0x70, Trees) }; } diff --git a/CodeWalker.Core/GameFiles/Resources/ResourceBaseTypes.cs b/CodeWalker.Core/GameFiles/Resources/ResourceBaseTypes.cs index 8712c4a..17ff40c 100644 --- a/CodeWalker.Core/GameFiles/Resources/ResourceBaseTypes.cs +++ b/CodeWalker.Core/GameFiles/Resources/ResourceBaseTypes.cs @@ -28,6 +28,7 @@ using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; +using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; @@ -1747,8 +1748,8 @@ namespace CodeWalker.GameFiles get { long len = 8 * Data.Count; - foreach (var f in Data) - len += f.BlockLength; + //foreach (var f in Data) + // len += f.BlockLength; return len; } } @@ -1936,4 +1937,78 @@ namespace CodeWalker.GameFiles + + public class ResourceSystemDataBlock : ResourceSystemBlock //used for writing resources. + { + public byte[] Data { get; set; } + public int DataLength { get; set; } + + public override long BlockLength + { + get + { + return (Data != null) ? Data.Length : DataLength; + } + } + + + public ResourceSystemDataBlock(byte[] data) + { + Data = data; + DataLength = (Data != null) ? Data.Length : 0; + } + + + public override void Read(ResourceDataReader reader, params object[] parameters) + { + Data = reader.ReadBytes(DataLength); + } + + public override void Write(ResourceDataWriter writer, params object[] parameters) + { + writer.Write(Data); + } + } + + public class ResourceSystemStructBlock : ResourceSystemBlock where T : struct //used for writing resources. + { + public T[] Items { get; set; } + public int ItemCount { get; set; } + public int StructureSize { get; set; } + + public override long BlockLength + { + get + { + return ((Items != null) ? Items.Length : ItemCount) * StructureSize; + } + } + + public ResourceSystemStructBlock(T[] items) + { + Items = items; + ItemCount = (Items != null) ? Items.Length : 0; + StructureSize = Marshal.SizeOf(typeof(T)); + } + + public override void Read(ResourceDataReader reader, params object[] parameters) + { + int datalength = ItemCount * StructureSize; + byte[] data = reader.ReadBytes(datalength); + Items = MetaTypes.ConvertDataArray(data, 0, ItemCount); + } + + public override void Write(ResourceDataWriter writer, params object[] parameters) + { + + byte[] data = MetaTypes.ConvertArrayToBytes(Items); + if (data != null) + { + writer.Write(data); + } + } + } + + + } diff --git a/CodeWalker.Core/GameFiles/Resources/ResourceData.cs b/CodeWalker.Core/GameFiles/Resources/ResourceData.cs index 53e2b20..8818724 100644 --- a/CodeWalker.Core/GameFiles/Resources/ResourceData.cs +++ b/CodeWalker.Core/GameFiles/Resources/ResourceData.cs @@ -684,80 +684,6 @@ namespace CodeWalker.GameFiles - - - public class ResourceSystemDataBlock : ResourceSystemBlock //used for writing resources. - { - public byte[] Data { get; set; } - public int DataLength { get; set; } - - public override long BlockLength - { - get - { - return (Data != null) ? Data.Length : DataLength; - } - } - - - public ResourceSystemDataBlock(byte[] data) - { - Data = data; - DataLength = (Data != null) ? Data.Length : 0; - } - - - public override void Read(ResourceDataReader reader, params object[] parameters) - { - Data = reader.ReadBytes(DataLength); - } - - public override void Write(ResourceDataWriter writer, params object[] parameters) - { - writer.Write(Data); - } - } - - public class ResourceSystemStructBlock : ResourceSystemBlock where T : struct //used for writing resources. - { - public T[] Items { get; set; } - public int ItemCount { get; set; } - public int StructureSize { get; set; } - - public override long BlockLength - { - get - { - return ((Items != null) ? Items.Length : ItemCount) * StructureSize; - } - } - - public ResourceSystemStructBlock(T[] items) - { - Items = items; - ItemCount = (Items != null) ? Items.Length : 0; - StructureSize = Marshal.SizeOf(typeof(T)); - } - - public override void Read(ResourceDataReader reader, params object[] parameters) - { - int datalength = ItemCount * StructureSize; - byte[] data = reader.ReadBytes(datalength); - Items = MetaTypes.ConvertDataArray(data, 0, ItemCount); - } - - public override void Write(ResourceDataWriter writer, params object[] parameters) - { - - byte[] data = MetaTypes.ConvertArrayToBytes(Items); - if (data != null) - { - writer.Write(data); - } - } - } - - //public interface ResourceDataStruct //{ // void Read(ResourceDataReader reader); From 4d717e41dc49db9d02dc300b1a4bc24cd43849eb Mon Sep 17 00:00:00 2001 From: dexy Date: Sun, 27 Jan 2019 22:04:25 +1100 Subject: [PATCH 127/158] Renamed StreamingSound UnkInt to Duration --- CodeWalker.Core/GameFiles/FileTypes/RelFile.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index df54703..0806fd5 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -2609,32 +2609,32 @@ namespace CodeWalker.GameFiles } [TC(typeof(EXP))] public class Dat54StreamingSound : Dat54Sound { - int UnkInt { get; set; } //0x0-0x4 + int Duration { get; set; } //0x0-0x4 public Dat54StreamingSound(RelFile rel) : base(rel, Dat54SoundType.StreamingSound) { } public Dat54StreamingSound(RelData d, BinaryReader br) : base(d, br) { - UnkInt = br.ReadInt32(); + Duration = br.ReadInt32(); ReadAudioTrackHashes(br); } public override void ReadXml(XmlNode node) { base.ReadXml(node); - UnkInt = Xml.GetChildIntAttribute(node, "UnkInt", "value"); + Duration = Xml.GetChildIntAttribute(node, "Duration", "value"); ReadAudioTracksXml(node); } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); - RelXml.ValueTag(sb, indent, "UnkInt", UnkInt.ToString()); + RelXml.ValueTag(sb, indent, "Duration", Duration.ToString()); WriteAudioTracksXml(sb, indent); } public override void Write(BinaryWriter bw) { base.Write(bw); - bw.Write(UnkInt); + bw.Write(Duration); WriteAudioTrackHashes(bw); } public override uint[] GetHashTableOffsets() From f0128223efc98ac5f2300ae14b07bfab2bcfb0c0 Mon Sep 17 00:00:00 2001 From: dexy Date: Mon, 28 Jan 2019 13:13:45 +1100 Subject: [PATCH 128/158] Added Save methods to YdrFile and YddFile --- .../GameFiles/FileTypes/YddFile.cs | 7 + .../GameFiles/FileTypes/YdrFile.cs | 7 + CodeWalker.Core/GameFiles/GameFileCache.cs | 109 +++++ .../GameFiles/Resources/Drawable.cs | 421 ++++++++++-------- 4 files changed, 364 insertions(+), 180 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/YddFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YddFile.cs index 6987892..ebd63e2 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YddFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YddFile.cs @@ -85,5 +85,12 @@ namespace CodeWalker.GameFiles } + public byte[] Save() + { + byte[] data = ResourceBuilder.Build(DrawableDict, 165); //ydd is type/version 165... + + return data; + } + } } diff --git a/CodeWalker.Core/GameFiles/FileTypes/YdrFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YdrFile.cs index 900646d..f472085 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YdrFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YdrFile.cs @@ -49,6 +49,13 @@ namespace CodeWalker.GameFiles } + public byte[] Save() + { + byte[] data = ResourceBuilder.Build(Drawable, 165); //ydr is type/version 165... + + return data; + } + } diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index 1ad9ec5..4316a2a 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -179,6 +179,8 @@ namespace CodeWalker.GameFiles //TestYcds(); //TestYtds(); //TestYbns(); + //TestYdrs(); + //TestYdds(); //TestYmaps(); //TestPlacements(); //TestDrawables(); @@ -3062,6 +3064,113 @@ namespace CodeWalker.GameFiles + } + } + } + //catch (Exception ex) + //{ + // UpdateStatus("Error! " + ex.ToString()); + //} + } + } + if (errorfiles.Count > 0) + { } + } + public void TestYdrs() + { + var errorfiles = new List(); + foreach (RpfFile file in AllRpfs) + { + foreach (RpfEntry entry in file.AllEntries) + { + //try + { + if (entry.NameLower.EndsWith(".ydr")) + { + UpdateStatus(string.Format(entry.Path)); + YdrFile ydr = null; + try + { + ydr = RpfMan.GetFile(entry); + } + catch (Exception ex) + { + UpdateStatus("Error! " + ex.ToString()); + errorfiles.Add(entry); + } + if ((ydr != null) && (ydr.Drawable != null)) + { + var fentry = entry as RpfFileEntry; + if (fentry == null) + { continue; } //shouldn't happen + + var bytes = ydr.Save(); + + string origlen = TextUtil.GetBytesReadable(fentry.FileSize); + string bytelen = TextUtil.GetBytesReadable(bytes.Length); + + var ydr2 = new YdrFile(); + RpfFile.LoadResourceFile(ydr2, bytes, 165); + + if (ydr2.Drawable == null) + { continue; } + if (ydr2.Drawable.AllModels?.Length != ydr.Drawable.AllModels?.Length) + { continue; } + + } + } + } + //catch (Exception ex) + //{ + // UpdateStatus("Error! " + ex.ToString()); + //} + } + } + if (errorfiles.Count > 0) + { } + } + public void TestYdds() + { + var errorfiles = new List(); + foreach (RpfFile file in AllRpfs) + { + foreach (RpfEntry entry in file.AllEntries) + { + //try + { + if (entry.NameLower.EndsWith(".ydd")) + { + UpdateStatus(string.Format(entry.Path)); + YddFile ydd = null; + try + { + ydd = RpfMan.GetFile(entry); + } + catch (Exception ex) + { + UpdateStatus("Error! " + ex.ToString()); + errorfiles.Add(entry); + } + if ((ydd != null) && (ydd.DrawableDict != null)) + { + var fentry = entry as RpfFileEntry; + if (fentry == null) + { continue; } //shouldn't happen + + var bytes = ydd.Save(); + + string origlen = TextUtil.GetBytesReadable(fentry.FileSize); + string bytelen = TextUtil.GetBytesReadable(bytes.Length); + + + var ydd2 = new YddFile(); + RpfFile.LoadResourceFile(ydd2, bytes, 165); + + if (ydd2.DrawableDict == null) + { continue; } + if (ydd2.DrawableDict.Drawables?.Count != ydd.DrawableDict.Drawables?.Count) + { continue; } + } } } diff --git a/CodeWalker.Core/GameFiles/Resources/Drawable.cs b/CodeWalker.Core/GameFiles/Resources/Drawable.cs index 32f945a..49d9848 100644 --- a/CodeWalker.Core/GameFiles/Resources/Drawable.cs +++ b/CodeWalker.Core/GameFiles/Resources/Drawable.cs @@ -77,7 +77,8 @@ namespace CodeWalker.GameFiles // update structure data this.TextureDictionaryPointer = (ulong)(this.TextureDictionary != null ? this.TextureDictionary.FilePosition : 0); this.ShadersPointer = (ulong)(this.Shaders != null ? this.Shaders.FilePosition : 0); - // this.ShadersCount1 = (ushort)(this.Shaders != null ? this.Shaders.Count : 0); + this.ShadersCount1 = (ushort)(this.Shaders != null ? this.Shaders.Count : 0); + this.ShadersCount2 = this.ShadersCount1; // write structure data writer.Write(this.VFT); @@ -161,17 +162,6 @@ namespace CodeWalker.GameFiles this.Unknown_2Ch = reader.ReadUInt32(); // read reference data - //this.Parameters = reader.ReadBlockAt>( - // this.ParametersPointer, // offset - // this.ParameterCount - //); - //this.ParameterHashes = reader.ReadBlockAt>( - // this.ParametersPointer, // offset - // this.ParameterCount, - // this.TextureParametersCount - //); - - this.ParametersList = reader.ReadBlockAt( this.ParametersPointer, // offset this.ParameterCount @@ -185,8 +175,7 @@ namespace CodeWalker.GameFiles { // update structure data this.ParametersPointer = (ulong)(this.ParametersList != null ? this.ParametersList.FilePosition : 0); - //this.ParametersPointer = (ulong)(this.Parameters != null ? this.Parameters.Position : 0); - //this.ParameterCount = (byte)(this.Parameters != null ? this.Parameters.Count : 0); + this.ParameterCount = (byte)(this.ParametersList != null ? this.ParametersList.Count : 0); // write structure data writer.Write(this.ParametersPointer); @@ -213,7 +202,6 @@ namespace CodeWalker.GameFiles { var list = new List(); if (ParametersList != null) list.Add(ParametersList); - // if (ParameterHashes != null) list.Add(ParameterHashes); return list.ToArray(); } @@ -313,19 +301,22 @@ namespace CodeWalker.GameFiles public ShaderParameter[] Parameters { get; set; } public MetaName[] Hashes { get; set; } + public int Count { get; set; } + + private ResourceSystemStructBlock[] ParameterDataBlocks = null; public override void Read(ResourceDataReader reader, params object[] parameters) { - int cnt = Convert.ToInt32(parameters[0]); + Count = Convert.ToInt32(parameters[0]); var paras = new List(); - for (int i = 0; i < cnt; i++) + for (int i = 0; i < Count; i++) { paras.Add(reader.ReadBlock()); } int offset = 0; - for (int i = 0; i < cnt; i++) + for (int i = 0; i < Count; i++) { var p = paras[i]; @@ -334,50 +325,24 @@ namespace CodeWalker.GameFiles { case 0: offset += 0; - p.Data = reader.ReadBlockAt( - p.DataPointer // offset - ); + p.Data = reader.ReadBlockAt(p.DataPointer); break; case 1: offset += 16; - //p.Data = reader.ReadBlockAt( - // p.DataPointer // offset - //); - p.Data = reader.ReadStructAt( - (long)p.DataPointer // offset - ); - + p.Data = reader.ReadStructAt((long)p.DataPointer); break; - //case 2: - // offset += 32; - // p.Data = reader.ReadBlockAt>( - // p.DataPointer, // offset - // 2 - // ); - // break; - //case 4: - // offset += 64; - // p.Data = reader.ReadBlockAt>( - // p.DataPointer, // offset - // 4 - // ); - // break; - default: offset += 16 * p.DataType; - //p.Data = reader.ReadBlockAt>( - // p.DataPointer, // offset - // p.DataType - // ); p.Data = reader.ReadStructsAt(p.DataPointer, p.DataType); - break; } } - reader.Position += offset; + + reader.Position += offset; //Vector4 data gets embedded here... but why pointers in params also??? + var hashes = new List(); - for (int i = 0; i < cnt; i++) + for (int i = 0; i < Count; i++) { hashes.Add((MetaName)reader.ReadUInt32()); } @@ -389,7 +354,6 @@ namespace CodeWalker.GameFiles public override void Write(ResourceDataWriter writer, params object[] parameters) { - //TODO: fix all this // update pointers... //foreach (var f in Parameters) @@ -397,6 +361,27 @@ namespace CodeWalker.GameFiles // f.DataPointer = (ulong)f.Data.Position; // else // f.DataPointer = 0; + for (int i = 0; i < Parameters.Length; i++) + { + var param = Parameters[i]; + if (param.DataType == 0) + { + param.DataPointer = (ulong)((param.Data as TextureBase)?.FilePosition ?? 0); + } + else + { + var block = (i < ParameterDataBlocks?.Length) ? ParameterDataBlocks[i] : null; + if (block != null) + { + param.DataPointer = (ulong)block.FilePosition; + } + else + { + param.DataPointer = 0;//shouldn't happen! + } + } + } + // write parameter infos @@ -409,6 +394,20 @@ namespace CodeWalker.GameFiles // if (f.DataType != 0) // writer.WriteBlock(f.Data); //} + for (int i = 0; i < Parameters.Length; i++) + { + var param = Parameters[i]; + if (param.DataType != 0) + { + var block = (i < ParameterDataBlocks?.Length) ? ParameterDataBlocks[i] : null; + if (block != null) + { + writer.WriteBlock(block); + } + else + { } //shouldn't happen! + } + } // write hashes foreach (var h in Hashes) @@ -423,10 +422,9 @@ namespace CodeWalker.GameFiles var list = new List(); list.AddRange(base.GetReferences()); - //TODO: fix this - //foreach (var x in Parameters) - // if (x.DataType == 0) - // list.Add(x.Data); + foreach (var x in Parameters) + if (x.DataType == 0) + list.Add(x.Data as TextureBase); return list.ToArray(); } @@ -443,13 +441,30 @@ namespace CodeWalker.GameFiles offset += 16; } - //TODO: fix this - //foreach (var x in Parameters) - //{ - // if (x.DataType != 0) - // list.Add(new Tuple(offset, x.Data)); - // offset += 16 * x.DataType; - //} + + var blist = new List>(); + foreach (var x in Parameters) + { + if (x.DataType != 0) + { + var vecs = x.Data as Vector4[]; + if (vecs == null) + { + vecs = new[] { (Vector4)x.Data }; + } + if (vecs == null) + { } + var block = new ResourceSystemStructBlock(vecs); + list.Add(new Tuple(offset, block)); + blist.Add(block); + } + else + { + blist.Add(null); + } + offset += 16 * x.DataType; + } + ParameterDataBlocks = blist.ToArray(); return list.ToArray(); } @@ -494,16 +509,17 @@ namespace CodeWalker.GameFiles // reference data public ResourcePointerArray64 Unknown_10h_Data { get; set; } public ResourceSimpleArray Bones { get; set; } - //public ResourceSimpleArray TransformationsInverted { get; set; } - //public ResourceSimpleArray Transformations { get; set; } - //public ResourceSimpleArray ParentIndices { get; set; } - //public ResourceSimpleArray Unknown_40h_Data { get; set; } public Matrix[] TransformationsInverted { get; set; } public Matrix[] Transformations { get; set; } public ushort[] ParentIndices { get; set; } public ushort[] Unknown_40h_Data { get; set; } + private ResourceSystemStructBlock TransformationsInvertedBlock = null;//for saving only + private ResourceSystemStructBlock TransformationsBlock = null; + private ResourceSystemStructBlock ParentIndicesBlock = null; + private ResourceSystemStructBlock Unknown_40h_DataBlock = null; + /// /// Reads the data-block from a stream. @@ -546,22 +562,6 @@ namespace CodeWalker.GameFiles this.BonesPointer, // offset this.BonesCount ); - //this.TransformationsInverted = reader.ReadBlockAt>( - // this.TransformationsInvertedPointer, // offset - // this.BonesCount - //); - //this.Transformations = reader.ReadBlockAt>( - // this.TransformationsPointer, // offset - // this.BonesCount - //); - //this.ParentIndices = reader.ReadBlockAt>( - // this.ParentIndicesPointer, // offset - // this.BonesCount - //); - //this.Unknown_40h_Data = reader.ReadBlockAt>( - // this.Unknown_40h_Pointer, // offset - // this.Count4 - //); this.TransformationsInverted = reader.ReadStructsAt(this.TransformationsInvertedPointer, this.BonesCount); this.Transformations = reader.ReadStructsAt(this.TransformationsPointer, this.BonesCount); this.ParentIndices = reader.ReadUshortsAt(this.ParentIndicesPointer, this.BonesCount); @@ -591,15 +591,16 @@ namespace CodeWalker.GameFiles { // update structure data this.Unknown_10h_Pointer = (ulong)(this.Unknown_10h_Data != null ? this.Unknown_10h_Data.FilePosition : 0); - // this.c1 = (ushort)(this.arr1 != null ? this.arr1.Count : 0); + this.Count1 = (ushort)(this.Unknown_10h_Data != null ? this.Unknown_10h_Data.Count : 0); this.BonesPointer = (ulong)(this.Bones != null ? this.Bones.FilePosition : 0); - //this.TransformationsInvertedPointer = (ulong)(this.TransformationsInverted != null ? this.TransformationsInverted.Position : 0); - //this.TransformationsPointer = (ulong)(this.Transformations != null ? this.Transformations.Position : 0); - //this.ParentIndicesPointer = (ulong)(this.ParentIndices != null ? this.ParentIndices.Position : 0); - //this.Unknown_40h_Pointer = (ulong)(this.Unknown_40h_Data != null ? this.Unknown_40h_Data.Position : 0); - ///// this.c3 = (ushort)(this.Bones != null ? this.Bones.Count : 0); - //this.Count4 = (ushort)(this.Unknown_40h_Data != null ? this.Unknown_40h_Data.Count : 0); - //TODO: fix/update + this.TransformationsInvertedPointer = (ulong)(this.TransformationsInvertedBlock != null ? this.TransformationsInvertedBlock.FilePosition : 0); + this.TransformationsPointer = (ulong)(this.TransformationsBlock != null ? this.TransformationsBlock.FilePosition : 0); + this.ParentIndicesPointer = (ulong)(this.ParentIndicesBlock != null ? this.ParentIndicesBlock.FilePosition : 0); + this.Unknown_40h_Pointer = (ulong)(this.Unknown_40h_DataBlock != null ? this.Unknown_40h_DataBlock.FilePosition : 0); + this.BonesCount = (ushort)(this.Bones != null ? this.Bones.Count : 0); + this.Count4 = (ushort)(this.Unknown_40h_DataBlock != null ? this.Unknown_40h_DataBlock.ItemCount : 0); + //this.Count2 = BonesCount;//? + // write structure data writer.Write(this.VFT); @@ -637,10 +638,26 @@ namespace CodeWalker.GameFiles var list = new List(); if (Unknown_10h_Data != null) list.Add(Unknown_10h_Data); if (Bones != null) list.Add(Bones); - //if (TransformationsInverted != null) list.Add(TransformationsInverted); - //if (Transformations != null) list.Add(Transformations); - //if (ParentIndices != null) list.Add(ParentIndices); - //if (Unknown_40h_Data != null) list.Add(Unknown_40h_Data); //TODO: fix + if (TransformationsInverted != null) + { + TransformationsInvertedBlock = new ResourceSystemStructBlock(TransformationsInverted); + list.Add(TransformationsInvertedBlock); + } + if (Transformations != null) + { + TransformationsBlock = new ResourceSystemStructBlock(Transformations); + list.Add(TransformationsBlock); + } + if (ParentIndices != null) + { + ParentIndicesBlock = new ResourceSystemStructBlock(ParentIndices); + list.Add(ParentIndicesBlock); + } + if (Unknown_40h_Data != null) + { + Unknown_40h_DataBlock = new ResourceSystemStructBlock(Unknown_40h_Data); + list.Add(Unknown_40h_DataBlock); + } return list.ToArray(); } } @@ -715,9 +732,6 @@ namespace CodeWalker.GameFiles //public float RotationW { get; set; } public Quaternion Rotation { get; set; } public Vector3 Translation { get; set; } - //public float TranslationX { get; set; } - //public float TranslationY { get; set; } - //public float TranslationZ { get; set; } public uint Unknown_1Ch { get; set; } // 0x00000000 RHW? public float ScaleX { get; set; } // 1.0 public float ScaleY { get; set; } // 1.0 @@ -739,6 +753,7 @@ namespace CodeWalker.GameFiles public Bone Parent { get; set; } + private string_r NameBlock = null; /// /// Reads the data-block from a stream. @@ -783,18 +798,11 @@ namespace CodeWalker.GameFiles public override void Write(ResourceDataWriter writer, params object[] parameters) { // update structure data - //this.NamePointer = (ulong)(this.Name != null ? this.Name.Position : 0); //TODO: fix + this.NamePointer = (ulong)(this.NameBlock != null ? this.NameBlock.FilePosition : 0); // write structure data - //writer.Write(this.RotationX); - //writer.Write(this.RotationY); - //writer.Write(this.RotationZ); - //writer.Write(this.RotationW); writer.Write(this.Rotation.ToVector4()); writer.Write(this.Translation); - //writer.Write(this.TranslationX); - //writer.Write(this.TranslationY); - //writer.Write(this.TranslationZ); writer.Write(this.Unknown_1Ch); writer.Write(this.ScaleX); writer.Write(this.ScaleY); @@ -818,7 +826,11 @@ namespace CodeWalker.GameFiles public override IResourceBlock[] GetReferences() { var list = new List(); - //if (Name != null) list.Add(Name); //TODO: fix + if (Name != null) + { + NameBlock = (string_r)Name; + list.Add(NameBlock); + } return list.ToArray(); } @@ -854,11 +866,12 @@ namespace CodeWalker.GameFiles public uint Unknown_3Ch { get; set; } // 0x00000000 // reference data - //public ResourceSimpleArray RotationLimits { get; set; } - //public ResourceSimpleArray TranslationLimits { get; set; } public JointRotationLimit_s[] RotationLimits { get; set; } public JointTranslationLimit_s[] TranslationLimits { get; set; } + private ResourceSystemStructBlock RotationLimitsBlock = null; //for saving only + private ResourceSystemStructBlock TranslationLimitsBlock = null; + /// /// Reads the data-block from a stream. @@ -903,11 +916,11 @@ namespace CodeWalker.GameFiles public override void Write(ResourceDataWriter writer, params object[] parameters) { // update structure data - //this.RotationLimitsPointer = (ulong)(this.RotationLimits != null ? this.RotationLimits.Position : 0); - //this.TranslationLimitsPointer = (ulong)(this.TranslationLimits != null ? this.TranslationLimits.Position : 0); - //this.RotationLimitsCount = (ushort)(this.RotationLimits != null ? this.RotationLimits.Count : 0); - //this.TranslationLimitsCount = (ushort)(this.TranslationLimits != null ? this.TranslationLimits.Count : 0); - //TODO: fix this + this.RotationLimitsPointer = (ulong)(this.RotationLimitsBlock != null ? this.RotationLimitsBlock.FilePosition : 0); + this.TranslationLimitsPointer = (ulong)(this.TranslationLimitsBlock != null ? this.TranslationLimitsBlock.FilePosition : 0); + this.RotationLimitsCount = (ushort)(this.RotationLimitsBlock != null ? this.RotationLimitsBlock.ItemCount : 0); + this.TranslationLimitsCount = (ushort)(this.TranslationLimitsBlock != null ? this.TranslationLimitsBlock.ItemCount : 0); + // write structure data writer.Write(this.VFT); @@ -934,9 +947,16 @@ namespace CodeWalker.GameFiles public override IResourceBlock[] GetReferences() { var list = new List(); - //if (RotationLimits != null) list.Add(RotationLimits); - //if (TranslationLimits != null) list.Add(TranslationLimits); - //TODO: fix this + if (RotationLimits != null) + { + RotationLimitsBlock = new ResourceSystemStructBlock(RotationLimits); + list.Add(RotationLimitsBlock); + } + if (TranslationLimits != null) + { + TranslationLimitsBlock = new ResourceSystemStructBlock(TranslationLimits); + list.Add(TranslationLimitsBlock); + } return list.ToArray(); } } @@ -1034,11 +1054,15 @@ namespace CodeWalker.GameFiles // reference data public ResourcePointerArray64 Geometries { get; set; } - //public ResourceSimpleArray Unknown_18h_Data; - //public ResourceSimpleArray ShaderMapping; public AABB_s[] BoundsData { get; set; } public ushort[] ShaderMapping { get; set; } + + private ResourceSystemStructBlock BoundsDataBlock = null; //for saving only + private ResourceSystemStructBlock ShaderMappingBlock = null; + + + public long MemoryUsage { get @@ -1100,14 +1124,6 @@ namespace CodeWalker.GameFiles this.GeometriesPointer, // offset this.GeometriesCount1 ); - //this.Unknown_18h_Data = reader.ReadBlockAt>( - // this.Unknown_18h_Pointer, // offset - // this.GeometriesCount1 > 1 ? this.GeometriesCount1 + 1 : this.GeometriesCount1 - //); - //this.ShaderMapping = reader.ReadBlockAt>( - // this.ShaderMappingPointer, // offset - // this.GeometriesCount1 - //); this.BoundsData = reader.ReadStructsAt(this.BoundsPointer, (uint)(this.GeometriesCount1 > 1 ? this.GeometriesCount1 + 1 : this.GeometriesCount1)); this.ShaderMapping = reader.ReadUshortsAt(this.ShaderMappingPointer, this.GeometriesCount1); @@ -1120,10 +1136,11 @@ namespace CodeWalker.GameFiles { // update structure data this.GeometriesPointer = (ulong)(this.Geometries != null ? this.Geometries.FilePosition : 0); - // this.GeometriesCount1 = (ushort)(this.Geometries != null ? this.Geometries.Count : 0); - //this.Unknown_18h_Pointer = (ulong)(this.Unknown_18h_Data != null ? this.Unknown_18h_Data.Position : 0); - //this.ShaderMappingPointer = (ulong)(this.ShaderMapping != null ? this.ShaderMapping.Position : 0); - //TODO: fix + this.GeometriesCount1 = (ushort)(this.Geometries != null ? this.Geometries.Count : 0); + this.GeometriesCount2 = this.GeometriesCount1;//is this correct? + this.BoundsPointer = (ulong)(this.BoundsDataBlock != null ? this.BoundsDataBlock.FilePosition : 0); + this.ShaderMappingPointer = (ulong)(this.ShaderMappingBlock != null ? this.ShaderMappingBlock.FilePosition : 0); + // write structure data writer.Write(this.VFT); @@ -1145,8 +1162,16 @@ namespace CodeWalker.GameFiles { var list = new List(); if (Geometries != null) list.Add(Geometries); - //if (Unknown_18h_Data != null) list.Add(Unknown_18h_Data); - //if (ShaderMapping != null) list.Add(ShaderMapping); //TODO: fix + if (BoundsData != null) + { + BoundsDataBlock = new ResourceSystemStructBlock(BoundsData); + list.Add(BoundsDataBlock); + } + if (ShaderMapping != null) + { + ShaderMappingBlock = new ResourceSystemStructBlock(ShaderMapping); + list.Add(ShaderMappingBlock); + } return list.ToArray(); } @@ -1191,7 +1216,7 @@ namespace CodeWalker.GameFiles public uint Unknown_64h { get; set; } // 0x00000000 public ulong BoneIdsPointer { get; set; } public ushort VertexStride { get; set; } - public ushort Count1 { get; set; } + public ushort BoneIdsCount { get; set; } public uint Unknown_74h { get; set; } // 0x00000000 public ulong VertexDataPointer { get; set; } public uint Unknown_80h { get; set; } // 0x00000000 @@ -1208,6 +1233,9 @@ namespace CodeWalker.GameFiles public VertexData VertexData { get; set; } public ShaderFX Shader { get; set; } + private ResourceSystemStructBlock BoneIdsBlock = null;//for saving only + + /// /// Reads the data-block from a stream. /// @@ -1241,7 +1269,7 @@ namespace CodeWalker.GameFiles this.Unknown_64h = reader.ReadUInt32(); this.BoneIdsPointer = reader.ReadUInt64(); this.VertexStride = reader.ReadUInt16(); - this.Count1 = reader.ReadUInt16(); + this.BoneIdsCount = reader.ReadUInt16(); this.Unknown_74h = reader.ReadUInt32(); this.VertexDataPointer = reader.ReadUInt64(); this.Unknown_80h = reader.ReadUInt32(); @@ -1258,11 +1286,7 @@ namespace CodeWalker.GameFiles this.IndexBuffer = reader.ReadBlockAt( this.IndexBufferPointer // offset ); - //this.Unknown_68h_Data = reader.ReadBlockAt>( - // this.Unknown_68h_Pointer, // offset - // this.Count1 - //); - this.BoneIds = reader.ReadUshortsAt(this.BoneIdsPointer, this.Count1); + this.BoneIds = reader.ReadUshortsAt(this.BoneIdsPointer, this.BoneIdsCount); if (this.BoneIds != null) //skinned mesh bones to use? peds, also yft props... { } @@ -1302,9 +1326,9 @@ namespace CodeWalker.GameFiles // update structure data this.VertexBufferPointer = (ulong)(this.VertexBuffer != null ? this.VertexBuffer.FilePosition : 0); this.IndexBufferPointer = (ulong)(this.IndexBuffer != null ? this.IndexBuffer.FilePosition : 0); - //this.Unknown_68h_Pointer = (ulong)(this.Unknown_68h_Data != null ? this.Unknown_68h_Data.Position : 0); - //this.VertexStride = (ushort)(this.VertexData != null ? this.VertexData.Count : 0); //TODO: fix - //this.c1 = (ushort)(this.p1data != null ? this.p1data.Count : 0); + this.BoneIdsPointer = (ulong)(this.BoneIdsBlock != null ? this.BoneIdsBlock.FilePosition : 0); + this.VerticesCount = (ushort)(this.VertexData != null ? this.VertexData.VertexCount : 0); //TODO: fix? + this.BoneIdsCount = (ushort)(this.BoneIdsBlock != null ? this.BoneIdsBlock.ItemCount : 0); this.VertexDataPointer = (ulong)(this.VertexData != null ? this.VertexData.FilePosition : 0); // write structure data @@ -1335,7 +1359,7 @@ namespace CodeWalker.GameFiles writer.Write(this.Unknown_64h); writer.Write(this.BoneIdsPointer); writer.Write(this.VertexStride); - writer.Write(this.Count1); + writer.Write(this.BoneIdsCount); writer.Write(this.Unknown_74h); writer.Write(this.VertexDataPointer); writer.Write(this.Unknown_80h); @@ -1354,7 +1378,11 @@ namespace CodeWalker.GameFiles var list = new List(); if (VertexBuffer != null) list.Add(VertexBuffer); if (IndexBuffer != null) list.Add(IndexBuffer); - //if (Unknown_68h_Data != null) list.Add(Unknown_68h_Data); //TODO: fix + if (BoneIds != null) + { + BoneIdsBlock = new ResourceSystemStructBlock(BoneIds); + list.Add(BoneIdsBlock); + } if (VertexData != null) list.Add(VertexData); return list.ToArray(); } @@ -1470,7 +1498,7 @@ namespace CodeWalker.GameFiles public override void Write(ResourceDataWriter writer, params object[] parameters) { // update structure data - //this.VertexStride = (uint)(this.Data1 != null ? this.Data1.Count : 0); + this.VertexCount = (uint)(this.Data1 != null ? this.Data1.VertexCount : 0); this.DataPointer1 = (ulong)(this.Data1 != null ? this.Data1.FilePosition : 0); this.DataPointer2 = (ulong)(this.Data2 != null ? this.Data2.FilePosition : 0); this.InfoPointer = (ulong)(this.Info != null ? this.Info.FilePosition : 0); @@ -1525,18 +1553,17 @@ namespace CodeWalker.GameFiles { - private int length = 0; + //private int length = 0; public override long BlockLength { get { - return this.length; + return VertexBytes?.Length ?? 0; //this.length; } } - public int cnt { get; set; } public VertexDeclaration info { get; set; } public object[] Data { get; set; } public uint[] Types { get; set; } @@ -1560,9 +1587,7 @@ namespace CodeWalker.GameFiles { VertexStride = Convert.ToInt32(parameters[0]); VertexCount = Convert.ToInt32(parameters[1]); - var info = (VertexDeclaration)parameters[2]; - this.cnt = VertexCount; - this.info = info; + info = (VertexDeclaration)parameters[2]; VertexType = (VertexType)info.Flags; @@ -1598,7 +1623,7 @@ namespace CodeWalker.GameFiles int stride = Convert.ToInt32(parameters[0]); int count = Convert.ToInt32(parameters[1]); var info = (VertexDeclaration)parameters[2]; - this.cnt = count; + this.VertexCount = count; this.info = info; @@ -1731,14 +1756,14 @@ namespace CodeWalker.GameFiles } - this.length = stride * count; + //this.length = stride * count; } - public override void Write(ResourceDataWriter writer, params object[] parameters) + public /*override*/ void WriteOrig(ResourceDataWriter writer, params object[] parameters) { // write... - for (int i = 0; i < cnt; i++) + for (int i = 0; i < VertexCount; i++) { for (int k = 0; k < 16; k++) @@ -1830,9 +1855,17 @@ namespace CodeWalker.GameFiles } + public override void Write(ResourceDataWriter writer, params object[] parameters) + { + if (VertexBytes != null) + { + writer.Write(VertexBytes); //not dealing with individual vertex data here any more! + } + } + public override string ToString() { - return "Type: " + VertexType.ToString() + ", Count: " + cnt.ToString(); + return "Type: " + VertexType.ToString() + ", Count: " + VertexCount.ToString(); } } @@ -1931,6 +1964,10 @@ namespace CodeWalker.GameFiles //public ResourceSimpleArray Indices; public ushort[] Indices { get; set; } + + private ResourceSystemStructBlock IndicesBlock = null; //only used when saving + + /// /// Reads the data-block from a stream. /// @@ -1975,8 +2012,8 @@ namespace CodeWalker.GameFiles public override void Write(ResourceDataWriter writer, params object[] parameters) { // update structure data - //this.IndicesCount = (uint)(this.Indices != null ? this.Indices.Count : 0); - //this.IndicesPointer = (ulong)(this.Indices != null ? this.Indices.Position : 0); + this.IndicesCount = (uint)(this.IndicesBlock != null ? this.IndicesBlock.ItemCount : 0); + this.IndicesPointer = (ulong)(this.IndicesBlock != null ? this.IndicesBlock.FilePosition : 0); // write structure data writer.Write(this.VFT); @@ -2010,7 +2047,11 @@ namespace CodeWalker.GameFiles public override IResourceBlock[] GetReferences() { var list = new List(); - //if (Indices != null) list.Add(Indices); //TODO: fix.. + if (Indices != null) + { + IndicesBlock = new ResourceSystemStructBlock(Indices); + list.Add(IndicesBlock); + } return list.ToArray(); } } @@ -2296,10 +2337,10 @@ namespace CodeWalker.GameFiles // write structure data writer.Write(this.ShaderGroupPointer); writer.Write(this.SkeletonPointer); - //writer.WriteBlock(this.BoundingCenter); //TODO: fix! + writer.Write(this.BoundingCenter); writer.Write(this.BoundingSphereRadius); - //writer.WriteBlock(this.BoundingBoxMin); //TODO: fix! - //writer.WriteBlock(this.BoundingBoxMax); + writer.Write(this.BoundingBoxMin); + writer.Write(this.BoundingBoxMax); writer.Write(this.DrawableModelsHighPointer); writer.Write(this.DrawableModelsMediumPointer); writer.Write(this.DrawableModelsLowPointer); @@ -2356,6 +2397,10 @@ namespace CodeWalker.GameFiles public string ErrorMessage { get; set; } + + private string_r NameBlock = null;//only used when saving.. + + /// /// Reads the data-block from a stream. /// @@ -2396,7 +2441,7 @@ namespace CodeWalker.GameFiles base.Write(writer, parameters); // update structure data - //this.NamePointer = (ulong)(this.Name != null ? this.Name.Position : 0); //TODO: fix + this.NamePointer = (ulong)(this.NameBlock != null ? this.NameBlock.FilePosition : 0); this.BoundPointer = (ulong)(this.Bound != null ? this.Bound.FilePosition : 0); // write structure data @@ -2413,7 +2458,11 @@ namespace CodeWalker.GameFiles public override IResourceBlock[] GetReferences() { var list = new List(base.GetReferences()); - //if (Name != null) list.Add(Name); //TODO: fix + if (Name != null) + { + NameBlock = (string_r)Name; + list.Add(NameBlock); + } if (Bound != null) list.Add(Bound); return list.ToArray(); } @@ -2457,6 +2506,10 @@ namespace CodeWalker.GameFiles public uint[] Hashes { get; set; } public ResourcePointerArray64 Drawables { get; set; } + + private ResourceSystemStructBlock HashesBlock = null;//only used for saving + + /// /// Reads the data-block from a stream. /// @@ -2499,12 +2552,12 @@ namespace CodeWalker.GameFiles base.Write(writer, parameters); // update structure data - //this.HashesPointer = (ulong)(this.Hashes != null ? this.Hashes.Position : 0); //TODO:: FIX THIS - // this.HashesCount1 = (ushort)(this.Hashes != null ? this.Hashes.Count : 0); - // this.HashesCount2 = (ushort)(this.Hashes != null ? this.Hashes.Count : 0); + this.HashesPointer = (ulong)(this.HashesBlock != null ? this.HashesBlock.FilePosition : 0); + this.HashesCount1 = (ushort)(this.HashesBlock != null ? this.HashesBlock.ItemCount : 0); + this.HashesCount2 = (ushort)(this.HashesBlock != null ? this.HashesBlock.ItemCount : 0); this.DrawablesPointer = (ulong)(this.Drawables != null ? this.Drawables.FilePosition : 0); - // this.DrawablesCount1 = (ushort)(this.Drawables != null ? this.Drawables.Count : 0); - // this.DrawablesCount2 = (ushort)(this.Drawables != null ? this.Drawables.Count : 0); + this.DrawablesCount1 = (ushort)(this.Drawables != null ? this.Drawables.Count : 0); + this.DrawablesCount2 = (ushort)(this.Drawables != null ? this.Drawables.Count : 0); // write structure data writer.Write(this.Unknown_10h); @@ -2527,7 +2580,11 @@ namespace CodeWalker.GameFiles public override IResourceBlock[] GetReferences() { var list = new List(base.GetReferences()); - //if (Hashes != null) list.Add(Hashes); //TODO: fix + if (Hashes != null) + { + HashesBlock = new ResourceSystemStructBlock(Hashes); + list.Add(HashesBlock); + } if (Drawables != null) list.Add(Drawables); return list.ToArray(); } @@ -2559,6 +2616,10 @@ namespace CodeWalker.GameFiles public uint[] Hashes { get; set; } public ResourcePointerArray64 Drawables { get; set; } + + private ResourceSystemStructBlock HashesBlock = null;//only used for saving + + public long MemoryUsage { get @@ -2597,10 +2658,6 @@ namespace CodeWalker.GameFiles this.Unknown_3Ch = reader.ReadUInt32(); // read reference data - //this.Hashes = reader.ReadBlockAt>( - // this.HashesPointer, // offset - // this.HashesCount1 - //); this.Hashes = reader.ReadUintsAt(this.HashesPointer, this.HashesCount1); this.Drawables = reader.ReadBlockAt>( @@ -2617,12 +2674,12 @@ namespace CodeWalker.GameFiles base.Write(writer, parameters); // update structure data - //this.HashesPointer = (ulong)(this.Hashes != null ? this.Hashes.Position : 0); //TODO: fix update this - // this.HashesCount1 = (ushort)(this.Hashes != null ? this.Hashes.Count : 0); - // this.HashesCount2 = (ushort)(this.Hashes != null ? this.Hashes.Count : 0); + this.HashesPointer = (ulong)(this.HashesBlock != null ? this.HashesBlock.FilePosition : 0); + this.HashesCount1 = (ushort)(this.HashesBlock != null ? this.HashesBlock.ItemCount : 0); + this.HashesCount2 = (ushort)(this.HashesBlock != null ? this.HashesBlock.ItemCount : 0); this.DrawablesPointer = (ulong)(this.Drawables != null ? this.Drawables.FilePosition : 0); - // this.DrawablesCount1 = (ushort)(this.Drawables != null ? this.Drawables.Count : 0); - // this.DrawablesCount2 = (ushort)(this.Drawables != null ? this.Drawables.Count : 0); + this.DrawablesCount1 = (ushort)(this.Drawables != null ? this.Drawables.Count : 0); + this.DrawablesCount2 = (ushort)(this.Drawables != null ? this.Drawables.Count : 0); // write structure data writer.Write(this.Unknown_10h); @@ -2645,7 +2702,11 @@ namespace CodeWalker.GameFiles public override IResourceBlock[] GetReferences() { var list = new List(base.GetReferences()); - //if (Hashes != null) list.Add(Hashes); //TODO: fix + if (Hashes != null) + { + HashesBlock = new ResourceSystemStructBlock(Hashes); + list.Add(HashesBlock); + } if (Drawables != null) list.Add(Drawables); return list.ToArray(); } From 43f6acda7ab3b4e3f6356fbf40ee73ce5bdc7918 Mon Sep 17 00:00:00 2001 From: dexy Date: Mon, 28 Jan 2019 18:10:25 +1100 Subject: [PATCH 129/158] Added Save method to YftFile --- .../GameFiles/FileTypes/YftFile.cs | 7 + CodeWalker.Core/GameFiles/GameFileCache.cs | 55 +++ CodeWalker.Core/GameFiles/Resources/Frag.cs | 346 +++++++++--------- .../GameFiles/Resources/ResourceData.cs | 9 +- 4 files changed, 246 insertions(+), 171 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/YftFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YftFile.cs index 077f84d..aad79f2 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YftFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YftFile.cs @@ -45,6 +45,13 @@ namespace CodeWalker.GameFiles Loaded = true; } + public byte[] Save() + { + byte[] data = ResourceBuilder.Build(Fragment, 162); //yft is type/version 162... + + return data; + } + } } diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index 4316a2a..3877ffd 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -181,6 +181,7 @@ namespace CodeWalker.GameFiles //TestYbns(); //TestYdrs(); //TestYdds(); + //TestYfts(); //TestYmaps(); //TestPlacements(); //TestDrawables(); @@ -3183,6 +3184,60 @@ namespace CodeWalker.GameFiles if (errorfiles.Count > 0) { } } + public void TestYfts() + { + var errorfiles = new List(); + foreach (RpfFile file in AllRpfs) + { + foreach (RpfEntry entry in file.AllEntries) + { + //try + { + if (entry.NameLower.EndsWith(".yft")) + { + UpdateStatus(string.Format(entry.Path)); + YftFile yft = null; + try + { + yft = RpfMan.GetFile(entry); + } + catch (Exception ex) + { + UpdateStatus("Error! " + ex.ToString()); + errorfiles.Add(entry); + } + if ((yft != null) && (yft.Fragment != null)) + { + var fentry = entry as RpfFileEntry; + if (fentry == null) + { continue; } //shouldn't happen + + var bytes = yft.Save(); + + + string origlen = TextUtil.GetBytesReadable(fentry.FileSize); + string bytelen = TextUtil.GetBytesReadable(bytes.Length); + + var yft2 = new YftFile(); + RpfFile.LoadResourceFile(yft2, bytes, 162); + + if (yft2.Fragment == null) + { continue; } + if (yft2.Fragment.Drawable?.AllModels?.Length != yft.Fragment.Drawable?.AllModels?.Length) + { continue; } + + } + } + } + //catch (Exception ex) + //{ + // UpdateStatus("Error! " + ex.ToString()); + //} + } + } + if (errorfiles.Count > 0) + { } + } public void TestYmaps() { foreach (RpfFile file in AllRpfs) diff --git a/CodeWalker.Core/GameFiles/Resources/Frag.cs b/CodeWalker.Core/GameFiles/Resources/Frag.cs index e6fd88a..298311a 100644 --- a/CodeWalker.Core/GameFiles/Resources/Frag.cs +++ b/CodeWalker.Core/GameFiles/Resources/Frag.cs @@ -102,8 +102,6 @@ namespace CodeWalker.GameFiles public uint Unknown_108h { get; set; } // 0x00000000 public uint Unknown_10Ch { get; set; } // 0x00000000 public ResourceSimpleList64_s LightAttributes { get; set; } - //public ResourceSimpleList64Ptr LightAttributesPtr { get; set; } - //public LightAttributes_s[] LightAttributes { get; set; } public ulong Unknown_120h_Pointer { get; set; } public uint Unknown_128h { get; set; } // 0x00000000 public uint Unknown_12Ch { get; set; } // 0x00000000 @@ -119,6 +117,9 @@ namespace CodeWalker.GameFiles public FragDrawable Drawable2 { get; set; } public FragUnknown_F_003 Unknown_120h_Data { get; set; } + + private string_r NameBlock = null; //only used for saving + /// /// Reads the data-block from a stream. /// @@ -275,7 +276,7 @@ namespace CodeWalker.GameFiles this.Unknown_28h_Pointer = (ulong)(this.Unknown_28h_Data != null ? this.Unknown_28h_Data.FilePosition : 0); this.Unknown_30h_Pointer = (ulong)(this.Unknown_30h_Data != null ? this.Unknown_30h_Data.FilePosition : 0); this.Count0 = (uint)(this.Unknown_28h_Data != null ? this.Unknown_28h_Data.Count : 0); - ////this.NamePointer = (ulong)(this.Name != null ? this.Name.Position : 0); //TODO: fix!!! + this.NamePointer = (ulong)(this.NameBlock != null ? this.NameBlock.FilePosition : 0); this.Unknown_A8h_Pointer = (ulong)(this.Unknown_A8h_Data != null ? this.Unknown_A8h_Data.FilePosition : 0); this.Count3 = (byte)(this.Unknown_E0h_Data != null ? this.Unknown_E0h_Data.Count : 0); this.Unknown_E0h_Pointer = (ulong)(this.Unknown_E0h_Data != null ? this.Unknown_E0h_Data.FilePosition : 0); @@ -354,7 +355,11 @@ namespace CodeWalker.GameFiles if (Drawable != null) list.Add(Drawable); if (Unknown_28h_Data != null) list.Add(Unknown_28h_Data); if (Unknown_30h_Data != null) list.Add(Unknown_30h_Data); - //if (Name != null) list.Add(Name); //TODO: fix! + if (Name != null) + { + NameBlock = (string_r)Name; + list.Add(NameBlock); + } if (Unknown_A8h_Data != null) list.Add(Unknown_A8h_Data); if (Unknown_E0h_Data != null) list.Add(Unknown_E0h_Data); if (PhysicsLODGroup != null) list.Add(PhysicsLODGroup); @@ -401,9 +406,9 @@ namespace CodeWalker.GameFiles public uint Unknown_54h { get; set; } // 0x00000000 public uint Unknown_58h { get; set; } // 0x00000000 public uint Unknown_5Ch { get; set; } // 0x00000000 - public ulong pxxxxx_2 { get; set; } - public ushort cntxx51a { get; set; } - public ushort cntxx51b { get; set; } + public ulong UnknownPointer { get; set; } + public ushort UnknownCount1 { get; set; } + public ushort UnknownCount2 { get; set; } public uint Unknown_6Ch { get; set; } // 0x00000000 public uint Unknown_70h { get; set; } // 0x00000000 public uint Unknown_74h { get; set; } // 0x00000000 @@ -414,7 +419,12 @@ namespace CodeWalker.GameFiles public FragClothInstanceTuning InstanceTuning { get; set; } public FragDrawable Drawable { get; set; } public FragClothController Controller { get; set; } - public uint[] pxxxxx_2data { get; set; } + public uint[] UnknownData { get; set; } + + + + private ResourceSystemStructBlock UnknownDataBlock = null; + /// /// Reads the data-block from a stream. @@ -443,9 +453,9 @@ namespace CodeWalker.GameFiles this.Unknown_54h = reader.ReadUInt32(); this.Unknown_58h = reader.ReadUInt32(); this.Unknown_5Ch = reader.ReadUInt32(); - this.pxxxxx_2 = reader.ReadUInt64(); - this.cntxx51a = reader.ReadUInt16(); - this.cntxx51b = reader.ReadUInt16(); + this.UnknownPointer = reader.ReadUInt64(); + this.UnknownCount1 = reader.ReadUInt16(); + this.UnknownCount2 = reader.ReadUInt16(); this.Unknown_6Ch = reader.ReadUInt32(); this.Unknown_70h = reader.ReadUInt32(); this.Unknown_74h = reader.ReadUInt32(); @@ -467,11 +477,7 @@ namespace CodeWalker.GameFiles this.Controller = reader.ReadBlockAt( this.ControllerPointer // offset ); - //this.pxxxxx_2data = reader.ReadBlockAt>( - // this.pxxxxx_2, // offset - // this.cntxx51a - //); - this.pxxxxx_2data = reader.ReadUintsAt(this.pxxxxx_2, this.cntxx51a); + this.UnknownData = reader.ReadUintsAt(this.UnknownPointer, this.UnknownCount1); } @@ -484,8 +490,9 @@ namespace CodeWalker.GameFiles this.InstanceTuningPointer = (ulong)(this.InstanceTuning != null ? this.InstanceTuning.FilePosition : 0); this.DrawablePointer = (ulong)(this.Drawable != null ? this.Drawable.FilePosition : 0); this.ControllerPointer = (ulong)(this.Controller != null ? this.Controller.FilePosition : 0); - //this.pxxxxx_2 = (ulong)(this.pxxxxx_2data != null ? this.pxxxxx_2data.Position : 0); //TODO: fix - //this.cntxx51a = (ushort)(this.pxxxxx_2data != null ? this.pxxxxx_2data.Count : 0); + this.UnknownPointer = (ulong)(this.UnknownDataBlock != null ? this.UnknownDataBlock.FilePosition : 0); + this.UnknownCount1 = (ushort)(this.UnknownDataBlock != null ? this.UnknownDataBlock.ItemCount : 0); + this.UnknownCount2 = this.UnknownCount1; // write structure data writer.Write(this.VFT); @@ -509,9 +516,9 @@ namespace CodeWalker.GameFiles writer.Write(this.Unknown_54h); writer.Write(this.Unknown_58h); writer.Write(this.Unknown_5Ch); - writer.Write(this.pxxxxx_2); - writer.Write(this.cntxx51a); - writer.Write(this.cntxx51b); + writer.Write(this.UnknownPointer); + writer.Write(this.UnknownCount1); + writer.Write(this.UnknownCount2); writer.Write(this.Unknown_6Ch); writer.Write(this.Unknown_70h); writer.Write(this.Unknown_74h); @@ -528,7 +535,11 @@ namespace CodeWalker.GameFiles if (InstanceTuning != null) list.Add(InstanceTuning); if (Drawable != null) list.Add(Drawable); if (Controller != null) list.Add(Controller); - //if (pxxxxx_2data != null) list.Add(pxxxxx_2data); //TODO: fix + if (UnknownData != null) + { + UnknownDataBlock = new ResourceSystemStructBlock(UnknownData); + list.Add(UnknownDataBlock); + } return list.ToArray(); } } @@ -1714,9 +1725,7 @@ namespace CodeWalker.GameFiles // reference data public Bounds Bound { get; set; } - //public ResourceSimpleArray Unknown_F8h_Data { get; set; } public ulong[] Unknown_F8h_Data { get; set; } - //public ResourceSimpleArray Unknown_108h_Data { get; set; } public Matrix[] Unknown_108h_Data { get; set; } public string Name { get; set; } @@ -1724,6 +1733,11 @@ namespace CodeWalker.GameFiles public FragCloth OwnerFragmentCloth { get; set; } public FragPhysTypeChild OwnerFragmentPhys { get; set; } + + private ResourceSystemStructBlock Unknown_F8h_DataBlock = null; //used for saving only + private ResourceSystemStructBlock Unknown_108h_DataBlock = null; + private string_r NameBlock = null; + /// /// Reads the data-block from a stream. /// @@ -1762,18 +1776,8 @@ namespace CodeWalker.GameFiles this.Bound = reader.ReadBlockAt( this.BoundPointer // offset ); - //this.Unknown_F8h_Data = reader.ReadBlockAt>( - // this.Unknown_F8h_Pointer, // offset - // this.Count1 - //); this.Unknown_F8h_Data = reader.ReadUlongsAt(this.Unknown_0F8h_Pointer, this.Count1); - - //this.Unknown_108h_Data = reader.ReadBlockAt>( - // this.Unknown_108h_Pointer, // offset - // this.Count2 - //); this.Unknown_108h_Data = reader.ReadStructsAt(this.Unknown_108h_Pointer, this.Count2); - this.Name = reader.ReadStringAt(//BlockAt( this.NamePointer // offset ); @@ -1788,16 +1792,16 @@ namespace CodeWalker.GameFiles // update structure data this.BoundPointer = (ulong)(this.Bound != null ? this.Bound.FilePosition : 0); - //this.Unknown_F8h_Pointer = (ulong)(this.Unknown_F8h_Data != null ? this.Unknown_F8h_Data.Position : 0); //TODO: fix - //this.c1qqq = (ushort)(this.pxx2data != null ? this.pxx2data.Count : 0); - //this.c2qqq = (ushort)(this.pxx3data != null ? this.pxx3data.Count : 0); - //this.Unknown_108h_Pointer = (ulong)(this.Unknown_108h_Data != null ? this.Unknown_108h_Data.Position : 0); - //this.NamePointer = (ulong)(this.Name != null ? this.Name.Position : 0); //TODO: fix + this.Unknown_0F8h_Pointer = (ulong)(this.Unknown_F8h_DataBlock != null ? this.Unknown_F8h_DataBlock.FilePosition : 0); + this.Count1 = (ushort)(this.Unknown_F8h_DataBlock != null ? this.Unknown_F8h_DataBlock.ItemCount : 0); + this.Count2 = (ushort)(this.Unknown_108h_DataBlock != null ? this.Unknown_108h_DataBlock.ItemCount : 0); + this.Unknown_108h_Pointer = (ulong)(this.Unknown_108h_DataBlock != null ? this.Unknown_108h_DataBlock.FilePosition : 0); + this.NamePointer = (ulong)(this.NameBlock != null ? this.NameBlock.FilePosition : 0); // write structure data writer.Write(this.Unknown_0A8h); writer.Write(this.Unknown_0ACh); - //writer.WriteBlock(this.Unknown_0B0h); //TODO: fix! + writer.Write(this.Unknown_0B0h); writer.Write(this.BoundPointer); writer.Write(this.Unknown_0F8h_Pointer); writer.Write(this.Count1); @@ -1829,9 +1833,21 @@ namespace CodeWalker.GameFiles { var list = new List(base.GetReferences()); if (Bound != null) list.Add(Bound); - //if (Unknown_F8h_Data != null) list.Add(Unknown_F8h_Data); //TODO: fix - //if (Unknown_108h_Data != null) list.Add(Unknown_108h_Data); - //if (Name != null) list.Add(Name); //TODO: fix + if (Unknown_F8h_Data != null) + { + Unknown_F8h_DataBlock = new ResourceSystemStructBlock(Unknown_F8h_Data); + list.Add(Unknown_F8h_DataBlock); + } + if (Unknown_108h_Data != null) + { + Unknown_108h_DataBlock = new ResourceSystemStructBlock(Unknown_108h_Data); + list.Add(Unknown_108h_DataBlock); + } + if (Name != null) + { + NameBlock = (string_r)Name; + list.Add(NameBlock); + } return list.ToArray(); } } @@ -1840,7 +1856,7 @@ namespace CodeWalker.GameFiles { public override long BlockLength { - get { return 32 + Data.Length; } + get { return 32 + ((Data?.Length ?? 0) * 48); } } // structure data @@ -1848,8 +1864,8 @@ namespace CodeWalker.GameFiles public uint Unknown_04h { get; set; } // 0x00000000 public uint Unknown_08h { get; set; } // 0x00000000 public uint Unknown_0Ch { get; set; } // 0x00000000 - public byte cnt1 { get; set; } - public byte cnt2 { get; set; } + public byte DataCount1 { get; set; } + public byte DataCount2 { get; set; } public ushort Unknown_12h { get; set; } public uint Unknown_14h { get; set; } // 0x00000000 public uint Unknown_18h { get; set; } // 0x00000000 @@ -1866,16 +1882,13 @@ namespace CodeWalker.GameFiles this.Unknown_04h = reader.ReadUInt32(); this.Unknown_08h = reader.ReadUInt32(); this.Unknown_0Ch = reader.ReadUInt32(); - this.cnt1 = reader.ReadByte(); - this.cnt2 = reader.ReadByte(); + this.DataCount1 = reader.ReadByte(); + this.DataCount2 = reader.ReadByte(); this.Unknown_12h = reader.ReadUInt16(); this.Unknown_14h = reader.ReadUInt32(); this.Unknown_18h = reader.ReadUInt32(); this.Unknown_1Ch = reader.ReadUInt32(); - //this.Data = reader.ReadBlock>( - // cnt1 - // ); - this.Data = reader.ReadStructsAt((ulong)reader.Position, cnt1); + this.Data = reader.ReadStructs(DataCount1); } @@ -1889,21 +1902,15 @@ namespace CodeWalker.GameFiles writer.Write(this.Unknown_04h); writer.Write(this.Unknown_08h); writer.Write(this.Unknown_0Ch); - writer.Write(this.cnt1); - writer.Write(this.cnt2); + writer.Write(this.DataCount1); + writer.Write(this.DataCount2); writer.Write(this.Unknown_12h); writer.Write(this.Unknown_14h); writer.Write(this.Unknown_18h); writer.Write(this.Unknown_1Ch); - //writer.WriteBlock(this.Data); //TODO: fix + writer.WriteStructs(Data); } - public override Tuple[] GetParts() - { - return new Tuple[] { - //new Tuple(32, Data) //TODO: FIX - }; - } } [TypeConverter(typeof(ExpandableObjectConverter))] public class FragUnknown_F_006 : ResourceSystemBlock { @@ -2018,15 +2025,14 @@ namespace CodeWalker.GameFiles { public override long BlockLength { - get { return 16 + Data.Length; } + get { return 16 + (Data?.Length ?? 0); } } // structure data public uint Unknown_0h { get; set; } // 0x56475748 public uint Unknown_4h { get; set; } - public uint cnt1 { get; set; } + public uint TotalLength { get; set; } public uint Unknown_Ch { get; set; } - //public ResourceSimpleArray Data { get; set; } public byte[] Data { get; set; } /// @@ -2037,13 +2043,9 @@ namespace CodeWalker.GameFiles // read structure data this.Unknown_0h = reader.ReadUInt32(); this.Unknown_4h = reader.ReadUInt32(); - this.cnt1 = reader.ReadUInt32(); + this.TotalLength = reader.ReadUInt32(); this.Unknown_Ch = reader.ReadUInt32(); - //this.Data = reader.ReadBlock>( - // cnt1 - 16 - // ); - this.Data = reader.ReadBytesAt((ulong)this.FilePosition, cnt1 - 16); - + this.Data = reader.ReadBytes((int)TotalLength - 16); } /// @@ -2051,20 +2053,16 @@ namespace CodeWalker.GameFiles /// public override void Write(ResourceDataWriter writer, params object[] parameters) { + TotalLength = (uint)(Data?.Length ?? 0) + 16; + // write structure data writer.Write(this.Unknown_0h); writer.Write(this.Unknown_4h); - writer.Write(this.cnt1); + writer.Write(this.TotalLength); writer.Write(this.Unknown_Ch); - //writer.WriteBlock(this.Data); //TODO: FIX!! + writer.Write(Data); } - public override Tuple[] GetParts() - { - return new Tuple[] { - //new Tuple(16, Data) - }; - } } [TypeConverter(typeof(ExpandableObjectConverter))] public class FragPhysicsLODGroup : ResourceSystemBlock @@ -2220,6 +2218,13 @@ namespace CodeWalker.GameFiles public byte[] Unknown_110h_Data { get; set; } + private ResourceSystemStructBlock Unknown_28h_DataBlock = null; //used only for saving + private ResourceSystemStructBlock InertiaTensorsBlock = null; + private ResourceSystemStructBlock Unknown_F8h_DataBlock = null; + private ResourceSystemStructBlock Unknown_108h_DataBlock = null; + private ResourceSystemStructBlock Unknown_110h_DataBlock = null; + + /// /// Reads the data-block from a stream. /// @@ -2273,10 +2278,6 @@ namespace CodeWalker.GameFiles this.ArticulatedBodyType = reader.ReadBlockAt( this.ArticulatedBodyTypePointer // offset ); - //this.Unknown_28h_Data = reader.ReadBlockAt>( - // this.Unknown_28h_Pointer, // offset - // this.ChildrenCount - //); this.Unknown_28h_Data = reader.ReadUintsAt(this.Unknown_28h_Pointer, this.ChildrenCount); this.GroupNames = reader.ReadBlockAt>( @@ -2300,30 +2301,11 @@ namespace CodeWalker.GameFiles this.Bound = reader.ReadBlockAt( this.BoundPointer // offset ); - //this.Unknown_F0h_Data = reader.ReadBlockAt>( - // this.Unknown_F0h_Pointer, // offset - // this.ChildrenCount - //); - //this.Unknown_F8h_Data = reader.ReadBlockAt>( - // this.Unknown_F8h_Pointer, // offset - // this.ChildrenCount - //); this.InertiaTensors = reader.ReadStructsAt(this.InertiaTensorsPointer, this.ChildrenCount); this.Unknown_F8h_Data = reader.ReadStructsAt(this.Unknown_F8h_Pointer, this.ChildrenCount); - - this.FragTransforms = reader.ReadBlockAt( this.FragTransformsPointer // offset ); - //this.Unknown_108h_Data = reader.ReadBlockAt>( - // this.Unknown_108h_Pointer, // offset - // this.Count1 - //); - //this.Unknown_110h_Data = reader.ReadBlockAt>( - // this.Unknown_110h_Pointer, // offset - // this.Count2 - //); - this.Unknown_108h_Data = reader.ReadBytesAt(this.Unknown_108h_Pointer, this.Count1); this.Unknown_110h_Data = reader.ReadBytesAt(this.Unknown_110h_Pointer, this.Count2); @@ -2356,23 +2338,24 @@ namespace CodeWalker.GameFiles { // update structure data this.ArticulatedBodyTypePointer = (ulong)(this.ArticulatedBodyType != null ? this.ArticulatedBodyType.FilePosition : 0); - //this.Unknown_28h_Pointer = (ulong)(this.Unknown_28h_Data != null ? this.Unknown_28h_Data.Position : 0); //TODO: fix + this.Unknown_28h_Pointer = (ulong)(this.Unknown_28h_DataBlock != null ? this.Unknown_28h_DataBlock.FilePosition : 0); this.GroupNamesPointer = (ulong)(this.GroupNames != null ? this.GroupNames.FilePosition : 0); this.GroupsPointer = (ulong)(this.Groups != null ? this.Groups.FilePosition : 0); this.ChildrenPointer = (ulong)(this.Children != null ? this.Children.FilePosition : 0); this.Archetype1Pointer = (ulong)(this.Archetype1 != null ? this.Archetype1.FilePosition : 0); this.Archetype2Pointer = (ulong)(this.Archetype2 != null ? this.Archetype2.FilePosition : 0); this.BoundPointer = (ulong)(this.Bound != null ? this.Bound.FilePosition : 0); - //this.Unknown_F0h_Pointer = (ulong)(this.Unknown_F0h_Data != null ? this.Unknown_F0h_Data.Position : 0); - //this.Unknown_F8h_Pointer = (ulong)(this.Unknown_F8h_Data != null ? this.Unknown_F8h_Data.Position : 0); + this.InertiaTensorsPointer = (ulong)(this.InertiaTensorsBlock != null ? this.InertiaTensorsBlock.FilePosition : 0); + this.Unknown_F8h_Pointer = (ulong)(this.Unknown_F8h_DataBlock != null ? this.Unknown_F8h_DataBlock.FilePosition : 0); this.FragTransformsPointer = (ulong)(this.FragTransforms != null ? this.FragTransforms.FilePosition : 0); - //this.Unknown_108h_Pointer = (ulong)(this.Unknown_108h_Data != null ? this.Unknown_108h_Data.Position : 0); - //this.Unknown_110h_Pointer = (ulong)(this.Unknown_110h_Data != null ? this.Unknown_110h_Data.Position : 0); + this.Unknown_108h_Pointer = (ulong)(this.Unknown_108h_DataBlock != null ? this.Unknown_108h_DataBlock.FilePosition : 0); + this.Unknown_110h_Pointer = (ulong)(this.Unknown_110h_DataBlock != null ? this.Unknown_110h_DataBlock.FilePosition : 0); + + this.Count1 = (byte)(this.Unknown_108h_DataBlock != null ? this.Unknown_108h_DataBlock.ItemCount : 0); + this.Count2 = (byte)(this.Unknown_110h_DataBlock != null ? this.Unknown_110h_DataBlock.ItemCount : 0); + this.GroupsCount = (byte)(this.Groups != null ? this.Groups.Count : 0); + this.ChildrenCount = (byte)(this.Children != null ? this.Children.Count : 0); - //this.vvv1 = (byte)(this.pxxxxx_2data != null ? this.pxxxxx_2data.Count : 0); - //this.vvv2 = (byte)(this.pxxxxx_3data != null ? this.pxxxxx_3data.Count : 0); - //this.GroupsCount = (byte)(this.Groups != null ? this.Groups.Count : 0); - //this.ChildrenCount = (byte)(this.p1data != null ? this.p1data.Count : 0); // write structure data writer.Write(this.VFT); @@ -2385,15 +2368,15 @@ namespace CodeWalker.GameFiles writer.Write(this.Unknown_1Ch); writer.Write(this.ArticulatedBodyTypePointer); writer.Write(this.Unknown_28h_Pointer); - //writer.WriteBlock(this.Unknown_30h); //TODO: fix this! - //writer.WriteBlock(this.Unknown_40h); - //writer.WriteBlock(this.Unknown_50h); - //writer.WriteBlock(this.Unknown_60h); - //writer.WriteBlock(this.Unknown_70h); - //writer.WriteBlock(this.Unknown_80h); - //writer.WriteBlock(this.Unknown_90h); - //writer.WriteBlock(this.Unknown_A0h); - //writer.WriteBlock(this.Unknown_B0h); + writer.Write(this.Unknown_30h); + writer.Write(this.Unknown_40h); + writer.Write(this.Unknown_50h); + writer.Write(this.Unknown_60h); + writer.Write(this.Unknown_70h); + writer.Write(this.Unknown_80h); + writer.Write(this.Unknown_90h); + writer.Write(this.Unknown_A0h); + writer.Write(this.Unknown_B0h); writer.Write(this.GroupNamesPointer); writer.Write(this.GroupsPointer); writer.Write(this.ChildrenPointer); @@ -2426,17 +2409,37 @@ namespace CodeWalker.GameFiles { var list = new List(); if (ArticulatedBodyType != null) list.Add(ArticulatedBodyType); - //if (Unknown_28h_Data != null) list.Add(Unknown_28h_Data); //TODO: fix + if (Unknown_28h_Data != null) + { + Unknown_28h_DataBlock = new ResourceSystemStructBlock(Unknown_28h_Data); + list.Add(Unknown_28h_DataBlock); + } if (Groups != null) list.Add(Groups); if (Children != null) list.Add(Children); if (Archetype1 != null) list.Add(Archetype1); if (Archetype2 != null) list.Add(Archetype2); if (Bound != null) list.Add(Bound); - //if (Unknown_F0h_Data != null) list.Add(Unknown_F0h_Data); - //if (Unknown_F8h_Data != null) list.Add(Unknown_F8h_Data); + if (InertiaTensors != null) + { + InertiaTensorsBlock = new ResourceSystemStructBlock(InertiaTensors); + list.Add(InertiaTensorsBlock); + } + if (Unknown_F8h_Data != null) + { + Unknown_F8h_DataBlock = new ResourceSystemStructBlock(Unknown_F8h_Data); + list.Add(Unknown_F8h_DataBlock); + } if (FragTransforms != null) list.Add(FragTransforms); - //if (Unknown_108h_Data != null) list.Add(Unknown_108h_Data); - //if (Unknown_110h_Data != null) list.Add(Unknown_110h_Data); + if (Unknown_108h_Data != null) + { + Unknown_108h_DataBlock = new ResourceSystemStructBlock(Unknown_108h_Data); + list.Add(Unknown_108h_DataBlock); + } + if (Unknown_110h_Data != null) + { + Unknown_110h_DataBlock = new ResourceSystemStructBlock(Unknown_110h_Data); + list.Add(Unknown_110h_DataBlock); + } if (GroupNames != null) list.Add(GroupNames); return list.ToArray(); } @@ -2481,8 +2484,8 @@ namespace CodeWalker.GameFiles public uint Unknown_70h { get; set; } public uint Unknown_74h { get; set; } public ulong JointTypesPointer { get; set; } - public ulong p2 { get; set; } - public byte c1 { get; set; } + public ulong UnknownPointer { get; set; } + public byte UnknownCount { get; set; } public byte JointTypesCount { get; set; } public ushort Unknown_8Ah { get; set; } public uint Unknown_8Ch { get; set; } @@ -2497,7 +2500,12 @@ namespace CodeWalker.GameFiles // reference data public ResourcePointerArray64 JointTypes { get; set; } - public Vector4[] p2data { get; set; } + public Vector4[] UnknownData { get; set; } + + + + private ResourceSystemStructBlock UnknownDataBlock = null;//only used for saving + /// /// Reads the data-block from a stream. @@ -2536,8 +2544,8 @@ namespace CodeWalker.GameFiles this.Unknown_70h = reader.ReadUInt32(); this.Unknown_74h = reader.ReadUInt32(); this.JointTypesPointer = reader.ReadUInt64(); - this.p2 = reader.ReadUInt64(); - this.c1 = reader.ReadByte(); + this.UnknownPointer = reader.ReadUInt64(); + this.UnknownCount = reader.ReadByte(); this.JointTypesCount = reader.ReadByte(); this.Unknown_8Ah = reader.ReadUInt16(); this.Unknown_8Ch = reader.ReadUInt32(); @@ -2555,11 +2563,7 @@ namespace CodeWalker.GameFiles this.JointTypesPointer, // offset this.JointTypesCount ); - //this.p2data = reader.ReadBlockAt>( - // this.p2, // offset - // this.c1 - //); - this.p2data = reader.ReadStructsAt(this.p2, this.c1); + this.UnknownData = reader.ReadStructsAt(this.UnknownPointer, this.UnknownCount); } @@ -2570,9 +2574,9 @@ namespace CodeWalker.GameFiles { // update structure data this.JointTypesPointer = (ulong)(this.JointTypes != null ? this.JointTypes.FilePosition : 0); - //this.p2 = (ulong)(this.p2data != null ? this.p2data.Position : 0); //TODO:fix - ////this.c1 = (byte)(this.p2data != null ? this.p2data.Count : 0); - ////this.c2 = (byte)(this.p1data != null ? this.p1data.Count : 0); + this.UnknownPointer = (ulong)(this.UnknownDataBlock != null ? this.UnknownDataBlock.FilePosition : 0); + this.UnknownCount = (byte)(this.UnknownDataBlock != null ? this.UnknownDataBlock.ItemCount : 0); + this.JointTypesCount = (byte)(this.JointTypes != null ? this.JointTypes.Count : 0); // write structure data writer.Write(this.VFT); @@ -2606,8 +2610,8 @@ namespace CodeWalker.GameFiles writer.Write(this.Unknown_70h); writer.Write(this.Unknown_74h); writer.Write(this.JointTypesPointer); - writer.Write(this.p2); - writer.Write(this.c1); + writer.Write(this.UnknownPointer); + writer.Write(this.UnknownCount); writer.Write(this.JointTypesCount); writer.Write(this.Unknown_8Ah); writer.Write(this.Unknown_8Ch); @@ -2628,7 +2632,11 @@ namespace CodeWalker.GameFiles { var list = new List(); if (JointTypes != null) list.Add(JointTypes); - //if (p2data != null) list.Add(p2data); //TODO: fix + if (UnknownData != null) + { + UnknownDataBlock = new ResourceSystemStructBlock(UnknownData); + list.Add(UnknownDataBlock); + } return list.ToArray(); } } @@ -2743,8 +2751,8 @@ namespace CodeWalker.GameFiles public uint Unknown_9Ch { get; set; } public uint Unknown_A0h { get; set; } public uint Unknown_A4h { get; set; } - public uint Unknown_A8h { get; set; } // 0x4CBEBC20 - public uint Unknown_ACh { get; set; } // 0xCCBEBC20 + public uint Unknown_A8h { get; set; } // 0x4CBEBC20 (float: 1.0E8) + public uint Unknown_ACh { get; set; } // 0xCCBEBC20 (float:-1.0E8) /// /// Reads the data-block from a stream. @@ -3028,7 +3036,7 @@ namespace CodeWalker.GameFiles { public override long BlockLength { - get { return 32 + Data.Length; } + get { return 32 + ((Data?.Length ?? 0) * 64); } } // structure data @@ -3036,11 +3044,10 @@ namespace CodeWalker.GameFiles public uint Unknown_04h { get; set; } // 0x00000001 public uint Unknown_08h { get; set; } // 0x00000000 public uint Unknown_0Ch { get; set; } // 0x00000000 - public uint cnt { get; set; } + public uint DataCount { get; set; } public uint Unknown_14h { get; set; } // 0x00000000 public uint Unknown_18h { get; set; } // 0x00000000 public uint Unknown_1Ch { get; set; } // 0x00000000 - //public ResourceSimpleArray Data { get; set; } public Matrix[] Data { get; set; } /// @@ -3053,14 +3060,11 @@ namespace CodeWalker.GameFiles this.Unknown_04h = reader.ReadUInt32(); this.Unknown_08h = reader.ReadUInt32(); this.Unknown_0Ch = reader.ReadUInt32(); - this.cnt = reader.ReadUInt32(); + this.DataCount = reader.ReadUInt32(); this.Unknown_14h = reader.ReadUInt32(); this.Unknown_18h = reader.ReadUInt32(); this.Unknown_1Ch = reader.ReadUInt32(); - //this.Data = reader.ReadBlock>( - // cnt - // ); - this.Data = reader.ReadStructsAt((ulong)reader.Position, cnt); + this.Data = reader.ReadStructsAt((ulong)reader.Position, DataCount); } @@ -3069,24 +3073,20 @@ namespace CodeWalker.GameFiles /// public override void Write(ResourceDataWriter writer, params object[] parameters) { + DataCount = (uint)(Data?.Length ?? 0); + // write structure data writer.Write(this.VFT); writer.Write(this.Unknown_04h); writer.Write(this.Unknown_08h); writer.Write(this.Unknown_0Ch); - writer.Write(this.cnt); + writer.Write(this.DataCount); writer.Write(this.Unknown_14h); writer.Write(this.Unknown_18h); writer.Write(this.Unknown_1Ch); - //writer.WriteBlock(this.Data); //TODO: fix + writer.WriteStructs(Data); } - public override Tuple[] GetParts() - { - return new Tuple[] { - //new Tuple(32, Data) //TODO: fix - }; - } } [TypeConverter(typeof(ExpandableObjectConverter))] public class FragPhysArchetype : ResourceSystemBlock @@ -3132,6 +3132,10 @@ namespace CodeWalker.GameFiles public string Name { get; set; } public Bounds Bound { get; set; } + + private string_r NameBlock = null;//used only when saving + + /// /// Reads the data-block from a stream. /// @@ -3184,7 +3188,7 @@ namespace CodeWalker.GameFiles public override void Write(ResourceDataWriter writer, params object[] parameters) { // update structure data - //this.NamePointer = (ulong)(this.Name != null ? this.Name.Position : 0); //TODO:fix + this.NamePointer = (ulong)(this.NameBlock != null ? this.NameBlock.FilePosition : 0); this.BoundPointer = (ulong)(this.Bound != null ? this.Bound.FilePosition : 0); // write structure data @@ -3210,14 +3214,14 @@ namespace CodeWalker.GameFiles writer.Write(this.Unknown_54h); writer.Write(this.Unknown_58h); writer.Write(this.Unknown_5Ch); - //writer.WriteBlock(this.Unknown_60h); //TODO: fix! - //writer.WriteBlock(this.Unknown_70h); - //writer.WriteBlock(this.Unknown_80h); - //writer.WriteBlock(this.Unknown_90h); - //writer.WriteBlock(this.Unknown_A0h); - //writer.WriteBlock(this.Unknown_B0h); - //writer.WriteBlock(this.Unknown_C0h); - //writer.WriteBlock(this.Unknown_D0h); + writer.Write(this.Unknown_60h); + writer.Write(this.Unknown_70h); + writer.Write(this.Unknown_80h); + writer.Write(this.Unknown_90h); + writer.Write(this.Unknown_A0h); + writer.Write(this.Unknown_B0h); + writer.Write(this.Unknown_C0h); + writer.Write(this.Unknown_D0h); } /// @@ -3226,7 +3230,11 @@ namespace CodeWalker.GameFiles public override IResourceBlock[] GetReferences() { var list = new List(); - //if (Name != null) list.Add(Name); //TODO: fix! + if (Name != null) + { + NameBlock = (string_r)Name; + list.Add(NameBlock); + } if (Bound != null) list.Add(Bound); return list.ToArray(); } @@ -3586,11 +3594,9 @@ namespace CodeWalker.GameFiles public byte Unknown_4Chb { get; set; } public byte Unknown_4Chc { get; set; } public byte Unknown_4Chd { get; set; } - //public uint Unknown_4Ch { get; set; } public byte Unknown_50ha { get; set; } public byte Unknown_50hb { get; set; }//0xFF public ushort Unknown_50hc { get; set; }//0 - //public uint Unknown_50h { get; set; } public float Unknown_54h { get; set; } public float Unknown_58h { get; set; } public float Unknown_5Ch { get; set; } diff --git a/CodeWalker.Core/GameFiles/Resources/ResourceData.cs b/CodeWalker.Core/GameFiles/Resources/ResourceData.cs index 8818724..c34bc44 100644 --- a/CodeWalker.Core/GameFiles/Resources/ResourceData.cs +++ b/CodeWalker.Core/GameFiles/Resources/ResourceData.cs @@ -513,7 +513,14 @@ namespace CodeWalker.GameFiles Marshal.FreeHGlobal(ptr); Write(arr); } - + public void WriteStructs(T[] val) where T : struct + { + if (val == null) return; + foreach (var v in val) + { + WriteStruct(v); + } + } } From 75748ad3d0440df4f9b91e060b4b3e1d231e0168 Mon Sep 17 00:00:00 2001 From: dexy Date: Mon, 28 Jan 2019 23:51:52 +1100 Subject: [PATCH 130/158] Fixed bugs in RSC Meta/XML conversion --- CodeWalker.Core/GameFiles/GameFileCache.cs | 84 ++++++++++++------- CodeWalker.Core/GameFiles/MetaTypes/Meta.cs | 7 ++ .../GameFiles/MetaTypes/MetaBuilder.cs | 53 ++++++++---- .../GameFiles/MetaTypes/MetaXml.cs | 10 +-- .../GameFiles/MetaTypes/XmlMeta.cs | 29 ++++++- 5 files changed, 130 insertions(+), 53 deletions(-) diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index 3877ffd..2cf9019 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -2690,41 +2690,67 @@ namespace CodeWalker.GameFiles { foreach (RpfEntry entry in file.AllEntries) { - try + //try { var n = entry.NameLower; - if (n.EndsWith(".ymap")) + //if (n.EndsWith(".ymap")) + //{ + // UpdateStatus(string.Format(entry.Path)); + // YmapFile ymapfile = RpfMan.GetFile(entry); + // if ((ymapfile != null) && (ymapfile.Meta != null)) + // { + // MetaTypes.EnsureMetaTypes(ymapfile.Meta); + // } + //} + //else if (n.EndsWith(".ytyp")) + //{ + // UpdateStatus(string.Format(entry.Path)); + // YtypFile ytypfile = RpfMan.GetFile(entry); + // if ((ytypfile != null) && (ytypfile.Meta != null)) + // { + // MetaTypes.EnsureMetaTypes(ytypfile.Meta); + // } + //} + //else if (n.EndsWith(".ymt")) + //{ + // UpdateStatus(string.Format(entry.Path)); + // YmtFile ymtfile = RpfMan.GetFile(entry); + // if ((ymtfile != null) && (ymtfile.Meta != null)) + // { + // MetaTypes.EnsureMetaTypes(ymtfile.Meta); + // } + //} + + + if (n.EndsWith(".ymap") || n.EndsWith(".ytyp") || n.EndsWith(".ymt")) { + var rfe = entry as RpfResourceFileEntry; + if (rfe == null) continue; + UpdateStatus(string.Format(entry.Path)); - YmapFile ymapfile = RpfMan.GetFile(entry); - if ((ymapfile != null) && (ymapfile.Meta != null)) - { - MetaTypes.EnsureMetaTypes(ymapfile.Meta); - } - } - else if (n.EndsWith(".ytyp")) - { - UpdateStatus(string.Format(entry.Path)); - YtypFile ytypfile = RpfMan.GetFile(entry); - if ((ytypfile != null) && (ytypfile.Meta != null)) - { - MetaTypes.EnsureMetaTypes(ytypfile.Meta); - } - } - else if (n.EndsWith(".ymt")) - { - UpdateStatus(string.Format(entry.Path)); - YmtFile ymtfile = RpfMan.GetFile(entry); - if ((ymtfile != null) && (ymtfile.Meta != null)) - { - MetaTypes.EnsureMetaTypes(ymtfile.Meta); - } + + var data = rfe.File.ExtractFile(rfe); + ResourceDataReader rd = new ResourceDataReader(rfe, data); + var meta = rd.ReadBlock(); + var xml = MetaXml.GetXml(meta); + var xdoc = new XmlDocument(); + xdoc.LoadXml(xml); + var meta2 = XmlMeta.GetMeta(xdoc); + var xml2 = MetaXml.GetXml(meta2); + + if (xml.Length != xml2.Length) + { } + if ((xml != xml2)&&(!n.EndsWith("srl.ymt") && !n.StartsWith("des_"))) + { } + } + + } - catch (Exception ex) - { - UpdateStatus("Error! " + ex.ToString()); - } + //catch (Exception ex) + //{ + // UpdateStatus("Error! " + ex.ToString()); + //} } } diff --git a/CodeWalker.Core/GameFiles/MetaTypes/Meta.cs b/CodeWalker.Core/GameFiles/MetaTypes/Meta.cs index b636eef..df90f1b 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/Meta.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/Meta.cs @@ -929,6 +929,13 @@ namespace CodeWalker.GameFiles public uint PointerDataIndex { get { return (Ptr0 & 0xFFF) - 1; } } public uint PointerDataOffset { get { return ((Ptr0 >> 12) & 0xFFFFF); } } + + public DataBlockPointer(int blockId, int offset) + { + Ptr0 = ((uint)blockId & 0xFFF) | (((uint)offset & 0xFFFFF) << 12); + Ptr1 = 0; + } + public override string ToString() { return "DataBlockPointer: " + Ptr0.ToString() + ", " + Ptr1.ToString(); diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaBuilder.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaBuilder.cs index 155c64c..5833e57 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaBuilder.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaBuilder.cs @@ -27,6 +27,10 @@ namespace CodeWalker.GameFiles } } } + return AddBlock(type); + } + public MetaBuilderBlock AddBlock(MetaName type) + { MetaBuilderBlock b = new MetaBuilderBlock(); b.StructureNameHash = type; b.Index = Blocks.Count; @@ -91,12 +95,7 @@ namespace CodeWalker.GameFiles MetaBuilderBlock block = EnsureBlock(MetaName.STRING); byte[] data = Encoding.ASCII.GetBytes(str); int datalen = data.Length; - int newlen = datalen; - int lenrem = newlen % 16; - if (lenrem != 0) //need to pad the data length up to multiple of 16. - { - newlen += (16 - lenrem); - } + int newlen = datalen + 1; //include null terminator byte[] newdata = new byte[newlen]; Buffer.BlockCopy(data, 0, newdata, 0, datalen); int offs = block.TotalSize; @@ -104,7 +103,7 @@ namespace CodeWalker.GameFiles MetaBuilderPointer r = new MetaBuilderPointer(); r.BlockID = block.Index + 1; r.Offset = offs;// (idx * data.Length); - r.Length = datalen; //actual length of string. + r.Length = datalen; //actual length of string. (not incl null terminator) return r; } @@ -193,6 +192,14 @@ namespace CodeWalker.GameFiles var ptr = AddString(str); return new CharPointer(ptr); } + public DataBlockPointer AddDataBlockPtr(byte[] data, MetaName type) + { + var block = AddBlock(type); + int offs = block.TotalSize;//should always be 0... + int idx = block.AddItem(data); + var ptr = new DataBlockPointer(block.Index + 1, offs); + return ptr; + } public Array_StructurePointer AddPointerArray(MetaPOINTER[] arr) @@ -351,19 +358,35 @@ namespace CodeWalker.GameFiles m.RootBlockIndex = 1; //assume first block is root. todo: make adjustable? - m.StructureInfos = new ResourceSimpleArray(); - foreach (var si in StructureInfos.Values) + if (StructureInfos.Count > 0) { - m.StructureInfos.Add(si); + m.StructureInfos = new ResourceSimpleArray(); + foreach (var si in StructureInfos.Values) + { + m.StructureInfos.Add(si); + } + m.StructureInfosCount = (short)m.StructureInfos.Count; + } + else + { + m.StructureInfos = null; + m.StructureInfosCount = 0; } - m.StructureInfosCount = (short)m.StructureInfos.Count; - m.EnumInfos = new ResourceSimpleArray(); - foreach (var ei in EnumInfos.Values) + if (EnumInfos.Count > 0) { - m.EnumInfos.Add(ei); + m.EnumInfos = new ResourceSimpleArray(); + foreach (var ei in EnumInfos.Values) + { + m.EnumInfos.Add(ei); + } + m.EnumInfosCount = (short)m.EnumInfos.Count; + } + else + { + m.EnumInfos = null; + m.EnumInfosCount = 0; } - m.EnumInfosCount = (short)m.EnumInfos.Count; m.DataBlocks = new ResourceSimpleArray(); foreach (var bb in Blocks) diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs index f52b643..3f354bb 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs @@ -234,10 +234,10 @@ namespace CodeWalker.GameFiles OneLineTag(sb, cind, ename, charStr); break; case MetaStructureEntryDataType.DataBlockPointer: - OpenTag(sb, cind, ename); var dataPtr = MetaTypes.ConvertData(data, eoffset); - ErrorXml(sb, cind + 1, "DataBlockPointer not currently supported here!"); //TODO! ymap occludeModels vertices data is this type! - CloseTag(sb, cind, ename); + //need to just get all the data from that block, since this pointer is referring to the whole block! it should be of type BYTE! + var dblock = cont.Meta.GetBlock((int)dataPtr.PointerDataId); + WriteRawArray(sb, dblock.Data, cind, ename, "ByteArray", FormatHexByte, 32); break; case MetaStructureEntryDataType.Float: var floatVal = BitConverter.ToSingle(data, eoffset); @@ -577,14 +577,14 @@ namespace CodeWalker.GameFiles { Meta = meta; - if (meta.StructureInfos != null) + if (meta.StructureInfos?.Data != null) { foreach (var si in meta.StructureInfos) { structInfos[si.StructureNameHash] = si; } } - if (meta.EnumInfos != null) + if (meta.EnumInfos?.Data != null) { foreach (var ei in meta.EnumInfos) { diff --git a/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs b/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs index 7ee5150..49f1130 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/XmlMeta.cs @@ -86,11 +86,11 @@ namespace CodeWalker.GameFiles case MetaStructureEntryDataType.ArrayOfChars: { int offset = entry.DataOffset; - var split = Split(cnode.InnerText, 2); + var split = cnode.InnerText;// Split(cnode.InnerText, 1); for (int j = 0; j < split.Length; j++) { - byte val = Convert.ToByte(split[j], 16); + byte val = (byte)split[j];// Convert.ToByte(split[j], 16); data[offset] = val; offset += sizeof(byte); } @@ -128,7 +128,23 @@ namespace CodeWalker.GameFiles case MetaStructureEntryDataType.DataBlockPointer: { - // TODO + var ns = NumberStyles.HexNumber; + var ic = CultureInfo.InvariantCulture; + var sa = new[] { ' ', '\n' }; + var so = StringSplitOptions.RemoveEmptyEntries; + var split = cnode.InnerText.Trim().Split(sa, so); //split = Split(node.InnerText, 2); to read as unsplitted HEX + var bytes = new List(); + for (int j = 0; j < split.Length; j++) + { + byte val;// = Convert.ToByte(split[j], 10); + if (byte.TryParse(split[j].Trim(), ns, ic, out val)) + { + bytes.Add(val); + } + } + var ptr = mb.AddDataBlockPtr(bytes.ToArray(), MetaName.BYTE); + var byt = MetaTypes.ConvertToBytes(ptr); + Buffer.BlockCopy(byt, 0, data, entry.DataOffset, byt.Length); break; } @@ -735,8 +751,13 @@ namespace CodeWalker.GameFiles private static int GetEnumInt(MetaName type, string enumString, MetaStructureEntryDataType dataType) { - var infos = MetaTypes.GetEnumInfo(type); + var intval = 0; + if (int.TryParse(enumString, out intval)) + { + return intval; //it's already an int.... maybe enum not found or has no entries... or original value didn't match anything + } + var infos = MetaTypes.GetEnumInfo(type); if (infos == null) { return 0; From 2622ea08b68e63d2f552342d8d826dd02d0c488c Mon Sep 17 00:00:00 2001 From: dexy Date: Tue, 29 Jan 2019 00:29:59 +1100 Subject: [PATCH 131/158] Added Save method to YptFile --- .../GameFiles/FileTypes/YptFile.cs | 7 +++ CodeWalker.Core/GameFiles/GameFileCache.cs | 55 +++++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/CodeWalker.Core/GameFiles/FileTypes/YptFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YptFile.cs index 3a6530c..ae00043 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YptFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YptFile.cs @@ -97,6 +97,13 @@ namespace CodeWalker.GameFiles } + public byte[] Save() + { + byte[] data = ResourceBuilder.Build(PtfxList, 68); //ypt is type/version 68... + + return data; + } + } diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index 2cf9019..6a6a157 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -182,6 +182,7 @@ namespace CodeWalker.GameFiles //TestYdrs(); //TestYdds(); //TestYfts(); + //TestYpts(); //TestYmaps(); //TestPlacements(); //TestDrawables(); @@ -3264,6 +3265,60 @@ namespace CodeWalker.GameFiles if (errorfiles.Count > 0) { } } + public void TestYpts() + { + var errorfiles = new List(); + foreach (RpfFile file in AllRpfs) + { + foreach (RpfEntry entry in file.AllEntries) + { + //try + { + if (entry.NameLower.EndsWith(".ypt")) + { + UpdateStatus(string.Format(entry.Path)); + YptFile ypt = null; + try + { + ypt = RpfMan.GetFile(entry); + } + catch (Exception ex) + { + UpdateStatus("Error! " + ex.ToString()); + errorfiles.Add(entry); + } + if ((ypt != null) && (ypt.PtfxList != null)) + { + var fentry = entry as RpfFileEntry; + if (fentry == null) + { continue; } //shouldn't happen + + var bytes = ypt.Save(); + + + string origlen = TextUtil.GetBytesReadable(fentry.FileSize); + string bytelen = TextUtil.GetBytesReadable(bytes.Length); + + var ypt2 = new YptFile(); + RpfFile.LoadResourceFile(ypt2, bytes, 68); + + if (ypt2.PtfxList == null) + { continue; } + if (ypt2.PtfxList.Name?.Value != ypt.PtfxList.Name?.Value) + { continue; } + + } + } + } + //catch (Exception ex) + //{ + // UpdateStatus("Error! " + ex.ToString()); + //} + } + } + if (errorfiles.Count > 0) + { } + } public void TestYmaps() { foreach (RpfFile file in AllRpfs) From dd97b65933263c1f743294e2d86868efde8998ac Mon Sep 17 00:00:00 2001 From: dexy Date: Tue, 29 Jan 2019 00:35:23 +1100 Subject: [PATCH 132/158] Added Save methods to YvrFile and YwrFile --- CodeWalker.Core/GameFiles/FileTypes/YvrFile.cs | 7 +++++++ CodeWalker.Core/GameFiles/FileTypes/YwrFile.cs | 7 +++++++ CodeWalker.Core/GameFiles/Resources/WaypointRecord.cs | 6 +++--- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/YvrFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YvrFile.cs index 6c93216..eaf07a0 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YvrFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YvrFile.cs @@ -49,6 +49,13 @@ namespace CodeWalker.GameFiles } + public byte[] Save() + { + byte[] data = ResourceBuilder.Build(Records, 1); //yvr is type/version 1... + + return data; + } + } } diff --git a/CodeWalker.Core/GameFiles/FileTypes/YwrFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YwrFile.cs index cace6fb..3e82b08 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YwrFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YwrFile.cs @@ -49,6 +49,13 @@ namespace CodeWalker.GameFiles } + public byte[] Save() + { + byte[] data = ResourceBuilder.Build(Waypoints, 1); //ywr is type/version 1... + + return data; + } + } } diff --git a/CodeWalker.Core/GameFiles/Resources/WaypointRecord.cs b/CodeWalker.Core/GameFiles/Resources/WaypointRecord.cs index 66af7db..96fc785 100644 --- a/CodeWalker.Core/GameFiles/Resources/WaypointRecord.cs +++ b/CodeWalker.Core/GameFiles/Resources/WaypointRecord.cs @@ -43,9 +43,9 @@ namespace CodeWalker.GameFiles { base.Write(writer, parameters); - //// update structure data - //this.EntriesPointer = (ulong)(this.Entries?.Position ?? 0); - //this.EntriesCount = (uint)(this.Entries?.Count ?? 0); + // update structure data + this.EntriesPointer = (ulong)(this.Entries?.FilePosition ?? 0); + this.EntriesCount = (uint)(this.Entries?.Count ?? 0); // write structure data writer.Write(this.Unknown_10h); From 7fe0bef6bd395aa4962c52cda3a6ee8e31fde367 Mon Sep 17 00:00:00 2001 From: dexy Date: Tue, 19 Feb 2019 20:04:08 +1100 Subject: [PATCH 133/158] NavMesh generator progress --- .../Panels/GenerateNavMeshPanel.Designer.cs | 2 +- Project/Panels/GenerateNavMeshPanel.cs | 912 +++++++++++++++++- Project/ProjectForm.Designer.cs | 17 +- 3 files changed, 872 insertions(+), 59 deletions(-) diff --git a/Project/Panels/GenerateNavMeshPanel.Designer.cs b/Project/Panels/GenerateNavMeshPanel.Designer.cs index 270ce69..c6b9e99 100644 --- a/Project/Panels/GenerateNavMeshPanel.Designer.cs +++ b/Project/Panels/GenerateNavMeshPanel.Designer.cs @@ -62,7 +62,7 @@ this.MaxTextBox.Name = "MaxTextBox"; this.MaxTextBox.Size = new System.Drawing.Size(177, 20); this.MaxTextBox.TabIndex = 48; - this.MaxTextBox.Text = "100, 100"; + this.MaxTextBox.Text = "50, 50"; // // label1 // diff --git a/Project/Panels/GenerateNavMeshPanel.cs b/Project/Panels/GenerateNavMeshPanel.cs index be39eec..3a3b589 100644 --- a/Project/Panels/GenerateNavMeshPanel.cs +++ b/Project/Panels/GenerateNavMeshPanel.cs @@ -74,7 +74,6 @@ namespace CodeWalker.Project.Panels // return; //} - var path = ProjectForm.CurrentProjectFile.GetFullFilePath("navmeshes") + "\\"; GenerateButton.Enabled = false; @@ -112,6 +111,8 @@ namespace CodeWalker.Project.Panels var vert = new GenVertex(); var builder = new YnvBuilder(); + var polys = new List(); + for (int x = imin.X; x <= imax.X; x++) //generate verts for each world cell { for (int y = imin.Y; y <= imax.Y; y++) @@ -122,8 +123,8 @@ namespace CodeWalker.Project.Panels var cellmin = space.Grid.GetWorldPos(gi); var cellmax = cellmin + SpaceGrid.CellSize; var vertexCountXY = (cellmax - cellmin) / density; - int vertexCountX = (int)vertexCountXY.X; - int vertexCountY = (int)vertexCountXY.Y; + int vertexCountX = (int)vertexCountXY.X+1; + int vertexCountY = (int)vertexCountXY.Y+1; //int vertexCountTot = vertexCountX * vertexCountY; vgrid.BeginGrid(vertexCountX, vertexCountY); cellmin.Z = 0.0f;//min probably not needed here @@ -154,6 +155,7 @@ namespace CodeWalker.Project.Panels break; } Thread.Sleep(20);//~50fps should be fine + ybn = gameFileCache.GetYbn(boundsitem.Name); //try queue it again.. } } if (ybn.Loaded && (ybn.Bounds != null)) @@ -181,27 +183,30 @@ namespace CodeWalker.Project.Panels ray.Position.Z = cellmax.Z + 1.0f;//start the ray at the top of the cell var intres = space.RayIntersect(ray, float.MaxValue, layers); hitTestCount++; - while (intres.Hit && (intres.HitDist > 0)) + while (intres.Hit)// && (intres.HitDist > 0)) { - hitCount++; - vert.Position = intres.Position; - vert.Normal = intres.Normal; - vert.Material = intres.Material.Type; - vert.PolyFlags = intres.Material.PolyFlags; - vert.PrevIDX = -1; - vert.PrevIDY = -1; - vert.NextIDX = -1; - vert.NextIDY = -1; - vert.CompPrevX = false; - vert.CompPrevY = false; - vert.CompNextX = false; - vert.CompNextY = false; - vert.PolyID = -1; - vgrid.AddVertex(ref vert); + if (intres.HitDist > 0) + { + hitCount++; + vert.Position = intres.Position; + vert.Normal = intres.Normal; + vert.Material = intres.Material.Type; + vert.PolyFlags = intres.Material.PolyFlags; + vert.PrevIDX = -1; + vert.PrevIDY = -1; + vert.NextIDX = -1; + vert.NextIDY = -1; + vert.CompPrevX = false; + vert.CompPrevY = false; + vert.CompNextX = false; + vert.CompNextY = false; + vert.PolyID = -1; + vgrid.AddVertex(ref vert); + if (vgrid.CurVertexCount > 15) //too many hits? + { break; } + } //continue down until no more hits..... step by 3m - if (vgrid.CurVertexCount > 15) //too many hits? - { break; } ray.Position.Z = intres.Position.Z - 3.0f; intres = space.RayIntersect(ray, float.MaxValue, layers); } @@ -218,32 +223,574 @@ namespace CodeWalker.Project.Panels vgrid.ConnectVertices(); - var polys = vgrid.GenPolys(); - newCount += polys.Count; + var genPolys = vgrid.GenPolys2(); + polys.AddRange(genPolys); - foreach (var poly in polys) - { - if (poly.Vertices == null) continue; + newCount += genPolys.Count; - var ypoly = builder.AddPoly(poly.Vertices); - - - ypoly.B02_IsFootpath = (poly.Material.Index == 1); - - ypoly.B18_IsRoad = (poly.Material.Index == 4);//4,5,6 - - - } } } + //try merge generated polys into bigger ones, while keeping convex! + UpdateStatus("Building edge dictionary..."); + var edgeDict = new Dictionary(); + var tryGetEdge = new Func((v1, v2) => + { + var key1 = new GenEdgeKey(v1, v2); + var key2 = new GenEdgeKey(v2, v1); + GenEdge edge = null; + if (edgeDict.TryGetValue(key1, out edge) || edgeDict.TryGetValue(key2, out edge)) + { + return edge; + } + return null; + }); + var tryRemoveEdge = new Action((v1, v2) => + { + var key1 = new GenEdgeKey(v1, v2); + var key2 = new GenEdgeKey(v2, v1); + edgeDict.Remove(key1); + edgeDict.Remove(key2); + }); + var buildEdgeDict = new Action(() => + { + for (int p = 0; p < polys.Count; p++) //build edge dict + { + var poly = polys[p]; + poly.Index = p; + for (int i = 0; i < poly.Vertices.Length; i++) + { + var ip = (i + 1) % poly.Vertices.Length; + var edge = tryGetEdge(poly.Vertices[i], poly.Vertices[ip]); + if (edge != null) + { + if (edge.Poly2 != null) + { } //edge already assigned a second poly! shouldn't happen... + edge.Poly2 = poly; + edge.EdgeIndex2 = i; + } + else + { + var key = new GenEdgeKey(poly.Vertices[i], poly.Vertices[ip]); + edge = new GenEdge(poly, i); + edgeDict[key] = edge; + } + } + } + }); + buildEdgeDict(); + + UpdateStatus("Merging polygons..."); + float plthresh = 0.3f;//threshold for plane dist test + float dpthresh = 0.75f;//threshold for plane normals test + float dthresh = 6.0f;//absolute distance thresh + for (int p = 0; p < polys.Count; p++) + { + //UpdateStatus("Merging polygons... (" + p.ToString() + "/" + polys.Count.ToString() + ")"); + var poly = polys[p]; + if (poly == null) continue; + if (poly.Merged) continue; + var p1cnt = poly.Vertices.Length; + if (p1cnt < 3) continue; + var vplane = new Plane(poly.Vertices[0], poly.Normal); + + var polycenter = poly.GetCenter(); + + for (int i = 0; i < poly.Vertices.Length; i++) + { + var ip = (i + 1) % poly.Vertices.Length; + var eind1 = i; + var edge = tryGetEdge(poly.Vertices[i], poly.Vertices[ip]); + if (edge == null) continue; + var poly2 = edge.Poly1; + var eind2 = edge.EdgeIndex1; + if (poly2 == poly) { poly2 = edge.Poly2; eind2 = edge.EdgeIndex2; } + if (poly2 == poly) continue;//can't merge with itself! redundant edges/verts... + if (poly2 == null) continue; + if (poly2.Merged) continue;//new merged poly will get checked later.. + if (poly.Material.Index != poly2.Material.Index) continue; + if (poly.PolyFlags != poly2.PolyFlags) continue; + + var poly2center = poly2.GetCenter(); + + var npdist = Math.Abs(Plane.DotCoordinate(vplane, poly2center)); + if (npdist > plthresh) continue; + var dpval = Vector3.Dot(poly.Normal, poly2.Normal); + if (dpval < dpthresh) continue; + var dist = (polycenter - poly2center).Length(); + if (dist > dthresh) continue; + + + //if we got here, can merge these 2 polys.... + + + var newverts = new List(); + //add verts from poly1 from 0 to poly1 edge index (ip) + //add verts from poly2 from poly2 edge index+2 to poly2 edge index (wrap/mod!) + //add verts from poly1 from poly1 edge index+2 to last + var p2cnt = poly2.Vertices.Length; + var l2beg = (eind2 + 2) % p2cnt; + var l2end = eind2; + if (l2end < l2beg) l2end += p2cnt; + var l1beg = (eind1 + 2); + if (l1beg > p1cnt) l2end--;//don't add the first vertex again in this case! + for (int j = 0; j <= eind1; j++) newverts.Add(poly.Vertices[j]); + for (int j = l2beg; j <= l2end; j++) newverts.Add(poly2.Vertices[j % p2cnt]); + for (int j = l1beg; j < p1cnt; j++) newverts.Add(poly.Vertices[j]); + + + + + var varr = newverts.ToArray(); + var remredun = true; + while (remredun) + { + remredun = false; + newverts.Clear(); // remove redundant edges! + for (int j = 0; j < varr.Length; j++) + { + var j0 = j - 1; if (j0 < 0) j0 += varr.Length; + var j2 = j + 1; j2 = j2 % varr.Length; + var v0 = varr[j0]; + var v1 = varr[j]; + var v2 = varr[j2]; + if (v0 == v2) + { + if (j2 > j) + { + j = j2; + } + else + { + if (j == varr.Length - 1) + { + newverts = newverts.GetRange(0, newverts.Count - 1); + } + else + { } + j = varr.Length; + } + remredun = true; + } + else + { + newverts.Add(v1); + } + } + varr = newverts.ToArray(); + if (remredun) + { } + } + + + + + + var newpoly = new GenPoly(newverts.ToArray(), poly); + newpoly.Index = polys.Count; + polys.Add(newpoly);//try merge this poly again later... + + + //for all the edges in this new poly, need to update all the values!!! polys and indices! + for (int j = 0; j < newpoly.Vertices.Length; j++) + { + var jp = (j + 1) % newpoly.Vertices.Length; + var v = newpoly.Vertices[j]; + var vp = newpoly.Vertices[jp]; + var tedge = tryGetEdge(v, vp); + if (tedge == null) + { continue; }//shouldn't happen.. + if (tedge.Poly1 == poly) { tedge.Poly1 = newpoly; tedge.EdgeIndex1 = j; } + if (tedge.Poly2 == poly) { tedge.Poly2 = newpoly; tedge.EdgeIndex2 = j; } + if (tedge.Poly1 == poly2) { tedge.Poly1 = newpoly; tedge.EdgeIndex1 = j; } + if (tedge.Poly2 == poly2) { tedge.Poly2 = newpoly; tedge.EdgeIndex2 = j; } + if (tedge.Poly1 == tedge.Poly2) + { } //why does this happen..? probably when an edge can't be removed due to an enclosed poly + } + + //tryRemoveEdge(poly.Vertices[i], poly.Vertices[ip]); + polys[p] = null;//free up some memory..? + polys[poly2.Index] = null; + poly.Merged = true; + poly2.Merged = true; + break;//go to the next poly: don't do more than 1 merge at a time.. + } + + } + + var mergedPolys = new List(); + foreach (var poly in polys) + { + if (poly == null) continue; + if (poly.Merged) continue; + mergedPolys.Add(poly); + } + polys = mergedPolys; + + + UpdateStatus("Merging edges..."); + edgeDict = new Dictionary(); + buildEdgeDict(); + float dpthresh1 = 0.5f; + float dpthresh2 = 0.7f; //try preserve shape more when not attached + foreach (var poly in polys) + { + if (poly?.Vertices == null) continue; + if (poly.Vertices.Length < 5) continue; + for (int i = 1; i < poly.Vertices.Length; i++) + { + var ni = i - 1; + var edge0 = tryGetEdge(poly.Vertices[ni], poly.Vertices[i]); + if (edge0 == null) + { continue; }//really shouldn't happen + var poly0 = (edge0.Poly1 != poly) ? edge0.Poly1 : edge0.Poly2; + var vert0 = poly.Vertices[ni]; + + var ip = (i + 1) % poly.Vertices.Length; + var ip2 = (i + 2) % poly.Vertices.Length; + var edge1 = tryGetEdge(poly.Vertices[i], poly.Vertices[ip]); + if (edge1 == null) + { continue; }//really shouldn't happen + var poly1 = (edge1.Poly1 != poly) ? edge1.Poly1 : edge1.Poly2; + var vert1 = poly.Vertices[ip]; + var verti = poly.Vertices[i]; + var vert2 = poly.Vertices[ip2]; + var dp = Vector3.Dot(Vector3.Normalize(verti - vert0), Vector3.Normalize(vert2 - verti)); + var dp2 = Vector3.Dot(Vector3.Normalize(verti - vert0), Vector3.Normalize(vert1 - verti)); + + var usedpthresh = ((poly0 == null) || (poly0 == poly)) ? dpthresh2 : dpthresh1; + + if ((poly0 != poly1) || (dp < usedpthresh) || (dp2 < -0.05))//can't merge, move on to next edge + { continue; } + + + if ((poly0 != null) && (poly0.Vertices.Length < 5)) + { continue; } + + //remove the relevant vertex from both polys, and start again for this poly (reset i to 1) + poly.RemoveVertex(verti); + poly0?.RemoveVertex(verti);//if poly0==poly, remove same vertex twice? + + + //remove merged edges from edge dict, and add new edge to it + tryRemoveEdge(vert0, verti); + tryRemoveEdge(verti, vert1); + + var key = new GenEdgeKey(vert0, vert1); + var edge = new GenEdge(poly, i-1); + edge.Poly2 = poly0; + edge.EdgeIndex2 = poly0?.FindVertex(vert0) ?? -1; //(edge0.Poly2 != poly0) ? edge0.EdgeIndex1 : edge0.EdgeIndex2; + edgeDict[key] = edge; + + i = 0;//will be incremented to 1 before next loop + if (poly.Vertices.Length < 5) break;//don't make polys disappear! shouldn't happen anyway + } + } + + + + UpdateStatus("Convexifying polygons..."); + mergedPolys = new List(); + var getAngle = new Func((poly, i1, i2) => + { + var edge0 = poly.Vertices[i2] - poly.Vertices[i1]; + return (float)Math.Atan2(edge0.Y, edge0.X); + }); + var getAngleDiff = new Func((a1, a2) => + { + var angldiff = a2 - a1; + if (angldiff > Math.PI) angldiff -= (float)(Math.PI * 2); + if (angldiff < -Math.PI) angldiff += (float)(Math.PI * 2); + return angldiff; + }); + var findInflection = new Func((poly, starti) => + { + var vcnt = poly.Vertices.Length; + var i0 = starti % vcnt; + var i1 = (i0 + 1) % vcnt; + var angl0 = getAngle(poly, i0, i1); + var curangl = angl0; + for (int i = starti+1; i <= vcnt; i++) + { + i0 = i % vcnt; + i1 = (i0 + 1) % vcnt; + angl0 = getAngle(poly, i0, i1); + var angldiff = getAngleDiff(curangl, angl0); + if (angldiff < 0) + { + return i0; + } + curangl = angl0; + } + return -1; + }); + var findIntersection = new Func((poly, i0, i1) => + { + var vcnt = poly.Vertices.Length; + var v0 = poly.Vertices[i0]; + var v1 = poly.Vertices[i1]; + var minx0 = Math.Min(v0.X, v1.X); + var miny0 = Math.Min(v0.Y, v1.Y); + var maxx0 = Math.Max(v0.X, v1.X); + var maxy0 = Math.Max(v0.Y, v1.Y); + for (int i = 1; i < vcnt; i++) + { + var i2 = (i + i0) % vcnt; + var i3 = (i2 + 1) % vcnt; + if (i3 == i1) break; + var v2 = poly.Vertices[i2]; + var v3 = poly.Vertices[i3]; + + if ((v0 == v2) || (v0 == v3) || (v1 == v2) || (v1 == v3)) continue; //don't test if sharing a vertex. + + //https://rosettacode.org/wiki/Find_the_intersection_of_two_lines + float a1 = v1.Y - v0.Y; + float b1 = v0.X - v1.X; + float c1 = a1 * v0.X + b1 * v0.Y; + float a2 = v3.Y - v2.Y; + float b2 = v2.X - v3.X; + float c2 = a2 * v2.X + b2 * v2.Y; + float delta = a1 * b2 - a2 * b1; + if (delta != 0) + { + var deltai = 1.0f / delta; + var vix = (b2 * c1 - b1 * c2) * deltai; + var viy = (a1 * c2 - a2 * c1) * deltai; + + var minx1 = Math.Min(v2.X, v3.X); + var miny1 = Math.Min(v2.Y, v3.Y); + var maxx1 = Math.Max(v2.X, v3.X); + var maxy1 = Math.Max(v2.Y, v3.Y); + + if ((vix >= minx0) && (vix >= minx1) && (vix <= maxx0) && (vix <= maxx1) && + (viy >= miny0) && (viy >= miny1) && (viy <= maxy0) && (viy <= maxy1)) + { + return i2; + } + } + } + return -1; + }); + var findConvexSplit = new Func((poly, starti) => + { + var vcnt = poly.Vertices.Length; + + + //step backwards to find a valid split + var i0 = starti - 1; if (i0 < 0) i0 += vcnt; + var curangl = getAngle(poly, i0, starti); + var prevangl = curangl; + var iok = starti - 2; if (iok < 0) iok += vcnt; + var anyok = false; + for (int i = -2; i >= -vcnt; i--) + { + var i1 = i + starti; if (i1 < 0) i1 += vcnt; //i1 = i1 % vcnt; + var angl0 = getAngle(poly, starti, i1); + var angldiff0 = getAngleDiff(curangl, angl0); + if (angldiff0 < 0) + { + break;//split line would not be convex at starti + } + var i2 = (i1 + 1) % vcnt; + var angl1 = getAngle(poly, i1, i2); + var angldiff1 = getAngleDiff(angl0, angl1); + if (angldiff1 < 0) + { + break;//split line would not be convex at i1 + } + var angl2 = getAngle(poly, i1, i2); + var angldiff2 = getAngleDiff(angl2, prevangl); + if (angldiff2 < 0) + { + break;//this step back is not convex + } + var inti = findIntersection(poly, starti, i1); + if (inti >= 0) + { + break;//split line intersects a poly edge! + } + prevangl = angl2; + anyok = true; + iok = i1; + } + if (anyok) + { + return iok; + } + + + + //couldn't split by stepping backwards... so try split by stepping forwards! + i0 = (starti + 1) % vcnt; + curangl = getAngle(poly, starti, i0); + prevangl = curangl; + iok = (starti + 2) % vcnt; + for (int i = 2; i <= vcnt; i++) + { + var i1 = (i + starti) % vcnt; + var angl0 = getAngle(poly, i1, starti); + var angldiff0 = getAngleDiff(angl0, curangl); + if (angldiff0 < 0) + { + break;//split line would not be convex at starti + } + var i2 = (i1 - 1); if (i2 < 0) i2 += vcnt; + var angl1 = getAngle(poly, i2, i1); + var angldiff1 = getAngleDiff(angl1, angl0); + if (angldiff1 < 0) + { + break;//split line would not be convex at i1 + } + var angl2 = getAngle(poly, i2, i1); + var angldiff2 = getAngleDiff(prevangl, angl2); + if (angldiff2 < 0) + { + break;//this step forward is not convex.. + } + var inti = findIntersection(poly, i1, starti); + if (inti >= 0) + { + break;//split line intersects poly edge! + } + prevangl = angl2; + anyok = true; + iok = i1; + } + if (anyok) + { + return iok | 0x40000000;//set this flag to indicate polys got switched + } + + + + //can't go either way... what now? + { } + + + + + return -1; + }); + foreach (var poly in polys) + { + if (poly?.Vertices == null) continue; + + var infi = findInflection(poly, 0); + var infi1 = infi; + //bool split = false; + + while (infi >= 0) + { + //split = true; + var convi = findConvexSplit(poly, infi); + if (convi >= 0) + { + var flag = 0x40000000; + var reversed = (convi & flag) == flag; + convi = convi & 0x3FFFFFFF;//mask out that flag (don't care about sign bit) + + //make a new poly, starting at convi and ending at spliti + var newverts = new List(); + var vcnt = poly.Vertices.Length; + var endi = infi; + if (endi < convi) endi += vcnt; + for (int i = convi; i <= endi; i++) + { + var i0 = i % vcnt; + newverts.Add(poly.Vertices[i0]); + } + var varr1 = newverts.ToArray(); + + //remove the clipped vertices from the current poly + newverts.Clear(); + if (convi < endi) convi += vcnt; + for (int i = endi; i <= convi; i++) + { + var i0 = i % vcnt; + newverts.Add(poly.Vertices[i0]); + } + var varr2 = newverts.ToArray(); + + + var newpoly = new GenPoly((reversed ? varr2 : varr1), poly); + newpoly.Index = mergedPolys.Count; + mergedPolys.Add(newpoly); + + poly.Vertices = (reversed ? varr1 : varr2); + + infi = findInflection(poly, 0); + infi1 = infi; + } + else + { + //couldn't split at this inflection point, move on to the next... + var infi2 = findInflection(poly, infi); + if (infi2 != infi1) + { + infi = infi2; + } + else + { + infi = -1;//don't get stuck in the loop! + } + } + } + //if (split) continue; + //else + //{ } //poly is already convex.. + + + + + + + poly.Index = mergedPolys.Count; + mergedPolys.Add(poly); + } + + polys = mergedPolys; + edgeDict = new Dictionary(); + buildEdgeDict(); + + newCount = polys.Count; + + + + + + UpdateStatus("Building YNVs..."); + foreach (var poly in polys) + { + if (poly.Vertices == null) continue; + + var ypoly = builder.AddPoly(poly.Vertices); + if (ypoly == null) + { continue; } + + + //TODO: add poly edges! + + ypoly.B02_IsFootpath = (poly.Material.Index == 1); + + ypoly.B18_IsRoad = (poly.Material.Index == 4);//4,5,6 + + + } + + var ynvs = builder.Build(false);//todo:vehicles! + + + + UpdateStatus("Creating YNV files..."); + + var path = ProjectForm.CurrentProjectFile?.GetFullFilePath("navmeshes") + "\\"; foreach (var ynv in ynvs) { var bytes = ynv.Save(); @@ -258,7 +805,7 @@ namespace CodeWalker.Project.Panels nynv.Load(bytes); - ProjectForm.Invoke((MethodInvoker) delegate + ProjectForm.Invoke((MethodInvoker)delegate { ProjectForm.AddYnvToProject(nynv); }); @@ -295,10 +842,52 @@ namespace CodeWalker.Project.Panels } + private struct GenEdgeKey + { + public Vector3 V1; + public Vector3 V2; + public GenEdgeKey(Vector3 v1, Vector3 v2) + { + V1 = v1; + V2 = v2; + } + + //public int V1X; + //public int V1Y; + //public int V1Z; + //public int V2X; + //public int V2Y; + //public int V2Z; + //public GenEdgeKey(Vector3 v1, Vector3 v2) + //{ + // V1X = (int)(v1.X * 100); + // V1Y = (int)(v1.Y * 100); + // V1Z = (int)(v1.Z * 100); + // V2X = (int)(v2.X * 100); + // V2Y = (int)(v2.Y * 100); + // V2Z = (int)(v2.Z * 100); + //} + + } + private class GenEdge { - //public GenPoly From; - //public GenPoly To; + public GenPoly Poly1; + public GenPoly Poly2; + public int EdgeIndex1; + public int EdgeIndex2; + public GenEdge(GenPoly p1, int e1) + { + Poly1 = p1; + EdgeIndex1 = e1; + } + public GenEdge(GenPoly p1, GenPoly p2, int e1, int e2) + { + Poly1 = p1; + Poly2 = p2; + EdgeIndex1 = e1; + EdgeIndex2 = e2; + } } private class GenPoly @@ -311,6 +900,76 @@ namespace CodeWalker.Project.Panels public int[] CornerIndices; public Vector3[] Vertices; //public GenEdge[] Edges; + + public bool Merged = false; + + + public GenPoly() { } + public GenPoly(Vector3[] verts, ref GenVertex vert) + { + Vertices = verts; + Normal = vert.Normal; + Material = vert.Material; + PolyFlags = vert.PolyFlags; + } + public GenPoly(Vector3[] verts, GenPoly orig) + { + Vertices = verts; + Normal = orig.Normal; + Material = orig.Material; + PolyFlags = orig.PolyFlags; + } + + public Vector3 GetCenter() + { + var c = Vector3.Zero; + if (Vertices?.Length > 0) + { + for (int i = 0; i < Vertices.Length; i++) + { + c += Vertices[i]; + } + c /= Vertices.Length; + } + return c; + } + + public int FindVertex(Vector3 v) + { + if (Vertices != null) + { + for (int i = 0; i < Vertices.Length; i++) + { + if (Vertices[i] == v) return i; + } + } + return -1; + } + public void RemoveVertex(Vector3 v) + { + var newverts = new List(); + bool removed = false; + if (Vertices != null) + { + for (int i = 0; i < Vertices.Length; i++) + { + if (Vertices[i] == v) + { + removed = true; + } + else + { + newverts.Add(Vertices[i]); + } + } + } + if (removed) + { + Vertices = newverts.ToArray(); + } + else + { }//probably shouldn't happen + } } private class VertexGrid @@ -397,12 +1056,12 @@ namespace CodeWalker.Project.Panels public void ConnectVertices() { - var connectThresh = 0.2f; + var connectThresh = 0.4f; var density = 0.5f;//to match vertex density (x/y distance) - for (int vx = 1; vx < VertexCountX; vx++) + for (int vx = 0; vx < VertexCountX; vx++) { int px = vx - 1; - for (int vy = 1; vy < VertexCountY; vy++) + for (int vy = 0; vy < VertexCountY; vy++) { int py = vy - 1; int imin = VertexOffsets[vx, vy]; @@ -413,8 +1072,8 @@ namespace CodeWalker.Project.Panels var vn = Vertices[i].Normal; var vxz = vz + (vn.X / Math.Max(vn.Z, 1e-5f)) * density; var vyz = vz + (vn.Y / Math.Max(vn.Z, 1e-5f)) * density; - var prevIDX = FindVertex(px, vy, vxz, connectThresh); - var prevIDY = FindVertex(vx, py, vyz, connectThresh); + var prevIDX = (px < 0) ? -1 : FindVertex(px, vy, vxz, connectThresh); + var prevIDY = (py < 0) ? -1 : FindVertex(vx, py, vyz, connectThresh); var compPrevX = (prevIDX < 0) ? false : CompareVertexTypes(i, prevIDX); var compPrevY = (prevIDY < 0) ? false : CompareVertexTypes(i, prevIDY); Vertices[i].PrevIDX = prevIDX; @@ -588,7 +1247,6 @@ namespace CodeWalker.Project.Panels return polys; } - private void AssignVertices(ref Plane vpl, float plt, int i, int dnx, int dny, int dpy, int dir, GenPoly poly) { int pid = poly.Index; @@ -701,8 +1359,6 @@ namespace CodeWalker.Project.Panels if (corners.Length < 3) { }//debug } - - private void AssignVertices2(ref Plane vpl, float plt, int i, int dnx, int dny, int dpy, int dir, GenPoly poly) { int pid = poly.Index; @@ -882,8 +1538,6 @@ namespace CodeWalker.Project.Panels } - - private void AssignVertices3(ref Plane vpl, float plt, int i, int dir, GenPoly poly) { int pid = poly.Index; @@ -954,6 +1608,166 @@ namespace CodeWalker.Project.Panels + + + + + + + + + + + + public List GenPolys2() + { + List polys = new List(); + + //do marching squares on the grid, assuming each vertex starts a cell + + for (int vx = 0; vx < VertexCountX; vx++) + { + for (int vy = 0; vy < VertexCountY; vy++) + { + int imin = VertexOffsets[vx, vy]; + int imax = VertexCounts[vx, vy] + imin; + for (int i = imin; i < imax; i++) + { + var nidx = Vertices[i].NextIDX; + var nidy = Vertices[i].NextIDY; + var nidxy = -1; + var nidyx = -1; + + + if ((nidx < 0) || (nidy < 0)) continue; //(can't form a square... try with less verts?) + + //try to find the index of the opposite corner... + //there's 2 possibilities, can only form the square if they are both the same... + //what to do if they're different..? just choose one? + + nidxy = Vertices[nidx].NextIDY; + nidyx = Vertices[nidy].NextIDX; + + if (nidxy != nidyx) + { } + + + if (nidxy == -1) + { + if (nidyx == -1) + { continue; } //can't form a square! could use the 3? + nidxy = nidyx; + } + + + bool f0 = CompareVertexTypes(i, nidx); + bool f1 = CompareVertexTypes(nidx, nidxy); + bool f2 = CompareVertexTypes(nidy, nidxy); + bool f3 = CompareVertexTypes(i, nidy); + //bool f4 = CompareVertexTypes(i, nidxy); //diagonal + //bool f5 = CompareVertexTypes(nidx, nidy); //diagonal + + + var v0 = Vertices[i]; + var v1 = Vertices[nidx]; + var v2 = Vertices[nidxy]; + var v3 = Vertices[nidy]; + var p0 = v0.Position; + var p1 = v1.Position; + var p2 = v2.Position; + var p3 = v3.Position; + + var s0 = (p0 + p1) * 0.5f; //edge splits + var s1 = (p1 + p2) * 0.5f; + var s2 = (p2 + p3) * 0.5f; + var s3 = (p3 + p0) * 0.5f; + var sc = (s0 + s2) * 0.5f;//square center + + + + var id = (f0 ? 8 : 0) + (f1 ? 4 : 0) + (f2 ? 2 : 0) + (f3 ? 1 : 0); + switch (id) + { + case 15: //all corners same + polys.Add(new GenPoly(new[] { p0, p1, p2, p3 }, ref v0)); + break; + case 3://single split cases + polys.Add(new GenPoly(new[] { s0, p1, s1 }, ref v1)); + polys.Add(new GenPoly(new[] { s1, p2, p3, p0, s0 }, ref v2)); + break; + case 5: + polys.Add(new GenPoly(new[] { s0, p1, p2, s2 }, ref v1)); + polys.Add(new GenPoly(new[] { s2, p3, p0, s0 }, ref v3)); + break; + case 6: + polys.Add(new GenPoly(new[] { s0, p1, p2, p3, s3 }, ref v1)); + polys.Add(new GenPoly(new[] { s3, p0, s0 }, ref v0)); + break; + case 9: + polys.Add(new GenPoly(new[] { s1, p2, s2 }, ref v2)); + polys.Add(new GenPoly(new[] { s2, p3, p0, p1, s1 }, ref v3)); + break; + case 10: + polys.Add(new GenPoly(new[] { s1, p2, p3, s3 }, ref v2)); + polys.Add(new GenPoly(new[] { s3, p0, p1, s1 }, ref v0)); + break; + case 12: + polys.Add(new GenPoly(new[] { s2, p3, s3 }, ref v3)); + polys.Add(new GenPoly(new[] { s3, p0, p1, p2, s2 }, ref v0)); + break; + case 1://double split cases + polys.Add(new GenPoly(new[] { p0, s0, sc, s2, p3 }, ref v0)); + polys.Add(new GenPoly(new[] { p1, s1, sc, s0 }, ref v1)); + polys.Add(new GenPoly(new[] { p2, s2, sc, s1 }, ref v2)); + break; + case 2: + polys.Add(new GenPoly(new[] { p0, s0, sc, s3 }, ref v0)); + polys.Add(new GenPoly(new[] { p1, s1, sc, s0 }, ref v1)); + polys.Add(new GenPoly(new[] { p2, p3, s3, sc, s1 }, ref v2)); + break; + case 4: + polys.Add(new GenPoly(new[] { p0, s0, sc, s3 }, ref v0)); + polys.Add(new GenPoly(new[] { p1, p2, s2, sc, s0 }, ref v1)); + polys.Add(new GenPoly(new[] { p3, s3, sc, s2 }, ref v3)); + break; + case 8: + polys.Add(new GenPoly(new[] { p0, p1, s1, sc, s3 }, ref v0)); + polys.Add(new GenPoly(new[] { p2, s2, sc, s1 }, ref v2)); + polys.Add(new GenPoly(new[] { p3, s3, sc, s2 }, ref v3)); + break; + case 0: //all corners different? maybe check diagonals? + polys.Add(new GenPoly(new[] { p0, s0, sc, s3 }, ref v0)); + polys.Add(new GenPoly(new[] { p1, s1, sc, s0 }, ref v1)); + polys.Add(new GenPoly(new[] { p2, s2, sc, s1 }, ref v2)); + polys.Add(new GenPoly(new[] { p3, s3, sc, s2 }, ref v3)); + break; + default://shouldn't happen? + break; + } + + + + } + } + } + + + + return polys; + + } + + + + + + + + + + + + private int FindNextID(ref Plane vpl, float plt, int i, int dirnx, int dirny, int dirpy, float slope, out int dx, out int dy) { //find the next vertex along the slope in the given direction @@ -1318,7 +2132,7 @@ namespace CodeWalker.Project.Panels { if (InvokeRequired) { - Invoke(new Action(() => { UpdateStatus(text); })); + BeginInvoke(new Action(() => { UpdateStatus(text); })); } else { diff --git a/Project/ProjectForm.Designer.cs b/Project/ProjectForm.Designer.cs index bf77d6c..f96e4f9 100644 --- a/Project/ProjectForm.Designer.cs +++ b/Project/ProjectForm.Designer.cs @@ -140,6 +140,7 @@ this.AudioRemoveFromProjectMenu = new System.Windows.Forms.ToolStripMenuItem(); this.ToolsMenu = new System.Windows.Forms.ToolStripMenuItem(); this.ToolsManifestGeneratorMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ToolsLODLightsGeneratorMenu = new System.Windows.Forms.ToolStripMenuItem(); this.ToolsNavMeshGeneratorMenu = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); this.ToolsImportMenyooXmlMenu = new System.Windows.Forms.ToolStripMenuItem(); @@ -172,7 +173,6 @@ this.ToolbarSaveButton = new System.Windows.Forms.ToolStripButton(); this.ToolbarSaveAllButton = new System.Windows.Forms.ToolStripButton(); this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); - this.ToolsLODLightsGeneratorMenu = new System.Windows.Forms.ToolStripMenuItem(); this.MainMenu.SuspendLayout(); this.MainToolbar.SuspendLayout(); this.SuspendLayout(); @@ -1079,12 +1079,18 @@ this.ToolsManifestGeneratorMenu.Text = "Manifest Generator..."; this.ToolsManifestGeneratorMenu.Click += new System.EventHandler(this.ToolsManifestGeneratorMenu_Click); // + // ToolsLODLightsGeneratorMenu + // + this.ToolsLODLightsGeneratorMenu.Name = "ToolsLODLightsGeneratorMenu"; + this.ToolsLODLightsGeneratorMenu.Size = new System.Drawing.Size(196, 22); + this.ToolsLODLightsGeneratorMenu.Text = "LOD Lights Generator..."; + this.ToolsLODLightsGeneratorMenu.Click += new System.EventHandler(this.ToolsLODLightsGeneratorMenu_Click); + // // ToolsNavMeshGeneratorMenu // this.ToolsNavMeshGeneratorMenu.Name = "ToolsNavMeshGeneratorMenu"; this.ToolsNavMeshGeneratorMenu.Size = new System.Drawing.Size(196, 22); this.ToolsNavMeshGeneratorMenu.Text = "Nav Mesh Generator..."; - this.ToolsNavMeshGeneratorMenu.Visible = false; this.ToolsNavMeshGeneratorMenu.Click += new System.EventHandler(this.ToolsNavMeshGeneratorMenu_Click); // // toolStripSeparator2 @@ -1336,13 +1342,6 @@ this.toolStripSeparator5.Name = "toolStripSeparator5"; this.toolStripSeparator5.Size = new System.Drawing.Size(6, 25); // - // ToolsLODLightsGeneratorMenu - // - this.ToolsLODLightsGeneratorMenu.Name = "ToolsLODLightsGeneratorMenu"; - this.ToolsLODLightsGeneratorMenu.Size = new System.Drawing.Size(196, 22); - this.ToolsLODLightsGeneratorMenu.Text = "LOD Lights Generator..."; - this.ToolsLODLightsGeneratorMenu.Click += new System.EventHandler(this.ToolsLODLightsGeneratorMenu_Click); - // // ProjectForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); From 3690b082bc057d237a73d81fffcd3484b5804740 Mon Sep 17 00:00:00 2001 From: horstche Date: Wed, 20 Feb 2019 10:41:00 +0100 Subject: [PATCH 134/158] Added vertex shader PNCTT and started implementation of DiffuseSampler2. (#43) Added vertex shader PNCTT and implementation of DiffuseSampler2. --- Rendering/Shaders/BasicShader.cs | 35 ++++++++++++++++---- Shaders/BasicPS.hlsl | 11 +++++++ Shaders/BasicVS_PNCTT.hlsl | 40 +++++++++++++++++++++++ Shaders/CodeWalkerShaders.vcxproj | 10 ++++++ Shaders/CodeWalkerShaders.vcxproj.filters | 1 + 5 files changed, 90 insertions(+), 7 deletions(-) create mode 100644 Shaders/BasicVS_PNCTT.hlsl diff --git a/Rendering/Shaders/BasicShader.cs b/Rendering/Shaders/BasicShader.cs index 216ba6c..b0e51ec 100644 --- a/Rendering/Shaders/BasicShader.cs +++ b/Rendering/Shaders/BasicShader.cs @@ -55,6 +55,10 @@ namespace CodeWalker.Rendering public struct BasicShaderPSGeomVars { public uint EnableTexture; + public uint EnableTexture2; + public uint pad1; + public uint pad2; + public uint pad3; public uint EnableTint; public uint EnableNormalMap; public uint EnableSpecMap; @@ -119,6 +123,7 @@ namespace CodeWalker.Rendering bool disposed = false; VertexShader basicvspnct; + VertexShader basicvspnctt; VertexShader basicvspncct; VertexShader basicvspncctt; VertexShader basicvspnccttt; @@ -168,6 +173,7 @@ namespace CodeWalker.Rendering public BasicShader(Device device) { byte[] vspnctbytes = File.ReadAllBytes("Shaders\\BasicVS_PNCT.cso"); + byte[] vspncttbytes = File.ReadAllBytes("Shaders\\BasicVS_PNCTT.cso"); byte[] vspncctbytes = File.ReadAllBytes("Shaders\\BasicVS_PNCCT.cso"); byte[] vspnccttbytes = File.ReadAllBytes("Shaders\\BasicVS_PNCCTT.cso"); byte[] vspncctttbytes = File.ReadAllBytes("Shaders\\BasicVS_PNCCTTT.cso"); @@ -184,6 +190,7 @@ namespace CodeWalker.Rendering byte[] psbytes = File.ReadAllBytes("Shaders\\BasicPS.cso"); basicvspnct = new VertexShader(device, vspnctbytes); + basicvspnctt = new VertexShader(device, vspncttbytes); basicvspncct = new VertexShader(device, vspncctbytes); basicvspncctt = new VertexShader(device, vspnccttbytes); basicvspnccttt = new VertexShader(device, vspncctttbytes); @@ -214,11 +221,12 @@ namespace CodeWalker.Rendering //supported layouts - requires Position, Normal, Colour, Texcoord layouts.Add(VertexType.Default, new InputLayout(device, vspnctbytes, VertexTypeDefault.GetLayout())); layouts.Add(VertexType.PNCH2, new InputLayout(device, vspnctbytes, VertexTypePNCH2.GetLayout())); - layouts.Add(VertexType.PNCTT, new InputLayout(device, vspnctbytes, VertexTypePNCTT.GetLayout())); - layouts.Add(VertexType.PNCTTT, new InputLayout(device, vspnctbytes, VertexTypePNCTTT.GetLayout())); layouts.Add(VertexType.PBBNCT, new InputLayout(device, vspnctbytes, VertexTypePBBNCT.GetLayout())); - layouts.Add(VertexType.PBBNCTT, new InputLayout(device, vspnctbytes, VertexTypePBBNCTT.GetLayout())); - layouts.Add(VertexType.PBBNCTTT, new InputLayout(device, vspnctbytes, VertexTypePBBNCTTT.GetLayout())); + + layouts.Add(VertexType.PNCTT, new InputLayout(device, vspncttbytes, VertexTypePNCTT.GetLayout())); + layouts.Add(VertexType.PNCTTT, new InputLayout(device, vspncttbytes, VertexTypePNCTTT.GetLayout())); + layouts.Add(VertexType.PBBNCTT, new InputLayout(device, vspncttbytes, VertexTypePBBNCTT.GetLayout())); + layouts.Add(VertexType.PBBNCTTT, new InputLayout(device, vspncttbytes, VertexTypePBBNCTTT.GetLayout())); layouts.Add(VertexType.PNCCT, new InputLayout(device, vspncctbytes, VertexTypePNCCT.GetLayout())); layouts.Add(VertexType.PBBNCCT, new InputLayout(device, vspncctbytes, VertexTypePBBNCCT.GetLayout())); @@ -360,12 +368,14 @@ namespace CodeWalker.Rendering { case VertexType.Default: case VertexType.PNCH2: + case VertexType.PBBNCT: + vs = basicvspnct; + break; case VertexType.PNCTT: case VertexType.PNCTTT: - case VertexType.PBBNCT: case VertexType.PBBNCTT: case VertexType.PBBNCTTT: - vs = basicvspnct; + vs = basicvspnctt; break; case VertexType.PNCCT: case VertexType.PBBNCCT: @@ -515,6 +525,7 @@ namespace CodeWalker.Rendering public override void SetGeomVars(DeviceContext context, RenderableGeometry geom) { RenderableTexture texture = null; + RenderableTexture texture2 = null; RenderableTexture tintpal = null; RenderableTexture bumptex = null; RenderableTexture spectex = null; @@ -568,11 +579,13 @@ namespace CodeWalker.Rendering texture = itex; isdistmap = true; break; + case MetaName.DiffuseSampler2: + texture2 = itex; + break; case MetaName.heightSampler: case MetaName.EnvironmentSampler: //case MetaName.SnowSampler0: //case MetaName.SnowSampler1: - //case MetaName.DiffuseSampler2: //case MetaName.DiffuseSampler3: //case MetaName.DirtSampler: //case MetaName.DirtBumpSampler: @@ -605,6 +618,7 @@ namespace CodeWalker.Rendering bool usediff = ((texture != null) && (texture.ShaderResourceView != null)); + bool usediff2 = ((texture2 != null) && (texture2.ShaderResourceView != null)); bool usebump = ((bumptex != null) && (bumptex.ShaderResourceView != null)); bool usespec = ((spectex != null) && (spectex.ShaderResourceView != null)); bool usedetl = ((detltex != null) && (detltex.ShaderResourceView != null)); @@ -658,6 +672,7 @@ namespace CodeWalker.Rendering PSGeomVars.Vars.EnableTexture = usediff ? 1u : 0u; + PSGeomVars.Vars.EnableTexture2 = usediff2 ? 1u : 0u; PSGeomVars.Vars.EnableTint = pstintflag; PSGeomVars.Vars.EnableNormalMap = usebump ? 1u : 0u; PSGeomVars.Vars.EnableSpecMap = usespec ? 1u : 0u; @@ -706,6 +721,10 @@ namespace CodeWalker.Rendering { detltex.SetPSResource(context, 4); } + if (usediff2) + { + texture2.SetPSResource(context, 5); + } if (usetint) { tintpal.SetVSResource(context, 0); @@ -864,6 +883,7 @@ namespace CodeWalker.Rendering context.PixelShader.SetShaderResource(2, null); context.PixelShader.SetShaderResource(3, null); context.PixelShader.SetShaderResource(4, null); + context.PixelShader.SetShaderResource(5, null); context.VertexShader.SetShaderResource(0, null); context.VertexShader.SetShaderResource(1, null); context.VertexShader.SetShaderResource(2, null); @@ -902,6 +922,7 @@ namespace CodeWalker.Rendering basicps.Dispose(); basicvspnct.Dispose(); + basicvspnctt.Dispose(); basicvspncct.Dispose(); basicvspncctt.Dispose(); basicvspnccttt.Dispose(); diff --git a/Shaders/BasicPS.hlsl b/Shaders/BasicPS.hlsl index ca600f4..9e452cc 100644 --- a/Shaders/BasicPS.hlsl +++ b/Shaders/BasicPS.hlsl @@ -4,6 +4,7 @@ Texture2D Colourmap : register(t0); Texture2D Bumpmap : register(t2); Texture2D Specmap : register(t3); Texture2D Detailmap : register(t4); +Texture2D Colourmap2 : register(t5); SamplerState TextureSS : register(s0); @@ -18,6 +19,10 @@ cbuffer PSSceneVars : register(b0) cbuffer PSGeomVars : register(b2) { uint EnableTexture; + uint EnableTexture2; + uint pad1; + uint pad2; + uint pad3; uint EnableTint; uint EnableNormalMap; uint EnableSpecMap; @@ -74,6 +79,12 @@ float4 main(VS_OUTPUT input) : SV_TARGET c = Colourmap.Sample(TextureSS, texc); + if (EnableTexture2 == 1) + { + float4 c2 = Colourmap2.Sample(TextureSS, input.Texcoord1); + c = c2.a * c2 + (1 - c2.a) * c; + } + if (IsDistMap) c = float4(c.rgb*2, (c.r+c.g+c.b) - 1); if ((IsDecal == 0) && (c.a <= 0.33)) discard; if ((IsDecal == 1) && (c.a <= 0.0)) discard; diff --git a/Shaders/BasicVS_PNCTT.hlsl b/Shaders/BasicVS_PNCTT.hlsl new file mode 100644 index 0000000..a96a23b --- /dev/null +++ b/Shaders/BasicVS_PNCTT.hlsl @@ -0,0 +1,40 @@ +#include "BasicVS.hlsli" + +struct VS_INPUT +{ + float4 Position : POSITION; + float3 Normal : NORMAL; + float2 Texcoord0 : TEXCOORD0; + float2 Texcoord1 : TEXCOORD1; + float4 Colour0 : COLOR0; +}; + + +VS_OUTPUT main(VS_INPUT input, uint iid : SV_InstanceID) +{ + VS_OUTPUT output; + float3 opos = ModelTransform(input.Position.xyz, input.Colour0.xyz, input.Colour0.xyz, iid); + float4 cpos = ScreenTransform(opos); + float3 bnorm = NormalTransform(input.Normal); + float3 btang = 0.5;// NormalTransform(float3(1, 0, 0)); //no tangent to use on this vertex type... + + float4 tnt = ColourTint(input.Colour0.b, 0, iid); //colour tinting if enabled + + float4 lightspacepos; + float shadowdepth = ShadowmapSceneDepth(opos, lightspacepos); + output.LightShadow = lightspacepos; + output.Shadows = float4(shadowdepth, 0, 0, 0); + + output.Position = cpos; + output.CamRelPos = opos; + output.Normal = bnorm; + output.Texcoord0 = input.Texcoord0; + output.Texcoord1 = input.Texcoord1; + output.Texcoord2 = 0.5;// input.Texcoord; + output.Colour0 = input.Colour0; + output.Colour1 = float4(0.5, 0.5, 0.5, 1); //input.Colour; + output.Tint = tnt; + output.Tangent = float4(btang, 1); + output.Bitangent = float4(cross(btang, bnorm), 0); + return output; +} \ No newline at end of file diff --git a/Shaders/CodeWalkerShaders.vcxproj b/Shaders/CodeWalkerShaders.vcxproj index 35be97d..fe475e3 100644 --- a/Shaders/CodeWalkerShaders.vcxproj +++ b/Shaders/CodeWalkerShaders.vcxproj @@ -196,6 +196,16 @@ 4.0 4.0 + + Vertex + 4.0 + Vertex + 4.0 + Vertex + 4.0 + Vertex + 4.0 + Vertex Vertex diff --git a/Shaders/CodeWalkerShaders.vcxproj.filters b/Shaders/CodeWalkerShaders.vcxproj.filters index 6a0df68..4309be7 100644 --- a/Shaders/CodeWalkerShaders.vcxproj.filters +++ b/Shaders/CodeWalkerShaders.vcxproj.filters @@ -22,6 +22,7 @@ + From a11ec59ddab506e48e2fe1211ec43c3a530e5f8e Mon Sep 17 00:00:00 2001 From: dexy Date: Wed, 20 Feb 2019 20:56:04 +1100 Subject: [PATCH 135/158] Optimised BasicShaderPSGeomVars for DiffuseSampler2, added BasicVS_PNCTT.cso to source control --- Rendering/Shaders/BasicShader.cs | 9 ++------- Shaders/BasicPS.cso | Bin 10520 -> 10732 bytes Shaders/BasicPS.hlsl | 10 +++------- Shaders/BasicVS_PNCTT.cso | Bin 0 -> 9952 bytes 4 files changed, 5 insertions(+), 14 deletions(-) create mode 100644 Shaders/BasicVS_PNCTT.cso diff --git a/Rendering/Shaders/BasicShader.cs b/Rendering/Shaders/BasicShader.cs index b0e51ec..f9f87d9 100644 --- a/Rendering/Shaders/BasicShader.cs +++ b/Rendering/Shaders/BasicShader.cs @@ -54,11 +54,7 @@ namespace CodeWalker.Rendering } public struct BasicShaderPSGeomVars { - public uint EnableTexture; - public uint EnableTexture2; - public uint pad1; - public uint pad2; - public uint pad3; + public uint EnableTexture;//1+=diffuse1, 2+=diffuse2 public uint EnableTint; public uint EnableNormalMap; public uint EnableSpecMap; @@ -671,8 +667,7 @@ namespace CodeWalker.Rendering } - PSGeomVars.Vars.EnableTexture = usediff ? 1u : 0u; - PSGeomVars.Vars.EnableTexture2 = usediff2 ? 1u : 0u; + PSGeomVars.Vars.EnableTexture = (usediff ? 1u : 0u) + (usediff2 ? 2u : 0u); PSGeomVars.Vars.EnableTint = pstintflag; PSGeomVars.Vars.EnableNormalMap = usebump ? 1u : 0u; PSGeomVars.Vars.EnableSpecMap = usespec ? 1u : 0u; diff --git a/Shaders/BasicPS.cso b/Shaders/BasicPS.cso index 70a6f78b5a964e92b52f378e8a07583b00851e27..b2a88f6442acaa0bf6517d096362de587ef4ae7e 100644 GIT binary patch delta 1736 zcmZvcO-NKx6vxkXdzqA2AkIBS?f;`4KevF+~W<7&3u|Q%Ei>Ur}Npy;(%t ze7r@4E~H!t&O%TkAwr==QVTb;a8VRW1PMii=xX|(*L^fS-+?>l+~5D+bI<*l_cXED z-Pe|EY0X}5{Jn5^>4mF#^33Gv(M~}`n>9oVd_CGmfT$}-^bk!2PqekiXTaRheqwMT zd?gxraydeO1lkz9+YmLSy6RINaYs)bRCtE2KZ}S7eK8`Y^|gq|=sOXyV3di-kvACT z!U$g1gO-DF3`|96D*_1*AfYQO^sD6x^L69CNCjGlhlcOnxtUVyj5Tpwo6SNhh1!60 ztGuYR6>!d|;wNoE_;v7o@Pl4xdE6`m{g7lqE(=x(&n(6rSgqt|;k!uNEyN*=W1u}z zC-@X+Kmok*43quh02eOi*jD*Ut*c!I@0fzMbI^7wb~ zj04{SpUdMuK1Ns=e!<3heX4=*$|f*B0sh*7w}3A>@C5i<2i^<*&Vk=hsDwU9ffw{C z^8wF@(7s^;n~KIK=)+yJh2@=NgC>tk-T;3W%+6cEM;&-K_?QE~Ff@EEHPm6`l*KFj z47Oz*z5={CH2kTk8onNlpGTXFs}T3d_$1;%8OIQh$+!!#&att_TPkLZquy@qq8|`u zue%4FnVqM=eGdFKIM-$$uYq%&cK#R~{~>Lc@B~8GVZw88{%qJ2Wx%WQxb@Utf>%56 zW$>uvygqImJ=iLQT6kW7&ElWI`9yga{1U8x^$+kE_t8wlcZ@9r-vMtGYUMcw&NuL1 z{yu;v2$$^w`j^0y4!jqaC&Q>f4UuB( z1ZN8)l!D9A;Kivl;oEDBr%xoD|T*muS|Ha*{k`_4Jvx#!$--~HL{d)_

{3tS3EHY8RH%x4$ zVPB2?6R9ko9~;=Ri9?Qh98VeJPILnPN@FR2TBY42>QoNP^M1o`D%XMPqfHt< zqnx7D^fAB88b=D5G7b&M^LOyq2Lb>1d-xjK+sGw1XMXvEBja|!ef;_r z4_*!b;K7^Vs~)@!{>g)Pz{}T-Lo3V%(q{uxR$>K*wh6la!EBLQtN^J@7o_~R;bG3g zqzA8o-}m6n@M#ZzY3$C(@L0EVs%Uv!kHNaBBa8e_=c33CGQ_-kJZh1uN6}l2-i97C zdK|sS=soDSj6Q^}sjb}o3dyu{rMNHAPy(X4SJw(x=H_SMArIaK*Gk>v``}u&o8N$Q zqY{T4qd00k0;b^lFt`&X;n4z~KX{MfjUN0NoOdUeN9Sk%v1lnAr;)}y;7f4*zq$(D z|NI^Q2#;gysw8Tu$)H$xe-N|?vC#tJ%bTRQ#%bGn_w diff --git a/Shaders/BasicPS.hlsl b/Shaders/BasicPS.hlsl index 9e452cc..ba3595c 100644 --- a/Shaders/BasicPS.hlsl +++ b/Shaders/BasicPS.hlsl @@ -18,11 +18,7 @@ cbuffer PSSceneVars : register(b0) } cbuffer PSGeomVars : register(b2) { - uint EnableTexture; - uint EnableTexture2; - uint pad1; - uint pad2; - uint pad3; + uint EnableTexture;//1+=diffuse1, 2+=diffuse2 uint EnableTint; uint EnableNormalMap; uint EnableSpecMap; @@ -68,7 +64,7 @@ float4 main(VS_OUTPUT input) : SV_TARGET { float4 c = float4(0.5, 0.5, 0.5, 1); if (RenderMode == 0) c = float4(1, 1, 1, 1); - if (EnableTexture == 1) + if (EnableTexture > 0) { float2 texc = input.Texcoord0; if (RenderMode >= 5) @@ -79,7 +75,7 @@ float4 main(VS_OUTPUT input) : SV_TARGET c = Colourmap.Sample(TextureSS, texc); - if (EnableTexture2 == 1) + if (EnableTexture > 1) //2+ enables diffuse2 { float4 c2 = Colourmap2.Sample(TextureSS, input.Texcoord1); c = c2.a * c2 + (1 - c2.a) * c; diff --git a/Shaders/BasicVS_PNCTT.cso b/Shaders/BasicVS_PNCTT.cso new file mode 100644 index 0000000000000000000000000000000000000000..c9dfc71dfd97c09b7999debb13a14697f8a67ba8 GIT binary patch literal 9952 zcmdU#U2I&%701VG$1x@$)KEYXqT33E4AK z`g*y6=Z<`LX8z~Qne#b!c9Wr_1A{Mr|K#%@{r=uFUp#;BGao&0?amJ8++Vgi*R6h! zo^Nh)?zYX&J$Z$5lfq~9ObqQGzFv5b=zr3JUiH`Oab5rY*lGUv%e78@CsC*GDnmSL@cCIcuH1vS~NA*t6&Fggwfh%KOMW(0++S^$n`gr0P;EAwit#;I#8*dC{>WfY_vARWOWt) zT_ru9l2hJJ1ropGr*~w`xO!{&lYF>NMidNGk015t#y76V@gM$Z3eT&zhTq`7S;ATj zLc?Eu8Xp(_oPp}e6WH!n&XFTD)SV?5YL+)kVct>?R?veTPXzqD`tc0>8R1U|XARBd zJTLq_K+y5EAm<%$uz>$H;Qs<=!+>{TyxP_3&r9LJ=57r5F7-dpzz2k1%)rNlKbwKy zBmB7(UeTQPp!ydw@JEIJIs^ZK@Ru_13&LN?z+V*pS_b}#@Ygf&-wA&+10O6c`Wzpx zHRQTZJ?1Irj5bw{?pMmLc8cDWqK}s67n+{vM?>YhmNaHcv(ebxTqA0d=O)wQ8yJcz z0~OdM=|j;{bKz6ygSF*q6P?Ji4hy>c9^_Az8_T7N8y_4Vt<{!_%~HK-ll|3MH&Cn3 zM)mR1>}?hiaR{ju^rY)!bEs?l1a5VJd&ldwlkOYk>g-fB)2!9qyFo@f@1KQ( zwd3y#&kMK6{wJ*O(b;fgz}eIAYlPpN!GDwR+cNOmgl`wFSC-d(m*%t~^>?dh-?V(? z)kIWrWA$=WZI+tlTGbsaHH!B|I)pV=EUsD?3lS&lrD|iYR$pwS&+C!uY;+pm?r=V# zl6+F4hc=QN=d*4h=v5Fc?fXQy*8d~$wCntD;b4YaopUJb?~}e2h(C&)b{K zzmC>w?K;mbJ-Aq?wZ|?$IQfE_=zCmq z+LC(iL_z%oKO?*#yj{*?!pAf4p9nu5aCJ#7Jturg^LG7T68@m@cKv@Vyd}JS-#-X{ zLU_CW?+br2L(Yf7pUS{D>79CBIQr16Zf+3%tmdYV<<6;SW}wuZS=d)Pae_mutP6#b zf4fT)hN4QdWTYLC#w(>WI_z}7Pir<SfXOy%jkFT#mZbv`l$cDi};b|9*9(%M}p!TbVc zrw;Mt<4TgEmAt(Vg5)X8muiYEjJ_XW>I}?xv9y(^4y%X zos!${)2iFndHVVJk zhLZ)IVgQGS2ETvw@e7Z{A7E&|Ws7sa3OG8j&fBKJ_*ijda%AkVJ3KaVXy2%t+<$a% zY;0o44UUbDO}OIJv>i?(Lo#P|O!mxb9p6omRR~JZu^&y_xzT_#2WPrb3yN*Hw@1zf zHxm5dn=}Bo%m?>R;Ac#u_jam>pD_&_JJE;lVb;Kjhv7y7=e1&ZdS7e>M?NxX@L#6K z@bJ3!xQ>zpMF8a&5(VtLra`^M^Rlw+|lbKaw#4kIpW;U*g|vUfKH3I zeq~IzF}`KoFC0D_qYL8?grm!G$?DS>J@ECs<{#u^S;&Zxt+|c+HAWuztEn+KvcXx8 zY#VP#jj_*g;$vg>wlV&-F}`4o4#aRl?ql5-Tvykft-RNTeeZDYihdXC{o&(zzrSEN zEFShmX0D)*w#K?wGuCxK6t6?CTtOdg?P-auYaM>+4gTvW#7x8W*hdQ0Ms&ho!+{qb zw1mdK(55bnjoR;zVa zze>dPdN|N>qMdEIyLlwqw_Jg)^>X|$_O-QfCG3k$W*fa)kI}SeYo7r8!@iQS_iNG< zyWmA9Xwu~}TZ28&;D3DahcD6Jbj_1rN%PpcH1Ek>$A0r!JQp^~aAALx8vv)S|vJ-O6wvwkA<^~PFqliqCCF!6m>>@9A@!F=8u zWI!9x7+-7+n8lR5OUH`!wodz4+`S#pY`yiY#}12idVgELBjpFftfr(}uf^G7m@8YPjR*nF~{pEb1g{AnLP+?mb?i&@;8|ETG$;oX9cf86p$K{j5Fj@WqNdvU%a z_rfFb7~FJH4Rjl?dppiE=xS^6yK*f@Qhw+mM${6q@p^>XV!ib1=@0bopkMcTx~~^_ z@r(7yQ|q-{>uu$IeuDEJ+8SgqmYu!mz}}_<@nWuZUN`upOLFF=*Wa4r(V8S@((f16 zZ<8(f2AwQl=JkXS$O|zmy%|b~X)vXT5#HJ#h|TpY6-J zotByQ*>K2d?c>ieuUCj!uE4(w#E-W0jd$&Y==iz2BaSV(#a?C;wBeOF-eA&YbD9p8 zE2z?3>kfMaC2JVBpZ6x4o*J?EGq-qXpCs;vg*fcB9-c2DJ+*FYn8!S=y|Tx@hv4ZA zG~z4Qsgrfx(Y{@NW}F+|F%`}Dl$Auio74+d020d@RIr>#5YU^SNAiaHkupS*&_>A!+ z=FseZ!x;b5^iE37gj@lH^K$L6dJ)0L4i2sL`!Tk213UKQ<1-N4#n)N2j zJOdjjI^`7A@={}p+CtsG=_JeMIgbs~8SWjIu*8Qb* zR=uYc*56^!oqG!nI%AVzezQ9aymp6Soc1v~fSE4z?5*7M_c_MvzQ?9=0GgUVrx@5; zi$B=sWtP&boFe_g${*7iuhBhq!EuG75~!tXTXlV6{ru^!q$293;-On;wbUHW^mu9NHq1V-69MCni457?%Wq)pi>>hI3i=)Fq1IjY2#W7ufv-b!YQ9hE;1})^ zoK>`Zst(gQYot4mzqhfs>2+)P-lTJ-+kC=%++-fq`Oj~EUPtNA+Tm}lr?vk924}B{ literal 0 HcmV?d00001 From 0418e7743e7c840ad567d4d0aedfa5b07fffbdbe Mon Sep 17 00:00:00 2001 From: dexy Date: Thu, 21 Feb 2019 16:37:55 +1100 Subject: [PATCH 136/158] Fix for saving texture resources --- CodeWalker.Core/GameFiles/GameFileCache.cs | 15 +++++++++++++++ .../GameFiles/Resources/ResourceBuilder.cs | 15 +++------------ 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index 6a6a157..cfbaa9e 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -2940,7 +2940,22 @@ namespace CodeWalker.GameFiles if (ytd2.TextureDict.Textures?.Count != ytdfile.TextureDict.Textures?.Count) { continue; } + for (int i = 0; i < ytdfile.TextureDict.Textures.Count; i++) + { + var tx1 = ytdfile.TextureDict.Textures[i]; + var tx2 = ytd2.TextureDict.Textures[i]; + var td1 = tx1.Data; + var td2 = tx2.Data; + if (td1.FullData.Length != td2.FullData.Length) + { continue; } + for (int j = 0; j < td1.FullData.Length; j++) + { + if (td1.FullData[j] != td2.FullData[j]) + { break; } + } + + } } } diff --git a/CodeWalker.Core/GameFiles/Resources/ResourceBuilder.cs b/CodeWalker.Core/GameFiles/Resources/ResourceBuilder.cs index 60fca47..2dba012 100644 --- a/CodeWalker.Core/GameFiles/Resources/ResourceBuilder.cs +++ b/CodeWalker.Core/GameFiles/Resources/ResourceBuilder.cs @@ -127,7 +127,7 @@ namespace CodeWalker.GameFiles foreach (var block in blocks) { if (block.FilePosition != -1) - throw new Exception("A position of -1 is not possible!"); + throw new Exception("Block was already assigned a position!"); //if (block.Length == 0) // throw new Exception("A length of 0 is not allowed!"); @@ -226,23 +226,14 @@ namespace CodeWalker.GameFiles - var sysDataSize = 0x2000; - while (sysDataSize < systemStream.Length) - { - sysDataSize *= 2; - } + var sysDataSize = systemPageCount * systemPageSize; var sysData = new byte[sysDataSize]; systemStream.Flush(); systemStream.Position = 0; systemStream.Read(sysData, 0, (int)systemStream.Length); - var gfxPageSize = 0x2000; - while (gfxPageSize != graphicsPageSize) - { - gfxPageSize *= 2; - } - var gfxDataSize = graphicsPageCount * gfxPageSize; + var gfxDataSize = graphicsPageCount * graphicsPageSize; var gfxData = new byte[gfxDataSize]; graphicsStream.Flush(); graphicsStream.Position = 0; From 6233135ad5e9ef711cd79092930787a2f4cfdfb4 Mon Sep 17 00:00:00 2001 From: Dmitriy Nikifrov Date: Tue, 26 Feb 2019 04:52:15 +0500 Subject: [PATCH 137/158] TextBoxFix: unused usings removed; ctrl-y & crtl-z features added; (#39) TextBoxFix: Ctrl-A, Ctrl-Z, Ctrl-Y --- CodeWalker.WinForms/TextBoxFix.cs | 76 +++++++++++++++++++++++++++---- 1 file changed, 66 insertions(+), 10 deletions(-) diff --git a/CodeWalker.WinForms/TextBoxFix.cs b/CodeWalker.WinForms/TextBoxFix.cs index a01eadd..2f86fd4 100644 --- a/CodeWalker.WinForms/TextBoxFix.cs +++ b/CodeWalker.WinForms/TextBoxFix.cs @@ -1,17 +1,15 @@ using System; using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; namespace CodeWalker.WinForms { public partial class TextBoxFix : TextBox { + bool ignoreChange = true; + List storageUndo; + List storageRedo; + public TextBoxFix() { InitializeComponent(); @@ -22,17 +20,75 @@ namespace CodeWalker.WinForms base.OnPaint(pe); } + protected override void OnCreateControl() + { + base.OnCreateControl(); + storageRedo = new List(); + storageUndo = new List { Text }; + ignoreChange = false; + } + protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { - //Fix for Ctrl-A not working in multiline textboxes. + //Fix for Ctrl-A/Z/Y not working in multiline textboxes. const int WM_KEYDOWN = 0x100; var keyCode = (Keys)(msg.WParam.ToInt32() & Convert.ToInt32(Keys.KeyCode)); - if ((msg.Msg == WM_KEYDOWN && keyCode == Keys.A) && (ModifierKeys == Keys.Control) && Focused) + if (msg.Msg == WM_KEYDOWN && (ModifierKeys == Keys.Control) && Focused) { - SelectAll(); - return true; + if (keyCode == Keys.A) + { + SelectAll(); + return true; + } + if (keyCode == Keys.Z) + { + Undo(); + return true; + } + if (keyCode == Keys.Y) + { + Redo(); + return true; + } } return base.ProcessCmdKey(ref msg, keyData); } + protected override void OnTextChanged(EventArgs e) + { + base.OnTextChanged(e); + + if (!ignoreChange) + { + ClearUndo(); + if (storageUndo.Count > 2048) storageUndo.RemoveAt(0); + if (storageRedo.Count > 2048) storageRedo.RemoveAt(0); + + storageUndo.Add(Text); + } + } + + public void Redo() + { + if (storageRedo.Count > 0) + { + ignoreChange = true; + Text = storageRedo[storageRedo.Count - 1]; + storageUndo.Add(Text); + storageRedo.RemoveAt(storageRedo.Count - 1); + ignoreChange = false; + } + } + + public new void Undo() + { + if (storageUndo.Count > 1) + { + ignoreChange = true; + Text = storageUndo[storageUndo.Count - 2]; + storageRedo.Add(storageUndo[storageUndo.Count - 1]); + storageUndo.RemoveAt(storageUndo.Count - 1); + ignoreChange = false; + } + } } } From 58b725d7d20b0d8bded85ed6510c0c08b4e96476 Mon Sep 17 00:00:00 2001 From: Carmine Giugliano <24431753+carmineos@users.noreply.github.com> Date: Tue, 26 Feb 2019 00:54:39 +0100 Subject: [PATCH 138/158] Updated BoundComposite and BoundMaterial_s (#44) * Added EBoundCompositeFlags and EBoundMaterialFlags * Added properties for RoomId and PedDensity in BoundMaterial_s --- CodeWalker.Core/GameFiles/Resources/Bounds.cs | 132 ++++++++++++++---- Project/Panels/GenerateNavMeshPanel.cs | 2 +- 2 files changed, 106 insertions(+), 28 deletions(-) diff --git a/CodeWalker.Core/GameFiles/Resources/Bounds.cs b/CodeWalker.Core/GameFiles/Resources/Bounds.cs index a85b03f..def0ee2 100644 --- a/CodeWalker.Core/GameFiles/Resources/Bounds.cs +++ b/CodeWalker.Core/GameFiles/Resources/Bounds.cs @@ -780,15 +780,55 @@ namespace CodeWalker.GameFiles public BoundsMaterialType Type { get; set; } public byte ProceduralId { get; set; } public byte RoomId_and_PedDensity { get; set; } - public ushort PolyFlags { get; set; } //TOBEFIXED - public byte MaterialColorIndex { get; set; } //TOBEFIXED + public EBoundMaterialFlags Flags { get; set; } + public byte MaterialColorIndex { get; set; } public ushort Unk4 { get; set; } + + ///

+ /// Bits 0, 1, 2, 3, 4 of , values from 0 to 31 + /// + public byte RoomId + { + get => (byte)(RoomId_and_PedDensity & 0x1F); + set => RoomId_and_PedDensity = (byte)((RoomId_and_PedDensity & 0xE0) | (value & 0x1F)); + } + + /// + /// Bits 5, 6, 7 of , values from 0 to 7 + /// + public byte PedDensity + { + get => (byte)((RoomId_and_PedDensity & 0xE0) >> 5); + set => RoomId_and_PedDensity = (byte)((RoomId_and_PedDensity & 0x1F) | ((value << 5) & 0xE0)); + } + public override string ToString() { - return Type.ToString() + ", " + ProceduralId.ToString() + ", " + RoomId_and_PedDensity.ToString() + ", " + MaterialColorIndex.ToString() + ", " + PolyFlags.ToString() + ", " + Unk4.ToString(); + return Type.ToString() + ", " + ProceduralId.ToString() + ", " + RoomId_and_PedDensity.ToString() + ", " + MaterialColorIndex.ToString() + ", " + Flags.ToString() + ", " + Unk4.ToString(); } } + [Flags] public enum EBoundMaterialFlags : ushort + { + NONE = 0, + FLAG_STAIRS = 1, + FLAG_NOT_CLIMBABLE = 1 << 1, + FLAG_SEE_THROUGH = 1 << 2, + FLAG_SHOOT_THROUGH = 1 << 3, + FLAG_NOT_COVER = 1 << 4, + FLAG_WALKABLE_PATH = 1 << 5, + FLAG_NO_CAM_COLLISION = 1 << 6, + FLAG_SHOOT_THROUGH_FX = 1 << 7, + FLAG_NO_DECAL = 1 << 8, + FLAG_NO_NAVMESH = 1 << 9, + FLAG_NO_RAGDOLL = 1 << 10, + FLAG_VEHICLE_WHEEL = 1 << 11, + FLAG_NO_PTFX = 1 << 12, + FLAG_TOO_STEEP_FOR_PLAYER = 1 << 13, + FLAG_NO_NETWORK_SPAWN = 1 << 14, + FLAG_NO_CAM_COLLISION_ALLOW_CLIPPING = 1 << 15, + } + [TC(typeof(EXP))] public struct BoundMaterialColour { //public BoundsMaterialType Type { get; set; } @@ -1116,8 +1156,8 @@ namespace CodeWalker.GameFiles public ulong ChildrenTransformation1Pointer { get; set; } public ulong ChildrenTransformation2Pointer { get; set; } public ulong ChildrenBoundingBoxesPointer { get; set; } - public ulong Unknown_90h_Pointer { get; set; } - public ulong Unknown_98h_Pointer { get; set; } + public ulong ChildrenFlags1Pointer { get; set; } + public ulong ChildrenFlags2Pointer { get; set; } public ushort ChildrenCount1 { get; set; } public ushort ChildrenCount2 { get; set; } public uint Unknown_A4h { get; set; } // 0x00000000 @@ -1128,8 +1168,8 @@ namespace CodeWalker.GameFiles public Matrix[] ChildrenTransformation1 { get; set; } public Matrix[] ChildrenTransformation2 { get; set; } public AABB_s[] ChildrenBoundingBoxes { get; set; } - public BoundComposite_Unknown_B_002_s[] Unknown_90h_Data { get; set; } - public BoundComposite_Unknown_B_002_s[] Unknown_98h_Data { get; set; } + public BoundCompositeChildrenFlags[] ChildrenFlags1 { get; set; } + public BoundCompositeChildrenFlags[] ChildrenFlags2 { get; set; } public BVH BVH { get; set; } @@ -1137,8 +1177,8 @@ namespace CodeWalker.GameFiles private ResourceSystemStructBlock ChildrenTransformation1Block = null; private ResourceSystemStructBlock ChildrenTransformation2Block = null; private ResourceSystemStructBlock ChildrenBoundingBoxesBlock = null; - private ResourceSystemStructBlock Unknown_90h_Block = null; - private ResourceSystemStructBlock Unknown_98h_Block = null; + private ResourceSystemStructBlock ChildrenFlags1Block = null; + private ResourceSystemStructBlock ChildrenFlags2Block = null; /// @@ -1153,8 +1193,8 @@ namespace CodeWalker.GameFiles this.ChildrenTransformation1Pointer = reader.ReadUInt64(); this.ChildrenTransformation2Pointer = reader.ReadUInt64(); this.ChildrenBoundingBoxesPointer = reader.ReadUInt64(); - this.Unknown_90h_Pointer = reader.ReadUInt64(); - this.Unknown_98h_Pointer = reader.ReadUInt64(); + this.ChildrenFlags1Pointer = reader.ReadUInt64(); + this.ChildrenFlags2Pointer = reader.ReadUInt64(); this.ChildrenCount1 = reader.ReadUInt16(); this.ChildrenCount2 = reader.ReadUInt16(); this.Unknown_A4h = reader.ReadUInt32(); @@ -1177,8 +1217,8 @@ namespace CodeWalker.GameFiles this.ChildrenTransformation1 = reader.ReadStructsAt(this.ChildrenTransformation1Pointer, this.ChildrenCount1); this.ChildrenTransformation2 = reader.ReadStructsAt(this.ChildrenTransformation2Pointer, this.ChildrenCount1); this.ChildrenBoundingBoxes = reader.ReadStructsAt(this.ChildrenBoundingBoxesPointer, this.ChildrenCount1); - this.Unknown_90h_Data = reader.ReadStructsAt(this.Unknown_90h_Pointer, this.ChildrenCount1); - this.Unknown_98h_Data = reader.ReadStructsAt(this.Unknown_98h_Pointer, this.ChildrenCount1); + this.ChildrenFlags1 = reader.ReadStructsAt(this.ChildrenFlags1Pointer, this.ChildrenCount1); + this.ChildrenFlags2 = reader.ReadStructsAt(this.ChildrenFlags2Pointer, this.ChildrenCount1); this.BVH = reader.ReadBlockAt( this.BVHPointer // offset @@ -1197,8 +1237,8 @@ namespace CodeWalker.GameFiles this.ChildrenTransformation1Pointer = (ulong)(this.ChildrenTransformation1Block != null ? this.ChildrenTransformation1Block.FilePosition : 0); this.ChildrenTransformation2Pointer = (ulong)(this.ChildrenTransformation2Block != null ? this.ChildrenTransformation2Block.FilePosition : 0); this.ChildrenBoundingBoxesPointer = (ulong)(this.ChildrenBoundingBoxesBlock != null ? this.ChildrenBoundingBoxesBlock.FilePosition : 0); - this.Unknown_90h_Pointer = (ulong)(this.Unknown_90h_Block != null ? this.Unknown_90h_Block.FilePosition : 0); - this.Unknown_98h_Pointer = (ulong)(this.Unknown_98h_Block != null ? this.Unknown_98h_Block.FilePosition : 0); + this.ChildrenFlags1Pointer = (ulong)(this.ChildrenFlags1Block != null ? this.ChildrenFlags1Block.FilePosition : 0); + this.ChildrenFlags2Pointer = (ulong)(this.ChildrenFlags2Block != null ? this.ChildrenFlags2Block.FilePosition : 0); this.ChildrenCount1 = (ushort)(this.Children != null ? this.Children.Count : 0); this.ChildrenCount2 = (ushort)(this.Children != null ? this.Children.Count : 0); this.BVHPointer = (ulong)(this.BVH != null ? this.BVH.FilePosition : 0); @@ -1208,8 +1248,8 @@ namespace CodeWalker.GameFiles writer.Write(this.ChildrenTransformation1Pointer); writer.Write(this.ChildrenTransformation2Pointer); writer.Write(this.ChildrenBoundingBoxesPointer); - writer.Write(this.Unknown_90h_Pointer); - writer.Write(this.Unknown_98h_Pointer); + writer.Write(this.ChildrenFlags1Pointer); + writer.Write(this.ChildrenFlags2Pointer); writer.Write(this.ChildrenCount1); writer.Write(this.ChildrenCount2); writer.Write(this.Unknown_A4h); @@ -1238,27 +1278,65 @@ namespace CodeWalker.GameFiles ChildrenBoundingBoxesBlock = new ResourceSystemStructBlock(ChildrenBoundingBoxes); list.Add(ChildrenBoundingBoxesBlock); } - if (Unknown_90h_Data != null) + if (ChildrenFlags1 != null) { - Unknown_90h_Block = new ResourceSystemStructBlock(Unknown_90h_Data); - list.Add(Unknown_90h_Block); + ChildrenFlags1Block = new ResourceSystemStructBlock(ChildrenFlags1); + list.Add(ChildrenFlags1Block); } - if (Unknown_98h_Data != null) + if (ChildrenFlags2 != null) { - Unknown_98h_Block = new ResourceSystemStructBlock(Unknown_98h_Data); - list.Add(Unknown_98h_Block); + ChildrenFlags2Block = new ResourceSystemStructBlock(ChildrenFlags2); + list.Add(ChildrenFlags2Block); } if (BVH != null) list.Add(BVH); return list.ToArray(); } } - [TC(typeof(EXP))] public struct BoundComposite_Unknown_B_002_s + + [Flags] public enum EBoundCompositeFlags { - public uint Unknown_0h { get; set; } - public uint Unknown_4h { get; set; } + NONE = 0, + UNKNOWN = 1, + MAP_WEAPON = 1 << 1, + MAP_DYNAMIC = 1 << 2, + MAP_ANIMAL = 1 << 3, + MAP_COVER = 1 << 4, + MAP_VEHICLE = 1 << 5, + VEHICLE_NOT_BVH = 1 << 6, + VEHICLE_BVH = 1 << 7, + VEHICLE_BOX = 1 << 8, + PED = 1 << 9, + RAGDOLL = 1 << 10, + ANIMAL = 1 << 11, + ANIMAL_RAGDOLL = 1 << 12, + OBJECT = 1 << 13, + OBJECT_ENV_CLOTH = 1 << 14, + PLANT = 1 << 15, + PROJECTILE = 1 << 16, + EXPLOSION = 1 << 17, + PICKUP = 1 << 18, + FOLIAGE = 1 << 19, + FORKLIFT_FORKS = 1 << 20, + TEST_WEAPON = 1 << 21, + TEST_CAMERA = 1 << 22, + TEST_AI = 1 << 23, + TEST_SCRIPT = 1 << 24, + TEST_VEHICLE_WHEEL = 1 << 25, + GLASS = 1 << 26, + MAP_RIVER = 1 << 27, + SMOKE = 1 << 28, + UNSMASHED = 1 << 29, + MAP_STAIRS = 1 << 30, + MAP_DEEP_SURFACE = 1 << 31, + } + + [TC(typeof(EXP))] public struct BoundCompositeChildrenFlags + { + public EBoundCompositeFlags Flags1 { get; set; } + public EBoundCompositeFlags Flags2 { get; set; } public override string ToString() { - return Unknown_0h.ToString() + ", " + Unknown_4h.ToString(); + return Flags1.ToString() + ", " + Flags2.ToString(); } } diff --git a/Project/Panels/GenerateNavMeshPanel.cs b/Project/Panels/GenerateNavMeshPanel.cs index 3a3b589..0100874 100644 --- a/Project/Panels/GenerateNavMeshPanel.cs +++ b/Project/Panels/GenerateNavMeshPanel.cs @@ -191,7 +191,7 @@ namespace CodeWalker.Project.Panels vert.Position = intres.Position; vert.Normal = intres.Normal; vert.Material = intres.Material.Type; - vert.PolyFlags = intres.Material.PolyFlags; + vert.PolyFlags = (ushort)intres.Material.Flags; vert.PrevIDX = -1; vert.PrevIDY = -1; vert.NextIDX = -1; From 8183354186b1878207923a7e0db0b821c8d697d1 Mon Sep 17 00:00:00 2001 From: smallo92 Date: Tue, 26 Feb 2019 10:24:49 +1000 Subject: [PATCH 139/158] Added more resolved hashes (#45) * Update MetaNames.cs Added additional strings for popgroups.ymt file. Thanks to FiveM. --- .../GameFiles/MetaTypes/MetaNames.cs | 193 ++++++++++++++++++ 1 file changed, 193 insertions(+) diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs index 361e7cb..03c18d7 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs @@ -9105,6 +9105,199 @@ namespace CodeWalker.GameFiles + + + + + + + //popgroups.ymt - From FiveM + //For the pedgroups/item/name field + richman_glen_bevhills = 1916548608, + marlowe_drive_bevhills = 3724985487, + baytree_canyon_bevhills = 1095587898, + galileo_park_bevhills = 3773030709, + galileo_park_hipsters = 1226562551, + galileo_park_tourists = 2437681877, + ocean_general = 699946682, + pacific_bluffs_beach = 1771635400, + pacific_bluffs_streetgeneral = 2128557429, + del_perro_streetgeneral = 4003270267, + del_perro_bums = 3222414768, + vespucci_pier_beach = 2175040393, + vespucci_streetgeneral = 853940634, + vespucci_bums = 908912315, + vespucci_canals_streetgeneral = 4149286830, + vespucci_canals_bevhills = 2120071986, + puerto_business = 2592745348, + puerto_streetgeneral = 3620209527, + puerto_bevhills = 2096726272, + puerto_hipsters = 4241471320, + lsa_airport = 3523754501, + lsa_streetgeneral = 3526862920, + elysian_island_streetgeneral = 851640179, + elysian_island_genped = 398248766, + terminal_construction = 3440476579, + terminal_specificjob = 3674390882, + beachparty = 2592453449, + banning_construction = 46699983, + banning_specificjob = 2575047138, + banning_streetgeneral = 3474460204, + banning_tramps = 2130175499, + el_burro_general = 2730520509, + cypress_general = 1446780254, + cypress_tramps = 3214037884, + la_mesa_general = 2636968603, + la_mesa_tramps = 748862053, + murrieta_general = 697895317, + murrieta_tramps = 3052120512, + murrieta_gang = 2843705451, + hippy = 944887848, + cult = 2010391401, + racecourse_bevhills = 1764904172, + racecourse_streetgeneral = 1498417612, + east_vinewood_local = 1545421012, + east_vinewood_hipster = 271987258, + east_vinewood_streetgeneral = 3366133940, + paleto_bay_general = 3474455539, + mirror_park_business = 777133455, + mirror_park_hipsters = 2253228929, + mirror_park_streetgeneral = 61725078, + west_vinewood_hipsters = 1283940400, + west_vinewood_streetgeneral = 310058182, + west_vinewood_vinewood = 3235047195, + eclipse_hipsters = 3720433148, + eclipse_streetgeneral = 2052334107, + eclipse_vinewood = 2593057275, + eclipse_sexuals = 2351577296, + club_nighttime = 2022489214, + downtown_tramps = 987833330, + downtown_bevhills = 809773694, + downtown_hipsters = 180130592, + downtown_streetgeneral = 3523779044, + fish_ = 1207004798, + birds_city = 589253797, + birds_ground_city = 1230242748, + birds_countryside = 390908839, + birds_ocean = 3168035254, + birds_ground_ocean = 3110385855, + burton_tramps = 256463428, + burton_business = 3165443402, + burton_bevhills = 3155703512, + burton_hipsters = 2194132880, + burton_vinewood = 1651740194, + burton_streetgeneral = 3056012715, + hawick_bevhills = 1318738468, + hawick_hipsters = 3708634492, + hawick_streetgeneral = 1267713346, + hawick_tramps = 2932194291, + hawick_vinewood = 360078400, + alta_business = 485106051, + alta_tramps = 3962261894, + alta_bevhills = 3657786126, + alta_streetgeneral = 2583180649, + rockford_shop_bevhills = 4171238205, + rockford_shop_streetgeneral = 2899076840, + rockford_residential_bluecollar = 2323943313, + rockford_residential_bevhills = 577684089, + rockford_hills_day = 2546072613, + rockford_hills_night = 3291264832, + richman_bevhills = 2279583243, + richman_streetgeneral = 3757962161, + morningwood_tramps = 501399946, + morningwood_bevhills = 763676531, + morningwood_hipsters = 2303048052, + morningwood_streetgeneral = 115436112, + backlot_film = 897751036, + backlot_streetgeneral = 1689692965, + little_seoul_koreatown = 3058390933, + little_seoul_gang = 3164653322, + little_seoul_streetgeneral = 2782104137, + pillbox_business = 325325429, + pillbox_bevhills = 2147006744, + pillbox_tramps = 578868739, + textile_bluecollar = 3279161038, + textile_tramps = 187018675, + textile_streetgeneral = 2072811124, + mission_tramps = 1765836040, + mission_streetgeneral = 477790886, + strawberry_sc = 3513229903, + strawberry_tramps = 3763929697, + strawberry_gang = 1084379725, + chamberlain_sc = 3488106941, + chamberlain_tramps = 3657678612, + chamberlain_gang = 411250856, + davis_hookers = 263474307, + davis_sc = 2938794522, + davis_gang = 2259354683, + davis_tramps = 80817981, + rancho_sc = 116771963, + rancho_gang = 3730883993, + rancho_tramps = 282950945, + incar_general = 1725824697, + stadium_streetgeneral = 3270139100, + los_puerta_armenian = 2855646127, + los_puerta_streetgeneral = 1461524714, + vespucci_magdemo = 1443256237, + rockford = 601104499, + beach_fat = 1495265263, + fat_general = 3194660753, + s_central = 1270994027, + fashion = 2922437723, + bohemian = 2527915385, + hipsters = 1206548044, + eastla = 3903831171, + business = 942215692, + restaurant_night = 2230335161, + tramp = 295674176, + tourists = 4052103791, + prisoners = 3489630150, + freeway_countryside = 141741896, + freeway_haulage = 2921281021, + gang_chinese = 344476045, + gang_south_la = 1434944763, + net_common = 1475419019, + net_uncommon = 3944733161, + rampage_south_ls = 855514417, + rampage_little_seoul = 1518670552, + rampage_rockford_hills = 154314028, + veh_poor = 454752152, + veh_mid = 3112896464, + veh_mid_mp = 326963640, + veh_rich = 4160258559, + veh_haulage = 2260594341, + veh_haulage_mp = 443246348, + veh_utility = 2942896063, + veh_freeway = 4222100980, + veh_freeway_mp = 2591138726, + veh_large_city = 3079238267, + veh_large_city_mp = 4156290791, + veh_countryside_offroad = 3880382407, + veh_countryside_onroad = 1817408484, + veh_yankton = 2030452436, + veh_bikes = 347476719, + native_zon_only = 3826828622, + veh_salt = 1026046820, + veh_army = 2983944587, + veh_boats = 1968910249, + veh_boats_freeway = 800811870, + veh_bicycles = 1387773269, + veh_beach_bike = 875099148, + veh_lost = 927861950, + veh_copcar = 113873283, + veh_taxi = 2516826768, + veh_airport = 3318832790, + veh_test_simple = 2438558856, + veh_test_complex = 297209538, + veh_transport = 2042289260, + veh_countrycoach = 4024372987, + veh_prologue = 3821814614, + + + + + + } From 9a13bc9aa3f4bfcfd2e00e968645ed0b615288dc Mon Sep 17 00:00:00 2001 From: dexyfex Date: Sat, 2 Mar 2019 04:23:41 +1100 Subject: [PATCH 140/158] Dat151 progress --- .../GameFiles/FileTypes/RelFile.cs | 1891 +++++++++++++++-- CodeWalker.Core/GameFiles/MetaTypes/Meta.cs | 24 + 2 files changed, 1769 insertions(+), 146 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index 0806fd5..4294c31 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -586,7 +586,6 @@ namespace CodeWalker.GameFiles case Dat151RelType.ShoreLineRiver: return new Dat151ShoreLineRiver(d, br); case Dat151RelType.ShoreLineOcean: return new Dat151ShoreLineOcean(d, br); case Dat151RelType.ShoreLineList: return new Dat151ShoreLineList(d, br); - case Dat151RelType.RadioTrackEvents: return new Dat151RadioTrackEvents(d, br); case Dat151RelType.VehicleEngineGranular: return new Dat151VehicleEngineGranular(d, br); //maybe not just vehicle case Dat151RelType.Vehicle: return new Dat151Vehicle(d, br); @@ -597,18 +596,20 @@ namespace CodeWalker.GameFiles case Dat151RelType.Explosion: return new Dat151Explosion(d, br); case Dat151RelType.PedPVG: return new Dat151PedPVG(d, br); //maybe Ped Voice Group? - //case Dat151RelType.Helicopter: return new Dat151Helicopter(d, br); //maybe + case Dat151RelType.Prop: return new Dat151Prop(d, br); + case Dat151RelType.Boat: return new Dat151Boat(d, br); + case Dat151RelType.Bicycle: return new Dat151Bicycle(d, br); + case Dat151RelType.Aeroplane: return new Dat151Aeroplane(d, br); + case Dat151RelType.Helicopter: return new Dat151Helicopter(d, br); + case Dat151RelType.VehicleTrailer: return new Dat151VehicleTrailer(d, br); + //case Dat151RelType.SpeechParams: return new Dat151SpeechParams(d, br); - //case Dat151RelType.Aeroplane: return new Dat151Aeroplane(d, br); //case Dat151RelType.AnimalParams: return new Dat151AnimalParams(d, br); - //case Dat151RelType.Unk2: return new Dat151Unk2(d, br); - //case Dat151RelType.Unk7: return new Dat151Unk7(d, br); //case Dat151RelType.Unk9: return new Dat151Unk9(d, br); //case Dat151RelType.Unk11: return new Dat151Unk11(d, br); //case Dat151RelType.Unk12: return new Dat151Unk12(d, br); //case Dat151RelType.Unk13: return new Dat151Unk13(d, br); //case Dat151RelType.Unk15: return new Dat151Unk15(d, br); - //case Dat151RelType.Unk16: return new Dat151Unk16(d, br); //case Dat151RelType.Unk18: return new Dat151Unk18(d, br); //case Dat151RelType.Unk22: return new Dat151Unk22(d, br); //case Dat151RelType.Unk23: return new Dat151Unk23(d, br); @@ -627,7 +628,6 @@ namespace CodeWalker.GameFiles //case Dat151RelType.Unk51: return new Dat151Unk51(d, br); //case Dat151RelType.Unk53: return new Dat151Unk53(d, br); //case Dat151RelType.Unk54: return new Dat151Unk54(d, br); - //case Dat151RelType.Unk56: return new Dat151Unk56(d, br); //case Dat151RelType.Unk59: return new Dat151Unk59(d, br); //case Dat151RelType.Unk69: return new Dat151Unk69(d, br); //case Dat151RelType.Unk70: return new Dat151Unk70(d, br); @@ -766,18 +766,20 @@ namespace CodeWalker.GameFiles case Dat151RelType.Explosion: return new Dat151Explosion(this); case Dat151RelType.PedPVG: return new Dat151PedPVG(this); //maybe Ped Voice Group? - //case Dat151RelType.Helicopter: return new Dat151Helicopter(this); //maybe + case Dat151RelType.Prop: return new Dat151Prop(this); + case Dat151RelType.Boat: return new Dat151Boat(this); + case Dat151RelType.Bicycle: return new Dat151Bicycle(this); + case Dat151RelType.Aeroplane: return new Dat151Aeroplane(this); + case Dat151RelType.Helicopter: return new Dat151Helicopter(this); + case Dat151RelType.VehicleTrailer: return new Dat151VehicleTrailer(this); + //case Dat151RelType.SpeechParams: return new Dat151SpeechParams(this); - //case Dat151RelType.Aeroplane: return new Dat151Aeroplane(this); //case Dat151RelType.AnimalParams: return new Dat151AnimalParams(this); - //case Dat151RelType.Unk2: return new Dat151Unk2(this); - //case Dat151RelType.Unk7: return new Dat151Unk7(this); //case Dat151RelType.Unk9: return new Dat151Unk9(this); //case Dat151RelType.Unk11: return new Dat151Unk11(this); //case Dat151RelType.Unk12: return new Dat151Unk12(this); //case Dat151RelType.Unk13: return new Dat151Unk13(this); //case Dat151RelType.Unk15: return new Dat151Unk15(this); - //case Dat151RelType.Unk16: return new Dat151Unk16(this); //case Dat151RelType.Unk18: return new Dat151Unk18(this); //case Dat151RelType.Unk22: return new Dat151Unk22(this); //case Dat151RelType.Unk23: return new Dat151Unk23(this); @@ -796,7 +798,6 @@ namespace CodeWalker.GameFiles //case Dat151RelType.Unk51: return new Dat151Unk51(this); //case Dat151RelType.Unk53: return new Dat151Unk53(this); //case Dat151RelType.Unk54: return new Dat151Unk54(this); - //case Dat151RelType.Unk56: return new Dat151Unk56(this); //case Dat151RelType.Unk59: return new Dat151Unk59(this); //case Dat151RelType.Unk69: return new Dat151Unk69(this); //case Dat151RelType.Unk70: return new Dat151Unk70(this); @@ -5170,8 +5171,8 @@ namespace CodeWalker.GameFiles VehicleEngine = 4, Entity = 5, //not sure about this StaticEmitter = 6,//radio emitter? - Unk7 = 7, - Helicopter = 8, //maybe + Prop = 7,//prop? eg. fan, radar + Helicopter = 8, Unk9 = 9, Unk11 = 11, Unk12 = 12, @@ -6774,7 +6775,7 @@ namespace CodeWalker.GameFiles public FlagsUint Unk00 { get; set; } public uint WheelPosition { get; set; } public uint Unk02 { get; set; } - public ushort Unk03 { get; set; } + public ushort MusicGenre { get; set; } public string RadioName { get; set; } public ushort Unk04 { get; set; } @@ -6791,7 +6792,7 @@ namespace CodeWalker.GameFiles Unk00 = br.ReadUInt32(); WheelPosition = br.ReadUInt32(); Unk02 = br.ReadUInt32(); - Unk03 = br.ReadUInt16(); + MusicGenre = br.ReadUInt16(); var data = br.ReadBytes(32); RadioName = Encoding.ASCII.GetString(data).Replace("\0", ""); @@ -6820,7 +6821,7 @@ namespace CodeWalker.GameFiles bw.Write(Unk00); bw.Write(WheelPosition); bw.Write(Unk02); - bw.Write(Unk03); + bw.Write(MusicGenre); byte[] data = new byte[32]; int len = Math.Min(RadioName?.Length ?? 0, 32); @@ -6843,7 +6844,7 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk00", "0x" + Unk00.Hex); RelXml.ValueTag(sb, indent, "WheelPosition", WheelPosition.ToString()); RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); - RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); + RelXml.ValueTag(sb, indent, "MusicGenre", MusicGenre.ToString()); RelXml.StringTag(sb, indent, "RadioName", RadioName); RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); @@ -6869,7 +6870,7 @@ namespace CodeWalker.GameFiles Unk00 = Xml.GetChildUIntAttribute(node, "Unk00", "value"); WheelPosition = Xml.GetChildUIntAttribute(node, "WheelPosition", "value"); Unk02 = Xml.GetChildUIntAttribute(node, "Unk02", "value"); - Unk03 = (ushort)Xml.GetChildUIntAttribute(node, "Unk03", "value"); + MusicGenre = (ushort)Xml.GetChildUIntAttribute(node, "MusicGenre", "value"); RadioName = Xml.GetChildInnerText(node, "RadioName"); Unk04 = (ushort)Xml.GetChildUIntAttribute(node, "Unk04", "value"); @@ -12846,6 +12847,1730 @@ namespace CodeWalker.GameFiles } } + [TC(typeof(EXP))] public class Dat151Prop : Dat151RelData + { + public FlagsUint Flags { get; set; } + public MetaHash Unk01 { get; set; } + public float Unk02 { get; set; } + public float Unk03 { get; set; } + public float Unk04 { get; set; } + public float Unk05 { get; set; } + public float Unk06 { get; set; } + public float Unk07 { get; set; } + public float Unk08 { get; set; } + public MetaHash Unk09 { get; set; }//always 0 + public int Unk10 { get; set; } + public float Unk11 { get; set; } + + public Dat151Prop(RelFile rel) : base(rel) + { + Type = Dat151RelType.Prop; + TypeID = (byte)Type; + } + public Dat151Prop(RelData d, BinaryReader br) : base(d, br) + { + Flags = br.ReadUInt32(); + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadSingle(); + Unk03 = br.ReadSingle(); + Unk04 = br.ReadSingle(); + Unk05 = br.ReadSingle(); + Unk06 = br.ReadSingle(); + Unk07 = br.ReadSingle(); + Unk08 = br.ReadSingle(); + Unk09 = br.ReadUInt32(); + Unk10 = br.ReadInt32(); + Unk11 = br.ReadSingle(); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Flags); + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", FloatUtil.ToString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", FloatUtil.ToString(Unk03)); + RelXml.ValueTag(sb, indent, "Unk04", FloatUtil.ToString(Unk04)); + RelXml.ValueTag(sb, indent, "Unk05", FloatUtil.ToString(Unk05)); + RelXml.ValueTag(sb, indent, "Unk06", FloatUtil.ToString(Unk06)); + RelXml.ValueTag(sb, indent, "Unk07", FloatUtil.ToString(Unk07)); + RelXml.ValueTag(sb, indent, "Unk08", FloatUtil.ToString(Unk08)); + RelXml.StringTag(sb, indent, "Unk09", RelXml.HashString(Unk09)); + RelXml.ValueTag(sb, indent, "Unk10", Unk10.ToString()); + RelXml.ValueTag(sb, indent, "Unk11", FloatUtil.ToString(Unk11)); + } + public override void ReadXml(XmlNode node) + { + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = Xml.GetChildFloatAttribute(node, "Unk02", "value"); + Unk03 = Xml.GetChildFloatAttribute(node, "Unk03", "value"); + Unk04 = Xml.GetChildFloatAttribute(node, "Unk04", "value"); + Unk05 = Xml.GetChildFloatAttribute(node, "Unk05", "value"); + Unk06 = Xml.GetChildFloatAttribute(node, "Unk06", "value"); + Unk07 = Xml.GetChildFloatAttribute(node, "Unk07", "value"); + Unk08 = Xml.GetChildFloatAttribute(node, "Unk08", "value"); + Unk09 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk09")); + Unk10 = Xml.GetChildIntAttribute(node, "Unk10", "value"); + Unk11 = Xml.GetChildFloatAttribute(node, "Unk11", "value"); + } + } + [TC(typeof(EXP))] public class Dat151Boat : Dat151RelData + { + public FlagsUint Flags { get; set; } + public MetaHash Unk01 { get; set; } + public MetaHash Unk02 { get; set; } + public MetaHash Unk03 { get; set; } + public MetaHash Unk04 { get; set; } + public MetaHash Unk05 { get; set; } + public MetaHash Unk06 { get; set; } + public MetaHash Unk07 { get; set; } + public MetaHash Unk08 { get; set; } + public MetaHash Unk09 { get; set; } + public MetaHash Unk10 { get; set; } + public MetaHash Unk11 { get; set; } + public MetaHash Unk12 { get; set; } + public MetaHash Unk13 { get; set; } + public MetaHash Unk14 { get; set; } + public MetaHash Unk15 { get; set; } + public MetaHash Unk16 { get; set; } + public MetaHash Unk17 { get; set; } + public MetaHash Unk18 { get; set; } + public MetaHash Unk19 { get; set; }//scanner params + public int Unk20 { get; set; } + public MetaHash Unk21 { get; set; } + public MetaHash Unk22 { get; set; } + public MetaHash Unk23 { get; set; } + public MetaHash Unk24 { get; set; }//0 + public MetaHash Unk25 { get; set; }//engine submix + public MetaHash Unk26 { get; set; }//engine submix preset + public MetaHash Unk27 { get; set; }//exhaust submix + public MetaHash Unk28 { get; set; }//exhaust submix preset + public MetaHash Unk29 { get; set; } + public MetaHash Unk30 { get; set; } + public MetaHash Unk31 { get; set; } + public MetaHash Unk32 { get; set; }//wave hit (medium?) + public MetaHash Unk33 { get; set; }//0 + public MetaHash Unk34 { get; set; } + public MetaHash Unk35 { get; set; } + public MetaHash Unk36 { get; set; }//granular engine + public MetaHash Unk37 { get; set; } + public MetaHash Unk38 { get; set; } + public MetaHash Unk39 { get; set; }//startup + public MetaHash Unk40 { get; set; } + public MetaHash Unk41 { get; set; } + public MetaHash Unk42 { get; set; } + public MetaHash Unk43 { get; set; } + public MetaHash Unk44 { get; set; } + public MetaHash Unk45 { get; set; } + public float Unk46 { get; set; } + public float Unk47 { get; set; } + public float Unk48 { get; set; } + public MetaHash Unk49 { get; set; } + public MetaHash Unk50 { get; set; } + public MetaHash Unk51 { get; set; } + public MetaHash Unk52 { get; set; } + public MetaHash Unk53 { get; set; } + public MetaHash Unk54 { get; set; } + public MetaHash Unk55 { get; set; } + public MetaHash Unk56 { get; set; } + public MetaHash Unk57 { get; set; } + public MetaHash Unk58 { get; set; } + public MetaHash Unk59 { get; set; } + public MetaHash Unk60 { get; set; }//wave hit (big air?) + public float Unk61 { get; set; } + public MetaHash Unk62 { get; set; } + public MetaHash Unk63 { get; set; } + + + public Dat151Boat(RelFile rel) : base(rel) + { + Type = Dat151RelType.Boat; + TypeID = (byte)Type; + } + public Dat151Boat(RelData d, BinaryReader br) : base(d, br) + { + Flags = br.ReadUInt32(); + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadUInt32(); + Unk03 = br.ReadUInt32(); + Unk04 = br.ReadUInt32(); + Unk05 = br.ReadUInt32(); + Unk06 = br.ReadUInt32(); + Unk07 = br.ReadUInt32(); + Unk08 = br.ReadUInt32(); + Unk09 = br.ReadUInt32(); + Unk10 = br.ReadUInt32(); + Unk11 = br.ReadUInt32(); + Unk12 = br.ReadUInt32(); + Unk13 = br.ReadUInt32(); + Unk14 = br.ReadUInt32(); + Unk15 = br.ReadUInt32(); + Unk16 = br.ReadUInt32(); + Unk17 = br.ReadUInt32(); + Unk18 = br.ReadUInt32(); + Unk19 = br.ReadUInt32(); + Unk20 = br.ReadInt32(); + Unk21 = br.ReadUInt32(); + Unk22 = br.ReadUInt32(); + Unk23 = br.ReadUInt32(); + Unk24 = br.ReadUInt32(); + Unk25 = br.ReadUInt32(); + Unk26 = br.ReadUInt32(); + Unk27 = br.ReadUInt32(); + Unk28 = br.ReadUInt32(); + Unk29 = br.ReadUInt32(); + Unk30 = br.ReadUInt32(); + Unk31 = br.ReadUInt32(); + Unk32 = br.ReadUInt32(); + Unk33 = br.ReadUInt32(); + Unk34 = br.ReadUInt32(); + Unk35 = br.ReadUInt32(); + Unk36 = br.ReadUInt32(); + Unk37 = br.ReadUInt32(); + Unk38 = br.ReadUInt32(); + Unk39 = br.ReadUInt32(); + Unk40 = br.ReadUInt32(); + Unk41 = br.ReadUInt32(); + Unk42 = br.ReadUInt32(); + Unk43 = br.ReadUInt32(); + Unk44 = br.ReadUInt32(); + Unk45 = br.ReadUInt32(); + Unk46 = br.ReadSingle(); + Unk47 = br.ReadSingle(); + Unk48 = br.ReadSingle(); + Unk49 = br.ReadUInt32(); + Unk50 = br.ReadUInt32(); + Unk51 = br.ReadUInt32(); + Unk52 = br.ReadUInt32(); + Unk53 = br.ReadUInt32(); + Unk54 = br.ReadUInt32(); + Unk55 = br.ReadUInt32(); + Unk56 = br.ReadUInt32(); + Unk57 = br.ReadUInt32(); + Unk58 = br.ReadUInt32(); + Unk59 = br.ReadUInt32(); + Unk60 = br.ReadUInt32(); + Unk61 = br.ReadSingle(); + Unk62 = br.ReadUInt32(); + Unk63 = br.ReadUInt32(); + + if (Unk24 != 0) + { } + if (Unk33 != 0) + { } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Flags); + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); + bw.Write(Unk14); + bw.Write(Unk15); + bw.Write(Unk16); + bw.Write(Unk17); + bw.Write(Unk18); + bw.Write(Unk19); + bw.Write(Unk20); + bw.Write(Unk21); + bw.Write(Unk22); + bw.Write(Unk23); + bw.Write(Unk24); + bw.Write(Unk25); + bw.Write(Unk26); + bw.Write(Unk27); + bw.Write(Unk28); + bw.Write(Unk29); + bw.Write(Unk30); + bw.Write(Unk31); + bw.Write(Unk32); + bw.Write(Unk33); + bw.Write(Unk34); + bw.Write(Unk35); + bw.Write(Unk36); + bw.Write(Unk37); + bw.Write(Unk38); + bw.Write(Unk39); + bw.Write(Unk40); + bw.Write(Unk41); + bw.Write(Unk42); + bw.Write(Unk43); + bw.Write(Unk44); + bw.Write(Unk45); + bw.Write(Unk46); + bw.Write(Unk47); + bw.Write(Unk48); + bw.Write(Unk49); + bw.Write(Unk50); + bw.Write(Unk51); + bw.Write(Unk52); + bw.Write(Unk53); + bw.Write(Unk54); + bw.Write(Unk55); + bw.Write(Unk56); + bw.Write(Unk57); + bw.Write(Unk58); + bw.Write(Unk59); + bw.Write(Unk60); + bw.Write(Unk61); + bw.Write(Unk62); + bw.Write(Unk63); + + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); + RelXml.StringTag(sb, indent, "Unk04", RelXml.HashString(Unk04)); + RelXml.StringTag(sb, indent, "Unk05", RelXml.HashString(Unk05)); + RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); + RelXml.StringTag(sb, indent, "Unk07", RelXml.HashString(Unk07)); + RelXml.StringTag(sb, indent, "Unk08", RelXml.HashString(Unk08)); + RelXml.StringTag(sb, indent, "Unk09", RelXml.HashString(Unk09)); + RelXml.StringTag(sb, indent, "Unk10", RelXml.HashString(Unk10)); + RelXml.StringTag(sb, indent, "Unk11", RelXml.HashString(Unk11)); + RelXml.StringTag(sb, indent, "Unk12", RelXml.HashString(Unk12)); + RelXml.StringTag(sb, indent, "Unk13", RelXml.HashString(Unk13)); + RelXml.StringTag(sb, indent, "Unk14", RelXml.HashString(Unk14)); + RelXml.StringTag(sb, indent, "Unk15", RelXml.HashString(Unk15)); + RelXml.StringTag(sb, indent, "Unk16", RelXml.HashString(Unk16)); + RelXml.StringTag(sb, indent, "Unk17", RelXml.HashString(Unk17)); + RelXml.StringTag(sb, indent, "Unk18", RelXml.HashString(Unk18)); + RelXml.StringTag(sb, indent, "Unk19", RelXml.HashString(Unk19)); + RelXml.ValueTag(sb, indent, "Unk20", Unk20.ToString()); + RelXml.StringTag(sb, indent, "Unk21", RelXml.HashString(Unk21)); + RelXml.StringTag(sb, indent, "Unk22", RelXml.HashString(Unk22)); + RelXml.StringTag(sb, indent, "Unk23", RelXml.HashString(Unk23)); + RelXml.StringTag(sb, indent, "Unk24", RelXml.HashString(Unk24)); + RelXml.StringTag(sb, indent, "Unk25", RelXml.HashString(Unk25)); + RelXml.StringTag(sb, indent, "Unk26", RelXml.HashString(Unk26)); + RelXml.StringTag(sb, indent, "Unk27", RelXml.HashString(Unk27)); + RelXml.StringTag(sb, indent, "Unk28", RelXml.HashString(Unk28)); + RelXml.StringTag(sb, indent, "Unk29", RelXml.HashString(Unk29)); + RelXml.StringTag(sb, indent, "Unk30", RelXml.HashString(Unk30)); + RelXml.StringTag(sb, indent, "Unk31", RelXml.HashString(Unk31)); + RelXml.StringTag(sb, indent, "Unk32", RelXml.HashString(Unk32)); + RelXml.StringTag(sb, indent, "Unk33", RelXml.HashString(Unk33)); + RelXml.StringTag(sb, indent, "Unk34", RelXml.HashString(Unk34)); + RelXml.StringTag(sb, indent, "Unk35", RelXml.HashString(Unk35)); + RelXml.StringTag(sb, indent, "Unk36", RelXml.HashString(Unk36)); + RelXml.StringTag(sb, indent, "Unk37", RelXml.HashString(Unk37)); + RelXml.StringTag(sb, indent, "Unk38", RelXml.HashString(Unk38)); + RelXml.StringTag(sb, indent, "Unk39", RelXml.HashString(Unk39)); + RelXml.StringTag(sb, indent, "Unk40", RelXml.HashString(Unk40)); + RelXml.StringTag(sb, indent, "Unk41", RelXml.HashString(Unk41)); + RelXml.StringTag(sb, indent, "Unk42", RelXml.HashString(Unk42)); + RelXml.StringTag(sb, indent, "Unk43", RelXml.HashString(Unk43)); + RelXml.StringTag(sb, indent, "Unk44", RelXml.HashString(Unk44)); + RelXml.StringTag(sb, indent, "Unk45", RelXml.HashString(Unk45)); + RelXml.ValueTag(sb, indent, "Unk46", FloatUtil.ToString(Unk46)); + RelXml.ValueTag(sb, indent, "Unk47", FloatUtil.ToString(Unk47)); + RelXml.ValueTag(sb, indent, "Unk48", FloatUtil.ToString(Unk48)); + RelXml.StringTag(sb, indent, "Unk49", RelXml.HashString(Unk49)); + RelXml.StringTag(sb, indent, "Unk50", RelXml.HashString(Unk50)); + RelXml.StringTag(sb, indent, "Unk51", RelXml.HashString(Unk51)); + RelXml.StringTag(sb, indent, "Unk52", RelXml.HashString(Unk52)); + RelXml.StringTag(sb, indent, "Unk53", RelXml.HashString(Unk53)); + RelXml.StringTag(sb, indent, "Unk54", RelXml.HashString(Unk54)); + RelXml.StringTag(sb, indent, "Unk55", RelXml.HashString(Unk55)); + RelXml.StringTag(sb, indent, "Unk56", RelXml.HashString(Unk56)); + RelXml.StringTag(sb, indent, "Unk57", RelXml.HashString(Unk57)); + RelXml.StringTag(sb, indent, "Unk58", RelXml.HashString(Unk58)); + RelXml.StringTag(sb, indent, "Unk59", RelXml.HashString(Unk59)); + RelXml.StringTag(sb, indent, "Unk60", RelXml.HashString(Unk60)); + RelXml.ValueTag(sb, indent, "Unk61", FloatUtil.ToString(Unk61)); + RelXml.StringTag(sb, indent, "Unk62", RelXml.HashString(Unk62)); + RelXml.StringTag(sb, indent, "Unk63", RelXml.HashString(Unk63)); + + } + public override void ReadXml(XmlNode node) + { + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk04")); + Unk05 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk05")); + Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); + Unk07 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk07")); + Unk08 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk08")); + Unk09 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk09")); + Unk10 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk10")); + Unk11 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk11")); + Unk12 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk12")); + Unk13 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk13")); + Unk14 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk14")); + Unk15 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk15")); + Unk16 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk16")); + Unk17 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk17")); + Unk18 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk18")); + Unk19 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk19")); + Unk20 = Xml.GetChildIntAttribute(node, "Unk20", "value"); + Unk21 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk21")); + Unk22 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk22")); + Unk23 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk23")); + Unk24 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk24")); + Unk25 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk25")); + Unk26 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk26")); + Unk27 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk27")); + Unk28 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk28")); + Unk29 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk29")); + Unk30 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk30")); + Unk31 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk31")); + Unk32 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk32")); + Unk33 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk33")); + Unk34 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk34")); + Unk35 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk35")); + Unk36 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk36")); + Unk37 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk37")); + Unk38 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk38")); + Unk39 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk39")); + Unk40 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk40")); + Unk41 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk41")); + Unk42 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk42")); + Unk43 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk43")); + Unk44 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk44")); + Unk45 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk45")); + Unk46 = Xml.GetChildFloatAttribute(node, "Unk46", "value"); + Unk47 = Xml.GetChildFloatAttribute(node, "Unk47", "value"); + Unk48 = Xml.GetChildFloatAttribute(node, "Unk48", "value"); + Unk49 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk49")); + Unk50 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk50")); + Unk51 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk51")); + Unk52 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk52")); + Unk53 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk53")); + Unk54 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk54")); + Unk55 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk55")); + Unk56 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk56")); + Unk57 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk57")); + Unk58 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk58")); + Unk59 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk59")); + Unk60 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk60")); + Unk61 = Xml.GetChildFloatAttribute(node, "Unk61", "value"); + Unk62 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk62")); + Unk63 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk63")); + + } + } + [TC(typeof(EXP))] public class Dat151Bicycle : Dat151RelData + { + public MetaHash Unk00 { get; set; } + public MetaHash Unk01 { get; set; } + public MetaHash Unk02 { get; set; } + public MetaHash Unk03 { get; set; } + public float Unk04 { get; set; } + public float Unk05 { get; set; } + public MetaHash Unk06 { get; set; } + public MetaHash Unk07 { get; set; } + public float Unk08 { get; set; } + public float Unk09 { get; set; } + public MetaHash Unk10 { get; set; } + public MetaHash Unk11 { get; set; } + public int Unk12 { get; set; } + public int Unk13 { get; set; } + public MetaHash Unk14 { get; set; } + public MetaHash Unk15 { get; set; } + public MetaHash Unk16 { get; set; } + public MetaHash Unk17 { get; set; } + + public Dat151Bicycle(RelFile rel) : base(rel) + { + Type = Dat151RelType.Bicycle; + TypeID = (byte)Type; + } + public Dat151Bicycle(RelData d, BinaryReader br) : base(d, br) + { + Unk00 = br.ReadUInt32(); + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadUInt32(); + Unk03 = br.ReadUInt32(); + Unk04 = br.ReadSingle(); + Unk05 = br.ReadSingle(); + Unk06 = br.ReadUInt32(); + Unk07 = br.ReadUInt32(); + Unk08 = br.ReadSingle(); + Unk09 = br.ReadSingle(); + Unk10 = br.ReadUInt32(); + Unk11 = br.ReadUInt32(); + Unk12 = br.ReadInt32(); + Unk13 = br.ReadInt32(); + Unk14 = br.ReadUInt32(); + Unk15 = br.ReadUInt32(); + Unk16 = br.ReadUInt32(); + Unk17 = br.ReadUInt32(); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk00); + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); + bw.Write(Unk14); + bw.Write(Unk15); + bw.Write(Unk16); + bw.Write(Unk17); + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Unk00", RelXml.HashString(Unk00)); + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); + RelXml.ValueTag(sb, indent, "Unk04", FloatUtil.ToString(Unk04)); + RelXml.ValueTag(sb, indent, "Unk05", FloatUtil.ToString(Unk05)); + RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); + RelXml.StringTag(sb, indent, "Unk07", RelXml.HashString(Unk07)); + RelXml.ValueTag(sb, indent, "Unk08", FloatUtil.ToString(Unk08)); + RelXml.ValueTag(sb, indent, "Unk09", FloatUtil.ToString(Unk09)); + RelXml.StringTag(sb, indent, "Unk10", RelXml.HashString(Unk10)); + RelXml.StringTag(sb, indent, "Unk11", RelXml.HashString(Unk11)); + RelXml.ValueTag(sb, indent, "Unk12", Unk12.ToString()); + RelXml.ValueTag(sb, indent, "Unk13", Unk13.ToString()); + RelXml.StringTag(sb, indent, "Unk14", RelXml.HashString(Unk14)); + RelXml.StringTag(sb, indent, "Unk15", RelXml.HashString(Unk15)); + RelXml.StringTag(sb, indent, "Unk16", RelXml.HashString(Unk16)); + RelXml.StringTag(sb, indent, "Unk17", RelXml.HashString(Unk17)); + } + public override void ReadXml(XmlNode node) + { + Unk00 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk00")); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + Unk04 = Xml.GetChildFloatAttribute(node, "Unk04", "value"); + Unk05 = Xml.GetChildFloatAttribute(node, "Unk05", "value"); + Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); + Unk07 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk07")); + Unk08 = Xml.GetChildFloatAttribute(node, "Unk08", "value"); + Unk09 = Xml.GetChildFloatAttribute(node, "Unk09", "value"); + Unk10 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk10")); + Unk11 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk11")); + Unk12 = Xml.GetChildIntAttribute(node, "Unk12", "value"); + Unk13 = Xml.GetChildIntAttribute(node, "Unk13", "value"); + Unk14 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk14")); + Unk15 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk15")); + Unk16 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk16")); + Unk17 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk17")); + } + } + [TC(typeof(EXP))] public class Dat151Aeroplane : Dat151RelData + { + public FlagsUint Flags { get; set; } + public MetaHash Unk01 { get; set; }//engine loop + public MetaHash Unk02 { get; set; }//exhaust loop + public MetaHash Unk03 { get; set; }//idle loop + public MetaHash Unk04 { get; set; }//distance loop + public MetaHash Unk05 { get; set; }//propellor loop + public MetaHash Unk06 { get; set; }//banking loop + public short Unk07 { get; set; } + public short Unk08 { get; set; } + public short Unk09 { get; set; } + public short Unk10 { get; set; } + public short Unk11 { get; set; } + public short Unk12 { get; set; } + public short Unk13 { get; set; } + public short Unk14 { get; set; } + public short Unk15 { get; set; } + public short Unk16 { get; set; } + public MetaHash Unk17 { get; set; } + public MetaHash Unk18 { get; set; } + public MetaHash Unk19 { get; set; }//same as Unk17 + public MetaHash Unk20 { get; set; }//same as Unk18 + public MetaHash Unk21 { get; set; } + public MetaHash Unk22 { get; set; } + public MetaHash Unk23 { get; set; } + public MetaHash Unk24 { get; set; } + public MetaHash Unk25 { get; set; } + public MetaHash Unk26 { get; set; } + public MetaHash Unk27 { get; set; } + public MetaHash Unk28 { get; set; } + public MetaHash Unk29 { get; set; }//door open + public MetaHash Unk30 { get; set; }//door close + public MetaHash Unk31 { get; set; } + public MetaHash Unk32 { get; set; } + public MetaHash Unk33 { get; set; } + public MetaHash Unk34 { get; set; }//startup + public MetaHash Unk35 { get; set; } + public MetaHash Unk36 { get; set; } + public MetaHash Unk37 { get; set; } + public MetaHash Unk38 { get; set; } + public MetaHash Unk39 { get; set; }//afterburner + public int Unk40 { get; set; } + public MetaHash Unk41 { get; set; }//0 + public MetaHash Unk42 { get; set; }//0 + public MetaHash Unk43 { get; set; }//0 + public MetaHash Unk44 { get; set; }//0 + public MetaHash Unk45 { get; set; }//0 + public MetaHash Unk46 { get; set; } + public MetaHash Unk47 { get; set; } + public MetaHash Unk48 { get; set; } + public MetaHash Unk49 { get; set; }//float? + public MetaHash Unk50 { get; set; } + public short Unk51 { get; set; } + public short Unk52 { get; set; } + public short Unk53 { get; set; } + public short Unk54 { get; set; } + public float Unk55 { get; set; } + public MetaHash Unk56 { get; set; }//rudder + public MetaHash Unk57 { get; set; } + public MetaHash Unk58 { get; set; } + public MetaHash Unk59 { get; set; }//door open start + public MetaHash Unk60 { get; set; }//door close start + public MetaHash Unk61 { get; set; } + public MetaHash Unk62 { get; set; } + public MetaHash Unk63 { get; set; } + public int Unk64 { get; set; } + public MetaHash Unk65 { get; set; } + public MetaHash Unk66 { get; set; } + public float Unk67 { get; set; } + public float Unk68 { get; set; } + public MetaHash Unk69 { get; set; } + public MetaHash Unk70 { get; set; } + public MetaHash Unk71 { get; set; } + public MetaHash Unk72 { get; set; } + public MetaHash Unk73 { get; set; }//damage + public MetaHash Unk74 { get; set; } + public float Unk75 { get; set; } + public MetaHash Unk76 { get; set; } + public MetaHash Unk77 { get; set; } + public short Unk78 { get; set; }//1 + public short Unk79 { get; set; }//1 + public short Unk80 { get; set; }//750 + public short Unk81 { get; set; }//1 + public float Unk82 { get; set; } + public float Unk83 { get; set; } + public float Unk84 { get; set; } + public MetaHash Unk85 { get; set; }//thrust bank + public MetaHash Unk86 { get; set; } + + public MetaHash Unk87 { get; set; } + public MetaHash Unk88 { get; set; } + public MetaHash Unk89 { get; set; } + public MetaHash Unk90 { get; set; } + public MetaHash Unk91 { get; set; } + public float Unk92 { get; set; } + public MetaHash Unk93 { get; set; } + public MetaHash Unk94 { get; set; } + public MetaHash Unk95 { get; set; } + public MetaHash Unk96 { get; set; } + + public int Version { get; set; } + + public Dat151Aeroplane(RelFile rel) : base(rel) + { + Type = Dat151RelType.Aeroplane; + TypeID = (byte)Type; + } + public Dat151Aeroplane(RelData d, BinaryReader br) : base(d, br) + { + Flags = br.ReadUInt32(); + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadUInt32(); + Unk03 = br.ReadUInt32(); + Unk04 = br.ReadUInt32(); + Unk05 = br.ReadUInt32(); + Unk06 = br.ReadUInt32(); + Unk07 = br.ReadInt16(); + Unk08 = br.ReadInt16(); + Unk09 = br.ReadInt16(); + Unk10 = br.ReadInt16(); + Unk11 = br.ReadInt16(); + Unk12 = br.ReadInt16(); + Unk13 = br.ReadInt16(); + Unk14 = br.ReadInt16(); + Unk15 = br.ReadInt16(); + Unk16 = br.ReadInt16(); + Unk17 = br.ReadUInt32(); + Unk18 = br.ReadUInt32(); + Unk19 = br.ReadUInt32(); + Unk20 = br.ReadUInt32(); + Unk21 = br.ReadUInt32(); + Unk22 = br.ReadUInt32(); + Unk23 = br.ReadUInt32(); + Unk24 = br.ReadUInt32(); + Unk25 = br.ReadUInt32(); + Unk26 = br.ReadUInt32(); + Unk27 = br.ReadUInt32(); + Unk28 = br.ReadUInt32(); + Unk29 = br.ReadUInt32(); + Unk30 = br.ReadUInt32(); + Unk31 = br.ReadUInt32(); + Unk32 = br.ReadUInt32(); + Unk33 = br.ReadUInt32(); + Unk34 = br.ReadUInt32(); + Unk35 = br.ReadUInt32(); + Unk36 = br.ReadUInt32(); + Unk37 = br.ReadUInt32(); + Unk38 = br.ReadUInt32(); + Unk39 = br.ReadUInt32(); + Unk40 = br.ReadInt32(); + Unk41 = br.ReadUInt32(); + Unk42 = br.ReadUInt32(); + Unk43 = br.ReadUInt32(); + Unk44 = br.ReadUInt32(); + Unk45 = br.ReadUInt32(); + Unk46 = br.ReadUInt32(); + Unk47 = br.ReadUInt32(); + Unk48 = br.ReadUInt32(); + Unk49 = br.ReadUInt32(); + Unk50 = br.ReadUInt32(); + Unk51 = br.ReadInt16(); + Unk52 = br.ReadInt16(); + Unk53 = br.ReadInt16(); + Unk54 = br.ReadInt16(); + Unk55 = br.ReadSingle(); + Unk56 = br.ReadUInt32(); + Unk57 = br.ReadUInt32(); + Unk58 = br.ReadUInt32(); + Unk59 = br.ReadUInt32(); + Unk60 = br.ReadUInt32(); + Unk61 = br.ReadUInt32(); + Unk62 = br.ReadUInt32(); + Unk63 = br.ReadUInt32(); + Unk64 = br.ReadInt32(); + Unk65 = br.ReadUInt32(); + Unk66 = br.ReadUInt32(); + Unk67 = br.ReadSingle(); + Unk68 = br.ReadSingle(); + Unk69 = br.ReadUInt32(); + Unk70 = br.ReadUInt32(); + Unk71 = br.ReadUInt32(); + Unk72 = br.ReadUInt32(); + Unk73 = br.ReadUInt32(); + Unk74 = br.ReadUInt32(); + Unk75 = br.ReadSingle(); + Unk76 = br.ReadUInt32(); + Unk77 = br.ReadUInt32(); + Unk78 = br.ReadInt16(); + Unk79 = br.ReadInt16(); + Unk80 = br.ReadInt16(); + Unk81 = br.ReadInt16(); + Unk82 = br.ReadSingle(); + Unk83 = br.ReadSingle(); + Unk84 = br.ReadSingle(); + Unk85 = br.ReadUInt32(); + Unk86 = br.ReadUInt32(); + + Version = 0; + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft == 40) + { + Version = 1; + + Unk87 = br.ReadUInt32(); + Unk88 = br.ReadUInt32(); + Unk89 = br.ReadUInt32(); + Unk90 = br.ReadUInt32(); + Unk91 = br.ReadUInt32(); + Unk92 = br.ReadSingle(); + Unk93 = br.ReadUInt32(); + Unk94 = br.ReadUInt32(); + Unk95 = br.ReadUInt32(); + Unk96 = br.ReadUInt32(); + } + + + bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + + + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Flags); + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); + bw.Write(Unk14); + bw.Write(Unk15); + bw.Write(Unk16); + bw.Write(Unk17); + bw.Write(Unk18); + bw.Write(Unk19); + bw.Write(Unk20); + bw.Write(Unk21); + bw.Write(Unk22); + bw.Write(Unk23); + bw.Write(Unk24); + bw.Write(Unk25); + bw.Write(Unk26); + bw.Write(Unk27); + bw.Write(Unk28); + bw.Write(Unk29); + bw.Write(Unk30); + bw.Write(Unk31); + bw.Write(Unk32); + bw.Write(Unk33); + bw.Write(Unk34); + bw.Write(Unk35); + bw.Write(Unk36); + bw.Write(Unk37); + bw.Write(Unk38); + bw.Write(Unk39); + bw.Write(Unk40); + bw.Write(Unk41); + bw.Write(Unk42); + bw.Write(Unk43); + bw.Write(Unk44); + bw.Write(Unk45); + bw.Write(Unk46); + bw.Write(Unk47); + bw.Write(Unk48); + bw.Write(Unk49); + bw.Write(Unk50); + bw.Write(Unk51); + bw.Write(Unk52); + bw.Write(Unk53); + bw.Write(Unk54); + bw.Write(Unk55); + bw.Write(Unk56); + bw.Write(Unk57); + bw.Write(Unk58); + bw.Write(Unk59); + bw.Write(Unk60); + bw.Write(Unk61); + bw.Write(Unk62); + bw.Write(Unk63); + bw.Write(Unk64); + bw.Write(Unk65); + bw.Write(Unk66); + bw.Write(Unk67); + bw.Write(Unk68); + bw.Write(Unk69); + bw.Write(Unk70); + bw.Write(Unk71); + bw.Write(Unk72); + bw.Write(Unk73); + bw.Write(Unk74); + bw.Write(Unk75); + bw.Write(Unk76); + bw.Write(Unk77); + bw.Write(Unk78); + bw.Write(Unk79); + bw.Write(Unk80); + bw.Write(Unk81); + bw.Write(Unk82); + bw.Write(Unk83); + bw.Write(Unk84); + bw.Write(Unk85); + bw.Write(Unk86); + + if (Version >= 1) + { + bw.Write(Unk87); + bw.Write(Unk88); + bw.Write(Unk89); + bw.Write(Unk90); + bw.Write(Unk91); + bw.Write(Unk92); + bw.Write(Unk93); + bw.Write(Unk94); + bw.Write(Unk95); + bw.Write(Unk96); + } + + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.ValueTag(sb, indent, "Version", Version.ToString()); //CW invention, not an actual field! + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); + RelXml.StringTag(sb, indent, "Unk04", RelXml.HashString(Unk04)); + RelXml.StringTag(sb, indent, "Unk05", RelXml.HashString(Unk05)); + RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); + RelXml.ValueTag(sb, indent, "Unk07", Unk07.ToString()); + RelXml.ValueTag(sb, indent, "Unk08", Unk08.ToString()); + RelXml.ValueTag(sb, indent, "Unk09", Unk09.ToString()); + RelXml.ValueTag(sb, indent, "Unk10", Unk10.ToString()); + RelXml.ValueTag(sb, indent, "Unk11", Unk11.ToString()); + RelXml.ValueTag(sb, indent, "Unk12", Unk12.ToString()); + RelXml.ValueTag(sb, indent, "Unk13", Unk13.ToString()); + RelXml.ValueTag(sb, indent, "Unk14", Unk14.ToString()); + RelXml.ValueTag(sb, indent, "Unk15", Unk15.ToString()); + RelXml.ValueTag(sb, indent, "Unk16", Unk16.ToString()); + RelXml.StringTag(sb, indent, "Unk17", RelXml.HashString(Unk17)); + RelXml.StringTag(sb, indent, "Unk18", RelXml.HashString(Unk18)); + RelXml.StringTag(sb, indent, "Unk19", RelXml.HashString(Unk19)); + RelXml.StringTag(sb, indent, "Unk20", RelXml.HashString(Unk20)); + RelXml.StringTag(sb, indent, "Unk21", RelXml.HashString(Unk21)); + RelXml.StringTag(sb, indent, "Unk22", RelXml.HashString(Unk22)); + RelXml.StringTag(sb, indent, "Unk23", RelXml.HashString(Unk23)); + RelXml.StringTag(sb, indent, "Unk24", RelXml.HashString(Unk24)); + RelXml.StringTag(sb, indent, "Unk25", RelXml.HashString(Unk25)); + RelXml.StringTag(sb, indent, "Unk26", RelXml.HashString(Unk26)); + RelXml.StringTag(sb, indent, "Unk27", RelXml.HashString(Unk27)); + RelXml.StringTag(sb, indent, "Unk28", RelXml.HashString(Unk28)); + RelXml.StringTag(sb, indent, "Unk29", RelXml.HashString(Unk29)); + RelXml.StringTag(sb, indent, "Unk30", RelXml.HashString(Unk30)); + RelXml.StringTag(sb, indent, "Unk31", RelXml.HashString(Unk31)); + RelXml.StringTag(sb, indent, "Unk32", RelXml.HashString(Unk32)); + RelXml.StringTag(sb, indent, "Unk33", RelXml.HashString(Unk33)); + RelXml.StringTag(sb, indent, "Unk34", RelXml.HashString(Unk34)); + RelXml.StringTag(sb, indent, "Unk35", RelXml.HashString(Unk35)); + RelXml.StringTag(sb, indent, "Unk36", RelXml.HashString(Unk36)); + RelXml.StringTag(sb, indent, "Unk37", RelXml.HashString(Unk37)); + RelXml.StringTag(sb, indent, "Unk38", RelXml.HashString(Unk38)); + RelXml.StringTag(sb, indent, "Unk39", RelXml.HashString(Unk39)); + RelXml.ValueTag(sb, indent, "Unk40", Unk40.ToString()); + RelXml.StringTag(sb, indent, "Unk41", RelXml.HashString(Unk41)); + RelXml.StringTag(sb, indent, "Unk42", RelXml.HashString(Unk42)); + RelXml.StringTag(sb, indent, "Unk43", RelXml.HashString(Unk43)); + RelXml.StringTag(sb, indent, "Unk44", RelXml.HashString(Unk44)); + RelXml.StringTag(sb, indent, "Unk45", RelXml.HashString(Unk45)); + RelXml.StringTag(sb, indent, "Unk46", RelXml.HashString(Unk46)); + RelXml.StringTag(sb, indent, "Unk47", RelXml.HashString(Unk47)); + RelXml.StringTag(sb, indent, "Unk48", RelXml.HashString(Unk48)); + RelXml.StringTag(sb, indent, "Unk49", RelXml.HashString(Unk49)); + RelXml.StringTag(sb, indent, "Unk50", RelXml.HashString(Unk50)); + RelXml.ValueTag(sb, indent, "Unk51", Unk51.ToString()); + RelXml.ValueTag(sb, indent, "Unk52", Unk52.ToString()); + RelXml.ValueTag(sb, indent, "Unk53", Unk53.ToString()); + RelXml.ValueTag(sb, indent, "Unk54", Unk54.ToString()); + RelXml.ValueTag(sb, indent, "Unk55", FloatUtil.ToString(Unk55)); + RelXml.StringTag(sb, indent, "Unk56", RelXml.HashString(Unk56)); + RelXml.StringTag(sb, indent, "Unk57", RelXml.HashString(Unk57)); + RelXml.StringTag(sb, indent, "Unk58", RelXml.HashString(Unk58)); + RelXml.StringTag(sb, indent, "Unk59", RelXml.HashString(Unk59)); + RelXml.StringTag(sb, indent, "Unk60", RelXml.HashString(Unk60)); + RelXml.StringTag(sb, indent, "Unk61", RelXml.HashString(Unk61)); + RelXml.StringTag(sb, indent, "Unk62", RelXml.HashString(Unk62)); + RelXml.StringTag(sb, indent, "Unk63", RelXml.HashString(Unk63)); + RelXml.ValueTag(sb, indent, "Unk64", Unk64.ToString()); + RelXml.StringTag(sb, indent, "Unk65", RelXml.HashString(Unk65)); + RelXml.StringTag(sb, indent, "Unk66", RelXml.HashString(Unk66)); + RelXml.ValueTag(sb, indent, "Unk67", FloatUtil.ToString(Unk67)); + RelXml.ValueTag(sb, indent, "Unk68", FloatUtil.ToString(Unk68)); + RelXml.StringTag(sb, indent, "Unk69", RelXml.HashString(Unk69)); + RelXml.StringTag(sb, indent, "Unk70", RelXml.HashString(Unk70)); + RelXml.StringTag(sb, indent, "Unk71", RelXml.HashString(Unk71)); + RelXml.StringTag(sb, indent, "Unk72", RelXml.HashString(Unk72)); + RelXml.StringTag(sb, indent, "Unk73", RelXml.HashString(Unk73)); + RelXml.StringTag(sb, indent, "Unk74", RelXml.HashString(Unk74)); + RelXml.ValueTag(sb, indent, "Unk75", FloatUtil.ToString(Unk75)); + RelXml.StringTag(sb, indent, "Unk76", RelXml.HashString(Unk76)); + RelXml.StringTag(sb, indent, "Unk77", RelXml.HashString(Unk77)); + RelXml.ValueTag(sb, indent, "Unk78", Unk78.ToString()); + RelXml.ValueTag(sb, indent, "Unk79", Unk79.ToString()); + RelXml.ValueTag(sb, indent, "Unk80", Unk80.ToString()); + RelXml.ValueTag(sb, indent, "Unk81", Unk81.ToString()); + RelXml.ValueTag(sb, indent, "Unk82", FloatUtil.ToString(Unk82)); + RelXml.ValueTag(sb, indent, "Unk83", FloatUtil.ToString(Unk83)); + RelXml.ValueTag(sb, indent, "Unk84", FloatUtil.ToString(Unk84)); + RelXml.StringTag(sb, indent, "Unk85", RelXml.HashString(Unk85)); + RelXml.StringTag(sb, indent, "Unk86", RelXml.HashString(Unk86)); + + if (Version >= 1) + { + RelXml.StringTag(sb, indent, "Unk87", RelXml.HashString(Unk87)); + RelXml.StringTag(sb, indent, "Unk88", RelXml.HashString(Unk88)); + RelXml.StringTag(sb, indent, "Unk89", RelXml.HashString(Unk89)); + RelXml.StringTag(sb, indent, "Unk90", RelXml.HashString(Unk90)); + RelXml.StringTag(sb, indent, "Unk91", RelXml.HashString(Unk91)); + RelXml.ValueTag(sb, indent, "Unk92", FloatUtil.ToString(Unk92)); + RelXml.StringTag(sb, indent, "Unk93", RelXml.HashString(Unk93)); + RelXml.StringTag(sb, indent, "Unk94", RelXml.HashString(Unk94)); + RelXml.StringTag(sb, indent, "Unk95", RelXml.HashString(Unk95)); + RelXml.StringTag(sb, indent, "Unk96", RelXml.HashString(Unk96)); + } + + } + public override void ReadXml(XmlNode node) + { + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Version = Xml.GetChildIntAttribute(node, "Version", "value"); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk04")); + Unk05 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk05")); + Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); + Unk07 = (short)Xml.GetChildIntAttribute(node, "Unk07", "value"); + Unk08 = (short)Xml.GetChildIntAttribute(node, "Unk08", "value"); + Unk09 = (short)Xml.GetChildIntAttribute(node, "Unk09", "value"); + Unk10 = (short)Xml.GetChildIntAttribute(node, "Unk10", "value"); + Unk11 = (short)Xml.GetChildIntAttribute(node, "Unk11", "value"); + Unk12 = (short)Xml.GetChildIntAttribute(node, "Unk12", "value"); + Unk13 = (short)Xml.GetChildIntAttribute(node, "Unk13", "value"); + Unk14 = (short)Xml.GetChildIntAttribute(node, "Unk14", "value"); + Unk15 = (short)Xml.GetChildIntAttribute(node, "Unk15", "value"); + Unk16 = (short)Xml.GetChildIntAttribute(node, "Unk16", "value"); + Unk17 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk17")); + Unk18 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk18")); + Unk19 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk19")); + Unk20 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk20")); + Unk21 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk21")); + Unk22 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk22")); + Unk23 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk23")); + Unk24 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk24")); + Unk25 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk25")); + Unk26 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk26")); + Unk27 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk27")); + Unk28 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk28")); + Unk29 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk29")); + Unk30 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk30")); + Unk31 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk31")); + Unk32 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk32")); + Unk33 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk33")); + Unk34 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk34")); + Unk35 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk35")); + Unk36 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk36")); + Unk37 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk37")); + Unk38 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk38")); + Unk39 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk39")); + Unk40 = Xml.GetChildIntAttribute(node, "Unk40", "value"); + Unk41 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk41")); + Unk42 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk42")); + Unk43 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk43")); + Unk44 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk44")); + Unk45 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk45")); + Unk46 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk46")); + Unk47 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk47")); + Unk48 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk48")); + Unk49 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk49")); + Unk50 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk50")); + Unk51 = (short)Xml.GetChildIntAttribute(node, "Unk51", "value"); + Unk52 = (short)Xml.GetChildIntAttribute(node, "Unk52", "value"); + Unk53 = (short)Xml.GetChildIntAttribute(node, "Unk53", "value"); + Unk54 = (short)Xml.GetChildIntAttribute(node, "Unk54", "value"); + Unk55 = Xml.GetChildFloatAttribute(node, "Unk55", "value"); + Unk56 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk56")); + Unk57 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk57")); + Unk58 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk58")); + Unk59 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk59")); + Unk60 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk60")); + Unk61 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk61")); + Unk62 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk62")); + Unk63 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk63")); + Unk64 = Xml.GetChildIntAttribute(node, "Unk64", "value"); + Unk65 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk65")); + Unk66 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk66")); + Unk67 = Xml.GetChildFloatAttribute(node, "Unk67", "value"); + Unk68 = Xml.GetChildFloatAttribute(node, "Unk68", "value"); + Unk69 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk69")); + Unk70 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk70")); + Unk71 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk71")); + Unk72 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk72")); + Unk73 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk73")); + Unk74 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk74")); + Unk75 = Xml.GetChildFloatAttribute(node, "Unk75", "value"); + Unk76 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk76")); + Unk77 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk77")); + Unk78 = (short)Xml.GetChildIntAttribute(node, "Unk78", "value"); + Unk79 = (short)Xml.GetChildIntAttribute(node, "Unk79", "value"); + Unk80 = (short)Xml.GetChildIntAttribute(node, "Unk80", "value"); + Unk81 = (short)Xml.GetChildIntAttribute(node, "Unk81", "value"); + Unk82 = Xml.GetChildFloatAttribute(node, "Unk82", "value"); + Unk83 = Xml.GetChildFloatAttribute(node, "Unk83", "value"); + Unk84 = Xml.GetChildFloatAttribute(node, "Unk84", "value"); + Unk85 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk85")); + Unk86 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk86")); + + if (Version >= 1) + { + Unk87 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk87")); + Unk88 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk88")); + Unk89 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk89")); + Unk90 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk90")); + Unk91 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk91")); + Unk92 = Xml.GetChildFloatAttribute(node, "Unk92", "value"); + Unk93 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk93")); + Unk94 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk94")); + Unk95 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk95")); + Unk96 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk96")); + + } + + + } + } + [TC(typeof(EXP))] public class Dat151Helicopter : Dat151RelData + { + public FlagsUint Flags { get; set; } + public MetaHash Unk01 { get; set; } + public MetaHash Unk02 { get; set; }//rear_rotor_loop_vb + public MetaHash Unk03 { get; set; }//exhaust_loop_vb + public MetaHash Unk04 { get; set; } + public MetaHash Unk05 { get; set; } + public float Unk06 { get; set; } + public MetaHash Unk07 { get; set; } + public MetaHash Unk08 { get; set; } + public MetaHash Unk09 { get; set; } + public MetaHash Unk10 { get; set; } + public MetaHash Unk11 { get; set; } + public MetaHash Unk12 { get; set; } + public MetaHash Unk13 { get; set; } + public MetaHash Unk14 { get; set; } + public MetaHash Unk15 { get; set; } + public short Unk16 { get; set; } + public short Unk17 { get; set; } + public short Unk18 { get; set; } + public short Unk19 { get; set; } + public short Unk20 { get; set; } + public short Unk21 { get; set; } + public short Unk22 { get; set; } + public short Unk23 { get; set; } + public short Unk24 { get; set; } + public short Unk25 { get; set; } + public MetaHash Unk26 { get; set; } + public MetaHash Unk27 { get; set; } + public MetaHash Unk28 { get; set; } + public MetaHash Unk29 { get; set; } + public MetaHash Unk30 { get; set; } + public MetaHash Unk31 { get; set; } + public MetaHash Unk32 { get; set; } + public MetaHash Unk33 { get; set; } + public MetaHash Unk34 { get; set; } + public MetaHash Unk35 { get; set; }//startup + public short Unk36 { get; set; } + public short Unk37 { get; set; } + public short Unk38 { get; set; } + public short Unk39 { get; set; } + public int Unk40 { get; set; } + public MetaHash Unk41 { get; set; } + public MetaHash Unk42 { get; set; } + public MetaHash Unk43 { get; set; } + public MetaHash Unk44 { get; set; }//scanner_params + public int Unk45 { get; set; } + public MetaHash Unk46 { get; set; } + public MetaHash Unk47 { get; set; } + public MetaHash Unk48 { get; set; } + public MetaHash Unk49 { get; set; }//damage_loop_vb + public MetaHash Unk50 { get; set; } + public int Unk51 { get; set; } + public MetaHash Unk52 { get; set; }//0 + public MetaHash Unk53 { get; set; }//0 + public MetaHash Unk54 { get; set; }//0 + public MetaHash Unk55 { get; set; }//0 + public MetaHash Unk56 { get; set; } + public MetaHash Unk57 { get; set; } + public MetaHash Unk58 { get; set; } + public MetaHash Unk59 { get; set; } + public MetaHash Unk60 { get; set; }//vehicle_collision + public MetaHash Unk61 { get; set; } + public MetaHash Unk62 { get; set; }//distant_loop + public MetaHash Unk63 { get; set; } + public MetaHash Unk64 { get; set; } + public MetaHash Unk65 { get; set; } + public MetaHash Unk66 { get; set; } + public MetaHash Unk67 { get; set; }//suspension_up + public MetaHash Unk68 { get; set; }//suspension_down + public float Unk69 { get; set; } + public float Unk70 { get; set; } + public MetaHash Unk71 { get; set; }//damage_oneshots + public MetaHash Unk72 { get; set; }//damage_warning + public MetaHash Unk73 { get; set; } + public MetaHash Unk74 { get; set; } + public MetaHash Unk75 { get; set; } + public MetaHash Unk76 { get; set; } + public MetaHash Unk77 { get; set; } + public MetaHash Unk78 { get; set; } + public MetaHash Unk79 { get; set; }//altitude_warning + public MetaHash Unk80 { get; set; } + public MetaHash Unk81 { get; set; } + public MetaHash Unk82 { get; set; }//damage_below_600_loop_vb + public float Unk83 { get; set; } + public float Unk84 { get; set; } + public float Unk85 { get; set; } + public MetaHash Unk86 { get; set; }//jet + public MetaHash Unk87 { get; set; } + public MetaHash Unk88 { get; set; } + + public MetaHash Unk89 { get; set; } + public MetaHash Unk90 { get; set; } + public MetaHash Unk91 { get; set; }//startup_broken + + public int Version { get; set; } + + + public Dat151Helicopter(RelFile rel) : base(rel) + { + Type = Dat151RelType.Helicopter; + TypeID = (byte)Type; + } + public Dat151Helicopter(RelData d, BinaryReader br) : base(d, br) + { + Flags = br.ReadUInt32(); + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadUInt32(); + Unk03 = br.ReadUInt32(); + Unk04 = br.ReadUInt32(); + Unk05 = br.ReadUInt32(); + Unk06 = br.ReadSingle(); + Unk07 = br.ReadUInt32(); + Unk08 = br.ReadUInt32(); + Unk09 = br.ReadUInt32(); + Unk10 = br.ReadUInt32(); + Unk11 = br.ReadUInt32(); + Unk12 = br.ReadUInt32(); + Unk13 = br.ReadUInt32(); + Unk14 = br.ReadUInt32(); + Unk15 = br.ReadUInt32(); + Unk16 = br.ReadInt16(); + Unk17 = br.ReadInt16(); + Unk18 = br.ReadInt16(); + Unk19 = br.ReadInt16(); + Unk20 = br.ReadInt16(); + Unk21 = br.ReadInt16(); + Unk22 = br.ReadInt16(); + Unk23 = br.ReadInt16(); + Unk24 = br.ReadInt16(); + Unk25 = br.ReadInt16(); + Unk26 = br.ReadUInt32(); + Unk27 = br.ReadUInt32(); + Unk28 = br.ReadUInt32(); + Unk29 = br.ReadUInt32(); + Unk30 = br.ReadUInt32(); + Unk31 = br.ReadUInt32(); + Unk32 = br.ReadUInt32(); + Unk33 = br.ReadUInt32(); + Unk34 = br.ReadUInt32(); + Unk35 = br.ReadUInt32(); + Unk36 = br.ReadInt16(); + Unk37 = br.ReadInt16(); + Unk38 = br.ReadInt16(); + Unk39 = br.ReadInt16(); + Unk40 = br.ReadInt32(); + Unk41 = br.ReadUInt32(); + Unk42 = br.ReadUInt32(); + Unk43 = br.ReadUInt32(); + Unk44 = br.ReadUInt32(); + Unk45 = br.ReadInt32(); + Unk46 = br.ReadUInt32(); + Unk47 = br.ReadUInt32(); + Unk48 = br.ReadUInt32(); + Unk49 = br.ReadUInt32(); + Unk50 = br.ReadUInt32(); + Unk51 = br.ReadInt32(); + Unk52 = br.ReadUInt32(); + Unk53 = br.ReadUInt32(); + Unk54 = br.ReadUInt32(); + Unk55 = br.ReadUInt32(); + Unk56 = br.ReadUInt32(); + Unk57 = br.ReadUInt32(); + Unk58 = br.ReadUInt32(); + Unk59 = br.ReadUInt32(); + Unk60 = br.ReadUInt32(); + Unk61 = br.ReadUInt32(); + Unk62 = br.ReadUInt32(); + Unk63 = br.ReadUInt32(); + Unk64 = br.ReadUInt32(); + Unk65 = br.ReadUInt32(); + Unk66 = br.ReadUInt32(); + Unk67 = br.ReadUInt32(); + Unk68 = br.ReadUInt32(); + Unk69 = br.ReadSingle(); + Unk70 = br.ReadSingle(); + Unk71 = br.ReadUInt32(); + Unk72 = br.ReadUInt32(); + Unk73 = br.ReadUInt32(); + Unk74 = br.ReadUInt32(); + Unk75 = br.ReadUInt32(); + Unk76 = br.ReadUInt32(); + Unk77 = br.ReadUInt32(); + Unk78 = br.ReadUInt32(); + Unk79 = br.ReadUInt32(); + Unk80 = br.ReadUInt32(); + Unk81 = br.ReadUInt32(); + Unk82 = br.ReadUInt32(); + Unk83 = br.ReadSingle(); + Unk84 = br.ReadSingle(); + Unk85 = br.ReadSingle(); + Unk86 = br.ReadUInt32(); + Unk87 = br.ReadUInt32(); + Unk88 = br.ReadUInt32(); + + + if (Unk52 != 0) + { } + if (Unk53 != 0) + { } + if (Unk54 != 0) + { } + if (Unk55 != 0) + { } + + + Version = 0; + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft >= 12) + { + Version = 1; + + Unk89 = br.ReadUInt32(); + Unk90 = br.ReadUInt32(); + Unk91 = br.ReadUInt32(); + } + + bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Flags); + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); + bw.Write(Unk14); + bw.Write(Unk15); + bw.Write(Unk16); + bw.Write(Unk17); + bw.Write(Unk18); + bw.Write(Unk19); + bw.Write(Unk20); + bw.Write(Unk21); + bw.Write(Unk22); + bw.Write(Unk23); + bw.Write(Unk24); + bw.Write(Unk25); + bw.Write(Unk26); + bw.Write(Unk27); + bw.Write(Unk28); + bw.Write(Unk29); + bw.Write(Unk30); + bw.Write(Unk31); + bw.Write(Unk32); + bw.Write(Unk33); + bw.Write(Unk34); + bw.Write(Unk35); + bw.Write(Unk36); + bw.Write(Unk37); + bw.Write(Unk38); + bw.Write(Unk39); + bw.Write(Unk40); + bw.Write(Unk41); + bw.Write(Unk42); + bw.Write(Unk43); + bw.Write(Unk44); + bw.Write(Unk45); + bw.Write(Unk46); + bw.Write(Unk47); + bw.Write(Unk48); + bw.Write(Unk49); + bw.Write(Unk50); + bw.Write(Unk51); + bw.Write(Unk52); + bw.Write(Unk53); + bw.Write(Unk54); + bw.Write(Unk55); + bw.Write(Unk56); + bw.Write(Unk57); + bw.Write(Unk58); + bw.Write(Unk59); + bw.Write(Unk60); + bw.Write(Unk61); + bw.Write(Unk62); + bw.Write(Unk63); + bw.Write(Unk64); + bw.Write(Unk65); + bw.Write(Unk66); + bw.Write(Unk67); + bw.Write(Unk68); + bw.Write(Unk69); + bw.Write(Unk70); + bw.Write(Unk71); + bw.Write(Unk72); + bw.Write(Unk73); + bw.Write(Unk74); + bw.Write(Unk75); + bw.Write(Unk76); + bw.Write(Unk77); + bw.Write(Unk78); + bw.Write(Unk79); + bw.Write(Unk80); + bw.Write(Unk81); + bw.Write(Unk82); + bw.Write(Unk83); + bw.Write(Unk84); + bw.Write(Unk85); + bw.Write(Unk86); + bw.Write(Unk87); + bw.Write(Unk88); + + if (Version >= 1) + { + bw.Write(Unk89); + bw.Write(Unk90); + bw.Write(Unk91); + } + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.ValueTag(sb, indent, "Version", Version.ToString()); //CW invention, not an actual field! + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); + RelXml.StringTag(sb, indent, "Unk04", RelXml.HashString(Unk04)); + RelXml.StringTag(sb, indent, "Unk05", RelXml.HashString(Unk05)); + RelXml.ValueTag(sb, indent, "Unk06", FloatUtil.ToString(Unk06)); + RelXml.StringTag(sb, indent, "Unk07", RelXml.HashString(Unk07)); + RelXml.StringTag(sb, indent, "Unk08", RelXml.HashString(Unk08)); + RelXml.StringTag(sb, indent, "Unk09", RelXml.HashString(Unk09)); + RelXml.StringTag(sb, indent, "Unk10", RelXml.HashString(Unk10)); + RelXml.StringTag(sb, indent, "Unk11", RelXml.HashString(Unk11)); + RelXml.StringTag(sb, indent, "Unk12", RelXml.HashString(Unk12)); + RelXml.StringTag(sb, indent, "Unk13", RelXml.HashString(Unk13)); + RelXml.StringTag(sb, indent, "Unk14", RelXml.HashString(Unk14)); + RelXml.StringTag(sb, indent, "Unk15", RelXml.HashString(Unk15)); + RelXml.ValueTag(sb, indent, "Unk16", Unk16.ToString()); + RelXml.ValueTag(sb, indent, "Unk17", Unk17.ToString()); + RelXml.ValueTag(sb, indent, "Unk18", Unk18.ToString()); + RelXml.ValueTag(sb, indent, "Unk19", Unk19.ToString()); + RelXml.ValueTag(sb, indent, "Unk20", Unk20.ToString()); + RelXml.ValueTag(sb, indent, "Unk21", Unk21.ToString()); + RelXml.ValueTag(sb, indent, "Unk22", Unk22.ToString()); + RelXml.ValueTag(sb, indent, "Unk23", Unk23.ToString()); + RelXml.ValueTag(sb, indent, "Unk24", Unk24.ToString()); + RelXml.ValueTag(sb, indent, "Unk25", Unk25.ToString()); + RelXml.StringTag(sb, indent, "Unk26", RelXml.HashString(Unk26)); + RelXml.StringTag(sb, indent, "Unk27", RelXml.HashString(Unk27)); + RelXml.StringTag(sb, indent, "Unk28", RelXml.HashString(Unk28)); + RelXml.StringTag(sb, indent, "Unk29", RelXml.HashString(Unk29)); + RelXml.StringTag(sb, indent, "Unk30", RelXml.HashString(Unk30)); + RelXml.StringTag(sb, indent, "Unk31", RelXml.HashString(Unk31)); + RelXml.StringTag(sb, indent, "Unk32", RelXml.HashString(Unk32)); + RelXml.StringTag(sb, indent, "Unk33", RelXml.HashString(Unk33)); + RelXml.StringTag(sb, indent, "Unk34", RelXml.HashString(Unk34)); + RelXml.StringTag(sb, indent, "Unk35", RelXml.HashString(Unk35)); + RelXml.ValueTag(sb, indent, "Unk36", Unk36.ToString()); + RelXml.ValueTag(sb, indent, "Unk37", Unk37.ToString()); + RelXml.ValueTag(sb, indent, "Unk38", Unk38.ToString()); + RelXml.ValueTag(sb, indent, "Unk39", Unk39.ToString()); + RelXml.ValueTag(sb, indent, "Unk40", Unk40.ToString()); + RelXml.StringTag(sb, indent, "Unk41", RelXml.HashString(Unk41)); + RelXml.StringTag(sb, indent, "Unk42", RelXml.HashString(Unk42)); + RelXml.StringTag(sb, indent, "Unk43", RelXml.HashString(Unk43)); + RelXml.StringTag(sb, indent, "Unk44", RelXml.HashString(Unk44)); + RelXml.ValueTag(sb, indent, "Unk45", Unk45.ToString()); + RelXml.StringTag(sb, indent, "Unk46", RelXml.HashString(Unk46)); + RelXml.StringTag(sb, indent, "Unk47", RelXml.HashString(Unk47)); + RelXml.StringTag(sb, indent, "Unk48", RelXml.HashString(Unk48)); + RelXml.StringTag(sb, indent, "Unk49", RelXml.HashString(Unk49)); + RelXml.StringTag(sb, indent, "Unk50", RelXml.HashString(Unk50)); + RelXml.ValueTag(sb, indent, "Unk51", Unk51.ToString()); + RelXml.StringTag(sb, indent, "Unk52", RelXml.HashString(Unk52)); + RelXml.StringTag(sb, indent, "Unk53", RelXml.HashString(Unk53)); + RelXml.StringTag(sb, indent, "Unk54", RelXml.HashString(Unk54)); + RelXml.StringTag(sb, indent, "Unk55", RelXml.HashString(Unk55)); + RelXml.StringTag(sb, indent, "Unk56", RelXml.HashString(Unk56)); + RelXml.StringTag(sb, indent, "Unk57", RelXml.HashString(Unk57)); + RelXml.StringTag(sb, indent, "Unk58", RelXml.HashString(Unk58)); + RelXml.StringTag(sb, indent, "Unk59", RelXml.HashString(Unk59)); + RelXml.StringTag(sb, indent, "Unk60", RelXml.HashString(Unk60)); + RelXml.StringTag(sb, indent, "Unk61", RelXml.HashString(Unk61)); + RelXml.StringTag(sb, indent, "Unk62", RelXml.HashString(Unk62)); + RelXml.StringTag(sb, indent, "Unk63", RelXml.HashString(Unk63)); + RelXml.StringTag(sb, indent, "Unk64", RelXml.HashString(Unk64)); + RelXml.StringTag(sb, indent, "Unk65", RelXml.HashString(Unk65)); + RelXml.StringTag(sb, indent, "Unk66", RelXml.HashString(Unk66)); + RelXml.StringTag(sb, indent, "Unk67", RelXml.HashString(Unk67)); + RelXml.StringTag(sb, indent, "Unk68", RelXml.HashString(Unk68)); + RelXml.ValueTag(sb, indent, "Unk69", FloatUtil.ToString(Unk69)); + RelXml.ValueTag(sb, indent, "Unk70", FloatUtil.ToString(Unk70)); + RelXml.StringTag(sb, indent, "Unk71", RelXml.HashString(Unk71)); + RelXml.StringTag(sb, indent, "Unk72", RelXml.HashString(Unk72)); + RelXml.StringTag(sb, indent, "Unk73", RelXml.HashString(Unk73)); + RelXml.StringTag(sb, indent, "Unk74", RelXml.HashString(Unk74)); + RelXml.StringTag(sb, indent, "Unk75", RelXml.HashString(Unk75)); + RelXml.StringTag(sb, indent, "Unk76", RelXml.HashString(Unk76)); + RelXml.StringTag(sb, indent, "Unk77", RelXml.HashString(Unk77)); + RelXml.StringTag(sb, indent, "Unk78", RelXml.HashString(Unk78)); + RelXml.StringTag(sb, indent, "Unk79", RelXml.HashString(Unk79)); + RelXml.StringTag(sb, indent, "Unk80", RelXml.HashString(Unk80)); + RelXml.StringTag(sb, indent, "Unk81", RelXml.HashString(Unk81)); + RelXml.StringTag(sb, indent, "Unk82", RelXml.HashString(Unk82)); + RelXml.ValueTag(sb, indent, "Unk83", FloatUtil.ToString(Unk83)); + RelXml.ValueTag(sb, indent, "Unk84", FloatUtil.ToString(Unk84)); + RelXml.ValueTag(sb, indent, "Unk85", FloatUtil.ToString(Unk85)); + RelXml.StringTag(sb, indent, "Unk86", RelXml.HashString(Unk86)); + RelXml.StringTag(sb, indent, "Unk87", RelXml.HashString(Unk87)); + RelXml.StringTag(sb, indent, "Unk88", RelXml.HashString(Unk88)); + + if (Version >= 1) + { + RelXml.StringTag(sb, indent, "Unk89", RelXml.HashString(Unk89)); + RelXml.StringTag(sb, indent, "Unk90", RelXml.HashString(Unk90)); + RelXml.StringTag(sb, indent, "Unk91", RelXml.HashString(Unk91)); + } + + } + public override void ReadXml(XmlNode node) + { + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Version = Xml.GetChildIntAttribute(node, "Version", "value"); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk04")); + Unk05 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk05")); + Unk06 = Xml.GetChildFloatAttribute(node, "Unk06", "value"); + Unk07 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk07")); + Unk08 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk08")); + Unk09 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk09")); + Unk10 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk10")); + Unk11 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk11")); + Unk12 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk12")); + Unk13 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk13")); + Unk14 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk14")); + Unk15 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk15")); + Unk16 = (short)Xml.GetChildIntAttribute(node, "Unk16", "value"); + Unk17 = (short)Xml.GetChildIntAttribute(node, "Unk17", "value"); + Unk18 = (short)Xml.GetChildIntAttribute(node, "Unk18", "value"); + Unk19 = (short)Xml.GetChildIntAttribute(node, "Unk19", "value"); + Unk20 = (short)Xml.GetChildIntAttribute(node, "Unk20", "value"); + Unk21 = (short)Xml.GetChildIntAttribute(node, "Unk21", "value"); + Unk22 = (short)Xml.GetChildIntAttribute(node, "Unk22", "value"); + Unk23 = (short)Xml.GetChildIntAttribute(node, "Unk23", "value"); + Unk24 = (short)Xml.GetChildIntAttribute(node, "Unk24", "value"); + Unk25 = (short)Xml.GetChildIntAttribute(node, "Unk25", "value"); + Unk26 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk26")); + Unk27 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk27")); + Unk28 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk28")); + Unk29 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk29")); + Unk30 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk30")); + Unk31 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk31")); + Unk32 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk32")); + Unk33 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk33")); + Unk34 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk34")); + Unk35 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk35")); + Unk36 = (short)Xml.GetChildIntAttribute(node, "Unk36", "value"); + Unk37 = (short)Xml.GetChildIntAttribute(node, "Unk37", "value"); + Unk38 = (short)Xml.GetChildIntAttribute(node, "Unk38", "value"); + Unk39 = (short)Xml.GetChildIntAttribute(node, "Unk39", "value"); + Unk40 = Xml.GetChildIntAttribute(node, "Unk40", "value"); + Unk41 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk41")); + Unk42 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk42")); + Unk43 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk43")); + Unk44 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk44")); + Unk45 = Xml.GetChildIntAttribute(node, "Unk45", "value"); + Unk46 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk46")); + Unk47 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk47")); + Unk48 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk48")); + Unk49 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk49")); + Unk50 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk50")); + Unk51 = Xml.GetChildIntAttribute(node, "Unk51", "value"); + Unk52 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk52")); + Unk53 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk53")); + Unk54 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk54")); + Unk55 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk55")); + Unk56 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk56")); + Unk57 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk57")); + Unk58 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk58")); + Unk59 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk59")); + Unk60 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk60")); + Unk61 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk61")); + Unk62 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk62")); + Unk63 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk63")); + Unk64 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk64")); + Unk65 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk65")); + Unk66 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk66")); + Unk67 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk67")); + Unk68 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk68")); + Unk69 = Xml.GetChildFloatAttribute(node, "Unk69", "value"); + Unk70 = Xml.GetChildFloatAttribute(node, "Unk70", "value"); + Unk71 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk71")); + Unk72 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk72")); + Unk73 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk73")); + Unk74 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk74")); + Unk75 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk75")); + Unk76 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk76")); + Unk77 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk77")); + Unk78 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk78")); + Unk79 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk79")); + Unk80 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk80")); + Unk81 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk81")); + Unk82 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk82")); + Unk83 = Xml.GetChildFloatAttribute(node, "Unk83", "value"); + Unk84 = Xml.GetChildFloatAttribute(node, "Unk84", "value"); + Unk85 = Xml.GetChildFloatAttribute(node, "Unk85", "value"); + Unk86 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk86")); + Unk87 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk87")); + Unk88 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk88")); + + if (Version >= 1) + { + Unk89 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk89")); + Unk90 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk90")); + Unk91 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk91")); + } + } + } + [TC(typeof(EXP))] public class Dat151VehicleTrailer : Dat151RelData + { + public MetaHash Unk01 { get; set; } + public int Unk02 { get; set; } + public MetaHash Unk03 { get; set; } + public MetaHash Unk04 { get; set; } + public MetaHash Unk05 { get; set; } + public MetaHash Unk06 { get; set; }//0 + public float Unk07 { get; set; } + public int Unk08 { get; set; } + public float Unk09 { get; set; } + public int Unk10 { get; set; } + public MetaHash Unk11 { get; set; }//0 + public float Unk12 { get; set; } + + public Dat151VehicleTrailer(RelFile rel) : base(rel) + { + Type = Dat151RelType.VehicleTrailer; + TypeID = (byte)Type; + } + public Dat151VehicleTrailer(RelData d, BinaryReader br) : base(d, br) + { + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadInt32(); + Unk03 = br.ReadUInt32(); + Unk04 = br.ReadUInt32(); + Unk05 = br.ReadUInt32(); + Unk06 = br.ReadUInt32();//0 + Unk07 = br.ReadSingle(); + Unk08 = br.ReadInt32(); + Unk09 = br.ReadSingle(); + Unk10 = br.ReadInt32(); + Unk11 = br.ReadUInt32();//0 + Unk12 = br.ReadSingle(); + + if (Unk06 != 0) + { } + if (Unk11 != 0) + { } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); + RelXml.StringTag(sb, indent, "Unk04", RelXml.HashString(Unk04)); + RelXml.StringTag(sb, indent, "Unk05", RelXml.HashString(Unk05)); + RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); + RelXml.ValueTag(sb, indent, "Unk07", FloatUtil.ToString(Unk07)); + RelXml.ValueTag(sb, indent, "Unk08", Unk08.ToString()); + RelXml.ValueTag(sb, indent, "Unk09", FloatUtil.ToString(Unk09)); + RelXml.ValueTag(sb, indent, "Unk10", Unk10.ToString()); + RelXml.StringTag(sb, indent, "Unk11", RelXml.HashString(Unk11)); + RelXml.ValueTag(sb, indent, "Unk12", FloatUtil.ToString(Unk12)); + } + public override void ReadXml(XmlNode node) + { + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = Xml.GetChildIntAttribute(node, "Unk02", "value"); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk04")); + Unk05 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk05")); + Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); + Unk07 = Xml.GetChildFloatAttribute(node, "Unk07", "value"); + Unk08 = Xml.GetChildIntAttribute(node, "Unk08", "value"); + Unk09 = Xml.GetChildFloatAttribute(node, "Unk09", "value"); + Unk10 = Xml.GetChildIntAttribute(node, "Unk10", "value"); + Unk11 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk11")); + Unk12 = Xml.GetChildFloatAttribute(node, "Unk12", "value"); + } + } @@ -12856,69 +14581,6 @@ namespace CodeWalker.GameFiles //TODO classes - [TC(typeof(EXP))] public class Dat151VehicleTrailer : Dat151RelData - { - public Dat151VehicleTrailer(RelFile rel) : base(rel) - { - Type = Dat151RelType.VehicleTrailer; - TypeID = (byte)Type; - } - public Dat151VehicleTrailer(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - WriteTypeAndOffset(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - } - } - [TC(typeof(EXP))] public class Dat151Unk7 : Dat151RelData - { - public Dat151Unk7(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk7; - TypeID = (byte)Type; - } - public Dat151Unk7(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - WriteTypeAndOffset(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - } - } - [TC(typeof(EXP))] public class Dat151Helicopter : Dat151RelData - { - public Dat151Helicopter(RelFile rel) : base(rel) - { - Type = Dat151RelType.Helicopter; - TypeID = (byte)Type; - } - public Dat151Helicopter(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - WriteTypeAndOffset(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - } - } [TC(typeof(EXP))] public class Dat151Unk9 : Dat151RelData { public Dat151Unk9(RelFile rel) : base(rel) @@ -13045,27 +14707,6 @@ namespace CodeWalker.GameFiles { } } - [TC(typeof(EXP))] public class Dat151Boat : Dat151RelData - { - public Dat151Boat(RelFile rel) : base(rel) - { - Type = Dat151RelType.Boat; - TypeID = (byte)Type; - } - public Dat151Boat(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - WriteTypeAndOffset(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - } - } [TC(typeof(EXP))] public class Dat151Unk18 : Dat151RelData { public Dat151Unk18(RelFile rel) : base(rel) @@ -13444,48 +15085,6 @@ namespace CodeWalker.GameFiles { } } - [TC(typeof(EXP))] public class Dat151Bicycle : Dat151RelData - { - public Dat151Bicycle(RelFile rel) : base(rel) - { - Type = Dat151RelType.Bicycle; - TypeID = (byte)Type; - } - public Dat151Bicycle(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - WriteTypeAndOffset(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - } - } - [TC(typeof(EXP))] public class Dat151Aeroplane : Dat151RelData - { - public Dat151Aeroplane(RelFile rel) : base(rel) - { - Type = Dat151RelType.Aeroplane; - TypeID = (byte)Type; - } - public Dat151Aeroplane(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - WriteTypeAndOffset(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - } - } [TC(typeof(EXP))] public class Dat151Unk59 : Dat151RelData { public Dat151Unk59(RelFile rel) : base(rel) diff --git a/CodeWalker.Core/GameFiles/MetaTypes/Meta.cs b/CodeWalker.Core/GameFiles/MetaTypes/Meta.cs index df90f1b..2f9d2b3 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/Meta.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/Meta.cs @@ -1080,6 +1080,30 @@ namespace CodeWalker.GameFiles } } + public float Float + { + get + { + return MetaTypes.ConvertData(MetaTypes.ConvertToBytes(Hash)); + } + } + + public short Short1 + { + get + { + return (short)(Hash & 0xFFFF); + } + } + public short Short2 + { + get + { + return (short)((Hash >> 16) & 0xFFFF); + } + } + + public MetaHash(uint h) { Hash = h; } public override string ToString() From 21c9eda43c775685cfa9270f47c2d67ecd2a0976 Mon Sep 17 00:00:00 2001 From: dexyfex Date: Sun, 3 Mar 2019 04:54:13 +1100 Subject: [PATCH 141/158] Dat151 progress --- .../GameFiles/FileTypes/RelFile.cs | 552 +++++++++++++++--- 1 file changed, 480 insertions(+), 72 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index 4294c31..030172c 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -603,8 +603,10 @@ namespace CodeWalker.GameFiles case Dat151RelType.Helicopter: return new Dat151Helicopter(d, br); case Dat151RelType.VehicleTrailer: return new Dat151VehicleTrailer(d, br); + case Dat151RelType.Train: return new Dat151Train(d, br); + case Dat151RelType.AnimalParams: return new Dat151AnimalParams(d, br); //case Dat151RelType.SpeechParams: return new Dat151SpeechParams(d, br); - //case Dat151RelType.AnimalParams: return new Dat151AnimalParams(d, br); + //case Dat151RelType.Unk9: return new Dat151Unk9(d, br); //case Dat151RelType.Unk11: return new Dat151Unk11(d, br); //case Dat151RelType.Unk12: return new Dat151Unk12(d, br); @@ -626,7 +628,6 @@ namespace CodeWalker.GameFiles //case Dat151RelType.Unk45: return new Dat151Unk45(d, br); //case Dat151RelType.Unk48: return new Dat151Unk48(d, br); //case Dat151RelType.Unk51: return new Dat151Unk51(d, br); - //case Dat151RelType.Unk53: return new Dat151Unk53(d, br); //case Dat151RelType.Unk54: return new Dat151Unk54(d, br); //case Dat151RelType.Unk59: return new Dat151Unk59(d, br); //case Dat151RelType.Unk69: return new Dat151Unk69(d, br); @@ -773,8 +774,10 @@ namespace CodeWalker.GameFiles case Dat151RelType.Helicopter: return new Dat151Helicopter(this); case Dat151RelType.VehicleTrailer: return new Dat151VehicleTrailer(this); + case Dat151RelType.Train: return new Dat151Train(this); + case Dat151RelType.AnimalParams: return new Dat151AnimalParams(this); //case Dat151RelType.SpeechParams: return new Dat151SpeechParams(this); - //case Dat151RelType.AnimalParams: return new Dat151AnimalParams(this); + //case Dat151RelType.Unk9: return new Dat151Unk9(this); //case Dat151RelType.Unk11: return new Dat151Unk11(this); //case Dat151RelType.Unk12: return new Dat151Unk12(this); @@ -796,7 +799,6 @@ namespace CodeWalker.GameFiles //case Dat151RelType.Unk45: return new Dat151Unk45(this); //case Dat151RelType.Unk48: return new Dat151Unk48(this); //case Dat151RelType.Unk51: return new Dat151Unk51(this); - //case Dat151RelType.Unk53: return new Dat151Unk53(this); //case Dat151RelType.Unk54: return new Dat151Unk54(this); //case Dat151RelType.Unk59: return new Dat151Unk59(this); //case Dat151RelType.Unk69: return new Dat151Unk69(this); @@ -5174,7 +5176,7 @@ namespace CodeWalker.GameFiles Prop = 7,//prop? eg. fan, radar Helicopter = 8, Unk9 = 9, - Unk11 = 11, + Unk11 = 11, //contains reference to Unk12 Unk12 = 12, Unk13 = 13, SpeechParams = 14, @@ -5200,7 +5202,7 @@ namespace CodeWalker.GameFiles AmbientEmitter = 38, AmbientZoneList = 39, Unk40 = 40, - Unk41 = 41, + Unk41 = 41, //ambience_bank_map_autogenerated Unk42 = 42, Interior = 44, Unk45 = 45, @@ -5235,7 +5237,7 @@ namespace CodeWalker.GameFiles Unk77 = 77, Unk78 = 78, Unk79 = 79, - Unk80 = 80, + Unk80 = 80, //vehicle record audio? (YVR) Unk81 = 81, Unk82 = 82, Unk83 = 83, //something to do with animals @@ -5259,7 +5261,7 @@ namespace CodeWalker.GameFiles FadeInRadioAction = 103, ForceRadioTrackAction = 104, Unk105 = 105, - Unk106 = 106, + Unk106 = 106, //scenario type, eg world_human_musician Unk107 = 107, Unk108 = 108, Unk109 = 109, @@ -14572,6 +14574,445 @@ namespace CodeWalker.GameFiles } } + [TC(typeof(EXP))] public class Dat151Train : Dat151RelData + { + public MetaHash Unk00 { get; set; } + public MetaHash Unk01 { get; set; }//0 + public MetaHash Unk02 { get; set; } + public MetaHash Unk03 { get; set; } + public MetaHash Unk04 { get; set; } + public MetaHash Unk05 { get; set; } + public MetaHash Unk06 { get; set; } + public MetaHash Unk07 { get; set; } + public MetaHash Unk08 { get; set; } + public MetaHash Unk09 { get; set; } + public MetaHash Unk10 { get; set; } + public MetaHash Unk11 { get; set; }//shorts? 4272750130 -462,-340 + public MetaHash Unk12 { get; set; } + public MetaHash Unk13 { get; set; } + public MetaHash Unk14 { get; set; } + public MetaHash Unk15 { get; set; } + public MetaHash Unk16 { get; set; } + public MetaHash Unk17 { get; set; } + public MetaHash Unk18 { get; set; } + public MetaHash Unk19 { get; set; } + public MetaHash Unk20 { get; set; }//f? 3123948585 -0.0006853962 + public MetaHash Unk21 { get; set; } + public MetaHash Unk22 { get; set; } + public MetaHash Unk23 { get; set; } + public MetaHash Unk24 { get; set; } + public MetaHash Unk25 { get; set; }//f? 1034145554 0.0799848 + public MetaHash Unk26 { get; set; } + public MetaHash Unk27 { get; set; }//f? 1180265007 13914.5459 + public MetaHash Unk28 { get; set; } + public MetaHash Unk29 { get; set; } + public MetaHash Unk30 { get; set; } + public MetaHash Unk31 { get; set; } + public MetaHash Unk32 { get; set; } + public MetaHash Unk33 { get; set; } + public MetaHash Unk34 { get; set; } + public MetaHash Unk35 { get; set; } + public MetaHash Unk36 { get; set; } + public MetaHash Unk37 { get; set; }//f? 1122753141 117.926674 + + + public Dat151Train(RelFile rel) : base(rel) + { + Type = Dat151RelType.Train; + TypeID = (byte)Type; + } + public Dat151Train(RelData d, BinaryReader br) : base(d, br) + { + Unk00 = br.ReadUInt32(); + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadUInt32(); + Unk03 = br.ReadUInt32(); + Unk04 = br.ReadUInt32(); + Unk05 = br.ReadUInt32(); + Unk06 = br.ReadUInt32(); + Unk07 = br.ReadUInt32(); + Unk08 = br.ReadUInt32(); + Unk09 = br.ReadUInt32(); + Unk10 = br.ReadUInt32(); + Unk11 = br.ReadUInt32(); + Unk12 = br.ReadUInt32(); + Unk13 = br.ReadUInt32(); + Unk14 = br.ReadUInt32(); + Unk15 = br.ReadUInt32(); + Unk16 = br.ReadUInt32(); + Unk17 = br.ReadUInt32(); + Unk18 = br.ReadUInt32(); + Unk19 = br.ReadUInt32(); + Unk20 = br.ReadUInt32(); + Unk21 = br.ReadUInt32(); + Unk22 = br.ReadUInt32(); + Unk23 = br.ReadUInt32(); + Unk24 = br.ReadUInt32(); + Unk25 = br.ReadUInt32(); + Unk26 = br.ReadUInt32(); + Unk27 = br.ReadUInt32(); + Unk28 = br.ReadUInt32(); + Unk29 = br.ReadUInt32(); + Unk30 = br.ReadUInt32(); + Unk31 = br.ReadUInt32(); + Unk32 = br.ReadUInt32(); + Unk33 = br.ReadUInt32(); + Unk34 = br.ReadUInt32(); + Unk35 = br.ReadUInt32(); + Unk36 = br.ReadUInt32(); + Unk37 = br.ReadUInt32(); + + if (Unk01 != 0) + { } + if (Unk11 != 4272750130) + { } + if (Unk20 != 3123948585) + { } + if (Unk25 != 1034145554) + { } + if (Unk27 != 1180265007) + { } + if (Unk37 != 1122753141) + { } + + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk00); + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); + bw.Write(Unk14); + bw.Write(Unk15); + bw.Write(Unk16); + bw.Write(Unk17); + bw.Write(Unk18); + bw.Write(Unk19); + bw.Write(Unk20); + bw.Write(Unk21); + bw.Write(Unk22); + bw.Write(Unk23); + bw.Write(Unk24); + bw.Write(Unk25); + bw.Write(Unk26); + bw.Write(Unk27); + bw.Write(Unk28); + bw.Write(Unk29); + bw.Write(Unk30); + bw.Write(Unk31); + bw.Write(Unk32); + bw.Write(Unk33); + bw.Write(Unk34); + bw.Write(Unk35); + bw.Write(Unk36); + bw.Write(Unk37); + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Unk00", RelXml.HashString(Unk00)); + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); + RelXml.StringTag(sb, indent, "Unk04", RelXml.HashString(Unk04)); + RelXml.StringTag(sb, indent, "Unk05", RelXml.HashString(Unk05)); + RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); + RelXml.StringTag(sb, indent, "Unk07", RelXml.HashString(Unk07)); + RelXml.StringTag(sb, indent, "Unk08", RelXml.HashString(Unk08)); + RelXml.StringTag(sb, indent, "Unk09", RelXml.HashString(Unk09)); + RelXml.StringTag(sb, indent, "Unk10", RelXml.HashString(Unk10)); + RelXml.StringTag(sb, indent, "Unk11", RelXml.HashString(Unk11)); + RelXml.StringTag(sb, indent, "Unk12", RelXml.HashString(Unk12)); + RelXml.StringTag(sb, indent, "Unk13", RelXml.HashString(Unk13)); + RelXml.StringTag(sb, indent, "Unk14", RelXml.HashString(Unk14)); + RelXml.StringTag(sb, indent, "Unk15", RelXml.HashString(Unk15)); + RelXml.StringTag(sb, indent, "Unk16", RelXml.HashString(Unk16)); + RelXml.StringTag(sb, indent, "Unk17", RelXml.HashString(Unk17)); + RelXml.StringTag(sb, indent, "Unk18", RelXml.HashString(Unk18)); + RelXml.StringTag(sb, indent, "Unk19", RelXml.HashString(Unk19)); + RelXml.StringTag(sb, indent, "Unk20", RelXml.HashString(Unk20)); + RelXml.StringTag(sb, indent, "Unk21", RelXml.HashString(Unk21)); + RelXml.StringTag(sb, indent, "Unk22", RelXml.HashString(Unk22)); + RelXml.StringTag(sb, indent, "Unk23", RelXml.HashString(Unk23)); + RelXml.StringTag(sb, indent, "Unk24", RelXml.HashString(Unk24)); + RelXml.StringTag(sb, indent, "Unk25", RelXml.HashString(Unk25)); + RelXml.StringTag(sb, indent, "Unk26", RelXml.HashString(Unk26)); + RelXml.StringTag(sb, indent, "Unk27", RelXml.HashString(Unk27)); + RelXml.StringTag(sb, indent, "Unk28", RelXml.HashString(Unk28)); + RelXml.StringTag(sb, indent, "Unk29", RelXml.HashString(Unk29)); + RelXml.StringTag(sb, indent, "Unk30", RelXml.HashString(Unk30)); + RelXml.StringTag(sb, indent, "Unk31", RelXml.HashString(Unk31)); + RelXml.StringTag(sb, indent, "Unk32", RelXml.HashString(Unk32)); + RelXml.StringTag(sb, indent, "Unk33", RelXml.HashString(Unk33)); + RelXml.StringTag(sb, indent, "Unk34", RelXml.HashString(Unk34)); + RelXml.StringTag(sb, indent, "Unk35", RelXml.HashString(Unk35)); + RelXml.StringTag(sb, indent, "Unk36", RelXml.HashString(Unk36)); + RelXml.StringTag(sb, indent, "Unk37", RelXml.HashString(Unk37)); + } + public override void ReadXml(XmlNode node) + { + Unk00 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk00")); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk04")); + Unk05 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk05")); + Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); + Unk07 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk07")); + Unk08 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk08")); + Unk09 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk09")); + Unk10 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk10")); + Unk11 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk11")); + Unk12 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk12")); + Unk13 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk13")); + Unk14 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk14")); + Unk15 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk15")); + Unk16 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk16")); + Unk17 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk17")); + Unk18 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk18")); + Unk19 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk19")); + Unk20 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk20")); + Unk21 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk21")); + Unk22 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk22")); + Unk23 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk23")); + Unk24 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk24")); + Unk25 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk25")); + Unk26 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk26")); + Unk27 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk27")); + Unk28 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk28")); + Unk29 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk29")); + Unk30 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk30")); + Unk31 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk31")); + Unk32 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk32")); + Unk33 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk33")); + Unk34 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk34")); + Unk35 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk35")); + Unk36 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk36")); + Unk37 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk37")); + } + } + [TC(typeof(EXP))] public class Dat151AnimalParamsItem + { + public string Name { get; set; } + public float Unk1 { get; set; } + public float Unk2 { get; set; } + public int Unk3 { get; set; } + public float Unk4 { get; set; } + public int Unk5 { get; set; } + public int Unk6 { get; set; } + public float Unk7 { get; set; } + public byte Unk8 { get; set; } + + public override string ToString() + { + return Name; + } + + public Dat151AnimalParamsItem() + { + } + public Dat151AnimalParamsItem(BinaryReader br) + { + var data = br.ReadBytes(32); + Name = Encoding.ASCII.GetString(data).Replace("\0", ""); + Unk1 = br.ReadSingle(); + Unk2 = br.ReadSingle(); + Unk3 = br.ReadInt32(); + Unk4 = br.ReadSingle(); + Unk5 = br.ReadInt32(); + Unk6 = br.ReadInt32(); + Unk7 = br.ReadSingle(); + Unk8 = br.ReadByte(); + } + public void Write(BinaryWriter bw) + { + var data = new byte[32]; + int len = Math.Min(Name?.Length ?? 0, 32); + if (len > 0) + { + Encoding.ASCII.GetBytes(Name, 0, len, data, 0); + } + bw.Write(data); + bw.Write(Unk1); + bw.Write(Unk2); + bw.Write(Unk3); + bw.Write(Unk4); + bw.Write(Unk5); + bw.Write(Unk6); + bw.Write(Unk7); + bw.Write(Unk8); + } + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Name", Name); + RelXml.ValueTag(sb, indent, "Unk1", FloatUtil.ToString(Unk1)); + RelXml.ValueTag(sb, indent, "Unk2", FloatUtil.ToString(Unk2)); + RelXml.ValueTag(sb, indent, "Unk3", Unk3.ToString()); + RelXml.ValueTag(sb, indent, "Unk4", FloatUtil.ToString(Unk4)); + RelXml.ValueTag(sb, indent, "Unk5", Unk5.ToString()); + RelXml.ValueTag(sb, indent, "Unk6", Unk6.ToString()); + RelXml.ValueTag(sb, indent, "Unk7", FloatUtil.ToString(Unk7)); + RelXml.ValueTag(sb, indent, "Unk8", Unk8.ToString()); + } + public void ReadXml(XmlNode node) + { + Name = Xml.GetChildInnerText(node, "Name"); + Unk1 = Xml.GetChildFloatAttribute(node, "Unk1", "value"); + Unk2 = Xml.GetChildFloatAttribute(node, "Unk2", "value"); + Unk3 = Xml.GetChildIntAttribute(node, "Unk3", "value"); + Unk4 = Xml.GetChildFloatAttribute(node, "Unk4", "value"); + Unk5 = Xml.GetChildIntAttribute(node, "Unk5", "value"); + Unk6 = Xml.GetChildIntAttribute(node, "Unk6", "value"); + Unk7 = Xml.GetChildFloatAttribute(node, "Unk7", "value"); + Unk8 = (byte)Xml.GetChildUIntAttribute(node, "Unk8", "value"); + } + } + [TC(typeof(EXP))] public class Dat151AnimalParams : Dat151RelData + { + public int Unk01 { get; set; } + public float Unk02 { get; set; } + public float Unk03 { get; set; } + public int Unk04 { get; set; } + public byte Unk05 { get; set; } + public MetaHash Unk06 { get; set; } + public MetaHash Unk07 { get; set; } + public MetaHash Unk08 { get; set; } + public float Unk09 { get; set; } + public MetaHash Unk10 { get; set; } + public byte ItemCount { get; set; } + public Dat151AnimalParamsItem[] Items { get; set; } + + public Dat151AnimalParams(RelFile rel) : base(rel) + { + Type = Dat151RelType.AnimalParams; + TypeID = (byte)Type; + } + public Dat151AnimalParams(RelData d, BinaryReader br) : base(d, br) + { + + Unk01 = br.ReadInt32(); + Unk02 = br.ReadSingle(); + Unk03 = br.ReadSingle(); + Unk04 = br.ReadInt32(); + Unk05 = br.ReadByte(); + Unk06 = br.ReadUInt32(); + Unk07 = br.ReadUInt32(); + Unk08 = br.ReadUInt32(); + Unk09 = br.ReadSingle(); + Unk10 = br.ReadUInt32(); + ItemCount = br.ReadByte(); + + var items = new Dat151AnimalParamsItem[ItemCount]; + for (int i = 0; i < ItemCount; i++) + { + items[i] = new Dat151AnimalParamsItem(br); + } + Items = items; + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) + { + Items[i].Write(bw); + } + + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); + RelXml.ValueTag(sb, indent, "Unk02", FloatUtil.ToString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", FloatUtil.ToString(Unk03)); + RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); + RelXml.ValueTag(sb, indent, "Unk05", Unk05.ToString()); + RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); + RelXml.StringTag(sb, indent, "Unk07", RelXml.HashString(Unk07)); + RelXml.StringTag(sb, indent, "Unk08", RelXml.HashString(Unk08)); + RelXml.ValueTag(sb, indent, "Unk09", FloatUtil.ToString(Unk09)); + RelXml.StringTag(sb, indent, "Unk10", RelXml.HashString(Unk10)); + + if (ItemCount > 0) + { + RelXml.OpenTag(sb, indent, "Items"); + var cind = indent + 1; + var cind2 = indent + 2; + for (int i = 0; i < ItemCount; i++) + { + RelXml.OpenTag(sb, cind, "Item"); + Items[i].WriteXml(sb, cind2); + RelXml.CloseTag(sb, cind, "Item"); + } + RelXml.CloseTag(sb, indent, "Items"); + } + else + { + RelXml.SelfClosingTag(sb, indent, "Items"); + } + } + public override void ReadXml(XmlNode node) + { + Unk01 = Xml.GetChildIntAttribute(node, "Unk01", "value"); + Unk02 = Xml.GetChildFloatAttribute(node, "Unk02", "value"); + Unk03 = Xml.GetChildFloatAttribute(node, "Unk03", "value"); + Unk04 = Xml.GetChildIntAttribute(node, "Unk04", "value"); + Unk05 = (byte)Xml.GetChildUIntAttribute(node, "Unk05", "value"); + Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); + Unk07 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk07")); + Unk08 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk08")); + Unk09 = Xml.GetChildFloatAttribute(node, "Unk09", "value"); + Unk10 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk10")); + + var vnode2 = node.SelectSingleNode("Items"); + if (vnode2 != null) + { + var inodes = vnode2.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + var v = new Dat151AnimalParamsItem(); + v.ReadXml(inode); + vlist.Add(v); + } + ItemCount = (byte)vlist.Count; + Items = vlist.ToArray(); + } + } + } + } @@ -14581,6 +15022,36 @@ namespace CodeWalker.GameFiles //TODO classes + + [TC(typeof(EXP))] public class Dat151SpeechParams : Dat151RelData + { + public Dat151SpeechParams(RelFile rel) : base(rel) + { + Type = Dat151RelType.SpeechParams; + TypeID = (byte)Type; + } + public Dat151SpeechParams(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + //WriteTypeAndOffset(bw); + base.Write(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + } + } + + [TC(typeof(EXP))] public class Dat151Unk9 : Dat151RelData { public Dat151Unk9(RelFile rel) : base(rel) @@ -14665,27 +15136,6 @@ namespace CodeWalker.GameFiles { } } - [TC(typeof(EXP))] public class Dat151SpeechParams : Dat151RelData - { - public Dat151SpeechParams(RelFile rel) : base(rel) - { - Type = Dat151RelType.SpeechParams; - TypeID = (byte)Type; - } - public Dat151SpeechParams(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - WriteTypeAndOffset(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - } - } [TC(typeof(EXP))] public class Dat151Unk15 : Dat151RelData { public Dat151Unk15(RelFile rel) : base(rel) @@ -15043,27 +15493,6 @@ namespace CodeWalker.GameFiles { } } - [TC(typeof(EXP))] public class Dat151Train : Dat151RelData - { - public Dat151Train(RelFile rel) : base(rel) - { - Type = Dat151RelType.Train; - TypeID = (byte)Type; - } - public Dat151Train(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - WriteTypeAndOffset(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - } - } [TC(typeof(EXP))] public class Dat151Unk54 : Dat151RelData { public Dat151Unk54(RelFile rel) : base(rel) @@ -15190,27 +15619,6 @@ namespace CodeWalker.GameFiles { } } - [TC(typeof(EXP))] public class Dat151AnimalParams : Dat151RelData - { - public Dat151AnimalParams(RelFile rel) : base(rel) - { - Type = Dat151RelType.AnimalParams; - TypeID = (byte)Type; - } - public Dat151AnimalParams(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - WriteTypeAndOffset(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - } - } [TC(typeof(EXP))] public class Dat151Unk74 : Dat151RelData { public Dat151Unk74(RelFile rel) : base(rel) @@ -15295,7 +15703,7 @@ namespace CodeWalker.GameFiles { } } - [TC(typeof(EXP))] public class Dat151Unk80 : Dat151RelData + [TC(typeof(EXP))] public class Dat151Unk80 : Dat151RelData //vehicle record audio? (YVR) { public Dat151Unk80(RelFile rel) : base(rel) { From ebf2e5df87c7fc0a1f8a2b8c37ce9871a25d9d9d Mon Sep 17 00:00:00 2001 From: Carmine Date: Sat, 2 Mar 2019 18:57:10 +0100 Subject: [PATCH 142/158] Updated BoundMaterial_s and added BoundsMaterialType To/From byte implicit cast operators --- CodeWalker.Core/GameFiles/Resources/Bounds.cs | 92 +++++++++++++++---- 1 file changed, 73 insertions(+), 19 deletions(-) diff --git a/CodeWalker.Core/GameFiles/Resources/Bounds.cs b/CodeWalker.Core/GameFiles/Resources/Bounds.cs index def0ee2..4bf87ca 100644 --- a/CodeWalker.Core/GameFiles/Resources/Bounds.cs +++ b/CodeWalker.Core/GameFiles/Resources/Bounds.cs @@ -775,37 +775,81 @@ namespace CodeWalker.GameFiles } } - [TC(typeof(EXP))] [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct BoundMaterial_s + [TC(typeof(EXP))] + public struct BoundMaterial_s { - public BoundsMaterialType Type { get; set; } - public byte ProceduralId { get; set; } - public byte RoomId_and_PedDensity { get; set; } - public EBoundMaterialFlags Flags { get; set; } - public byte MaterialColorIndex { get; set; } - public ushort Unk4 { get; set; } - /// - /// Bits 0, 1, 2, 3, 4 of , values from 0 to 31 - /// - public byte RoomId + public uint Data1; + public uint Data2; + + #region Public Properties + + public BoundsMaterialType Type { - get => (byte)(RoomId_and_PedDensity & 0x1F); - set => RoomId_and_PedDensity = (byte)((RoomId_and_PedDensity & 0xE0) | (value & 0x1F)); + get => (BoundsMaterialType)(Data1 & 0xFFu); + set => Data1 = ((Data1 & 0xFFFFFF00u) | ((byte)value & 0xFFu)); + } + + public byte ProceduralId + { + get => (byte)((Data1 >> 8) & 0xFFu); + set => Data1 = ((Data1 & 0xFFFF00FFu) | ((value & 0xFFu) << 8)); + } + + public byte RoomId + { + get => (byte)((Data1 >> 16) & 0x1Fu); + set => Data1 = ((Data1 & 0xFFE0FFFFu) | ((value & 0x1Fu) << 16)); } - /// - /// Bits 5, 6, 7 of , values from 0 to 7 - /// public byte PedDensity { - get => (byte)((RoomId_and_PedDensity & 0xE0) >> 5); - set => RoomId_and_PedDensity = (byte)((RoomId_and_PedDensity & 0x1F) | ((value << 5) & 0xE0)); + get => (byte)((Data1 >> 21) & 0x7u); + set => Data1 = ((Data1 & 0xFF1FFFFFu) | ((value & 0x7u) << 21)); + } + + //public byte Flags1 + //{ + // get => (byte)((Data1 >> 24) & 0xFFu); + // set => Data1 = ((Data1 & 0xFFFFFFu) | ((value & 0xFFu) << 24)); + //} + + //public byte Flags2 + //{ + // get => (byte)((Data2 >> 24) & 0xFFu); + // set => Data2 = ((Data2 & 0xFFFFFFu) | ((value & 0xFFu) << 24)); + //} + + public EBoundMaterialFlags Flags + { + get => (EBoundMaterialFlags)(((Data1 >> 24) & 0xFFu) | ((Data2 & 0xFFu) << 8)); + set + { + Data1 = (Data1 & 0x00FFFFFFu) | (((ushort)value & 0x00FFu) << 24); + Data2 = (Data2 & 0xFFFFFF00u) | (((ushort)value & 0xFF00u) >> 8); + } + } + + public byte MaterialColorIndex + { + get => (byte)((Data2 >> 8) & 0xFFu); + set => Data2 = ((Data2 & 0xFFFF00FFu) | (value & 0xFFu)); + } + + public ushort Unk4 + { + get => (ushort)((Data2 >> 16) & 0xFFFFu); + set => Data2 = ((Data2 & 0x0000FFFFu) | ((value & 0xFFFFu) << 16)); } public override string ToString() { - return Type.ToString() + ", " + ProceduralId.ToString() + ", " + RoomId_and_PedDensity.ToString() + ", " + MaterialColorIndex.ToString() + ", " + Flags.ToString() + ", " + Unk4.ToString(); + return Data1.ToString() + ", " + Data2.ToString() + ", " + + Type.ToString() + ", " + ProceduralId.ToString() + ", " + RoomId.ToString() + ", " + PedDensity.ToString() + ", " + + Flags.ToString() + ", " + MaterialColorIndex.ToString() + ", " + Unk4.ToString(); } + + #endregion } [Flags] public enum EBoundMaterialFlags : ushort @@ -1472,6 +1516,16 @@ namespace CodeWalker.GameFiles { return BoundsMaterialTypes.GetMaterialName(this); } + + public static implicit operator byte(BoundsMaterialType matType) + { + return matType.Index; //implicit conversion + } + + public static implicit operator BoundsMaterialType(byte b) + { + return new BoundsMaterialType() { Index = b }; + } } [TC(typeof(EXP))] public class BoundsMaterialData From bb5647d1c1d8109c23aef83a792824329e042669 Mon Sep 17 00:00:00 2001 From: dexyfex Date: Mon, 4 Mar 2019 00:24:30 +1100 Subject: [PATCH 143/158] Dat151 progress --- .../GameFiles/FileTypes/RelFile.cs | 3289 +++++++---------- .../GameFiles/MetaTypes/MetaXml.cs | 46 +- 2 files changed, 1425 insertions(+), 1910 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index 030172c..cabbdb8 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -595,23 +595,21 @@ namespace CodeWalker.GameFiles case Dat151RelType.Weapon: return new Dat151Weapon(d, br); case Dat151RelType.Explosion: return new Dat151Explosion(d, br); case Dat151RelType.PedPVG: return new Dat151PedPVG(d, br); //maybe Ped Voice Group? - case Dat151RelType.Prop: return new Dat151Prop(d, br); case Dat151RelType.Boat: return new Dat151Boat(d, br); case Dat151RelType.Bicycle: return new Dat151Bicycle(d, br); case Dat151RelType.Aeroplane: return new Dat151Aeroplane(d, br); case Dat151RelType.Helicopter: return new Dat151Helicopter(d, br); case Dat151RelType.VehicleTrailer: return new Dat151VehicleTrailer(d, br); - case Dat151RelType.Train: return new Dat151Train(d, br); case Dat151RelType.AnimalParams: return new Dat151AnimalParams(d, br); - //case Dat151RelType.SpeechParams: return new Dat151SpeechParams(d, br); + case Dat151RelType.SpeechParams: return new Dat151SpeechParams(d, br); + case Dat151RelType.Unk9: return new Dat151Unk9(d, br); + case Dat151RelType.Unk11: return new Dat151Unk11(d, br); + case Dat151RelType.Unk12: return new Dat151Unk12(d, br); + case Dat151RelType.Unk13: return new Dat151Unk13(d, br); + case Dat151RelType.Unk15: return new Dat151Unk15(d, br); - //case Dat151RelType.Unk9: return new Dat151Unk9(d, br); - //case Dat151RelType.Unk11: return new Dat151Unk11(d, br); - //case Dat151RelType.Unk12: return new Dat151Unk12(d, br); - //case Dat151RelType.Unk13: return new Dat151Unk13(d, br); - //case Dat151RelType.Unk15: return new Dat151Unk15(d, br); //case Dat151RelType.Unk18: return new Dat151Unk18(d, br); //case Dat151RelType.Unk22: return new Dat151Unk22(d, br); //case Dat151RelType.Unk23: return new Dat151Unk23(d, br); @@ -766,23 +764,21 @@ namespace CodeWalker.GameFiles case Dat151RelType.Weapon: return new Dat151Weapon(this); case Dat151RelType.Explosion: return new Dat151Explosion(this); case Dat151RelType.PedPVG: return new Dat151PedPVG(this); //maybe Ped Voice Group? - case Dat151RelType.Prop: return new Dat151Prop(this); case Dat151RelType.Boat: return new Dat151Boat(this); case Dat151RelType.Bicycle: return new Dat151Bicycle(this); case Dat151RelType.Aeroplane: return new Dat151Aeroplane(this); case Dat151RelType.Helicopter: return new Dat151Helicopter(this); case Dat151RelType.VehicleTrailer: return new Dat151VehicleTrailer(this); - case Dat151RelType.Train: return new Dat151Train(this); case Dat151RelType.AnimalParams: return new Dat151AnimalParams(this); - //case Dat151RelType.SpeechParams: return new Dat151SpeechParams(this); + case Dat151RelType.SpeechParams: return new Dat151SpeechParams(this); + case Dat151RelType.Unk9: return new Dat151Unk9(this); + case Dat151RelType.Unk11: return new Dat151Unk11(this); + case Dat151RelType.Unk12: return new Dat151Unk12(this); + case Dat151RelType.Unk13: return new Dat151Unk13(this); + case Dat151RelType.Unk15: return new Dat151Unk15(this); - //case Dat151RelType.Unk9: return new Dat151Unk9(this); - //case Dat151RelType.Unk11: return new Dat151Unk11(this); - //case Dat151RelType.Unk12: return new Dat151Unk12(this); - //case Dat151RelType.Unk13: return new Dat151Unk13(this); - //case Dat151RelType.Unk15: return new Dat151Unk15(this); //case Dat151RelType.Unk18: return new Dat151Unk18(this); //case Dat151RelType.Unk22: return new Dat151Unk22(this); //case Dat151RelType.Unk23: return new Dat151Unk23(this); @@ -3086,56 +3082,29 @@ namespace CodeWalker.GameFiles [TC(typeof(EXP))] public class Dat54DynamicEntitySound : Dat54Sound { public byte ItemCount { get; set; } - public MetaHash[] UnkHashes { get; set; } + public MetaHash[] Items { get; set; } public Dat54DynamicEntitySound(RelFile rel) : base(rel, Dat54SoundType.DynamicEntitySound) { } public Dat54DynamicEntitySound(RelData d, BinaryReader br) : base(d, br) { ItemCount = br.ReadByte(); - UnkHashes = new MetaHash[ItemCount]; + Items = new MetaHash[ItemCount]; for (int i = 0; i < ItemCount; i++) { - UnkHashes[i] = br.ReadUInt32(); + Items[i] = br.ReadUInt32(); } } public override void ReadXml(XmlNode node) { base.ReadXml(node); - var vnode = node.SelectSingleNode("Items"); - if (vnode != null) - { - var inodes = vnode.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - vlist.Add(XmlRel.GetHash(inode.InnerText)); - } - ItemCount = (byte)vlist.Count; - UnkHashes = vlist.ToArray(); - } - } + Items = XmlRel.ReadHashItemArray(node, "Items"); + ItemCount = (byte)(Items?.Length ?? 0); } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); - if (ItemCount > 0) - { - RelXml.OpenTag(sb, indent, "Items"); - var cind = indent + 1; - for (int i = 0; i < ItemCount; i++) - { - var iname = RelXml.HashString(UnkHashes[i]); - RelXml.StringTag(sb, cind, "Item", iname); - } - RelXml.CloseTag(sb, indent, "Items"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "Items"); - } + RelXml.WriteHashItemArray(sb, Items, indent, "Items"); } public override void Write(BinaryWriter bw) { @@ -3143,7 +3112,7 @@ namespace CodeWalker.GameFiles bw.Write(ItemCount); for (int i = 0; i < ItemCount; i++) { - bw.Write(UnkHashes[i]); + bw.Write(Items[i]); } } } @@ -3234,24 +3203,8 @@ namespace CodeWalker.GameFiles UnkInt = Xml.GetChildIntAttribute(node, "UnkInt", "value"); TrackCount = Xml.GetChildIntAttribute(node, "TrackCount", "value"); ReadAudioTracksXml(node); - var vnode = node.SelectSingleNode("UnkItems"); - if (vnode != null) - { - var inodes = vnode.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - var v = new Dat54ModularSynthSoundData(); - v.ReadXml(inode); - vlist.Add(v); - } - UnkItemCount = (byte)vlist.Count; - UnkItems = vlist.ToArray(); - } - } - + UnkItems = XmlRel.ReadItemArray(node, "UnkItems"); + UnkItemCount = (UnkItems?.Length ?? 0); } public override void WriteXml(StringBuilder sb, int indent) { @@ -3262,23 +3215,7 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "UnkInt", UnkInt.ToString()); RelXml.ValueTag(sb, indent, "TrackCount", TrackCount.ToString()); WriteAudioTracksXml(sb, indent); - if (UnkItemCount > 0) - { - RelXml.OpenTag(sb, indent, "UnkItems"); - var cind = indent + 1; - var cind2 = indent + 2; - for (int i = 0; i < UnkItemCount; i++) - { - RelXml.OpenTag(sb, cind, "Item"); - UnkItems[i].WriteXml(sb, cind2); - RelXml.CloseTag(sb, cind, "Item"); - } - RelXml.CloseTag(sb, indent, "UnkItems"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "UnkItems"); - } + RelXml.WriteItemArray(sb, UnkItems, indent, "UnkItems"); } public override void Write(BinaryWriter bw) { @@ -3308,7 +3245,7 @@ namespace CodeWalker.GameFiles return offsets.ToArray(); } } - [TC(typeof(EXP))] public class Dat54ModularSynthSoundData + [TC(typeof(EXP))] public class Dat54ModularSynthSoundData : IMetaXmlItem { public MetaHash UnkHash { get; set; } public MetaHash ParameterHash { get; set; } @@ -3851,46 +3788,14 @@ namespace CodeWalker.GameFiles { base.ReadXml(node); AudioHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash")); - var vnode = node.SelectSingleNode("Variables"); - if (vnode != null) - { - var inodes = vnode.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - var v = new Dat54VariableData(); - v.ReadXml(inode); - vlist.Add(v); - } - VariableCount = (byte)vlist.Count; - Variables = vlist.ToArray(); - } - } + Variables = XmlRel.ReadItemArray(node, "Variables"); + VariableCount = (byte)(Variables?.Length ?? 0); } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); RelXml.StringTag(sb, indent, "AudioHash", RelXml.HashString(AudioHash)); - if (VariableCount > 0) - { - RelXml.OpenTag(sb, indent, "Variables"); - var cind = indent + 1; - var cind2 = indent + 2; - for (int i = 0; i < VariableCount; i++) - { - RelXml.OpenTag(sb, cind, "Item"); - Variables[i].WriteXml(sb, cind2); - RelXml.CloseTag(sb, cind, "Item"); - } - RelXml.CloseTag(sb, indent, "Variables"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "Variables"); - } - + RelXml.WriteItemArray(sb, Variables, indent, "Variables"); } public override void Write(BinaryWriter bw) { @@ -3907,7 +3812,7 @@ namespace CodeWalker.GameFiles return new uint[] { 0 }; } } - [TC(typeof(EXP))] public class Dat54VariableData + [TC(typeof(EXP))] public class Dat54VariableData : IMetaXmlItem { public MetaHash Name { get; set; } public float Value { get; set; } @@ -4028,45 +3933,14 @@ namespace CodeWalker.GameFiles { base.ReadXml(node); AudioHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash")); - var vnode = node.SelectSingleNode("UnkData"); - if (vnode != null) - { - var inodes = vnode.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - var v = new Dat54MathOperationSoundData(); - v.ReadXml(inode); - vlist.Add(v); - } - UnkDataCount = (byte)vlist.Count; - UnkData = vlist.ToArray(); - } - } + UnkData = XmlRel.ReadItemArray(node, "UnkData"); + UnkDataCount = (byte)(UnkData?.Length ?? 0); } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); RelXml.StringTag(sb, indent, "AudioHash", RelXml.HashString(AudioHash)); - if (UnkDataCount > 0) - { - RelXml.OpenTag(sb, indent, "UnkData"); - var cind = indent + 1; - var cind2 = indent + 2; - for (int i = 0; i < UnkDataCount; i++) - { - RelXml.OpenTag(sb, cind, "Item"); - UnkData[i].WriteXml(sb, cind2); - RelXml.CloseTag(sb, cind, "Item"); - } - RelXml.CloseTag(sb, indent, "UnkData"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "UnkData"); - } + RelXml.WriteItemArray(sb, UnkData, indent, "UnkData"); } public override void Write(BinaryWriter bw) { @@ -4083,7 +3957,7 @@ namespace CodeWalker.GameFiles return new uint[] { 0 }; } } - [TC(typeof(EXP))] public class Dat54MathOperationSoundData + [TC(typeof(EXP))] public class Dat54MathOperationSoundData : IMetaXmlItem { public byte UnkByte { get; set; } //0x0-0x1 public int UnkInt0 { get; set; } //0x1-0x5 @@ -4168,45 +4042,14 @@ namespace CodeWalker.GameFiles { base.ReadXml(node); AudioHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash")); - var vnode = node.SelectSingleNode("Items"); - if (vnode != null) - { - var inodes = vnode.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - var v = new Dat54ParameterTransformSoundData(); - v.ReadXml(inode); - vlist.Add(v); - } - ItemCount = vlist.Count; - Items = vlist.ToArray(); - } - } + Items = XmlRel.ReadItemArray(node, "Items"); + ItemCount = (Items?.Length ?? 0); } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); RelXml.StringTag(sb, indent, "AudioHash", RelXml.HashString(AudioHash)); - if (ItemCount > 0) - { - RelXml.OpenTag(sb, indent, "Items"); - var cind = indent + 1; - var cind2 = indent + 2; - for (int i = 0; i < ItemCount; i++) - { - RelXml.OpenTag(sb, cind, "Item"); - Items[i].WriteXml(sb, cind2); - RelXml.CloseTag(sb, cind, "Item"); - } - RelXml.CloseTag(sb, indent, "Items"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "Items"); - } + RelXml.WriteItemArray(sb, Items, indent, "Items"); } public override void Write(BinaryWriter bw) { @@ -4223,7 +4066,7 @@ namespace CodeWalker.GameFiles return new uint[] { 0 }; } } - [TC(typeof(EXP))] public class Dat54ParameterTransformSoundData + [TC(typeof(EXP))] public class Dat54ParameterTransformSoundData : IMetaXmlItem { public MetaHash ParameterHash { get; set; } //0x0-0x4 public float UnkFloat0 { get; set; } //0x4-0x8 @@ -4250,46 +4093,15 @@ namespace CodeWalker.GameFiles ParameterHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash")); UnkFloat0 = Xml.GetChildFloatAttribute(node, "UnkFloat0", "value"); UnkFloat1 = Xml.GetChildFloatAttribute(node, "UnkFloat1", "value"); - var vnode = node.SelectSingleNode("NestedData"); - if (vnode != null) - { - var inodes = vnode.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - var v = new Dat54ParameterTransformSoundData2(); - v.ReadXml(inode); - vlist.Add(v); - } - NestedDataCount = vlist.Count; - NestedData = vlist.ToArray(); - } - } + NestedData = XmlRel.ReadItemArray(node, "NestedData"); + NestedDataCount = NestedData?.Length ?? 0; } public void WriteXml(StringBuilder sb, int indent) { RelXml.StringTag(sb, indent, "ParameterHash", RelXml.HashString(ParameterHash)); RelXml.ValueTag(sb, indent, "UnkFloat0", FloatUtil.ToString(UnkFloat0)); RelXml.ValueTag(sb, indent, "UnkFloat1", FloatUtil.ToString(UnkFloat1)); - if (NestedDataCount > 0) - { - RelXml.OpenTag(sb, indent, "NestedData"); - var cind = indent + 1; - var cind2 = indent + 2; - for (int i = 0; i < NestedDataCount; i++) - { - RelXml.OpenTag(sb, cind, "Item"); - NestedData[i].WriteXml(sb, cind2); - RelXml.CloseTag(sb, cind, "Item"); - } - RelXml.CloseTag(sb, indent, "NestedData"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "NestedData"); - } + RelXml.WriteItemArray(sb, NestedData, indent, "NestedData"); } public void Write(BinaryWriter bw) { @@ -4307,15 +4119,15 @@ namespace CodeWalker.GameFiles return ParameterHash.ToString() + ", " + NestedDataCount.ToString(); } } - [TC(typeof(EXP))] public class Dat54ParameterTransformSoundData2 + [TC(typeof(EXP))] public class Dat54ParameterTransformSoundData2 : IMetaXmlItem { public float UnkFloat0 { get; set; } //0x0-0x4 public int UnkInt { get; set; } //0x4 public MetaHash ParameterHash { get; set; } //0x8-0xC public float UnkFloat1 { get; set; } //0xC public float UnkFloat2 { get; set; } //0x10-0x14 - public int NestedItemCount { get; set; } - public Vector2[] NestedItems { get; set; } //0x18-... + public int VectorCount { get; set; } + public Vector2[] Vectors { get; set; } //0x18-... public Dat54ParameterTransformSoundData2() { } @@ -4326,11 +4138,11 @@ namespace CodeWalker.GameFiles ParameterHash = br.ReadUInt32(); UnkFloat1 = br.ReadSingle(); UnkFloat2 = br.ReadSingle(); - NestedItemCount = br.ReadInt32(); - NestedItems = new Vector2[NestedItemCount]; - for (int i = 0; i < NestedItemCount; i++) + VectorCount = br.ReadInt32(); + Vectors = new Vector2[VectorCount]; + for (int i = 0; i < VectorCount; i++) { - NestedItems[i] = new Vector2(br.ReadSingle(), br.ReadSingle()); + Vectors[i] = new Vector2(br.ReadSingle(), br.ReadSingle()); } } public void ReadXml(XmlNode node) @@ -4340,8 +4152,8 @@ namespace CodeWalker.GameFiles ParameterHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "ParameterHash")); UnkFloat1 = Xml.GetChildFloatAttribute(node, "UnkFloat1", "value"); UnkFloat2 = Xml.GetChildFloatAttribute(node, "UnkFloat2", "value"); - NestedItems = Xml.GetChildRawVector2Array(node, "Vectors"); - NestedItemCount = NestedItems?.Length ?? 0; + Vectors = Xml.GetChildRawVector2Array(node, "Vectors"); + VectorCount = Vectors?.Length ?? 0; } public void WriteXml(StringBuilder sb, int indent) { @@ -4350,7 +4162,7 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "ParameterHash", RelXml.HashString(ParameterHash)); RelXml.ValueTag(sb, indent, "UnkFloat1", FloatUtil.ToString(UnkFloat1)); RelXml.ValueTag(sb, indent, "UnkFloat2", FloatUtil.ToString(UnkFloat2)); - RelXml.WriteRawArray(sb, NestedItems, indent, "Vectors", "", RelXml.FormatVector2, 1); + RelXml.WriteRawArray(sb, Vectors, indent, "Vectors", "", RelXml.FormatVector2, 1); } public void Write(BinaryWriter bw) { @@ -4359,16 +4171,16 @@ namespace CodeWalker.GameFiles bw.Write(ParameterHash); bw.Write(UnkFloat1); bw.Write(UnkFloat2); - bw.Write(NestedItemCount); - for (int i = 0; i < NestedItemCount; i++) + bw.Write(VectorCount); + for (int i = 0; i < VectorCount; i++) { - bw.Write(NestedItems[i].X); - bw.Write(NestedItems[i].Y); + bw.Write(Vectors[i].X); + bw.Write(Vectors[i].Y); } } public override string ToString() { - return ParameterHash.ToString() + ", " + NestedItemCount.ToString(); + return ParameterHash.ToString() + ", " + VectorCount.ToString(); } } [TC(typeof(EXP))] public class Dat54FluctuatorSound : Dat54Sound @@ -4394,45 +4206,14 @@ namespace CodeWalker.GameFiles { base.ReadXml(node); AudioHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash")); - var vnode = node.SelectSingleNode("Items"); - if (vnode != null) - { - var inodes = vnode.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - var v = new Dat54FluctuatorSoundData(); - v.ReadXml(inode); - vlist.Add(v); - } - ItemCount = vlist.Count; - Items = vlist.ToArray(); - } - } + Items = XmlRel.ReadItemArray(node, "Items"); + ItemCount = (Items?.Length ?? 0); } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); RelXml.StringTag(sb, indent, "AudioHash", RelXml.HashString(AudioHash)); - if (ItemCount > 0) - { - RelXml.OpenTag(sb, indent, "Items"); - var cind = indent + 1; - var cind2 = indent + 2; - for (int i = 0; i < ItemCount; i++) - { - RelXml.OpenTag(sb, cind, "Item"); - Items[i].WriteXml(sb, cind2); - RelXml.CloseTag(sb, cind, "Item"); - } - RelXml.CloseTag(sb, indent, "Items"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "Items"); - } + RelXml.WriteItemArray(sb, Items, indent, "Items"); } public override void Write(BinaryWriter bw) { @@ -4449,7 +4230,7 @@ namespace CodeWalker.GameFiles return new uint[] { 0 }; } } - [TC(typeof(EXP))] public class Dat54FluctuatorSoundData + [TC(typeof(EXP))] public class Dat54FluctuatorSoundData : IMetaXmlItem { public byte UnkByte0 { get; set; } //0x0-0x1 public byte UnkByte1 { get; set; } //0x1-0x2 @@ -4582,23 +4363,8 @@ namespace CodeWalker.GameFiles AudioHash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioHash1")); WaveSlotId = XmlRel.GetHash(Xml.GetChildInnerText(node, "WaveSlotId")); UnkHash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "UnkHash1")); - var vnode = node.SelectSingleNode("UnkData"); - if (vnode != null) - { - var inodes = vnode.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - var v = new Dat54AutomationSoundData(); - v.ReadXml(inode); - vlist.Add(v); - } - UnkDataCount = vlist.Count; - UnkData = vlist.ToArray(); - } - } + UnkData = XmlRel.ReadItemArray(node, "UnkData"); + UnkDataCount = (UnkData?.Length ?? 0); } public override void WriteXml(StringBuilder sb, int indent) { @@ -4610,23 +4376,7 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "AudioHash1", RelXml.HashString(AudioHash1)); RelXml.StringTag(sb, indent, "WaveSlotId", RelXml.HashString(WaveSlotId)); RelXml.StringTag(sb, indent, "UnkHash1", RelXml.HashString(UnkHash1)); - if (UnkDataCount > 0) - { - RelXml.OpenTag(sb, indent, "UnkData"); - var cind = indent + 1; - var cind2 = indent + 2; - for (int i = 0; i < UnkDataCount; i++) - { - RelXml.OpenTag(sb, cind, "Item"); - UnkData[i].WriteXml(sb, cind2); - RelXml.CloseTag(sb, cind, "Item"); - } - RelXml.CloseTag(sb, indent, "UnkData"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "UnkData"); - } + RelXml.WriteItemArray(sb, UnkData, indent, "UnkData"); } public override void Write(BinaryWriter bw) { @@ -4653,7 +4403,7 @@ namespace CodeWalker.GameFiles return new uint[] { 20 }; } } - [TC(typeof(EXP))] public class Dat54AutomationSoundData + [TC(typeof(EXP))] public class Dat54AutomationSoundData : IMetaXmlItem { public int UnkInt { get; set; } //0x0-0x1 public MetaHash UnkHash { get; set; } //0x2-0x6 @@ -4800,44 +4550,13 @@ namespace CodeWalker.GameFiles public override void ReadXml(XmlNode node) { base.ReadXml(node); - var vnode = node.SelectSingleNode("Items"); - if (vnode != null) - { - var inodes = vnode.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - var v = new Dat54SoundSetItem(); - v.ReadXml(inode); - vlist.Add(v); - } - ItemCount = vlist.Count; - Items = vlist.ToArray(); - } - } + Items = XmlRel.ReadItemArray(node, "Items"); + ItemCount = (Items?.Length ?? 0); } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); - if (ItemCount > 0) - { - RelXml.OpenTag(sb, indent, "Items"); - var cind = indent + 1; - var cind2 = indent + 2; - for (int i = 0; i < ItemCount; i++) - { - RelXml.OpenTag(sb, cind, "Item"); - Items[i].WriteXml(sb, cind2); - RelXml.CloseTag(sb, cind, "Item"); - } - RelXml.CloseTag(sb, indent, "Items"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "Items"); - } + RelXml.WriteItemArray(sb, Items, indent, "Items"); } public override void Write(BinaryWriter bw) { @@ -4858,7 +4577,7 @@ namespace CodeWalker.GameFiles return offsets.ToArray(); } } - [TC(typeof(EXP))] public class Dat54SoundSetItem + [TC(typeof(EXP))] public class Dat54SoundSetItem : IMetaXmlItem { public MetaHash ScriptName { get; set; } public MetaHash SoundName { get; set; } @@ -4911,44 +4630,13 @@ namespace CodeWalker.GameFiles public override void ReadXml(XmlNode node) { base.ReadXml(node); - var vnode = node.SelectSingleNode("UnkData"); - if (vnode != null) - { - var inodes = vnode.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - var v = new Dat54UnknownSoundData(); - v.ReadXml(inode); - vlist.Add(v); - } - UnkDataCount = (byte)vlist.Count; - UnkData = vlist.ToArray(); - } - } + UnkData = XmlRel.ReadItemArray(node, "UnkData"); + UnkDataCount = (byte)(UnkData?.Length ?? 0); } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); - if (UnkDataCount > 0) - { - RelXml.OpenTag(sb, indent, "UnkData"); - var cind = indent + 1; - var cind2 = indent + 2; - for (int i = 0; i < UnkDataCount; i++) - { - RelXml.OpenTag(sb, cind, "Item"); - UnkData[i].WriteXml(sb, cind2); - RelXml.CloseTag(sb, cind, "Item"); - } - RelXml.CloseTag(sb, indent, "UnkData"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "UnkData"); - } + RelXml.WriteItemArray(sb, UnkData, indent, "UnkData"); } public override void Write(BinaryWriter bw) { @@ -4969,7 +4657,7 @@ namespace CodeWalker.GameFiles return offsets.ToArray(); } } - [TC(typeof(EXP))] public class Dat54UnknownSoundData + [TC(typeof(EXP))] public class Dat54UnknownSoundData : IMetaXmlItem { public byte UnkByte0 { get; set; } public byte UnkByte1 { get; set; } @@ -5013,71 +4701,44 @@ namespace CodeWalker.GameFiles } [TC(typeof(EXP))] public class Dat54UnknownSound2 : Dat54Sound { - public uint UnkCount { get; set; } - public MetaHash[] UnkItems { get; set; } + public uint ItemCount { get; set; } + public MetaHash[] Items { get; set; } public Dat54UnknownSound2(RelFile rel) : base(rel, Dat54SoundType.Unknown2) { } public Dat54UnknownSound2(RelData d, BinaryReader br) : base(d, br) { - UnkCount = br.ReadUInt32(); - UnkItems = new MetaHash[UnkCount]; - for (int i = 0; i < UnkCount; i++) + ItemCount = br.ReadUInt32(); + Items = new MetaHash[ItemCount]; + for (int i = 0; i < ItemCount; i++) { - UnkItems[i] = br.ReadUInt32(); + Items[i] = br.ReadUInt32(); } } public override void ReadXml(XmlNode node) { base.ReadXml(node); - var vnode = node.SelectSingleNode("Items"); - if (vnode != null) - { - var inodes = vnode.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - vlist.Add(XmlRel.GetHash(inode.InnerText)); - } - UnkCount = (uint)vlist.Count; - UnkItems = vlist.ToArray(); - } - } + Items = XmlRel.ReadHashItemArray(node, "Items"); + ItemCount = (uint)(Items?.Length ?? 0); } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); - if (UnkCount > 0) - { - RelXml.OpenTag(sb, indent, "Items"); - var cind = indent + 1; - for (int i = 0; i < UnkCount; i++) - { - var iname = RelXml.HashString(UnkItems[i]); - RelXml.StringTag(sb, cind, "Item", iname); - } - RelXml.CloseTag(sb, indent, "Items"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "Items"); - } + RelXml.WriteHashItemArray(sb, Items, indent, "Items"); } public override void Write(BinaryWriter bw) { base.Write(bw); - bw.Write(UnkCount); - for (int i = 0; i < UnkCount; i++) + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) { - bw.Write(UnkItems[i]); + bw.Write(Items[i]); } } public override uint[] GetHashTableOffsets() { var offsets = new List(); - for (uint i = 0; i < UnkCount; i++) + for (uint i = 0; i < ItemCount; i++) { offsets.Add(4 + i * 4); } @@ -5087,7 +4748,7 @@ namespace CodeWalker.GameFiles [TC(typeof(EXP))] public class Dat54SoundList : Dat54Sound { public ushort UnkShort { get; set; } - public uint Count { get; set; } + public uint ItemCount { get; set; } public MetaHash[] Items { get; set; } public Dat54SoundList(RelFile rel) : base(rel, Dat54SoundType.SoundList) @@ -5095,9 +4756,9 @@ namespace CodeWalker.GameFiles public Dat54SoundList(RelData d, BinaryReader br) : base(d, br) { UnkShort = br.ReadUInt16(); - Count = br.ReadUInt32(); - Items = new MetaHash[Count]; - for (int i = 0; i < Count; i++) + ItemCount = br.ReadUInt32(); + Items = new MetaHash[ItemCount]; + for (int i = 0; i < ItemCount; i++) { Items[i] = br.ReadUInt32(); } @@ -5108,48 +4769,21 @@ namespace CodeWalker.GameFiles { base.ReadXml(node); UnkShort = (ushort)Xml.GetChildUIntAttribute(node, "UnkShort", "value"); - var vnode = node.SelectSingleNode("Items"); - if (vnode != null) - { - var inodes = vnode.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - vlist.Add(XmlRel.GetHash(inode.InnerText)); - } - Count = (uint)vlist.Count; - Items = vlist.ToArray(); - } - } + Items = XmlRel.ReadHashItemArray(node, "Items"); + ItemCount = (uint)(Items?.Length ?? 0); } public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); RelXml.ValueTag(sb, indent, "UnkShort", UnkShort.ToString()); - if (Count > 0) - { - RelXml.OpenTag(sb, indent, "Items"); - var cind = indent + 1; - for (int i = 0; i < Count; i++) - { - var iname = RelXml.HashString(Items[i]); - RelXml.StringTag(sb, cind, "Item", iname); - } - RelXml.CloseTag(sb, indent, "Items"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "Items"); - } + RelXml.WriteHashItemArray(sb, Items, indent, "Items"); } public override void Write(BinaryWriter bw) { base.Write(bw); bw.Write(UnkShort); - bw.Write(Count); - for (int i = 0; i < Count; i++) + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) { bw.Write(Items[i]); } @@ -5180,7 +4814,7 @@ namespace CodeWalker.GameFiles Unk12 = 12, Unk13 = 13, SpeechParams = 14, - Unk15 = 15, + Unk15 = 15, //dlc_btl_nightclub_scl, dlc_btl_nightclub_queue_scl Boat = 16, Weapon = 17, Unk18 = 18, @@ -5209,7 +4843,7 @@ namespace CodeWalker.GameFiles InteriorRoom = 46, Unk47 = 47, //door? Unk48 = 48, - Unk49 = 49, //doors/gates? + Unk49 = 49, //doors/gates? - DoorParams WeaponAudioItem = 50, Unk51 = 51, Mod = 52, //what actually is a "mod" here? a change in some audio settings maybe? @@ -5313,31 +4947,66 @@ namespace CodeWalker.GameFiles } } - [TC(typeof(EXP))] public struct Dat151HashPair + [TC(typeof(EXP))] public struct Dat151HashPair : IMetaXmlItem { public MetaHash Hash0 { get; set; } public MetaHash Hash1 { get; set; } - public Dat151HashPair(MetaHash hash0, MetaHash hash1) + public Dat151HashPair(BinaryReader br) { - Hash0 = hash0; - Hash1 = hash1; + Hash0 = br.ReadUInt32(); + Hash1 = br.ReadUInt32(); } - public void ReadXml(XmlNode node) + public void Write(BinaryWriter bw) { - Hash0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Hash0")); - Hash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Hash1")); + bw.Write(Hash0); + bw.Write(Hash1); } public void WriteXml(StringBuilder sb, int indent) { RelXml.StringTag(sb, indent, "Hash0", RelXml.HashString(Hash0)); RelXml.StringTag(sb, indent, "Hash1", RelXml.HashString(Hash1)); } + public void ReadXml(XmlNode node) + { + Hash0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Hash0")); + Hash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Hash1")); + } public override string ToString() { return Hash0.ToString() + ": " + Hash1.ToString(); } } + [TC(typeof(EXP))] public struct Dat151HashFloat : IMetaXmlItem + { + public MetaHash Hash { get; set; } + public float Value { get; set; } + + public Dat151HashFloat(BinaryReader br) + { + Hash = br.ReadUInt32(); + Value = br.ReadSingle(); + } + public void Write(BinaryWriter bw) + { + bw.Write(Hash); + bw.Write(Value); + } + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Hash", RelXml.HashString(Hash)); + RelXml.ValueTag(sb, indent, "Value", FloatUtil.ToString(Value)); + } + public void ReadXml(XmlNode node) + { + Hash = XmlRel.GetHash(Xml.GetChildInnerText(node, "Hash")); + Value = Xml.GetChildFloatAttribute(node, "Value", "value"); + } + public override string ToString() + { + return Hash.ToString() + ": " + Value.ToString(); + } + } public enum Dat151ZoneShape : uint @@ -5386,39 +5055,12 @@ namespace CodeWalker.GameFiles } public override void WriteXml(StringBuilder sb, int indent) { - if (EmitterCount > 0) - { - RelXml.OpenTag(sb, indent, "Emitters"); - var cind = indent + 1; - for (int i = 0; i < EmitterCount; i++) - { - var iname = RelXml.HashString(EmitterHashes[i]); - RelXml.StringTag(sb, cind, "Item", iname); - } - RelXml.CloseTag(sb, indent, "Emitters"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "Emitters"); - } + RelXml.WriteHashItemArray(sb, EmitterHashes, indent, "Emitters"); } public override void ReadXml(XmlNode node) { - var vnode = node.SelectSingleNode("Emitters"); - if (vnode != null) - { - var inodes = vnode.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - vlist.Add(XmlRel.GetHash(inode.InnerText)); - } - EmitterCount = (uint)vlist.Count; - EmitterHashes = vlist.ToArray(); - } - } + EmitterHashes = XmlRel.ReadHashItemArray(node, "Emitters"); + EmitterCount = (uint)(EmitterHashes?.Length ?? 0); } } [TC(typeof(EXP))] public class Dat151AmbientZone : Dat151RelData @@ -5456,7 +5098,7 @@ namespace CodeWalker.GameFiles public uint ExtParamsCount { get; set; } public ExtParam[] ExtParams { get; set; } - public struct ExtParam + public struct ExtParam : IMetaXmlItem { public MetaHash Hash { get; set; } public float Value { get; set; } @@ -5697,38 +5339,8 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk14", Unk14.ToString()); RelXml.ValueTag(sb, indent, "Unk15", Unk15.ToString()); RelXml.ValueTag(sb, indent, "Unk16", Unk16.ToString()); - if (HashesCount > 0) - { - RelXml.OpenTag(sb, indent, "Hashes"); - var cind = indent + 1; - for (int i = 0; i < HashesCount; i++) - { - var iname = RelXml.HashString(Hashes[i]); - RelXml.StringTag(sb, cind, "Item", iname); - } - RelXml.CloseTag(sb, indent, "Hashes"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "Hashes"); - } - if (ExtParamsCount > 0) - { - RelXml.OpenTag(sb, indent, "ExtParams"); - var cind = indent + 1; - var cind2 = indent + 2; - for (int i = 0; i < ExtParamsCount; i++) - { - RelXml.OpenTag(sb, cind, "Item"); - ExtParams[i].WriteXml(sb, cind2); - RelXml.CloseTag(sb, cind, "Item"); - } - RelXml.CloseTag(sb, indent, "ExtParams"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "ExtParams"); - } + RelXml.WriteHashItemArray(sb, Hashes, indent, "Hashes"); + RelXml.WriteItemArray(sb, ExtParams, indent, "ExtParams"); } public override void ReadXml(XmlNode node) { @@ -5756,39 +5368,10 @@ namespace CodeWalker.GameFiles Unk14 = (byte)Xml.GetChildUIntAttribute(node, "Unk14", "value"); Unk15 = (byte)Xml.GetChildUIntAttribute(node, "Unk15", "value"); Unk16 = (byte)Xml.GetChildUIntAttribute(node, "Unk16", "value"); - var vnode = node.SelectSingleNode("Hashes"); - if (vnode != null) - { - var inodes = vnode.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - vlist.Add(XmlRel.GetHash(inode.InnerText)); - } - HashesCount = (byte)vlist.Count; - Hashes = vlist.ToArray(); - } - } - var vnode2 = node.SelectSingleNode("ExtParams"); - if (vnode2 != null) - { - var inodes = vnode2.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - var v = new ExtParam(); - v.ReadXml(inode); - vlist.Add(v); - } - ExtParamsCount = (uint)vlist.Count; - ExtParams = vlist.ToArray(); - } - } - + Hashes = XmlRel.ReadHashItemArray(node, "Hashes"); + HashesCount = (byte)(Hashes?.Length ?? 0); + ExtParams = XmlRel.ReadItemArray(node, "ExtParams"); + ExtParamsCount = (uint)(ExtParams?.Length ?? 0); } } [TC(typeof(EXP))] public class Dat151AmbientEmitter : Dat151RelData @@ -5821,7 +5404,7 @@ namespace CodeWalker.GameFiles public ushort ExtParamsCount { get; set; } //0,1,2,4 public ExtParam[] ExtParams { get; set; } - public struct ExtParam + public struct ExtParam : IMetaXmlItem { public MetaHash Hash; public float Value; @@ -6216,23 +5799,7 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk11", Unk11.Value.ToString()); RelXml.ValueTag(sb, indent, "Unk12", Unk12.Value.ToString()); RelXml.ValueTag(sb, indent, "Unk13", Unk13.Value.ToString()); - if (ExtParamsCount > 0) - { - RelXml.OpenTag(sb, indent, "ExtParams"); - var cind = indent + 1; - var cind2 = indent + 2; - for (int i = 0; i < ExtParamsCount; i++) - { - RelXml.OpenTag(sb, cind, "Item"); - ExtParams[i].WriteXml(sb, cind2); - RelXml.CloseTag(sb, cind, "Item"); - } - RelXml.CloseTag(sb, indent, "ExtParams"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "ExtParams"); - } + RelXml.WriteItemArray(sb, ExtParams, indent, "ExtParams"); } public override void ReadXml(XmlNode node) { @@ -6261,23 +5828,8 @@ namespace CodeWalker.GameFiles Unk11 = (byte)Xml.GetChildUIntAttribute(node, "Unk11", "value"); Unk12 = (byte)Xml.GetChildUIntAttribute(node, "Unk12", "value"); Unk13 = (byte)Xml.GetChildUIntAttribute(node, "Unk13", "value"); - var vnode2 = node.SelectSingleNode("ExtParams"); - if (vnode2 != null) - { - var inodes = vnode2.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - var v = new ExtParam(); - v.ReadXml(inode); - vlist.Add(v); - } - ExtParamsCount = (ushort)vlist.Count; - ExtParams = vlist.ToArray(); - } - } + ExtParams = XmlRel.ReadItemArray(node, "ExtParams"); + ExtParamsCount = (ushort)(ExtParams?.Length ?? 0); } } [TC(typeof(EXP))] public class Dat151AmbientZoneList : Dat151RelData @@ -6318,39 +5870,12 @@ namespace CodeWalker.GameFiles } public override void WriteXml(StringBuilder sb, int indent) { - if (ZoneCount > 0) - { - RelXml.OpenTag(sb, indent, "Zones"); - var cind = indent + 1; - for (int i = 0; i < ZoneCount; i++) - { - var iname = RelXml.HashString(ZoneHashes[i]); - RelXml.StringTag(sb, cind, "Item", iname); - } - RelXml.CloseTag(sb, indent, "Zones"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "Zones"); - } + RelXml.WriteHashItemArray(sb, ZoneHashes, indent, "Zones"); } public override void ReadXml(XmlNode node) { - var vnode = node.SelectSingleNode("Zones"); - if (vnode != null) - { - var inodes = vnode.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - vlist.Add(XmlRel.GetHash(inode.InnerText)); - } - ZoneCount = (uint)vlist.Count; - ZoneHashes = vlist.ToArray(); - } - } + ZoneHashes = XmlRel.ReadHashItemArray(node, "Zones"); + ZoneCount = (uint)(ZoneHashes?.Length ?? 0); } } [TC(typeof(EXP))] public class Dat151StaticEmitter : Dat151RelData @@ -6534,21 +6059,15 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk0", "0x" + Unk0.Hex); RelXml.ValueTag(sb, indent, "Unk1", "0x" + Unk1.Hex); RelXml.ValueTag(sb, indent, "Unk2", "0x" + Unk2.Hex); - if (RoomsCount > 0) - { - RelXml.OpenTag(sb, indent, "Rooms"); - var cind = indent + 1; - for (int i = 0; i < RoomsCount; i++) - { - var iname = RelXml.HashString(Rooms[i]); - RelXml.StringTag(sb, cind, "Item", iname); - } - RelXml.CloseTag(sb, indent, "Rooms"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "Rooms"); - } + RelXml.WriteHashItemArray(sb, Rooms, indent, "Rooms"); + } + public override void ReadXml(XmlNode node) + { + Unk0 = Xml.GetChildUIntAttribute(node, "Unk0", "value"); + Unk1 = Xml.GetChildUIntAttribute(node, "Unk1", "value"); + Unk2 = Xml.GetChildUIntAttribute(node, "Unk2", "value"); + Rooms = XmlRel.ReadHashItemArray(node, "Rooms"); + RoomsCount = (uint)(Rooms?.Length ?? 0); } public override uint[] GetHashTableOffsets() { @@ -6559,27 +6078,6 @@ namespace CodeWalker.GameFiles } return offsets.ToArray(); } - public override void ReadXml(XmlNode node) - { - Unk0 = Xml.GetChildUIntAttribute(node, "Unk0", "value"); - Unk1 = Xml.GetChildUIntAttribute(node, "Unk1", "value"); - Unk2 = Xml.GetChildUIntAttribute(node, "Unk2", "value"); - var vnode = node.SelectSingleNode("Rooms"); - if (vnode != null) - { - var inodes = vnode.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - vlist.Add(XmlRel.GetHash(inode.InnerText)); - } - RoomsCount = (uint)vlist.Count; - Rooms = vlist.ToArray(); - } - } - } } [TC(typeof(EXP))] public class Dat151InteriorRoom : Dat151RelData { @@ -6728,39 +6226,12 @@ namespace CodeWalker.GameFiles } public override void WriteXml(StringBuilder sb, int indent) { - if (StationsCount > 0) - { - RelXml.OpenTag(sb, indent, "Stations"); - var cind = indent + 1; - for (int i = 0; i < StationsCount; i++) - { - var iname = RelXml.HashString(Stations[i]); - RelXml.StringTag(sb, cind, "Item", iname); - } - RelXml.CloseTag(sb, indent, "Stations"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "Stations"); - } + RelXml.WriteHashItemArray(sb, Stations, indent, "Stations"); } public override void ReadXml(XmlNode node) { - var vnode = node.SelectSingleNode("Stations"); - if (vnode != null) - { - var inodes = vnode.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - vlist.Add(XmlRel.GetHash(inode.InnerText)); - } - StationsCount = (uint)vlist.Count; - Stations = vlist.ToArray(); - } - } + Stations = XmlRel.ReadHashItemArray(node, "Stations"); + StationsCount = (uint)(Stations?.Length ?? 0); } public override uint[] GetHashTableOffsets() { @@ -6849,23 +6320,7 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "MusicGenre", MusicGenre.ToString()); RelXml.StringTag(sb, indent, "RadioName", RadioName); RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); - - - if (AudioTracksCount > 0) - { - RelXml.OpenTag(sb, indent, "AudioTracks"); - var cind = indent + 1; - for (int i = 0; i < AudioTracksCount; i++) - { - var iname = RelXml.HashString(AudioTracks[i]); - RelXml.StringTag(sb, cind, "Item", iname); - } - RelXml.CloseTag(sb, indent, "AudioTracks"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "AudioTracks"); - } + RelXml.WriteHashItemArray(sb, AudioTracks, indent, "AudioTracks"); } public override void ReadXml(XmlNode node) { @@ -6875,23 +6330,8 @@ namespace CodeWalker.GameFiles MusicGenre = (ushort)Xml.GetChildUIntAttribute(node, "MusicGenre", "value"); RadioName = Xml.GetChildInnerText(node, "RadioName"); Unk04 = (ushort)Xml.GetChildUIntAttribute(node, "Unk04", "value"); - - - var vnode = node.SelectSingleNode("AudioTracks"); - if (vnode != null) - { - var inodes = vnode.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - vlist.Add(XmlRel.GetHash(inode.InnerText)); - } - AudioTracksCount = (uint)vlist.Count; - AudioTracks = vlist.ToArray(); - } - } + AudioTracks = XmlRel.ReadHashItemArray(node, "AudioTracks"); + AudioTracksCount = (uint)(AudioTracks?.Length ?? 0); } public override uint[] GetHashTableOffsets() { @@ -6906,7 +6346,7 @@ namespace CodeWalker.GameFiles [TC(typeof(EXP))] public class Dat151RadioMusic : Dat151RelData //name eg: radioname_music { public FlagsUint Unk00 { get; set; } - public byte MusicType { get; set; }//maybe int? + public byte MusicType { get; set; } public uint Unk01 { get; set; } public uint Unk02 { get; set; } public byte Unk03 { get; set; } @@ -6957,7 +6397,7 @@ namespace CodeWalker.GameFiles Dat151HashPair[] items = new Dat151HashPair[PlaylistCount]; for (int i = 0; i < PlaylistCount; i++) { - items[i] = new Dat151HashPair(br.ReadUInt32(), br.ReadUInt32()); + items[i] = new Dat151HashPair(br); } this.Playlists = items; @@ -7014,8 +6454,7 @@ namespace CodeWalker.GameFiles bw.Write(PlaylistCount); for (int i = 0; i < PlaylistCount; i++) { - bw.Write(Playlists[i].Hash0); - bw.Write(Playlists[i].Hash1); + Playlists[i].Write(bw); } } @@ -7039,23 +6478,7 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk14", Unk14.ToString()); RelXml.ValueTag(sb, indent, "Unk15", Unk15.ToString()); RelXml.ValueTag(sb, indent, "Unk16", Unk16.ToString()); - if (PlaylistCount > 0) - { - RelXml.OpenTag(sb, indent, "Playlists"); - var cind = indent + 1; - var cind2 = indent + 2; - for (int i = 0; i < PlaylistCount; i++) - { - RelXml.OpenTag(sb, cind, "Item"); - Playlists[i].WriteXml(sb, cind2); - RelXml.CloseTag(sb, cind, "Item"); - } - RelXml.CloseTag(sb, indent, "Playlists"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "Playlists"); - } + RelXml.WriteItemArray(sb, Playlists, indent, "Playlists"); } public override void ReadXml(XmlNode node) { @@ -7077,23 +6500,8 @@ namespace CodeWalker.GameFiles Unk14 = Xml.GetChildUIntAttribute(node, "Unk14", "value"); Unk15 = Xml.GetChildUIntAttribute(node, "Unk15", "value"); Unk16 = (ushort)Xml.GetChildUIntAttribute(node, "Unk16", "value"); - var vnode2 = node.SelectSingleNode("Playlists"); - if (vnode2 != null) - { - var inodes = vnode2.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - var v = new Dat151HashPair(); - v.ReadXml(inode); - vlist.Add(v); - } - PlaylistCount = (uint)vlist.Count; - Playlists = vlist.ToArray(); - } - } + Playlists = XmlRel.ReadItemArray(node, "Playlists"); + PlaylistCount = (uint)(Playlists?.Length ?? 0); } } [TC(typeof(EXP))] public class Dat151RadioTrackList : Dat151RelData @@ -7114,7 +6522,7 @@ namespace CodeWalker.GameFiles Tracks = new Dat151HashPair[TrackCount]; for (int i = 0; i < TrackCount; i++) { - Tracks[i] = new Dat151HashPair(br.ReadUInt32(), br.ReadUInt32()); + Tracks[i] = new Dat151HashPair(br); } var bytesleft = br.BaseStream.Length - br.BaseStream.Position; @@ -7129,52 +6537,20 @@ namespace CodeWalker.GameFiles bw.Write(TrackCount); for (int i = 0; i < TrackCount; i++) { - bw.Write(Tracks[i].Hash0); - bw.Write(Tracks[i].Hash1); + Tracks[i].Write(bw); } } public override void WriteXml(StringBuilder sb, int indent) { RelXml.ValueTag(sb, indent, "Unk00", "0x" + Unk00.Hex); - if (TrackCount > 0) - { - RelXml.OpenTag(sb, indent, "Tracks"); - var cind = indent + 1; - var cind2 = indent + 2; - for (int i = 0; i < TrackCount; i++) - { - RelXml.OpenTag(sb, cind, "Item"); - Tracks[i].WriteXml(sb, cind2); - RelXml.CloseTag(sb, cind, "Item"); - } - RelXml.CloseTag(sb, indent, "Tracks"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "Tracks"); - } + RelXml.WriteItemArray(sb, Tracks, indent, "Tracks"); } public override void ReadXml(XmlNode node) { Unk00 = Xml.GetChildUIntAttribute(node, "Unk00", "value"); - var vnode2 = node.SelectSingleNode("Tracks"); - if (vnode2 != null) - { - var inodes = vnode2.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - var v = new Dat151HashPair(); - v.ReadXml(inode); - vlist.Add(v); - } - TrackCount = (uint)vlist.Count; - Tracks = vlist.ToArray(); - } - } + Tracks = XmlRel.ReadItemArray(node, "Tracks"); + TrackCount = (uint)(Tracks?.Length ?? 0); } } @@ -7197,7 +6573,7 @@ namespace CodeWalker.GameFiles Dat151HashPair[] items = new Dat151HashPair[AudioItemCount]; for (int i = 0; i < AudioItemCount; i++) { - items[i] = new Dat151HashPair(br.ReadUInt32(), br.ReadUInt32()); + items[i] = new Dat151HashPair(br); } this.AudioItems = items; @@ -7212,51 +6588,19 @@ namespace CodeWalker.GameFiles bw.Write(AudioItemCount); for (int i = 0; i < AudioItemCount; i++) { - bw.Write(AudioItems[i].Hash0); - bw.Write(AudioItems[i].Hash1); + AudioItems[i].Write(bw); } } public override void WriteXml(StringBuilder sb, int indent) { RelXml.StringTag(sb, indent, "AudioTrack0", RelXml.HashString(AudioTrack0)); - if (AudioItemCount > 0) - { - RelXml.OpenTag(sb, indent, "AudioItems"); - var cind = indent + 1; - var cind2 = indent + 2; - for (int i = 0; i < AudioItemCount; i++) - { - RelXml.OpenTag(sb, cind, "Item"); - AudioItems[i].WriteXml(sb, cind2); - RelXml.CloseTag(sb, cind, "Item"); - } - RelXml.CloseTag(sb, indent, "AudioItems"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "AudioItems"); - } + RelXml.WriteItemArray(sb, AudioItems, indent, "AudioItems"); } public override void ReadXml(XmlNode node) { AudioTrack0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack0")); - var vnode2 = node.SelectSingleNode("AudioItems"); - if (vnode2 != null) - { - var inodes = vnode2.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - var v = new Dat151HashPair(); - v.ReadXml(inode); - vlist.Add(v); - } - AudioItemCount = (uint)vlist.Count; - AudioItems = vlist.ToArray(); - } - } + AudioItems = XmlRel.ReadItemArray(node, "AudioItems"); + AudioItemCount = (uint)(AudioItems?.Length ?? 0); } public override uint[] GetHashTableOffsets() { @@ -7313,7 +6657,7 @@ namespace CodeWalker.GameFiles Dat151HashPair[] items = new Dat151HashPair[ItemCount]; for (int i = 0; i < ItemCount; i++) { - items[i] = new Dat151HashPair(br.ReadUInt32(), br.ReadUInt32()); + items[i] = new Dat151HashPair(br); } this.Items = items; @@ -7345,8 +6689,7 @@ namespace CodeWalker.GameFiles for (int i = 0; i < ItemCount; i++) { - bw.Write(Items[i].Hash0); - bw.Write(Items[i].Hash1); + Items[i].Write(bw); } } @@ -7365,23 +6708,7 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk7", Unk7.ToString()); RelXml.ValueTag(sb, indent, "Unk8", FloatUtil.ToString(Unk8)); RelXml.ValueTag(sb, indent, "Unk9", Unk9.ToString()); - if (ItemCount > 0) - { - RelXml.OpenTag(sb, indent, "Items"); - var cind = indent + 1; - var cind2 = indent + 2; - for (int i = 0; i < ItemCount; i++) - { - RelXml.OpenTag(sb, cind, "Item"); - Items[i].WriteXml(sb, cind2); - RelXml.CloseTag(sb, cind, "Item"); - } - RelXml.CloseTag(sb, indent, "Items"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "Items"); - } + RelXml.WriteItemArray(sb, Items, indent, "Items"); } public override void ReadXml(XmlNode node) { @@ -7398,23 +6725,8 @@ namespace CodeWalker.GameFiles Unk7 = Xml.GetChildIntAttribute(node, "Unk7", "value"); Unk8 = Xml.GetChildFloatAttribute(node, "Unk8", "value"); Unk9 = Xml.GetChildIntAttribute(node, "Unk9", "value"); - var vnode2 = node.SelectSingleNode("Items"); - if (vnode2 != null) - { - var inodes = vnode2.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - var v = new Dat151HashPair(); - v.ReadXml(inode); - vlist.Add(v); - } - ItemCount = (uint)vlist.Count; - Items = vlist.ToArray(); - } - } + Items = XmlRel.ReadItemArray(node, "Items"); + ItemCount = (uint)(Items?.Length ?? 0); } public override uint[] GetHashTableOffsets() { @@ -7491,7 +6803,7 @@ namespace CodeWalker.GameFiles } } - [TC(typeof(EXP))] public class Dat151MoodItem + [TC(typeof(EXP))] public class Dat151MoodItem : IMetaXmlItem { public MetaHash AudioTrack0 { get; set; } public MetaHash AudioTrack1 { get; set; } @@ -7603,46 +6915,15 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk0", "0x" + Unk0.Hex); RelXml.StringTag(sb, indent, "Unk1", RelXml.HashString(Unk1)); RelXml.StringTag(sb, indent, "Unk2", RelXml.HashString(Unk2)); - if (MoodItemCount > 0) - { - RelXml.OpenTag(sb, indent, "MoodItems"); - var cind = indent + 1; - var cind2 = indent + 2; - for (int i = 0; i < MoodItemCount; i++) - { - RelXml.OpenTag(sb, cind, "Item"); - MoodItems[i].WriteXml(sb, cind2); - RelXml.CloseTag(sb, cind, "Item"); - } - RelXml.CloseTag(sb, indent, "MoodItems"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "MoodItems"); - } + RelXml.WriteItemArray(sb, MoodItems, indent, "MoodItems"); } public override void ReadXml(XmlNode node) { Unk0 = Xml.GetChildUIntAttribute(node, "Unk0", "value"); Unk1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk1")); Unk2 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk2")); - var vnode2 = node.SelectSingleNode("MoodItems"); - if (vnode2 != null) - { - var inodes = vnode2.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - var v = new Dat151MoodItem(); - v.ReadXml(inode); - vlist.Add(v); - } - MoodItemCount = (uint)vlist.Count; - MoodItems = vlist.ToArray(); - } - } + MoodItems = XmlRel.ReadItemArray(node, "MoodItems"); + MoodItemCount = (uint)(MoodItems?.Length ?? 0); } public override uint[] GetHashTableOffsets() { @@ -7780,39 +7061,12 @@ namespace CodeWalker.GameFiles } public override void WriteXml(StringBuilder sb, int indent) { - if (AudioTrackCount > 0) - { - RelXml.OpenTag(sb, indent, "AudioTracks"); - var cind = indent + 1; - for (int i = 0; i < AudioTrackCount; i++) - { - var iname = RelXml.HashString(AudioTracks[i]); - RelXml.StringTag(sb, cind, "Item", iname); - } - RelXml.CloseTag(sb, indent, "AudioTracks"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "AudioTracks"); - } + RelXml.WriteHashItemArray(sb, AudioTracks, indent, "AudioTracks"); } public override void ReadXml(XmlNode node) { - var vnode = node.SelectSingleNode("AudioTracks"); - if (vnode != null) - { - var inodes = vnode.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - vlist.Add(XmlRel.GetHash(inode.InnerText)); - } - AudioTrackCount = (uint)vlist.Count; - AudioTracks = vlist.ToArray(); - } - } + AudioTracks = XmlRel.ReadHashItemArray(node, "AudioTracks"); + AudioTrackCount = (uint)(AudioTracks?.Length ?? 0); } public override uint[] GetHashTableOffsets() { @@ -8127,7 +7381,7 @@ namespace CodeWalker.GameFiles } [TC(typeof(EXP))] public class Dat151Mod : Dat151RelData { - public FlagsUint Unk00 { get; set; } + public FlagsUint Flags { get; set; } public int Unk01 { get; set; } public int Unk02 { get; set; } public int Unk03 { get; set; } @@ -8159,7 +7413,7 @@ namespace CodeWalker.GameFiles } public Dat151Mod(RelData d, BinaryReader br) : base(d, br) { - Unk00 = br.ReadUInt32(); + Flags = br.ReadUInt32(); Unk01 = br.ReadInt32(); Unk02 = br.ReadInt32(); Unk03 = br.ReadInt32(); @@ -8207,7 +7461,7 @@ namespace CodeWalker.GameFiles var tracks1 = new Dat151HashPair[AudioTracks1Count]; for (int i = 0; i < AudioTracks1Count; i++) { - tracks1[i] = new Dat151HashPair(br.ReadUInt32(), br.ReadUInt32()); + tracks1[i] = new Dat151HashPair(br); } AudioTracks1 = tracks1; @@ -8229,7 +7483,7 @@ namespace CodeWalker.GameFiles { WriteTypeAndOffset(bw); - bw.Write(Unk00); + bw.Write(Flags); bw.Write(Unk01); bw.Write(Unk02); bw.Write(Unk03); @@ -8258,8 +7512,7 @@ namespace CodeWalker.GameFiles { for (int i = 0; i < AudioTracks1Count; i++) { - bw.Write(AudioTracks1[i].Hash0); - bw.Write(AudioTracks1[i].Hash1); + AudioTracks1[i].Write(bw); } bw.Write(AudioTracks2Count); for (int i = 0; i < AudioTracks2Count; i++) @@ -8271,7 +7524,7 @@ namespace CodeWalker.GameFiles } public override void WriteXml(StringBuilder sb, int indent) { - RelXml.ValueTag(sb, indent, "Unk00", "0x" + Unk00.Hex); + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); @@ -8295,37 +7548,13 @@ namespace CodeWalker.GameFiles } else { - RelXml.OpenTag(sb, indent, "AudioTracks1"); - var cind = indent + 1; - var cind2 = indent + 2; - for (int i = 0; i < AudioTracks1Count; i++) - { - RelXml.OpenTag(sb, cind, "Item"); - AudioTracks1[i].WriteXml(sb, cind2); - RelXml.CloseTag(sb, cind, "Item"); - } - RelXml.CloseTag(sb, indent, "AudioTracks1"); - - if (AudioTracks2Count > 0) - { - RelXml.OpenTag(sb, indent, "AudioTracks2"); - for (int i = 0; i < AudioTracks2Count; i++) - { - var iname = RelXml.HashString(AudioTracks2[i]); - RelXml.StringTag(sb, cind, "Item", iname); - } - RelXml.CloseTag(sb, indent, "AudioTracks2"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "AudioTracks2"); - } - + RelXml.WriteItemArray(sb, AudioTracks1, indent, "AudioTracks1"); + RelXml.WriteHashItemArray(sb, AudioTracks2, indent, "AudioTracks2"); } } public override void ReadXml(XmlNode node) { - Unk00 = Xml.GetChildUIntAttribute(node, "Unk00", "value"); + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); Unk01 = Xml.GetChildIntAttribute(node, "Unk01", "value"); Unk02 = Xml.GetChildIntAttribute(node, "Unk02", "value"); Unk03 = Xml.GetChildIntAttribute(node, "Unk03", "value"); @@ -8344,38 +7573,10 @@ namespace CodeWalker.GameFiles Unk16 = (byte)Xml.GetChildUIntAttribute(node, "Unk16", "value"); Unk17 = (byte)Xml.GetChildUIntAttribute(node, "Unk17", "value"); AudioTrack0 = XmlRel.GetHash(Xml.GetChildInnerText(node, "AudioTrack0")); - var vnode2 = node.SelectSingleNode("AudioTracks1"); - if (vnode2 != null) - { - var inodes = vnode2.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - var v = new Dat151HashPair(); - v.ReadXml(inode); - vlist.Add(v); - } - AudioTracks1Count = (byte)vlist.Count; - AudioTracks1 = vlist.ToArray(); - } - } - var vnode = node.SelectSingleNode("AudioTracks2"); - if (vnode != null) - { - var inodes = vnode.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - vlist.Add(XmlRel.GetHash(inode.InnerText)); - } - AudioTracks2Count = (uint)vlist.Count; - AudioTracks2 = vlist.ToArray(); - } - } + AudioTracks1 = XmlRel.ReadItemArray(node, "AudioTracks1"); + AudioTracks1Count = (byte)(AudioTracks1?.Length ?? 0); + AudioTracks2 = XmlRel.ReadHashItemArray(node, "AudioTracks2"); + AudioTracks2Count = (uint)(AudioTracks2?.Length ?? 0); } public override uint[] GetHashTableOffsets() { @@ -9337,7 +8538,7 @@ namespace CodeWalker.GameFiles var items = new Dat151HashPair[AudioItemCount]; for (uint i = 0; i < AudioItemCount; i++) { - items[i] = new Dat151HashPair(br.ReadUInt32(), br.ReadUInt32()); + items[i] = new Dat151HashPair(br); } AudioItems = items; @@ -9352,49 +8553,17 @@ namespace CodeWalker.GameFiles bw.Write(AudioItemCount); for (uint i = 0; i < AudioItemCount; i++) { - bw.Write(AudioItems[i].Hash0); - bw.Write(AudioItems[i].Hash1); + AudioItems[i].Write(bw); } } public override void WriteXml(StringBuilder sb, int indent) { - if (AudioItemCount > 0) - { - RelXml.OpenTag(sb, indent, "AudioItems"); - var cind = indent + 1; - var cind2 = indent + 2; - for (int i = 0; i < AudioItemCount; i++) - { - RelXml.OpenTag(sb, cind, "Item"); - AudioItems[i].WriteXml(sb, cind2); - RelXml.CloseTag(sb, cind, "Item"); - } - RelXml.CloseTag(sb, indent, "AudioItems"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "AudioItems"); - } + RelXml.WriteItemArray(sb, AudioItems, indent, "AudioItems"); } public override void ReadXml(XmlNode node) { - var vnode2 = node.SelectSingleNode("AudioItems"); - if (vnode2 != null) - { - var inodes = vnode2.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - var v = new Dat151HashPair(); - v.ReadXml(inode); - vlist.Add(v); - } - AudioItemCount = (uint)vlist.Count; - AudioItems = vlist.ToArray(); - } - } + AudioItems = XmlRel.ReadItemArray(node, "AudioItems"); + AudioItemCount = (uint)(AudioItems?.Length ?? 0); } public override uint[] GetHashTableOffsets() { @@ -9482,21 +8651,7 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk3", FloatUtil.ToString(Unk3)); RelXml.StringTag(sb, indent, "Unk4", RelXml.HashString(Unk4)); RelXml.ValueTag(sb, indent, "Unk5", Unk5.ToString()); - if (AudioTracksCount > 0) - { - RelXml.OpenTag(sb, indent, "AudioTracks"); - var cind = indent + 1; - for (int i = 0; i < AudioTracksCount; i++) - { - var iname = RelXml.HashString(AudioTracks[i]); - RelXml.StringTag(sb, cind, "Item", iname); - } - RelXml.CloseTag(sb, indent, "AudioTracks"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "AudioTracks"); - } + RelXml.WriteHashItemArray(sb, AudioTracks, indent, "AudioTracks"); } public override void ReadXml(XmlNode node) { @@ -9508,21 +8663,8 @@ namespace CodeWalker.GameFiles Unk3 = Xml.GetChildFloatAttribute(node, "Unk3", "value"); Unk4 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk4")); Unk5 = Xml.GetChildIntAttribute(node, "Unk5", "value"); - var vnode = node.SelectSingleNode("AudioTracks"); - if (vnode != null) - { - var inodes = vnode.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - vlist.Add(XmlRel.GetHash(inode.InnerText)); - } - AudioTracksCount = (uint)vlist.Count; - AudioTracks = vlist.ToArray(); - } - } + AudioTracks = XmlRel.ReadHashItemArray(node, "AudioTracks"); + AudioTracksCount = (uint)(AudioTracks?.Length ?? 0); } public override uint[] GetHashTableOffsets() { @@ -9634,7 +8776,7 @@ namespace CodeWalker.GameFiles var items = new Dat151HashPair[AudioItemCount]; for (var i = 0; i < AudioItemCount; i++) { - items[i] = new Dat151HashPair(br.ReadUInt32(), br.ReadUInt32()); + items[i] = new Dat151HashPair(br); } AudioItems = items; @@ -9649,49 +8791,17 @@ namespace CodeWalker.GameFiles bw.Write(AudioItemCount); for (var i = 0; i < AudioItemCount; i++) { - bw.Write(AudioItems[i].Hash0); - bw.Write(AudioItems[i].Hash1); + AudioItems[i].Write(bw); } } public override void WriteXml(StringBuilder sb, int indent) { - if (AudioItemCount > 0) - { - RelXml.OpenTag(sb, indent, "AudioItems"); - var cind = indent + 1; - var cind2 = indent + 2; - for (int i = 0; i < AudioItemCount; i++) - { - RelXml.OpenTag(sb, cind, "Item"); - AudioItems[i].WriteXml(sb, cind2); - RelXml.CloseTag(sb, cind, "Item"); - } - RelXml.CloseTag(sb, indent, "AudioItems"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "AudioItems"); - } + RelXml.WriteItemArray(sb, AudioItems, indent, "AudioItems"); } public override void ReadXml(XmlNode node) { - var vnode2 = node.SelectSingleNode("AudioItems"); - if (vnode2 != null) - { - var inodes = vnode2.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - var v = new Dat151HashPair(); - v.ReadXml(inode); - vlist.Add(v); - } - AudioItemCount = (uint)vlist.Count; - AudioItems = vlist.ToArray(); - } - } + AudioItems = XmlRel.ReadItemArray(node, "AudioItems"); + AudioItemCount = (uint)(AudioItems?.Length ?? 0); } public override uint[] GetHashTableOffsets() { @@ -9703,7 +8813,7 @@ namespace CodeWalker.GameFiles return offsets.ToArray(); } } - [TC(typeof(EXP))] public class Dat151Unk49 : Dat151RelData //doors/gates? + [TC(typeof(EXP))] public class Dat151Unk49 : Dat151RelData //doors/gates? - DoorParams { public uint AudioItemCount { get; set; } public Dat151HashPair[] AudioItems { get; set; } @@ -9719,7 +8829,7 @@ namespace CodeWalker.GameFiles var items = new Dat151HashPair[AudioItemCount]; for (var i = 0; i < AudioItemCount; i++) { - items[i] = new Dat151HashPair(br.ReadUInt32(), br.ReadUInt32()); + items[i] = new Dat151HashPair(br); } AudioItems = items; @@ -9734,49 +8844,17 @@ namespace CodeWalker.GameFiles bw.Write(AudioItemCount); for (var i = 0; i < AudioItemCount; i++) { - bw.Write(AudioItems[i].Hash0); - bw.Write(AudioItems[i].Hash1); + AudioItems[i].Write(bw); } } public override void WriteXml(StringBuilder sb, int indent) { - if (AudioItemCount > 0) - { - RelXml.OpenTag(sb, indent, "AudioItems"); - var cind = indent + 1; - var cind2 = indent + 2; - for (int i = 0; i < AudioItemCount; i++) - { - RelXml.OpenTag(sb, cind, "Item"); - AudioItems[i].WriteXml(sb, cind2); - RelXml.CloseTag(sb, cind, "Item"); - } - RelXml.CloseTag(sb, indent, "AudioItems"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "AudioItems"); - } + RelXml.WriteItemArray(sb, AudioItems, indent, "AudioItems"); } public override void ReadXml(XmlNode node) { - var vnode2 = node.SelectSingleNode("AudioItems"); - if (vnode2 != null) - { - var inodes = vnode2.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - var v = new Dat151HashPair(); - v.ReadXml(inode); - vlist.Add(v); - } - AudioItemCount = (uint)vlist.Count; - AudioItems = vlist.ToArray(); - } - } + AudioItems = XmlRel.ReadItemArray(node, "AudioItems"); + AudioItemCount = (uint)(AudioItems?.Length ?? 0); } public override uint[] GetHashTableOffsets() { @@ -9804,7 +8882,7 @@ namespace CodeWalker.GameFiles var items = new Dat151HashPair[AudioItemCount]; for (var i = 0; i < AudioItemCount; i++) { - items[i] = new Dat151HashPair(br.ReadUInt32(), br.ReadUInt32()); + items[i] = new Dat151HashPair(br); } AudioItems = items; @@ -9819,49 +8897,17 @@ namespace CodeWalker.GameFiles bw.Write(AudioItemCount); for (var i = 0; i < AudioItemCount; i++) { - bw.Write(AudioItems[i].Hash0); - bw.Write(AudioItems[i].Hash1); + AudioItems[i].Write(bw); } } public override void WriteXml(StringBuilder sb, int indent) { - if (AudioItemCount > 0) - { - RelXml.OpenTag(sb, indent, "AudioItems"); - var cind = indent + 1; - var cind2 = indent + 2; - for (int i = 0; i < AudioItemCount; i++) - { - RelXml.OpenTag(sb, cind, "Item"); - AudioItems[i].WriteXml(sb, cind2); - RelXml.CloseTag(sb, cind, "Item"); - } - RelXml.CloseTag(sb, indent, "AudioItems"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "AudioItems"); - } + RelXml.WriteItemArray(sb, AudioItems, indent, "AudioItems"); } public override void ReadXml(XmlNode node) { - var vnode2 = node.SelectSingleNode("AudioItems"); - if (vnode2 != null) - { - var inodes = vnode2.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - var v = new Dat151HashPair(); - v.ReadXml(inode); - vlist.Add(v); - } - AudioItemCount = (uint)vlist.Count; - AudioItems = vlist.ToArray(); - } - } + AudioItems = XmlRel.ReadItemArray(node, "AudioItems"); + AudioItemCount = (uint)(AudioItems?.Length ?? 0); } public override uint[] GetHashTableOffsets() { @@ -9889,7 +8935,7 @@ namespace CodeWalker.GameFiles var items = new Dat151HashPair[AudioItemCount]; for (var i = 0; i < AudioItemCount; i++) { - items[i] = new Dat151HashPair(br.ReadUInt32(), br.ReadUInt32()); + items[i] = new Dat151HashPair(br); } AudioItems = items; @@ -9904,49 +8950,17 @@ namespace CodeWalker.GameFiles bw.Write(AudioItemCount); for (var i = 0; i < AudioItemCount; i++) { - bw.Write(AudioItems[i].Hash0); - bw.Write(AudioItems[i].Hash1); + AudioItems[i].Write(bw); } } public override void WriteXml(StringBuilder sb, int indent) { - if (AudioItemCount > 0) - { - RelXml.OpenTag(sb, indent, "AudioItems"); - var cind = indent + 1; - var cind2 = indent + 2; - for (int i = 0; i < AudioItemCount; i++) - { - RelXml.OpenTag(sb, cind, "Item"); - AudioItems[i].WriteXml(sb, cind2); - RelXml.CloseTag(sb, cind, "Item"); - } - RelXml.CloseTag(sb, indent, "AudioItems"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "AudioItems"); - } + RelXml.WriteItemArray(sb, AudioItems, indent, "AudioItems"); } public override void ReadXml(XmlNode node) { - var vnode2 = node.SelectSingleNode("AudioItems"); - if (vnode2 != null) - { - var inodes = vnode2.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - var v = new Dat151HashPair(); - v.ReadXml(inode); - vlist.Add(v); - } - AudioItemCount = (uint)vlist.Count; - AudioItems = vlist.ToArray(); - } - } + AudioItems = XmlRel.ReadItemArray(node, "AudioItems"); + AudioItemCount = (uint)(AudioItems?.Length ?? 0); } public override uint[] GetHashTableOffsets() { @@ -9974,7 +8988,7 @@ namespace CodeWalker.GameFiles var items = new Dat151HashPair[AudioItemCount]; for (var i = 0; i < AudioItemCount; i++) { - items[i] = new Dat151HashPair(br.ReadUInt32(), br.ReadUInt32()); + items[i] = new Dat151HashPair(br); } AudioItems = items; @@ -9989,49 +9003,17 @@ namespace CodeWalker.GameFiles bw.Write(AudioItemCount); for (var i = 0; i < AudioItemCount; i++) { - bw.Write(AudioItems[i].Hash0); - bw.Write(AudioItems[i].Hash1); + AudioItems[i].Write(bw); } } public override void WriteXml(StringBuilder sb, int indent) { - if (AudioItemCount > 0) - { - RelXml.OpenTag(sb, indent, "AudioItems"); - var cind = indent + 1; - var cind2 = indent + 2; - for (int i = 0; i < AudioItemCount; i++) - { - RelXml.OpenTag(sb, cind, "Item"); - AudioItems[i].WriteXml(sb, cind2); - RelXml.CloseTag(sb, cind, "Item"); - } - RelXml.CloseTag(sb, indent, "AudioItems"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "AudioItems"); - } + RelXml.WriteItemArray(sb, AudioItems, indent, "AudioItems"); } public override void ReadXml(XmlNode node) { - var vnode2 = node.SelectSingleNode("AudioItems"); - if (vnode2 != null) - { - var inodes = vnode2.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - var v = new Dat151HashPair(); - v.ReadXml(inode); - vlist.Add(v); - } - AudioItemCount = (uint)vlist.Count; - AudioItems = vlist.ToArray(); - } - } + AudioItems = XmlRel.ReadItemArray(node, "AudioItems"); + AudioItemCount = (uint)(AudioItems?.Length ?? 0); } public override uint[] GetHashTableOffsets() { @@ -10059,7 +9041,7 @@ namespace CodeWalker.GameFiles var items = new Dat151HashPair[AudioItemCount]; for (var i = 0; i < AudioItemCount; i++) { - items[i] = new Dat151HashPair(br.ReadUInt32(), br.ReadUInt32()); + items[i] = new Dat151HashPair(br); } AudioItems = items; @@ -10074,49 +9056,17 @@ namespace CodeWalker.GameFiles bw.Write(AudioItemCount); for (var i = 0; i < AudioItemCount; i++) { - bw.Write(AudioItems[i].Hash0); - bw.Write(AudioItems[i].Hash1); + AudioItems[i].Write(bw); } } public override void WriteXml(StringBuilder sb, int indent) { - if (AudioItemCount > 0) - { - RelXml.OpenTag(sb, indent, "AudioItems"); - var cind = indent + 1; - var cind2 = indent + 2; - for (int i = 0; i < AudioItemCount; i++) - { - RelXml.OpenTag(sb, cind, "Item"); - AudioItems[i].WriteXml(sb, cind2); - RelXml.CloseTag(sb, cind, "Item"); - } - RelXml.CloseTag(sb, indent, "AudioItems"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "AudioItems"); - } + RelXml.WriteItemArray(sb, AudioItems, indent, "AudioItems"); } public override void ReadXml(XmlNode node) { - var vnode2 = node.SelectSingleNode("AudioItems"); - if (vnode2 != null) - { - var inodes = vnode2.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - var v = new Dat151HashPair(); - v.ReadXml(inode); - vlist.Add(v); - } - AudioItemCount = (uint)vlist.Count; - AudioItems = vlist.ToArray(); - } - } + AudioItems = XmlRel.ReadItemArray(node, "AudioItems"); + AudioItemCount = (uint)(AudioItems?.Length ?? 0); } public override uint[] GetHashTableOffsets() { @@ -10561,57 +9511,44 @@ namespace CodeWalker.GameFiles } public override void WriteXml(StringBuilder sb, int indent) { - if (ShoreLineCount > 0) - { - RelXml.OpenTag(sb, indent, "ShoreLines"); - var cind = indent + 1; - for (int i = 0; i < ShoreLineCount; i++) - { - var iname = RelXml.HashString(ShoreLines[i]); - RelXml.StringTag(sb, cind, "Item", iname); - } - RelXml.CloseTag(sb, indent, "ShoreLines"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "ShoreLines"); - } + RelXml.WriteHashItemArray(sb, ShoreLines, indent, "ShoreLines"); } public override void ReadXml(XmlNode node) { - var vnode = node.SelectSingleNode("ShoreLines"); - if (vnode != null) - { - var inodes = vnode.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - vlist.Add(XmlRel.GetHash(inode.InnerText)); - } - ShoreLineCount = (uint)vlist.Count; - ShoreLines = vlist.ToArray(); - } - } + ShoreLines = XmlRel.ReadHashItemArray(node, "ShoreLines"); + ShoreLineCount = (uint)(ShoreLines?.Length ?? 0); } } - [TC(typeof(EXP))] public class Dat151RadioTrackEvents : Dat151RelData { public uint EventCount { get; set; } public EventData[] Events { get; set; } - public struct EventData + public struct EventData : IMetaXmlItem { public uint Time { get; set; } public uint Event { get; set; } - public EventData(uint time, uint trackID) + public EventData(BinaryReader br) { - Time = time; - Event = trackID; + Time = br.ReadUInt32(); + Event = br.ReadUInt32(); + } + public void Write(BinaryWriter bw) + { + bw.Write(Time); + bw.Write(Event); + } + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Time", Time.ToString()); + RelXml.ValueTag(sb, indent, "Event", Event.ToString()); + } + public void ReadXml(XmlNode node) + { + Time = Xml.GetChildUIntAttribute(node, "Time", "value"); + Event = Xml.GetChildUIntAttribute(node, "Event", "value"); } public override string ToString() @@ -10631,7 +9568,7 @@ namespace CodeWalker.GameFiles Events = new EventData[EventCount]; for (int i = 0; i < EventCount; i++) { - Events[i] = new EventData(br.ReadUInt32(), br.ReadUInt32()); + Events[i] = new EventData(br); } var bytesleft = br.BaseStream.Length - br.BaseStream.Position; @@ -10645,51 +9582,17 @@ namespace CodeWalker.GameFiles bw.Write(EventCount); for (int i = 0; i < EventCount; i++) { - bw.Write(Events[i].Time); - bw.Write(Events[i].Event); + Events[i].Write(bw); } } public override void WriteXml(StringBuilder sb, int indent) { - if (EventCount > 0) - { - RelXml.OpenTag(sb, indent, "Events"); - var cind = indent + 1; - var cind2 = indent + 2; - for (int i = 0; i < EventCount; i++) - { - RelXml.OpenTag(sb, cind, "Item"); - RelXml.ValueTag(sb, cind2, "Time", Events[i].Time.ToString()); - RelXml.ValueTag(sb, cind2, "Event", Events[i].Event.ToString()); - RelXml.CloseTag(sb, cind, "Item"); - } - RelXml.CloseTag(sb, indent, "Events"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "Events"); - } + RelXml.WriteItemArray(sb, Events, indent, "Events"); } public override void ReadXml(XmlNode node) { - var vnode = node.SelectSingleNode("Events"); - if (vnode != null) - { - var inodes = vnode.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - EventData v = new EventData(); - v.Time = Xml.GetChildUIntAttribute(inode, "Time", "value"); - v.Event = Xml.GetChildUIntAttribute(inode, "Event", "value"); - vlist.Add(v); - } - EventCount = (uint)vlist.Count; - Events = vlist.ToArray(); - } - } + Events = XmlRel.ReadItemArray(node, "Events"); + EventCount = (uint)(Events?.Length ?? 0); } } [TC(typeof(EXP))] public class Dat151VehicleEngineGranular : Dat151RelData @@ -11952,12 +10855,43 @@ namespace CodeWalker.GameFiles public int ParamCount { get; set; } public Param[] Params; - public class Param + public class Param : IMetaXmlItem { public MetaHash Unk01 { get; set; } public MetaHash Unk02 { get; set; } public MetaHash Unk03 { get; set; } public MetaHash Unk04 { get; set; } + + public Param() + { } + public Param(BinaryReader br) + { + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadUInt32(); + Unk03 = br.ReadUInt32(); + Unk04 = br.ReadUInt32(); + } + public void Write(BinaryWriter bw) + { + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + } + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); + RelXml.StringTag(sb, indent, "Unk04", RelXml.HashString(Unk04)); + } + public void ReadXml(XmlNode node) + { + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk04")); + } } public Dat151VehicleScannerParams(RelFile rel) : base(rel) @@ -11972,12 +10906,7 @@ namespace CodeWalker.GameFiles Params = new Param[ParamCount]; for (int i = 0; i < ParamCount; i++) { - var p = new Param(); - p.Unk01 = br.ReadUInt32(); - p.Unk02 = br.ReadUInt32(); - p.Unk03 = br.ReadUInt32(); - p.Unk04 = br.ReadUInt32(); - Params[i] = p; + Params[i] = new Param(br); } var bytesleft = br.BaseStream.Length - br.BaseStream.Position; @@ -11992,62 +10921,20 @@ namespace CodeWalker.GameFiles bw.Write(ParamCount); for (int i = 0; i < ParamCount; i++) { - var p = Params[i]; - bw.Write(p.Unk01); - bw.Write(p.Unk02); - bw.Write(p.Unk03); - bw.Write(p.Unk04); + Params[i].Write(bw); } } public override void WriteXml(StringBuilder sb, int indent) { RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); - if (ParamCount > 0) - { - RelXml.OpenTag(sb, indent, "Params"); - var cind = indent + 1; - var cind2 = indent + 2; - for (int i = 0; i < ParamCount; i++) - { - var p = Params[i]; - RelXml.OpenTag(sb, cind, "Item"); - RelXml.StringTag(sb, cind2, "Unk01", RelXml.HashString(p.Unk01)); - RelXml.StringTag(sb, cind2, "Unk02", RelXml.HashString(p.Unk02)); - RelXml.StringTag(sb, cind2, "Unk03", RelXml.HashString(p.Unk03)); - RelXml.StringTag(sb, cind2, "Unk04", RelXml.HashString(p.Unk04)); - RelXml.CloseTag(sb, cind, "Item"); - } - RelXml.CloseTag(sb, indent, "Params"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "Params"); - } + RelXml.WriteItemArray(sb, Params, indent, "Params"); } public override void ReadXml(XmlNode node) { Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); - var vnode = node.SelectSingleNode("Params"); - if (vnode != null) - { - var inodes = vnode.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - var v = new Param(); - v.Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(inode, "Unk01")); - v.Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(inode, "Unk02")); - v.Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(inode, "Unk03")); - v.Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(inode, "Unk04")); - vlist.Add(v); - } - ParamCount = vlist.Count; - Params = vlist.ToArray(); - } - } + Params = XmlRel.ReadItemArray(node, "Params"); + ParamCount = (Params?.Length ?? 0); } } [TC(typeof(EXP))] public class Dat151Weapon : Dat151RelData @@ -12594,6 +11481,48 @@ namespace CodeWalker.GameFiles Unk12 = Xml.GetChildIntAttribute(node, "Unk12", "value"); } } + [TC(typeof(EXP))] public class Dat151PedPVGItem : IMetaXmlItem + { + public MetaHash Name { get; set; } + public FlagsUint Unk1 { get; set; } + public FlagsUint Unk2 { get; set; } + + public Dat151PedPVGItem() + { } + public Dat151PedPVGItem(BinaryReader br) + { + Name = br.ReadUInt32(); + Unk1 = br.ReadUInt32(); + Unk2 = br.ReadUInt32(); + + if (Unk1 != 0) + { }//no hit + if (Unk2 != 0) + { }//no hit + } + public void Write(BinaryWriter bw) + { + bw.Write(Name); + bw.Write(Unk1); + bw.Write(Unk2); + } + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Name", RelXml.HashString(Name)); + RelXml.ValueTag(sb, indent, "Unk1", Unk1.Value.ToString()); + RelXml.ValueTag(sb, indent, "Unk2", Unk2.Value.ToString()); + } + public void ReadXml(XmlNode node) + { + Name = XmlRel.GetHash(Xml.GetChildInnerText(node, "Name")); + Unk1 = Xml.GetChildUIntAttribute(node, "Unk1", "value"); + Unk2 = Xml.GetChildUIntAttribute(node, "Unk2", "value"); + } + public override string ToString() + { + return Name.ToString() + ", " + Unk1.Value.ToString() + ", " + Unk2.Value.ToString(); + } + } [TC(typeof(EXP))] public class Dat151PedPVG : Dat151RelData { public FlagsUint Unk00 { get; set; }//flags? @@ -12601,56 +11530,14 @@ namespace CodeWalker.GameFiles public byte Unk02 { get; set; } = 57; public byte Unk03 { get; set; } = 245; public byte ItemCount1 { get; set; } - public UnkStruct[] Items1 { get; set; } + public Dat151PedPVGItem[] Items1 { get; set; } public byte ItemCount2 { get; set; } - public UnkStruct[] Items2 { get; set; } + public Dat151PedPVGItem[] Items2 { get; set; } public byte ItemCount3 { get; set; } - public UnkStruct[] Items3 { get; set; } + public Dat151PedPVGItem[] Items3 { get; set; } public byte Unk07 { get; set; } //item count4? (=0) - public class UnkStruct - { - public MetaHash Name { get; set; } - public FlagsUint Unk1 { get; set; } - public FlagsUint Unk2 { get; set; } - - public UnkStruct() - { } - public UnkStruct(BinaryReader br) - { - Name = br.ReadUInt32(); - Unk1 = br.ReadUInt32(); - Unk2 = br.ReadUInt32(); - - if (Unk1 != 0) - { }//no hit - if (Unk2 != 0) - { }//no hit - } - public void Write(BinaryWriter bw) - { - bw.Write(Name); - bw.Write(Unk1); - bw.Write(Unk2); - } - public void WriteXml(StringBuilder sb, int indent) - { - RelXml.StringTag(sb, indent, "Name", RelXml.HashString(Name)); - RelXml.ValueTag(sb, indent, "Unk1", Unk1.Value.ToString()); - RelXml.ValueTag(sb, indent, "Unk2", Unk2.Value.ToString()); - } - public void ReadXml(XmlNode node) - { - Name = XmlRel.GetHash(Xml.GetChildInnerText(node, "Name")); - Unk1 = Xml.GetChildUIntAttribute(node, "Unk1", "value"); - Unk2 = Xml.GetChildUIntAttribute(node, "Unk2", "value"); - } - public override string ToString() - { - return Name.ToString() + ", " + Unk1.Value.ToString() + ", " + Unk2.Value.ToString(); - } - } public Dat151PedPVG(RelFile rel) : base(rel) { @@ -12665,24 +11552,24 @@ namespace CodeWalker.GameFiles Unk03 = br.ReadByte();//245 ItemCount1 = br.ReadByte(); - Items1 = new UnkStruct[ItemCount1]; + Items1 = new Dat151PedPVGItem[ItemCount1]; for (int i = 0; i < ItemCount1; i++) { - Items1[i] = new UnkStruct(br); + Items1[i] = new Dat151PedPVGItem(br); } ItemCount2 = br.ReadByte(); - Items2 = new UnkStruct[ItemCount2]; + Items2 = new Dat151PedPVGItem[ItemCount2]; for (int i = 0; i < ItemCount2; i++) { - Items2[i] = new UnkStruct(br); + Items2[i] = new Dat151PedPVGItem(br); } ItemCount3 = br.ReadByte(); - Items3 = new UnkStruct[ItemCount3]; + Items3 = new Dat151PedPVGItem[ItemCount3]; for (int i = 0; i < ItemCount3; i++) { - Items3[i] = new UnkStruct(br); + Items3[i] = new Dat151PedPVGItem(br); } Unk07 = br.ReadByte(); @@ -12734,59 +11621,10 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); - - var cind = indent + 1; - var cind2 = indent + 2; - if (ItemCount1 > 0) - { - RelXml.OpenTag(sb, indent, "Items1"); - for (int i = 0; i < ItemCount1; i++) - { - RelXml.OpenTag(sb, cind, "Item"); - Items1[i].WriteXml(sb, cind2); - RelXml.CloseTag(sb, cind, "Item"); - } - RelXml.CloseTag(sb, indent, "Items1"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "Items1"); - } - - if (ItemCount2 > 0) - { - RelXml.OpenTag(sb, indent, "Items2"); - for (int i = 0; i < ItemCount2; i++) - { - RelXml.OpenTag(sb, cind, "Item"); - Items2[i].WriteXml(sb, cind2); - RelXml.CloseTag(sb, cind, "Item"); - } - RelXml.CloseTag(sb, indent, "Items2"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "Items2"); - } - - if (ItemCount3 > 0) - { - RelXml.OpenTag(sb, indent, "Items3"); - for (int i = 0; i < ItemCount3; i++) - { - RelXml.OpenTag(sb, cind, "Item"); - Items3[i].WriteXml(sb, cind2); - RelXml.CloseTag(sb, cind, "Item"); - } - RelXml.CloseTag(sb, indent, "Items3"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "Items3"); - } - + RelXml.WriteItemArray(sb, Items1, indent, "Items1"); + RelXml.WriteItemArray(sb, Items2, indent, "Items2"); + RelXml.WriteItemArray(sb, Items3, indent, "Items3"); RelXml.ValueTag(sb, indent, "Unk07", Unk07.ToString()); - } public override void ReadXml(XmlNode node) { @@ -12794,57 +11632,12 @@ namespace CodeWalker.GameFiles Unk01 = (byte)Xml.GetChildUIntAttribute(node, "Unk01", "value"); Unk02 = (byte)Xml.GetChildUIntAttribute(node, "Unk02", "value"); Unk03 = (byte)Xml.GetChildUIntAttribute(node, "Unk03", "value"); - var vnode = node.SelectSingleNode("Items1"); - if (vnode != null) - { - var inodes = vnode.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - var v = new UnkStruct(); - v.ReadXml(inode); - vlist.Add(v); - } - ItemCount1 = (byte)vlist.Count; - Items1 = vlist.ToArray(); - } - } - var vnode2 = node.SelectSingleNode("Items2"); - if (vnode2 != null) - { - var inodes = vnode2.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - var v = new UnkStruct(); - v.ReadXml(inode); - vlist.Add(v); - } - ItemCount2 = (byte)vlist.Count; - Items2 = vlist.ToArray(); - } - } - var vnode3 = node.SelectSingleNode("Items3"); - if (vnode3 != null) - { - var inodes = vnode3.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - var v = new UnkStruct(); - v.ReadXml(inode); - vlist.Add(v); - } - ItemCount3 = (byte)vlist.Count; - Items3 = vlist.ToArray(); - } - } + Items1 = XmlRel.ReadItemArray(node, "Items1"); + ItemCount1 = (byte)(Items1?.Length ?? 0); + Items2 = XmlRel.ReadItemArray(node, "Items2"); + ItemCount2 = (byte)(Items2?.Length ?? 0); + Items3 = XmlRel.ReadItemArray(node, "Items3"); + ItemCount3 = (byte)(Items3?.Length ?? 0); Unk07 = (byte)Xml.GetChildUIntAttribute(node, "Unk07", "value"); } } @@ -14576,9 +13369,8 @@ namespace CodeWalker.GameFiles [TC(typeof(EXP))] public class Dat151Train : Dat151RelData { - public MetaHash Unk00 { get; set; } - public MetaHash Unk01 { get; set; }//0 - public MetaHash Unk02 { get; set; } + public MetaHash Unk01 { get; set; } + public MetaHash Unk02 { get; set; }//0 public MetaHash Unk03 { get; set; } public MetaHash Unk04 { get; set; } public MetaHash Unk05 { get; set; } @@ -14587,8 +13379,8 @@ namespace CodeWalker.GameFiles public MetaHash Unk08 { get; set; } public MetaHash Unk09 { get; set; } public MetaHash Unk10 { get; set; } - public MetaHash Unk11 { get; set; }//shorts? 4272750130 -462,-340 - public MetaHash Unk12 { get; set; } + public MetaHash Unk11 { get; set; } + public MetaHash Unk12 { get; set; }//shorts? 4272750130 -462,-340 public MetaHash Unk13 { get; set; } public MetaHash Unk14 { get; set; } public MetaHash Unk15 { get; set; } @@ -14596,15 +13388,15 @@ namespace CodeWalker.GameFiles public MetaHash Unk17 { get; set; } public MetaHash Unk18 { get; set; } public MetaHash Unk19 { get; set; } - public MetaHash Unk20 { get; set; }//f? 3123948585 -0.0006853962 - public MetaHash Unk21 { get; set; } + public MetaHash Unk20 { get; set; } + public MetaHash Unk21 { get; set; }//f? 3123948585 -0.0006853962 public MetaHash Unk22 { get; set; } public MetaHash Unk23 { get; set; } public MetaHash Unk24 { get; set; } - public MetaHash Unk25 { get; set; }//f? 1034145554 0.0799848 - public MetaHash Unk26 { get; set; } - public MetaHash Unk27 { get; set; }//f? 1180265007 13914.5459 - public MetaHash Unk28 { get; set; } + public MetaHash Unk25 { get; set; } + public MetaHash Unk26 { get; set; }//f? 1034145554 0.0799848 + public MetaHash Unk27 { get; set; } + public MetaHash Unk28 { get; set; }//f? 1180265007 13914.5459 public MetaHash Unk29 { get; set; } public MetaHash Unk30 { get; set; } public MetaHash Unk31 { get; set; } @@ -14613,7 +13405,8 @@ namespace CodeWalker.GameFiles public MetaHash Unk34 { get; set; } public MetaHash Unk35 { get; set; } public MetaHash Unk36 { get; set; } - public MetaHash Unk37 { get; set; }//f? 1122753141 117.926674 + public MetaHash Unk37 { get; set; } + public MetaHash Unk38 { get; set; }//f? 1122753141 117.926674 public Dat151Train(RelFile rel) : base(rel) @@ -14623,7 +13416,6 @@ namespace CodeWalker.GameFiles } public Dat151Train(RelData d, BinaryReader br) : base(d, br) { - Unk00 = br.ReadUInt32(); Unk01 = br.ReadUInt32(); Unk02 = br.ReadUInt32(); Unk03 = br.ReadUInt32(); @@ -14661,18 +13453,19 @@ namespace CodeWalker.GameFiles Unk35 = br.ReadUInt32(); Unk36 = br.ReadUInt32(); Unk37 = br.ReadUInt32(); + Unk38 = br.ReadUInt32(); - if (Unk01 != 0) + if (Unk02 != 0) { } - if (Unk11 != 4272750130) + if (Unk12 != 4272750130) { } - if (Unk20 != 3123948585) + if (Unk21 != 3123948585) { } - if (Unk25 != 1034145554) + if (Unk26 != 1034145554) { } - if (Unk27 != 1180265007) + if (Unk28 != 1180265007) { } - if (Unk37 != 1122753141) + if (Unk38 != 1122753141) { } @@ -14684,7 +13477,6 @@ namespace CodeWalker.GameFiles { WriteTypeAndOffset(bw); - bw.Write(Unk00); bw.Write(Unk01); bw.Write(Unk02); bw.Write(Unk03); @@ -14722,10 +13514,10 @@ namespace CodeWalker.GameFiles bw.Write(Unk35); bw.Write(Unk36); bw.Write(Unk37); + bw.Write(Unk38); } public override void WriteXml(StringBuilder sb, int indent) { - RelXml.StringTag(sb, indent, "Unk00", RelXml.HashString(Unk00)); RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); @@ -14763,10 +13555,10 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "Unk35", RelXml.HashString(Unk35)); RelXml.StringTag(sb, indent, "Unk36", RelXml.HashString(Unk36)); RelXml.StringTag(sb, indent, "Unk37", RelXml.HashString(Unk37)); + RelXml.StringTag(sb, indent, "Unk38", RelXml.HashString(Unk38)); } public override void ReadXml(XmlNode node) { - Unk00 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk00")); Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); @@ -14804,9 +13596,10 @@ namespace CodeWalker.GameFiles Unk35 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk35")); Unk36 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk36")); Unk37 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk37")); + Unk38 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk38")); } } - [TC(typeof(EXP))] public class Dat151AnimalParamsItem + [TC(typeof(EXP))] public class Dat151AnimalParamsItem : IMetaXmlItem { public string Name { get; set; } public float Unk1 { get; set; } @@ -14962,24 +13755,7 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "Unk08", RelXml.HashString(Unk08)); RelXml.ValueTag(sb, indent, "Unk09", FloatUtil.ToString(Unk09)); RelXml.StringTag(sb, indent, "Unk10", RelXml.HashString(Unk10)); - - if (ItemCount > 0) - { - RelXml.OpenTag(sb, indent, "Items"); - var cind = indent + 1; - var cind2 = indent + 2; - for (int i = 0; i < ItemCount; i++) - { - RelXml.OpenTag(sb, cind, "Item"); - Items[i].WriteXml(sb, cind2); - RelXml.CloseTag(sb, cind, "Item"); - } - RelXml.CloseTag(sb, indent, "Items"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "Items"); - } + RelXml.WriteItemArray(sb, Items, indent, "Items"); } public override void ReadXml(XmlNode node) { @@ -14993,24 +13769,605 @@ namespace CodeWalker.GameFiles Unk08 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk08")); Unk09 = Xml.GetChildFloatAttribute(node, "Unk09", "value"); Unk10 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk10")); + Items = XmlRel.ReadItemArray(node, "Items"); + ItemCount = (byte)(Items?.Length ?? 0); + } + } + [TC(typeof(EXP))] public class Dat151SpeechParams : Dat151RelData + { + public FlagsUint Flags { get; set; } //0xAAA50405 + public int Unk01 { get; set; } //3 + public int Unk02 { get; set; } //30000 + public byte Unk03 { get; set; } //0x00000202 + public byte Unk04 { get; set; } + public short Unk05 { get; set; } //0 + public MetaHash Unk06 { get; set; } //0 + public int Unk07 { get; set; } //0xFFFFFFFF - var vnode2 = node.SelectSingleNode("Items"); - if (vnode2 != null) + + public Dat151SpeechParams(RelFile rel) : base(rel) + { + Type = Dat151RelType.SpeechParams; + TypeID = (byte)Type; + } + public Dat151SpeechParams(RelData d, BinaryReader br) : base(d, br) + { + Flags = br.ReadUInt32(); + Unk01 = br.ReadInt32(); + Unk02 = br.ReadInt32(); + Unk03 = br.ReadByte(); + Unk04 = br.ReadByte(); + Unk05 = br.ReadInt16(); + Unk06 = br.ReadUInt32(); + Unk07 = br.ReadInt32(); + + if (Unk01 > 0xFFFF) + { } + if (Unk02 > 0xFFFF) + { } + if (Unk05 != 0) + { } + if (Unk06 != 0) + { } + if (Unk07 != -1) + { } + + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Flags); + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); + RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); + RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); + RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); + RelXml.ValueTag(sb, indent, "Unk05", Unk05.ToString()); + RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); + RelXml.ValueTag(sb, indent, "Unk07", Unk07.ToString()); + } + public override void ReadXml(XmlNode node) + { + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = Xml.GetChildIntAttribute(node, "Unk01", "value"); + Unk02 = Xml.GetChildIntAttribute(node, "Unk02", "value"); + Unk03 = (byte)Xml.GetChildUIntAttribute(node, "Unk03", "value"); + Unk04 = (byte)Xml.GetChildUIntAttribute(node, "Unk04", "value"); + Unk05 = (short)Xml.GetChildIntAttribute(node, "Unk05", "value"); + Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); + Unk07 = Xml.GetChildIntAttribute(node, "Unk07", "value"); + } + } + + [TC(typeof(EXP))] public class Dat151Unk9 : Dat151RelData + { + public MetaHash Unk01 { get; set; } + public MetaHash Unk02 { get; set; } + public MetaHash Unk03 { get; set; } + public MetaHash Unk04 { get; set; } + public MetaHash Unk05 { get; set; } + public MetaHash Unk06 { get; set; } + public MetaHash Unk07 { get; set; } + public MetaHash Unk08 { get; set; } + public MetaHash Unk09 { get; set; } + public MetaHash Unk10 { get; set; } + public MetaHash Unk11 { get; set; } + public MetaHash Unk12 { get; set; } + public MetaHash Unk13 { get; set; } + public MetaHash Unk14 { get; set; } + public MetaHash Unk15 { get; set; } + public MetaHash Unk16 { get; set; } + public MetaHash Unk17 { get; set; } + public MetaHash Unk18 { get; set; } + + public Dat151Unk9(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk9; + TypeID = (byte)Type; + } + public Dat151Unk9(RelData d, BinaryReader br) : base(d, br) + { + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadUInt32(); + Unk03 = br.ReadUInt32(); + Unk04 = br.ReadUInt32(); + Unk05 = br.ReadUInt32(); + Unk06 = br.ReadUInt32(); + Unk07 = br.ReadUInt32(); + Unk08 = br.ReadUInt32(); + Unk09 = br.ReadUInt32(); + Unk10 = br.ReadUInt32(); + Unk11 = br.ReadUInt32(); + Unk12 = br.ReadUInt32(); + Unk13 = br.ReadUInt32(); + Unk14 = br.ReadUInt32(); + Unk15 = br.ReadUInt32(); + Unk16 = br.ReadUInt32(); + Unk17 = br.ReadUInt32(); + Unk18 = br.ReadUInt32(); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); + bw.Write(Unk14); + bw.Write(Unk15); + bw.Write(Unk16); + bw.Write(Unk17); + bw.Write(Unk18); + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); + RelXml.StringTag(sb, indent, "Unk04", RelXml.HashString(Unk04)); + RelXml.StringTag(sb, indent, "Unk05", RelXml.HashString(Unk05)); + RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); + RelXml.StringTag(sb, indent, "Unk07", RelXml.HashString(Unk07)); + RelXml.StringTag(sb, indent, "Unk08", RelXml.HashString(Unk08)); + RelXml.StringTag(sb, indent, "Unk09", RelXml.HashString(Unk09)); + RelXml.StringTag(sb, indent, "Unk10", RelXml.HashString(Unk10)); + RelXml.StringTag(sb, indent, "Unk11", RelXml.HashString(Unk11)); + RelXml.StringTag(sb, indent, "Unk12", RelXml.HashString(Unk12)); + RelXml.StringTag(sb, indent, "Unk13", RelXml.HashString(Unk13)); + RelXml.StringTag(sb, indent, "Unk14", RelXml.HashString(Unk14)); + RelXml.StringTag(sb, indent, "Unk15", RelXml.HashString(Unk15)); + RelXml.StringTag(sb, indent, "Unk16", RelXml.HashString(Unk16)); + RelXml.StringTag(sb, indent, "Unk17", RelXml.HashString(Unk17)); + RelXml.StringTag(sb, indent, "Unk18", RelXml.HashString(Unk18)); + } + public override void ReadXml(XmlNode node) + { + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk04")); + Unk05 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk05")); + Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); + Unk07 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk07")); + Unk08 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk08")); + Unk09 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk09")); + Unk10 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk10")); + Unk11 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk11")); + Unk12 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk12")); + Unk13 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk13")); + Unk14 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk14")); + Unk15 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk15")); + Unk16 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk16")); + Unk17 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk17")); + Unk18 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk18")); + } + } + [TC(typeof(EXP))] public class Dat151Unk11 : Dat151RelData + { + public FlagsUint Flags { get; set; } + public int Unk01 { get; set; } + public int Unk02 { get; set; } + public int Unk03 { get; set; } + public int Unk04 { get; set; } + public int Unk05 { get; set; } + public MetaHash Unk06 { get; set; }//0 + public MetaHash Unk07 { get; set; }//0 + public MetaHash Unk08 { get; set; }//0 + public MetaHash Unk09 { get; set; } + public int ItemCount { get; set; } + public Dat151HashFloat[] Items { get; set; } + + + public Dat151Unk11(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk11; + TypeID = (byte)Type; + } + public Dat151Unk11(RelData d, BinaryReader br) : base(d, br) + { + Flags = br.ReadUInt32(); + Unk01 = br.ReadInt32(); + Unk02 = br.ReadInt32(); + Unk03 = br.ReadInt32(); + Unk04 = br.ReadInt32(); + Unk05 = br.ReadInt32(); + Unk06 = br.ReadUInt32();//0 + Unk07 = br.ReadUInt32();//0 + Unk08 = br.ReadUInt32();//0 + Unk09 = br.ReadUInt32(); + ItemCount = br.ReadInt32(); + + var items = new Dat151HashFloat[ItemCount]; + for (int i = 0; i < ItemCount; i++) { - var inodes = vnode2.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - var v = new Dat151AnimalParamsItem(); - v.ReadXml(inode); - vlist.Add(v); - } - ItemCount = (byte)vlist.Count; - Items = vlist.ToArray(); - } + items[i] = new Dat151HashFloat(br); } + Items = items; + + if (Unk06 != 0) + { } + if (Unk07 != 0) + { } + if (Unk08 != 0) + { } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Flags); + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) + { + Items[i].Write(bw); + } + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); + RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); + RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); + RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); + RelXml.ValueTag(sb, indent, "Unk05", Unk05.ToString()); + RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); + RelXml.StringTag(sb, indent, "Unk07", RelXml.HashString(Unk07)); + RelXml.StringTag(sb, indent, "Unk08", RelXml.HashString(Unk08)); + RelXml.StringTag(sb, indent, "Unk09", RelXml.HashString(Unk09)); + RelXml.WriteItemArray(sb, Items, indent, "Items"); + } + public override void ReadXml(XmlNode node) + { + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = Xml.GetChildIntAttribute(node, "Unk01", "value"); + Unk02 = Xml.GetChildIntAttribute(node, "Unk02", "value"); + Unk03 = Xml.GetChildIntAttribute(node, "Unk03", "value"); + Unk04 = Xml.GetChildIntAttribute(node, "Unk04", "value"); + Unk05 = Xml.GetChildIntAttribute(node, "Unk05", "value"); + Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); + Unk07 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk07")); + Unk08 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk08")); + Unk09 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk09")); + Items = XmlRel.ReadItemArray(node, "Items"); + ItemCount = (Items?.Length ?? 0); + } + } + [TC(typeof(EXP))] public class Dat151Unk12 : Dat151RelData + { + public FlagsUint Flags { get; set; } + public MetaHash Unk01 { get; set; } + public int Unk02 { get; set; } + public int Unk03 { get; set; } + public byte Unk04 { get; set; } + public byte Unk05 { get; set; } + public byte Unk06 { get; set; } + public byte Unk07 { get; set; } + public MetaHash Unk08 { get; set; }//0 + public MetaHash Unk09 { get; set; }//0 + public byte Unk10 { get; set; } + public byte Unk11 { get; set; } + public byte Unk12 { get; set; } + public byte Unk13 { get; set; } + public byte Unk14 { get; set; }//only when Unk11>2 + public byte Unk15 { get; set; }//only when Unk11>2 + public byte Unk16 { get; set; }//only when Unk11>2 + public byte Unk17 { get; set; }//only when Unk11>2 + + + public Dat151Unk12(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk12; + TypeID = (byte)Type; + } + public Dat151Unk12(RelData d, BinaryReader br) : base(d, br) + { + Flags = br.ReadUInt32(); + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadInt32(); + Unk03 = br.ReadInt32(); + Unk04 = br.ReadByte(); + Unk05 = br.ReadByte(); + Unk06 = br.ReadByte(); + Unk07 = br.ReadByte(); + Unk08 = br.ReadUInt32();//0 + Unk09 = br.ReadUInt32();//0 + Unk10 = br.ReadByte(); + Unk11 = br.ReadByte(); + Unk12 = br.ReadByte(); + Unk13 = br.ReadByte(); + + if (Unk11 > 2) + { + Unk14 = br.ReadByte(); + Unk15 = br.ReadByte(); + Unk16 = br.ReadByte(); + Unk17 = br.ReadByte(); + } + + + if (Unk05 > 3) + { } + if (Unk06 != 0) + { } + if (Unk07 != 0) + { } + if (Unk08 != 0) + { } + if (Unk09 != 0) + { } + if (Unk11 > 3) + { } + + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Flags); + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); + if (Unk11 > 2) + { + bw.Write(Unk14); + bw.Write(Unk15); + bw.Write(Unk16); + bw.Write(Unk17); + } + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); + RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); + RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); + RelXml.ValueTag(sb, indent, "Unk05", Unk05.ToString()); + RelXml.ValueTag(sb, indent, "Unk06", Unk06.ToString()); + RelXml.ValueTag(sb, indent, "Unk07", Unk07.ToString()); + RelXml.StringTag(sb, indent, "Unk08", RelXml.HashString(Unk08)); + RelXml.StringTag(sb, indent, "Unk09", RelXml.HashString(Unk09)); + RelXml.ValueTag(sb, indent, "Unk10", Unk10.ToString()); + RelXml.ValueTag(sb, indent, "Unk11", Unk11.ToString()); + RelXml.ValueTag(sb, indent, "Unk12", Unk12.ToString()); + RelXml.ValueTag(sb, indent, "Unk13", Unk13.ToString()); + if (Unk11 > 2) + { + RelXml.ValueTag(sb, indent, "Unk14", Unk14.ToString()); + RelXml.ValueTag(sb, indent, "Unk15", Unk15.ToString()); + RelXml.ValueTag(sb, indent, "Unk16", Unk16.ToString()); + RelXml.ValueTag(sb, indent, "Unk17", Unk17.ToString()); + } + } + public override void ReadXml(XmlNode node) + { + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = Xml.GetChildIntAttribute(node, "Unk02", "value"); + Unk03 = Xml.GetChildIntAttribute(node, "Unk03", "value"); + Unk04 = (byte)Xml.GetChildUIntAttribute(node, "Unk04", "value"); + Unk05 = (byte)Xml.GetChildUIntAttribute(node, "Unk05", "value"); + Unk06 = (byte)Xml.GetChildUIntAttribute(node, "Unk06", "value"); + Unk07 = (byte)Xml.GetChildUIntAttribute(node, "Unk07", "value"); + Unk08 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk08")); + Unk09 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk09")); + Unk10 = (byte)Xml.GetChildUIntAttribute(node, "Unk10", "value"); + Unk11 = (byte)Xml.GetChildUIntAttribute(node, "Unk11", "value"); + Unk12 = (byte)Xml.GetChildUIntAttribute(node, "Unk12", "value"); + Unk13 = (byte)Xml.GetChildUIntAttribute(node, "Unk13", "value"); + if (Unk11 > 2) + { + Unk14 = (byte)Xml.GetChildUIntAttribute(node, "Unk14", "value"); + Unk15 = (byte)Xml.GetChildUIntAttribute(node, "Unk15", "value"); + Unk16 = (byte)Xml.GetChildUIntAttribute(node, "Unk16", "value"); + Unk17 = (byte)Xml.GetChildUIntAttribute(node, "Unk17", "value"); + } + } + } + [TC(typeof(EXP))] public class Dat151Unk13 : Dat151RelData + { + public FlagsUint Flags { get; set; } + public MetaHash Unk01 { get; set; } + public MetaHash Unk02 { get; set; }//0 + public int Unk03 { get; set; } + public MetaHash Unk04 { get; set; }//0 + public MetaHash Unk05 { get; set; }//0 + public MetaHash Unk06 { get; set; }//0 + public byte Unk07 { get; set; }//3 + public byte Unk08 { get; set; }//0 + public byte Unk09 { get; set; } + public byte ItemCount { get; set; } + public MetaHash[] Items { get; set; } + + public Dat151Unk13(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk13; + TypeID = (byte)Type; + } + public Dat151Unk13(RelData d, BinaryReader br) : base(d, br) + { + Flags = br.ReadUInt32(); + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadUInt32();//0 + Unk03 = br.ReadInt32(); + Unk04 = br.ReadUInt32();//0 + Unk05 = br.ReadUInt32();//0 + Unk06 = br.ReadUInt32();//0 + Unk07 = br.ReadByte();//3 + Unk08 = br.ReadByte();//0 + Unk09 = br.ReadByte(); + ItemCount = br.ReadByte(); + Items = new MetaHash[ItemCount]; + for (int i = 0; i < ItemCount; i++) + { + Items[i] = br.ReadUInt32(); + } + + if (Unk02 != 0) + { } + if (Unk04 != 0) + { } + if (Unk05 != 0) + { } + if (Unk06 != 0) + { } + if (Unk07 != 3) + { } + if (Unk08 != 0) + { } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Flags); + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) + { + bw.Write(Items[i]); + } + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); + RelXml.StringTag(sb, indent, "Unk04", RelXml.HashString(Unk04)); + RelXml.StringTag(sb, indent, "Unk05", RelXml.HashString(Unk05)); + RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); + RelXml.ValueTag(sb, indent, "Unk07", Unk07.ToString()); + RelXml.ValueTag(sb, indent, "Unk08", Unk08.ToString()); + RelXml.ValueTag(sb, indent, "Unk09", Unk09.ToString()); + RelXml.WriteHashItemArray(sb, Items, indent, "Items"); + } + public override void ReadXml(XmlNode node) + { + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Unk03 = Xml.GetChildIntAttribute(node, "Unk03", "value"); + Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk04")); + Unk05 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk05")); + Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); + Unk07 = (byte)Xml.GetChildUIntAttribute(node, "Unk07", "value"); + Unk08 = (byte)Xml.GetChildUIntAttribute(node, "Unk08", "value"); + Unk09 = (byte)Xml.GetChildUIntAttribute(node, "Unk09", "value"); + Items = XmlRel.ReadHashItemArray(node, "Items"); + ItemCount = (byte)(Items?.Length ?? 0); + } + } + [TC(typeof(EXP))] public class Dat151Unk15 : Dat151RelData //dlc_btl_nightclub_scl, dlc_btl_nightclub_queue_scl + { + public int ItemCount { get; set; } + public MetaHash[] Items { get; set; } + + public Dat151Unk15(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk15; + TypeID = (byte)Type; + } + public Dat151Unk15(RelData d, BinaryReader br) : base(d, br) + { + ItemCount = br.ReadInt32(); + Items = new MetaHash[ItemCount]; + for (int i = 0; i < ItemCount; i++) + { + Items[i] = br.ReadUInt32(); + } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) + { + bw.Write(Items[i]); + } + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.WriteHashItemArray(sb, Items, indent, "Items"); + } + public override void ReadXml(XmlNode node) + { + Items = XmlRel.ReadHashItemArray(node, "Items"); + ItemCount = (Items?.Length ?? 0); } } @@ -15021,16 +14378,16 @@ namespace CodeWalker.GameFiles - //TODO classes - [TC(typeof(EXP))] public class Dat151SpeechParams : Dat151RelData + //TODO classes + [TC(typeof(EXP))] public class Dat151Unk18 : Dat151RelData { - public Dat151SpeechParams(RelFile rel) : base(rel) + public Dat151Unk18(RelFile rel) : base(rel) { - Type = Dat151RelType.SpeechParams; + Type = Dat151RelType.Unk18; TypeID = (byte)Type; } - public Dat151SpeechParams(RelData d, BinaryReader br) : base(d, br) + public Dat151Unk18(RelData d, BinaryReader br) : base(d, br) { var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) @@ -15050,134 +14407,6 @@ namespace CodeWalker.GameFiles base.ReadXml(node); } } - - - [TC(typeof(EXP))] public class Dat151Unk9 : Dat151RelData - { - public Dat151Unk9(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk9; - TypeID = (byte)Type; - } - public Dat151Unk9(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - WriteTypeAndOffset(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - } - } - [TC(typeof(EXP))] public class Dat151Unk11 : Dat151RelData - { - public Dat151Unk11(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk11; - TypeID = (byte)Type; - } - public Dat151Unk11(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - WriteTypeAndOffset(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - } - } - [TC(typeof(EXP))] public class Dat151Unk12 : Dat151RelData - { - public Dat151Unk12(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk12; - TypeID = (byte)Type; - } - public Dat151Unk12(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - WriteTypeAndOffset(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - } - } - [TC(typeof(EXP))] public class Dat151Unk13 : Dat151RelData - { - public Dat151Unk13(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk13; - TypeID = (byte)Type; - } - public Dat151Unk13(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - WriteTypeAndOffset(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - } - } - [TC(typeof(EXP))] public class Dat151Unk15 : Dat151RelData - { - public Dat151Unk15(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk15; - TypeID = (byte)Type; - } - public Dat151Unk15(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - WriteTypeAndOffset(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - } - } - [TC(typeof(EXP))] public class Dat151Unk18 : Dat151RelData - { - public Dat151Unk18(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk18; - TypeID = (byte)Type; - } - public Dat151Unk18(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - WriteTypeAndOffset(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - } - } [TC(typeof(EXP))] public class Dat151Unk22 : Dat151RelData { public Dat151Unk22(RelFile rel) : base(rel) @@ -15193,10 +14422,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk23 : Dat151RelData @@ -15214,10 +14449,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk27 : Dat151RelData @@ -15235,10 +14476,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk28 : Dat151RelData @@ -15256,10 +14503,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk29 : Dat151RelData @@ -15277,10 +14530,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk31 : Dat151RelData @@ -15298,10 +14557,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk33 : Dat151RelData @@ -15319,10 +14584,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk35 : Dat151RelData @@ -15340,10 +14611,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk36 : Dat151RelData @@ -15361,10 +14638,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk40 : Dat151RelData @@ -15382,10 +14665,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk41 : Dat151RelData @@ -15403,10 +14692,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk42 : Dat151RelData @@ -15424,10 +14719,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk45 : Dat151RelData @@ -15445,10 +14746,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk48 : Dat151RelData @@ -15466,10 +14773,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk51 : Dat151RelData @@ -15487,10 +14800,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk54 : Dat151RelData @@ -15508,10 +14827,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk59 : Dat151RelData @@ -15529,10 +14854,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk69 : Dat151RelData @@ -15550,10 +14881,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk70 : Dat151RelData @@ -15571,10 +14908,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk71 : Dat151RelData @@ -15592,10 +14935,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk72 : Dat151RelData @@ -15613,10 +14962,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk74 : Dat151RelData @@ -15634,10 +14989,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk75 : Dat151RelData @@ -15655,10 +15016,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk77 : Dat151RelData @@ -15676,10 +15043,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk79 : Dat151RelData @@ -15697,10 +15070,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk80 : Dat151RelData //vehicle record audio? (YVR) @@ -15718,10 +15097,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk82 : Dat151RelData @@ -15739,10 +15124,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk85 : Dat151RelData @@ -15760,10 +15151,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk95 : Dat151RelData @@ -15781,10 +15178,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk96 : Dat151RelData @@ -15802,10 +15205,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk99 : Dat151RelData @@ -15823,10 +15232,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk100 : Dat151RelData @@ -15844,10 +15259,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk101 : Dat151RelData @@ -15865,10 +15286,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk105 : Dat151RelData @@ -15886,10 +15313,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk106 : Dat151RelData @@ -15907,10 +15340,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk107 : Dat151RelData @@ -15928,10 +15367,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk108 : Dat151RelData @@ -15949,10 +15394,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk109 : Dat151RelData @@ -15970,10 +15421,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk110 : Dat151RelData @@ -15991,10 +15448,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk111 : Dat151RelData @@ -16012,10 +15475,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk112 : Dat151RelData @@ -16033,10 +15502,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk113 : Dat151RelData @@ -16054,10 +15529,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk115 : Dat151RelData @@ -16075,10 +15556,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk116 : Dat151RelData @@ -16096,10 +15583,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk118 : Dat151RelData @@ -16117,10 +15610,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk119 : Dat151RelData @@ -16138,10 +15637,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } [TC(typeof(EXP))] public class Dat151Unk121 : Dat151RelData @@ -16159,10 +15664,16 @@ namespace CodeWalker.GameFiles } public override void Write(BinaryWriter bw) { - WriteTypeAndOffset(bw); + //WriteTypeAndOffset(bw); + base.Write(bw); } public override void WriteXml(StringBuilder sb, int indent) { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } @@ -16459,7 +15970,7 @@ namespace CodeWalker.GameFiles { public int VariableCount { get; set; } public VariableValue[] Variables { get; set; } - public class VariableValue + public class VariableValue : IMetaXmlItem { public MetaHash Name { get; set; } public float Value { get; set; } @@ -16485,6 +15996,10 @@ namespace CodeWalker.GameFiles Name = XmlRel.GetHash(Xml.GetChildInnerText(node, "Name")); Value = Xml.GetChildFloatAttribute(node, "Value", "value"); } + public override string ToString() + { + return Name + ": " + Value.ToString(); + } } public Dat4ConfigVariableList(RelFile rel) : base(rel) @@ -16516,44 +16031,13 @@ namespace CodeWalker.GameFiles public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); - if (VariableCount > 0) - { - RelXml.OpenTag(sb, indent, "Variables"); - var cind = indent + 1; - var cind2 = indent + 2; - for (int i = 0; i < VariableCount; i++) - { - RelXml.OpenTag(sb, cind, "Item"); - Variables[i].WriteXml(sb, cind2); - RelXml.CloseTag(sb, cind, "Item"); - } - RelXml.CloseTag(sb, indent, "Variables"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "Variables"); - } + RelXml.WriteItemArray(sb, Variables, indent, "Variables"); } public override void ReadXml(XmlNode node) { base.ReadXml(node); - var vnode = node.SelectSingleNode("Variables"); - if (vnode != null) - { - var inodes = vnode.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - var v = new VariableValue(); - v.ReadXml(inode); - vlist.Add(v); - } - VariableCount = vlist.Count; - Variables = vlist.ToArray(); - } - } + Variables = XmlRel.ReadItemArray(node, "Variables"); + VariableCount = (Variables?.Length ?? 0); } } [TC(typeof(EXP))] public class Dat4ConfigWaveSlot : Dat4ConfigData @@ -16648,35 +16132,13 @@ namespace CodeWalker.GameFiles public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); - if (WaveSlots?.Length > 0) - { - RelXml.OpenTag(sb, indent, "WaveSlots"); - var cind = indent + 1; - foreach (var hash in WaveSlots) - { - RelXml.StringTag(sb, cind, "Item", RelXml.HashString(hash)); - } - RelXml.CloseTag(sb, indent, "WaveSlots"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "WaveSlots"); - } + RelXml.WriteHashItemArray(sb, WaveSlots, indent, "WaveSlots"); } public override void ReadXml(XmlNode node) { base.ReadXml(node); - var atnode = node.SelectSingleNode("WaveSlots"); - if (atnode == null) return; - - var slotnodes = atnode.SelectNodes("Item"); - var slotlist = new List(); - foreach (XmlNode slotnode in slotnodes) - { - slotlist.Add(XmlRel.GetHash(slotnode.InnerText)); - } - WaveSlots = slotlist.ToArray(); - WaveSlotsCount = (byte)slotlist.Count; + WaveSlots = XmlRel.ReadHashItemArray(node, "WaveSlots"); + WaveSlotsCount = (WaveSlots?.Length ?? 0); } public override uint[] GetHashTableOffsets() { @@ -16716,7 +16178,7 @@ namespace CodeWalker.GameFiles Vector4[] UnkVecs3 { get; set; } - public class UnkItem + public class UnkItem : IMetaXmlItem { public float UnkFloat { get; set; } public int UnkInt { get; set; } @@ -16880,8 +16342,6 @@ namespace CodeWalker.GameFiles public override void WriteXml(StringBuilder sb, int indent) { base.WriteXml(sb, indent); - var cind = indent + 1; - var cind2 = indent + 2; RelXml.ValueTag(sb, indent, "Unk1", FloatUtil.ToString(Unk1)); RelXml.ValueTag(sb, indent, "Unk2", FloatUtil.ToString(Unk2)); RelXml.ValueTag(sb, indent, "Unk3", FloatUtil.ToString(Unk3)); @@ -16889,21 +16349,7 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk5", FloatUtil.ToString(Unk5)); RelXml.ValueTag(sb, indent, "Unk6", FloatUtil.ToString(Unk6)); RelXml.ValueTag(sb, indent, "Unk7", FloatUtil.ToString(Unk7)); - if (UnkItemsCount > 0) - { - RelXml.OpenTag(sb, indent, "UnkItems"); - for (int i = 0; i < UnkItemsCount; i++) - { - RelXml.OpenTag(sb, cind, "Item"); - UnkItems[i].WriteXml(sb, cind2); - RelXml.CloseTag(sb, cind, "Item"); - } - RelXml.CloseTag(sb, indent, "UnkItems"); - } - else - { - RelXml.SelfClosingTag(sb, indent, "UnkItems"); - } + RelXml.WriteItemArray(sb, UnkItems, indent, "UnkItems"); RelXml.SelfClosingTag(sb, indent, "UnkVec1 " + FloatUtil.GetVector4XmlString(UnkVec1)); RelXml.SelfClosingTag(sb, indent, "UnkVec2 " + FloatUtil.GetVector4XmlString(UnkVec2)); RelXml.SelfClosingTag(sb, indent, "UnkVec3 " + FloatUtil.GetVector4XmlString(UnkVec3)); @@ -16927,23 +16373,8 @@ namespace CodeWalker.GameFiles Unk5 = Xml.GetChildFloatAttribute(node, "Unk5", "value"); Unk6 = Xml.GetChildFloatAttribute(node, "Unk6", "value"); Unk7 = Xml.GetChildFloatAttribute(node, "Unk7", "value"); - var vnode = node.SelectSingleNode("UnkItems"); - if (vnode != null) - { - var inodes = vnode.SelectNodes("Item"); - if (inodes?.Count > 0) - { - var vlist = new List(); - foreach (XmlNode inode in inodes) - { - var v = new UnkItem(); - v.ReadXml(inode); - vlist.Add(v); - } - UnkItemsCount = vlist.Count; - UnkItems = vlist.ToArray(); - } - } + UnkItems = XmlRel.ReadItemArray(node, "UnkItems"); + UnkItemsCount = (UnkItems?.Length ?? 0); UnkVec1 = Xml.GetChildVector4Attributes(node, "UnkVec1", "x", "y", "z", "w"); UnkVec2 = Xml.GetChildVector4Attributes(node, "UnkVec2", "x", "y", "z", "w"); UnkVec3 = Xml.GetChildVector4Attributes(node, "UnkVec3", "x", "y", "z", "w"); @@ -17390,6 +16821,46 @@ namespace CodeWalker.GameFiles } } + + + public static T[] ReadItemArray(XmlNode node, string name) where T : IMetaXmlItem, new() + { + var vnode2 = node.SelectSingleNode(name); + if (vnode2 != null) + { + var inodes = vnode2.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + var v = new T(); + v.ReadXml(inode); + vlist.Add(v); + } + return vlist.ToArray(); + } + } + return null; + } + public static MetaHash[] ReadHashItemArray(XmlNode node, string name) + { + var vnode = node.SelectSingleNode(name); + if (vnode != null) + { + var inodes = vnode.SelectNodes("Item"); + if (inodes?.Count > 0) + { + var vlist = new List(); + foreach (XmlNode inode in inodes) + { + vlist.Add(GetHash(inode.InnerText)); + } + return vlist.ToArray(); + } + } + return null; + } } diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs index 3f354bb..60d63fa 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaXml.cs @@ -1692,7 +1692,6 @@ namespace CodeWalker.GameFiles SelfClosingTag(sb, ind, arrTag); } } - public static void WriteItemArray(StringBuilder sb, T[] arr, int ind, string name, string typeName, Func formatter) where T : struct { var aCount = arr?.Length ?? 0; @@ -1715,6 +1714,46 @@ namespace CodeWalker.GameFiles SelfClosingTag(sb, ind, arrTag); } } + public static void WriteItemArray(StringBuilder sb, T[] arr, int ind, string name) where T : IMetaXmlItem + { + var itemCount = arr?.Length ?? 0; + if (itemCount > 0) + { + OpenTag(sb, ind, name); + var cind = ind + 1; + var cind2 = ind + 2; + for (int i = 0; i < itemCount; i++) + { + OpenTag(sb, cind, "Item"); + arr[i].WriteXml(sb, cind2); + CloseTag(sb, cind, "Item"); + } + CloseTag(sb, ind, name); + } + else + { + SelfClosingTag(sb, ind, name); + } + } + public static void WriteHashItemArray(StringBuilder sb, MetaHash[] arr, int ind, string name) + { + var itemCount = arr?.Length ?? 0; + if (itemCount > 0) + { + OpenTag(sb, ind, name); + var cind = ind + 1; + for (int i = 0; i < itemCount; i++) + { + var iname = HashString(arr[i]); + StringTag(sb, cind, "Item", iname); + } + CloseTag(sb, ind, name); + } + else + { + SelfClosingTag(sb, ind, name); + } + } public static string FormatHash(MetaHash h) //for use with WriteItemArray { @@ -1838,6 +1877,11 @@ namespace CodeWalker.GameFiles } } + public interface IMetaXmlItem + { + void WriteXml(StringBuilder sb, int indent); + void ReadXml(XmlNode node); + } From 7f4e0a1571567f4a8d7c9ed7e182446229e4f0d9 Mon Sep 17 00:00:00 2001 From: dexyfex Date: Tue, 5 Mar 2019 02:55:14 +1100 Subject: [PATCH 144/158] Dat151 progress --- .../GameFiles/FileTypes/RelFile.cs | 1191 +++++++++++++---- .../GameFiles/MetaTypes/MetaNames.cs | 364 ++--- 2 files changed, 1080 insertions(+), 475 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index cabbdb8..5f164bb 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -609,17 +609,17 @@ namespace CodeWalker.GameFiles case Dat151RelType.Unk12: return new Dat151Unk12(d, br); case Dat151RelType.Unk13: return new Dat151Unk13(d, br); case Dat151RelType.Unk15: return new Dat151Unk15(d, br); + case Dat151RelType.Unk18: return new Dat151Unk18(d, br); + case Dat151RelType.Unk22: return new Dat151Unk22(d, br); + case Dat151RelType.Unk23: return new Dat151Unk23(d, br); + case Dat151RelType.Unk27: return new Dat151Unk27(d, br); + case Dat151RelType.Unk28: return new Dat151Unk28(d, br); + case Dat151RelType.Unk29: return new Dat151Unk29(d, br); + case Dat151RelType.Unk31: return new Dat151Unk31(d, br); + case Dat151RelType.Unk33: return new Dat151Unk33(d, br); + case Dat151RelType.Unk35: return new Dat151Unk35(d, br); + case Dat151RelType.Unk36: return new Dat151Unk36(d, br); - //case Dat151RelType.Unk18: return new Dat151Unk18(d, br); - //case Dat151RelType.Unk22: return new Dat151Unk22(d, br); - //case Dat151RelType.Unk23: return new Dat151Unk23(d, br); - //case Dat151RelType.Unk27: return new Dat151Unk27(d, br); - //case Dat151RelType.Unk28: return new Dat151Unk28(d, br); - //case Dat151RelType.Unk29: return new Dat151Unk29(d, br); - //case Dat151RelType.Unk31: return new Dat151Unk31(d, br); - //case Dat151RelType.Unk33: return new Dat151Unk33(d, br); - //case Dat151RelType.Unk35: return new Dat151Unk35(d, br); - //case Dat151RelType.Unk36: return new Dat151Unk36(d, br); //case Dat151RelType.Unk40: return new Dat151Unk40(d, br); //case Dat151RelType.Unk41: return new Dat151Unk41(d, br); //case Dat151RelType.Unk42: return new Dat151Unk42(d, br); @@ -778,17 +778,17 @@ namespace CodeWalker.GameFiles case Dat151RelType.Unk12: return new Dat151Unk12(this); case Dat151RelType.Unk13: return new Dat151Unk13(this); case Dat151RelType.Unk15: return new Dat151Unk15(this); + case Dat151RelType.Unk18: return new Dat151Unk18(this); + case Dat151RelType.Unk22: return new Dat151Unk22(this); + case Dat151RelType.Unk23: return new Dat151Unk23(this); + case Dat151RelType.Unk27: return new Dat151Unk27(this); + case Dat151RelType.Unk28: return new Dat151Unk28(this); + case Dat151RelType.Unk29: return new Dat151Unk29(this); + case Dat151RelType.Unk31: return new Dat151Unk31(this); + case Dat151RelType.Unk33: return new Dat151Unk33(this); + case Dat151RelType.Unk35: return new Dat151Unk35(this); + case Dat151RelType.Unk36: return new Dat151Unk36(this); - //case Dat151RelType.Unk18: return new Dat151Unk18(this); - //case Dat151RelType.Unk22: return new Dat151Unk22(this); - //case Dat151RelType.Unk23: return new Dat151Unk23(this); - //case Dat151RelType.Unk27: return new Dat151Unk27(this); - //case Dat151RelType.Unk28: return new Dat151Unk28(this); - //case Dat151RelType.Unk29: return new Dat151Unk29(this); - //case Dat151RelType.Unk31: return new Dat151Unk31(this); - //case Dat151RelType.Unk33: return new Dat151Unk33(this); - //case Dat151RelType.Unk35: return new Dat151Unk35(this); - //case Dat151RelType.Unk36: return new Dat151Unk36(this); //case Dat151RelType.Unk40: return new Dat151Unk40(this); //case Dat151RelType.Unk41: return new Dat151Unk41(this); //case Dat151RelType.Unk42: return new Dat151Unk42(this); @@ -4830,8 +4830,8 @@ namespace CodeWalker.GameFiles Unk31 = 31, AmbientEmitterList = 32, Unk33 = 33, - Unk35 = 35, - Unk36 = 36, + Unk35 = 35, //some kind of emitter?? has Position + Unk36 = 36, //Unk35 List AmbientZone = 37, AmbientEmitter = 38, AmbientZoneList = 39, @@ -9092,7 +9092,7 @@ namespace CodeWalker.GameFiles public int Unk09 { get; set; } public int Unk10 { get; set; } public int Unk11 { get; set; } - public float Unk12 { get; set; } + public float Unk12 { get; set; }//really float? or hash? public int PointsCount { get; set; } public Vector2[] Points { get; set; } @@ -14370,6 +14370,881 @@ namespace CodeWalker.GameFiles ItemCount = (Items?.Length ?? 0); } } + [TC(typeof(EXP))] public class Dat151Unk18 : Dat151RelData + { + public MetaHash Unk01 { get; set; } + public MetaHash Unk02 { get; set; } + public MetaHash Unk03 { get; set; } + public MetaHash Unk04 { get; set; } + public MetaHash Unk05 { get; set; } + public MetaHash Unk06 { get; set; } + public MetaHash Unk07 { get; set; } + public MetaHash Unk08 { get; set; } + public MetaHash Unk09 { get; set; } + public MetaHash Unk10 { get; set; } + public MetaHash Unk11 { get; set; } + public MetaHash Unk12 { get; set; } + public MetaHash Unk13 { get; set; } + public float Unk14 { get; set; } + public float Unk15 { get; set; } + public int Unk16 { get; set; } + public float Unk17 { get; set; } + public MetaHash Unk18 { get; set; } + public MetaHash Unk19 { get; set; } + public MetaHash Unk20 { get; set; } + + + public Dat151Unk18(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk18; + TypeID = (byte)Type; + } + public Dat151Unk18(RelData d, BinaryReader br) : base(d, br) + { + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadUInt32(); + Unk03 = br.ReadUInt32(); + Unk04 = br.ReadUInt32(); + Unk05 = br.ReadUInt32(); + Unk06 = br.ReadUInt32(); + Unk07 = br.ReadUInt32(); + Unk08 = br.ReadUInt32(); + Unk09 = br.ReadUInt32(); + Unk10 = br.ReadUInt32(); + Unk11 = br.ReadUInt32(); + Unk12 = br.ReadUInt32(); + Unk13 = br.ReadUInt32(); + Unk14 = br.ReadSingle(); + Unk15 = br.ReadSingle(); + Unk16 = br.ReadInt32(); + Unk17 = br.ReadSingle(); + Unk18 = br.ReadUInt32(); + Unk19 = br.ReadUInt32(); + Unk20 = br.ReadUInt32(); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); + bw.Write(Unk14); + bw.Write(Unk15); + bw.Write(Unk16); + bw.Write(Unk17); + bw.Write(Unk18); + bw.Write(Unk19); + bw.Write(Unk20); + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); + RelXml.StringTag(sb, indent, "Unk04", RelXml.HashString(Unk04)); + RelXml.StringTag(sb, indent, "Unk05", RelXml.HashString(Unk05)); + RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); + RelXml.StringTag(sb, indent, "Unk07", RelXml.HashString(Unk07)); + RelXml.StringTag(sb, indent, "Unk08", RelXml.HashString(Unk08)); + RelXml.StringTag(sb, indent, "Unk09", RelXml.HashString(Unk09)); + RelXml.StringTag(sb, indent, "Unk10", RelXml.HashString(Unk10)); + RelXml.StringTag(sb, indent, "Unk11", RelXml.HashString(Unk11)); + RelXml.StringTag(sb, indent, "Unk12", RelXml.HashString(Unk12)); + RelXml.StringTag(sb, indent, "Unk13", RelXml.HashString(Unk13)); + RelXml.ValueTag(sb, indent, "Unk14", FloatUtil.ToString(Unk14)); + RelXml.ValueTag(sb, indent, "Unk15", FloatUtil.ToString(Unk15)); + RelXml.ValueTag(sb, indent, "Unk16", Unk16.ToString()); + RelXml.ValueTag(sb, indent, "Unk17", FloatUtil.ToString(Unk17)); + RelXml.StringTag(sb, indent, "Unk18", RelXml.HashString(Unk18)); + RelXml.StringTag(sb, indent, "Unk19", RelXml.HashString(Unk19)); + RelXml.StringTag(sb, indent, "Unk20", RelXml.HashString(Unk20)); + } + public override void ReadXml(XmlNode node) + { + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk04")); + Unk05 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk05")); + Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); + Unk07 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk07")); + Unk08 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk08")); + Unk09 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk09")); + Unk10 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk10")); + Unk11 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk11")); + Unk12 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk12")); + Unk13 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk13")); + Unk14 = Xml.GetChildFloatAttribute(node, "Unk14", "value"); + Unk15 = Xml.GetChildFloatAttribute(node, "Unk15", "value"); + Unk16 = Xml.GetChildIntAttribute(node, "Unk16", "value"); + Unk17 = Xml.GetChildFloatAttribute(node, "Unk17", "value"); + Unk18 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk18")); + Unk19 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk19")); + Unk20 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk20")); + } + } + [TC(typeof(EXP))] public class Dat151Unk22Item : IMetaXmlItem + { + public MetaHash Unk01 { get; set; } + public float Unk02 { get; set; } + public float Unk03 { get; set; } + public float Unk04 { get; set; } + public float Unk05 { get; set; } + public float Unk06 { get; set; } + public float Unk07 { get; set; } + public float Unk08 { get; set; } + public int Unk09 { get; set; } + + public Dat151Unk22Item() + { } + public Dat151Unk22Item(BinaryReader br) + { + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadSingle(); + Unk03 = br.ReadSingle(); + Unk04 = br.ReadSingle(); + Unk05 = br.ReadSingle(); + Unk06 = br.ReadSingle(); + Unk07 = br.ReadSingle(); + Unk08 = br.ReadSingle(); + Unk09 = br.ReadInt32(); + } + public void Write(BinaryWriter bw) + { + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + } + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", FloatUtil.ToString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", FloatUtil.ToString(Unk03)); + RelXml.ValueTag(sb, indent, "Unk04", FloatUtil.ToString(Unk04)); + RelXml.ValueTag(sb, indent, "Unk05", FloatUtil.ToString(Unk05)); + RelXml.ValueTag(sb, indent, "Unk06", FloatUtil.ToString(Unk06)); + RelXml.ValueTag(sb, indent, "Unk07", FloatUtil.ToString(Unk07)); + RelXml.ValueTag(sb, indent, "Unk08", FloatUtil.ToString(Unk08)); + RelXml.ValueTag(sb, indent, "Unk09", Unk09.ToString()); + } + public void ReadXml(XmlNode node) + { + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = Xml.GetChildFloatAttribute(node, "Unk02", "value"); + Unk03 = Xml.GetChildFloatAttribute(node, "Unk03", "value"); + Unk04 = Xml.GetChildFloatAttribute(node, "Unk04", "value"); + Unk05 = Xml.GetChildFloatAttribute(node, "Unk05", "value"); + Unk06 = Xml.GetChildFloatAttribute(node, "Unk06", "value"); + Unk07 = Xml.GetChildFloatAttribute(node, "Unk07", "value"); + Unk08 = Xml.GetChildFloatAttribute(node, "Unk08", "value"); + Unk09 = Xml.GetChildIntAttribute(node, "Unk09", "value"); + } + public override string ToString() + { + return Unk01.ToString(); + } + } + [TC(typeof(EXP))] public class Dat151Unk22 : Dat151RelData //player/creature? + { + public int Unk01 { get; set; } + public int Unk02 { get; set; } + public MetaHash Unk03 { get; set; } + public float Unk04 { get; set; } + public float Unk05 { get; set; } + public float Unk06 { get; set; } + public int ItemCount { get; set; } + public Dat151Unk22Item[] Items { get; set; } + + + public Dat151Unk22(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk22; + TypeID = (byte)Type; + } + public Dat151Unk22(RelData d, BinaryReader br) : base(d, br) + { + Unk01 = br.ReadInt32(); + Unk02 = br.ReadInt32(); + Unk03 = br.ReadUInt32(); + Unk04 = br.ReadSingle(); + Unk05 = br.ReadSingle(); + Unk06 = br.ReadSingle(); + ItemCount = br.ReadInt32(); + Items = new Dat151Unk22Item[ItemCount]; + for (int i = 0; i < ItemCount; i++) + { + Items[i] = new Dat151Unk22Item(br); + } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) + { + Items[i].Write(bw); + } + + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); + RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); + RelXml.ValueTag(sb, indent, "Unk04", FloatUtil.ToString(Unk04)); + RelXml.ValueTag(sb, indent, "Unk05", FloatUtil.ToString(Unk05)); + RelXml.ValueTag(sb, indent, "Unk06", FloatUtil.ToString(Unk06)); + RelXml.WriteItemArray(sb, Items, indent, "Items"); + } + public override void ReadXml(XmlNode node) + { + Unk01 = Xml.GetChildIntAttribute(node, "Unk01", "value"); + Unk02 = Xml.GetChildIntAttribute(node, "Unk02", "value"); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + Unk04 = Xml.GetChildFloatAttribute(node, "Unk04", "value"); + Unk05 = Xml.GetChildFloatAttribute(node, "Unk05", "value"); + Unk06 = Xml.GetChildFloatAttribute(node, "Unk06", "value"); + Items = XmlRel.ReadItemArray(node, "Items"); + ItemCount = (Items?.Length ?? 0); + } + } + [TC(typeof(EXP))] public class Dat151Unk23 : Dat151RelData + { + public MetaHash Unk01 { get; set; } + public MetaHash Unk02 { get; set; }//0 + public float Unk03 { get; set; } + public MetaHash Unk04 { get; set; } + public MetaHash Unk05 { get; set; }//0 + public float Unk06 { get; set; } + public MetaHash Unk07 { get; set; } + public MetaHash Unk08 { get; set; }//0 + public float Unk09 { get; set; } + + + public Dat151Unk23(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk23; + TypeID = (byte)Type; + } + public Dat151Unk23(RelData d, BinaryReader br) : base(d, br) + { + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadUInt32();//0 + Unk03 = br.ReadSingle(); + Unk04 = br.ReadUInt32(); + Unk05 = br.ReadUInt32();//0 + Unk06 = br.ReadSingle(); + Unk07 = br.ReadUInt32(); + Unk08 = br.ReadUInt32();//0 + Unk09 = br.ReadSingle(); + + if (Unk02 != 0) + { } + if (Unk05 != 0) + { } + if (Unk08 != 0) + { } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", FloatUtil.ToString(Unk03)); + RelXml.StringTag(sb, indent, "Unk04", RelXml.HashString(Unk04)); + RelXml.StringTag(sb, indent, "Unk05", RelXml.HashString(Unk05)); + RelXml.ValueTag(sb, indent, "Unk06", FloatUtil.ToString(Unk06)); + RelXml.StringTag(sb, indent, "Unk07", RelXml.HashString(Unk07)); + RelXml.StringTag(sb, indent, "Unk08", RelXml.HashString(Unk08)); + RelXml.ValueTag(sb, indent, "Unk09", FloatUtil.ToString(Unk09)); + } + public override void ReadXml(XmlNode node) + { + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Unk03 = Xml.GetChildFloatAttribute(node, "Unk03", "value"); + Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk04")); + Unk05 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk05")); + Unk06 = Xml.GetChildFloatAttribute(node, "Unk06", "value"); + Unk07 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk07")); + Unk08 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk08")); + Unk09 = Xml.GetChildFloatAttribute(node, "Unk09", "value"); + } + } + [TC(typeof(EXP))] public class Dat151Unk27Item : IMetaXmlItem + { + public int Unk1 { get; set; } + public int Unk2 { get; set; } + + public Dat151Unk27Item() + { } + public Dat151Unk27Item(BinaryReader br) + { + Unk1 = br.ReadInt32(); + Unk2 = br.ReadInt32(); + } + public void Write(BinaryWriter bw) + { + bw.Write(Unk1); + bw.Write(Unk2); + } + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk1", Unk1.ToString()); + RelXml.ValueTag(sb, indent, "Unk2", Unk2.ToString()); + } + public void ReadXml(XmlNode node) + { + Unk1 = Xml.GetChildIntAttribute(node, "Unk1", "value"); + Unk2 = Xml.GetChildIntAttribute(node, "Unk2", "value"); + } + public override string ToString() + { + return Unk1.ToString() + ": " + Unk2.ToString(); + } + } + [TC(typeof(EXP))] public class Dat151Unk27 : Dat151RelData + { + public int ItemCount { get; set; } + public Dat151Unk27Item[] Items { get; set; } + + public Dat151Unk27(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk27; + TypeID = (byte)Type; + } + public Dat151Unk27(RelData d, BinaryReader br) : base(d, br) + { + ItemCount = br.ReadInt32(); + Items = new Dat151Unk27Item[ItemCount]; + for (int i = 0; i < ItemCount; i++) + { + Items[i] = new Dat151Unk27Item(br); + } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) + { + Items[i].Write(bw); + } + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.WriteItemArray(sb, Items, indent, "Items"); + } + public override void ReadXml(XmlNode node) + { + Items = XmlRel.ReadItemArray(node, "Items"); + ItemCount = (Items?.Length ?? 0); + } + } + [TC(typeof(EXP))] public class Dat151Unk28 : Dat151RelData + { + public MetaHash Unk01 { get; set; } + public MetaHash Unk02 { get; set; } + public MetaHash Unk03 { get; set; } + public float Unk04 { get; set; } + public MetaHash Unk05 { get; set; } + public int Unk06 { get; set; } + public MetaHash Unk07 { get; set; } + public float Unk08 { get; set; } + + public Dat151Unk28(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk28; + TypeID = (byte)Type; + } + public Dat151Unk28(RelData d, BinaryReader br) : base(d, br) + { + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadUInt32(); + Unk03 = br.ReadUInt32(); + Unk04 = br.ReadSingle(); + Unk05 = br.ReadUInt32(); + Unk06 = br.ReadInt32(); + Unk07 = br.ReadUInt32(); + Unk08 = br.ReadSingle(); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); + RelXml.ValueTag(sb, indent, "Unk04", FloatUtil.ToString(Unk04)); + RelXml.StringTag(sb, indent, "Unk05", RelXml.HashString(Unk05)); + RelXml.ValueTag(sb, indent, "Unk06", Unk06.ToString()); + RelXml.StringTag(sb, indent, "Unk07", RelXml.HashString(Unk07)); + RelXml.ValueTag(sb, indent, "Unk08", FloatUtil.ToString(Unk08)); + } + public override void ReadXml(XmlNode node) + { + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + Unk04 = Xml.GetChildFloatAttribute(node, "Unk04", "value"); + Unk05 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk05")); + Unk06 = Xml.GetChildIntAttribute(node, "Unk06", "value"); + Unk07 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk07")); + Unk08 = Xml.GetChildFloatAttribute(node, "Unk08", "value"); + } + } + [TC(typeof(EXP))] public class Dat151Unk29 : Dat151RelData + { + public FlagsUint Flags { get; set; } + public MetaHash Unk01 { get; set; }//0 + public MetaHash Unk02 { get; set; } + public MetaHash Unk03 { get; set; } + public MetaHash Unk04 { get; set; } + public MetaHash Unk05 { get; set; } + public MetaHash Unk06 { get; set; }//0 + public MetaHash Unk07 { get; set; }//0 + public MetaHash Unk08 { get; set; }//0 + public MetaHash Unk09 { get; set; } + public MetaHash Unk10 { get; set; }//0 + public MetaHash Unk11 { get; set; } + public int ItemCount { get; set; } + public MetaHash[] Items { get; set; } + + public Dat151Unk29(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk29; + TypeID = (byte)Type; + } + public Dat151Unk29(RelData d, BinaryReader br) : base(d, br) + { + Flags = br.ReadUInt32(); + Unk01 = br.ReadUInt32();//0 + Unk02 = br.ReadUInt32(); + Unk03 = br.ReadUInt32(); + Unk04 = br.ReadUInt32(); + Unk05 = br.ReadUInt32(); + Unk06 = br.ReadUInt32();//0 + Unk07 = br.ReadUInt32();//0 + Unk08 = br.ReadUInt32();//0 + Unk09 = br.ReadUInt32(); + Unk10 = br.ReadUInt32();//0 + Unk11 = br.ReadUInt32(); + ItemCount = br.ReadInt32(); + Items = new MetaHash[ItemCount]; + for (int i = 0; i < ItemCount; i++) + { + Items[i] = br.ReadUInt32(); + } + + if (Unk01 != 0) + { } + if (Unk06 != 0) + { } + if (Unk07 != 0) + { } + if (Unk08 != 0) + { } + if (Unk10 != 0) + { } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Flags); + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) + { + bw.Write(Items[i]); + } + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); + RelXml.StringTag(sb, indent, "Unk04", RelXml.HashString(Unk04)); + RelXml.StringTag(sb, indent, "Unk05", RelXml.HashString(Unk05)); + RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); + RelXml.StringTag(sb, indent, "Unk07", RelXml.HashString(Unk07)); + RelXml.StringTag(sb, indent, "Unk08", RelXml.HashString(Unk08)); + RelXml.StringTag(sb, indent, "Unk09", RelXml.HashString(Unk09)); + RelXml.StringTag(sb, indent, "Unk10", RelXml.HashString(Unk10)); + RelXml.StringTag(sb, indent, "Unk11", RelXml.HashString(Unk11)); + RelXml.WriteHashItemArray(sb, Items, indent, "Items"); + } + public override void ReadXml(XmlNode node) + { + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk04")); + Unk05 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk05")); + Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); + Unk07 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk07")); + Unk08 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk08")); + Unk09 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk09")); + Unk10 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk10")); + Unk11 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk11")); + Items = XmlRel.ReadHashItemArray(node, "Items"); + ItemCount = (Items?.Length ?? 0); + } + } + [TC(typeof(EXP))] public class Dat151Unk31 : Dat151RelData + { + public FlagsUint Flags { get; set; } + + public Dat151Unk31(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk31; + TypeID = (byte)Type; + } + public Dat151Unk31(RelData d, BinaryReader br) : base(d, br) + { + Flags = br.ReadUInt32(); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Flags); + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + } + public override void ReadXml(XmlNode node) + { + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + } + } + [TC(typeof(EXP))] public class Dat151Unk33Item : IMetaXmlItem + { + public MetaHash Unk1 { get; set; } + public short Unk2 { get; set; } + public short Unk3 { get; set; } + + public Dat151Unk33Item() + { } + public Dat151Unk33Item(BinaryReader br) + { + Unk1 = br.ReadUInt32(); + Unk2 = br.ReadInt16(); + Unk3 = br.ReadInt16(); + } + public void Write(BinaryWriter bw) + { + bw.Write(Unk1); + bw.Write(Unk2); + bw.Write(Unk3); + } + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Unk1", RelXml.HashString(Unk1)); + RelXml.ValueTag(sb, indent, "Unk2", Unk2.ToString()); + RelXml.ValueTag(sb, indent, "Unk3", Unk3.ToString()); + } + public void ReadXml(XmlNode node) + { + Unk1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk1")); + Unk2 = (short)Xml.GetChildIntAttribute(node, "Unk2", "value"); + Unk3 = (short)Xml.GetChildIntAttribute(node, "Unk3", "value"); + } + public override string ToString() + { + return Unk1.ToString() + ": " + Unk2.ToString() + ", " + Unk3.ToString(); + } + } + [TC(typeof(EXP))] public class Dat151Unk33 : Dat151RelData + { + public FlagsUint Flags { get; set; } + public int ItemCount { get; set; } + public Dat151Unk33Item[] Items { get; set; } + + public Dat151Unk33(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk33; + TypeID = (byte)Type; + } + public Dat151Unk33(RelData d, BinaryReader br) : base(d, br) + { + Flags = br.ReadUInt32(); + ItemCount = br.ReadInt32(); + Items = new Dat151Unk33Item[ItemCount]; + for (int i = 0; i < ItemCount; i++) + { + Items[i] = new Dat151Unk33Item(br); + } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Flags); + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) + { + Items[i].Write(bw); + } + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.WriteItemArray(sb, Items, indent, "Items"); + } + public override void ReadXml(XmlNode node) + { + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Items = XmlRel.ReadItemArray(node, "Items"); + ItemCount = (Items?.Length ?? 0); + } + } + [TC(typeof(EXP))] public class Dat151Unk35 : Dat151RelData //some kind of emitter?? has Position + { + public MetaHash Unk01 { get; set; }//0 + public MetaHash Unk02 { get; set; }//0 + public MetaHash Unk03 { get; set; }//0 + public Vector3 Position { get; set; } + public MetaHash Unk04 { get; set; }//0 + public float Unk05 { get; set; } + public float Unk06 { get; set; } + public int Unk07 { get; set; } + public MetaHash Unk08 { get; set; } + public MetaHash Unk09 { get; set; } + public MetaHash Unk10 { get; set; }//0 + public MetaHash Unk11 { get; set; }//0 + public MetaHash Unk12 { get; set; }//0 + + public Dat151Unk35(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk35; + TypeID = (byte)Type; + } + public Dat151Unk35(RelData d, BinaryReader br) : base(d, br) + { + Unk01 = br.ReadUInt32();//0 + Unk02 = br.ReadUInt32();//0 + Unk03 = br.ReadUInt32();//0 + Position = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); + Unk04 = br.ReadUInt32();//0 + Unk05 = br.ReadSingle(); + Unk06 = br.ReadSingle(); + Unk07 = br.ReadInt32(); + Unk08 = br.ReadUInt32(); + Unk09 = br.ReadUInt32(); + Unk10 = br.ReadUInt32();//0 + Unk11 = br.ReadUInt32();//0 + Unk12 = br.ReadUInt32();//0 + + if (Unk01 != 0) + { } + if (Unk02 != 0) + { } + if (Unk03 != 0) + { } + if (Unk04 != 0) + { } + if (Unk10 != 0) + { } + if (Unk11 != 0) + { } + if (Unk12 != 0) + { } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Position.X); + bw.Write(Position.Y); + bw.Write(Position.Z); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); + RelXml.SelfClosingTag(sb, indent, "Position " + FloatUtil.GetVector3XmlString(Position)); + RelXml.StringTag(sb, indent, "Unk04", RelXml.HashString(Unk04)); + RelXml.ValueTag(sb, indent, "Unk05", FloatUtil.ToString(Unk05)); + RelXml.ValueTag(sb, indent, "Unk06", FloatUtil.ToString(Unk06)); + RelXml.ValueTag(sb, indent, "Unk07", Unk07.ToString()); + RelXml.StringTag(sb, indent, "Unk08", RelXml.HashString(Unk08)); + RelXml.StringTag(sb, indent, "Unk09", RelXml.HashString(Unk09)); + RelXml.StringTag(sb, indent, "Unk10", RelXml.HashString(Unk10)); + RelXml.StringTag(sb, indent, "Unk11", RelXml.HashString(Unk11)); + RelXml.StringTag(sb, indent, "Unk12", RelXml.HashString(Unk12)); + } + public override void ReadXml(XmlNode node) + { + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + Position = Xml.GetChildVector3Attributes(node, "Position", "x", "y", "z"); + Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk04")); + Unk05 = Xml.GetChildFloatAttribute(node, "Unk05", "value"); + Unk06 = Xml.GetChildFloatAttribute(node, "Unk06", "value"); + Unk07 = Xml.GetChildIntAttribute(node, "Unk07", "value"); + Unk08 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk08")); + Unk09 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk09")); + Unk10 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk10")); + Unk11 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk11")); + Unk12 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk12")); + } + } + [TC(typeof(EXP))] public class Dat151Unk36 : Dat151RelData //Unk35 List + { + public int ItemCount { get; set; } + public MetaHash[] Items { get; set; } + + public Dat151Unk36(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk36; + TypeID = (byte)Type; + } + public Dat151Unk36(RelData d, BinaryReader br) : base(d, br) + { + ItemCount = br.ReadInt32(); + Items = new MetaHash[ItemCount]; + for (int i = 0; i < ItemCount; i++) + { + Items[i] = br.ReadUInt32(); + } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) + { + bw.Write(Items[i]); + } + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.WriteHashItemArray(sb, Items, indent, "Items"); + } + public override void ReadXml(XmlNode node) + { + Items = XmlRel.ReadHashItemArray(node, "Items"); + ItemCount = (Items?.Length ?? 0); + } + } @@ -14380,276 +15255,6 @@ namespace CodeWalker.GameFiles //TODO classes - [TC(typeof(EXP))] public class Dat151Unk18 : Dat151RelData - { - public Dat151Unk18(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk18; - TypeID = (byte)Type; - } - public Dat151Unk18(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } - [TC(typeof(EXP))] public class Dat151Unk22 : Dat151RelData - { - public Dat151Unk22(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk22; - TypeID = (byte)Type; - } - public Dat151Unk22(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } - [TC(typeof(EXP))] public class Dat151Unk23 : Dat151RelData - { - public Dat151Unk23(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk23; - TypeID = (byte)Type; - } - public Dat151Unk23(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } - [TC(typeof(EXP))] public class Dat151Unk27 : Dat151RelData - { - public Dat151Unk27(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk27; - TypeID = (byte)Type; - } - public Dat151Unk27(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } - [TC(typeof(EXP))] public class Dat151Unk28 : Dat151RelData - { - public Dat151Unk28(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk28; - TypeID = (byte)Type; - } - public Dat151Unk28(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } - [TC(typeof(EXP))] public class Dat151Unk29 : Dat151RelData - { - public Dat151Unk29(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk29; - TypeID = (byte)Type; - } - public Dat151Unk29(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } - [TC(typeof(EXP))] public class Dat151Unk31 : Dat151RelData - { - public Dat151Unk31(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk31; - TypeID = (byte)Type; - } - public Dat151Unk31(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } - [TC(typeof(EXP))] public class Dat151Unk33 : Dat151RelData - { - public Dat151Unk33(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk33; - TypeID = (byte)Type; - } - public Dat151Unk33(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } - [TC(typeof(EXP))] public class Dat151Unk35 : Dat151RelData - { - public Dat151Unk35(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk35; - TypeID = (byte)Type; - } - public Dat151Unk35(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } - [TC(typeof(EXP))] public class Dat151Unk36 : Dat151RelData - { - public Dat151Unk36(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk36; - TypeID = (byte)Type; - } - public Dat151Unk36(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } [TC(typeof(EXP))] public class Dat151Unk40 : Dat151RelData { public Dat151Unk40(RelFile rel) : base(rel) diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs index 03c18d7..1fdd4f9 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs @@ -3322,7 +3322,7 @@ namespace CodeWalker.GameFiles - CCompositeEntityType = 1185771007, + CCompositeEntityType = 1185771007, scaleXY = 2627937847, scaleZ = 284916802, numChildren = 2793909385, @@ -3476,7 +3476,7 @@ namespace CodeWalker.GameFiles silence = 3503773450, //used in game.dat151.rel null_sound = 3817852694, //used in game.dat151.rel - + run = 285848937, //used in game.dat151.rel @@ -9112,186 +9112,186 @@ namespace CodeWalker.GameFiles //popgroups.ymt - From FiveM - //For the pedgroups/item/name field - richman_glen_bevhills = 1916548608, - marlowe_drive_bevhills = 3724985487, - baytree_canyon_bevhills = 1095587898, - galileo_park_bevhills = 3773030709, - galileo_park_hipsters = 1226562551, - galileo_park_tourists = 2437681877, - ocean_general = 699946682, - pacific_bluffs_beach = 1771635400, - pacific_bluffs_streetgeneral = 2128557429, - del_perro_streetgeneral = 4003270267, - del_perro_bums = 3222414768, - vespucci_pier_beach = 2175040393, - vespucci_streetgeneral = 853940634, - vespucci_bums = 908912315, - vespucci_canals_streetgeneral = 4149286830, - vespucci_canals_bevhills = 2120071986, - puerto_business = 2592745348, - puerto_streetgeneral = 3620209527, - puerto_bevhills = 2096726272, - puerto_hipsters = 4241471320, - lsa_airport = 3523754501, - lsa_streetgeneral = 3526862920, - elysian_island_streetgeneral = 851640179, - elysian_island_genped = 398248766, - terminal_construction = 3440476579, - terminal_specificjob = 3674390882, - beachparty = 2592453449, - banning_construction = 46699983, - banning_specificjob = 2575047138, - banning_streetgeneral = 3474460204, - banning_tramps = 2130175499, - el_burro_general = 2730520509, - cypress_general = 1446780254, - cypress_tramps = 3214037884, - la_mesa_general = 2636968603, - la_mesa_tramps = 748862053, - murrieta_general = 697895317, - murrieta_tramps = 3052120512, - murrieta_gang = 2843705451, - hippy = 944887848, - cult = 2010391401, - racecourse_bevhills = 1764904172, - racecourse_streetgeneral = 1498417612, - east_vinewood_local = 1545421012, - east_vinewood_hipster = 271987258, - east_vinewood_streetgeneral = 3366133940, - paleto_bay_general = 3474455539, - mirror_park_business = 777133455, - mirror_park_hipsters = 2253228929, - mirror_park_streetgeneral = 61725078, - west_vinewood_hipsters = 1283940400, - west_vinewood_streetgeneral = 310058182, - west_vinewood_vinewood = 3235047195, - eclipse_hipsters = 3720433148, - eclipse_streetgeneral = 2052334107, - eclipse_vinewood = 2593057275, - eclipse_sexuals = 2351577296, - club_nighttime = 2022489214, - downtown_tramps = 987833330, - downtown_bevhills = 809773694, - downtown_hipsters = 180130592, - downtown_streetgeneral = 3523779044, - fish_ = 1207004798, - birds_city = 589253797, - birds_ground_city = 1230242748, - birds_countryside = 390908839, - birds_ocean = 3168035254, - birds_ground_ocean = 3110385855, - burton_tramps = 256463428, - burton_business = 3165443402, - burton_bevhills = 3155703512, - burton_hipsters = 2194132880, - burton_vinewood = 1651740194, - burton_streetgeneral = 3056012715, - hawick_bevhills = 1318738468, - hawick_hipsters = 3708634492, - hawick_streetgeneral = 1267713346, - hawick_tramps = 2932194291, - hawick_vinewood = 360078400, - alta_business = 485106051, - alta_tramps = 3962261894, - alta_bevhills = 3657786126, - alta_streetgeneral = 2583180649, - rockford_shop_bevhills = 4171238205, - rockford_shop_streetgeneral = 2899076840, - rockford_residential_bluecollar = 2323943313, - rockford_residential_bevhills = 577684089, - rockford_hills_day = 2546072613, - rockford_hills_night = 3291264832, - richman_bevhills = 2279583243, - richman_streetgeneral = 3757962161, - morningwood_tramps = 501399946, - morningwood_bevhills = 763676531, - morningwood_hipsters = 2303048052, - morningwood_streetgeneral = 115436112, - backlot_film = 897751036, - backlot_streetgeneral = 1689692965, - little_seoul_koreatown = 3058390933, - little_seoul_gang = 3164653322, - little_seoul_streetgeneral = 2782104137, - pillbox_business = 325325429, - pillbox_bevhills = 2147006744, - pillbox_tramps = 578868739, - textile_bluecollar = 3279161038, - textile_tramps = 187018675, - textile_streetgeneral = 2072811124, - mission_tramps = 1765836040, - mission_streetgeneral = 477790886, - strawberry_sc = 3513229903, - strawberry_tramps = 3763929697, - strawberry_gang = 1084379725, - chamberlain_sc = 3488106941, - chamberlain_tramps = 3657678612, - chamberlain_gang = 411250856, - davis_hookers = 263474307, - davis_sc = 2938794522, - davis_gang = 2259354683, - davis_tramps = 80817981, - rancho_sc = 116771963, - rancho_gang = 3730883993, - rancho_tramps = 282950945, - incar_general = 1725824697, - stadium_streetgeneral = 3270139100, - los_puerta_armenian = 2855646127, - los_puerta_streetgeneral = 1461524714, - vespucci_magdemo = 1443256237, - rockford = 601104499, - beach_fat = 1495265263, - fat_general = 3194660753, - s_central = 1270994027, - fashion = 2922437723, - bohemian = 2527915385, - hipsters = 1206548044, - eastla = 3903831171, - business = 942215692, - restaurant_night = 2230335161, - tramp = 295674176, - tourists = 4052103791, - prisoners = 3489630150, - freeway_countryside = 141741896, - freeway_haulage = 2921281021, - gang_chinese = 344476045, - gang_south_la = 1434944763, - net_common = 1475419019, - net_uncommon = 3944733161, - rampage_south_ls = 855514417, - rampage_little_seoul = 1518670552, - rampage_rockford_hills = 154314028, - veh_poor = 454752152, - veh_mid = 3112896464, - veh_mid_mp = 326963640, - veh_rich = 4160258559, - veh_haulage = 2260594341, - veh_haulage_mp = 443246348, - veh_utility = 2942896063, - veh_freeway = 4222100980, - veh_freeway_mp = 2591138726, - veh_large_city = 3079238267, - veh_large_city_mp = 4156290791, - veh_countryside_offroad = 3880382407, - veh_countryside_onroad = 1817408484, - veh_yankton = 2030452436, - veh_bikes = 347476719, - native_zon_only = 3826828622, - veh_salt = 1026046820, - veh_army = 2983944587, - veh_boats = 1968910249, - veh_boats_freeway = 800811870, - veh_bicycles = 1387773269, - veh_beach_bike = 875099148, - veh_lost = 927861950, - veh_copcar = 113873283, - veh_taxi = 2516826768, - veh_airport = 3318832790, - veh_test_simple = 2438558856, - veh_test_complex = 297209538, - veh_transport = 2042289260, - veh_countrycoach = 4024372987, - veh_prologue = 3821814614, + //For the pedgroups/item/name field + richman_glen_bevhills = 1916548608, + marlowe_drive_bevhills = 3724985487, + baytree_canyon_bevhills = 1095587898, + galileo_park_bevhills = 3773030709, + galileo_park_hipsters = 1226562551, + galileo_park_tourists = 2437681877, + ocean_general = 699946682, + pacific_bluffs_beach = 1771635400, + pacific_bluffs_streetgeneral = 2128557429, + del_perro_streetgeneral = 4003270267, + del_perro_bums = 3222414768, + vespucci_pier_beach = 2175040393, + vespucci_streetgeneral = 853940634, + vespucci_bums = 908912315, + vespucci_canals_streetgeneral = 4149286830, + vespucci_canals_bevhills = 2120071986, + puerto_business = 2592745348, + puerto_streetgeneral = 3620209527, + puerto_bevhills = 2096726272, + puerto_hipsters = 4241471320, + lsa_airport = 3523754501, + lsa_streetgeneral = 3526862920, + elysian_island_streetgeneral = 851640179, + elysian_island_genped = 398248766, + terminal_construction = 3440476579, + terminal_specificjob = 3674390882, + beachparty = 2592453449, + banning_construction = 46699983, + banning_specificjob = 2575047138, + banning_streetgeneral = 3474460204, + banning_tramps = 2130175499, + el_burro_general = 2730520509, + cypress_general = 1446780254, + cypress_tramps = 3214037884, + la_mesa_general = 2636968603, + la_mesa_tramps = 748862053, + murrieta_general = 697895317, + murrieta_tramps = 3052120512, + murrieta_gang = 2843705451, + hippy = 944887848, + cult = 2010391401, + racecourse_bevhills = 1764904172, + racecourse_streetgeneral = 1498417612, + east_vinewood_local = 1545421012, + east_vinewood_hipster = 271987258, + east_vinewood_streetgeneral = 3366133940, + paleto_bay_general = 3474455539, + mirror_park_business = 777133455, + mirror_park_hipsters = 2253228929, + mirror_park_streetgeneral = 61725078, + west_vinewood_hipsters = 1283940400, + west_vinewood_streetgeneral = 310058182, + west_vinewood_vinewood = 3235047195, + eclipse_hipsters = 3720433148, + eclipse_streetgeneral = 2052334107, + eclipse_vinewood = 2593057275, + eclipse_sexuals = 2351577296, + club_nighttime = 2022489214, + downtown_tramps = 987833330, + downtown_bevhills = 809773694, + downtown_hipsters = 180130592, + downtown_streetgeneral = 3523779044, + fish_ = 1207004798, + birds_city = 589253797, + birds_ground_city = 1230242748, + birds_countryside = 390908839, + birds_ocean = 3168035254, + birds_ground_ocean = 3110385855, + burton_tramps = 256463428, + burton_business = 3165443402, + burton_bevhills = 3155703512, + burton_hipsters = 2194132880, + burton_vinewood = 1651740194, + burton_streetgeneral = 3056012715, + hawick_bevhills = 1318738468, + hawick_hipsters = 3708634492, + hawick_streetgeneral = 1267713346, + hawick_tramps = 2932194291, + hawick_vinewood = 360078400, + alta_business = 485106051, + alta_tramps = 3962261894, + alta_bevhills = 3657786126, + alta_streetgeneral = 2583180649, + rockford_shop_bevhills = 4171238205, + rockford_shop_streetgeneral = 2899076840, + rockford_residential_bluecollar = 2323943313, + rockford_residential_bevhills = 577684089, + rockford_hills_day = 2546072613, + rockford_hills_night = 3291264832, + richman_bevhills = 2279583243, + richman_streetgeneral = 3757962161, + morningwood_tramps = 501399946, + morningwood_bevhills = 763676531, + morningwood_hipsters = 2303048052, + morningwood_streetgeneral = 115436112, + backlot_film = 897751036, + backlot_streetgeneral = 1689692965, + little_seoul_koreatown = 3058390933, + little_seoul_gang = 3164653322, + little_seoul_streetgeneral = 2782104137, + pillbox_business = 325325429, + pillbox_bevhills = 2147006744, + pillbox_tramps = 578868739, + textile_bluecollar = 3279161038, + textile_tramps = 187018675, + textile_streetgeneral = 2072811124, + mission_tramps = 1765836040, + mission_streetgeneral = 477790886, + strawberry_sc = 3513229903, + strawberry_tramps = 3763929697, + strawberry_gang = 1084379725, + chamberlain_sc = 3488106941, + chamberlain_tramps = 3657678612, + chamberlain_gang = 411250856, + davis_hookers = 263474307, + davis_sc = 2938794522, + davis_gang = 2259354683, + davis_tramps = 80817981, + rancho_sc = 116771963, + rancho_gang = 3730883993, + rancho_tramps = 282950945, + incar_general = 1725824697, + stadium_streetgeneral = 3270139100, + los_puerta_armenian = 2855646127, + los_puerta_streetgeneral = 1461524714, + vespucci_magdemo = 1443256237, + rockford = 601104499, + beach_fat = 1495265263, + fat_general = 3194660753, + s_central = 1270994027, + fashion = 2922437723, + bohemian = 2527915385, + hipsters = 1206548044, + eastla = 3903831171, + business = 942215692, + restaurant_night = 2230335161, + tramp = 295674176, + tourists = 4052103791, + prisoners = 3489630150, + freeway_countryside = 141741896, + freeway_haulage = 2921281021, + gang_chinese = 344476045, + gang_south_la = 1434944763, + net_common = 1475419019, + net_uncommon = 3944733161, + rampage_south_ls = 855514417, + rampage_little_seoul = 1518670552, + rampage_rockford_hills = 154314028, + veh_poor = 454752152, + veh_mid = 3112896464, + veh_mid_mp = 326963640, + veh_rich = 4160258559, + veh_haulage = 2260594341, + veh_haulage_mp = 443246348, + veh_utility = 2942896063, + veh_freeway = 4222100980, + veh_freeway_mp = 2591138726, + veh_large_city = 3079238267, + veh_large_city_mp = 4156290791, + veh_countryside_offroad = 3880382407, + veh_countryside_onroad = 1817408484, + veh_yankton = 2030452436, + veh_bikes = 347476719, + native_zon_only = 3826828622, + veh_salt = 1026046820, + veh_army = 2983944587, + veh_boats = 1968910249, + veh_boats_freeway = 800811870, + veh_bicycles = 1387773269, + veh_beach_bike = 875099148, + veh_lost = 927861950, + veh_copcar = 113873283, + veh_taxi = 2516826768, + veh_airport = 3318832790, + veh_test_simple = 2438558856, + veh_test_complex = 297209538, + veh_transport = 2042289260, + veh_countrycoach = 4024372987, + veh_prologue = 3821814614, From fc188209306c289e7c106b6e5c76971588e4fdf7 Mon Sep 17 00:00:00 2001 From: dexyfex Date: Wed, 6 Mar 2019 01:20:31 +1100 Subject: [PATCH 145/158] Dat151 progress --- .../GameFiles/FileTypes/RelFile.cs | 2973 +++++++++++++---- 1 file changed, 2302 insertions(+), 671 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index 5f164bb..a9853de 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -619,30 +619,30 @@ namespace CodeWalker.GameFiles case Dat151RelType.Unk33: return new Dat151Unk33(d, br); case Dat151RelType.Unk35: return new Dat151Unk35(d, br); case Dat151RelType.Unk36: return new Dat151Unk36(d, br); + case Dat151RelType.AmbientStreamList: return new Dat151AmbientStreamList(d, br); + case Dat151RelType.AmbienceBankMap: return new Dat151AmbienceBankMap(d, br); + case Dat151RelType.Unk42: return new Dat151Unk42(d, br); + case Dat151RelType.Unk45: return new Dat151Unk45(d, br); + case Dat151RelType.Unk48: return new Dat151Unk48(d, br); + case Dat151RelType.Unk51: return new Dat151Unk51(d, br); + case Dat151RelType.Unk54: return new Dat151Unk54(d, br); + case Dat151RelType.Unk59: return new Dat151Unk59(d, br); + case Dat151RelType.Unk69: return new Dat151Unk69(d, br); + case Dat151RelType.Unk70: return new Dat151Unk70(d, br); + case Dat151RelType.Unk71: return new Dat151Unk71(d, br); + case Dat151RelType.Unk72: return new Dat151Unk72(d, br); + case Dat151RelType.Unk74: return new Dat151Unk74(d, br); + case Dat151RelType.Unk75: return new Dat151Unk75(d, br); + case Dat151RelType.Unk77: return new Dat151Unk77(d, br); + case Dat151RelType.Unk79: return new Dat151Unk79(d, br); + case Dat151RelType.VehicleRecord: return new Dat151VehicleRecord(d, br); + case Dat151RelType.Unk82: return new Dat151Unk82(d, br); + case Dat151RelType.Unk85: return new Dat151Unk85(d, br); + case Dat151RelType.Unk95: return new Dat151Unk95(d, br); + case Dat151RelType.Unk96: return new Dat151Unk96(d, br); + case Dat151RelType.Unk99: return new Dat151Unk99(d, br); + case Dat151RelType.Unk100: return new Dat151Unk100(d, br); - //case Dat151RelType.Unk40: return new Dat151Unk40(d, br); - //case Dat151RelType.Unk41: return new Dat151Unk41(d, br); - //case Dat151RelType.Unk42: return new Dat151Unk42(d, br); - //case Dat151RelType.Unk45: return new Dat151Unk45(d, br); - //case Dat151RelType.Unk48: return new Dat151Unk48(d, br); - //case Dat151RelType.Unk51: return new Dat151Unk51(d, br); - //case Dat151RelType.Unk54: return new Dat151Unk54(d, br); - //case Dat151RelType.Unk59: return new Dat151Unk59(d, br); - //case Dat151RelType.Unk69: return new Dat151Unk69(d, br); - //case Dat151RelType.Unk70: return new Dat151Unk70(d, br); - //case Dat151RelType.Unk71: return new Dat151Unk71(d, br); - //case Dat151RelType.Unk72: return new Dat151Unk72(d, br); - //case Dat151RelType.Unk74: return new Dat151Unk74(d, br); - //case Dat151RelType.Unk75: return new Dat151Unk75(d, br); - //case Dat151RelType.Unk77: return new Dat151Unk77(d, br); - //case Dat151RelType.Unk79: return new Dat151Unk79(d, br); - //case Dat151RelType.Unk80: return new Dat151Unk80(d, br); - //case Dat151RelType.Unk82: return new Dat151Unk82(d, br); - //case Dat151RelType.Unk85: return new Dat151Unk85(d, br); - //case Dat151RelType.Unk95: return new Dat151Unk95(d, br); - //case Dat151RelType.Unk96: return new Dat151Unk96(d, br); - //case Dat151RelType.Unk99: return new Dat151Unk99(d, br); - //case Dat151RelType.Unk100: return new Dat151Unk100(d, br); //case Dat151RelType.Unk101: return new Dat151Unk101(d, br); //case Dat151RelType.Unk105: return new Dat151Unk105(d, br); //case Dat151RelType.Unk106: return new Dat151Unk106(d, br); @@ -788,30 +788,30 @@ namespace CodeWalker.GameFiles case Dat151RelType.Unk33: return new Dat151Unk33(this); case Dat151RelType.Unk35: return new Dat151Unk35(this); case Dat151RelType.Unk36: return new Dat151Unk36(this); + case Dat151RelType.AmbientStreamList: return new Dat151AmbientStreamList(this); + case Dat151RelType.AmbienceBankMap: return new Dat151AmbienceBankMap(this); + case Dat151RelType.Unk42: return new Dat151Unk42(this); + case Dat151RelType.Unk45: return new Dat151Unk45(this); + case Dat151RelType.Unk48: return new Dat151Unk48(this); + case Dat151RelType.Unk51: return new Dat151Unk51(this); + case Dat151RelType.Unk54: return new Dat151Unk54(this); + case Dat151RelType.Unk59: return new Dat151Unk59(this); + case Dat151RelType.Unk69: return new Dat151Unk69(this); + case Dat151RelType.Unk70: return new Dat151Unk70(this); + case Dat151RelType.Unk71: return new Dat151Unk71(this); + case Dat151RelType.Unk72: return new Dat151Unk72(this); + case Dat151RelType.Unk74: return new Dat151Unk74(this); + case Dat151RelType.Unk75: return new Dat151Unk75(this); + case Dat151RelType.Unk77: return new Dat151Unk77(this); + case Dat151RelType.Unk79: return new Dat151Unk79(this); + case Dat151RelType.VehicleRecord: return new Dat151VehicleRecord(this); + case Dat151RelType.Unk82: return new Dat151Unk82(this); + case Dat151RelType.Unk85: return new Dat151Unk85(this); + case Dat151RelType.Unk95: return new Dat151Unk95(this); + case Dat151RelType.Unk96: return new Dat151Unk96(this); + case Dat151RelType.Unk99: return new Dat151Unk99(this); + case Dat151RelType.Unk100: return new Dat151Unk100(this); - //case Dat151RelType.Unk40: return new Dat151Unk40(this); - //case Dat151RelType.Unk41: return new Dat151Unk41(this); - //case Dat151RelType.Unk42: return new Dat151Unk42(this); - //case Dat151RelType.Unk45: return new Dat151Unk45(this); - //case Dat151RelType.Unk48: return new Dat151Unk48(this); - //case Dat151RelType.Unk51: return new Dat151Unk51(this); - //case Dat151RelType.Unk54: return new Dat151Unk54(this); - //case Dat151RelType.Unk59: return new Dat151Unk59(this); - //case Dat151RelType.Unk69: return new Dat151Unk69(this); - //case Dat151RelType.Unk70: return new Dat151Unk70(this); - //case Dat151RelType.Unk71: return new Dat151Unk71(this); - //case Dat151RelType.Unk72: return new Dat151Unk72(this); - //case Dat151RelType.Unk74: return new Dat151Unk74(this); - //case Dat151RelType.Unk75: return new Dat151Unk75(this); - //case Dat151RelType.Unk77: return new Dat151Unk77(this); - //case Dat151RelType.Unk79: return new Dat151Unk79(this); - //case Dat151RelType.Unk80: return new Dat151Unk80(this); - //case Dat151RelType.Unk82: return new Dat151Unk82(this); - //case Dat151RelType.Unk85: return new Dat151Unk85(this); - //case Dat151RelType.Unk95: return new Dat151Unk95(this); - //case Dat151RelType.Unk96: return new Dat151Unk96(this); - //case Dat151RelType.Unk99: return new Dat151Unk99(this); - //case Dat151RelType.Unk100: return new Dat151Unk100(this); //case Dat151RelType.Unk101: return new Dat151Unk101(this); //case Dat151RelType.Unk105: return new Dat151Unk105(this); //case Dat151RelType.Unk106: return new Dat151Unk106(this); @@ -961,7 +961,7 @@ namespace CodeWalker.GameFiles case Dat151RelType.Unk29: case Dat151RelType.SpeechParams: case Dat151RelType.Unk11: - case Dat151RelType.Unk41: + case Dat151RelType.AmbienceBankMap: case Dat151RelType.VehicleTrailer: case Dat151RelType.AmbientEmitterList: case Dat151RelType.Weapon: @@ -4835,8 +4835,8 @@ namespace CodeWalker.GameFiles AmbientZone = 37, AmbientEmitter = 38, AmbientZoneList = 39, - Unk40 = 40, - Unk41 = 41, //ambience_bank_map_autogenerated + AmbientStreamList = 40, //contains eg amb_stream_bird_01 + AmbienceBankMap = 41, //ambience_bank_map_autogenerated Unk42 = 42, Interior = 44, Unk45 = 45, @@ -4871,7 +4871,7 @@ namespace CodeWalker.GameFiles Unk77 = 77, Unk78 = 78, Unk79 = 79, - Unk80 = 80, //vehicle record audio? (YVR) + VehicleRecord = 80, //vehicle record audio? (YVR) Unk81 = 81, Unk82 = 82, Unk83 = 83, //something to do with animals @@ -15245,6 +15245,2258 @@ namespace CodeWalker.GameFiles ItemCount = (Items?.Length ?? 0); } } + [TC(typeof(EXP))] public class Dat151AmbientStreamListItem : IMetaXmlItem + { + public MetaHash Unk1 { get; set; } + public MetaHash Unk2 { get; set; } + public int Unk3 { get; set; } + + public Dat151AmbientStreamListItem() + { } + public Dat151AmbientStreamListItem(BinaryReader br) + { + Unk1 = br.ReadUInt32(); + Unk2 = br.ReadUInt32(); + Unk3 = br.ReadInt32(); + } + public void Write(BinaryWriter bw) + { + bw.Write(Unk1); + bw.Write(Unk2); + bw.Write(Unk3); + } + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Unk1", RelXml.HashString(Unk1)); + RelXml.StringTag(sb, indent, "Unk2", RelXml.HashString(Unk2)); + RelXml.ValueTag(sb, indent, "Unk3", Unk3.ToString()); + } + public void ReadXml(XmlNode node) + { + Unk1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk1")); + Unk2 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk2")); + Unk3 = Xml.GetChildIntAttribute(node, "Unk3", "value"); + } + public override string ToString() + { + return Unk1.ToString() + ", " + Unk2.ToString() + ", " + Unk3.ToString(); + } + } + [TC(typeof(EXP))] public class Dat151AmbientStreamList : Dat151RelData //contains eg amb_stream_bird_01 + { + public int ItemCount { get; set; } + public Dat151AmbientStreamListItem[] Items { get; set; } + + public Dat151AmbientStreamList(RelFile rel) : base(rel) + { + Type = Dat151RelType.AmbientStreamList; + TypeID = (byte)Type; + } + public Dat151AmbientStreamList(RelData d, BinaryReader br) : base(d, br) + { + ItemCount = br.ReadInt32(); + Items = new Dat151AmbientStreamListItem[ItemCount]; + for (int i = 0; i < ItemCount; i++) + { + Items[i] = new Dat151AmbientStreamListItem(br); + } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) + { + Items[i].Write(bw); + } + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.WriteItemArray(sb, Items, indent, "Items"); + } + public override void ReadXml(XmlNode node) + { + Items = XmlRel.ReadItemArray(node, "Items"); + ItemCount = (Items?.Length ?? 0); + } + } + [TC(typeof(EXP))] public class Dat151AmbienceBankMap : Dat151RelData //ambience_bank_map_autogenerated + { + public int ItemCount { get; set; } + public Dat151HashPair[] Items { get; set; } + + public Dat151AmbienceBankMap(RelFile rel) : base(rel) + { + Type = Dat151RelType.AmbienceBankMap; + TypeID = (byte)Type; + } + public Dat151AmbienceBankMap(RelData d, BinaryReader br) : base(d, br) + { + ItemCount = br.ReadInt32(); + Items = new Dat151HashPair[ItemCount]; + for (int i = 0; i < ItemCount; i++) + { + Items[i] = new Dat151HashPair(br); + } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) + { + Items[i].Write(bw); + } + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.WriteItemArray(sb, Items, indent, "Items"); + } + public override void ReadXml(XmlNode node) + { + Items = XmlRel.ReadItemArray(node, "Items"); + ItemCount = (Items?.Length ?? 0); + } + } + [TC(typeof(EXP))] public class Dat151Unk42 : Dat151RelData + { + public FlagsUint Flags { get; set; } + public MetaHash Unk01 { get; set; }//0 + public float Unk02 { get; set; } + public MetaHash Unk03 { get; set; }//0 + public float Unk04 { get; set; } + public float Unk05 { get; set; } + public float Unk06 { get; set; } + public float Unk07 { get; set; } + public MetaHash Unk08 { get; set; }//0 + public MetaHash Unk09 { get; set; }//0 + public MetaHash Unk10 { get; set; }//0 + + public Dat151Unk42(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk42; + TypeID = (byte)Type; + } + public Dat151Unk42(RelData d, BinaryReader br) : base(d, br) + { + Flags = br.ReadUInt32(); + Unk01 = br.ReadUInt32();//0 + Unk02 = br.ReadSingle(); + Unk03 = br.ReadUInt32();//0 + Unk04 = br.ReadSingle(); + Unk05 = br.ReadSingle(); + Unk06 = br.ReadSingle(); + Unk07 = br.ReadSingle(); + Unk08 = br.ReadUInt32();//0 + Unk09 = br.ReadUInt32();//0 + Unk10 = br.ReadUInt32();//0 + + if (Unk01 != 0) + { } + if (Unk03 != 0) + { } + if (Unk08 != 0) + { } + if (Unk09 != 0) + { } + if (Unk10 != 0) + { } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Flags); + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", FloatUtil.ToString(Unk02)); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); + RelXml.ValueTag(sb, indent, "Unk04", FloatUtil.ToString(Unk04)); + RelXml.ValueTag(sb, indent, "Unk05", FloatUtil.ToString(Unk05)); + RelXml.ValueTag(sb, indent, "Unk06", FloatUtil.ToString(Unk06)); + RelXml.ValueTag(sb, indent, "Unk07", FloatUtil.ToString(Unk07)); + RelXml.StringTag(sb, indent, "Unk08", RelXml.HashString(Unk08)); + RelXml.StringTag(sb, indent, "Unk09", RelXml.HashString(Unk09)); + RelXml.StringTag(sb, indent, "Unk10", RelXml.HashString(Unk10)); + } + public override void ReadXml(XmlNode node) + { + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = Xml.GetChildFloatAttribute(node, "Unk02", "value"); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + Unk04 = Xml.GetChildFloatAttribute(node, "Unk04", "value"); + Unk05 = Xml.GetChildFloatAttribute(node, "Unk05", "value"); + Unk06 = Xml.GetChildFloatAttribute(node, "Unk06", "value"); + Unk07 = Xml.GetChildFloatAttribute(node, "Unk07", "value"); + Unk08 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk08")); + Unk09 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk09")); + Unk10 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk10")); + } + } + [TC(typeof(EXP))] public class Dat151Unk45 : Dat151RelData + { + public float Unk01 { get; set; } + public float Unk02 { get; set; } + public int Unk03 { get; set; } + public int Unk04 { get; set; } + public float Unk05 { get; set; } + + public Dat151Unk45(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk45; + TypeID = (byte)Type; + } + public Dat151Unk45(RelData d, BinaryReader br) : base(d, br) + { + Unk01 = br.ReadSingle(); + Unk02 = br.ReadSingle(); + Unk03 = br.ReadInt32(); + Unk04 = br.ReadInt32(); + Unk05 = br.ReadSingle(); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk01", FloatUtil.ToString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", FloatUtil.ToString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); + RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); + RelXml.ValueTag(sb, indent, "Unk05", FloatUtil.ToString(Unk05)); + } + public override void ReadXml(XmlNode node) + { + Unk01 = Xml.GetChildFloatAttribute(node, "Unk01", "value"); + Unk02 = Xml.GetChildFloatAttribute(node, "Unk02", "value"); + Unk03 = Xml.GetChildIntAttribute(node, "Unk03", "value"); + Unk04 = Xml.GetChildIntAttribute(node, "Unk04", "value"); + Unk05 = Xml.GetChildFloatAttribute(node, "Unk05", "value"); + } + } + [TC(typeof(EXP))] public class Dat151Unk48 : Dat151RelData + { + public FlagsUint Flags { get; set; } + public float Unk01 { get; set; } + public MetaHash Unk02 { get; set; }//0 + public float Unk03 { get; set; } + public float Unk04 { get; set; } + public float Unk05 { get; set; } + public float Unk06 { get; set; } + public float Unk07 { get; set; } + public int Unk08 { get; set; } + + public Dat151Unk48(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk48; + TypeID = (byte)Type; + } + public Dat151Unk48(RelData d, BinaryReader br) : base(d, br) + { + Flags = br.ReadUInt32(); + Unk01 = br.ReadSingle(); + Unk02 = br.ReadUInt32();//0 + Unk03 = br.ReadSingle(); + Unk04 = br.ReadSingle(); + Unk05 = br.ReadSingle(); + Unk06 = br.ReadSingle(); + Unk07 = br.ReadSingle(); + Unk08 = br.ReadInt32(); + + if (Unk02 != 0) + { } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Flags); + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.ValueTag(sb, indent, "Unk01", FloatUtil.ToString(Unk01)); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", FloatUtil.ToString(Unk03)); + RelXml.ValueTag(sb, indent, "Unk04", FloatUtil.ToString(Unk04)); + RelXml.ValueTag(sb, indent, "Unk05", FloatUtil.ToString(Unk05)); + RelXml.ValueTag(sb, indent, "Unk06", FloatUtil.ToString(Unk06)); + RelXml.ValueTag(sb, indent, "Unk07", FloatUtil.ToString(Unk07)); + RelXml.ValueTag(sb, indent, "Unk08", Unk08.ToString()); + } + public override void ReadXml(XmlNode node) + { + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = Xml.GetChildFloatAttribute(node, "Unk01", "value"); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Unk03 = Xml.GetChildFloatAttribute(node, "Unk03", "value"); + Unk04 = Xml.GetChildFloatAttribute(node, "Unk04", "value"); + Unk05 = Xml.GetChildFloatAttribute(node, "Unk05", "value"); + Unk06 = Xml.GetChildFloatAttribute(node, "Unk06", "value"); + Unk07 = Xml.GetChildFloatAttribute(node, "Unk07", "value"); + Unk08 = Xml.GetChildIntAttribute(node, "Unk08", "value"); + } + } + [TC(typeof(EXP))] public class Dat151Unk51 : Dat151RelData + { + public MetaHash Unk01 { get; set; } + public MetaHash Unk02 { get; set; } + public MetaHash Unk03 { get; set; } + public MetaHash Unk04 { get; set; } + public MetaHash Unk05 { get; set; } + + public Dat151Unk51(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk51; + TypeID = (byte)Type; + } + public Dat151Unk51(RelData d, BinaryReader br) : base(d, br) + { + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadUInt32(); + Unk03 = br.ReadUInt32(); + Unk04 = br.ReadUInt32(); + Unk05 = br.ReadUInt32(); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); + RelXml.StringTag(sb, indent, "Unk04", RelXml.HashString(Unk04)); + RelXml.StringTag(sb, indent, "Unk05", RelXml.HashString(Unk05)); + } + public override void ReadXml(XmlNode node) + { + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk04")); + Unk05 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk05")); + } + } + [TC(typeof(EXP))] public class Dat151Unk54 : Dat151RelData + { + public float Unk01 { get; set; } + public float Unk02 { get; set; } + public float Unk03 { get; set; } + public float Unk04 { get; set; } + public float Unk05 { get; set; } + public MetaHash Unk06 { get; set; } + public MetaHash Unk07 { get; set; } + public MetaHash Unk08 { get; set; } + public int ItemCount { get; set; } + public MetaHash[] Items { get; set; } + + public Dat151Unk54(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk54; + TypeID = (byte)Type; + } + public Dat151Unk54(RelData d, BinaryReader br) : base(d, br) + { + Unk01 = br.ReadSingle(); + Unk02 = br.ReadSingle(); + Unk03 = br.ReadSingle(); + Unk04 = br.ReadSingle(); + Unk05 = br.ReadSingle(); + Unk06 = br.ReadUInt32(); + Unk07 = br.ReadUInt32(); + Unk08 = br.ReadUInt32(); + ItemCount = br.ReadInt32(); + Items = new MetaHash[ItemCount]; + for (int i = 0; i < ItemCount; i++) + { + Items[i] = br.ReadUInt32(); + } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) + { + bw.Write(Items[i]); + } + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk01", FloatUtil.ToString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", FloatUtil.ToString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", FloatUtil.ToString(Unk03)); + RelXml.ValueTag(sb, indent, "Unk04", FloatUtil.ToString(Unk04)); + RelXml.ValueTag(sb, indent, "Unk05", FloatUtil.ToString(Unk05)); + RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); + RelXml.StringTag(sb, indent, "Unk07", RelXml.HashString(Unk07)); + RelXml.StringTag(sb, indent, "Unk08", RelXml.HashString(Unk08)); + RelXml.WriteHashItemArray(sb, Items, indent, "Items"); + } + public override void ReadXml(XmlNode node) + { + Unk01 = Xml.GetChildFloatAttribute(node, "Unk01", "value"); + Unk02 = Xml.GetChildFloatAttribute(node, "Unk02", "value"); + Unk03 = Xml.GetChildFloatAttribute(node, "Unk03", "value"); + Unk04 = Xml.GetChildFloatAttribute(node, "Unk04", "value"); + Unk05 = Xml.GetChildFloatAttribute(node, "Unk05", "value"); + Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); + Unk07 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk07")); + Unk08 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk08")); + Items = XmlRel.ReadHashItemArray(node, "Items"); + ItemCount = (Items?.Length ?? 0); + } + } + [TC(typeof(EXP))] public class Dat151Unk59 : Dat151RelData + { + public short Unk01 { get; set; } + public short Unk02 { get; set; } + public short Unk03 { get; set; } + public short Unk04 { get; set; } + public short Unk05 { get; set; } + public short Unk06 { get; set; } + public short Unk07 { get; set; } + public short Unk08 { get; set; } + + public Dat151Unk59(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk59; + TypeID = (byte)Type; + } + public Dat151Unk59(RelData d, BinaryReader br) : base(d, br) + { + Unk01 = br.ReadInt16(); + Unk02 = br.ReadInt16(); + Unk03 = br.ReadInt16(); + Unk04 = br.ReadInt16(); + Unk05 = br.ReadInt16(); + Unk06 = br.ReadInt16(); + Unk07 = br.ReadInt16(); + Unk08 = br.ReadInt16(); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); + RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); + RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); + RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); + RelXml.ValueTag(sb, indent, "Unk05", Unk05.ToString()); + RelXml.ValueTag(sb, indent, "Unk06", Unk06.ToString()); + RelXml.ValueTag(sb, indent, "Unk07", Unk07.ToString()); + RelXml.ValueTag(sb, indent, "Unk08", Unk08.ToString()); + } + public override void ReadXml(XmlNode node) + { + Unk01 = (short)Xml.GetChildIntAttribute(node, "Unk01", "value"); + Unk02 = (short)Xml.GetChildIntAttribute(node, "Unk02", "value"); + Unk03 = (short)Xml.GetChildIntAttribute(node, "Unk03", "value"); + Unk04 = (short)Xml.GetChildIntAttribute(node, "Unk04", "value"); + Unk05 = (short)Xml.GetChildIntAttribute(node, "Unk05", "value"); + Unk06 = (short)Xml.GetChildIntAttribute(node, "Unk06", "value"); + Unk07 = (short)Xml.GetChildIntAttribute(node, "Unk07", "value"); + Unk08 = (short)Xml.GetChildIntAttribute(node, "Unk08", "value"); + } + } + [TC(typeof(EXP))] public class Dat151Unk69 : Dat151RelData + { + public ushort Unk01 { get; set; } + + public Dat151Unk69(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk69; + TypeID = (byte)Type; + } + public Dat151Unk69(RelData d, BinaryReader br) : base(d, br) + { + Unk01 = br.ReadUInt16(); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); + } + public override void ReadXml(XmlNode node) + { + Unk01 = (ushort)Xml.GetChildUIntAttribute(node, "Unk01", "value"); + } + } + [TC(typeof(EXP))] public class Dat151Unk70 : Dat151RelData + { + public int Unk01 { get; set; } + public int Unk02 { get; set; } + + public Dat151Unk70(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk70; + TypeID = (byte)Type; + } + public Dat151Unk70(RelData d, BinaryReader br) : base(d, br) + { + Unk01 = br.ReadInt32(); + Unk02 = br.ReadInt32(); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); + RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); + } + public override void ReadXml(XmlNode node) + { + Unk01 = Xml.GetChildIntAttribute(node, "Unk01", "value"); + Unk02 = Xml.GetChildIntAttribute(node, "Unk02", "value"); + } + } + [TC(typeof(EXP))] public class Dat151Unk71 : Dat151RelData + { + public FlagsUint Flags { get; set; } + public MetaHash Unk01 { get; set; } + public MetaHash Unk02 { get; set; }//0 + public MetaHash Unk03 { get; set; }//0 + public MetaHash Unk04 { get; set; }//0 + public float Unk05 { get; set; } + public MetaHash Unk06 { get; set; } + public MetaHash Unk07 { get; set; } + public MetaHash Unk08 { get; set; } + public MetaHash Unk09 { get; set; } + public MetaHash Unk10 { get; set; } + public MetaHash Unk11 { get; set; } + public MetaHash Unk12 { get; set; } + public MetaHash Unk13 { get; set; } + public float Unk14 { get; set; } + public MetaHash Unk15 { get; set; } + public MetaHash Unk16 { get; set; } + public MetaHash Unk17 { get; set; } + public float Unk18 { get; set; } + + public Dat151Unk71(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk71; + TypeID = (byte)Type; + } + public Dat151Unk71(RelData d, BinaryReader br) : base(d, br) + { + Flags = br.ReadUInt32(); + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadUInt32();//0 + Unk03 = br.ReadUInt32();//0 + Unk04 = br.ReadUInt32();//0 + Unk05 = br.ReadSingle(); + Unk06 = br.ReadUInt32(); + Unk07 = br.ReadUInt32(); + Unk08 = br.ReadUInt32(); + Unk09 = br.ReadUInt32(); + Unk10 = br.ReadUInt32(); + Unk11 = br.ReadUInt32(); + Unk12 = br.ReadUInt32(); + Unk13 = br.ReadUInt32(); + Unk14 = br.ReadSingle(); + Unk15 = br.ReadUInt32(); + Unk16 = br.ReadUInt32(); + Unk17 = br.ReadUInt32(); + Unk18 = br.ReadSingle(); + + if (Unk02 != 0) + { } + if (Unk03 != 0) + { } + if (Unk04 != 0) + { } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Flags); + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); + bw.Write(Unk14); + bw.Write(Unk15); + bw.Write(Unk16); + bw.Write(Unk17); + bw.Write(Unk18); + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); + RelXml.StringTag(sb, indent, "Unk04", RelXml.HashString(Unk04)); + RelXml.ValueTag(sb, indent, "Unk05", FloatUtil.ToString(Unk05)); + RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); + RelXml.StringTag(sb, indent, "Unk07", RelXml.HashString(Unk07)); + RelXml.StringTag(sb, indent, "Unk08", RelXml.HashString(Unk08)); + RelXml.StringTag(sb, indent, "Unk09", RelXml.HashString(Unk09)); + RelXml.StringTag(sb, indent, "Unk10", RelXml.HashString(Unk10)); + RelXml.StringTag(sb, indent, "Unk11", RelXml.HashString(Unk11)); + RelXml.StringTag(sb, indent, "Unk12", RelXml.HashString(Unk12)); + RelXml.StringTag(sb, indent, "Unk13", RelXml.HashString(Unk13)); + RelXml.ValueTag(sb, indent, "Unk14", FloatUtil.ToString(Unk14)); + RelXml.StringTag(sb, indent, "Unk15", RelXml.HashString(Unk15)); + RelXml.StringTag(sb, indent, "Unk16", RelXml.HashString(Unk16)); + RelXml.StringTag(sb, indent, "Unk17", RelXml.HashString(Unk17)); + RelXml.ValueTag(sb, indent, "Unk18", FloatUtil.ToString(Unk18)); + } + public override void ReadXml(XmlNode node) + { + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk04")); + Unk05 = Xml.GetChildFloatAttribute(node, "Unk05", "value"); + Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); + Unk07 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk07")); + Unk08 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk08")); + Unk09 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk09")); + Unk10 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk10")); + Unk11 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk11")); + Unk12 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk12")); + Unk13 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk13")); + Unk14 = Xml.GetChildFloatAttribute(node, "Unk14", "value"); + Unk15 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk15")); + Unk16 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk16")); + Unk17 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk17")); + Unk18 = Xml.GetChildFloatAttribute(node, "Unk18", "value"); + } + } + [TC(typeof(EXP))] public class Dat151Unk72 : Dat151RelData + { + public int Unk01 { get; set; } + public float Unk02 { get; set; } + public float Unk03 { get; set; } + public float Unk04 { get; set; } + public float Unk05 { get; set; } + public float Unk06 { get; set; } + public float Unk07 { get; set; } + public float Unk08 { get; set; } + public float Unk09 { get; set; } + public MetaHash Unk10 { get; set; }//0 + public MetaHash Unk11 { get; set; }//0 + public MetaHash Unk12 { get; set; } + public MetaHash Unk13 { get; set; } + public MetaHash Unk14 { get; set; } + public MetaHash Unk15 { get; set; } + + public Dat151Unk72(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk72; + TypeID = (byte)Type; + } + public Dat151Unk72(RelData d, BinaryReader br) : base(d, br) + { + Unk01 = br.ReadInt32(); + Unk02 = br.ReadSingle(); + Unk03 = br.ReadSingle(); + Unk04 = br.ReadSingle(); + Unk05 = br.ReadSingle(); + Unk06 = br.ReadSingle(); + Unk07 = br.ReadSingle(); + Unk08 = br.ReadSingle(); + Unk09 = br.ReadSingle(); + Unk10 = br.ReadUInt32();//0 + Unk11 = br.ReadUInt32();//0 + Unk12 = br.ReadUInt32(); + Unk13 = br.ReadUInt32(); + Unk14 = br.ReadUInt32(); + Unk15 = br.ReadUInt32(); + + if (Unk10 != 0) + { } + if (Unk11 != 0) + { } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); + bw.Write(Unk14); + bw.Write(Unk15); + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); + RelXml.ValueTag(sb, indent, "Unk02", FloatUtil.ToString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", FloatUtil.ToString(Unk03)); + RelXml.ValueTag(sb, indent, "Unk04", FloatUtil.ToString(Unk04)); + RelXml.ValueTag(sb, indent, "Unk05", FloatUtil.ToString(Unk05)); + RelXml.ValueTag(sb, indent, "Unk06", FloatUtil.ToString(Unk06)); + RelXml.ValueTag(sb, indent, "Unk07", FloatUtil.ToString(Unk07)); + RelXml.ValueTag(sb, indent, "Unk08", FloatUtil.ToString(Unk08)); + RelXml.ValueTag(sb, indent, "Unk09", FloatUtil.ToString(Unk09)); + RelXml.StringTag(sb, indent, "Unk10", RelXml.HashString(Unk10)); + RelXml.StringTag(sb, indent, "Unk11", RelXml.HashString(Unk11)); + RelXml.StringTag(sb, indent, "Unk12", RelXml.HashString(Unk12)); + RelXml.StringTag(sb, indent, "Unk13", RelXml.HashString(Unk13)); + RelXml.StringTag(sb, indent, "Unk14", RelXml.HashString(Unk14)); + RelXml.StringTag(sb, indent, "Unk15", RelXml.HashString(Unk15)); + } + public override void ReadXml(XmlNode node) + { + Unk01 = Xml.GetChildIntAttribute(node, "Unk01", "value"); + Unk02 = Xml.GetChildFloatAttribute(node, "Unk02", "value"); + Unk03 = Xml.GetChildFloatAttribute(node, "Unk03", "value"); + Unk04 = Xml.GetChildFloatAttribute(node, "Unk04", "value"); + Unk05 = Xml.GetChildFloatAttribute(node, "Unk05", "value"); + Unk06 = Xml.GetChildFloatAttribute(node, "Unk06", "value"); + Unk07 = Xml.GetChildFloatAttribute(node, "Unk07", "value"); + Unk08 = Xml.GetChildFloatAttribute(node, "Unk08", "value"); + Unk09 = Xml.GetChildFloatAttribute(node, "Unk09", "value"); + Unk10 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk10")); + Unk11 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk11")); + Unk12 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk12")); + Unk13 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk13")); + Unk14 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk14")); + Unk15 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk15")); + } + } + [TC(typeof(EXP))] public class Dat151Unk74Item : IMetaXmlItem + { + public byte Unk1 { get; set; } + public byte ItemCount1 { get; set; } //indicates how many are used + public Dat151HashFloat[] Items1 { get; set; } //always array of 8 + public byte ItemCount2 { get; set; } //indicates how many are used + public Dat151HashFloat[] Items2 { get; set; } //always array of 8 + + public Dat151Unk74Item() + { } + public Dat151Unk74Item(BinaryReader br) + { + Unk1 = br.ReadByte(); + ItemCount1 = br.ReadByte(); + Items1 = new Dat151HashFloat[8]; + for (int i = 0; i < 8; i++) + { + Items1[i] = new Dat151HashFloat(br); + } + ItemCount2 = br.ReadByte(); + Items2 = new Dat151HashFloat[8]; + for (int i = 0; i < 8; i++) + { + Items2[i] = new Dat151HashFloat(br); + } + } + public void Write(BinaryWriter bw) + { + bw.Write(Unk1); + bw.Write(ItemCount1); + for (int i = 0; i < 8; i++) + { + Items1[i].Write(bw); + } + bw.Write(ItemCount2); + for (int i = 0; i < 8; i++) + { + Items2[i].Write(bw); + } + } + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk1", Unk1.ToString()); + RelXml.ValueTag(sb, indent, "ItemCount1", ItemCount1.ToString()); + RelXml.WriteItemArray(sb, Items1, indent, "Items1"); + RelXml.ValueTag(sb, indent, "ItemCount2", ItemCount2.ToString()); + RelXml.WriteItemArray(sb, Items2, indent, "Items2"); + } + public void ReadXml(XmlNode node) + { + Unk1 = (byte)Xml.GetChildUIntAttribute(node, "Unk1", "value"); + ItemCount1 = (byte)Xml.GetChildUIntAttribute(node, "ItemCount1", "value"); + Items1 = XmlRel.ReadItemArray(node, "Items1"); + ItemCount2 = (byte)Xml.GetChildUIntAttribute(node, "ItemCount2", "value"); + Items2 = XmlRel.ReadItemArray(node, "Items2"); + //probably should make an error if Items1/2 are not an array of 8... + } + public override string ToString() + { + return Unk1.ToString() + ": " + ItemCount1.ToString() + ", " + ItemCount2.ToString(); + } + } + [TC(typeof(EXP))] public class Dat151Unk74 : Dat151RelData + { + public byte ItemCount { get; set; } + public Dat151Unk74Item[] Items { get; set; } + + public Dat151Unk74(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk74; + TypeID = (byte)Type; + } + public Dat151Unk74(RelData d, BinaryReader br) : base(d, br) + { + ItemCount = br.ReadByte();//1 + Items = new Dat151Unk74Item[ItemCount]; + for (int i = 0; i < ItemCount; i++) + { + Items[i] = new Dat151Unk74Item(br); + } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) + { + Items[i].Write(bw); + } + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.WriteItemArray(sb, Items, indent, "Items"); + } + public override void ReadXml(XmlNode node) + { + Items = XmlRel.ReadItemArray(node, "Items"); + ItemCount = (byte)(Items?.Length ?? 0); + } + } + [TC(typeof(EXP))] public class Dat151Unk75 : Dat151RelData + { + public MetaHash Unk01 { get; set; } + public MetaHash Unk02 { get; set; } + public MetaHash Unk03 { get; set; } + public MetaHash Unk04 { get; set; } + public MetaHash Unk05 { get; set; } + public MetaHash Unk06 { get; set; } + public MetaHash Unk07 { get; set; } + public MetaHash Unk08 { get; set; } + public MetaHash Unk09 { get; set; } + public MetaHash Unk10 { get; set; } + public MetaHash Unk11 { get; set; } + public MetaHash Unk12 { get; set; } + public MetaHash Unk13 { get; set; } + public MetaHash Unk14 { get; set; } + public MetaHash Unk15 { get; set; } + public MetaHash Unk16 { get; set; } + public MetaHash Unk17 { get; set; }//0 + public MetaHash Unk18 { get; set; }//0 + public MetaHash Unk19 { get; set; } + public MetaHash Unk20 { get; set; } + public MetaHash Unk21 { get; set; }//0 + public MetaHash Unk22 { get; set; }//0 + public MetaHash Unk23 { get; set; } + public MetaHash Unk24 { get; set; } + public MetaHash Unk25 { get; set; }//0 + public MetaHash Unk26 { get; set; } + public MetaHash Unk27 { get; set; }//0 + public MetaHash Unk28 { get; set; } + public MetaHash Unk29 { get; set; } + public MetaHash Unk30 { get; set; }//0 + public MetaHash Unk31 { get; set; }//0 + public MetaHash Unk32 { get; set; } + public MetaHash Unk33 { get; set; } + public MetaHash Unk34 { get; set; }//dlc_replayed/mono_tv_ammunation + public MetaHash Unk35 { get; set; }//0 + public MetaHash Unk36 { get; set; } + public MetaHash Unk37 { get; set; } + public MetaHash Unk38 { get; set; }//0 + public MetaHash Unk39 { get; set; } + public MetaHash Unk40 { get; set; }//0 + public MetaHash Unk41 { get; set; } + public MetaHash Unk42 { get; set; } + public MetaHash Unk43 { get; set; }//0 + public MetaHash Unk44 { get; set; }//0 + public MetaHash Unk45 { get; set; } + public MetaHash Unk46 { get; set; } + public MetaHash Unk47 { get; set; } + public MetaHash Unk48 { get; set; }//0 + public MetaHash Unk49 { get; set; } + public MetaHash Unk50 { get; set; } + public MetaHash Unk51 { get; set; }//0 + public MetaHash Unk52 { get; set; } + public MetaHash Unk53 { get; set; }//0 + public MetaHash Unk54 { get; set; } + public MetaHash Unk55 { get; set; }//0 + public MetaHash Unk56 { get; set; } + public MetaHash Unk57 { get; set; }//0 + public MetaHash Unk58 { get; set; }//0 + public MetaHash Unk59 { get; set; }//0 + public MetaHash Unk60 { get; set; } + public MetaHash Unk61 { get; set; }//0 + public MetaHash Unk62 { get; set; } + public MetaHash Unk63 { get; set; }//0 + public MetaHash Unk64 { get; set; }//0 + public MetaHash Unk65 { get; set; }//0 + public MetaHash Unk66 { get; set; } + + public Dat151Unk75(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk75; + TypeID = (byte)Type; + } + public Dat151Unk75(RelData d, BinaryReader br) : base(d, br) + { + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadUInt32(); + Unk03 = br.ReadUInt32(); + Unk04 = br.ReadUInt32(); + Unk05 = br.ReadUInt32(); + Unk06 = br.ReadUInt32(); + Unk07 = br.ReadUInt32(); + Unk08 = br.ReadUInt32(); + Unk09 = br.ReadUInt32(); + Unk10 = br.ReadUInt32(); + Unk11 = br.ReadUInt32(); + Unk12 = br.ReadUInt32(); + Unk13 = br.ReadUInt32(); + Unk14 = br.ReadUInt32(); + Unk15 = br.ReadUInt32(); + Unk16 = br.ReadUInt32(); + Unk17 = br.ReadUInt32();//0 + Unk18 = br.ReadUInt32();//0 + Unk19 = br.ReadUInt32(); + Unk20 = br.ReadUInt32(); + Unk21 = br.ReadUInt32();//0 + Unk22 = br.ReadUInt32();//0 + Unk23 = br.ReadUInt32(); + Unk24 = br.ReadUInt32(); + Unk25 = br.ReadUInt32();//0 + Unk26 = br.ReadUInt32(); + Unk27 = br.ReadUInt32();//0 + Unk28 = br.ReadUInt32(); + Unk29 = br.ReadUInt32(); + Unk30 = br.ReadUInt32();//0 + Unk31 = br.ReadUInt32();//0 + Unk32 = br.ReadUInt32(); + Unk33 = br.ReadUInt32(); + Unk34 = br.ReadUInt32();//dlc_replayed/mono_tv_ammunation + Unk35 = br.ReadUInt32();//0 + Unk36 = br.ReadUInt32(); + Unk37 = br.ReadUInt32(); + Unk38 = br.ReadUInt32();//0 + Unk39 = br.ReadUInt32(); + Unk40 = br.ReadUInt32();//0 + Unk41 = br.ReadUInt32(); + Unk42 = br.ReadUInt32(); + Unk43 = br.ReadUInt32();//0 + Unk44 = br.ReadUInt32();//0 + Unk45 = br.ReadUInt32(); + Unk46 = br.ReadUInt32(); + Unk47 = br.ReadUInt32(); + Unk48 = br.ReadUInt32();//0 + Unk49 = br.ReadUInt32(); + Unk50 = br.ReadUInt32(); + Unk51 = br.ReadUInt32();//0 + Unk52 = br.ReadUInt32(); + Unk53 = br.ReadUInt32();//0 + Unk54 = br.ReadUInt32(); + Unk55 = br.ReadUInt32();//0 + Unk56 = br.ReadUInt32(); + Unk57 = br.ReadUInt32();//0 + Unk58 = br.ReadUInt32();//0 + Unk59 = br.ReadUInt32();//0 + Unk60 = br.ReadUInt32(); + Unk61 = br.ReadUInt32();//0 + Unk62 = br.ReadUInt32(); + Unk63 = br.ReadUInt32();//0 + Unk64 = br.ReadUInt32();//0 + Unk65 = br.ReadUInt32();//0 + Unk66 = br.ReadUInt32(); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); + bw.Write(Unk14); + bw.Write(Unk15); + bw.Write(Unk16); + bw.Write(Unk17); + bw.Write(Unk18); + bw.Write(Unk19); + bw.Write(Unk20); + bw.Write(Unk21); + bw.Write(Unk22); + bw.Write(Unk23); + bw.Write(Unk24); + bw.Write(Unk25); + bw.Write(Unk26); + bw.Write(Unk27); + bw.Write(Unk28); + bw.Write(Unk29); + bw.Write(Unk30); + bw.Write(Unk31); + bw.Write(Unk32); + bw.Write(Unk33); + bw.Write(Unk34); + bw.Write(Unk35); + bw.Write(Unk36); + bw.Write(Unk37); + bw.Write(Unk38); + bw.Write(Unk39); + bw.Write(Unk40); + bw.Write(Unk41); + bw.Write(Unk42); + bw.Write(Unk43); + bw.Write(Unk44); + bw.Write(Unk45); + bw.Write(Unk46); + bw.Write(Unk47); + bw.Write(Unk48); + bw.Write(Unk49); + bw.Write(Unk50); + bw.Write(Unk51); + bw.Write(Unk52); + bw.Write(Unk53); + bw.Write(Unk54); + bw.Write(Unk55); + bw.Write(Unk56); + bw.Write(Unk57); + bw.Write(Unk58); + bw.Write(Unk59); + bw.Write(Unk60); + bw.Write(Unk61); + bw.Write(Unk62); + bw.Write(Unk63); + bw.Write(Unk64); + bw.Write(Unk65); + bw.Write(Unk66); + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); + RelXml.StringTag(sb, indent, "Unk04", RelXml.HashString(Unk04)); + RelXml.StringTag(sb, indent, "Unk05", RelXml.HashString(Unk05)); + RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); + RelXml.StringTag(sb, indent, "Unk07", RelXml.HashString(Unk07)); + RelXml.StringTag(sb, indent, "Unk08", RelXml.HashString(Unk08)); + RelXml.StringTag(sb, indent, "Unk09", RelXml.HashString(Unk09)); + RelXml.StringTag(sb, indent, "Unk10", RelXml.HashString(Unk10)); + RelXml.StringTag(sb, indent, "Unk11", RelXml.HashString(Unk11)); + RelXml.StringTag(sb, indent, "Unk12", RelXml.HashString(Unk12)); + RelXml.StringTag(sb, indent, "Unk13", RelXml.HashString(Unk13)); + RelXml.StringTag(sb, indent, "Unk14", RelXml.HashString(Unk14)); + RelXml.StringTag(sb, indent, "Unk15", RelXml.HashString(Unk15)); + RelXml.StringTag(sb, indent, "Unk16", RelXml.HashString(Unk16)); + RelXml.StringTag(sb, indent, "Unk17", RelXml.HashString(Unk17)); + RelXml.StringTag(sb, indent, "Unk18", RelXml.HashString(Unk18)); + RelXml.StringTag(sb, indent, "Unk19", RelXml.HashString(Unk19)); + RelXml.StringTag(sb, indent, "Unk20", RelXml.HashString(Unk20)); + RelXml.StringTag(sb, indent, "Unk21", RelXml.HashString(Unk21)); + RelXml.StringTag(sb, indent, "Unk22", RelXml.HashString(Unk22)); + RelXml.StringTag(sb, indent, "Unk23", RelXml.HashString(Unk23)); + RelXml.StringTag(sb, indent, "Unk24", RelXml.HashString(Unk24)); + RelXml.StringTag(sb, indent, "Unk25", RelXml.HashString(Unk25)); + RelXml.StringTag(sb, indent, "Unk26", RelXml.HashString(Unk26)); + RelXml.StringTag(sb, indent, "Unk27", RelXml.HashString(Unk27)); + RelXml.StringTag(sb, indent, "Unk28", RelXml.HashString(Unk28)); + RelXml.StringTag(sb, indent, "Unk29", RelXml.HashString(Unk29)); + RelXml.StringTag(sb, indent, "Unk30", RelXml.HashString(Unk30)); + RelXml.StringTag(sb, indent, "Unk31", RelXml.HashString(Unk31)); + RelXml.StringTag(sb, indent, "Unk32", RelXml.HashString(Unk32)); + RelXml.StringTag(sb, indent, "Unk33", RelXml.HashString(Unk33)); + RelXml.StringTag(sb, indent, "Unk34", RelXml.HashString(Unk34)); + RelXml.StringTag(sb, indent, "Unk35", RelXml.HashString(Unk35)); + RelXml.StringTag(sb, indent, "Unk36", RelXml.HashString(Unk36)); + RelXml.StringTag(sb, indent, "Unk37", RelXml.HashString(Unk37)); + RelXml.StringTag(sb, indent, "Unk38", RelXml.HashString(Unk38)); + RelXml.StringTag(sb, indent, "Unk39", RelXml.HashString(Unk39)); + RelXml.StringTag(sb, indent, "Unk40", RelXml.HashString(Unk40)); + RelXml.StringTag(sb, indent, "Unk41", RelXml.HashString(Unk41)); + RelXml.StringTag(sb, indent, "Unk42", RelXml.HashString(Unk42)); + RelXml.StringTag(sb, indent, "Unk43", RelXml.HashString(Unk43)); + RelXml.StringTag(sb, indent, "Unk44", RelXml.HashString(Unk44)); + RelXml.StringTag(sb, indent, "Unk45", RelXml.HashString(Unk45)); + RelXml.StringTag(sb, indent, "Unk46", RelXml.HashString(Unk46)); + RelXml.StringTag(sb, indent, "Unk47", RelXml.HashString(Unk47)); + RelXml.StringTag(sb, indent, "Unk48", RelXml.HashString(Unk48)); + RelXml.StringTag(sb, indent, "Unk49", RelXml.HashString(Unk49)); + RelXml.StringTag(sb, indent, "Unk50", RelXml.HashString(Unk50)); + RelXml.StringTag(sb, indent, "Unk51", RelXml.HashString(Unk51)); + RelXml.StringTag(sb, indent, "Unk52", RelXml.HashString(Unk52)); + RelXml.StringTag(sb, indent, "Unk53", RelXml.HashString(Unk53)); + RelXml.StringTag(sb, indent, "Unk54", RelXml.HashString(Unk54)); + RelXml.StringTag(sb, indent, "Unk55", RelXml.HashString(Unk55)); + RelXml.StringTag(sb, indent, "Unk56", RelXml.HashString(Unk56)); + RelXml.StringTag(sb, indent, "Unk57", RelXml.HashString(Unk57)); + RelXml.StringTag(sb, indent, "Unk58", RelXml.HashString(Unk58)); + RelXml.StringTag(sb, indent, "Unk59", RelXml.HashString(Unk59)); + RelXml.StringTag(sb, indent, "Unk60", RelXml.HashString(Unk60)); + RelXml.StringTag(sb, indent, "Unk61", RelXml.HashString(Unk61)); + RelXml.StringTag(sb, indent, "Unk62", RelXml.HashString(Unk62)); + RelXml.StringTag(sb, indent, "Unk63", RelXml.HashString(Unk63)); + RelXml.StringTag(sb, indent, "Unk64", RelXml.HashString(Unk64)); + RelXml.StringTag(sb, indent, "Unk65", RelXml.HashString(Unk65)); + RelXml.StringTag(sb, indent, "Unk66", RelXml.HashString(Unk66)); + } + public override void ReadXml(XmlNode node) + { + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk04")); + Unk05 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk05")); + Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); + Unk07 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk07")); + Unk08 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk08")); + Unk09 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk09")); + Unk10 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk10")); + Unk11 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk11")); + Unk12 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk12")); + Unk13 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk13")); + Unk14 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk14")); + Unk15 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk15")); + Unk16 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk16")); + Unk17 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk17")); + Unk18 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk18")); + Unk19 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk19")); + Unk20 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk20")); + Unk21 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk21")); + Unk22 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk22")); + Unk23 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk23")); + Unk24 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk24")); + Unk25 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk25")); + Unk26 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk26")); + Unk27 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk27")); + Unk28 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk28")); + Unk29 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk29")); + Unk30 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk30")); + Unk31 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk31")); + Unk32 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk32")); + Unk33 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk33")); + Unk34 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk34")); + Unk35 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk35")); + Unk36 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk36")); + Unk37 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk37")); + Unk38 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk38")); + Unk39 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk39")); + Unk40 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk40")); + Unk41 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk41")); + Unk42 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk42")); + Unk43 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk43")); + Unk44 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk44")); + Unk45 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk45")); + Unk46 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk46")); + Unk47 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk47")); + Unk48 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk48")); + Unk49 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk49")); + Unk50 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk50")); + Unk51 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk51")); + Unk52 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk52")); + Unk53 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk53")); + Unk54 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk54")); + Unk55 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk55")); + Unk56 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk56")); + Unk57 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk57")); + Unk58 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk58")); + Unk59 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk59")); + Unk60 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk60")); + Unk61 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk61")); + Unk62 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk62")); + Unk63 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk63")); + Unk64 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk64")); + Unk65 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk65")); + Unk66 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk66")); + } + } + [TC(typeof(EXP))] public class Dat151Unk77 : Dat151RelData + { + public MetaHash Unk01 { get; set; }//0 + public float Unk02 { get; set; } + + public Dat151Unk77(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk77; + TypeID = (byte)Type; + } + public Dat151Unk77(RelData d, BinaryReader br) : base(d, br) + { + Unk01 = br.ReadUInt32();//0 + Unk02 = br.ReadSingle(); + + if (Unk01 != 0) + { } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", FloatUtil.ToString(Unk02)); + } + public override void ReadXml(XmlNode node) + { + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = Xml.GetChildFloatAttribute(node, "Unk02", "value"); + } + } + [TC(typeof(EXP))] public class Dat151Unk79Item : IMetaXmlItem + { + public float Unk01 { get; set; } + public float Unk02 { get; set; } + public float Unk03 { get; set; } + public float Unk04 { get; set; } + public float Unk05 { get; set; } + public float Unk06 { get; set; } + public int Unk07 { get; set; } + public float Unk08 { get; set; } + public float Unk09 { get; set; } + + public Dat151Unk79Item() + { } + public Dat151Unk79Item(BinaryReader br) + { + Unk01 = br.ReadSingle(); + Unk02 = br.ReadSingle(); + Unk03 = br.ReadSingle(); + Unk04 = br.ReadSingle(); + Unk05 = br.ReadSingle(); + Unk06 = br.ReadSingle(); + Unk07 = br.ReadInt32(); + Unk08 = br.ReadSingle(); + Unk09 = br.ReadSingle(); + } + public void Write(BinaryWriter bw) + { + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + } + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk01", FloatUtil.ToString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", FloatUtil.ToString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", FloatUtil.ToString(Unk03)); + RelXml.ValueTag(sb, indent, "Unk04", FloatUtil.ToString(Unk04)); + RelXml.ValueTag(sb, indent, "Unk05", FloatUtil.ToString(Unk05)); + RelXml.ValueTag(sb, indent, "Unk06", FloatUtil.ToString(Unk06)); + RelXml.ValueTag(sb, indent, "Unk07", Unk07.ToString()); + RelXml.ValueTag(sb, indent, "Unk08", FloatUtil.ToString(Unk08)); + RelXml.ValueTag(sb, indent, "Unk09", FloatUtil.ToString(Unk09)); + } + public void ReadXml(XmlNode node) + { + Unk01 = Xml.GetChildFloatAttribute(node, "Unk01", "value"); + Unk02 = Xml.GetChildFloatAttribute(node, "Unk02", "value"); + Unk03 = Xml.GetChildFloatAttribute(node, "Unk03", "value"); + Unk04 = Xml.GetChildFloatAttribute(node, "Unk04", "value"); + Unk05 = Xml.GetChildFloatAttribute(node, "Unk05", "value"); + Unk06 = Xml.GetChildFloatAttribute(node, "Unk06", "value"); + Unk07 = Xml.GetChildIntAttribute(node, "Unk07", "value"); + Unk08 = Xml.GetChildFloatAttribute(node, "Unk08", "value"); + Unk09 = Xml.GetChildFloatAttribute(node, "Unk09", "value"); + } + public override string ToString() + { + return string.Format("{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}", Unk01, Unk02, Unk03, Unk04, Unk05, Unk06, Unk07, Unk08, Unk09); + } + } + [TC(typeof(EXP))] public class Dat151Unk79 : Dat151RelData + { + public FlagsUint Flags { get; set; } + public byte Unk01 { get; set; } + public byte ItemCount { get; set; } + public byte Unk02 { get; set; } + public byte Unk03 { get; set; } + public Dat151Unk79Item[] Items { get; set; } + + public Dat151Unk79(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk79; + TypeID = (byte)Type; + } + public Dat151Unk79(RelData d, BinaryReader br) : base(d, br) + { + Flags = br.ReadUInt32(); + Unk01 = br.ReadByte(); + ItemCount = br.ReadByte(); + Unk02 = br.ReadByte(); + Unk03 = br.ReadByte(); + + Items = new Dat151Unk79Item[ItemCount]; + for (int i = 0; i < ItemCount; i++) + { + Items[i] = new Dat151Unk79Item(br); + } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Flags); + bw.Write(Unk01); + bw.Write(ItemCount); + bw.Write(Unk02); + bw.Write(Unk03); + for (int i = 0; i < ItemCount; i++) + { + Items[i].Write(bw); + } + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); + RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); + RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); + RelXml.WriteItemArray(sb, Items, indent, "Items"); + } + public override void ReadXml(XmlNode node) + { + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = (byte)Xml.GetChildIntAttribute(node, "Unk01", "value"); + Unk02 = (byte)Xml.GetChildIntAttribute(node, "Unk02", "value"); + Unk03 = (byte)Xml.GetChildIntAttribute(node, "Unk03", "value"); + Items = XmlRel.ReadItemArray(node, "Items"); + ItemCount = (byte)(Items?.Length ?? 0); + } + } + [TC(typeof(EXP))] public class Dat151VehicleRecordItem : IMetaXmlItem + { + public float Time { get; set; } + public MetaHash Hash1 { get; set; } + public MetaHash Hash2 { get; set; } + + public Dat151VehicleRecordItem() + { } + public Dat151VehicleRecordItem(BinaryReader br) + { + Time = br.ReadSingle(); + Hash1 = br.ReadUInt32(); + Hash2 = br.ReadUInt32(); + } + public void Write(BinaryWriter bw) + { + bw.Write(Time); + bw.Write(Hash1); + bw.Write(Hash2); + } + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Time", FloatUtil.ToString(Time)); + RelXml.StringTag(sb, indent, "Hash1", RelXml.HashString(Hash1)); + RelXml.StringTag(sb, indent, "Hash2", RelXml.HashString(Hash2)); + } + public void ReadXml(XmlNode node) + { + Time = Xml.GetChildFloatAttribute(node, "Time", "value"); + Hash1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Hash1")); + Hash2 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Hash2")); + } + public override string ToString() + { + return Time.ToString() + ", " + Hash1.ToString() + ", " + Hash2.ToString(); + } + } + [TC(typeof(EXP))] public class Dat151VehicleRecordItem2 : IMetaXmlItem + { + public MetaHash Unk01 { get; set; } + public float Unk02 { get; set; } + public float Unk03 { get; set; } + + public Dat151VehicleRecordItem2() + { } + public Dat151VehicleRecordItem2(BinaryReader br) + { + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadSingle(); + Unk03 = br.ReadSingle(); + } + public void Write(BinaryWriter bw) + { + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + } + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", FloatUtil.ToString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", FloatUtil.ToString(Unk03)); + } + public void ReadXml(XmlNode node) + { + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = Xml.GetChildFloatAttribute(node, "Unk02", "value"); + Unk03 = Xml.GetChildFloatAttribute(node, "Unk03", "value"); + } + public override string ToString() + { + return Unk01.ToString() + ", " + Unk02.ToString() + ", " + Unk03.ToString(); + } + } + [TC(typeof(EXP))] public class Dat151VehicleRecord : Dat151RelData //vehicle record audio? (YVR) + { + public MetaHash Unk01 { get; set; } + public int Unk02 { get; set; } + public int ItemCount { get; set; } + public Dat151VehicleRecordItem[] Items { get; set; } + public int ItemCount2 { get; set; } + public Dat151VehicleRecordItem2[] Items2 { get; set; } + + public Dat151VehicleRecord(RelFile rel) : base(rel) + { + Type = Dat151RelType.VehicleRecord; + TypeID = (byte)Type; + } + public Dat151VehicleRecord(RelData d, BinaryReader br) : base(d, br) + { + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadInt32(); + ItemCount = br.ReadInt32(); + Items = new Dat151VehicleRecordItem[ItemCount]; + for (int i = 0; i < ItemCount; i++) + { + Items[i] = new Dat151VehicleRecordItem(br); + } + if (ItemCount != 0) + { + ItemCount2 = br.ReadInt32(); + Items2 = new Dat151VehicleRecordItem2[ItemCount2]; + for (int i = 0; i < ItemCount2; i++) + { + Items2[i] = new Dat151VehicleRecordItem2(br); + } + } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) + { + Items[i].Write(bw); + } + if (ItemCount > 0) + { + bw.Write(ItemCount2); + for (int i = 0; i < ItemCount2; i++) + { + Items2[i].Write(bw); + } + } + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); + RelXml.WriteItemArray(sb, Items, indent, "Items"); + if (ItemCount > 0) + { + RelXml.WriteItemArray(sb, Items2, indent, "Items2"); + } + } + public override void ReadXml(XmlNode node) + { + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = Xml.GetChildIntAttribute(node, "Unk02", "value"); + Items = XmlRel.ReadItemArray(node, "Items"); + ItemCount = (Items?.Length ?? 0); + if (ItemCount > 0) + { + Items2 = XmlRel.ReadItemArray(node, "Items2"); + ItemCount2 = (Items2?.Length ?? 0); + } + else + { + Items2 = null; + ItemCount2 = 0; + } + } + } + [TC(typeof(EXP))] public class Dat151Unk82 : Dat151RelData + { + public MetaHash Unk01 { get; set; } + public MetaHash Unk02 { get; set; } + public MetaHash Unk03 { get; set; } + public MetaHash Unk04 { get; set; } + public MetaHash Unk05 { get; set; } + public MetaHash Unk06 { get; set; } + public MetaHash Unk07 { get; set; } + public MetaHash Unk08 { get; set; } + public MetaHash Unk09 { get; set; } + public int Unk10 { get; set; } + + public Dat151Unk82(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk82; + TypeID = (byte)Type; + } + public Dat151Unk82(RelData d, BinaryReader br) : base(d, br) + { + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadUInt32(); + Unk03 = br.ReadUInt32(); + Unk04 = br.ReadUInt32(); + Unk05 = br.ReadUInt32(); + Unk06 = br.ReadUInt32(); + Unk07 = br.ReadUInt32(); + Unk08 = br.ReadUInt32(); + Unk09 = br.ReadUInt32(); + Unk10 = br.ReadInt32(); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); + RelXml.StringTag(sb, indent, "Unk04", RelXml.HashString(Unk04)); + RelXml.StringTag(sb, indent, "Unk05", RelXml.HashString(Unk05)); + RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); + RelXml.StringTag(sb, indent, "Unk07", RelXml.HashString(Unk07)); + RelXml.StringTag(sb, indent, "Unk08", RelXml.HashString(Unk08)); + RelXml.StringTag(sb, indent, "Unk09", RelXml.HashString(Unk09)); + RelXml.ValueTag(sb, indent, "Unk10", Unk10.ToString()); + } + public override void ReadXml(XmlNode node) + { + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk04")); + Unk05 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk05")); + Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); + Unk07 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk07")); + Unk08 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk08")); + Unk09 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk09")); + Unk10 = Xml.GetChildIntAttribute(node, "Unk10", "value"); + } + } + [TC(typeof(EXP))] public class Dat151Unk85 : Dat151RelData + { + public FlagsUint Flags { get; set; } + public MetaHash Unk01 { get; set; } + public MetaHash Unk02 { get; set; } + public MetaHash Unk03 { get; set; } + public MetaHash Unk04 { get; set; } + public MetaHash Unk05 { get; set; } + public MetaHash Unk06 { get; set; } + public MetaHash Unk07 { get; set; } + public MetaHash Unk08 { get; set; }//0 + public MetaHash Unk09 { get; set; } + public MetaHash Unk10 { get; set; } + public MetaHash Unk11 { get; set; } + public MetaHash Unk12 { get; set; }//0 + public MetaHash Unk13 { get; set; } + public MetaHash Unk14 { get; set; } + + public Dat151Unk85(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk85; + TypeID = (byte)Type; + } + public Dat151Unk85(RelData d, BinaryReader br) : base(d, br) + { + Flags = br.ReadUInt32(); + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadUInt32(); + Unk03 = br.ReadUInt32(); + Unk04 = br.ReadUInt32(); + Unk05 = br.ReadUInt32(); + Unk06 = br.ReadUInt32(); + Unk07 = br.ReadUInt32(); + Unk08 = br.ReadUInt32();//0 + Unk09 = br.ReadUInt32(); + Unk10 = br.ReadUInt32(); + Unk11 = br.ReadUInt32(); + Unk12 = br.ReadUInt32();//0 + Unk13 = br.ReadUInt32(); + Unk14 = br.ReadUInt32(); + + if (Unk08 != 0) + { } + if (Unk12 != 0) + { } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Flags); + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); + bw.Write(Unk14); + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); + RelXml.StringTag(sb, indent, "Unk04", RelXml.HashString(Unk04)); + RelXml.StringTag(sb, indent, "Unk05", RelXml.HashString(Unk05)); + RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); + RelXml.StringTag(sb, indent, "Unk07", RelXml.HashString(Unk07)); + RelXml.StringTag(sb, indent, "Unk08", RelXml.HashString(Unk08)); + RelXml.StringTag(sb, indent, "Unk09", RelXml.HashString(Unk09)); + RelXml.StringTag(sb, indent, "Unk10", RelXml.HashString(Unk10)); + RelXml.StringTag(sb, indent, "Unk11", RelXml.HashString(Unk11)); + RelXml.StringTag(sb, indent, "Unk12", RelXml.HashString(Unk12)); + RelXml.StringTag(sb, indent, "Unk13", RelXml.HashString(Unk13)); + RelXml.StringTag(sb, indent, "Unk14", RelXml.HashString(Unk14)); + } + public override void ReadXml(XmlNode node) + { + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk04")); + Unk05 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk05")); + Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); + Unk07 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk07")); + Unk08 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk08")); + Unk09 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk09")); + Unk10 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk10")); + Unk11 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk11")); + Unk12 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk12")); + Unk13 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk13")); + Unk14 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk14")); + } + } + [TC(typeof(EXP))] public class Dat151Unk95 : Dat151RelData + { + public MetaHash Unk01 { get; set; } + public int Unk02 { get; set; } + public MetaHash Unk03 { get; set; } + public float Unk04 { get; set; } + + public Dat151Unk95(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk95; + TypeID = (byte)Type; + } + public Dat151Unk95(RelData d, BinaryReader br) : base(d, br) + { + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadInt32(); + Unk03 = br.ReadUInt32(); + Unk04 = br.ReadSingle(); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); + RelXml.ValueTag(sb, indent, "Unk04", FloatUtil.ToString(Unk04)); + } + public override void ReadXml(XmlNode node) + { + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = Xml.GetChildIntAttribute(node, "Unk02", "value"); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + Unk04 = Xml.GetChildFloatAttribute(node, "Unk04", "value"); + } + } + [TC(typeof(EXP))] public class Dat151Unk96Item : IMetaXmlItem + { + public MetaHash Unk01 { get; set; } + public float Unk02 { get; set; } + public int Unk03 { get; set; } + public int Unk04 { get; set; } + public float Unk05 { get; set; } + public float Unk06 { get; set; } + public int Unk07 { get; set; } + public MetaHash Unk08 { get; set; }//0 + public MetaHash Unk09 { get; set; } + public float Unk10 { get; set; } + public int Unk11 { get; set; } + public MetaHash Unk12 { get; set; }//0 + public MetaHash Unk13 { get; set; } + public float Unk14 { get; set; } + public int Unk15 { get; set; } + public MetaHash Unk16 { get; set; }//0 + public MetaHash Unk17 { get; set; } + public float Unk18 { get; set; } + public int Unk19 { get; set; } + public int Unk20 { get; set; } + public MetaHash Unk21 { get; set; } + public float Unk22 { get; set; } + public int Unk23 { get; set; } + public MetaHash Unk24 { get; set; }//0 + public float Unk25 { get; set; } + + public Dat151Unk96Item() + { } + public Dat151Unk96Item(BinaryReader br) + { + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadSingle(); + Unk03 = br.ReadInt32(); + Unk04 = br.ReadInt32(); + Unk05 = br.ReadSingle(); + Unk06 = br.ReadSingle(); + Unk07 = br.ReadInt32(); + Unk08 = br.ReadUInt32();//0 + Unk09 = br.ReadUInt32(); + Unk10 = br.ReadSingle(); + Unk11 = br.ReadInt32(); + Unk12 = br.ReadUInt32();//0 + Unk13 = br.ReadUInt32(); + Unk14 = br.ReadSingle(); + Unk15 = br.ReadInt32(); + Unk16 = br.ReadUInt32();//0 + Unk17 = br.ReadUInt32(); + Unk18 = br.ReadSingle(); + Unk19 = br.ReadInt32(); + Unk20 = br.ReadInt32(); + Unk21 = br.ReadUInt32(); + Unk22 = br.ReadSingle(); + Unk23 = br.ReadInt32(); + Unk24 = br.ReadUInt32();//0 + Unk25 = br.ReadSingle(); + + if (Unk08 != 0) + { } + if (Unk12 != 0) + { } + if (Unk16 != 0) + { } + if (Unk24 != 0) + { } + } + public void Write(BinaryWriter bw) + { + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); + bw.Write(Unk14); + bw.Write(Unk15); + bw.Write(Unk16); + bw.Write(Unk17); + bw.Write(Unk18); + bw.Write(Unk19); + bw.Write(Unk20); + bw.Write(Unk21); + bw.Write(Unk22); + bw.Write(Unk23); + bw.Write(Unk24); + bw.Write(Unk25); + } + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", FloatUtil.ToString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); + RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); + RelXml.ValueTag(sb, indent, "Unk05", FloatUtil.ToString(Unk05)); + RelXml.ValueTag(sb, indent, "Unk06", FloatUtil.ToString(Unk06)); + RelXml.ValueTag(sb, indent, "Unk07", Unk07.ToString()); + RelXml.StringTag(sb, indent, "Unk08", RelXml.HashString(Unk08)); + RelXml.StringTag(sb, indent, "Unk09", RelXml.HashString(Unk09)); + RelXml.ValueTag(sb, indent, "Unk10", FloatUtil.ToString(Unk10)); + RelXml.ValueTag(sb, indent, "Unk11", Unk11.ToString()); + RelXml.StringTag(sb, indent, "Unk12", RelXml.HashString(Unk12)); + RelXml.StringTag(sb, indent, "Unk13", RelXml.HashString(Unk13)); + RelXml.ValueTag(sb, indent, "Unk14", FloatUtil.ToString(Unk14)); + RelXml.ValueTag(sb, indent, "Unk15", Unk15.ToString()); + RelXml.StringTag(sb, indent, "Unk16", RelXml.HashString(Unk16)); + RelXml.StringTag(sb, indent, "Unk17", RelXml.HashString(Unk17)); + RelXml.ValueTag(sb, indent, "Unk18", FloatUtil.ToString(Unk18)); + RelXml.ValueTag(sb, indent, "Unk19", Unk19.ToString()); + RelXml.ValueTag(sb, indent, "Unk20", Unk20.ToString()); + RelXml.StringTag(sb, indent, "Unk21", RelXml.HashString(Unk21)); + RelXml.ValueTag(sb, indent, "Unk22", FloatUtil.ToString(Unk22)); + RelXml.ValueTag(sb, indent, "Unk23", Unk23.ToString()); + RelXml.StringTag(sb, indent, "Unk24", RelXml.HashString(Unk24)); + RelXml.ValueTag(sb, indent, "Unk25", FloatUtil.ToString(Unk25)); + } + public void ReadXml(XmlNode node) + { + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = Xml.GetChildFloatAttribute(node, "Unk02", "value"); + Unk03 = Xml.GetChildIntAttribute(node, "Unk03", "value"); + Unk04 = Xml.GetChildIntAttribute(node, "Unk04", "value"); + Unk05 = Xml.GetChildFloatAttribute(node, "Unk05", "value"); + Unk06 = Xml.GetChildFloatAttribute(node, "Unk06", "value"); + Unk07 = Xml.GetChildIntAttribute(node, "Unk07", "value"); + Unk08 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk08")); + Unk09 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk09")); + Unk10 = Xml.GetChildFloatAttribute(node, "Unk10", "value"); + Unk11 = Xml.GetChildIntAttribute(node, "Unk11", "value"); + Unk12 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk12")); + Unk13 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk13")); + Unk14 = Xml.GetChildFloatAttribute(node, "Unk14", "value"); + Unk15 = Xml.GetChildIntAttribute(node, "Unk15", "value"); + Unk16 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk16")); + Unk17 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk17")); + Unk18 = Xml.GetChildFloatAttribute(node, "Unk18", "value"); + Unk19 = Xml.GetChildIntAttribute(node, "Unk19", "value"); + Unk20 = Xml.GetChildIntAttribute(node, "Unk20", "value"); + Unk21 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk21")); + Unk22 = Xml.GetChildFloatAttribute(node, "Unk22", "value"); + Unk23 = Xml.GetChildIntAttribute(node, "Unk23", "value"); + Unk24 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk24")); + Unk25 = Xml.GetChildFloatAttribute(node, "Unk25", "value"); + } + public override string ToString() + { + return Unk01.ToString(); + } + } + [TC(typeof(EXP))] public class Dat151Unk96 : Dat151RelData + { + public float Unk01 { get; set; } + public float Unk02 { get; set; } + public float Unk03 { get; set; } + public float Unk04 { get; set; } + public float Unk05 { get; set; } + public int ItemCount { get; set; } + public Dat151Unk96Item[] Items { get; set; } + + public Dat151Unk96(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk96; + TypeID = (byte)Type; + } + public Dat151Unk96(RelData d, BinaryReader br) : base(d, br) + { + Unk01 = br.ReadSingle(); + Unk02 = br.ReadSingle(); + Unk03 = br.ReadSingle(); + Unk04 = br.ReadSingle(); + Unk05 = br.ReadSingle(); + ItemCount = br.ReadInt32(); + Items = new Dat151Unk96Item[ItemCount]; + for (int i = 0; i < ItemCount; i++) + { + Items[i] = new Dat151Unk96Item(br); + } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) + { + Items[i].Write(bw); + } + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk01", FloatUtil.ToString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", FloatUtil.ToString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", FloatUtil.ToString(Unk03)); + RelXml.ValueTag(sb, indent, "Unk04", FloatUtil.ToString(Unk04)); + RelXml.ValueTag(sb, indent, "Unk05", FloatUtil.ToString(Unk05)); + RelXml.WriteItemArray(sb, Items, indent, "Items"); + } + public override void ReadXml(XmlNode node) + { + Unk01 = Xml.GetChildFloatAttribute(node, "Unk01", "value"); + Unk02 = Xml.GetChildFloatAttribute(node, "Unk02", "value"); + Unk03 = Xml.GetChildFloatAttribute(node, "Unk03", "value"); + Unk04 = Xml.GetChildFloatAttribute(node, "Unk04", "value"); + Unk05 = Xml.GetChildFloatAttribute(node, "Unk05", "value"); + Items = XmlRel.ReadItemArray(node, "Items"); + ItemCount = (Items?.Length ?? 0); + } + } + [TC(typeof(EXP))] public class Dat151Unk99 : Dat151RelData + { + public float Unk01 { get; set; } + + public Dat151Unk99(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk99; + TypeID = (byte)Type; + } + public Dat151Unk99(RelData d, BinaryReader br) : base(d, br) + { + Unk01 = br.ReadSingle(); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Unk01", FloatUtil.ToString(Unk01)); + } + public override void ReadXml(XmlNode node) + { + Unk01 = Xml.GetChildFloatAttribute(node, "Unk01", "value"); + } + } + [TC(typeof(EXP))] public class Dat151Unk100 : Dat151RelData + { + public FlagsUint Flags { get; set; } + public float Unk01 { get; set; } + public float Unk02 { get; set; } + public float Unk03 { get; set; } + public float Unk04 { get; set; } + public MetaHash Unk05 { get; set; } + public MetaHash Unk06 { get; set; } + public MetaHash Unk07 { get; set; } + public float Unk08 { get; set; } + public int Unk09 { get; set; } + public float Unk10 { get; set; } + public int Unk11 { get; set; } + public float Unk12 { get; set; } + public float Unk13 { get; set; } + public float Unk14 { get; set; } + public float Unk15 { get; set; } + public float Unk16 { get; set; } + public float Unk17 { get; set; } + public MetaHash Unk18 { get; set; } + + public Dat151Unk100(RelFile rel) : base(rel) + { + Type = Dat151RelType.Unk100; + TypeID = (byte)Type; + } + public Dat151Unk100(RelData d, BinaryReader br) : base(d, br) + { + Flags = br.ReadUInt32(); + Unk01 = br.ReadSingle(); + Unk02 = br.ReadSingle(); + Unk03 = br.ReadSingle(); + Unk04 = br.ReadSingle(); + Unk05 = br.ReadUInt32(); + Unk06 = br.ReadUInt32(); + Unk07 = br.ReadUInt32(); + Unk08 = br.ReadSingle(); + Unk09 = br.ReadInt32(); + Unk10 = br.ReadSingle(); + Unk11 = br.ReadInt32(); + Unk12 = br.ReadSingle(); + Unk13 = br.ReadSingle(); + Unk14 = br.ReadSingle(); + Unk15 = br.ReadSingle(); + Unk16 = br.ReadSingle(); + Unk17 = br.ReadSingle(); + Unk18 = br.ReadUInt32(); + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffset(bw); + + bw.Write(Flags); + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); + bw.Write(Unk14); + bw.Write(Unk15); + bw.Write(Unk16); + bw.Write(Unk17); + bw.Write(Unk18); + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.ValueTag(sb, indent, "Unk01", FloatUtil.ToString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", FloatUtil.ToString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", FloatUtil.ToString(Unk03)); + RelXml.ValueTag(sb, indent, "Unk04", FloatUtil.ToString(Unk04)); + RelXml.StringTag(sb, indent, "Unk05", RelXml.HashString(Unk05)); + RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); + RelXml.StringTag(sb, indent, "Unk07", RelXml.HashString(Unk07)); + RelXml.ValueTag(sb, indent, "Unk08", FloatUtil.ToString(Unk08)); + RelXml.ValueTag(sb, indent, "Unk09", Unk09.ToString()); + RelXml.ValueTag(sb, indent, "Unk10", FloatUtil.ToString(Unk10)); + RelXml.ValueTag(sb, indent, "Unk11", Unk11.ToString()); + RelXml.ValueTag(sb, indent, "Unk12", FloatUtil.ToString(Unk12)); + RelXml.ValueTag(sb, indent, "Unk13", FloatUtil.ToString(Unk13)); + RelXml.ValueTag(sb, indent, "Unk14", FloatUtil.ToString(Unk14)); + RelXml.ValueTag(sb, indent, "Unk15", FloatUtil.ToString(Unk15)); + RelXml.ValueTag(sb, indent, "Unk16", FloatUtil.ToString(Unk16)); + RelXml.ValueTag(sb, indent, "Unk17", FloatUtil.ToString(Unk17)); + RelXml.StringTag(sb, indent, "Unk18", RelXml.HashString(Unk18)); + } + public override void ReadXml(XmlNode node) + { + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = Xml.GetChildFloatAttribute(node, "Unk01", "value"); + Unk02 = Xml.GetChildFloatAttribute(node, "Unk02", "value"); + Unk03 = Xml.GetChildFloatAttribute(node, "Unk03", "value"); + Unk04 = Xml.GetChildFloatAttribute(node, "Unk04", "value"); + Unk05 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk05")); + Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); + Unk07 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk07")); + Unk08 = Xml.GetChildFloatAttribute(node, "Unk08", "value"); + Unk09 = Xml.GetChildIntAttribute(node, "Unk09", "value"); + Unk10 = Xml.GetChildFloatAttribute(node, "Unk10", "value"); + Unk11 = Xml.GetChildIntAttribute(node, "Unk11", "value"); + Unk12 = Xml.GetChildFloatAttribute(node, "Unk12", "value"); + Unk13 = Xml.GetChildFloatAttribute(node, "Unk13", "value"); + Unk14 = Xml.GetChildFloatAttribute(node, "Unk14", "value"); + Unk15 = Xml.GetChildFloatAttribute(node, "Unk15", "value"); + Unk16 = Xml.GetChildFloatAttribute(node, "Unk16", "value"); + Unk17 = Xml.GetChildFloatAttribute(node, "Unk17", "value"); + Unk18 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk18")); + } + } @@ -15255,627 +17507,6 @@ namespace CodeWalker.GameFiles //TODO classes - [TC(typeof(EXP))] public class Dat151Unk40 : Dat151RelData - { - public Dat151Unk40(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk40; - TypeID = (byte)Type; - } - public Dat151Unk40(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } - [TC(typeof(EXP))] public class Dat151Unk41 : Dat151RelData - { - public Dat151Unk41(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk41; - TypeID = (byte)Type; - } - public Dat151Unk41(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } - [TC(typeof(EXP))] public class Dat151Unk42 : Dat151RelData - { - public Dat151Unk42(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk42; - TypeID = (byte)Type; - } - public Dat151Unk42(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } - [TC(typeof(EXP))] public class Dat151Unk45 : Dat151RelData - { - public Dat151Unk45(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk45; - TypeID = (byte)Type; - } - public Dat151Unk45(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } - [TC(typeof(EXP))] public class Dat151Unk48 : Dat151RelData - { - public Dat151Unk48(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk48; - TypeID = (byte)Type; - } - public Dat151Unk48(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } - [TC(typeof(EXP))] public class Dat151Unk51 : Dat151RelData - { - public Dat151Unk51(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk51; - TypeID = (byte)Type; - } - public Dat151Unk51(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } - [TC(typeof(EXP))] public class Dat151Unk54 : Dat151RelData - { - public Dat151Unk54(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk54; - TypeID = (byte)Type; - } - public Dat151Unk54(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } - [TC(typeof(EXP))] public class Dat151Unk59 : Dat151RelData - { - public Dat151Unk59(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk59; - TypeID = (byte)Type; - } - public Dat151Unk59(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } - [TC(typeof(EXP))] public class Dat151Unk69 : Dat151RelData - { - public Dat151Unk69(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk69; - TypeID = (byte)Type; - } - public Dat151Unk69(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } - [TC(typeof(EXP))] public class Dat151Unk70 : Dat151RelData - { - public Dat151Unk70(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk70; - TypeID = (byte)Type; - } - public Dat151Unk70(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } - [TC(typeof(EXP))] public class Dat151Unk71 : Dat151RelData - { - public Dat151Unk71(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk71; - TypeID = (byte)Type; - } - public Dat151Unk71(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } - [TC(typeof(EXP))] public class Dat151Unk72 : Dat151RelData - { - public Dat151Unk72(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk72; - TypeID = (byte)Type; - } - public Dat151Unk72(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } - [TC(typeof(EXP))] public class Dat151Unk74 : Dat151RelData - { - public Dat151Unk74(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk74; - TypeID = (byte)Type; - } - public Dat151Unk74(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } - [TC(typeof(EXP))] public class Dat151Unk75 : Dat151RelData - { - public Dat151Unk75(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk75; - TypeID = (byte)Type; - } - public Dat151Unk75(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } - [TC(typeof(EXP))] public class Dat151Unk77 : Dat151RelData - { - public Dat151Unk77(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk77; - TypeID = (byte)Type; - } - public Dat151Unk77(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } - [TC(typeof(EXP))] public class Dat151Unk79 : Dat151RelData - { - public Dat151Unk79(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk79; - TypeID = (byte)Type; - } - public Dat151Unk79(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } - [TC(typeof(EXP))] public class Dat151Unk80 : Dat151RelData //vehicle record audio? (YVR) - { - public Dat151Unk80(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk80; - TypeID = (byte)Type; - } - public Dat151Unk80(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } - [TC(typeof(EXP))] public class Dat151Unk82 : Dat151RelData - { - public Dat151Unk82(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk82; - TypeID = (byte)Type; - } - public Dat151Unk82(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } - [TC(typeof(EXP))] public class Dat151Unk85 : Dat151RelData - { - public Dat151Unk85(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk85; - TypeID = (byte)Type; - } - public Dat151Unk85(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } - [TC(typeof(EXP))] public class Dat151Unk95 : Dat151RelData - { - public Dat151Unk95(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk95; - TypeID = (byte)Type; - } - public Dat151Unk95(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } - [TC(typeof(EXP))] public class Dat151Unk96 : Dat151RelData - { - public Dat151Unk96(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk96; - TypeID = (byte)Type; - } - public Dat151Unk96(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } - [TC(typeof(EXP))] public class Dat151Unk99 : Dat151RelData - { - public Dat151Unk99(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk99; - TypeID = (byte)Type; - } - public Dat151Unk99(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } - [TC(typeof(EXP))] public class Dat151Unk100 : Dat151RelData - { - public Dat151Unk100(RelFile rel) : base(rel) - { - Type = Dat151RelType.Unk100; - TypeID = (byte)Type; - } - public Dat151Unk100(RelData d, BinaryReader br) : base(d, br) - { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } - } - public override void Write(BinaryWriter bw) - { - //WriteTypeAndOffset(bw); - base.Write(bw); - } - public override void WriteXml(StringBuilder sb, int indent) - { - base.WriteXml(sb, indent); - } - public override void ReadXml(XmlNode node) - { - base.ReadXml(node); - } - } [TC(typeof(EXP))] public class Dat151Unk101 : Dat151RelData { public Dat151Unk101(RelFile rel) : base(rel) From e49c1413c3f145ccba4984739c31e5bd53ee742a Mon Sep 17 00:00:00 2001 From: dexyfex Date: Thu, 7 Mar 2019 16:46:42 +1100 Subject: [PATCH 146/158] Dat151 progress --- .../GameFiles/FileTypes/RelFile.cs | 1612 +++++++++++++++-- 1 file changed, 1441 insertions(+), 171 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index a9853de..b7a39ac 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -567,7 +567,7 @@ namespace CodeWalker.GameFiles case Dat151RelType.InteriorRoom: return new Dat151InteriorRoom(d, br); case Dat151RelType.Unk117: return new Dat151Unk117(d, br); case Dat151RelType.Entity: return new Dat151Entity(d, br); //not sure about this - case Dat151RelType.Unk47: return new Dat151Unk47(d, br); + case Dat151RelType.Door: return new Dat151Door(d, br); case Dat151RelType.Unk83: return new Dat151Unk83(d, br); case Dat151RelType.RadioDjSpeechAction: return new Dat151RadioDjSpeechAction(d, br); case Dat151RelType.ForceRadioTrackAction: return new Dat151ForceRadioTrackAction(d, br); @@ -576,7 +576,7 @@ namespace CodeWalker.GameFiles case Dat151RelType.RadioStation: return new Dat151RadioStation(d, br); case Dat151RelType.RadioMusic: return new Dat151RadioMusic(d, br); case Dat151RelType.RadioTrackList: return new Dat151RadioTrackList(d, br); - case Dat151RelType.Unk49: return new Dat151Unk49(d, br); + case Dat151RelType.DoorParams: return new Dat151DoorParams(d, br); case Dat151RelType.Unk84: return new Dat151Unk84(d, br); case Dat151RelType.Unk86: return new Dat151Unk86(d, br); case Dat151RelType.Unk81: return new Dat151Unk81(d, br); @@ -642,25 +642,23 @@ namespace CodeWalker.GameFiles case Dat151RelType.Unk96: return new Dat151Unk96(d, br); case Dat151RelType.Unk99: return new Dat151Unk99(d, br); case Dat151RelType.Unk100: return new Dat151Unk100(d, br); - - //case Dat151RelType.Unk101: return new Dat151Unk101(d, br); - //case Dat151RelType.Unk105: return new Dat151Unk105(d, br); - //case Dat151RelType.Unk106: return new Dat151Unk106(d, br); - //case Dat151RelType.Unk107: return new Dat151Unk107(d, br); - //case Dat151RelType.Unk108: return new Dat151Unk108(d, br); - //case Dat151RelType.Unk109: return new Dat151Unk109(d, br); - //case Dat151RelType.Unk110: return new Dat151Unk110(d, br); - //case Dat151RelType.Unk111: return new Dat151Unk111(d, br); - //case Dat151RelType.Unk112: return new Dat151Unk112(d, br); - //case Dat151RelType.Unk113: return new Dat151Unk113(d, br); - //case Dat151RelType.Unk115: return new Dat151Unk115(d, br); - //case Dat151RelType.Unk116: return new Dat151Unk116(d, br); - //case Dat151RelType.Unk118: return new Dat151Unk118(d, br); - //case Dat151RelType.Unk119: return new Dat151Unk119(d, br); - //case Dat151RelType.Unk121: return new Dat151Unk121(d, br); - + case Dat151RelType.Alarm: return new Dat151Alarm(d, br); + case Dat151RelType.Unk105: return new Dat151Unk105(d, br); + case Dat151RelType.Scenario: return new Dat151Scenario(d, br); + case Dat151RelType.Unk107: return new Dat151Unk107(d, br); + case Dat151RelType.Unk108: return new Dat151Unk108(d, br); + case Dat151RelType.Unk109: return new Dat151Unk109(d, br); + case Dat151RelType.Unk110: return new Dat151Unk110(d, br); + case Dat151RelType.Unk111: return new Dat151Unk111(d, br); + case Dat151RelType.Unk112: return new Dat151Unk112(d, br); + case Dat151RelType.Unk113: return new Dat151Unk113(d, br); + case Dat151RelType.Unk115: return new Dat151Unk115(d, br); + case Dat151RelType.Unk116: return new Dat151Unk116(d, br); + case Dat151RelType.Unk118: return new Dat151Unk118(d, br); + case Dat151RelType.Unk119: return new Dat151Unk119(d, br); + case Dat151RelType.MacsModelsOverrides: return new Dat151MacsModelsOverrides(d, br); default: - return new Dat151RelData(d, br); + return new Dat151RelData(d, br); //shouldn't get here } } @@ -735,8 +733,8 @@ namespace CodeWalker.GameFiles case Dat151RelType.Interior: return new Dat151Interior(this); case Dat151RelType.InteriorRoom: return new Dat151InteriorRoom(this); case Dat151RelType.Unk117: return new Dat151Unk117(this); - case Dat151RelType.Entity: return new Dat151Entity(this); //not sure about this - case Dat151RelType.Unk47: return new Dat151Unk47(this); + case Dat151RelType.Entity: return new Dat151Entity(this); + case Dat151RelType.Door: return new Dat151Door(this); case Dat151RelType.Unk83: return new Dat151Unk83(this); case Dat151RelType.RadioDjSpeechAction: return new Dat151RadioDjSpeechAction(this); case Dat151RelType.ForceRadioTrackAction: return new Dat151ForceRadioTrackAction(this); @@ -745,7 +743,7 @@ namespace CodeWalker.GameFiles case Dat151RelType.RadioStation: return new Dat151RadioStation(this); case Dat151RelType.RadioMusic: return new Dat151RadioMusic(this); case Dat151RelType.RadioTrackList: return new Dat151RadioTrackList(this); - case Dat151RelType.Unk49: return new Dat151Unk49(this); + case Dat151RelType.DoorParams: return new Dat151DoorParams(this); case Dat151RelType.Unk84: return new Dat151Unk84(this); case Dat151RelType.Unk86: return new Dat151Unk86(this); case Dat151RelType.Unk81: return new Dat151Unk81(this); @@ -811,25 +809,23 @@ namespace CodeWalker.GameFiles case Dat151RelType.Unk96: return new Dat151Unk96(this); case Dat151RelType.Unk99: return new Dat151Unk99(this); case Dat151RelType.Unk100: return new Dat151Unk100(this); - - //case Dat151RelType.Unk101: return new Dat151Unk101(this); - //case Dat151RelType.Unk105: return new Dat151Unk105(this); - //case Dat151RelType.Unk106: return new Dat151Unk106(this); - //case Dat151RelType.Unk107: return new Dat151Unk107(this); - //case Dat151RelType.Unk108: return new Dat151Unk108(this); - //case Dat151RelType.Unk109: return new Dat151Unk109(this); - //case Dat151RelType.Unk110: return new Dat151Unk110(this); - //case Dat151RelType.Unk111: return new Dat151Unk111(this); - //case Dat151RelType.Unk112: return new Dat151Unk112(this); - //case Dat151RelType.Unk113: return new Dat151Unk113(this); - //case Dat151RelType.Unk115: return new Dat151Unk115(this); - //case Dat151RelType.Unk116: return new Dat151Unk116(this); - //case Dat151RelType.Unk118: return new Dat151Unk118(this); - //case Dat151RelType.Unk119: return new Dat151Unk119(this); - //case Dat151RelType.Unk121: return new Dat151Unk121(this); - + case Dat151RelType.Alarm: return new Dat151Alarm(this); + case Dat151RelType.Unk105: return new Dat151Unk105(this); + case Dat151RelType.Scenario: return new Dat151Scenario(this); + case Dat151RelType.Unk107: return new Dat151Unk107(this); + case Dat151RelType.Unk108: return new Dat151Unk108(this); + case Dat151RelType.Unk109: return new Dat151Unk109(this); + case Dat151RelType.Unk110: return new Dat151Unk110(this); + case Dat151RelType.Unk111: return new Dat151Unk111(this); + case Dat151RelType.Unk112: return new Dat151Unk112(this); + case Dat151RelType.Unk113: return new Dat151Unk113(this); + case Dat151RelType.Unk115: return new Dat151Unk115(this); + case Dat151RelType.Unk116: return new Dat151Unk116(this); + case Dat151RelType.Unk118: return new Dat151Unk118(this); + case Dat151RelType.Unk119: return new Dat151Unk119(this); + case Dat151RelType.MacsModelsOverrides: return new Dat151MacsModelsOverrides(this); default: - return new Dat151RelData(this, (Dat151RelType)dataType); + return new Dat151RelData(this, (Dat151RelType)dataType); //shouldn't get here } case RelDatFileType.Dat4: if (IsAudioConfig) @@ -952,7 +948,7 @@ namespace CodeWalker.GameFiles { case Dat151RelType.AmbientEmitter: case Dat151RelType.AmbientZone: - case Dat151RelType.Unk101: + case Dat151RelType.Alarm: case Dat151RelType.Unk35: while ((ms.Position & 0xF) != 0) bw.Write((byte)0); //align to nearest 16 bytes break; @@ -4841,9 +4837,9 @@ namespace CodeWalker.GameFiles Interior = 44, Unk45 = 45, InteriorRoom = 46, - Unk47 = 47, //door? + Door = 47, Unk48 = 48, - Unk49 = 49, //doors/gates? - DoorParams + DoorParams = 49, //doors/gates WeaponAudioItem = 50, Unk51 = 51, Mod = 52, //what actually is a "mod" here? a change in some audio settings maybe? @@ -4890,16 +4886,16 @@ namespace CodeWalker.GameFiles RadioDjSpeechAction = 98, Unk99 = 99, Unk100 = 100, - Unk101 = 101, + Alarm = 101, FadeOutRadioAction = 102, FadeInRadioAction = 103, ForceRadioTrackAction = 104, Unk105 = 105, - Unk106 = 106, //scenario type, eg world_human_musician + Scenario = 106, //eg world_human_musician Unk107 = 107, Unk108 = 108, Unk109 = 109, - Unk110 = 110, + Unk110 = 110, //conversation/speech related - for scenarios? Unk111 = 111, Unk112 = 112, Unk113 = 113, @@ -4908,9 +4904,9 @@ namespace CodeWalker.GameFiles Unk116 = 116, Unk117 = 117, Unk118 = 118, - Unk119 = 119, //prop_bush..? + Unk119 = 119, //prop_bush_lrg_02 RadioTrackList = 120, //radio track list? - Unk121 = 121, + MacsModelsOverrides = 121, //macs_models_overrides } [TC(typeof(EXP))] public class Dat151RelData : RelData @@ -8476,18 +8472,18 @@ namespace CodeWalker.GameFiles else return null; } } - [TC(typeof(EXP))] public class Dat151Unk47 : Dat151RelData + [TC(typeof(EXP))] public class Dat151Door : Dat151RelData { public FlagsUint Unk0 { get; set; } public MetaHash AudioTrack0 { get; set; } public float Unk1 { get; set; } - public Dat151Unk47(RelFile rel) : base(rel) + public Dat151Door(RelFile rel) : base(rel) { - Type = Dat151RelType.Unk47; + Type = Dat151RelType.Door; TypeID = (byte)Type; } - public Dat151Unk47(RelData d, BinaryReader br) : base(d, br) + public Dat151Door(RelData d, BinaryReader br) : base(d, br) { Unk0 = br.ReadUInt32(); AudioTrack0 = br.ReadUInt32(); @@ -8813,17 +8809,17 @@ namespace CodeWalker.GameFiles return offsets.ToArray(); } } - [TC(typeof(EXP))] public class Dat151Unk49 : Dat151RelData //doors/gates? - DoorParams + [TC(typeof(EXP))] public class Dat151DoorParams : Dat151RelData //doors/gates { public uint AudioItemCount { get; set; } public Dat151HashPair[] AudioItems { get; set; } - public Dat151Unk49(RelFile rel) : base(rel) + public Dat151DoorParams(RelFile rel) : base(rel) { - Type = Dat151RelType.Unk49; + Type = Dat151RelType.DoorParams; TypeID = (byte)Type; } - public Dat151Unk49(RelData d, BinaryReader br) : base(d, br) + public Dat151DoorParams(RelData d, BinaryReader br) : base(d, br) { AudioItemCount = br.ReadUInt32(); var items = new Dat151HashPair[AudioItemCount]; @@ -17497,45 +17493,94 @@ namespace CodeWalker.GameFiles Unk18 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk18")); } } - - - - - - - - - - //TODO classes - [TC(typeof(EXP))] public class Dat151Unk101 : Dat151RelData + [TC(typeof(EXP))] public class Dat151Alarm : Dat151RelData { - public Dat151Unk101(RelFile rel) : base(rel) + public MetaHash Unk01 { get; set; } + public MetaHash Unk02 { get; set; } + public int Unk03 { get; set; } + public MetaHash Interior { get; set; }//interior name: v_jewel2 + public MetaHash Alarm { get; set; }//alarm sound: script/alarm_bell_01 + public MetaHash Unk04 { get; set; }//0 + public MetaHash Unk05 { get; set; }//0 + public Vector3 Position { get; set; } + public MetaHash Unk06 { get; set; }//0 + + public Dat151Alarm(RelFile rel) : base(rel) { - Type = Dat151RelType.Unk101; + Type = Dat151RelType.Alarm; TypeID = (byte)Type; } - public Dat151Unk101(RelData d, BinaryReader br) : base(d, br) + public Dat151Alarm(RelData d, BinaryReader br) : base(d, br) { + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadUInt32(); + Unk03 = br.ReadInt32(); + Interior = br.ReadUInt32();//interior name: v_jewel2 + Alarm = br.ReadUInt32();//alarm sound: script/alarm_bell_01 + Unk04 = br.ReadUInt32();//0 + Unk05 = br.ReadUInt32();//0 + Position = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); + Unk06 = br.ReadUInt32();//0 + + if (Unk04 != 0) + { } + if (Unk05 != 0) + { } + if (Unk06 != 0) + { } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffset(bw); - base.Write(bw); + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Interior); + bw.Write(Alarm); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Position.X); + bw.Write(Position.Y); + bw.Write(Position.Z); + bw.Write(Unk06); } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); + RelXml.StringTag(sb, indent, "Interior", RelXml.HashString(Interior)); + RelXml.StringTag(sb, indent, "Alarm", RelXml.HashString(Alarm)); + RelXml.StringTag(sb, indent, "Unk04", RelXml.HashString(Unk04)); + RelXml.StringTag(sb, indent, "Unk05", RelXml.HashString(Unk05)); + RelXml.SelfClosingTag(sb, indent, "Position " + FloatUtil.GetVector3XmlString(Position)); + RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Unk03 = Xml.GetChildIntAttribute(node, "Unk03", "value"); + Interior = XmlRel.GetHash(Xml.GetChildInnerText(node, "Interior")); + Alarm = XmlRel.GetHash(Xml.GetChildInnerText(node, "Alarm")); + Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk04")); + Unk05 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk05")); + Position = Xml.GetChildVector3Attributes(node, "Position", "x", "y", "z"); + Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); } } [TC(typeof(EXP))] public class Dat151Unk105 : Dat151RelData { + public MetaHash Unk01 { get; set; } + public int Unk02 { get; set; } + public MetaHash Unk03 { get; set; }//0 + public MetaHash Unk04 { get; set; } + public Dat151Unk105(RelFile rel) : base(rel) { Type = Dat151RelType.Unk105; @@ -17543,53 +17588,109 @@ namespace CodeWalker.GameFiles } public Dat151Unk105(RelData d, BinaryReader br) : base(d, br) { + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadInt32(); + Unk03 = br.ReadUInt32();//0 + Unk04 = br.ReadUInt32(); + + if (Unk03 != 0) + { } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffset(bw); - base.Write(bw); + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); + RelXml.StringTag(sb, indent, "Unk04", RelXml.HashString(Unk04)); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = Xml.GetChildIntAttribute(node, "Unk02", "value"); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk04")); } } - [TC(typeof(EXP))] public class Dat151Unk106 : Dat151RelData + [TC(typeof(EXP))] public class Dat151Scenario : Dat151RelData //eg world_human_musician { - public Dat151Unk106(RelFile rel) : base(rel) + public FlagsUint Flags { get; set; } + public int Unk01 { get; set; } + public MetaHash Unk02 { get; set; } + public float Unk03 { get; set; } + public int ItemCount { get; set; } + public Dat151HashPair[] Items { get; set; } + + public Dat151Scenario(RelFile rel) : base(rel) { - Type = Dat151RelType.Unk106; + Type = Dat151RelType.Scenario; TypeID = (byte)Type; } - public Dat151Unk106(RelData d, BinaryReader br) : base(d, br) + public Dat151Scenario(RelData d, BinaryReader br) : base(d, br) { + Flags = br.ReadUInt32(); + Unk01 = br.ReadInt32(); + Unk02 = br.ReadUInt32(); + Unk03 = br.ReadSingle(); + ItemCount = br.ReadInt32(); + Items = new Dat151HashPair[ItemCount]; + for (int i = 0; i < ItemCount; i++) + { + Items[i] = new Dat151HashPair(br); + } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffset(bw); - base.Write(bw); + WriteTypeAndOffset(bw); + + bw.Write(Flags); + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) + { + Items[i].Write(bw); + } } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", FloatUtil.ToString(Unk03)); + RelXml.WriteItemArray(sb, Items, indent, "Items"); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = Xml.GetChildIntAttribute(node, "Unk01", "value"); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Unk03 = Xml.GetChildFloatAttribute(node, "Unk03", "value"); + Items = XmlRel.ReadItemArray(node, "Items"); + ItemCount = (Items?.Length ?? 0); } } [TC(typeof(EXP))] public class Dat151Unk107 : Dat151RelData { + public float Unk01 { get; set; } + public Dat151Unk107(RelFile rel) : base(rel) { Type = Dat151RelType.Unk107; @@ -17597,26 +17698,46 @@ namespace CodeWalker.GameFiles } public Dat151Unk107(RelData d, BinaryReader br) : base(d, br) { + Unk01 = br.ReadSingle(); + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffset(bw); - base.Write(bw); + WriteTypeAndOffset(bw); + + bw.Write(Unk01); } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Unk01", FloatUtil.ToString(Unk01)); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Unk01 = Xml.GetChildFloatAttribute(node, "Unk01", "value"); } } [TC(typeof(EXP))] public class Dat151Unk108 : Dat151RelData { + public int Unk01 { get; set; } + public MetaHash Unk02 { get; set; } + public int Unk03 { get; set; } + public int Unk04 { get; set; } + public int Unk05 { get; set; } + public MetaHash Unk06 { get; set; } + public int Unk07 { get; set; } + public int Unk08 { get; set; } + public int Unk09 { get; set; } + public int Unk10 { get; set; } + public MetaHash Unk11 { get; set; } + public int Unk12 { get; set; } + public int Unk13 { get; set; } + public int Unk14 { get; set; } + public MetaHash Unk15 { get; set; } + public MetaHash Unk16 { get; set; } + public Dat151Unk108(RelFile rel) : base(rel) { Type = Dat151RelType.Unk108; @@ -17624,26 +17745,108 @@ namespace CodeWalker.GameFiles } public Dat151Unk108(RelData d, BinaryReader br) : base(d, br) { + Unk01 = br.ReadInt32(); + Unk02 = br.ReadUInt32(); + Unk03 = br.ReadInt32(); + Unk04 = br.ReadInt32(); + Unk05 = br.ReadInt32(); + Unk06 = br.ReadUInt32(); + Unk07 = br.ReadInt32(); + Unk08 = br.ReadInt32(); + Unk09 = br.ReadInt32(); + Unk10 = br.ReadInt32(); + Unk11 = br.ReadUInt32(); + Unk12 = br.ReadInt32(); + Unk13 = br.ReadInt32(); + Unk14 = br.ReadInt32(); + Unk15 = br.ReadUInt32(); + Unk16 = br.ReadUInt32(); + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffset(bw); - base.Write(bw); + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); + bw.Write(Unk14); + bw.Write(Unk15); + bw.Write(Unk16); } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); + RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); + RelXml.ValueTag(sb, indent, "Unk05", Unk05.ToString()); + RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); + RelXml.ValueTag(sb, indent, "Unk07", Unk07.ToString()); + RelXml.ValueTag(sb, indent, "Unk08", Unk08.ToString()); + RelXml.ValueTag(sb, indent, "Unk09", Unk09.ToString()); + RelXml.ValueTag(sb, indent, "Unk10", Unk10.ToString()); + RelXml.StringTag(sb, indent, "Unk11", RelXml.HashString(Unk11)); + RelXml.ValueTag(sb, indent, "Unk12", Unk12.ToString()); + RelXml.ValueTag(sb, indent, "Unk13", Unk13.ToString()); + RelXml.ValueTag(sb, indent, "Unk14", Unk14.ToString()); + RelXml.StringTag(sb, indent, "Unk15", RelXml.HashString(Unk15)); + RelXml.StringTag(sb, indent, "Unk16", RelXml.HashString(Unk16)); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Unk01 = Xml.GetChildIntAttribute(node, "Unk01", "value"); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Unk03 = Xml.GetChildIntAttribute(node, "Unk03", "value"); + Unk04 = Xml.GetChildIntAttribute(node, "Unk04", "value"); + Unk05 = Xml.GetChildIntAttribute(node, "Unk05", "value"); + Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); + Unk07 = Xml.GetChildIntAttribute(node, "Unk07", "value"); + Unk08 = Xml.GetChildIntAttribute(node, "Unk08", "value"); + Unk09 = Xml.GetChildIntAttribute(node, "Unk09", "value"); + Unk10 = Xml.GetChildIntAttribute(node, "Unk10", "value"); + Unk11 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk11")); + Unk12 = Xml.GetChildIntAttribute(node, "Unk12", "value"); + Unk13 = Xml.GetChildIntAttribute(node, "Unk13", "value"); + Unk14 = Xml.GetChildIntAttribute(node, "Unk14", "value"); + Unk15 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk15")); + Unk16 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk16")); } } [TC(typeof(EXP))] public class Dat151Unk109 : Dat151RelData { + public int Unk01 { get; set; } + public int Unk02 { get; set; } + public int Unk03 { get; set; }//0 + public int Unk04 { get; set; } + public int Unk05 { get; set; } + public int Unk06 { get; set; } + public int Unk07 { get; set; } + public int Unk08 { get; set; } + public int Unk09 { get; set; } + public int Unk10 { get; set; } + public int Unk11 { get; set; } + public int Unk12 { get; set; } + public int Unk13 { get; set; } + public int Unk14 { get; set; } + public int Unk15 { get; set; } + public int Unk16 { get; set; } + public int Unk17 { get; set; } + public int Unk18 { get; set; } + public Dat151Unk109(RelFile rel) : base(rel) { Type = Dat151RelType.Unk109; @@ -17651,26 +17854,148 @@ namespace CodeWalker.GameFiles } public Dat151Unk109(RelData d, BinaryReader br) : base(d, br) { + Unk01 = br.ReadInt32(); + Unk02 = br.ReadInt32(); + Unk03 = br.ReadInt32();//0 + Unk04 = br.ReadInt32(); + Unk05 = br.ReadInt32(); + Unk06 = br.ReadInt32(); + Unk07 = br.ReadInt32(); + Unk08 = br.ReadInt32(); + Unk09 = br.ReadInt32(); + Unk10 = br.ReadInt32(); + Unk11 = br.ReadInt32(); + Unk12 = br.ReadInt32(); + Unk13 = br.ReadInt32(); + Unk14 = br.ReadInt32(); + Unk15 = br.ReadInt32(); + Unk16 = br.ReadInt32(); + Unk17 = br.ReadInt32(); + Unk18 = br.ReadInt32(); + + if (Unk03 != 0) + { } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffset(bw); - base.Write(bw); + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); + bw.Write(Unk14); + bw.Write(Unk15); + bw.Write(Unk16); + bw.Write(Unk17); + bw.Write(Unk18); } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); + RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); + RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); + RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); + RelXml.ValueTag(sb, indent, "Unk05", Unk05.ToString()); + RelXml.ValueTag(sb, indent, "Unk06", Unk06.ToString()); + RelXml.ValueTag(sb, indent, "Unk07", Unk07.ToString()); + RelXml.ValueTag(sb, indent, "Unk08", Unk08.ToString()); + RelXml.ValueTag(sb, indent, "Unk09", Unk09.ToString()); + RelXml.ValueTag(sb, indent, "Unk10", Unk10.ToString()); + RelXml.ValueTag(sb, indent, "Unk11", Unk11.ToString()); + RelXml.ValueTag(sb, indent, "Unk12", Unk12.ToString()); + RelXml.ValueTag(sb, indent, "Unk13", Unk13.ToString()); + RelXml.ValueTag(sb, indent, "Unk14", Unk14.ToString()); + RelXml.ValueTag(sb, indent, "Unk15", Unk15.ToString()); + RelXml.ValueTag(sb, indent, "Unk16", Unk16.ToString()); + RelXml.ValueTag(sb, indent, "Unk17", Unk17.ToString()); + RelXml.ValueTag(sb, indent, "Unk18", Unk18.ToString()); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Unk01 = Xml.GetChildIntAttribute(node, "Unk01", "value"); + Unk02 = Xml.GetChildIntAttribute(node, "Unk02", "value"); + Unk03 = Xml.GetChildIntAttribute(node, "Unk03", "value"); + Unk04 = Xml.GetChildIntAttribute(node, "Unk04", "value"); + Unk05 = Xml.GetChildIntAttribute(node, "Unk05", "value"); + Unk06 = Xml.GetChildIntAttribute(node, "Unk06", "value"); + Unk07 = Xml.GetChildIntAttribute(node, "Unk07", "value"); + Unk08 = Xml.GetChildIntAttribute(node, "Unk08", "value"); + Unk09 = Xml.GetChildIntAttribute(node, "Unk09", "value"); + Unk10 = Xml.GetChildIntAttribute(node, "Unk10", "value"); + Unk11 = Xml.GetChildIntAttribute(node, "Unk11", "value"); + Unk12 = Xml.GetChildIntAttribute(node, "Unk12", "value"); + Unk13 = Xml.GetChildIntAttribute(node, "Unk13", "value"); + Unk14 = Xml.GetChildIntAttribute(node, "Unk14", "value"); + Unk15 = Xml.GetChildIntAttribute(node, "Unk15", "value"); + Unk16 = Xml.GetChildIntAttribute(node, "Unk16", "value"); + Unk17 = Xml.GetChildIntAttribute(node, "Unk17", "value"); + Unk18 = Xml.GetChildIntAttribute(node, "Unk18", "value"); } } - [TC(typeof(EXP))] public class Dat151Unk110 : Dat151RelData + [TC(typeof(EXP))] public class Dat151Unk110Item : IMetaXmlItem { + public string Name { get; set; } //eg AGREE_ACROSS_STREET + public byte Unk1 { get; set; }// 1 or 255(-1?) + + public override string ToString() + { + return Name + ", " + Unk1.ToString(); + } + + public Dat151Unk110Item() + { + } + public Dat151Unk110Item(BinaryReader br) + { + var data = br.ReadBytes(32); + Name = Encoding.ASCII.GetString(data).Replace("\0", ""); + Unk1 = br.ReadByte(); + } + public void Write(BinaryWriter bw) + { + var data = new byte[32]; + int len = Math.Min(Name?.Length ?? 0, 32); + if (len > 0) + { + Encoding.ASCII.GetBytes(Name, 0, len, data, 0); + } + bw.Write(data); + bw.Write(Unk1); + } + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Name", Name.Replace("\n", "\\n"));//hacky escape + RelXml.ValueTag(sb, indent, "Unk1", Unk1.ToString()); + } + public void ReadXml(XmlNode node) + { + Name = Xml.GetChildInnerText(node, "Name").Replace("\\n", "\n");//hacky unescape + Unk1 = (byte)Xml.GetChildUIntAttribute(node, "Unk1", "value"); + } + } + [TC(typeof(EXP))] public class Dat151Unk110 : Dat151RelData //conversation/speech related - for scenarios? + { + public MetaHash Unk01 { get; set; } + public short Unk02 { get; set; } + public short Unk03 { get; set; } + public float Unk04 { get; set; } + public byte ItemCount { get; set; } + public Dat151Unk110Item[] Items { get; set; } + public Dat151Unk110(RelFile rel) : base(rel) { Type = Dat151RelType.Unk110; @@ -17678,26 +18003,129 @@ namespace CodeWalker.GameFiles } public Dat151Unk110(RelData d, BinaryReader br) : base(d, br) { + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadInt16(); + Unk03 = br.ReadInt16(); + Unk04 = br.ReadSingle(); + ItemCount = br.ReadByte(); + Items = new Dat151Unk110Item[ItemCount]; + for (int i = 0; i < ItemCount; i++) + { + Items[i] = new Dat151Unk110Item(br); + } + + var brem = (4 - ((ItemCount + 1) % 4)) % 4; + var pads = br.ReadBytes(brem); //read padding bytes + foreach (var b in pads) + { + if (b != 0) + { } //just make sure all pad bytes are 0.. + } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffset(bw); - base.Write(bw); + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) + { + Items[i].Write(bw); + } + + var brem = (4 - ((ItemCount + 1) % 4)) % 4; + for (int i = 0; i < brem; i++) + { + bw.Write((byte)0); //write padding bytes.. + } } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); + RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); + RelXml.ValueTag(sb, indent, "Unk04", FloatUtil.ToString(Unk04)); + RelXml.WriteItemArray(sb, Items, indent, "Items"); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = (short)Xml.GetChildIntAttribute(node, "Unk02", "value"); + Unk03 = (short)Xml.GetChildIntAttribute(node, "Unk03", "value"); + Unk04 = Xml.GetChildFloatAttribute(node, "Unk04", "value"); + Items = XmlRel.ReadItemArray(node, "Items"); + ItemCount = (byte)(Items?.Length ?? 0); } } [TC(typeof(EXP))] public class Dat151Unk111 : Dat151RelData { + public int Unk01 { get; set; } + public MetaHash Unk02 { get; set; }//0 + public int Unk03 { get; set; } + public int Unk04 { get; set; } + public MetaHash Unk05 { get; set; }//0 + public int Unk06 { get; set; } + public int Unk07 { get; set; } + public MetaHash Unk08 { get; set; }//0 + public int Unk09 { get; set; } + public int Unk10 { get; set; } + public MetaHash Unk11 { get; set; }//0 + public int Unk12 { get; set; } + public int Unk13 { get; set; } + public MetaHash Unk14 { get; set; }//0 + public int Unk15 { get; set; } + public int Unk16 { get; set; } + public MetaHash Unk17 { get; set; }//0 + public int Unk18 { get; set; } + public int Unk19 { get; set; } + public MetaHash Unk20 { get; set; }//0 + public int Unk21 { get; set; } + public int Unk22 { get; set; } + public float Unk23 { get; set; } + public MetaHash Unk24 { get; set; }//0 + public int Unk25 { get; set; } + public int Unk26 { get; set; } + public MetaHash Unk27 { get; set; }//0 + public int Unk28 { get; set; } + public int Unk29 { get; set; } + public MetaHash Unk30 { get; set; }//0 + public int Unk31 { get; set; } + public int Unk32 { get; set; } + public MetaHash Unk33 { get; set; }//0 + public int Unk34 { get; set; } + public int Unk35 { get; set; } + public MetaHash Unk36 { get; set; }//0 + public int Unk37 { get; set; } + public int Unk38 { get; set; } + public MetaHash Unk39 { get; set; }//0 + public int Unk40 { get; set; } + public int Unk41 { get; set; } + public MetaHash Unk42 { get; set; }//0 + public int Unk43 { get; set; } + public int Unk44 { get; set; } + public MetaHash Unk45 { get; set; }//0 + public int Unk46 { get; set; } + public int Unk47 { get; set; } + public MetaHash Unk48 { get; set; }//0 + public int Unk49 { get; set; } + public int Unk50 { get; set; } + public float Unk51 { get; set; } + public MetaHash Unk52 { get; set; }//0 + public int Unk53 { get; set; } + public int Unk54 { get; set; } + public int Unk55 { get; set; } + public MetaHash Unk56 { get; set; }//0 + public int Unk57 { get; set; } + public int Unk58 { get; set; } + + public Dat151Unk111(RelFile rel) : base(rel) { Type = Dat151RelType.Unk111; @@ -17705,26 +18133,352 @@ namespace CodeWalker.GameFiles } public Dat151Unk111(RelData d, BinaryReader br) : base(d, br) { + Unk01 = br.ReadInt32(); + Unk02 = br.ReadUInt32();//0 + Unk03 = br.ReadInt32(); + Unk04 = br.ReadInt32(); + Unk05 = br.ReadUInt32();//0 + Unk06 = br.ReadInt32(); + Unk07 = br.ReadInt32(); + Unk08 = br.ReadUInt32();//0 + Unk09 = br.ReadInt32(); + Unk10 = br.ReadInt32(); + Unk11 = br.ReadUInt32();//0 + Unk12 = br.ReadInt32(); + Unk13 = br.ReadInt32(); + Unk14 = br.ReadUInt32();//0 + Unk15 = br.ReadInt32(); + Unk16 = br.ReadInt32(); + Unk17 = br.ReadUInt32();//0 + Unk18 = br.ReadInt32(); + Unk19 = br.ReadInt32(); + Unk20 = br.ReadUInt32();//0 + Unk21 = br.ReadInt32(); + Unk22 = br.ReadInt32(); + Unk23 = br.ReadSingle(); + Unk24 = br.ReadUInt32();//0 + Unk25 = br.ReadInt32(); + Unk26 = br.ReadInt32(); + Unk27 = br.ReadUInt32();//0 + Unk28 = br.ReadInt32(); + Unk29 = br.ReadInt32(); + Unk30 = br.ReadUInt32();//0 + Unk31 = br.ReadInt32(); + Unk32 = br.ReadInt32(); + Unk33 = br.ReadUInt32();//0 + Unk34 = br.ReadInt32(); + Unk35 = br.ReadInt32(); + Unk36 = br.ReadUInt32();//0 + Unk37 = br.ReadInt32(); + Unk38 = br.ReadInt32(); + Unk39 = br.ReadUInt32();//0 + Unk40 = br.ReadInt32(); + Unk41 = br.ReadInt32(); + Unk42 = br.ReadUInt32();//0 + Unk43 = br.ReadInt32(); + Unk44 = br.ReadInt32(); + Unk45 = br.ReadUInt32();//0 + Unk46 = br.ReadInt32(); + Unk47 = br.ReadInt32(); + Unk48 = br.ReadUInt32();//0 + Unk49 = br.ReadInt32(); + Unk50 = br.ReadInt32(); + Unk51 = br.ReadSingle(); + Unk52 = br.ReadUInt32();//0 + Unk53 = br.ReadInt32(); + Unk54 = br.ReadInt32(); + Unk55 = br.ReadInt32(); + Unk56 = br.ReadUInt32();//0 + Unk57 = br.ReadInt32(); + Unk58 = br.ReadInt32(); + + if (Unk02 != 0) + { } + if (Unk05 != 0) + { } + if (Unk08 != 0) + { } + if (Unk11 != 0) + { } + if (Unk14 != 0) + { } + if (Unk17 != 0) + { } + if (Unk20 != 0) + { } + if (Unk24 != 0) + { } + if (Unk27 != 0) + { } + if (Unk30 != 0) + { } + if (Unk33 != 0) + { } + if (Unk36 != 0) + { } + if (Unk39 != 0) + { } + if (Unk42 != 0) + { } + if (Unk45 != 0) + { } + if (Unk48 != 0) + { } + if (Unk52 != 0) + { } + if (Unk56 != 0) + { } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffset(bw); - base.Write(bw); + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); + bw.Write(Unk14); + bw.Write(Unk15); + bw.Write(Unk16); + bw.Write(Unk17); + bw.Write(Unk18); + bw.Write(Unk19); + bw.Write(Unk20); + bw.Write(Unk21); + bw.Write(Unk22); + bw.Write(Unk23); + bw.Write(Unk24); + bw.Write(Unk25); + bw.Write(Unk26); + bw.Write(Unk27); + bw.Write(Unk28); + bw.Write(Unk29); + bw.Write(Unk30); + bw.Write(Unk31); + bw.Write(Unk32); + bw.Write(Unk33); + bw.Write(Unk34); + bw.Write(Unk35); + bw.Write(Unk36); + bw.Write(Unk37); + bw.Write(Unk38); + bw.Write(Unk39); + bw.Write(Unk40); + bw.Write(Unk41); + bw.Write(Unk42); + bw.Write(Unk43); + bw.Write(Unk44); + bw.Write(Unk45); + bw.Write(Unk46); + bw.Write(Unk47); + bw.Write(Unk48); + bw.Write(Unk49); + bw.Write(Unk50); + bw.Write(Unk51); + bw.Write(Unk52); + bw.Write(Unk53); + bw.Write(Unk54); + bw.Write(Unk55); + bw.Write(Unk56); + bw.Write(Unk57); + bw.Write(Unk58); } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); + RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); + RelXml.StringTag(sb, indent, "Unk05", RelXml.HashString(Unk05)); + RelXml.ValueTag(sb, indent, "Unk06", Unk06.ToString()); + RelXml.ValueTag(sb, indent, "Unk07", Unk07.ToString()); + RelXml.StringTag(sb, indent, "Unk08", RelXml.HashString(Unk08)); + RelXml.ValueTag(sb, indent, "Unk09", Unk09.ToString()); + RelXml.ValueTag(sb, indent, "Unk10", Unk10.ToString()); + RelXml.StringTag(sb, indent, "Unk11", RelXml.HashString(Unk11)); + RelXml.ValueTag(sb, indent, "Unk12", Unk12.ToString()); + RelXml.ValueTag(sb, indent, "Unk13", Unk13.ToString()); + RelXml.StringTag(sb, indent, "Unk14", RelXml.HashString(Unk14)); + RelXml.ValueTag(sb, indent, "Unk15", Unk15.ToString()); + RelXml.ValueTag(sb, indent, "Unk16", Unk16.ToString()); + RelXml.StringTag(sb, indent, "Unk17", RelXml.HashString(Unk17)); + RelXml.ValueTag(sb, indent, "Unk18", Unk18.ToString()); + RelXml.ValueTag(sb, indent, "Unk19", Unk19.ToString()); + RelXml.StringTag(sb, indent, "Unk20", RelXml.HashString(Unk20)); + RelXml.ValueTag(sb, indent, "Unk21", Unk21.ToString()); + RelXml.ValueTag(sb, indent, "Unk22", Unk22.ToString()); + RelXml.ValueTag(sb, indent, "Unk23", FloatUtil.ToString(Unk23)); + RelXml.StringTag(sb, indent, "Unk24", RelXml.HashString(Unk24)); + RelXml.ValueTag(sb, indent, "Unk25", Unk25.ToString()); + RelXml.ValueTag(sb, indent, "Unk26", Unk26.ToString()); + RelXml.StringTag(sb, indent, "Unk27", RelXml.HashString(Unk27)); + RelXml.ValueTag(sb, indent, "Unk28", Unk28.ToString()); + RelXml.ValueTag(sb, indent, "Unk29", Unk29.ToString()); + RelXml.StringTag(sb, indent, "Unk30", RelXml.HashString(Unk30)); + RelXml.ValueTag(sb, indent, "Unk31", Unk31.ToString()); + RelXml.ValueTag(sb, indent, "Unk32", Unk32.ToString()); + RelXml.StringTag(sb, indent, "Unk33", RelXml.HashString(Unk33)); + RelXml.ValueTag(sb, indent, "Unk34", Unk34.ToString()); + RelXml.ValueTag(sb, indent, "Unk35", Unk35.ToString()); + RelXml.StringTag(sb, indent, "Unk36", RelXml.HashString(Unk36)); + RelXml.ValueTag(sb, indent, "Unk37", Unk37.ToString()); + RelXml.ValueTag(sb, indent, "Unk38", Unk38.ToString()); + RelXml.StringTag(sb, indent, "Unk39", RelXml.HashString(Unk39)); + RelXml.ValueTag(sb, indent, "Unk40", Unk40.ToString()); + RelXml.ValueTag(sb, indent, "Unk41", Unk41.ToString()); + RelXml.StringTag(sb, indent, "Unk42", RelXml.HashString(Unk42)); + RelXml.ValueTag(sb, indent, "Unk43", Unk43.ToString()); + RelXml.ValueTag(sb, indent, "Unk44", Unk44.ToString()); + RelXml.StringTag(sb, indent, "Unk45", RelXml.HashString(Unk45)); + RelXml.ValueTag(sb, indent, "Unk46", Unk46.ToString()); + RelXml.ValueTag(sb, indent, "Unk47", Unk47.ToString()); + RelXml.StringTag(sb, indent, "Unk48", RelXml.HashString(Unk48)); + RelXml.ValueTag(sb, indent, "Unk49", Unk49.ToString()); + RelXml.ValueTag(sb, indent, "Unk50", Unk50.ToString()); + RelXml.ValueTag(sb, indent, "Unk51", FloatUtil.ToString(Unk51)); + RelXml.StringTag(sb, indent, "Unk52", RelXml.HashString(Unk52)); + RelXml.ValueTag(sb, indent, "Unk53", Unk53.ToString()); + RelXml.ValueTag(sb, indent, "Unk54", Unk54.ToString()); + RelXml.ValueTag(sb, indent, "Unk55", Unk55.ToString()); + RelXml.StringTag(sb, indent, "Unk56", RelXml.HashString(Unk56)); + RelXml.ValueTag(sb, indent, "Unk57", Unk57.ToString()); + RelXml.ValueTag(sb, indent, "Unk58", Unk58.ToString()); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Unk01 = Xml.GetChildIntAttribute(node, "Unk01", "value"); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Unk03 = Xml.GetChildIntAttribute(node, "Unk03", "value"); + Unk04 = Xml.GetChildIntAttribute(node, "Unk04", "value"); + Unk05 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk05")); + Unk06 = Xml.GetChildIntAttribute(node, "Unk06", "value"); + Unk07 = Xml.GetChildIntAttribute(node, "Unk07", "value"); + Unk08 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk08")); + Unk09 = Xml.GetChildIntAttribute(node, "Unk09", "value"); + Unk10 = Xml.GetChildIntAttribute(node, "Unk10", "value"); + Unk11 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk11")); + Unk12 = Xml.GetChildIntAttribute(node, "Unk12", "value"); + Unk13 = Xml.GetChildIntAttribute(node, "Unk13", "value"); + Unk14 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk14")); + Unk15 = Xml.GetChildIntAttribute(node, "Unk15", "value"); + Unk16 = Xml.GetChildIntAttribute(node, "Unk16", "value"); + Unk17 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk17")); + Unk18 = Xml.GetChildIntAttribute(node, "Unk18", "value"); + Unk19 = Xml.GetChildIntAttribute(node, "Unk19", "value"); + Unk20 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk20")); + Unk21 = Xml.GetChildIntAttribute(node, "Unk21", "value"); + Unk22 = Xml.GetChildIntAttribute(node, "Unk22", "value"); + Unk23 = Xml.GetChildFloatAttribute(node, "Unk23", "value"); + Unk24 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk24")); + Unk25 = Xml.GetChildIntAttribute(node, "Unk25", "value"); + Unk26 = Xml.GetChildIntAttribute(node, "Unk26", "value"); + Unk27 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk27")); + Unk28 = Xml.GetChildIntAttribute(node, "Unk28", "value"); + Unk29 = Xml.GetChildIntAttribute(node, "Unk29", "value"); + Unk30 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk30")); + Unk31 = Xml.GetChildIntAttribute(node, "Unk31", "value"); + Unk32 = Xml.GetChildIntAttribute(node, "Unk32", "value"); + Unk33 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk33")); + Unk34 = Xml.GetChildIntAttribute(node, "Unk34", "value"); + Unk35 = Xml.GetChildIntAttribute(node, "Unk35", "value"); + Unk36 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk36")); + Unk37 = Xml.GetChildIntAttribute(node, "Unk37", "value"); + Unk38 = Xml.GetChildIntAttribute(node, "Unk38", "value"); + Unk39 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk39")); + Unk40 = Xml.GetChildIntAttribute(node, "Unk40", "value"); + Unk41 = Xml.GetChildIntAttribute(node, "Unk41", "value"); + Unk42 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk42")); + Unk43 = Xml.GetChildIntAttribute(node, "Unk43", "value"); + Unk44 = Xml.GetChildIntAttribute(node, "Unk44", "value"); + Unk45 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk45")); + Unk46 = Xml.GetChildIntAttribute(node, "Unk46", "value"); + Unk47 = Xml.GetChildIntAttribute(node, "Unk47", "value"); + Unk48 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk48")); + Unk49 = Xml.GetChildIntAttribute(node, "Unk49", "value"); + Unk50 = Xml.GetChildIntAttribute(node, "Unk50", "value"); + Unk51 = Xml.GetChildFloatAttribute(node, "Unk51", "value"); + Unk52 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk52")); + Unk53 = Xml.GetChildIntAttribute(node, "Unk53", "value"); + Unk54 = Xml.GetChildIntAttribute(node, "Unk54", "value"); + Unk55 = Xml.GetChildIntAttribute(node, "Unk55", "value"); + Unk56 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk56")); + Unk57 = Xml.GetChildIntAttribute(node, "Unk57", "value"); + Unk58 = Xml.GetChildIntAttribute(node, "Unk58", "value"); + } + } + [TC(typeof(EXP))] public class Dat151Unk112Item : IMetaXmlItem + { + public MetaHash Unk01 { get; set; } + public float Unk02 { get; set; } + public float Unk03 { get; set; } + public byte Unk04 { get; set; } + public byte Unk05 { get; set; } + public short Unk06 { get; set; } + + public Dat151Unk112Item() + { } + public Dat151Unk112Item(BinaryReader br) + { + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadSingle(); + Unk03 = br.ReadSingle(); + Unk04 = br.ReadByte(); + Unk05 = br.ReadByte(); + Unk06 = br.ReadInt16(); + + if (Unk06 != 0) + { } + } + public void Write(BinaryWriter bw) + { + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + } + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", FloatUtil.ToString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", FloatUtil.ToString(Unk03)); + RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); + RelXml.ValueTag(sb, indent, "Unk05", Unk05.ToString()); + RelXml.ValueTag(sb, indent, "Unk06", Unk06.ToString()); + } + public void ReadXml(XmlNode node) + { + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = Xml.GetChildFloatAttribute(node, "Unk02", "value"); + Unk03 = Xml.GetChildFloatAttribute(node, "Unk03", "value"); + Unk04 = (byte)Xml.GetChildUIntAttribute(node, "Unk04", "value"); + Unk05 = (byte)Xml.GetChildUIntAttribute(node, "Unk05", "value"); + Unk06 = (short)Xml.GetChildIntAttribute(node, "Unk06", "value"); + } + public override string ToString() + { + return Unk01.ToString() + ": " + Unk02.ToString() + ", " + Unk03.ToString() + ", " + Unk04.ToString() + ", " + Unk05.ToString(); } } [TC(typeof(EXP))] public class Dat151Unk112 : Dat151RelData { + public int ItemCount { get; set; } + public Dat151Unk112Item[] Items { get; set; } + public Dat151Unk112(RelFile rel) : base(rel) { Type = Dat151RelType.Unk112; @@ -17732,26 +18486,82 @@ namespace CodeWalker.GameFiles } public Dat151Unk112(RelData d, BinaryReader br) : base(d, br) { + ItemCount = br.ReadInt32(); + Items = new Dat151Unk112Item[ItemCount]; + for (int i = 0; i < ItemCount; i++) + { + Items[i] = new Dat151Unk112Item(br); + } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffset(bw); - base.Write(bw); + WriteTypeAndOffset(bw); + + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) + { + Items[i].Write(bw); + } } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.WriteItemArray(sb, Items, indent, "Items"); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Items = XmlRel.ReadItemArray(node, "Items"); + ItemCount = (Items?.Length ?? 0); } } [TC(typeof(EXP))] public class Dat151Unk113 : Dat151RelData { + public int Unk01 { get; set; } + public int Unk02 { get; set; } + public int Unk03 { get; set; } + public int Unk04 { get; set; } + public int Unk05 { get; set; } + public int Unk06 { get; set; } + public int Unk07 { get; set; } + public int Unk08 { get; set; } + public int Unk09 { get; set; } + public int Unk10 { get; set; } + public int Unk11 { get; set; } + public int Unk12 { get; set; } + public int Unk13 { get; set; } + public int Unk14 { get; set; } + public int Unk15 { get; set; } + public int Unk16 { get; set; } + public int Unk17 { get; set; } + public int Unk18 { get; set; } + public int Unk19 { get; set; } + public int Unk20 { get; set; } + public int Unk21 { get; set; } + public int Unk22 { get; set; } + public int Unk23 { get; set; } + public int Unk24 { get; set; } + public int Unk25 { get; set; } + public int Unk26 { get; set; } + public int Unk27 { get; set; } + public int Unk28 { get; set; } + public int Unk29 { get; set; } + public int Unk30 { get; set; } + public int Unk31 { get; set; } + public float Unk32 { get; set; } + public int Unk33 { get; set; } + public int Unk34 { get; set; } + public int Unk35 { get; set; } + public float Unk36 { get; set; } + public int Unk37 { get; set; } + public int Unk38 { get; set; } + public int Unk39 { get; set; } + public int Unk40 { get; set; } + public int Unk41 { get; set; } + public int Unk42 { get; set; } + public Dat151Unk113(RelFile rel) : base(rel) { Type = Dat151RelType.Unk113; @@ -17759,26 +18569,216 @@ namespace CodeWalker.GameFiles } public Dat151Unk113(RelData d, BinaryReader br) : base(d, br) { + Unk01 = br.ReadInt32(); + Unk02 = br.ReadInt32(); + Unk03 = br.ReadInt32(); + Unk04 = br.ReadInt32(); + Unk05 = br.ReadInt32(); + Unk06 = br.ReadInt32(); + Unk07 = br.ReadInt32(); + Unk08 = br.ReadInt32(); + Unk09 = br.ReadInt32(); + Unk10 = br.ReadInt32(); + Unk11 = br.ReadInt32(); + Unk12 = br.ReadInt32(); + Unk13 = br.ReadInt32(); + Unk14 = br.ReadInt32(); + Unk15 = br.ReadInt32(); + Unk16 = br.ReadInt32(); + Unk17 = br.ReadInt32(); + Unk18 = br.ReadInt32(); + Unk19 = br.ReadInt32(); + Unk20 = br.ReadInt32(); + Unk21 = br.ReadInt32(); + Unk22 = br.ReadInt32(); + Unk23 = br.ReadInt32(); + Unk24 = br.ReadInt32(); + Unk25 = br.ReadInt32(); + Unk26 = br.ReadInt32(); + Unk27 = br.ReadInt32(); + Unk28 = br.ReadInt32(); + Unk29 = br.ReadInt32(); + Unk30 = br.ReadInt32(); + Unk31 = br.ReadInt32(); + Unk32 = br.ReadSingle(); + Unk33 = br.ReadInt32(); + Unk34 = br.ReadInt32(); + Unk35 = br.ReadInt32(); + Unk36 = br.ReadSingle(); + Unk37 = br.ReadInt32(); + Unk38 = br.ReadInt32(); + Unk39 = br.ReadInt32(); + Unk40 = br.ReadInt32(); + Unk41 = br.ReadInt32(); + Unk42 = br.ReadInt32(); + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffset(bw); - base.Write(bw); + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); + bw.Write(Unk14); + bw.Write(Unk15); + bw.Write(Unk16); + bw.Write(Unk17); + bw.Write(Unk18); + bw.Write(Unk19); + bw.Write(Unk20); + bw.Write(Unk21); + bw.Write(Unk22); + bw.Write(Unk23); + bw.Write(Unk24); + bw.Write(Unk25); + bw.Write(Unk26); + bw.Write(Unk27); + bw.Write(Unk28); + bw.Write(Unk29); + bw.Write(Unk30); + bw.Write(Unk31); + bw.Write(Unk32); + bw.Write(Unk33); + bw.Write(Unk34); + bw.Write(Unk35); + bw.Write(Unk36); + bw.Write(Unk37); + bw.Write(Unk38); + bw.Write(Unk39); + bw.Write(Unk40); + bw.Write(Unk41); + bw.Write(Unk42); } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); + RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); + RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); + RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); + RelXml.ValueTag(sb, indent, "Unk05", Unk05.ToString()); + RelXml.ValueTag(sb, indent, "Unk06", Unk06.ToString()); + RelXml.ValueTag(sb, indent, "Unk07", Unk07.ToString()); + RelXml.ValueTag(sb, indent, "Unk08", Unk08.ToString()); + RelXml.ValueTag(sb, indent, "Unk09", Unk09.ToString()); + RelXml.ValueTag(sb, indent, "Unk10", Unk10.ToString()); + RelXml.ValueTag(sb, indent, "Unk11", Unk11.ToString()); + RelXml.ValueTag(sb, indent, "Unk12", Unk12.ToString()); + RelXml.ValueTag(sb, indent, "Unk13", Unk13.ToString()); + RelXml.ValueTag(sb, indent, "Unk14", Unk14.ToString()); + RelXml.ValueTag(sb, indent, "Unk15", Unk15.ToString()); + RelXml.ValueTag(sb, indent, "Unk16", Unk16.ToString()); + RelXml.ValueTag(sb, indent, "Unk17", Unk17.ToString()); + RelXml.ValueTag(sb, indent, "Unk18", Unk18.ToString()); + RelXml.ValueTag(sb, indent, "Unk19", Unk19.ToString()); + RelXml.ValueTag(sb, indent, "Unk20", Unk20.ToString()); + RelXml.ValueTag(sb, indent, "Unk21", Unk21.ToString()); + RelXml.ValueTag(sb, indent, "Unk22", Unk22.ToString()); + RelXml.ValueTag(sb, indent, "Unk23", Unk23.ToString()); + RelXml.ValueTag(sb, indent, "Unk24", Unk24.ToString()); + RelXml.ValueTag(sb, indent, "Unk25", Unk25.ToString()); + RelXml.ValueTag(sb, indent, "Unk26", Unk26.ToString()); + RelXml.ValueTag(sb, indent, "Unk27", Unk27.ToString()); + RelXml.ValueTag(sb, indent, "Unk28", Unk28.ToString()); + RelXml.ValueTag(sb, indent, "Unk29", Unk29.ToString()); + RelXml.ValueTag(sb, indent, "Unk30", Unk30.ToString()); + RelXml.ValueTag(sb, indent, "Unk31", Unk31.ToString()); + RelXml.ValueTag(sb, indent, "Unk32", FloatUtil.ToString(Unk32)); + RelXml.ValueTag(sb, indent, "Unk33", Unk33.ToString()); + RelXml.ValueTag(sb, indent, "Unk34", Unk34.ToString()); + RelXml.ValueTag(sb, indent, "Unk35", Unk35.ToString()); + RelXml.ValueTag(sb, indent, "Unk36", FloatUtil.ToString(Unk36)); + RelXml.ValueTag(sb, indent, "Unk37", Unk37.ToString()); + RelXml.ValueTag(sb, indent, "Unk38", Unk38.ToString()); + RelXml.ValueTag(sb, indent, "Unk39", Unk39.ToString()); + RelXml.ValueTag(sb, indent, "Unk40", Unk40.ToString()); + RelXml.ValueTag(sb, indent, "Unk41", Unk41.ToString()); + RelXml.ValueTag(sb, indent, "Unk42", Unk42.ToString()); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Unk01 = Xml.GetChildIntAttribute(node, "Unk01", "value"); + Unk02 = Xml.GetChildIntAttribute(node, "Unk02", "value"); + Unk03 = Xml.GetChildIntAttribute(node, "Unk03", "value"); + Unk04 = Xml.GetChildIntAttribute(node, "Unk04", "value"); + Unk05 = Xml.GetChildIntAttribute(node, "Unk05", "value"); + Unk06 = Xml.GetChildIntAttribute(node, "Unk06", "value"); + Unk07 = Xml.GetChildIntAttribute(node, "Unk07", "value"); + Unk08 = Xml.GetChildIntAttribute(node, "Unk08", "value"); + Unk09 = Xml.GetChildIntAttribute(node, "Unk09", "value"); + Unk10 = Xml.GetChildIntAttribute(node, "Unk10", "value"); + Unk11 = Xml.GetChildIntAttribute(node, "Unk11", "value"); + Unk12 = Xml.GetChildIntAttribute(node, "Unk12", "value"); + Unk13 = Xml.GetChildIntAttribute(node, "Unk13", "value"); + Unk14 = Xml.GetChildIntAttribute(node, "Unk14", "value"); + Unk15 = Xml.GetChildIntAttribute(node, "Unk15", "value"); + Unk16 = Xml.GetChildIntAttribute(node, "Unk16", "value"); + Unk17 = Xml.GetChildIntAttribute(node, "Unk17", "value"); + Unk18 = Xml.GetChildIntAttribute(node, "Unk18", "value"); + Unk19 = Xml.GetChildIntAttribute(node, "Unk19", "value"); + Unk20 = Xml.GetChildIntAttribute(node, "Unk20", "value"); + Unk21 = Xml.GetChildIntAttribute(node, "Unk21", "value"); + Unk22 = Xml.GetChildIntAttribute(node, "Unk22", "value"); + Unk23 = Xml.GetChildIntAttribute(node, "Unk23", "value"); + Unk24 = Xml.GetChildIntAttribute(node, "Unk24", "value"); + Unk25 = Xml.GetChildIntAttribute(node, "Unk25", "value"); + Unk26 = Xml.GetChildIntAttribute(node, "Unk26", "value"); + Unk27 = Xml.GetChildIntAttribute(node, "Unk27", "value"); + Unk28 = Xml.GetChildIntAttribute(node, "Unk28", "value"); + Unk29 = Xml.GetChildIntAttribute(node, "Unk29", "value"); + Unk30 = Xml.GetChildIntAttribute(node, "Unk30", "value"); + Unk31 = Xml.GetChildIntAttribute(node, "Unk31", "value"); + Unk32 = Xml.GetChildFloatAttribute(node, "Unk32", "value"); + Unk33 = Xml.GetChildIntAttribute(node, "Unk33", "value"); + Unk34 = Xml.GetChildIntAttribute(node, "Unk34", "value"); + Unk35 = Xml.GetChildIntAttribute(node, "Unk35", "value"); + Unk36 = Xml.GetChildFloatAttribute(node, "Unk36", "value"); + Unk37 = Xml.GetChildIntAttribute(node, "Unk37", "value"); + Unk38 = Xml.GetChildIntAttribute(node, "Unk38", "value"); + Unk39 = Xml.GetChildIntAttribute(node, "Unk39", "value"); + Unk40 = Xml.GetChildIntAttribute(node, "Unk40", "value"); + Unk41 = Xml.GetChildIntAttribute(node, "Unk41", "value"); + Unk42 = Xml.GetChildIntAttribute(node, "Unk42", "value"); } } [TC(typeof(EXP))] public class Dat151Unk115 : Dat151RelData { + public FlagsUint Flags { get; set; } + public float Unk01 { get; set; } + public MetaHash Unk02 { get; set; } + public float Unk03 { get; set; } + public float Unk04 { get; set; } + public float Unk05 { get; set; } + public float Unk06 { get; set; } + public int Unk07 { get; set; } + public int Unk08 { get; set; } + public MetaHash Unk09 { get; set; } + public float Unk10 { get; set; } + public float Unk11 { get; set; } + public int Unk12 { get; set; } + public int Unk13 { get; set; } + public int Unk14 { get; set; } + public int Unk15 { get; set; } + public int Unk16 { get; set; } + public int Unk17 { get; set; } + public float Unk18 { get; set; } + public float Unk19 { get; set; } + public int Unk20 { get; set; } + public int Unk21 { get; set; } + public Dat151Unk115(RelFile rel) : base(rel) { Type = Dat151RelType.Unk115; @@ -17786,26 +18786,126 @@ namespace CodeWalker.GameFiles } public Dat151Unk115(RelData d, BinaryReader br) : base(d, br) { + Flags = br.ReadUInt32(); + Unk01 = br.ReadSingle(); + Unk02 = br.ReadUInt32(); + Unk03 = br.ReadSingle(); + Unk04 = br.ReadSingle(); + Unk05 = br.ReadSingle(); + Unk06 = br.ReadSingle(); + Unk07 = br.ReadInt32(); + Unk08 = br.ReadInt32(); + Unk09 = br.ReadUInt32(); + Unk10 = br.ReadSingle(); + Unk11 = br.ReadSingle(); + Unk12 = br.ReadInt32(); + Unk13 = br.ReadInt32(); + Unk14 = br.ReadInt32(); + Unk15 = br.ReadInt32(); + Unk16 = br.ReadInt32(); + Unk17 = br.ReadInt32(); + Unk18 = br.ReadSingle(); + Unk19 = br.ReadSingle(); + Unk20 = br.ReadInt32(); + Unk21 = br.ReadInt32(); + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffset(bw); - base.Write(bw); + WriteTypeAndOffset(bw); + + bw.Write(Flags); + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); + bw.Write(Unk14); + bw.Write(Unk15); + bw.Write(Unk16); + bw.Write(Unk17); + bw.Write(Unk18); + bw.Write(Unk19); + bw.Write(Unk20); + bw.Write(Unk21); } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.ValueTag(sb, indent, "Unk01", FloatUtil.ToString(Unk01)); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", FloatUtil.ToString(Unk03)); + RelXml.ValueTag(sb, indent, "Unk04", FloatUtil.ToString(Unk04)); + RelXml.ValueTag(sb, indent, "Unk05", FloatUtil.ToString(Unk05)); + RelXml.ValueTag(sb, indent, "Unk06", FloatUtil.ToString(Unk06)); + RelXml.ValueTag(sb, indent, "Unk07", Unk07.ToString()); + RelXml.ValueTag(sb, indent, "Unk08", Unk08.ToString()); + RelXml.StringTag(sb, indent, "Unk09", RelXml.HashString(Unk09)); + RelXml.ValueTag(sb, indent, "Unk10", FloatUtil.ToString(Unk10)); + RelXml.ValueTag(sb, indent, "Unk11", FloatUtil.ToString(Unk11)); + RelXml.ValueTag(sb, indent, "Unk12", Unk12.ToString()); + RelXml.ValueTag(sb, indent, "Unk13", Unk13.ToString()); + RelXml.ValueTag(sb, indent, "Unk14", Unk14.ToString()); + RelXml.ValueTag(sb, indent, "Unk15", Unk15.ToString()); + RelXml.ValueTag(sb, indent, "Unk16", Unk16.ToString()); + RelXml.ValueTag(sb, indent, "Unk17", Unk17.ToString()); + RelXml.ValueTag(sb, indent, "Unk18", FloatUtil.ToString(Unk18)); + RelXml.ValueTag(sb, indent, "Unk19", FloatUtil.ToString(Unk19)); + RelXml.ValueTag(sb, indent, "Unk20", Unk20.ToString()); + RelXml.ValueTag(sb, indent, "Unk21", Unk21.ToString()); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = Xml.GetChildFloatAttribute(node, "Unk01", "value"); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Unk03 = Xml.GetChildFloatAttribute(node, "Unk03", "value"); + Unk04 = Xml.GetChildFloatAttribute(node, "Unk04", "value"); + Unk05 = Xml.GetChildFloatAttribute(node, "Unk05", "value"); + Unk06 = Xml.GetChildFloatAttribute(node, "Unk06", "value"); + Unk07 = Xml.GetChildIntAttribute(node, "Unk07", "value"); + Unk08 = Xml.GetChildIntAttribute(node, "Unk08", "value"); + Unk09 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk09")); + Unk10 = Xml.GetChildFloatAttribute(node, "Unk10", "value"); + Unk11 = Xml.GetChildFloatAttribute(node, "Unk11", "value"); + Unk12 = Xml.GetChildIntAttribute(node, "Unk12", "value"); + Unk13 = Xml.GetChildIntAttribute(node, "Unk13", "value"); + Unk14 = Xml.GetChildIntAttribute(node, "Unk14", "value"); + Unk15 = Xml.GetChildIntAttribute(node, "Unk15", "value"); + Unk16 = Xml.GetChildIntAttribute(node, "Unk16", "value"); + Unk17 = Xml.GetChildIntAttribute(node, "Unk17", "value"); + Unk18 = Xml.GetChildFloatAttribute(node, "Unk18", "value"); + Unk19 = Xml.GetChildFloatAttribute(node, "Unk19", "value"); + Unk20 = Xml.GetChildIntAttribute(node, "Unk20", "value"); + Unk21 = Xml.GetChildIntAttribute(node, "Unk21", "value"); } } [TC(typeof(EXP))] public class Dat151Unk116 : Dat151RelData { + public MetaHash Unk01 { get; set; }//0 + public float Unk02 { get; set; } + public MetaHash Unk03 { get; set; }//0 + public MetaHash Unk04 { get; set; }//0 + public MetaHash Unk05 { get; set; }//0 + public MetaHash Unk06 { get; set; }//0 + public float Unk07 { get; set; } + public MetaHash Unk08 { get; set; }//0 + public MetaHash Unk09 { get; set; }//0 + public MetaHash Unk10 { get; set; }//0 + public MetaHash Unk11 { get; set; }//0 + public float Unk12 { get; set; } + public Dat151Unk116(RelFile rel) : base(rel) { Type = Dat151RelType.Unk116; @@ -17813,26 +18913,113 @@ namespace CodeWalker.GameFiles } public Dat151Unk116(RelData d, BinaryReader br) : base(d, br) { + Unk01 = br.ReadUInt32();//0 + Unk02 = br.ReadSingle(); + Unk03 = br.ReadUInt32();//0 + Unk04 = br.ReadUInt32();//0 + Unk05 = br.ReadUInt32();//0 + Unk06 = br.ReadUInt32();//0 + Unk07 = br.ReadSingle(); + Unk08 = br.ReadUInt32();//0 + Unk09 = br.ReadUInt32();//0 + Unk10 = br.ReadUInt32();//0 + Unk11 = br.ReadUInt32();//0 + Unk12 = br.ReadSingle(); + + if (Unk01 != 0) + { } + if (Unk03 != 0) + { } + if (Unk04 != 0) + { } + if (Unk05 != 0) + { } + if (Unk06 != 0) + { } + if (Unk08 != 0) + { } + if (Unk09 != 0) + { } + if (Unk10 != 0) + { } + if (Unk11 != 0) + { } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffset(bw); - base.Write(bw); + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", FloatUtil.ToString(Unk02)); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); + RelXml.StringTag(sb, indent, "Unk04", RelXml.HashString(Unk04)); + RelXml.StringTag(sb, indent, "Unk05", RelXml.HashString(Unk05)); + RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); + RelXml.ValueTag(sb, indent, "Unk07", FloatUtil.ToString(Unk07)); + RelXml.StringTag(sb, indent, "Unk08", RelXml.HashString(Unk08)); + RelXml.StringTag(sb, indent, "Unk09", RelXml.HashString(Unk09)); + RelXml.StringTag(sb, indent, "Unk10", RelXml.HashString(Unk10)); + RelXml.StringTag(sb, indent, "Unk11", RelXml.HashString(Unk11)); + RelXml.ValueTag(sb, indent, "Unk12", FloatUtil.ToString(Unk12)); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = Xml.GetChildFloatAttribute(node, "Unk02", "value"); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk04")); + Unk05 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk05")); + Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); + Unk07 = Xml.GetChildFloatAttribute(node, "Unk07", "value"); + Unk08 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk08")); + Unk09 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk09")); + Unk10 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk10")); + Unk11 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk11")); + Unk12 = Xml.GetChildFloatAttribute(node, "Unk12", "value"); } } [TC(typeof(EXP))] public class Dat151Unk118 : Dat151RelData { + public int Unk01 { get; set; } + public int Unk02 { get; set; } + public float Unk03 { get; set; } + public int Unk04 { get; set; } + public int Unk05 { get; set; } + public float Unk06 { get; set; } + public float Unk07 { get; set; } + public short Unk08 { get; set; } + public short Unk09 { get; set; } + public float Unk10 { get; set; } + public float Unk11 { get; set; } + public int Unk12 { get; set; } + public int Unk13 { get; set; } + public float Unk14 { get; set; } + public float Unk15 { get; set; } + public int Unk16 { get; set; } + public int Unk17 { get; set; } + public float Unk18 { get; set; } + public int Unk19 { get; set; } + public float Unk20 { get; set; } + public Dat151Unk118(RelFile rel) : base(rel) { Type = Dat151RelType.Unk118; @@ -17840,26 +19027,109 @@ namespace CodeWalker.GameFiles } public Dat151Unk118(RelData d, BinaryReader br) : base(d, br) { + Unk01 = br.ReadInt32(); + Unk02 = br.ReadInt32(); + Unk03 = br.ReadSingle(); + Unk04 = br.ReadInt32(); + Unk05 = br.ReadInt32(); + Unk06 = br.ReadSingle(); + Unk07 = br.ReadSingle(); + Unk08 = br.ReadInt16(); + Unk09 = br.ReadInt16(); + Unk10 = br.ReadSingle(); + Unk11 = br.ReadSingle(); + Unk12 = br.ReadInt32(); + Unk13 = br.ReadInt32(); + Unk14 = br.ReadSingle(); + Unk15 = br.ReadSingle(); + Unk16 = br.ReadInt32(); + Unk17 = br.ReadInt32(); + Unk18 = br.ReadSingle(); + Unk19 = br.ReadInt32(); + Unk20 = br.ReadSingle(); + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffset(bw); - base.Write(bw); + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); + bw.Write(Unk14); + bw.Write(Unk15); + bw.Write(Unk16); + bw.Write(Unk17); + bw.Write(Unk18); + bw.Write(Unk19); + bw.Write(Unk20); } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); + RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); + RelXml.ValueTag(sb, indent, "Unk03", FloatUtil.ToString(Unk03)); + RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); + RelXml.ValueTag(sb, indent, "Unk05", Unk05.ToString()); + RelXml.ValueTag(sb, indent, "Unk06", FloatUtil.ToString(Unk06)); + RelXml.ValueTag(sb, indent, "Unk07", FloatUtil.ToString(Unk07)); + RelXml.ValueTag(sb, indent, "Unk08", Unk08.ToString()); + RelXml.ValueTag(sb, indent, "Unk09", Unk09.ToString()); + RelXml.ValueTag(sb, indent, "Unk10", FloatUtil.ToString(Unk10)); + RelXml.ValueTag(sb, indent, "Unk11", FloatUtil.ToString(Unk11)); + RelXml.ValueTag(sb, indent, "Unk12", Unk12.ToString()); + RelXml.ValueTag(sb, indent, "Unk13", Unk13.ToString()); + RelXml.ValueTag(sb, indent, "Unk14", FloatUtil.ToString(Unk14)); + RelXml.ValueTag(sb, indent, "Unk15", FloatUtil.ToString(Unk15)); + RelXml.ValueTag(sb, indent, "Unk16", Unk16.ToString()); + RelXml.ValueTag(sb, indent, "Unk17", Unk17.ToString()); + RelXml.ValueTag(sb, indent, "Unk18", FloatUtil.ToString(Unk18)); + RelXml.ValueTag(sb, indent, "Unk19", Unk19.ToString()); + RelXml.ValueTag(sb, indent, "Unk20", FloatUtil.ToString(Unk20)); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Unk01 = Xml.GetChildIntAttribute(node, "Unk01", "value"); + Unk02 = Xml.GetChildIntAttribute(node, "Unk02", "value"); + Unk03 = Xml.GetChildFloatAttribute(node, "Unk03", "value"); + Unk04 = Xml.GetChildIntAttribute(node, "Unk04", "value"); + Unk05 = Xml.GetChildIntAttribute(node, "Unk05", "value"); + Unk06 = Xml.GetChildFloatAttribute(node, "Unk06", "value"); + Unk07 = Xml.GetChildFloatAttribute(node, "Unk07", "value"); + Unk08 = (short)Xml.GetChildIntAttribute(node, "Unk08", "value"); + Unk09 = (short)Xml.GetChildIntAttribute(node, "Unk09", "value"); + Unk10 = Xml.GetChildFloatAttribute(node, "Unk10", "value"); + Unk11 = Xml.GetChildFloatAttribute(node, "Unk11", "value"); + Unk12 = Xml.GetChildIntAttribute(node, "Unk12", "value"); + Unk13 = Xml.GetChildIntAttribute(node, "Unk13", "value"); + Unk14 = Xml.GetChildFloatAttribute(node, "Unk14", "value"); + Unk15 = Xml.GetChildFloatAttribute(node, "Unk15", "value"); + Unk16 = Xml.GetChildIntAttribute(node, "Unk16", "value"); + Unk17 = Xml.GetChildIntAttribute(node, "Unk17", "value"); + Unk18 = Xml.GetChildFloatAttribute(node, "Unk18", "value"); + Unk19 = Xml.GetChildIntAttribute(node, "Unk19", "value"); + Unk20 = Xml.GetChildFloatAttribute(node, "Unk20", "value"); } } - [TC(typeof(EXP))] public class Dat151Unk119 : Dat151RelData + [TC(typeof(EXP))] public class Dat151Unk119 : Dat151RelData //prop_bush_lrg_02 { + public MetaHash Unk01 { get; set; } + public MetaHash Unk02 { get; set; } + public MetaHash Unk03 { get; set; } + public Dat151Unk119(RelFile rel) : base(rel) { Type = Dat151RelType.Unk119; @@ -17867,49 +19137,76 @@ namespace CodeWalker.GameFiles } public Dat151Unk119(RelData d, BinaryReader br) : base(d, br) { + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadUInt32(); + Unk03 = br.ReadUInt32(); + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffset(bw); - base.Write(bw); + WriteTypeAndOffset(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); } } - [TC(typeof(EXP))] public class Dat151Unk121 : Dat151RelData + [TC(typeof(EXP))] public class Dat151MacsModelsOverrides : Dat151RelData //macs_models_overrides { - public Dat151Unk121(RelFile rel) : base(rel) + public int ItemCount { get; set; } + public Dat151HashPair[] Items { get; set; } + + public Dat151MacsModelsOverrides(RelFile rel) : base(rel) { - Type = Dat151RelType.Unk121; + Type = Dat151RelType.MacsModelsOverrides; TypeID = (byte)Type; } - public Dat151Unk121(RelData d, BinaryReader br) : base(d, br) + public Dat151MacsModelsOverrides(RelData d, BinaryReader br) : base(d, br) { + ItemCount = br.ReadInt32(); + Items = new Dat151HashPair[ItemCount]; + for (int i = 0; i < ItemCount; i++) + { + Items[i] = new Dat151HashPair(br); + } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffset(bw); - base.Write(bw); + WriteTypeAndOffset(bw); + + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) + { + Items[i].Write(bw); + } } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.WriteItemArray(sb, Items, indent, "Items"); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Items = XmlRel.ReadItemArray(node, "Items"); + ItemCount = (Items?.Length ?? 0); } } @@ -17918,40 +19215,11 @@ namespace CodeWalker.GameFiles - - - - - - //[TC(typeof(EXP))] public class Dat151BlankTemplateItem : Dat151RelData - //{ - // public Dat151BlankTemplateItem(RelFile rel) : base(rel) - // { - // Type = Dat151RelType.RELTYPE; - // TypeID = (byte)Type; - // } - // public Dat151BlankTemplateItem(RelData d, BinaryReader br) : base(d, br) - // { - // var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - // if (bytesleft != 0) - // { } - // } - // public override void Write(BinaryWriter bw) - // { - // WriteTypeAndOffset(bw); - // } - // public override void WriteXml(StringBuilder sb, int indent) - // { - // } - //} - - - - #endregion + #region dat4 (config) @@ -18820,6 +20088,8 @@ namespace CodeWalker.GameFiles #endregion + + public class RelXml : MetaXmlBase { From 08d1cdcdf37228d8e0a942940bd0f8e559806b89 Mon Sep 17 00:00:00 2001 From: dexyfex Date: Tue, 12 Mar 2019 01:13:04 +1100 Subject: [PATCH 147/158] Audio dat progress --- .../GameFiles/FileTypes/RelFile.cs | 2886 ++++++++++++----- .../GameFiles/MetaTypes/MetaNames.cs | 2 +- CodeWalker.Core/Utils/Xml.cs | 20 + 3 files changed, 2111 insertions(+), 797 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index b7a39ac..a9f911d 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -372,6 +372,63 @@ namespace CodeWalker.GameFiles } } + + if ((RelType == RelDatFileType.Dat4) && (!IsAudioConfig)) + { + //speech.dat4.rel + + var speechDict = new Dictionary(); + foreach (var reldata in RelDatasSorted) + { + var speechData = reldata as Dat4SpeechData; + if (speechData != null) + { + speechDict[speechData.DataOffset] = speechData; + } + else + { } + + speechData.Type = Dat4SpeechType.ByteArray; + speechData.TypeID = 0; //will be set again after this + + } + for (uint i = 0; i < HashTableCount; i++) + { + var hashOffset = HashTableOffsets[i]; + var hash = HashTable[i]; + var itemOffset = hashOffset - 8; + Dat4SpeechData speechData = null; + speechDict.TryGetValue(itemOffset, out speechData); + if (speechData != null) + { + speechData.Type = Dat4SpeechType.Hash; + speechData.TypeID = 4; + speechData.Hash = hash; + } + else + { } + } + for (uint i = 0; i < PackTableCount; i++) + { + var packOffset = PackTableOffsets[i]; + var pack = PackTable[i]; + var itemOffset = packOffset - 12; + Dat4SpeechData speechData = null; + speechDict.TryGetValue(itemOffset, out speechData); + if (speechData != null) + { + speechData.Type = Dat4SpeechType.Container; + speechData.TypeID = 8; + speechData.ContainerHash = pack; + } + else + { }//shouldn't happen! + } + + + } + + } @@ -452,44 +509,74 @@ namespace CodeWalker.GameFiles } else //(for eg speech.dat4.rel) { - //switch (d.DataLength) - //{ - // case 4: - // return new Dat4SpeechHash(d, br); - // case 8: - // if (d.Data[0] == 4)//container hash, with typeid and ntoffset - // { - // return new Dat4SpeechContainer(d, br); - // } - // else if (d.Data[0] == 7) - // { - // return new Dat4SpeechByteArray(d, br); - // } - // else - // { return d; }//shouldn't get here! - // default: - // return new Dat4SpeechByteArray(d, br); - //} - + return new Dat4SpeechData(d, br); } return d; } private RelData ReadData10(RelData d, BinaryReader br) { + switch ((Dat10RelType)d.TypeID) + { + case Dat10RelType.Preset: return new Dat10Preset(d, br); + case Dat10RelType.Synth: return new Dat10Synth(d, br); + default: + break; + } + return d; } private RelData ReadData15(RelData d, BinaryReader br) { + switch ((Dat15RelType)d.TypeID) + { + case Dat15RelType.Unk0: return new Dat15Unk0(d, br); + case Dat15RelType.Unk1: return new Dat15Unk1(d, br); + case Dat15RelType.Unk2: return new Dat15Unk2(d, br); + case Dat15RelType.Unk3: return new Dat15Unk3(d, br); + case Dat15RelType.Unk4: return new Dat15Unk4(d, br); + case Dat15RelType.Unk5: return new Dat15Unk5(d, br); + case Dat15RelType.Unk6: return new Dat15Unk6(d, br); + case Dat15RelType.Unk7: return new Dat15Unk7(d, br); + case Dat15RelType.Unk8: return new Dat15Unk8(d, br); + case Dat15RelType.Unk9: return new Dat15Unk9(d, br); + default: + break; + } + return d; } private RelData ReadData16(RelData d, BinaryReader br) { + switch ((Dat16RelType)d.TypeID) + { + case Dat16RelType.Unk01: return new Dat16Unk01(d, br); + case Dat16RelType.Unk02: return new Dat16Unk02(d, br); + case Dat16RelType.Unk03: return new Dat16Unk03(d, br); + case Dat16RelType.Unk04: return new Dat16Unk04(d, br); + case Dat16RelType.Unk05: return new Dat16Unk05(d, br); + case Dat16RelType.Unk06: return new Dat16Unk06(d, br); + case Dat16RelType.Unk07: return new Dat16Unk07(d, br); + case Dat16RelType.Unk08: return new Dat16Unk08(d, br); + case Dat16RelType.Unk09: return new Dat16Unk09(d, br); + case Dat16RelType.Unk10: return new Dat16Unk10(d, br); + case Dat16RelType.Unk12: return new Dat16Unk12(d, br); + case Dat16RelType.Unk13: return new Dat16Unk13(d, br); + case Dat16RelType.Unk15: return new Dat16Unk15(d, br); + default: + break; + } + return d; } private RelData ReadData22(RelData d, BinaryReader br) { - //RelSound s = new RelSound(d, br); - //return s; + switch ((Dat22RelType)d.TypeID) + { + case Dat22RelType.Unk0: return new Dat22Unk0(d, br); + default: + break; + } + return d; } private RelData ReadData54(RelData d, BinaryReader br) @@ -576,10 +663,10 @@ namespace CodeWalker.GameFiles case Dat151RelType.RadioStation: return new Dat151RadioStation(d, br); case Dat151RelType.RadioMusic: return new Dat151RadioMusic(d, br); case Dat151RelType.RadioTrackList: return new Dat151RadioTrackList(d, br); - case Dat151RelType.DoorParams: return new Dat151DoorParams(d, br); + case Dat151RelType.DoorList: return new Dat151DoorList(d, br); case Dat151RelType.Unk84: return new Dat151Unk84(d, br); case Dat151RelType.Unk86: return new Dat151Unk86(d, br); - case Dat151RelType.Unk81: return new Dat151Unk81(d, br); + case Dat151RelType.VehicleRecordList: return new Dat151VehicleRecordList(d, br); case Dat151RelType.Unk55: return new Dat151Unk55(d, br); case Dat151RelType.ShoreLinePool: return new Dat151ShoreLinePool(d, br); case Dat151RelType.ShoreLineLake: return new Dat151ShoreLineLake(d, br); @@ -617,8 +704,8 @@ namespace CodeWalker.GameFiles case Dat151RelType.Unk29: return new Dat151Unk29(d, br); case Dat151RelType.Unk31: return new Dat151Unk31(d, br); case Dat151RelType.Unk33: return new Dat151Unk33(d, br); - case Dat151RelType.Unk35: return new Dat151Unk35(d, br); - case Dat151RelType.Unk36: return new Dat151Unk36(d, br); + case Dat151RelType.PoliceScannerLocation: return new Dat151PoliceScannerLocation(d, br); + case Dat151RelType.PoliceScannerLocationList: return new Dat151PoliceScannerLocationList(d, br); case Dat151RelType.AmbientStreamList: return new Dat151AmbientStreamList(d, br); case Dat151RelType.AmbienceBankMap: return new Dat151AmbienceBankMap(d, br); case Dat151RelType.Unk42: return new Dat151Unk42(d, br); @@ -651,7 +738,7 @@ namespace CodeWalker.GameFiles case Dat151RelType.Unk110: return new Dat151Unk110(d, br); case Dat151RelType.Unk111: return new Dat151Unk111(d, br); case Dat151RelType.Unk112: return new Dat151Unk112(d, br); - case Dat151RelType.Unk113: return new Dat151Unk113(d, br); + case Dat151RelType.CopDispatchInteractionSettings: return new Dat151CopDispatchInteractionSettings(d, br); case Dat151RelType.Unk115: return new Dat151Unk115(d, br); case Dat151RelType.Unk116: return new Dat151Unk116(d, br); case Dat151RelType.Unk118: return new Dat151Unk118(d, br); @@ -743,10 +830,10 @@ namespace CodeWalker.GameFiles case Dat151RelType.RadioStation: return new Dat151RadioStation(this); case Dat151RelType.RadioMusic: return new Dat151RadioMusic(this); case Dat151RelType.RadioTrackList: return new Dat151RadioTrackList(this); - case Dat151RelType.DoorParams: return new Dat151DoorParams(this); + case Dat151RelType.DoorList: return new Dat151DoorList(this); case Dat151RelType.Unk84: return new Dat151Unk84(this); case Dat151RelType.Unk86: return new Dat151Unk86(this); - case Dat151RelType.Unk81: return new Dat151Unk81(this); + case Dat151RelType.VehicleRecordList: return new Dat151VehicleRecordList(this); case Dat151RelType.Unk55: return new Dat151Unk55(this); case Dat151RelType.ShoreLinePool: return new Dat151ShoreLinePool(this); case Dat151RelType.ShoreLineLake: return new Dat151ShoreLineLake(this); @@ -784,8 +871,8 @@ namespace CodeWalker.GameFiles case Dat151RelType.Unk29: return new Dat151Unk29(this); case Dat151RelType.Unk31: return new Dat151Unk31(this); case Dat151RelType.Unk33: return new Dat151Unk33(this); - case Dat151RelType.Unk35: return new Dat151Unk35(this); - case Dat151RelType.Unk36: return new Dat151Unk36(this); + case Dat151RelType.PoliceScannerLocation: return new Dat151PoliceScannerLocation(this); + case Dat151RelType.PoliceScannerLocationList: return new Dat151PoliceScannerLocationList(this); case Dat151RelType.AmbientStreamList: return new Dat151AmbientStreamList(this); case Dat151RelType.AmbienceBankMap: return new Dat151AmbienceBankMap(this); case Dat151RelType.Unk42: return new Dat151Unk42(this); @@ -818,7 +905,7 @@ namespace CodeWalker.GameFiles case Dat151RelType.Unk110: return new Dat151Unk110(this); case Dat151RelType.Unk111: return new Dat151Unk111(this); case Dat151RelType.Unk112: return new Dat151Unk112(this); - case Dat151RelType.Unk113: return new Dat151Unk113(this); + case Dat151RelType.CopDispatchInteractionSettings: return new Dat151CopDispatchInteractionSettings(this); case Dat151RelType.Unk115: return new Dat151Unk115(this); case Dat151RelType.Unk116: return new Dat151Unk116(this); case Dat151RelType.Unk118: return new Dat151Unk118(this); @@ -849,10 +936,61 @@ namespace CodeWalker.GameFiles } else { - d = new RelData(this); + d = new Dat4SpeechData(this); d.TypeID = (byte)dataType; + (d as Dat4SpeechData).Type = (Dat4SpeechType)dataType; return d; } + case RelDatFileType.Dat10ModularSynth: + switch ((Dat10RelType)dataType) + { + case Dat10RelType.Preset: return new Dat10Preset(this); + case Dat10RelType.Synth: return new Dat10Synth(this); + default: + return new Dat10RelData(this);//shouldn't get here + } + case RelDatFileType.Dat15DynamicMixer: + switch ((Dat15RelType)dataType) + { + case Dat15RelType.Unk0: return new Dat15Unk0(this); + case Dat15RelType.Unk1: return new Dat15Unk1(this); + case Dat15RelType.Unk2: return new Dat15Unk2(this); + case Dat15RelType.Unk3: return new Dat15Unk3(this); + case Dat15RelType.Unk4: return new Dat15Unk4(this); + case Dat15RelType.Unk5: return new Dat15Unk5(this); + case Dat15RelType.Unk6: return new Dat15Unk6(this); + case Dat15RelType.Unk7: return new Dat15Unk7(this); + case Dat15RelType.Unk8: return new Dat15Unk8(this); + case Dat15RelType.Unk9: return new Dat15Unk9(this); + default: + return new Dat15RelData(this);//shouldn't get here + } + case RelDatFileType.Dat16Curves: + switch ((Dat16RelType)dataType) + { + case Dat16RelType.Unk01: return new Dat16Unk01(this); + case Dat16RelType.Unk02: return new Dat16Unk02(this); + case Dat16RelType.Unk03: return new Dat16Unk03(this); + case Dat16RelType.Unk04: return new Dat16Unk04(this); + case Dat16RelType.Unk05: return new Dat16Unk05(this); + case Dat16RelType.Unk06: return new Dat16Unk06(this); + case Dat16RelType.Unk07: return new Dat16Unk07(this); + case Dat16RelType.Unk08: return new Dat16Unk08(this); + case Dat16RelType.Unk09: return new Dat16Unk09(this); + case Dat16RelType.Unk10: return new Dat16Unk10(this); + case Dat16RelType.Unk12: return new Dat16Unk12(this); + case Dat16RelType.Unk13: return new Dat16Unk13(this); + case Dat16RelType.Unk15: return new Dat16Unk15(this); + default: + return new Dat16RelData(this);//shouldn't get here + } + case RelDatFileType.Dat22Categories: + switch ((Dat22RelType)dataType) + { + case Dat22RelType.Unk0: return new Dat22Unk0(this); + default: + return new Dat22RelData(this);//shouldn't get here + } default: d = new RelData(this); d.TypeID = (byte)dataType; @@ -900,14 +1038,6 @@ namespace CodeWalker.GameFiles if (RelDatasSorted == null) return; - if ((RelType == RelDatFileType.Dat4) && (!IsAudioConfig)) - { - //speech dat4.rel riles - need more work - DataBlock = null; - return; - } - - MemoryStream ms = new MemoryStream(); BinaryWriter bw = new BinaryWriter(ms); @@ -949,7 +1079,7 @@ namespace CodeWalker.GameFiles case Dat151RelType.AmbientEmitter: case Dat151RelType.AmbientZone: case Dat151RelType.Alarm: - case Dat151RelType.Unk35: + case Dat151RelType.PoliceScannerLocation: while ((ms.Position & 0xF) != 0) bw.Write((byte)0); //align to nearest 16 bytes break; case Dat151RelType.Mood: @@ -1067,8 +1197,6 @@ namespace CodeWalker.GameFiles //{ } IndexHashes = hashes; - //IndexCount = (uint)hashes.Length; - IndexCount = (uint)(IndexHashes?.Length ?? 0); } } @@ -1530,7 +1658,6 @@ namespace CodeWalker.GameFiles } - [TC(typeof(EXP))] public class RelData { public MetaHash NameHash { get; set; } @@ -1616,6 +1743,13 @@ namespace CodeWalker.GameFiles } } + + + + #region dat54 + + + [TC(typeof(EXP))] public class RelSoundHeader { public FlagsUint Flags { get; set; } @@ -2044,11 +2178,6 @@ namespace CodeWalker.GameFiles - - - #region dat54 - - public enum Dat54SoundType : byte { LoopingSound = 1, @@ -4826,8 +4955,8 @@ namespace CodeWalker.GameFiles Unk31 = 31, AmbientEmitterList = 32, Unk33 = 33, - Unk35 = 35, //some kind of emitter?? has Position - Unk36 = 36, //Unk35 List + PoliceScannerLocation = 35, + PoliceScannerLocationList = 36, AmbientZone = 37, AmbientEmitter = 38, AmbientZoneList = 39, @@ -4839,7 +4968,7 @@ namespace CodeWalker.GameFiles InteriorRoom = 46, Door = 47, Unk48 = 48, - DoorParams = 49, //doors/gates + DoorList = 49, //doors/gates WeaponAudioItem = 50, Unk51 = 51, Mod = 52, //what actually is a "mod" here? a change in some audio settings maybe? @@ -4867,8 +4996,8 @@ namespace CodeWalker.GameFiles Unk77 = 77, Unk78 = 78, Unk79 = 79, - VehicleRecord = 80, //vehicle record audio? (YVR) - Unk81 = 81, + VehicleRecord = 80, //vehicle record audio (YVR) + VehicleRecordList = 81, Unk82 = 82, Unk83 = 83, //something to do with animals Unk84 = 84, @@ -4898,14 +5027,14 @@ namespace CodeWalker.GameFiles Unk110 = 110, //conversation/speech related - for scenarios? Unk111 = 111, Unk112 = 112, - Unk113 = 113, + CopDispatchInteractionSettings = 113, //cop_dispatch_interaction_settings RadioTrackEvents = 114, Unk115 = 115, Unk116 = 116, Unk117 = 117, Unk118 = 118, Unk119 = 119, //prop_bush_lrg_02 - RadioTrackList = 120, //radio track list? + RadioTrackList = 120, MacsModelsOverrides = 121, //macs_models_overrides } @@ -5883,8 +6012,9 @@ namespace CodeWalker.GameFiles public float Unk06 { get; set; } public float Unk07 { get; set; } public int Unk08 { get; set; } - public int Unk09 { get; set; } - public int Unk10 { get; set; } + public short Unk09 { get; set; } + public short Unk10 { get; set; } + public int Unk11 { get; set; } public MetaHash Interior { get; set; } public MetaHash Room { get; set; } public MetaHash Unk13 { get; set; } @@ -5912,8 +6042,9 @@ namespace CodeWalker.GameFiles Unk06 = br.ReadSingle(); Unk07 = br.ReadSingle(); Unk08 = br.ReadInt32(); - Unk09 = br.ReadInt32(); - Unk10 = br.ReadInt32(); + Unk09 = br.ReadInt16(); + Unk10 = br.ReadInt16(); + Unk11 = br.ReadInt32(); Interior = br.ReadUInt32(); Room = br.ReadUInt32(); Unk13 = br.ReadUInt32(); @@ -5945,6 +6076,7 @@ namespace CodeWalker.GameFiles bw.Write(Unk08); bw.Write(Unk09); bw.Write(Unk10); + bw.Write(Unk11); bw.Write(Interior); bw.Write(Room); bw.Write(Unk13); @@ -5969,6 +6101,7 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk08", Unk08.ToString()); RelXml.ValueTag(sb, indent, "Unk09", Unk09.ToString()); RelXml.ValueTag(sb, indent, "Unk10", Unk10.ToString()); + RelXml.ValueTag(sb, indent, "Unk11", Unk11.ToString()); RelXml.StringTag(sb, indent, "Interior", RelXml.HashString(Interior)); RelXml.StringTag(sb, indent, "Room", RelXml.HashString(Room)); RelXml.StringTag(sb, indent, "Unk13", RelXml.HashString(Unk13)); @@ -5991,8 +6124,9 @@ namespace CodeWalker.GameFiles Unk06 = Xml.GetChildFloatAttribute(node, "Unk06", "value"); Unk07 = Xml.GetChildFloatAttribute(node, "Unk07", "value"); Unk08 = Xml.GetChildIntAttribute(node, "Unk08", "value"); - Unk09 = Xml.GetChildIntAttribute(node, "Unk09", "value"); - Unk10 = Xml.GetChildIntAttribute(node, "Unk10", "value"); + Unk09 = (short)Xml.GetChildIntAttribute(node, "Unk09", "value"); + Unk10 = (short)Xml.GetChildIntAttribute(node, "Unk10", "value"); + Unk11 = Xml.GetChildIntAttribute(node, "Unk11", "value"); Interior = XmlRel.GetHash(Xml.GetChildInnerText(node, "Interior")); Room = XmlRel.GetHash(Xml.GetChildInnerText(node, "Room")); Unk13 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk13")); @@ -8809,17 +8943,17 @@ namespace CodeWalker.GameFiles return offsets.ToArray(); } } - [TC(typeof(EXP))] public class Dat151DoorParams : Dat151RelData //doors/gates + [TC(typeof(EXP))] public class Dat151DoorList : Dat151RelData //doors/gates { public uint AudioItemCount { get; set; } public Dat151HashPair[] AudioItems { get; set; } - public Dat151DoorParams(RelFile rel) : base(rel) + public Dat151DoorList(RelFile rel) : base(rel) { - Type = Dat151RelType.DoorParams; + Type = Dat151RelType.DoorList; TypeID = (byte)Type; } - public Dat151DoorParams(RelData d, BinaryReader br) : base(d, br) + public Dat151DoorList(RelData d, BinaryReader br) : base(d, br) { AudioItemCount = br.ReadUInt32(); var items = new Dat151HashPair[AudioItemCount]; @@ -8968,17 +9102,17 @@ namespace CodeWalker.GameFiles return offsets.ToArray(); } } - [TC(typeof(EXP))] public class Dat151Unk81 : Dat151RelData + [TC(typeof(EXP))] public class Dat151VehicleRecordList : Dat151RelData { public uint AudioItemCount { get; set; } public Dat151HashPair[] AudioItems { get; set; } - public Dat151Unk81(RelFile rel) : base(rel) + public Dat151VehicleRecordList(RelFile rel) : base(rel) { - Type = Dat151RelType.Unk81; + Type = Dat151RelType.VehicleRecordList; TypeID = (byte)Type; } - public Dat151Unk81(RelData d, BinaryReader br) : base(d, br) + public Dat151VehicleRecordList(RelData d, BinaryReader br) : base(d, br) { AudioItemCount = br.ReadUInt32(); var items = new Dat151HashPair[AudioItemCount]; @@ -10030,12 +10164,12 @@ namespace CodeWalker.GameFiles public MetaHash Horns { get; set; } public MetaHash DoorOpen { get; set; } public MetaHash DoorClose { get; set; } - public MetaHash Unk06 { get; set; } - public MetaHash Unk07 { get; set; } + public MetaHash TrunkOpen { get; set; } + public MetaHash TrunkClose { get; set; } public MetaHash Unk08 { get; set; } public float Unk09 { get; set; } - public MetaHash Unk10 { get; set; } - public MetaHash Unk11 { get; set; } + public MetaHash SuspensionUp { get; set; } + public MetaHash SuspensionDown { get; set; } public float Unk12 { get; set; } public float Unk13 { get; set; } public MetaHash Unk14 { get; set; }//split? 0x00C2FB47.. @@ -10047,7 +10181,7 @@ namespace CodeWalker.GameFiles public MetaHash JumpLandLoose { get; set; } public int Unk21 { get; set; } public int Unk22 { get; set; } - public FlagsUint Unk23 { get; set; } + public FlagsUint RadioFlags { get; set; } public MetaHash IndicatorOn { get; set; } public MetaHash IndicatorOff { get; set; } public MetaHash Handbrake { get; set; } @@ -10077,11 +10211,11 @@ namespace CodeWalker.GameFiles public MetaHash Unk50 { get; set; }// 0x65A95A8B, 0x85439DAD public MetaHash Unk51 { get; set; }// 0x6213618E, 0x990D0483 public int Unk52 { get; set; } - public MetaHash Unk53 { get; set; }// 0x04D73241, 0x7F471776 + public MetaHash ElectricEngine { get; set; }// 0x04D73241, 0x7F471776 public float Unk54 { get; set; } - public MetaHash Unk55 { get; set; } + public MetaHash ReverseWarning { get; set; } public int Unk56 { get; set; } - public MetaHash Unk57 { get; set; } + public MetaHash VehicleMaster { get; set; }//not sure what this one does? public MetaHash ShutdownBeep { get; set; } public float Unk59 { get; set; } public int Unk60 { get; set; } @@ -10111,12 +10245,12 @@ namespace CodeWalker.GameFiles Horns = br.ReadUInt32(); DoorOpen = br.ReadUInt32(); DoorClose = br.ReadUInt32(); - Unk06 = br.ReadUInt32(); - Unk07 = br.ReadUInt32(); + TrunkOpen = br.ReadUInt32(); + TrunkClose = br.ReadUInt32(); Unk08 = br.ReadUInt32(); Unk09 = br.ReadSingle(); - Unk10 = br.ReadUInt32(); - Unk11 = br.ReadUInt32(); + SuspensionUp = br.ReadUInt32(); + SuspensionDown = br.ReadUInt32(); Unk12 = br.ReadSingle(); Unk13 = br.ReadSingle(); Unk14 = br.ReadUInt32();//split? 0x00C2FB47.. @@ -10128,7 +10262,7 @@ namespace CodeWalker.GameFiles JumpLandLoose = br.ReadUInt32(); Unk21 = br.ReadInt32(); Unk22 = br.ReadInt32(); - Unk23 = br.ReadUInt32(); + RadioFlags = br.ReadUInt32(); //Unk23a = br.ReadUInt16();//0x0002 //Unk23b = br.ReadUInt16();//0x0801 IndicatorOn = br.ReadUInt32(); @@ -10162,11 +10296,11 @@ namespace CodeWalker.GameFiles Unk50 = br.ReadUInt32();//flags? 0x65A95A8B, 0x85439DAD Unk51 = br.ReadUInt32();//flags? 0x6213618E, 0x990D0483 Unk52 = br.ReadInt32(); - Unk53 = br.ReadUInt32();//flags? 0x04D73241, 0x7F471776 + ElectricEngine = br.ReadUInt32();//flags? 0x04D73241, 0x7F471776 Unk54 = br.ReadSingle(); - Unk55 = br.ReadUInt32(); + ReverseWarning = br.ReadUInt32(); Unk56 = br.ReadInt32(); - Unk57 = br.ReadUInt32(); + VehicleMaster = br.ReadUInt32(); ShutdownBeep = br.ReadUInt32(); Unk59 = br.ReadSingle(); Unk60 = br.ReadInt32(); @@ -10286,12 +10420,12 @@ namespace CodeWalker.GameFiles bw.Write(Horns); bw.Write(DoorOpen); bw.Write(DoorClose); - bw.Write(Unk06); - bw.Write(Unk07); + bw.Write(TrunkOpen); + bw.Write(TrunkClose); bw.Write(Unk08); bw.Write(Unk09); - bw.Write(Unk10); - bw.Write(Unk11); + bw.Write(SuspensionUp); + bw.Write(SuspensionDown); bw.Write(Unk12); bw.Write(Unk13); bw.Write(Unk14);//split? 0x00C2FB47.. @@ -10303,7 +10437,7 @@ namespace CodeWalker.GameFiles bw.Write(JumpLandLoose); bw.Write(Unk21); bw.Write(Unk22); - bw.Write(Unk23); + bw.Write(RadioFlags); //bw.Write(Unk23a);//0x0002 //bw.Write(Unk23b);//0x0801 bw.Write(IndicatorOn); @@ -10337,11 +10471,11 @@ namespace CodeWalker.GameFiles bw.Write(Unk50);//flags? 0x65A95A8B, 0x85439DAD bw.Write(Unk51);//flags? 0x6213618E, 0x990D0483 bw.Write(Unk52); - bw.Write(Unk53);//flags? 0x04D73241, 0x7F471776 + bw.Write(ElectricEngine);//flags? 0x04D73241, 0x7F471776 bw.Write(Unk54); - bw.Write(Unk55); + bw.Write(ReverseWarning); bw.Write(Unk56); - bw.Write(Unk57); + bw.Write(VehicleMaster); bw.Write(ShutdownBeep); bw.Write(Unk59); bw.Write(Unk60); @@ -10375,12 +10509,12 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "Horns", RelXml.HashString(Horns)); RelXml.StringTag(sb, indent, "DoorOpen", RelXml.HashString(DoorOpen)); RelXml.StringTag(sb, indent, "DoorClose", RelXml.HashString(DoorClose)); - RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); - RelXml.StringTag(sb, indent, "Unk07", RelXml.HashString(Unk07)); + RelXml.StringTag(sb, indent, "TrunkOpen", RelXml.HashString(TrunkOpen)); + RelXml.StringTag(sb, indent, "TrunkClose", RelXml.HashString(TrunkClose)); RelXml.StringTag(sb, indent, "Unk08", RelXml.HashString(Unk08)); RelXml.ValueTag(sb, indent, "Unk09", FloatUtil.ToString(Unk09)); - RelXml.StringTag(sb, indent, "Unk10", RelXml.HashString(Unk10)); - RelXml.StringTag(sb, indent, "Unk11", RelXml.HashString(Unk11)); + RelXml.StringTag(sb, indent, "SuspensionUp", RelXml.HashString(SuspensionUp)); + RelXml.StringTag(sb, indent, "SuspensionDown", RelXml.HashString(SuspensionDown)); RelXml.ValueTag(sb, indent, "Unk12", FloatUtil.ToString(Unk12)); RelXml.ValueTag(sb, indent, "Unk13", FloatUtil.ToString(Unk13)); RelXml.StringTag(sb, indent, "Unk14", RelXml.HashString(Unk14)); @@ -10392,7 +10526,7 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "JumpLandLoose", RelXml.HashString(JumpLandLoose)); RelXml.ValueTag(sb, indent, "Unk21", Unk21.ToString()); RelXml.ValueTag(sb, indent, "Unk22", Unk22.ToString()); - RelXml.ValueTag(sb, indent, "Unk23", "0x" + Unk23.Hex); + RelXml.ValueTag(sb, indent, "RadioFlags", "0x" + RadioFlags.Hex); RelXml.StringTag(sb, indent, "IndicatorOn", RelXml.HashString(IndicatorOn)); RelXml.StringTag(sb, indent, "IndicatorOff", RelXml.HashString(IndicatorOff)); RelXml.StringTag(sb, indent, "Handbrake", RelXml.HashString(Handbrake)); @@ -10422,11 +10556,11 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "Unk50", RelXml.HashString(Unk50)); RelXml.StringTag(sb, indent, "Unk51", RelXml.HashString(Unk51)); RelXml.ValueTag(sb, indent, "Unk52", Unk52.ToString()); - RelXml.StringTag(sb, indent, "Unk53", RelXml.HashString(Unk53)); + RelXml.StringTag(sb, indent, "ElectricEngine", RelXml.HashString(ElectricEngine)); RelXml.ValueTag(sb, indent, "Unk54", FloatUtil.ToString(Unk54)); - RelXml.StringTag(sb, indent, "Unk55", RelXml.HashString(Unk55)); + RelXml.StringTag(sb, indent, "ReverseWarning", RelXml.HashString(ReverseWarning)); RelXml.ValueTag(sb, indent, "Unk56", Unk56.ToString()); - RelXml.StringTag(sb, indent, "Unk57", RelXml.HashString(Unk57)); + RelXml.StringTag(sb, indent, "VehicleMaster", RelXml.HashString(VehicleMaster)); RelXml.StringTag(sb, indent, "ShutdownBeep", RelXml.HashString(ShutdownBeep)); RelXml.ValueTag(sb, indent, "Unk59", FloatUtil.ToString(Unk59)); RelXml.ValueTag(sb, indent, "Unk60", Unk60.ToString()); @@ -10451,12 +10585,12 @@ namespace CodeWalker.GameFiles Horns = XmlRel.GetHash(Xml.GetChildInnerText(node, "Horns")); DoorOpen = XmlRel.GetHash(Xml.GetChildInnerText(node, "DoorOpen")); DoorClose = XmlRel.GetHash(Xml.GetChildInnerText(node, "DoorClose")); - Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); - Unk07 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk07")); + TrunkOpen = XmlRel.GetHash(Xml.GetChildInnerText(node, "TrunkOpen")); + TrunkClose = XmlRel.GetHash(Xml.GetChildInnerText(node, "TrunkClose")); Unk08 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk08")); Unk09 = Xml.GetChildFloatAttribute(node, "Unk09", "value"); - Unk10 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk10")); - Unk11 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk11")); + SuspensionUp = XmlRel.GetHash(Xml.GetChildInnerText(node, "SuspensionUp")); + SuspensionDown = XmlRel.GetHash(Xml.GetChildInnerText(node, "SuspensionDown")); Unk12 = Xml.GetChildFloatAttribute(node, "Unk12", "value"); Unk13 = Xml.GetChildFloatAttribute(node, "Unk13", "value"); Unk14 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk14")); @@ -10468,7 +10602,7 @@ namespace CodeWalker.GameFiles JumpLandLoose = XmlRel.GetHash(Xml.GetChildInnerText(node, "JumpLandLoose")); Unk21 = Xml.GetChildIntAttribute(node, "Unk21", "value"); Unk22 = Xml.GetChildIntAttribute(node, "Unk22", "value"); - Unk23 = Xml.GetChildUIntAttribute(node, "Unk23", "value"); + RadioFlags = Xml.GetChildUIntAttribute(node, "RadioFlags", "value"); IndicatorOn = XmlRel.GetHash(Xml.GetChildInnerText(node, "IndicatorOn")); IndicatorOff = XmlRel.GetHash(Xml.GetChildInnerText(node, "IndicatorOff")); Handbrake = XmlRel.GetHash(Xml.GetChildInnerText(node, "Handbrake")); @@ -10498,11 +10632,11 @@ namespace CodeWalker.GameFiles Unk50 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk50")); Unk51 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk51")); Unk52 = Xml.GetChildIntAttribute(node, "Unk52", "value"); - Unk53 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk53")); + ElectricEngine = XmlRel.GetHash(Xml.GetChildInnerText(node, "ElectricEngine")); Unk54 = Xml.GetChildFloatAttribute(node, "Unk54", "value"); - Unk55 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk55")); + ReverseWarning = XmlRel.GetHash(Xml.GetChildInnerText(node, "ReverseWarning")); Unk56 = Xml.GetChildIntAttribute(node, "Unk56", "value"); - Unk57 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk57")); + VehicleMaster = XmlRel.GetHash(Xml.GetChildInnerText(node, "VehicleMaster")); ShutdownBeep = XmlRel.GetHash(Xml.GetChildInnerText(node, "ShutdownBeep")); Unk59 = Xml.GetChildFloatAttribute(node, "Unk59", "value"); Unk60 = Xml.GetChildIntAttribute(node, "Unk60", "value"); @@ -11728,48 +11862,48 @@ namespace CodeWalker.GameFiles [TC(typeof(EXP))] public class Dat151Boat : Dat151RelData { public FlagsUint Flags { get; set; } - public MetaHash Unk01 { get; set; } - public MetaHash Unk02 { get; set; } - public MetaHash Unk03 { get; set; } - public MetaHash Unk04 { get; set; } - public MetaHash Unk05 { get; set; } - public MetaHash Unk06 { get; set; } - public MetaHash Unk07 { get; set; } - public MetaHash Unk08 { get; set; } - public MetaHash Unk09 { get; set; } - public MetaHash Unk10 { get; set; } - public MetaHash Unk11 { get; set; } - public MetaHash Unk12 { get; set; } + public MetaHash Engine { get; set; } + public MetaHash EngineVolume { get; set; } + public MetaHash EnginePitch { get; set; } + public MetaHash Engine2 { get; set; } + public MetaHash Engine2Volume { get; set; } + public MetaHash Engine2Pitch { get; set; } + public MetaHash EngineLowReso { get; set; } + public MetaHash EngineLowResoVolume { get; set; } + public MetaHash EngineLowResoPitch { get; set; } + public MetaHash EngineIdleLoop { get; set; } + public MetaHash EngineIdleVolume { get; set; } + public MetaHash EngineIdlePitch { get; set; } public MetaHash Unk13 { get; set; } - public MetaHash Unk14 { get; set; } + public MetaHash WaterTurbulenceVolume { get; set; } public MetaHash Unk15 { get; set; } public MetaHash Unk16 { get; set; } public MetaHash Unk17 { get; set; } public MetaHash Unk18 { get; set; } - public MetaHash Unk19 { get; set; }//scanner params + public MetaHash PoliceScannerParams { get; set; }//scanner params public int Unk20 { get; set; } - public MetaHash Unk21 { get; set; } - public MetaHash Unk22 { get; set; } - public MetaHash Unk23 { get; set; } + public MetaHash Horn { get; set; } + public MetaHash Ignition { get; set; } + public MetaHash Shutdown { get; set; } public MetaHash Unk24 { get; set; }//0 - public MetaHash Unk25 { get; set; }//engine submix - public MetaHash Unk26 { get; set; }//engine submix preset - public MetaHash Unk27 { get; set; }//exhaust submix - public MetaHash Unk28 { get; set; }//exhaust submix preset + public MetaHash EngineSubmix { get; set; }//engine submix + public MetaHash EngineSubmixPreset { get; set; }//engine submix preset + public MetaHash ExhaustSubmix { get; set; }//exhaust submix + public MetaHash ExhaustSubmixPreset { get; set; }//exhaust submix preset public MetaHash Unk29 { get; set; } public MetaHash Unk30 { get; set; } public MetaHash Unk31 { get; set; } - public MetaHash Unk32 { get; set; }//wave hit (medium?) + public MetaHash WaveHitMedium { get; set; }//wave hit (medium?) public MetaHash Unk33 { get; set; }//0 public MetaHash Unk34 { get; set; } public MetaHash Unk35 { get; set; } - public MetaHash Unk36 { get; set; }//granular engine + public MetaHash EngineGranular { get; set; }//granular engine public MetaHash Unk37 { get; set; } - public MetaHash Unk38 { get; set; } - public MetaHash Unk39 { get; set; }//startup + public MetaHash Ignition2 { get; set; } + public MetaHash Startup { get; set; }//startup public MetaHash Unk40 { get; set; } public MetaHash Unk41 { get; set; } - public MetaHash Unk42 { get; set; } + public MetaHash Unk42 { get; set; }//constant_one (not really helpful..!) public MetaHash Unk43 { get; set; } public MetaHash Unk44 { get; set; } public MetaHash Unk45 { get; set; } @@ -11787,7 +11921,7 @@ namespace CodeWalker.GameFiles public MetaHash Unk57 { get; set; } public MetaHash Unk58 { get; set; } public MetaHash Unk59 { get; set; } - public MetaHash Unk60 { get; set; }//wave hit (big air?) + public MetaHash WaveHitBigAir { get; set; }//wave hit (big air?) public float Unk61 { get; set; } public MetaHash Unk62 { get; set; } public MetaHash Unk63 { get; set; } @@ -11801,45 +11935,45 @@ namespace CodeWalker.GameFiles public Dat151Boat(RelData d, BinaryReader br) : base(d, br) { Flags = br.ReadUInt32(); - Unk01 = br.ReadUInt32(); - Unk02 = br.ReadUInt32(); - Unk03 = br.ReadUInt32(); - Unk04 = br.ReadUInt32(); - Unk05 = br.ReadUInt32(); - Unk06 = br.ReadUInt32(); - Unk07 = br.ReadUInt32(); - Unk08 = br.ReadUInt32(); - Unk09 = br.ReadUInt32(); - Unk10 = br.ReadUInt32(); - Unk11 = br.ReadUInt32(); - Unk12 = br.ReadUInt32(); + Engine = br.ReadUInt32(); + EngineVolume = br.ReadUInt32(); + EnginePitch = br.ReadUInt32(); + Engine2 = br.ReadUInt32(); + Engine2Volume = br.ReadUInt32(); + Engine2Pitch = br.ReadUInt32(); + EngineLowReso = br.ReadUInt32(); + EngineLowResoVolume = br.ReadUInt32(); + EngineLowResoPitch = br.ReadUInt32(); + EngineIdleLoop = br.ReadUInt32(); + EngineIdleVolume = br.ReadUInt32(); + EngineIdlePitch = br.ReadUInt32(); Unk13 = br.ReadUInt32(); - Unk14 = br.ReadUInt32(); + WaterTurbulenceVolume = br.ReadUInt32(); Unk15 = br.ReadUInt32(); Unk16 = br.ReadUInt32(); Unk17 = br.ReadUInt32(); Unk18 = br.ReadUInt32(); - Unk19 = br.ReadUInt32(); + PoliceScannerParams = br.ReadUInt32(); Unk20 = br.ReadInt32(); - Unk21 = br.ReadUInt32(); - Unk22 = br.ReadUInt32(); - Unk23 = br.ReadUInt32(); + Horn = br.ReadUInt32(); + Ignition = br.ReadUInt32(); + Shutdown = br.ReadUInt32(); Unk24 = br.ReadUInt32(); - Unk25 = br.ReadUInt32(); - Unk26 = br.ReadUInt32(); - Unk27 = br.ReadUInt32(); - Unk28 = br.ReadUInt32(); + EngineSubmix = br.ReadUInt32(); + EngineSubmixPreset = br.ReadUInt32(); + ExhaustSubmix = br.ReadUInt32(); + ExhaustSubmixPreset = br.ReadUInt32(); Unk29 = br.ReadUInt32(); Unk30 = br.ReadUInt32(); Unk31 = br.ReadUInt32(); - Unk32 = br.ReadUInt32(); + WaveHitMedium = br.ReadUInt32(); Unk33 = br.ReadUInt32(); Unk34 = br.ReadUInt32(); Unk35 = br.ReadUInt32(); - Unk36 = br.ReadUInt32(); + EngineGranular = br.ReadUInt32(); Unk37 = br.ReadUInt32(); - Unk38 = br.ReadUInt32(); - Unk39 = br.ReadUInt32(); + Ignition2 = br.ReadUInt32(); + Startup = br.ReadUInt32(); Unk40 = br.ReadUInt32(); Unk41 = br.ReadUInt32(); Unk42 = br.ReadUInt32(); @@ -11860,7 +11994,7 @@ namespace CodeWalker.GameFiles Unk57 = br.ReadUInt32(); Unk58 = br.ReadUInt32(); Unk59 = br.ReadUInt32(); - Unk60 = br.ReadUInt32(); + WaveHitBigAir = br.ReadUInt32(); Unk61 = br.ReadSingle(); Unk62 = br.ReadUInt32(); Unk63 = br.ReadUInt32(); @@ -11879,45 +12013,45 @@ namespace CodeWalker.GameFiles WriteTypeAndOffset(bw); bw.Write(Flags); - bw.Write(Unk01); - bw.Write(Unk02); - bw.Write(Unk03); - bw.Write(Unk04); - bw.Write(Unk05); - bw.Write(Unk06); - bw.Write(Unk07); - bw.Write(Unk08); - bw.Write(Unk09); - bw.Write(Unk10); - bw.Write(Unk11); - bw.Write(Unk12); + bw.Write(Engine); + bw.Write(EngineVolume); + bw.Write(EnginePitch); + bw.Write(Engine2); + bw.Write(Engine2Volume); + bw.Write(Engine2Pitch); + bw.Write(EngineLowReso); + bw.Write(EngineLowResoVolume); + bw.Write(EngineLowResoPitch); + bw.Write(EngineIdleLoop); + bw.Write(EngineIdleVolume); + bw.Write(EngineIdlePitch); bw.Write(Unk13); - bw.Write(Unk14); + bw.Write(WaterTurbulenceVolume); bw.Write(Unk15); bw.Write(Unk16); bw.Write(Unk17); bw.Write(Unk18); - bw.Write(Unk19); + bw.Write(PoliceScannerParams); bw.Write(Unk20); - bw.Write(Unk21); - bw.Write(Unk22); - bw.Write(Unk23); + bw.Write(Horn); + bw.Write(Ignition); + bw.Write(Shutdown); bw.Write(Unk24); - bw.Write(Unk25); - bw.Write(Unk26); - bw.Write(Unk27); - bw.Write(Unk28); + bw.Write(EngineSubmix); + bw.Write(EngineSubmixPreset); + bw.Write(ExhaustSubmix); + bw.Write(ExhaustSubmixPreset); bw.Write(Unk29); bw.Write(Unk30); bw.Write(Unk31); - bw.Write(Unk32); + bw.Write(WaveHitMedium); bw.Write(Unk33); bw.Write(Unk34); bw.Write(Unk35); - bw.Write(Unk36); + bw.Write(EngineGranular); bw.Write(Unk37); - bw.Write(Unk38); - bw.Write(Unk39); + bw.Write(Ignition2); + bw.Write(Startup); bw.Write(Unk40); bw.Write(Unk41); bw.Write(Unk42); @@ -11938,7 +12072,7 @@ namespace CodeWalker.GameFiles bw.Write(Unk57); bw.Write(Unk58); bw.Write(Unk59); - bw.Write(Unk60); + bw.Write(WaveHitBigAir); bw.Write(Unk61); bw.Write(Unk62); bw.Write(Unk63); @@ -11947,45 +12081,45 @@ namespace CodeWalker.GameFiles public override void WriteXml(StringBuilder sb, int indent) { RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); - RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); - RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); - RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); - RelXml.StringTag(sb, indent, "Unk04", RelXml.HashString(Unk04)); - RelXml.StringTag(sb, indent, "Unk05", RelXml.HashString(Unk05)); - RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); - RelXml.StringTag(sb, indent, "Unk07", RelXml.HashString(Unk07)); - RelXml.StringTag(sb, indent, "Unk08", RelXml.HashString(Unk08)); - RelXml.StringTag(sb, indent, "Unk09", RelXml.HashString(Unk09)); - RelXml.StringTag(sb, indent, "Unk10", RelXml.HashString(Unk10)); - RelXml.StringTag(sb, indent, "Unk11", RelXml.HashString(Unk11)); - RelXml.StringTag(sb, indent, "Unk12", RelXml.HashString(Unk12)); + RelXml.StringTag(sb, indent, "Engine", RelXml.HashString(Engine)); + RelXml.StringTag(sb, indent, "EngineVolume", RelXml.HashString(EngineVolume)); + RelXml.StringTag(sb, indent, "EnginePitch", RelXml.HashString(EnginePitch)); + RelXml.StringTag(sb, indent, "Engine2", RelXml.HashString(Engine2)); + RelXml.StringTag(sb, indent, "Engine2Volume", RelXml.HashString(Engine2Volume)); + RelXml.StringTag(sb, indent, "Engine2Pitch", RelXml.HashString(Engine2Pitch)); + RelXml.StringTag(sb, indent, "EngineLowReso", RelXml.HashString(EngineLowReso)); + RelXml.StringTag(sb, indent, "EngineLowResoVolume", RelXml.HashString(EngineLowResoVolume)); + RelXml.StringTag(sb, indent, "EngineLowResoPitch", RelXml.HashString(EngineLowResoPitch)); + RelXml.StringTag(sb, indent, "EngineIdleLoop", RelXml.HashString(EngineIdleLoop)); + RelXml.StringTag(sb, indent, "EngineIdleVolume", RelXml.HashString(EngineIdleVolume)); + RelXml.StringTag(sb, indent, "EngineIdlePitch", RelXml.HashString(EngineIdlePitch)); RelXml.StringTag(sb, indent, "Unk13", RelXml.HashString(Unk13)); - RelXml.StringTag(sb, indent, "Unk14", RelXml.HashString(Unk14)); + RelXml.StringTag(sb, indent, "WaterTurbulenceVolume", RelXml.HashString(WaterTurbulenceVolume)); RelXml.StringTag(sb, indent, "Unk15", RelXml.HashString(Unk15)); RelXml.StringTag(sb, indent, "Unk16", RelXml.HashString(Unk16)); RelXml.StringTag(sb, indent, "Unk17", RelXml.HashString(Unk17)); RelXml.StringTag(sb, indent, "Unk18", RelXml.HashString(Unk18)); - RelXml.StringTag(sb, indent, "Unk19", RelXml.HashString(Unk19)); + RelXml.StringTag(sb, indent, "PoliceScannerParams", RelXml.HashString(PoliceScannerParams)); RelXml.ValueTag(sb, indent, "Unk20", Unk20.ToString()); - RelXml.StringTag(sb, indent, "Unk21", RelXml.HashString(Unk21)); - RelXml.StringTag(sb, indent, "Unk22", RelXml.HashString(Unk22)); - RelXml.StringTag(sb, indent, "Unk23", RelXml.HashString(Unk23)); + RelXml.StringTag(sb, indent, "Horn", RelXml.HashString(Horn)); + RelXml.StringTag(sb, indent, "Ignition", RelXml.HashString(Ignition)); + RelXml.StringTag(sb, indent, "Shutdown", RelXml.HashString(Shutdown)); RelXml.StringTag(sb, indent, "Unk24", RelXml.HashString(Unk24)); - RelXml.StringTag(sb, indent, "Unk25", RelXml.HashString(Unk25)); - RelXml.StringTag(sb, indent, "Unk26", RelXml.HashString(Unk26)); - RelXml.StringTag(sb, indent, "Unk27", RelXml.HashString(Unk27)); - RelXml.StringTag(sb, indent, "Unk28", RelXml.HashString(Unk28)); + RelXml.StringTag(sb, indent, "EngineSubmix", RelXml.HashString(EngineSubmix)); + RelXml.StringTag(sb, indent, "EngineSubmixPreset", RelXml.HashString(EngineSubmixPreset)); + RelXml.StringTag(sb, indent, "ExhaustSubmix", RelXml.HashString(ExhaustSubmix)); + RelXml.StringTag(sb, indent, "ExhaustSubmixPreset", RelXml.HashString(ExhaustSubmixPreset)); RelXml.StringTag(sb, indent, "Unk29", RelXml.HashString(Unk29)); RelXml.StringTag(sb, indent, "Unk30", RelXml.HashString(Unk30)); RelXml.StringTag(sb, indent, "Unk31", RelXml.HashString(Unk31)); - RelXml.StringTag(sb, indent, "Unk32", RelXml.HashString(Unk32)); + RelXml.StringTag(sb, indent, "WaveHitMedium", RelXml.HashString(WaveHitMedium)); RelXml.StringTag(sb, indent, "Unk33", RelXml.HashString(Unk33)); RelXml.StringTag(sb, indent, "Unk34", RelXml.HashString(Unk34)); RelXml.StringTag(sb, indent, "Unk35", RelXml.HashString(Unk35)); - RelXml.StringTag(sb, indent, "Unk36", RelXml.HashString(Unk36)); + RelXml.StringTag(sb, indent, "EngineGranular", RelXml.HashString(EngineGranular)); RelXml.StringTag(sb, indent, "Unk37", RelXml.HashString(Unk37)); - RelXml.StringTag(sb, indent, "Unk38", RelXml.HashString(Unk38)); - RelXml.StringTag(sb, indent, "Unk39", RelXml.HashString(Unk39)); + RelXml.StringTag(sb, indent, "Ignition2", RelXml.HashString(Ignition2)); + RelXml.StringTag(sb, indent, "Startup", RelXml.HashString(Startup)); RelXml.StringTag(sb, indent, "Unk40", RelXml.HashString(Unk40)); RelXml.StringTag(sb, indent, "Unk41", RelXml.HashString(Unk41)); RelXml.StringTag(sb, indent, "Unk42", RelXml.HashString(Unk42)); @@ -12006,7 +12140,7 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "Unk57", RelXml.HashString(Unk57)); RelXml.StringTag(sb, indent, "Unk58", RelXml.HashString(Unk58)); RelXml.StringTag(sb, indent, "Unk59", RelXml.HashString(Unk59)); - RelXml.StringTag(sb, indent, "Unk60", RelXml.HashString(Unk60)); + RelXml.StringTag(sb, indent, "WaveHitBigAir", RelXml.HashString(WaveHitBigAir)); RelXml.ValueTag(sb, indent, "Unk61", FloatUtil.ToString(Unk61)); RelXml.StringTag(sb, indent, "Unk62", RelXml.HashString(Unk62)); RelXml.StringTag(sb, indent, "Unk63", RelXml.HashString(Unk63)); @@ -12015,45 +12149,45 @@ namespace CodeWalker.GameFiles public override void ReadXml(XmlNode node) { Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); - Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); - Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); - Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); - Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk04")); - Unk05 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk05")); - Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); - Unk07 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk07")); - Unk08 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk08")); - Unk09 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk09")); - Unk10 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk10")); - Unk11 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk11")); - Unk12 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk12")); + Engine = XmlRel.GetHash(Xml.GetChildInnerText(node, "Engine")); + EngineVolume = XmlRel.GetHash(Xml.GetChildInnerText(node, "EngineVolume")); + EnginePitch = XmlRel.GetHash(Xml.GetChildInnerText(node, "EnginePitch")); + Engine2 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Engine2")); + Engine2Volume = XmlRel.GetHash(Xml.GetChildInnerText(node, "Engine2Volume")); + Engine2Pitch = XmlRel.GetHash(Xml.GetChildInnerText(node, "Engine2Pitch")); + EngineLowReso = XmlRel.GetHash(Xml.GetChildInnerText(node, "EngineLowReso")); + EngineLowResoVolume = XmlRel.GetHash(Xml.GetChildInnerText(node, "EngineLowResoVolume")); + EngineLowResoPitch = XmlRel.GetHash(Xml.GetChildInnerText(node, "EngineLowResoPitch")); + EngineIdleLoop = XmlRel.GetHash(Xml.GetChildInnerText(node, "EngineIdleLoop")); + EngineIdleVolume = XmlRel.GetHash(Xml.GetChildInnerText(node, "EngineIdleVolume")); + EngineIdlePitch = XmlRel.GetHash(Xml.GetChildInnerText(node, "EngineIdlePitch")); Unk13 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk13")); - Unk14 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk14")); + WaterTurbulenceVolume = XmlRel.GetHash(Xml.GetChildInnerText(node, "WaterTurbulenceVolume")); Unk15 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk15")); Unk16 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk16")); Unk17 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk17")); Unk18 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk18")); - Unk19 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk19")); + PoliceScannerParams = XmlRel.GetHash(Xml.GetChildInnerText(node, "PoliceScannerParams")); Unk20 = Xml.GetChildIntAttribute(node, "Unk20", "value"); - Unk21 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk21")); - Unk22 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk22")); - Unk23 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk23")); + Horn = XmlRel.GetHash(Xml.GetChildInnerText(node, "Horn")); + Ignition = XmlRel.GetHash(Xml.GetChildInnerText(node, "Ignition")); + Shutdown = XmlRel.GetHash(Xml.GetChildInnerText(node, "Shutdown")); Unk24 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk24")); - Unk25 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk25")); - Unk26 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk26")); - Unk27 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk27")); - Unk28 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk28")); + EngineSubmix = XmlRel.GetHash(Xml.GetChildInnerText(node, "EngineSubmix")); + EngineSubmixPreset = XmlRel.GetHash(Xml.GetChildInnerText(node, "EngineSubmixPreset")); + ExhaustSubmix = XmlRel.GetHash(Xml.GetChildInnerText(node, "ExhaustSubmix")); + ExhaustSubmixPreset = XmlRel.GetHash(Xml.GetChildInnerText(node, "ExhaustSubmixPreset")); Unk29 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk29")); Unk30 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk30")); Unk31 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk31")); - Unk32 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk32")); + WaveHitMedium = XmlRel.GetHash(Xml.GetChildInnerText(node, "WaveHitMedium")); Unk33 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk33")); Unk34 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk34")); Unk35 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk35")); - Unk36 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk36")); + EngineGranular = XmlRel.GetHash(Xml.GetChildInnerText(node, "EngineGranular")); Unk37 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk37")); - Unk38 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk38")); - Unk39 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk39")); + Ignition2 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Ignition2")); + Startup = XmlRel.GetHash(Xml.GetChildInnerText(node, "Startup")); Unk40 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk40")); Unk41 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk41")); Unk42 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk42")); @@ -12074,7 +12208,7 @@ namespace CodeWalker.GameFiles Unk57 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk57")); Unk58 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk58")); Unk59 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk59")); - Unk60 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk60")); + WaveHitBigAir = XmlRel.GetHash(Xml.GetChildInnerText(node, "WaveHitBigAir")); Unk61 = Xml.GetChildFloatAttribute(node, "Unk61", "value"); Unk62 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk62")); Unk63 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk63")); @@ -12089,8 +12223,8 @@ namespace CodeWalker.GameFiles public MetaHash Unk03 { get; set; } public float Unk04 { get; set; } public float Unk05 { get; set; } - public MetaHash Unk06 { get; set; } - public MetaHash Unk07 { get; set; } + public MetaHash SuspensionUp { get; set; } + public MetaHash SuspensionDown { get; set; } public float Unk08 { get; set; } public float Unk09 { get; set; } public MetaHash Unk10 { get; set; } @@ -12115,8 +12249,8 @@ namespace CodeWalker.GameFiles Unk03 = br.ReadUInt32(); Unk04 = br.ReadSingle(); Unk05 = br.ReadSingle(); - Unk06 = br.ReadUInt32(); - Unk07 = br.ReadUInt32(); + SuspensionUp = br.ReadUInt32(); + SuspensionDown = br.ReadUInt32(); Unk08 = br.ReadSingle(); Unk09 = br.ReadSingle(); Unk10 = br.ReadUInt32(); @@ -12142,8 +12276,8 @@ namespace CodeWalker.GameFiles bw.Write(Unk03); bw.Write(Unk04); bw.Write(Unk05); - bw.Write(Unk06); - bw.Write(Unk07); + bw.Write(SuspensionUp); + bw.Write(SuspensionDown); bw.Write(Unk08); bw.Write(Unk09); bw.Write(Unk10); @@ -12163,8 +12297,8 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); RelXml.ValueTag(sb, indent, "Unk04", FloatUtil.ToString(Unk04)); RelXml.ValueTag(sb, indent, "Unk05", FloatUtil.ToString(Unk05)); - RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); - RelXml.StringTag(sb, indent, "Unk07", RelXml.HashString(Unk07)); + RelXml.StringTag(sb, indent, "SuspensionUp", RelXml.HashString(SuspensionUp)); + RelXml.StringTag(sb, indent, "SuspensionDown", RelXml.HashString(SuspensionDown)); RelXml.ValueTag(sb, indent, "Unk08", FloatUtil.ToString(Unk08)); RelXml.ValueTag(sb, indent, "Unk09", FloatUtil.ToString(Unk09)); RelXml.StringTag(sb, indent, "Unk10", RelXml.HashString(Unk10)); @@ -12184,8 +12318,8 @@ namespace CodeWalker.GameFiles Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); Unk04 = Xml.GetChildFloatAttribute(node, "Unk04", "value"); Unk05 = Xml.GetChildFloatAttribute(node, "Unk05", "value"); - Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); - Unk07 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk07")); + SuspensionUp = XmlRel.GetHash(Xml.GetChildInnerText(node, "SuspensionUp")); + SuspensionDown = XmlRel.GetHash(Xml.GetChildInnerText(node, "SuspensionDown")); Unk08 = Xml.GetChildFloatAttribute(node, "Unk08", "value"); Unk09 = Xml.GetChildFloatAttribute(node, "Unk09", "value"); Unk10 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk10")); @@ -12201,12 +12335,12 @@ namespace CodeWalker.GameFiles [TC(typeof(EXP))] public class Dat151Aeroplane : Dat151RelData { public FlagsUint Flags { get; set; } - public MetaHash Unk01 { get; set; }//engine loop - public MetaHash Unk02 { get; set; }//exhaust loop - public MetaHash Unk03 { get; set; }//idle loop - public MetaHash Unk04 { get; set; }//distance loop - public MetaHash Unk05 { get; set; }//propellor loop - public MetaHash Unk06 { get; set; }//banking loop + public MetaHash Engine { get; set; }//engine loop + public MetaHash Exhaust { get; set; }//exhaust loop + public MetaHash Idle { get; set; }//idle loop + public MetaHash Distance { get; set; }//distance loop + public MetaHash Propeller { get; set; }//propellor loop + public MetaHash Banking { get; set; }//banking loop public short Unk07 { get; set; } public short Unk08 { get; set; } public short Unk09 { get; set; } @@ -12228,22 +12362,22 @@ namespace CodeWalker.GameFiles public MetaHash Unk25 { get; set; } public MetaHash Unk26 { get; set; } public MetaHash Unk27 { get; set; } - public MetaHash Unk28 { get; set; } - public MetaHash Unk29 { get; set; }//door open - public MetaHash Unk30 { get; set; }//door close - public MetaHash Unk31 { get; set; } - public MetaHash Unk32 { get; set; } - public MetaHash Unk33 { get; set; } - public MetaHash Unk34 { get; set; }//startup + public MetaHash StallWarning { get; set; } + public MetaHash DoorOpen { get; set; }//door open + public MetaHash DoorClose { get; set; }//door close + public MetaHash DoorLimit { get; set; } + public MetaHash GearDeploy { get; set; } + public MetaHash GearRetract { get; set; } + public MetaHash Startup { get; set; }//startup public MetaHash Unk35 { get; set; } public MetaHash Unk36 { get; set; } public MetaHash Unk37 { get; set; } public MetaHash Unk38 { get; set; } - public MetaHash Unk39 { get; set; }//afterburner + public MetaHash Afterburner { get; set; }//afterburner public int Unk40 { get; set; } public MetaHash Unk41 { get; set; }//0 - public MetaHash Unk42 { get; set; }//0 - public MetaHash Unk43 { get; set; }//0 + public MetaHash PropTransAndEq { get; set; }//0 + public MetaHash PropTransAndEqPreset { get; set; }//0 public MetaHash Unk44 { get; set; }//0 public MetaHash Unk45 { get; set; }//0 public MetaHash Unk46 { get; set; } @@ -12256,28 +12390,28 @@ namespace CodeWalker.GameFiles public short Unk53 { get; set; } public short Unk54 { get; set; } public float Unk55 { get; set; } - public MetaHash Unk56 { get; set; }//rudder - public MetaHash Unk57 { get; set; } - public MetaHash Unk58 { get; set; } - public MetaHash Unk59 { get; set; }//door open start - public MetaHash Unk60 { get; set; }//door close start + public MetaHash Rudder { get; set; }//rudder + public MetaHash WingFlap { get; set; } + public MetaHash TailFlap { get; set; } + public MetaHash DoorOpenStart { get; set; }//door open start + public MetaHash DoorCloseStart { get; set; }//door close start public MetaHash Unk61 { get; set; } public MetaHash Unk62 { get; set; } - public MetaHash Unk63 { get; set; } + public MetaHash EngineDamage { get; set; } public int Unk64 { get; set; } - public MetaHash Unk65 { get; set; } - public MetaHash Unk66 { get; set; } + public MetaHash SuspensionUp { get; set; } + public MetaHash SuspensionDown { get; set; } public float Unk67 { get; set; } public float Unk68 { get; set; } public MetaHash Unk69 { get; set; } public MetaHash Unk70 { get; set; } public MetaHash Unk71 { get; set; } public MetaHash Unk72 { get; set; } - public MetaHash Unk73 { get; set; }//damage + public MetaHash Damage { get; set; }//damage public MetaHash Unk74 { get; set; } public float Unk75 { get; set; } public MetaHash Unk76 { get; set; } - public MetaHash Unk77 { get; set; } + public MetaHash Divebomb { get; set; } public short Unk78 { get; set; }//1 public short Unk79 { get; set; }//1 public short Unk80 { get; set; }//750 @@ -12285,7 +12419,7 @@ namespace CodeWalker.GameFiles public float Unk82 { get; set; } public float Unk83 { get; set; } public float Unk84 { get; set; } - public MetaHash Unk85 { get; set; }//thrust bank + public MetaHash ThrustBank { get; set; }//thrust bank public MetaHash Unk86 { get; set; } public MetaHash Unk87 { get; set; } @@ -12309,12 +12443,12 @@ namespace CodeWalker.GameFiles public Dat151Aeroplane(RelData d, BinaryReader br) : base(d, br) { Flags = br.ReadUInt32(); - Unk01 = br.ReadUInt32(); - Unk02 = br.ReadUInt32(); - Unk03 = br.ReadUInt32(); - Unk04 = br.ReadUInt32(); - Unk05 = br.ReadUInt32(); - Unk06 = br.ReadUInt32(); + Engine = br.ReadUInt32(); + Exhaust = br.ReadUInt32(); + Idle = br.ReadUInt32(); + Distance = br.ReadUInt32(); + Propeller = br.ReadUInt32(); + Banking = br.ReadUInt32(); Unk07 = br.ReadInt16(); Unk08 = br.ReadInt16(); Unk09 = br.ReadInt16(); @@ -12336,22 +12470,22 @@ namespace CodeWalker.GameFiles Unk25 = br.ReadUInt32(); Unk26 = br.ReadUInt32(); Unk27 = br.ReadUInt32(); - Unk28 = br.ReadUInt32(); - Unk29 = br.ReadUInt32(); - Unk30 = br.ReadUInt32(); - Unk31 = br.ReadUInt32(); - Unk32 = br.ReadUInt32(); - Unk33 = br.ReadUInt32(); - Unk34 = br.ReadUInt32(); + StallWarning = br.ReadUInt32(); + DoorOpen = br.ReadUInt32(); + DoorClose = br.ReadUInt32(); + DoorLimit = br.ReadUInt32(); + GearDeploy = br.ReadUInt32(); + GearRetract = br.ReadUInt32(); + Startup = br.ReadUInt32(); Unk35 = br.ReadUInt32(); Unk36 = br.ReadUInt32(); Unk37 = br.ReadUInt32(); Unk38 = br.ReadUInt32(); - Unk39 = br.ReadUInt32(); + Afterburner = br.ReadUInt32(); Unk40 = br.ReadInt32(); Unk41 = br.ReadUInt32(); - Unk42 = br.ReadUInt32(); - Unk43 = br.ReadUInt32(); + PropTransAndEq = br.ReadUInt32(); + PropTransAndEqPreset = br.ReadUInt32(); Unk44 = br.ReadUInt32(); Unk45 = br.ReadUInt32(); Unk46 = br.ReadUInt32(); @@ -12364,28 +12498,28 @@ namespace CodeWalker.GameFiles Unk53 = br.ReadInt16(); Unk54 = br.ReadInt16(); Unk55 = br.ReadSingle(); - Unk56 = br.ReadUInt32(); - Unk57 = br.ReadUInt32(); - Unk58 = br.ReadUInt32(); - Unk59 = br.ReadUInt32(); - Unk60 = br.ReadUInt32(); + Rudder = br.ReadUInt32(); + WingFlap = br.ReadUInt32(); + TailFlap = br.ReadUInt32(); + DoorOpenStart = br.ReadUInt32(); + DoorCloseStart = br.ReadUInt32(); Unk61 = br.ReadUInt32(); Unk62 = br.ReadUInt32(); - Unk63 = br.ReadUInt32(); + EngineDamage = br.ReadUInt32(); Unk64 = br.ReadInt32(); - Unk65 = br.ReadUInt32(); - Unk66 = br.ReadUInt32(); + SuspensionUp = br.ReadUInt32(); + SuspensionDown = br.ReadUInt32(); Unk67 = br.ReadSingle(); Unk68 = br.ReadSingle(); Unk69 = br.ReadUInt32(); Unk70 = br.ReadUInt32(); Unk71 = br.ReadUInt32(); Unk72 = br.ReadUInt32(); - Unk73 = br.ReadUInt32(); + Damage = br.ReadUInt32(); Unk74 = br.ReadUInt32(); Unk75 = br.ReadSingle(); Unk76 = br.ReadUInt32(); - Unk77 = br.ReadUInt32(); + Divebomb = br.ReadUInt32(); Unk78 = br.ReadInt16(); Unk79 = br.ReadInt16(); Unk80 = br.ReadInt16(); @@ -12393,7 +12527,7 @@ namespace CodeWalker.GameFiles Unk82 = br.ReadSingle(); Unk83 = br.ReadSingle(); Unk84 = br.ReadSingle(); - Unk85 = br.ReadUInt32(); + ThrustBank = br.ReadUInt32(); Unk86 = br.ReadUInt32(); Version = 0; @@ -12427,12 +12561,12 @@ namespace CodeWalker.GameFiles WriteTypeAndOffset(bw); bw.Write(Flags); - bw.Write(Unk01); - bw.Write(Unk02); - bw.Write(Unk03); - bw.Write(Unk04); - bw.Write(Unk05); - bw.Write(Unk06); + bw.Write(Engine); + bw.Write(Exhaust); + bw.Write(Idle); + bw.Write(Distance); + bw.Write(Propeller); + bw.Write(Banking); bw.Write(Unk07); bw.Write(Unk08); bw.Write(Unk09); @@ -12454,22 +12588,22 @@ namespace CodeWalker.GameFiles bw.Write(Unk25); bw.Write(Unk26); bw.Write(Unk27); - bw.Write(Unk28); - bw.Write(Unk29); - bw.Write(Unk30); - bw.Write(Unk31); - bw.Write(Unk32); - bw.Write(Unk33); - bw.Write(Unk34); + bw.Write(StallWarning); + bw.Write(DoorOpen); + bw.Write(DoorClose); + bw.Write(DoorLimit); + bw.Write(GearDeploy); + bw.Write(GearRetract); + bw.Write(Startup); bw.Write(Unk35); bw.Write(Unk36); bw.Write(Unk37); bw.Write(Unk38); - bw.Write(Unk39); + bw.Write(Afterburner); bw.Write(Unk40); bw.Write(Unk41); - bw.Write(Unk42); - bw.Write(Unk43); + bw.Write(PropTransAndEq); + bw.Write(PropTransAndEqPreset); bw.Write(Unk44); bw.Write(Unk45); bw.Write(Unk46); @@ -12482,28 +12616,28 @@ namespace CodeWalker.GameFiles bw.Write(Unk53); bw.Write(Unk54); bw.Write(Unk55); - bw.Write(Unk56); - bw.Write(Unk57); - bw.Write(Unk58); - bw.Write(Unk59); - bw.Write(Unk60); + bw.Write(Rudder); + bw.Write(WingFlap); + bw.Write(TailFlap); + bw.Write(DoorOpenStart); + bw.Write(DoorCloseStart); bw.Write(Unk61); bw.Write(Unk62); - bw.Write(Unk63); + bw.Write(EngineDamage); bw.Write(Unk64); - bw.Write(Unk65); - bw.Write(Unk66); + bw.Write(SuspensionUp); + bw.Write(SuspensionDown); bw.Write(Unk67); bw.Write(Unk68); bw.Write(Unk69); bw.Write(Unk70); bw.Write(Unk71); bw.Write(Unk72); - bw.Write(Unk73); + bw.Write(Damage); bw.Write(Unk74); bw.Write(Unk75); bw.Write(Unk76); - bw.Write(Unk77); + bw.Write(Divebomb); bw.Write(Unk78); bw.Write(Unk79); bw.Write(Unk80); @@ -12511,7 +12645,7 @@ namespace CodeWalker.GameFiles bw.Write(Unk82); bw.Write(Unk83); bw.Write(Unk84); - bw.Write(Unk85); + bw.Write(ThrustBank); bw.Write(Unk86); if (Version >= 1) @@ -12533,12 +12667,12 @@ namespace CodeWalker.GameFiles { RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); RelXml.ValueTag(sb, indent, "Version", Version.ToString()); //CW invention, not an actual field! - RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); - RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); - RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); - RelXml.StringTag(sb, indent, "Unk04", RelXml.HashString(Unk04)); - RelXml.StringTag(sb, indent, "Unk05", RelXml.HashString(Unk05)); - RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); + RelXml.StringTag(sb, indent, "Engine", RelXml.HashString(Engine)); + RelXml.StringTag(sb, indent, "Exhaust", RelXml.HashString(Exhaust)); + RelXml.StringTag(sb, indent, "Idle", RelXml.HashString(Idle)); + RelXml.StringTag(sb, indent, "Distance", RelXml.HashString(Distance)); + RelXml.StringTag(sb, indent, "Propeller", RelXml.HashString(Propeller)); + RelXml.StringTag(sb, indent, "Banking", RelXml.HashString(Banking)); RelXml.ValueTag(sb, indent, "Unk07", Unk07.ToString()); RelXml.ValueTag(sb, indent, "Unk08", Unk08.ToString()); RelXml.ValueTag(sb, indent, "Unk09", Unk09.ToString()); @@ -12560,22 +12694,22 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "Unk25", RelXml.HashString(Unk25)); RelXml.StringTag(sb, indent, "Unk26", RelXml.HashString(Unk26)); RelXml.StringTag(sb, indent, "Unk27", RelXml.HashString(Unk27)); - RelXml.StringTag(sb, indent, "Unk28", RelXml.HashString(Unk28)); - RelXml.StringTag(sb, indent, "Unk29", RelXml.HashString(Unk29)); - RelXml.StringTag(sb, indent, "Unk30", RelXml.HashString(Unk30)); - RelXml.StringTag(sb, indent, "Unk31", RelXml.HashString(Unk31)); - RelXml.StringTag(sb, indent, "Unk32", RelXml.HashString(Unk32)); - RelXml.StringTag(sb, indent, "Unk33", RelXml.HashString(Unk33)); - RelXml.StringTag(sb, indent, "Unk34", RelXml.HashString(Unk34)); + RelXml.StringTag(sb, indent, "StallWarning", RelXml.HashString(StallWarning)); + RelXml.StringTag(sb, indent, "DoorOpen", RelXml.HashString(DoorOpen)); + RelXml.StringTag(sb, indent, "DoorClose", RelXml.HashString(DoorClose)); + RelXml.StringTag(sb, indent, "DoorLimit", RelXml.HashString(DoorLimit)); + RelXml.StringTag(sb, indent, "GearDeploy", RelXml.HashString(GearDeploy)); + RelXml.StringTag(sb, indent, "GearRetract", RelXml.HashString(GearRetract)); + RelXml.StringTag(sb, indent, "Startup", RelXml.HashString(Startup)); RelXml.StringTag(sb, indent, "Unk35", RelXml.HashString(Unk35)); RelXml.StringTag(sb, indent, "Unk36", RelXml.HashString(Unk36)); RelXml.StringTag(sb, indent, "Unk37", RelXml.HashString(Unk37)); RelXml.StringTag(sb, indent, "Unk38", RelXml.HashString(Unk38)); - RelXml.StringTag(sb, indent, "Unk39", RelXml.HashString(Unk39)); + RelXml.StringTag(sb, indent, "Afterburner", RelXml.HashString(Afterburner)); RelXml.ValueTag(sb, indent, "Unk40", Unk40.ToString()); RelXml.StringTag(sb, indent, "Unk41", RelXml.HashString(Unk41)); - RelXml.StringTag(sb, indent, "Unk42", RelXml.HashString(Unk42)); - RelXml.StringTag(sb, indent, "Unk43", RelXml.HashString(Unk43)); + RelXml.StringTag(sb, indent, "PropTransAndEq", RelXml.HashString(PropTransAndEq)); + RelXml.StringTag(sb, indent, "PropTransAndEqPreset", RelXml.HashString(PropTransAndEqPreset)); RelXml.StringTag(sb, indent, "Unk44", RelXml.HashString(Unk44)); RelXml.StringTag(sb, indent, "Unk45", RelXml.HashString(Unk45)); RelXml.StringTag(sb, indent, "Unk46", RelXml.HashString(Unk46)); @@ -12588,28 +12722,28 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk53", Unk53.ToString()); RelXml.ValueTag(sb, indent, "Unk54", Unk54.ToString()); RelXml.ValueTag(sb, indent, "Unk55", FloatUtil.ToString(Unk55)); - RelXml.StringTag(sb, indent, "Unk56", RelXml.HashString(Unk56)); - RelXml.StringTag(sb, indent, "Unk57", RelXml.HashString(Unk57)); - RelXml.StringTag(sb, indent, "Unk58", RelXml.HashString(Unk58)); - RelXml.StringTag(sb, indent, "Unk59", RelXml.HashString(Unk59)); - RelXml.StringTag(sb, indent, "Unk60", RelXml.HashString(Unk60)); + RelXml.StringTag(sb, indent, "Rudder", RelXml.HashString(Rudder)); + RelXml.StringTag(sb, indent, "WingFlap", RelXml.HashString(WingFlap)); + RelXml.StringTag(sb, indent, "TailFlap", RelXml.HashString(TailFlap)); + RelXml.StringTag(sb, indent, "DoorOpenStart", RelXml.HashString(DoorOpenStart)); + RelXml.StringTag(sb, indent, "DoorCloseStart", RelXml.HashString(DoorCloseStart)); RelXml.StringTag(sb, indent, "Unk61", RelXml.HashString(Unk61)); RelXml.StringTag(sb, indent, "Unk62", RelXml.HashString(Unk62)); - RelXml.StringTag(sb, indent, "Unk63", RelXml.HashString(Unk63)); + RelXml.StringTag(sb, indent, "EngineDamage", RelXml.HashString(EngineDamage)); RelXml.ValueTag(sb, indent, "Unk64", Unk64.ToString()); - RelXml.StringTag(sb, indent, "Unk65", RelXml.HashString(Unk65)); - RelXml.StringTag(sb, indent, "Unk66", RelXml.HashString(Unk66)); + RelXml.StringTag(sb, indent, "SuspensionUp", RelXml.HashString(SuspensionUp)); + RelXml.StringTag(sb, indent, "SuspensionDown", RelXml.HashString(SuspensionDown)); RelXml.ValueTag(sb, indent, "Unk67", FloatUtil.ToString(Unk67)); RelXml.ValueTag(sb, indent, "Unk68", FloatUtil.ToString(Unk68)); RelXml.StringTag(sb, indent, "Unk69", RelXml.HashString(Unk69)); RelXml.StringTag(sb, indent, "Unk70", RelXml.HashString(Unk70)); RelXml.StringTag(sb, indent, "Unk71", RelXml.HashString(Unk71)); RelXml.StringTag(sb, indent, "Unk72", RelXml.HashString(Unk72)); - RelXml.StringTag(sb, indent, "Unk73", RelXml.HashString(Unk73)); + RelXml.StringTag(sb, indent, "Damage", RelXml.HashString(Damage)); RelXml.StringTag(sb, indent, "Unk74", RelXml.HashString(Unk74)); RelXml.ValueTag(sb, indent, "Unk75", FloatUtil.ToString(Unk75)); RelXml.StringTag(sb, indent, "Unk76", RelXml.HashString(Unk76)); - RelXml.StringTag(sb, indent, "Unk77", RelXml.HashString(Unk77)); + RelXml.StringTag(sb, indent, "Divebomb", RelXml.HashString(Divebomb)); RelXml.ValueTag(sb, indent, "Unk78", Unk78.ToString()); RelXml.ValueTag(sb, indent, "Unk79", Unk79.ToString()); RelXml.ValueTag(sb, indent, "Unk80", Unk80.ToString()); @@ -12617,7 +12751,7 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk82", FloatUtil.ToString(Unk82)); RelXml.ValueTag(sb, indent, "Unk83", FloatUtil.ToString(Unk83)); RelXml.ValueTag(sb, indent, "Unk84", FloatUtil.ToString(Unk84)); - RelXml.StringTag(sb, indent, "Unk85", RelXml.HashString(Unk85)); + RelXml.StringTag(sb, indent, "ThrustBank", RelXml.HashString(ThrustBank)); RelXml.StringTag(sb, indent, "Unk86", RelXml.HashString(Unk86)); if (Version >= 1) @@ -12639,12 +12773,12 @@ namespace CodeWalker.GameFiles { Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); Version = Xml.GetChildIntAttribute(node, "Version", "value"); - Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); - Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); - Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); - Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk04")); - Unk05 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk05")); - Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); + Engine = XmlRel.GetHash(Xml.GetChildInnerText(node, "Engine")); + Exhaust = XmlRel.GetHash(Xml.GetChildInnerText(node, "Exhaust")); + Idle = XmlRel.GetHash(Xml.GetChildInnerText(node, "Idle")); + Distance = XmlRel.GetHash(Xml.GetChildInnerText(node, "Distance")); + Propeller = XmlRel.GetHash(Xml.GetChildInnerText(node, "Propeller")); + Banking = XmlRel.GetHash(Xml.GetChildInnerText(node, "Banking")); Unk07 = (short)Xml.GetChildIntAttribute(node, "Unk07", "value"); Unk08 = (short)Xml.GetChildIntAttribute(node, "Unk08", "value"); Unk09 = (short)Xml.GetChildIntAttribute(node, "Unk09", "value"); @@ -12666,22 +12800,22 @@ namespace CodeWalker.GameFiles Unk25 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk25")); Unk26 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk26")); Unk27 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk27")); - Unk28 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk28")); - Unk29 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk29")); - Unk30 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk30")); - Unk31 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk31")); - Unk32 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk32")); - Unk33 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk33")); - Unk34 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk34")); + StallWarning = XmlRel.GetHash(Xml.GetChildInnerText(node, "StallWarning")); + DoorOpen = XmlRel.GetHash(Xml.GetChildInnerText(node, "DoorOpen")); + DoorClose = XmlRel.GetHash(Xml.GetChildInnerText(node, "DoorClose")); + DoorLimit = XmlRel.GetHash(Xml.GetChildInnerText(node, "DoorLimit")); + GearDeploy = XmlRel.GetHash(Xml.GetChildInnerText(node, "GearDeploy")); + GearRetract = XmlRel.GetHash(Xml.GetChildInnerText(node, "GearRetract")); + Startup = XmlRel.GetHash(Xml.GetChildInnerText(node, "Startup")); Unk35 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk35")); Unk36 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk36")); Unk37 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk37")); Unk38 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk38")); - Unk39 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk39")); + Afterburner = XmlRel.GetHash(Xml.GetChildInnerText(node, "Afterburner")); Unk40 = Xml.GetChildIntAttribute(node, "Unk40", "value"); Unk41 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk41")); - Unk42 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk42")); - Unk43 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk43")); + PropTransAndEq = XmlRel.GetHash(Xml.GetChildInnerText(node, "PropTransAndEq")); + PropTransAndEqPreset = XmlRel.GetHash(Xml.GetChildInnerText(node, "PropTransAndEqPreset")); Unk44 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk44")); Unk45 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk45")); Unk46 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk46")); @@ -12694,28 +12828,28 @@ namespace CodeWalker.GameFiles Unk53 = (short)Xml.GetChildIntAttribute(node, "Unk53", "value"); Unk54 = (short)Xml.GetChildIntAttribute(node, "Unk54", "value"); Unk55 = Xml.GetChildFloatAttribute(node, "Unk55", "value"); - Unk56 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk56")); - Unk57 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk57")); - Unk58 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk58")); - Unk59 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk59")); - Unk60 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk60")); + Rudder = XmlRel.GetHash(Xml.GetChildInnerText(node, "Rudder")); + WingFlap = XmlRel.GetHash(Xml.GetChildInnerText(node, "WingFlap")); + TailFlap = XmlRel.GetHash(Xml.GetChildInnerText(node, "TailFlap")); + DoorOpenStart = XmlRel.GetHash(Xml.GetChildInnerText(node, "DoorOpenStart")); + DoorCloseStart = XmlRel.GetHash(Xml.GetChildInnerText(node, "DoorCloseStart")); Unk61 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk61")); Unk62 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk62")); - Unk63 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk63")); + EngineDamage = XmlRel.GetHash(Xml.GetChildInnerText(node, "EngineDamage")); Unk64 = Xml.GetChildIntAttribute(node, "Unk64", "value"); - Unk65 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk65")); - Unk66 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk66")); + SuspensionUp = XmlRel.GetHash(Xml.GetChildInnerText(node, "SuspensionUp")); + SuspensionDown = XmlRel.GetHash(Xml.GetChildInnerText(node, "SuspensionDown")); Unk67 = Xml.GetChildFloatAttribute(node, "Unk67", "value"); Unk68 = Xml.GetChildFloatAttribute(node, "Unk68", "value"); Unk69 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk69")); Unk70 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk70")); Unk71 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk71")); Unk72 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk72")); - Unk73 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk73")); + Damage = XmlRel.GetHash(Xml.GetChildInnerText(node, "Damage")); Unk74 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk74")); Unk75 = Xml.GetChildFloatAttribute(node, "Unk75", "value"); Unk76 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk76")); - Unk77 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk77")); + Divebomb = XmlRel.GetHash(Xml.GetChildInnerText(node, "Divebomb")); Unk78 = (short)Xml.GetChildIntAttribute(node, "Unk78", "value"); Unk79 = (short)Xml.GetChildIntAttribute(node, "Unk79", "value"); Unk80 = (short)Xml.GetChildIntAttribute(node, "Unk80", "value"); @@ -12723,7 +12857,7 @@ namespace CodeWalker.GameFiles Unk82 = Xml.GetChildFloatAttribute(node, "Unk82", "value"); Unk83 = Xml.GetChildFloatAttribute(node, "Unk83", "value"); Unk84 = Xml.GetChildFloatAttribute(node, "Unk84", "value"); - Unk85 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk85")); + ThrustBank = XmlRel.GetHash(Xml.GetChildInnerText(node, "ThrustBank")); Unk86 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk86")); if (Version >= 1) @@ -12747,21 +12881,21 @@ namespace CodeWalker.GameFiles [TC(typeof(EXP))] public class Dat151Helicopter : Dat151RelData { public FlagsUint Flags { get; set; } - public MetaHash Unk01 { get; set; } - public MetaHash Unk02 { get; set; }//rear_rotor_loop_vb - public MetaHash Unk03 { get; set; }//exhaust_loop_vb - public MetaHash Unk04 { get; set; } - public MetaHash Unk05 { get; set; } + public MetaHash MainRotor { get; set; } + public MetaHash TailRotor { get; set; }//rear_rotor_loop_vb + public MetaHash Exhaust { get; set; }//exhaust_loop_vb + public MetaHash Engine { get; set; } + public MetaHash InternalCabinTone { get; set; } public float Unk06 { get; set; } - public MetaHash Unk07 { get; set; } - public MetaHash Unk08 { get; set; } - public MetaHash Unk09 { get; set; } - public MetaHash Unk10 { get; set; } - public MetaHash Unk11 { get; set; } - public MetaHash Unk12 { get; set; } - public MetaHash Unk13 { get; set; } - public MetaHash Unk14 { get; set; } - public MetaHash Unk15 { get; set; } + public MetaHash BankAngleVolume { get; set; } + public MetaHash BankThrottleVolume { get; set; } + public MetaHash BankThrottlePitch { get; set; } + public MetaHash RotorThrottleVolume { get; set; } + public MetaHash RotorThrottlePitch { get; set; } + public MetaHash RotorThrottleGap { get; set; } + public MetaHash TailRotorThrottleVolume { get; set; } + public MetaHash ExhaustThrottleVolume { get; set; } + public MetaHash ExhaustThrottlePitch { get; set; } public short Unk16 { get; set; } public short Unk17 { get; set; } public short Unk18 { get; set; } @@ -12772,16 +12906,16 @@ namespace CodeWalker.GameFiles public short Unk23 { get; set; } public short Unk24 { get; set; } public short Unk25 { get; set; } - public MetaHash Unk26 { get; set; } - public MetaHash Unk27 { get; set; } - public MetaHash Unk28 { get; set; } - public MetaHash Unk29 { get; set; } - public MetaHash Unk30 { get; set; } - public MetaHash Unk31 { get; set; } - public MetaHash Unk32 { get; set; } - public MetaHash Unk33 { get; set; } - public MetaHash Unk34 { get; set; } - public MetaHash Unk35 { get; set; }//startup + public MetaHash ThrottleResonance1 { get; set; } + public MetaHash ThrottleResonance2 { get; set; } + public MetaHash BankingResonance { get; set; } + public MetaHash RotorStartupVolume { get; set; } + public MetaHash BladeStartupVolume { get; set; } + public MetaHash RotorStartupPitch { get; set; } + public MetaHash RearRotorStartupVolume { get; set; } + public MetaHash ExhaustStartupVolume { get; set; } + public MetaHash RotorStartupGap { get; set; } + public MetaHash Startup { get; set; }//startup public short Unk36 { get; set; } public short Unk37 { get; set; } public short Unk38 { get; set; } @@ -12789,13 +12923,13 @@ namespace CodeWalker.GameFiles public int Unk40 { get; set; } public MetaHash Unk41 { get; set; } public MetaHash Unk42 { get; set; } - public MetaHash Unk43 { get; set; } - public MetaHash Unk44 { get; set; }//scanner_params + public MetaHash PoliceScannerCategory { get; set; } + public MetaHash PoliceScannerParams { get; set; }//scanner_params public int Unk45 { get; set; } - public MetaHash Unk46 { get; set; } - public MetaHash Unk47 { get; set; } - public MetaHash Unk48 { get; set; } - public MetaHash Unk49 { get; set; }//damage_loop_vb + public MetaHash DoorOpen { get; set; } + public MetaHash DoorClose { get; set; } + public MetaHash DoorLimit { get; set; } + public MetaHash Damage { get; set; }//damage_loop_vb public MetaHash Unk50 { get; set; } public int Unk51 { get; set; } public MetaHash Unk52 { get; set; }//0 @@ -12804,41 +12938,41 @@ namespace CodeWalker.GameFiles public MetaHash Unk55 { get; set; }//0 public MetaHash Unk56 { get; set; } public MetaHash Unk57 { get; set; } - public MetaHash Unk58 { get; set; } + public MetaHash RotorBass { get; set; } public MetaHash Unk59 { get; set; } - public MetaHash Unk60 { get; set; }//vehicle_collision + public MetaHash Collision { get; set; }//vehicle_collision public MetaHash Unk61 { get; set; } - public MetaHash Unk62 { get; set; }//distant_loop + public MetaHash Distant { get; set; }//distant_loop public MetaHash Unk63 { get; set; } public MetaHash Unk64 { get; set; } public MetaHash Unk65 { get; set; } public MetaHash Unk66 { get; set; } - public MetaHash Unk67 { get; set; }//suspension_up - public MetaHash Unk68 { get; set; }//suspension_down + public MetaHash SuspensionUp { get; set; }//suspension_up + public MetaHash SuspensionDown { get; set; }//suspension_down public float Unk69 { get; set; } public float Unk70 { get; set; } - public MetaHash Unk71 { get; set; }//damage_oneshots - public MetaHash Unk72 { get; set; }//damage_warning + public MetaHash DamageOneShots { get; set; }//damage_oneshots + public MetaHash DamageWarning { get; set; }//damage_warning public MetaHash Unk73 { get; set; } public MetaHash Unk74 { get; set; } public MetaHash Unk75 { get; set; } public MetaHash Unk76 { get; set; } public MetaHash Unk77 { get; set; } public MetaHash Unk78 { get; set; } - public MetaHash Unk79 { get; set; }//altitude_warning - public MetaHash Unk80 { get; set; } - public MetaHash Unk81 { get; set; } - public MetaHash Unk82 { get; set; }//damage_below_600_loop_vb + public MetaHash AltitudeWarning { get; set; }//altitude_warning + public MetaHash DamageVolumeCurve { get; set; } + public MetaHash DamageVolumeCurve2 { get; set; } + public MetaHash DamageBelow600 { get; set; }//damage_below_600_loop_vb public float Unk83 { get; set; } public float Unk84 { get; set; } public float Unk85 { get; set; } - public MetaHash Unk86 { get; set; }//jet + public MetaHash Jet { get; set; }//jet public MetaHash Unk87 { get; set; } public MetaHash Unk88 { get; set; } public MetaHash Unk89 { get; set; } public MetaHash Unk90 { get; set; } - public MetaHash Unk91 { get; set; }//startup_broken + public MetaHash StartupBroken { get; set; }//startup_broken public int Version { get; set; } @@ -12851,21 +12985,21 @@ namespace CodeWalker.GameFiles public Dat151Helicopter(RelData d, BinaryReader br) : base(d, br) { Flags = br.ReadUInt32(); - Unk01 = br.ReadUInt32(); - Unk02 = br.ReadUInt32(); - Unk03 = br.ReadUInt32(); - Unk04 = br.ReadUInt32(); - Unk05 = br.ReadUInt32(); + MainRotor = br.ReadUInt32(); + TailRotor = br.ReadUInt32(); + Exhaust = br.ReadUInt32(); + Engine = br.ReadUInt32(); + InternalCabinTone = br.ReadUInt32(); Unk06 = br.ReadSingle(); - Unk07 = br.ReadUInt32(); - Unk08 = br.ReadUInt32(); - Unk09 = br.ReadUInt32(); - Unk10 = br.ReadUInt32(); - Unk11 = br.ReadUInt32(); - Unk12 = br.ReadUInt32(); - Unk13 = br.ReadUInt32(); - Unk14 = br.ReadUInt32(); - Unk15 = br.ReadUInt32(); + BankAngleVolume = br.ReadUInt32(); + BankThrottleVolume = br.ReadUInt32(); + BankThrottlePitch = br.ReadUInt32(); + RotorThrottleVolume = br.ReadUInt32(); + RotorThrottlePitch = br.ReadUInt32(); + RotorThrottleGap = br.ReadUInt32(); + TailRotorThrottleVolume = br.ReadUInt32(); + ExhaustThrottleVolume = br.ReadUInt32(); + ExhaustThrottlePitch = br.ReadUInt32(); Unk16 = br.ReadInt16(); Unk17 = br.ReadInt16(); Unk18 = br.ReadInt16(); @@ -12876,16 +13010,16 @@ namespace CodeWalker.GameFiles Unk23 = br.ReadInt16(); Unk24 = br.ReadInt16(); Unk25 = br.ReadInt16(); - Unk26 = br.ReadUInt32(); - Unk27 = br.ReadUInt32(); - Unk28 = br.ReadUInt32(); - Unk29 = br.ReadUInt32(); - Unk30 = br.ReadUInt32(); - Unk31 = br.ReadUInt32(); - Unk32 = br.ReadUInt32(); - Unk33 = br.ReadUInt32(); - Unk34 = br.ReadUInt32(); - Unk35 = br.ReadUInt32(); + ThrottleResonance1 = br.ReadUInt32(); + ThrottleResonance2 = br.ReadUInt32(); + BankingResonance = br.ReadUInt32(); + RotorStartupVolume = br.ReadUInt32(); + BladeStartupVolume = br.ReadUInt32(); + RotorStartupPitch = br.ReadUInt32(); + RearRotorStartupVolume = br.ReadUInt32(); + ExhaustStartupVolume = br.ReadUInt32(); + RotorStartupGap = br.ReadUInt32(); + Startup = br.ReadUInt32(); Unk36 = br.ReadInt16(); Unk37 = br.ReadInt16(); Unk38 = br.ReadInt16(); @@ -12893,13 +13027,13 @@ namespace CodeWalker.GameFiles Unk40 = br.ReadInt32(); Unk41 = br.ReadUInt32(); Unk42 = br.ReadUInt32(); - Unk43 = br.ReadUInt32(); - Unk44 = br.ReadUInt32(); + PoliceScannerCategory = br.ReadUInt32(); + PoliceScannerParams = br.ReadUInt32(); Unk45 = br.ReadInt32(); - Unk46 = br.ReadUInt32(); - Unk47 = br.ReadUInt32(); - Unk48 = br.ReadUInt32(); - Unk49 = br.ReadUInt32(); + DoorOpen = br.ReadUInt32(); + DoorClose = br.ReadUInt32(); + DoorLimit = br.ReadUInt32(); + Damage = br.ReadUInt32(); Unk50 = br.ReadUInt32(); Unk51 = br.ReadInt32(); Unk52 = br.ReadUInt32(); @@ -12908,35 +13042,35 @@ namespace CodeWalker.GameFiles Unk55 = br.ReadUInt32(); Unk56 = br.ReadUInt32(); Unk57 = br.ReadUInt32(); - Unk58 = br.ReadUInt32(); + RotorBass = br.ReadUInt32(); Unk59 = br.ReadUInt32(); - Unk60 = br.ReadUInt32(); + Collision = br.ReadUInt32(); Unk61 = br.ReadUInt32(); - Unk62 = br.ReadUInt32(); + Distant = br.ReadUInt32(); Unk63 = br.ReadUInt32(); Unk64 = br.ReadUInt32(); Unk65 = br.ReadUInt32(); Unk66 = br.ReadUInt32(); - Unk67 = br.ReadUInt32(); - Unk68 = br.ReadUInt32(); + SuspensionUp = br.ReadUInt32(); + SuspensionDown = br.ReadUInt32(); Unk69 = br.ReadSingle(); Unk70 = br.ReadSingle(); - Unk71 = br.ReadUInt32(); - Unk72 = br.ReadUInt32(); + DamageOneShots = br.ReadUInt32(); + DamageWarning = br.ReadUInt32(); Unk73 = br.ReadUInt32(); Unk74 = br.ReadUInt32(); Unk75 = br.ReadUInt32(); Unk76 = br.ReadUInt32(); Unk77 = br.ReadUInt32(); Unk78 = br.ReadUInt32(); - Unk79 = br.ReadUInt32(); - Unk80 = br.ReadUInt32(); - Unk81 = br.ReadUInt32(); - Unk82 = br.ReadUInt32(); + AltitudeWarning = br.ReadUInt32(); + DamageVolumeCurve = br.ReadUInt32(); + DamageVolumeCurve2 = br.ReadUInt32(); + DamageBelow600 = br.ReadUInt32(); Unk83 = br.ReadSingle(); Unk84 = br.ReadSingle(); Unk85 = br.ReadSingle(); - Unk86 = br.ReadUInt32(); + Jet = br.ReadUInt32(); Unk87 = br.ReadUInt32(); Unk88 = br.ReadUInt32(); @@ -12960,7 +13094,7 @@ namespace CodeWalker.GameFiles Unk89 = br.ReadUInt32(); Unk90 = br.ReadUInt32(); - Unk91 = br.ReadUInt32(); + StartupBroken = br.ReadUInt32(); } bytesleft = br.BaseStream.Length - br.BaseStream.Position; @@ -12972,21 +13106,21 @@ namespace CodeWalker.GameFiles WriteTypeAndOffset(bw); bw.Write(Flags); - bw.Write(Unk01); - bw.Write(Unk02); - bw.Write(Unk03); - bw.Write(Unk04); - bw.Write(Unk05); + bw.Write(MainRotor); + bw.Write(TailRotor); + bw.Write(Exhaust); + bw.Write(Engine); + bw.Write(InternalCabinTone); bw.Write(Unk06); - bw.Write(Unk07); - bw.Write(Unk08); - bw.Write(Unk09); - bw.Write(Unk10); - bw.Write(Unk11); - bw.Write(Unk12); - bw.Write(Unk13); - bw.Write(Unk14); - bw.Write(Unk15); + bw.Write(BankAngleVolume); + bw.Write(BankThrottleVolume); + bw.Write(BankThrottlePitch); + bw.Write(RotorThrottleVolume); + bw.Write(RotorThrottlePitch); + bw.Write(RotorThrottleGap); + bw.Write(TailRotorThrottleVolume); + bw.Write(ExhaustThrottleVolume); + bw.Write(ExhaustThrottlePitch); bw.Write(Unk16); bw.Write(Unk17); bw.Write(Unk18); @@ -12997,16 +13131,16 @@ namespace CodeWalker.GameFiles bw.Write(Unk23); bw.Write(Unk24); bw.Write(Unk25); - bw.Write(Unk26); - bw.Write(Unk27); - bw.Write(Unk28); - bw.Write(Unk29); - bw.Write(Unk30); - bw.Write(Unk31); - bw.Write(Unk32); - bw.Write(Unk33); - bw.Write(Unk34); - bw.Write(Unk35); + bw.Write(ThrottleResonance1); + bw.Write(ThrottleResonance2); + bw.Write(BankingResonance); + bw.Write(RotorStartupVolume); + bw.Write(BladeStartupVolume); + bw.Write(RotorStartupPitch); + bw.Write(RearRotorStartupVolume); + bw.Write(ExhaustStartupVolume); + bw.Write(RotorStartupGap); + bw.Write(Startup); bw.Write(Unk36); bw.Write(Unk37); bw.Write(Unk38); @@ -13014,13 +13148,13 @@ namespace CodeWalker.GameFiles bw.Write(Unk40); bw.Write(Unk41); bw.Write(Unk42); - bw.Write(Unk43); - bw.Write(Unk44); + bw.Write(PoliceScannerCategory); + bw.Write(PoliceScannerParams); bw.Write(Unk45); - bw.Write(Unk46); - bw.Write(Unk47); - bw.Write(Unk48); - bw.Write(Unk49); + bw.Write(DoorOpen); + bw.Write(DoorClose); + bw.Write(DoorLimit); + bw.Write(Damage); bw.Write(Unk50); bw.Write(Unk51); bw.Write(Unk52); @@ -13029,35 +13163,35 @@ namespace CodeWalker.GameFiles bw.Write(Unk55); bw.Write(Unk56); bw.Write(Unk57); - bw.Write(Unk58); + bw.Write(RotorBass); bw.Write(Unk59); - bw.Write(Unk60); + bw.Write(Collision); bw.Write(Unk61); - bw.Write(Unk62); + bw.Write(Distant); bw.Write(Unk63); bw.Write(Unk64); bw.Write(Unk65); bw.Write(Unk66); - bw.Write(Unk67); - bw.Write(Unk68); + bw.Write(SuspensionUp); + bw.Write(SuspensionDown); bw.Write(Unk69); bw.Write(Unk70); - bw.Write(Unk71); - bw.Write(Unk72); + bw.Write(DamageOneShots); + bw.Write(DamageWarning); bw.Write(Unk73); bw.Write(Unk74); bw.Write(Unk75); bw.Write(Unk76); bw.Write(Unk77); bw.Write(Unk78); - bw.Write(Unk79); - bw.Write(Unk80); - bw.Write(Unk81); - bw.Write(Unk82); + bw.Write(AltitudeWarning); + bw.Write(DamageVolumeCurve); + bw.Write(DamageVolumeCurve2); + bw.Write(DamageBelow600); bw.Write(Unk83); bw.Write(Unk84); bw.Write(Unk85); - bw.Write(Unk86); + bw.Write(Jet); bw.Write(Unk87); bw.Write(Unk88); @@ -13065,28 +13199,28 @@ namespace CodeWalker.GameFiles { bw.Write(Unk89); bw.Write(Unk90); - bw.Write(Unk91); + bw.Write(StartupBroken); } } public override void WriteXml(StringBuilder sb, int indent) { RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); RelXml.ValueTag(sb, indent, "Version", Version.ToString()); //CW invention, not an actual field! - RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); - RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); - RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); - RelXml.StringTag(sb, indent, "Unk04", RelXml.HashString(Unk04)); - RelXml.StringTag(sb, indent, "Unk05", RelXml.HashString(Unk05)); + RelXml.StringTag(sb, indent, "MainRotor", RelXml.HashString(MainRotor)); + RelXml.StringTag(sb, indent, "TailRotor", RelXml.HashString(TailRotor)); + RelXml.StringTag(sb, indent, "Exhaust", RelXml.HashString(Exhaust)); + RelXml.StringTag(sb, indent, "Engine", RelXml.HashString(Engine)); + RelXml.StringTag(sb, indent, "InternalCabinTone", RelXml.HashString(InternalCabinTone)); RelXml.ValueTag(sb, indent, "Unk06", FloatUtil.ToString(Unk06)); - RelXml.StringTag(sb, indent, "Unk07", RelXml.HashString(Unk07)); - RelXml.StringTag(sb, indent, "Unk08", RelXml.HashString(Unk08)); - RelXml.StringTag(sb, indent, "Unk09", RelXml.HashString(Unk09)); - RelXml.StringTag(sb, indent, "Unk10", RelXml.HashString(Unk10)); - RelXml.StringTag(sb, indent, "Unk11", RelXml.HashString(Unk11)); - RelXml.StringTag(sb, indent, "Unk12", RelXml.HashString(Unk12)); - RelXml.StringTag(sb, indent, "Unk13", RelXml.HashString(Unk13)); - RelXml.StringTag(sb, indent, "Unk14", RelXml.HashString(Unk14)); - RelXml.StringTag(sb, indent, "Unk15", RelXml.HashString(Unk15)); + RelXml.StringTag(sb, indent, "BankAngleVolume", RelXml.HashString(BankAngleVolume)); + RelXml.StringTag(sb, indent, "BankThrottleVolume", RelXml.HashString(BankThrottleVolume)); + RelXml.StringTag(sb, indent, "BankThrottlePitch", RelXml.HashString(BankThrottlePitch)); + RelXml.StringTag(sb, indent, "RotorThrottleVolume", RelXml.HashString(RotorThrottleVolume)); + RelXml.StringTag(sb, indent, "RotorThrottlePitch", RelXml.HashString(RotorThrottlePitch)); + RelXml.StringTag(sb, indent, "RotorThrottleGap", RelXml.HashString(RotorThrottleGap)); + RelXml.StringTag(sb, indent, "TailRotorThrottleVolume", RelXml.HashString(TailRotorThrottleVolume)); + RelXml.StringTag(sb, indent, "ExhaustThrottleVolume", RelXml.HashString(ExhaustThrottleVolume)); + RelXml.StringTag(sb, indent, "ExhaustThrottlePitch", RelXml.HashString(ExhaustThrottlePitch)); RelXml.ValueTag(sb, indent, "Unk16", Unk16.ToString()); RelXml.ValueTag(sb, indent, "Unk17", Unk17.ToString()); RelXml.ValueTag(sb, indent, "Unk18", Unk18.ToString()); @@ -13097,16 +13231,16 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk23", Unk23.ToString()); RelXml.ValueTag(sb, indent, "Unk24", Unk24.ToString()); RelXml.ValueTag(sb, indent, "Unk25", Unk25.ToString()); - RelXml.StringTag(sb, indent, "Unk26", RelXml.HashString(Unk26)); - RelXml.StringTag(sb, indent, "Unk27", RelXml.HashString(Unk27)); - RelXml.StringTag(sb, indent, "Unk28", RelXml.HashString(Unk28)); - RelXml.StringTag(sb, indent, "Unk29", RelXml.HashString(Unk29)); - RelXml.StringTag(sb, indent, "Unk30", RelXml.HashString(Unk30)); - RelXml.StringTag(sb, indent, "Unk31", RelXml.HashString(Unk31)); - RelXml.StringTag(sb, indent, "Unk32", RelXml.HashString(Unk32)); - RelXml.StringTag(sb, indent, "Unk33", RelXml.HashString(Unk33)); - RelXml.StringTag(sb, indent, "Unk34", RelXml.HashString(Unk34)); - RelXml.StringTag(sb, indent, "Unk35", RelXml.HashString(Unk35)); + RelXml.StringTag(sb, indent, "ThrottleResonance1", RelXml.HashString(ThrottleResonance1)); + RelXml.StringTag(sb, indent, "ThrottleResonance2", RelXml.HashString(ThrottleResonance2)); + RelXml.StringTag(sb, indent, "BankingResonance", RelXml.HashString(BankingResonance)); + RelXml.StringTag(sb, indent, "RotorStartupVolume", RelXml.HashString(RotorStartupVolume)); + RelXml.StringTag(sb, indent, "BladeStartupVolume", RelXml.HashString(BladeStartupVolume)); + RelXml.StringTag(sb, indent, "RotorStartupPitch", RelXml.HashString(RotorStartupPitch)); + RelXml.StringTag(sb, indent, "RearRotorStartupVolume", RelXml.HashString(RearRotorStartupVolume)); + RelXml.StringTag(sb, indent, "ExhaustStartupVolume", RelXml.HashString(ExhaustStartupVolume)); + RelXml.StringTag(sb, indent, "RotorStartupGap", RelXml.HashString(RotorStartupGap)); + RelXml.StringTag(sb, indent, "Startup", RelXml.HashString(Startup)); RelXml.ValueTag(sb, indent, "Unk36", Unk36.ToString()); RelXml.ValueTag(sb, indent, "Unk37", Unk37.ToString()); RelXml.ValueTag(sb, indent, "Unk38", Unk38.ToString()); @@ -13114,13 +13248,13 @@ namespace CodeWalker.GameFiles RelXml.ValueTag(sb, indent, "Unk40", Unk40.ToString()); RelXml.StringTag(sb, indent, "Unk41", RelXml.HashString(Unk41)); RelXml.StringTag(sb, indent, "Unk42", RelXml.HashString(Unk42)); - RelXml.StringTag(sb, indent, "Unk43", RelXml.HashString(Unk43)); - RelXml.StringTag(sb, indent, "Unk44", RelXml.HashString(Unk44)); + RelXml.StringTag(sb, indent, "PoliceScannerCategory", RelXml.HashString(PoliceScannerCategory)); + RelXml.StringTag(sb, indent, "PoliceScannerParams", RelXml.HashString(PoliceScannerParams)); RelXml.ValueTag(sb, indent, "Unk45", Unk45.ToString()); - RelXml.StringTag(sb, indent, "Unk46", RelXml.HashString(Unk46)); - RelXml.StringTag(sb, indent, "Unk47", RelXml.HashString(Unk47)); - RelXml.StringTag(sb, indent, "Unk48", RelXml.HashString(Unk48)); - RelXml.StringTag(sb, indent, "Unk49", RelXml.HashString(Unk49)); + RelXml.StringTag(sb, indent, "DoorOpen", RelXml.HashString(DoorOpen)); + RelXml.StringTag(sb, indent, "DoorClose", RelXml.HashString(DoorClose)); + RelXml.StringTag(sb, indent, "DoorLimit", RelXml.HashString(DoorLimit)); + RelXml.StringTag(sb, indent, "Damage", RelXml.HashString(Damage)); RelXml.StringTag(sb, indent, "Unk50", RelXml.HashString(Unk50)); RelXml.ValueTag(sb, indent, "Unk51", Unk51.ToString()); RelXml.StringTag(sb, indent, "Unk52", RelXml.HashString(Unk52)); @@ -13129,35 +13263,35 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "Unk55", RelXml.HashString(Unk55)); RelXml.StringTag(sb, indent, "Unk56", RelXml.HashString(Unk56)); RelXml.StringTag(sb, indent, "Unk57", RelXml.HashString(Unk57)); - RelXml.StringTag(sb, indent, "Unk58", RelXml.HashString(Unk58)); + RelXml.StringTag(sb, indent, "RotorBass", RelXml.HashString(RotorBass)); RelXml.StringTag(sb, indent, "Unk59", RelXml.HashString(Unk59)); - RelXml.StringTag(sb, indent, "Unk60", RelXml.HashString(Unk60)); + RelXml.StringTag(sb, indent, "Collision", RelXml.HashString(Collision)); RelXml.StringTag(sb, indent, "Unk61", RelXml.HashString(Unk61)); - RelXml.StringTag(sb, indent, "Unk62", RelXml.HashString(Unk62)); + RelXml.StringTag(sb, indent, "Distant", RelXml.HashString(Distant)); RelXml.StringTag(sb, indent, "Unk63", RelXml.HashString(Unk63)); RelXml.StringTag(sb, indent, "Unk64", RelXml.HashString(Unk64)); RelXml.StringTag(sb, indent, "Unk65", RelXml.HashString(Unk65)); RelXml.StringTag(sb, indent, "Unk66", RelXml.HashString(Unk66)); - RelXml.StringTag(sb, indent, "Unk67", RelXml.HashString(Unk67)); - RelXml.StringTag(sb, indent, "Unk68", RelXml.HashString(Unk68)); + RelXml.StringTag(sb, indent, "SuspensionUp", RelXml.HashString(SuspensionUp)); + RelXml.StringTag(sb, indent, "SuspensionDown", RelXml.HashString(SuspensionDown)); RelXml.ValueTag(sb, indent, "Unk69", FloatUtil.ToString(Unk69)); RelXml.ValueTag(sb, indent, "Unk70", FloatUtil.ToString(Unk70)); - RelXml.StringTag(sb, indent, "Unk71", RelXml.HashString(Unk71)); - RelXml.StringTag(sb, indent, "Unk72", RelXml.HashString(Unk72)); + RelXml.StringTag(sb, indent, "DamageOneShots", RelXml.HashString(DamageOneShots)); + RelXml.StringTag(sb, indent, "DamageWarning", RelXml.HashString(DamageWarning)); RelXml.StringTag(sb, indent, "Unk73", RelXml.HashString(Unk73)); RelXml.StringTag(sb, indent, "Unk74", RelXml.HashString(Unk74)); RelXml.StringTag(sb, indent, "Unk75", RelXml.HashString(Unk75)); RelXml.StringTag(sb, indent, "Unk76", RelXml.HashString(Unk76)); RelXml.StringTag(sb, indent, "Unk77", RelXml.HashString(Unk77)); RelXml.StringTag(sb, indent, "Unk78", RelXml.HashString(Unk78)); - RelXml.StringTag(sb, indent, "Unk79", RelXml.HashString(Unk79)); - RelXml.StringTag(sb, indent, "Unk80", RelXml.HashString(Unk80)); - RelXml.StringTag(sb, indent, "Unk81", RelXml.HashString(Unk81)); - RelXml.StringTag(sb, indent, "Unk82", RelXml.HashString(Unk82)); + RelXml.StringTag(sb, indent, "AltitudeWarning", RelXml.HashString(AltitudeWarning)); + RelXml.StringTag(sb, indent, "DamageVolumeCurve", RelXml.HashString(DamageVolumeCurve)); + RelXml.StringTag(sb, indent, "DamageVolumeCurve2", RelXml.HashString(DamageVolumeCurve2)); + RelXml.StringTag(sb, indent, "DamageBelow600", RelXml.HashString(DamageBelow600)); RelXml.ValueTag(sb, indent, "Unk83", FloatUtil.ToString(Unk83)); RelXml.ValueTag(sb, indent, "Unk84", FloatUtil.ToString(Unk84)); RelXml.ValueTag(sb, indent, "Unk85", FloatUtil.ToString(Unk85)); - RelXml.StringTag(sb, indent, "Unk86", RelXml.HashString(Unk86)); + RelXml.StringTag(sb, indent, "Jet", RelXml.HashString(Jet)); RelXml.StringTag(sb, indent, "Unk87", RelXml.HashString(Unk87)); RelXml.StringTag(sb, indent, "Unk88", RelXml.HashString(Unk88)); @@ -13165,7 +13299,7 @@ namespace CodeWalker.GameFiles { RelXml.StringTag(sb, indent, "Unk89", RelXml.HashString(Unk89)); RelXml.StringTag(sb, indent, "Unk90", RelXml.HashString(Unk90)); - RelXml.StringTag(sb, indent, "Unk91", RelXml.HashString(Unk91)); + RelXml.StringTag(sb, indent, "StartupBroken", RelXml.HashString(StartupBroken)); } } @@ -13173,21 +13307,21 @@ namespace CodeWalker.GameFiles { Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); Version = Xml.GetChildIntAttribute(node, "Version", "value"); - Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); - Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); - Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); - Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk04")); - Unk05 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk05")); + MainRotor = XmlRel.GetHash(Xml.GetChildInnerText(node, "MainRotor")); + TailRotor = XmlRel.GetHash(Xml.GetChildInnerText(node, "TailRotor")); + Exhaust = XmlRel.GetHash(Xml.GetChildInnerText(node, "Exhaust")); + Engine = XmlRel.GetHash(Xml.GetChildInnerText(node, "Engine")); + InternalCabinTone = XmlRel.GetHash(Xml.GetChildInnerText(node, "InternalCabinTone")); Unk06 = Xml.GetChildFloatAttribute(node, "Unk06", "value"); - Unk07 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk07")); - Unk08 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk08")); - Unk09 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk09")); - Unk10 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk10")); - Unk11 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk11")); - Unk12 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk12")); - Unk13 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk13")); - Unk14 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk14")); - Unk15 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk15")); + BankAngleVolume = XmlRel.GetHash(Xml.GetChildInnerText(node, "BankAngleVolume")); + BankThrottleVolume = XmlRel.GetHash(Xml.GetChildInnerText(node, "BankThrottleVolume")); + BankThrottlePitch = XmlRel.GetHash(Xml.GetChildInnerText(node, "BankThrottlePitch")); + RotorThrottleVolume = XmlRel.GetHash(Xml.GetChildInnerText(node, "RotorThrottleVolume")); + RotorThrottlePitch = XmlRel.GetHash(Xml.GetChildInnerText(node, "RotorThrottlePitch")); + RotorThrottleGap = XmlRel.GetHash(Xml.GetChildInnerText(node, "RotorThrottleGap")); + TailRotorThrottleVolume = XmlRel.GetHash(Xml.GetChildInnerText(node, "TailRotorThrottleVolume")); + ExhaustThrottleVolume = XmlRel.GetHash(Xml.GetChildInnerText(node, "ExhaustThrottleVolume")); + ExhaustThrottlePitch = XmlRel.GetHash(Xml.GetChildInnerText(node, "ExhaustThrottlePitch")); Unk16 = (short)Xml.GetChildIntAttribute(node, "Unk16", "value"); Unk17 = (short)Xml.GetChildIntAttribute(node, "Unk17", "value"); Unk18 = (short)Xml.GetChildIntAttribute(node, "Unk18", "value"); @@ -13198,16 +13332,16 @@ namespace CodeWalker.GameFiles Unk23 = (short)Xml.GetChildIntAttribute(node, "Unk23", "value"); Unk24 = (short)Xml.GetChildIntAttribute(node, "Unk24", "value"); Unk25 = (short)Xml.GetChildIntAttribute(node, "Unk25", "value"); - Unk26 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk26")); - Unk27 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk27")); - Unk28 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk28")); - Unk29 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk29")); - Unk30 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk30")); - Unk31 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk31")); - Unk32 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk32")); - Unk33 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk33")); - Unk34 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk34")); - Unk35 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk35")); + ThrottleResonance1 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ThrottleResonance1")); + ThrottleResonance2 = XmlRel.GetHash(Xml.GetChildInnerText(node, "ThrottleResonance2")); + BankingResonance = XmlRel.GetHash(Xml.GetChildInnerText(node, "BankingResonance")); + RotorStartupVolume = XmlRel.GetHash(Xml.GetChildInnerText(node, "RotorStartupVolume")); + BladeStartupVolume = XmlRel.GetHash(Xml.GetChildInnerText(node, "BladeStartupVolume")); + RotorStartupPitch = XmlRel.GetHash(Xml.GetChildInnerText(node, "RotorStartupPitch")); + RearRotorStartupVolume = XmlRel.GetHash(Xml.GetChildInnerText(node, "RearRotorStartupVolume")); + ExhaustStartupVolume = XmlRel.GetHash(Xml.GetChildInnerText(node, "ExhaustStartupVolume")); + RotorStartupGap = XmlRel.GetHash(Xml.GetChildInnerText(node, "RotorStartupGap")); + Startup = XmlRel.GetHash(Xml.GetChildInnerText(node, "Startup")); Unk36 = (short)Xml.GetChildIntAttribute(node, "Unk36", "value"); Unk37 = (short)Xml.GetChildIntAttribute(node, "Unk37", "value"); Unk38 = (short)Xml.GetChildIntAttribute(node, "Unk38", "value"); @@ -13215,13 +13349,13 @@ namespace CodeWalker.GameFiles Unk40 = Xml.GetChildIntAttribute(node, "Unk40", "value"); Unk41 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk41")); Unk42 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk42")); - Unk43 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk43")); - Unk44 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk44")); + PoliceScannerCategory = XmlRel.GetHash(Xml.GetChildInnerText(node, "PoliceScannerCategory")); + PoliceScannerParams = XmlRel.GetHash(Xml.GetChildInnerText(node, "PoliceScannerParams")); Unk45 = Xml.GetChildIntAttribute(node, "Unk45", "value"); - Unk46 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk46")); - Unk47 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk47")); - Unk48 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk48")); - Unk49 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk49")); + DoorOpen = XmlRel.GetHash(Xml.GetChildInnerText(node, "DoorOpen")); + DoorClose = XmlRel.GetHash(Xml.GetChildInnerText(node, "DoorClose")); + DoorLimit = XmlRel.GetHash(Xml.GetChildInnerText(node, "DoorLimit")); + Damage = XmlRel.GetHash(Xml.GetChildInnerText(node, "Damage")); Unk50 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk50")); Unk51 = Xml.GetChildIntAttribute(node, "Unk51", "value"); Unk52 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk52")); @@ -13230,35 +13364,35 @@ namespace CodeWalker.GameFiles Unk55 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk55")); Unk56 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk56")); Unk57 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk57")); - Unk58 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk58")); + RotorBass = XmlRel.GetHash(Xml.GetChildInnerText(node, "RotorBass")); Unk59 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk59")); - Unk60 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk60")); + Collision = XmlRel.GetHash(Xml.GetChildInnerText(node, "Collision")); Unk61 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk61")); - Unk62 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk62")); + Distant = XmlRel.GetHash(Xml.GetChildInnerText(node, "Distant")); Unk63 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk63")); Unk64 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk64")); Unk65 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk65")); Unk66 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk66")); - Unk67 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk67")); - Unk68 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk68")); + SuspensionUp = XmlRel.GetHash(Xml.GetChildInnerText(node, "SuspensionUp")); + SuspensionDown = XmlRel.GetHash(Xml.GetChildInnerText(node, "SuspensionDown")); Unk69 = Xml.GetChildFloatAttribute(node, "Unk69", "value"); Unk70 = Xml.GetChildFloatAttribute(node, "Unk70", "value"); - Unk71 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk71")); - Unk72 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk72")); + DamageOneShots = XmlRel.GetHash(Xml.GetChildInnerText(node, "DamageOneShots")); + DamageWarning = XmlRel.GetHash(Xml.GetChildInnerText(node, "DamageWarning")); Unk73 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk73")); Unk74 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk74")); Unk75 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk75")); Unk76 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk76")); Unk77 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk77")); Unk78 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk78")); - Unk79 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk79")); - Unk80 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk80")); - Unk81 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk81")); - Unk82 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk82")); + AltitudeWarning = XmlRel.GetHash(Xml.GetChildInnerText(node, "AltitudeWarning")); + DamageVolumeCurve = XmlRel.GetHash(Xml.GetChildInnerText(node, "DamageVolumeCurve")); + DamageVolumeCurve2 = XmlRel.GetHash(Xml.GetChildInnerText(node, "DamageVolumeCurve2")); + DamageBelow600 = XmlRel.GetHash(Xml.GetChildInnerText(node, "DamageBelow600")); Unk83 = Xml.GetChildFloatAttribute(node, "Unk83", "value"); Unk84 = Xml.GetChildFloatAttribute(node, "Unk84", "value"); Unk85 = Xml.GetChildFloatAttribute(node, "Unk85", "value"); - Unk86 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk86")); + Jet = XmlRel.GetHash(Xml.GetChildInnerText(node, "Jet")); Unk87 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk87")); Unk88 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk88")); @@ -13266,7 +13400,7 @@ namespace CodeWalker.GameFiles { Unk89 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk89")); Unk90 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk90")); - Unk91 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk91")); + StartupBroken = XmlRel.GetHash(Xml.GetChildInnerText(node, "StartupBroken")); } } } @@ -13372,36 +13506,36 @@ namespace CodeWalker.GameFiles public MetaHash Unk05 { get; set; } public MetaHash Unk06 { get; set; } public MetaHash Unk07 { get; set; } - public MetaHash Unk08 { get; set; } + public MetaHash Horn { get; set; } public MetaHash Unk09 { get; set; } public MetaHash Unk10 { get; set; } public MetaHash Unk11 { get; set; } public MetaHash Unk12 { get; set; }//shorts? 4272750130 -462,-340 public MetaHash Unk13 { get; set; } public MetaHash Unk14 { get; set; } - public MetaHash Unk15 { get; set; } - public MetaHash Unk16 { get; set; } - public MetaHash Unk17 { get; set; } - public MetaHash Unk18 { get; set; } - public MetaHash Unk19 { get; set; } - public MetaHash Unk20 { get; set; } - public MetaHash Unk21 { get; set; }//f? 3123948585 -0.0006853962 - public MetaHash Unk22 { get; set; } - public MetaHash Unk23 { get; set; } - public MetaHash Unk24 { get; set; } - public MetaHash Unk25 { get; set; } - public MetaHash Unk26 { get; set; }//f? 1034145554 0.0799848 - public MetaHash Unk27 { get; set; } - public MetaHash Unk28 { get; set; }//f? 1180265007 13914.5459 - public MetaHash Unk29 { get; set; } - public MetaHash Unk30 { get; set; } - public MetaHash Unk31 { get; set; } - public MetaHash Unk32 { get; set; } - public MetaHash Unk33 { get; set; } - public MetaHash Unk34 { get; set; } + public MetaHash CarriagePitch { get; set; } + public MetaHash CarriageVolume { get; set; } + public MetaHash DriveTonePitch { get; set; } + public MetaHash DriveToneVolume { get; set; } + public MetaHash DriveToneSynthPitch { get; set; } + public MetaHash DriveToneSynthVolume { get; set; } + public MetaHash GrindPitch { get; set; }//f? 3123948585 -0.0006853962 + public MetaHash GrindVolume { get; set; } + public MetaHash IdlePitch { get; set; } + public MetaHash IdleVolume { get; set; } + public MetaHash SquealPitch { get; set; } + public MetaHash SquealVolume { get; set; }//f? 1034145554 0.0799848 + public MetaHash ScrapeSpeedVolume { get; set; } + public MetaHash WheelVolume { get; set; }//f? 1180265007 13914.5459 + public MetaHash WheelDelay { get; set; } + public MetaHash RumbleVolume { get; set; } + public MetaHash BrakeVelocityPitch { get; set; } + public MetaHash BrakeVelocityVolume { get; set; } + public MetaHash BrakeAccelerationPitch { get; set; } + public MetaHash BrakeAccelerationVolume { get; set; } public MetaHash Unk35 { get; set; } public MetaHash Unk36 { get; set; } - public MetaHash Unk37 { get; set; } + public MetaHash Unk37 { get; set; }//constant_one (not really helpful..!) public MetaHash Unk38 { get; set; }//f? 1122753141 117.926674 @@ -13419,33 +13553,33 @@ namespace CodeWalker.GameFiles Unk05 = br.ReadUInt32(); Unk06 = br.ReadUInt32(); Unk07 = br.ReadUInt32(); - Unk08 = br.ReadUInt32(); + Horn = br.ReadUInt32(); Unk09 = br.ReadUInt32(); Unk10 = br.ReadUInt32(); Unk11 = br.ReadUInt32(); Unk12 = br.ReadUInt32(); Unk13 = br.ReadUInt32(); Unk14 = br.ReadUInt32(); - Unk15 = br.ReadUInt32(); - Unk16 = br.ReadUInt32(); - Unk17 = br.ReadUInt32(); - Unk18 = br.ReadUInt32(); - Unk19 = br.ReadUInt32(); - Unk20 = br.ReadUInt32(); - Unk21 = br.ReadUInt32(); - Unk22 = br.ReadUInt32(); - Unk23 = br.ReadUInt32(); - Unk24 = br.ReadUInt32(); - Unk25 = br.ReadUInt32(); - Unk26 = br.ReadUInt32(); - Unk27 = br.ReadUInt32(); - Unk28 = br.ReadUInt32(); - Unk29 = br.ReadUInt32(); - Unk30 = br.ReadUInt32(); - Unk31 = br.ReadUInt32(); - Unk32 = br.ReadUInt32(); - Unk33 = br.ReadUInt32(); - Unk34 = br.ReadUInt32(); + CarriagePitch = br.ReadUInt32(); + CarriageVolume = br.ReadUInt32(); + DriveTonePitch = br.ReadUInt32(); + DriveToneVolume = br.ReadUInt32(); + DriveToneSynthPitch = br.ReadUInt32(); + DriveToneSynthVolume = br.ReadUInt32(); + GrindPitch = br.ReadUInt32(); + GrindVolume = br.ReadUInt32(); + IdlePitch = br.ReadUInt32(); + IdleVolume = br.ReadUInt32(); + SquealPitch = br.ReadUInt32(); + SquealVolume = br.ReadUInt32(); + ScrapeSpeedVolume = br.ReadUInt32(); + WheelVolume = br.ReadUInt32(); + WheelDelay = br.ReadUInt32(); + RumbleVolume = br.ReadUInt32(); + BrakeVelocityPitch = br.ReadUInt32(); + BrakeVelocityVolume = br.ReadUInt32(); + BrakeAccelerationPitch = br.ReadUInt32(); + BrakeAccelerationVolume = br.ReadUInt32(); Unk35 = br.ReadUInt32(); Unk36 = br.ReadUInt32(); Unk37 = br.ReadUInt32(); @@ -13455,11 +13589,11 @@ namespace CodeWalker.GameFiles { } if (Unk12 != 4272750130) { } - if (Unk21 != 3123948585) + if (GrindPitch != 3123948585) { } - if (Unk26 != 1034145554) + if (SquealVolume != 1034145554) { } - if (Unk28 != 1180265007) + if (WheelVolume != 1180265007) { } if (Unk38 != 1122753141) { } @@ -13480,33 +13614,33 @@ namespace CodeWalker.GameFiles bw.Write(Unk05); bw.Write(Unk06); bw.Write(Unk07); - bw.Write(Unk08); + bw.Write(Horn); bw.Write(Unk09); bw.Write(Unk10); bw.Write(Unk11); bw.Write(Unk12); bw.Write(Unk13); bw.Write(Unk14); - bw.Write(Unk15); - bw.Write(Unk16); - bw.Write(Unk17); - bw.Write(Unk18); - bw.Write(Unk19); - bw.Write(Unk20); - bw.Write(Unk21); - bw.Write(Unk22); - bw.Write(Unk23); - bw.Write(Unk24); - bw.Write(Unk25); - bw.Write(Unk26); - bw.Write(Unk27); - bw.Write(Unk28); - bw.Write(Unk29); - bw.Write(Unk30); - bw.Write(Unk31); - bw.Write(Unk32); - bw.Write(Unk33); - bw.Write(Unk34); + bw.Write(CarriagePitch); + bw.Write(CarriageVolume); + bw.Write(DriveTonePitch); + bw.Write(DriveToneVolume); + bw.Write(DriveToneSynthPitch); + bw.Write(DriveToneSynthVolume); + bw.Write(GrindPitch); + bw.Write(GrindVolume); + bw.Write(IdlePitch); + bw.Write(IdleVolume); + bw.Write(SquealPitch); + bw.Write(SquealVolume); + bw.Write(ScrapeSpeedVolume); + bw.Write(WheelVolume); + bw.Write(WheelDelay); + bw.Write(RumbleVolume); + bw.Write(BrakeVelocityPitch); + bw.Write(BrakeVelocityVolume); + bw.Write(BrakeAccelerationPitch); + bw.Write(BrakeAccelerationVolume); bw.Write(Unk35); bw.Write(Unk36); bw.Write(Unk37); @@ -13521,33 +13655,33 @@ namespace CodeWalker.GameFiles RelXml.StringTag(sb, indent, "Unk05", RelXml.HashString(Unk05)); RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); RelXml.StringTag(sb, indent, "Unk07", RelXml.HashString(Unk07)); - RelXml.StringTag(sb, indent, "Unk08", RelXml.HashString(Unk08)); + RelXml.StringTag(sb, indent, "Horn", RelXml.HashString(Horn)); RelXml.StringTag(sb, indent, "Unk09", RelXml.HashString(Unk09)); RelXml.StringTag(sb, indent, "Unk10", RelXml.HashString(Unk10)); RelXml.StringTag(sb, indent, "Unk11", RelXml.HashString(Unk11)); RelXml.StringTag(sb, indent, "Unk12", RelXml.HashString(Unk12)); RelXml.StringTag(sb, indent, "Unk13", RelXml.HashString(Unk13)); RelXml.StringTag(sb, indent, "Unk14", RelXml.HashString(Unk14)); - RelXml.StringTag(sb, indent, "Unk15", RelXml.HashString(Unk15)); - RelXml.StringTag(sb, indent, "Unk16", RelXml.HashString(Unk16)); - RelXml.StringTag(sb, indent, "Unk17", RelXml.HashString(Unk17)); - RelXml.StringTag(sb, indent, "Unk18", RelXml.HashString(Unk18)); - RelXml.StringTag(sb, indent, "Unk19", RelXml.HashString(Unk19)); - RelXml.StringTag(sb, indent, "Unk20", RelXml.HashString(Unk20)); - RelXml.StringTag(sb, indent, "Unk21", RelXml.HashString(Unk21)); - RelXml.StringTag(sb, indent, "Unk22", RelXml.HashString(Unk22)); - RelXml.StringTag(sb, indent, "Unk23", RelXml.HashString(Unk23)); - RelXml.StringTag(sb, indent, "Unk24", RelXml.HashString(Unk24)); - RelXml.StringTag(sb, indent, "Unk25", RelXml.HashString(Unk25)); - RelXml.StringTag(sb, indent, "Unk26", RelXml.HashString(Unk26)); - RelXml.StringTag(sb, indent, "Unk27", RelXml.HashString(Unk27)); - RelXml.StringTag(sb, indent, "Unk28", RelXml.HashString(Unk28)); - RelXml.StringTag(sb, indent, "Unk29", RelXml.HashString(Unk29)); - RelXml.StringTag(sb, indent, "Unk30", RelXml.HashString(Unk30)); - RelXml.StringTag(sb, indent, "Unk31", RelXml.HashString(Unk31)); - RelXml.StringTag(sb, indent, "Unk32", RelXml.HashString(Unk32)); - RelXml.StringTag(sb, indent, "Unk33", RelXml.HashString(Unk33)); - RelXml.StringTag(sb, indent, "Unk34", RelXml.HashString(Unk34)); + RelXml.StringTag(sb, indent, "CarriagePitch", RelXml.HashString(CarriagePitch)); + RelXml.StringTag(sb, indent, "CarriageVolume", RelXml.HashString(CarriageVolume)); + RelXml.StringTag(sb, indent, "DriveTonePitch", RelXml.HashString(DriveTonePitch)); + RelXml.StringTag(sb, indent, "DriveToneVolume", RelXml.HashString(DriveToneVolume)); + RelXml.StringTag(sb, indent, "DriveToneSynthPitch", RelXml.HashString(DriveToneSynthPitch)); + RelXml.StringTag(sb, indent, "DriveToneSynthVolume", RelXml.HashString(DriveToneSynthVolume)); + RelXml.StringTag(sb, indent, "GrindPitch", RelXml.HashString(GrindPitch)); + RelXml.StringTag(sb, indent, "GrindVolume", RelXml.HashString(GrindVolume)); + RelXml.StringTag(sb, indent, "IdlePitch", RelXml.HashString(IdlePitch)); + RelXml.StringTag(sb, indent, "IdleVolume", RelXml.HashString(IdleVolume)); + RelXml.StringTag(sb, indent, "SquealPitch", RelXml.HashString(SquealPitch)); + RelXml.StringTag(sb, indent, "SquealVolume", RelXml.HashString(SquealVolume)); + RelXml.StringTag(sb, indent, "ScrapeSpeedVolume", RelXml.HashString(ScrapeSpeedVolume)); + RelXml.StringTag(sb, indent, "WheelVolume", RelXml.HashString(WheelVolume)); + RelXml.StringTag(sb, indent, "WheelDelay", RelXml.HashString(WheelDelay)); + RelXml.StringTag(sb, indent, "RumbleVolume", RelXml.HashString(RumbleVolume)); + RelXml.StringTag(sb, indent, "BrakeVelocityPitch", RelXml.HashString(BrakeVelocityPitch)); + RelXml.StringTag(sb, indent, "BrakeVelocityVolume", RelXml.HashString(BrakeVelocityVolume)); + RelXml.StringTag(sb, indent, "BrakeAccelerationPitch", RelXml.HashString(BrakeAccelerationPitch)); + RelXml.StringTag(sb, indent, "BrakeAccelerationVolume", RelXml.HashString(BrakeAccelerationVolume)); RelXml.StringTag(sb, indent, "Unk35", RelXml.HashString(Unk35)); RelXml.StringTag(sb, indent, "Unk36", RelXml.HashString(Unk36)); RelXml.StringTag(sb, indent, "Unk37", RelXml.HashString(Unk37)); @@ -13562,33 +13696,33 @@ namespace CodeWalker.GameFiles Unk05 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk05")); Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); Unk07 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk07")); - Unk08 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk08")); + Horn = XmlRel.GetHash(Xml.GetChildInnerText(node, "Horn")); Unk09 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk09")); Unk10 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk10")); Unk11 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk11")); Unk12 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk12")); Unk13 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk13")); Unk14 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk14")); - Unk15 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk15")); - Unk16 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk16")); - Unk17 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk17")); - Unk18 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk18")); - Unk19 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk19")); - Unk20 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk20")); - Unk21 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk21")); - Unk22 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk22")); - Unk23 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk23")); - Unk24 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk24")); - Unk25 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk25")); - Unk26 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk26")); - Unk27 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk27")); - Unk28 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk28")); - Unk29 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk29")); - Unk30 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk30")); - Unk31 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk31")); - Unk32 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk32")); - Unk33 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk33")); - Unk34 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk34")); + CarriagePitch = XmlRel.GetHash(Xml.GetChildInnerText(node, "CarriagePitch")); + CarriageVolume = XmlRel.GetHash(Xml.GetChildInnerText(node, "CarriageVolume")); + DriveTonePitch = XmlRel.GetHash(Xml.GetChildInnerText(node, "DriveTonePitch")); + DriveToneVolume = XmlRel.GetHash(Xml.GetChildInnerText(node, "DriveToneVolume")); + DriveToneSynthPitch = XmlRel.GetHash(Xml.GetChildInnerText(node, "DriveToneSynthPitch")); + DriveToneSynthVolume = XmlRel.GetHash(Xml.GetChildInnerText(node, "DriveToneSynthVolume")); + GrindPitch = XmlRel.GetHash(Xml.GetChildInnerText(node, "GrindPitch")); + GrindVolume = XmlRel.GetHash(Xml.GetChildInnerText(node, "GrindVolume")); + IdlePitch = XmlRel.GetHash(Xml.GetChildInnerText(node, "IdlePitch")); + IdleVolume = XmlRel.GetHash(Xml.GetChildInnerText(node, "IdleVolume")); + SquealPitch = XmlRel.GetHash(Xml.GetChildInnerText(node, "SquealPitch")); + SquealVolume = XmlRel.GetHash(Xml.GetChildInnerText(node, "SquealVolume")); + ScrapeSpeedVolume = XmlRel.GetHash(Xml.GetChildInnerText(node, "ScrapeSpeedVolume")); + WheelVolume = XmlRel.GetHash(Xml.GetChildInnerText(node, "WheelVolume")); + WheelDelay = XmlRel.GetHash(Xml.GetChildInnerText(node, "WheelDelay")); + RumbleVolume = XmlRel.GetHash(Xml.GetChildInnerText(node, "RumbleVolume")); + BrakeVelocityPitch = XmlRel.GetHash(Xml.GetChildInnerText(node, "BrakeVelocityPitch")); + BrakeVelocityVolume = XmlRel.GetHash(Xml.GetChildInnerText(node, "BrakeVelocityVolume")); + BrakeAccelerationPitch = XmlRel.GetHash(Xml.GetChildInnerText(node, "BrakeAccelerationPitch")); + BrakeAccelerationVolume = XmlRel.GetHash(Xml.GetChildInnerText(node, "BrakeAccelerationVolume")); Unk35 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk35")); Unk36 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk36")); Unk37 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk37")); @@ -15089,7 +15223,7 @@ namespace CodeWalker.GameFiles ItemCount = (Items?.Length ?? 0); } } - [TC(typeof(EXP))] public class Dat151Unk35 : Dat151RelData //some kind of emitter?? has Position + [TC(typeof(EXP))] public class Dat151PoliceScannerLocation : Dat151RelData { public MetaHash Unk01 { get; set; }//0 public MetaHash Unk02 { get; set; }//0 @@ -15105,12 +15239,12 @@ namespace CodeWalker.GameFiles public MetaHash Unk11 { get; set; }//0 public MetaHash Unk12 { get; set; }//0 - public Dat151Unk35(RelFile rel) : base(rel) + public Dat151PoliceScannerLocation(RelFile rel) : base(rel) { - Type = Dat151RelType.Unk35; + Type = Dat151RelType.PoliceScannerLocation; TypeID = (byte)Type; } - public Dat151Unk35(RelData d, BinaryReader br) : base(d, br) + public Dat151PoliceScannerLocation(RelData d, BinaryReader br) : base(d, br) { Unk01 = br.ReadUInt32();//0 Unk02 = br.ReadUInt32();//0 @@ -15198,17 +15332,17 @@ namespace CodeWalker.GameFiles Unk12 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk12")); } } - [TC(typeof(EXP))] public class Dat151Unk36 : Dat151RelData //Unk35 List + [TC(typeof(EXP))] public class Dat151PoliceScannerLocationList : Dat151RelData { public int ItemCount { get; set; } public MetaHash[] Items { get; set; } - public Dat151Unk36(RelFile rel) : base(rel) + public Dat151PoliceScannerLocationList(RelFile rel) : base(rel) { - Type = Dat151RelType.Unk36; + Type = Dat151RelType.PoliceScannerLocationList; TypeID = (byte)Type; } - public Dat151Unk36(RelData d, BinaryReader br) : base(d, br) + public Dat151PoliceScannerLocationList(RelData d, BinaryReader br) : base(d, br) { ItemCount = br.ReadInt32(); Items = new MetaHash[ItemCount]; @@ -18517,7 +18651,7 @@ namespace CodeWalker.GameFiles ItemCount = (Items?.Length ?? 0); } } - [TC(typeof(EXP))] public class Dat151Unk113 : Dat151RelData + [TC(typeof(EXP))] public class Dat151CopDispatchInteractionSettings : Dat151RelData { public int Unk01 { get; set; } public int Unk02 { get; set; } @@ -18562,12 +18696,12 @@ namespace CodeWalker.GameFiles public int Unk41 { get; set; } public int Unk42 { get; set; } - public Dat151Unk113(RelFile rel) : base(rel) + public Dat151CopDispatchInteractionSettings(RelFile rel) : base(rel) { - Type = Dat151RelType.Unk113; + Type = Dat151RelType.CopDispatchInteractionSettings; TypeID = (byte)Type; } - public Dat151Unk113(RelData d, BinaryReader br) : base(d, br) + public Dat151CopDispatchInteractionSettings(RelData d, BinaryReader br) : base(d, br) { Unk01 = br.ReadInt32(); Unk02 = br.ReadInt32(); @@ -19929,7 +20063,10 @@ namespace CodeWalker.GameFiles #endregion - + + + + #region dat4 (speech) public enum Dat4SpeechType : byte @@ -19942,54 +20079,154 @@ namespace CodeWalker.GameFiles [TC(typeof(EXP))] public class Dat4SpeechData : RelData { public Dat4SpeechType Type { get; set; } + + public uint NameTableOffset { get; set; } + public MetaHash ContainerHash { get; set; } + public MetaHash Hash { get; set; } + + public Dat4SpeechData(RelFile rel) : base(rel) { } public Dat4SpeechData(RelData d, BinaryReader br) : base(d) { br.BaseStream.Position = 0; //1 byte was read already (TypeID) - } - } - [TC(typeof(EXP))] public class Dat4SpeechByteArray : Dat4SpeechData - { - public byte[] Bytes { get; set; } - public Dat4SpeechByteArray(RelFile rel) : base(rel) - { - Type = Dat4SpeechType.ByteArray; - TypeID = (byte)Type; - } - public Dat4SpeechByteArray(RelData d, BinaryReader br) : base(d, br) - { - Type = Dat4SpeechType.ByteArray; - TypeID = (byte)Type; - int dataLength = (int)br.BaseStream.Length; - int arrayLength = dataLength; - if (dataLength >= 4) + if ((TypeID == 4) && (br.BaseStream.Length == 8)) { - arrayLength = br.ReadByte(); + NameTableOffset = ((br.ReadUInt32() >> 8) & 0xFFFFFF); + ContainerHash = br.ReadUInt32(); } - Bytes = br.ReadBytes(arrayLength); - - if (br.BaseStream.Position != br.BaseStream.Length) - { } } public override void Write(BinaryWriter bw) { - byte arrayLength = (byte)(Bytes?.Length ?? 0); - if (arrayLength >= 4) + switch (Type) { - bw.Write(arrayLength); + case Dat4SpeechType.Hash: + bw.Write(Hash); + break; + case Dat4SpeechType.Container: + bw.Write(((NameTableOffset & 0xFFFFFF) << 8) + 4 /*TypeID*/); + bw.Write(ContainerHash); + break; + default: + bw.Write(Data); + break; } - bw.Write(Bytes); } public override void WriteXml(StringBuilder sb, int indent) { + switch (Type) + { + case Dat4SpeechType.Hash: + RelXml.StringTag(sb, indent, "Hash", RelXml.HashString(Hash)); + break; + case Dat4SpeechType.Container: + RelXml.StringTag(sb, indent, "ContainerHash", RelXml.HashString(ContainerHash)); + break; + default: + RelXml.WriteRawArray(sb, Data, indent, "RawData", "", RelXml.FormatHexByte, 16); + break; + } } public override void ReadXml(XmlNode node) { + switch (Type) + { + case Dat4SpeechType.Hash: + Hash = XmlRel.GetHash(Xml.GetChildInnerText(node, "Hash")); + break; + case Dat4SpeechType.Container: + ContainerHash = XmlRel.GetHash(Xml.GetChildInnerText(node, "ContainerHash")); + break; + default: + var rawnode = node.SelectSingleNode("RawData"); + if (rawnode != null) + { + Data = Xml.GetRawByteArray(rawnode); + DataLength = (uint)Data.Length; + } + break; + } + } + + public override uint[] GetHashTableOffsets() + { + switch (Type) + { + case Dat4SpeechType.Hash: + return new uint[] { 0 }; + } + return null; + } + public override uint[] GetPackTableOffsets() + { + switch (Type) + { + case Dat4SpeechType.Container: + return new uint[] { 4 }; + } + return null; + } + + public override string ToString() + { + switch (Type) + { + case Dat4SpeechType.Hash: + return GetBaseString() + ": " + Type.ToString() + ": " + Hash.ToString(); + case Dat4SpeechType.Container: + return GetBaseString() + ": " + Type.ToString() + ": " + ContainerHash.ToString(); + } + return GetBaseString(); + } + + } + + + #endregion + + + + + #region dat10 + + + public enum Dat10RelType : byte + { + Preset = 1, + Synth = 3, + } + + [TC(typeof(EXP))] public class Dat10RelData : RelData + { + public Dat10RelType Type { get; set; } + public uint NameTableOffset { get; set; } + public FlagsUint Flags { get; set; } + + public Dat10RelData(RelFile rel) : base(rel) { } + public Dat10RelData(RelFile rel, Dat10RelType type) : base(rel) + { + Type = type; + TypeID = (byte)type; + } + public Dat10RelData(RelData d, BinaryReader br) : base(d) + { + Type = (Dat10RelType)TypeID; + + br.BaseStream.Position = 0; //1 byte was read already (TypeID) + + NameTableOffset = ((br.ReadUInt32() >> 8) & 0xFFFFFF); + Flags = br.ReadUInt32(); + } + + public void WriteTypeAndOffsetAndFlags(BinaryWriter bw) + { + var val = ((NameTableOffset & 0xFFFFFF) << 8) + TypeID; + bw.Write(val); + bw.Write(Flags); } public override string ToString() @@ -19997,89 +20234,553 @@ namespace CodeWalker.GameFiles return GetBaseString() + ": " + Type.ToString(); } } - [TC(typeof(EXP))] public class Dat4SpeechHash : Dat4SpeechData + + [TC(typeof(EXP))] public class Dat10PresetVariable : IMetaXmlItem { - public MetaHash Hash { get; set; } + public MetaHash Name { get; set; } + public float Value1 { get; set; } + public float Value2 { get; set; } - public Dat4SpeechHash(RelFile rel) : base(rel) + public Dat10PresetVariable() + { } + public Dat10PresetVariable(BinaryReader br) { - Type = Dat4SpeechType.Hash; - TypeID = (byte)Type; + Name = br.ReadUInt32(); + Value1 = br.ReadSingle(); + Value2 = br.ReadSingle(); } - public Dat4SpeechHash(RelData d, BinaryReader br) : base(d, br) + public void Write(BinaryWriter bw) { - Type = Dat4SpeechType.Hash; - TypeID = (byte)Type; - - Hash = br.ReadUInt32(); - - if (br.BaseStream.Position != br.BaseStream.Length) - { } + bw.Write(Name); + bw.Write(Value1); + bw.Write(Value2); } - - public override void Write(BinaryWriter bw) + public void WriteXml(StringBuilder sb, int indent) { - bw.Write(Hash); + RelXml.StringTag(sb, indent, "Name", RelXml.HashString(Name)); + RelXml.ValueTag(sb, indent, "Value1", FloatUtil.ToString(Value1)); + RelXml.ValueTag(sb, indent, "Value2", FloatUtil.ToString(Value2)); } - - public override void WriteXml(StringBuilder sb, int indent) + public void ReadXml(XmlNode node) { + Name = XmlRel.GetHash(Xml.GetChildInnerText(node, "Name")); + Value1 = Xml.GetChildFloatAttribute(node, "Value1", "value"); + Value2 = Xml.GetChildFloatAttribute(node, "Value2", "value"); } - public override void ReadXml(XmlNode node) - { - } - public override uint[] GetHashTableOffsets() - { - return new uint[] { 0 }; - } - public override string ToString() { - return GetBaseString() + ": " + Type.ToString() + ": " + Hash.ToString(); + return Name.ToString() + ": " + Value1.ToString() + ", " + Value2.ToString(); } } - [TC(typeof(EXP))] public class Dat4SpeechContainer : Dat4SpeechData + [TC(typeof(EXP))] public class Dat10Preset : Dat10RelData { - public uint NameTableOffset { get; set; } - public MetaHash ContainerHash { get; set; } + public byte VariableCount { get; set; } + public Dat10PresetVariable[] Variables { get; set; } - public Dat4SpeechContainer(RelFile rel) : base(rel) + public Dat10Preset(RelFile rel) : base(rel) { - Type = Dat4SpeechType.Container; + Type = Dat10RelType.Preset; TypeID = (byte)Type; } - public Dat4SpeechContainer(RelData d, BinaryReader br) : base(d, br) + public Dat10Preset(RelData d, BinaryReader br) : base(d, br) { - Type = Dat4SpeechType.Container; - TypeID = (byte)Type; + VariableCount = br.ReadByte(); + Variables = new Dat10PresetVariable[VariableCount]; + for (int i = 0; i < VariableCount; i++) + { + Variables[i] = new Dat10PresetVariable(br); + } - NameTableOffset = ((br.ReadUInt32() >> 8) & 0xFFFFFF); - ContainerHash = br.ReadUInt32(); - - if (br.BaseStream.Position != br.BaseStream.Length) + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) { } } - public override void Write(BinaryWriter bw) { - bw.Write(((NameTableOffset & 0xFFFFFF) << 8) + 4 /*TypeID*/); - bw.Write(ContainerHash); - } + WriteTypeAndOffsetAndFlags(bw); + bw.Write(VariableCount); + for (int i = 0; i < VariableCount; i++) + { + Variables[i].Write(bw); + } + } public override void WriteXml(StringBuilder sb, int indent) { + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.WriteItemArray(sb, Variables, indent, "Variables"); } public override void ReadXml(XmlNode node) { + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Variables = XmlRel.ReadItemArray(node, "Variables"); + VariableCount = (byte)(Variables?.Length ?? 0); } - public override uint[] GetPackTableOffsets() + } + [TC(typeof(EXP))] public class Dat10SynthVariable : IMetaXmlItem + { + public MetaHash Name { get; set; } + public float Value { get; set; } + + public Dat10SynthVariable() + { } + public Dat10SynthVariable(BinaryReader br) { - return new uint[] { 4 }; + Name = br.ReadUInt32(); + Value = br.ReadSingle(); + } + public void Write(BinaryWriter bw) + { + bw.Write(Name); + bw.Write(Value); + } + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Name", RelXml.HashString(Name)); + RelXml.ValueTag(sb, indent, "Value", FloatUtil.ToString(Value)); + } + public void ReadXml(XmlNode node) + { + Name = XmlRel.GetHash(Xml.GetChildInnerText(node, "Name")); + Value = Xml.GetChildFloatAttribute(node, "Value", "value"); + } + public override string ToString() + { + return Name.ToString() + ": " + Value.ToString(); + } + } + [TC(typeof(EXP))] public class Dat10Synth : Dat10RelData + { + public int BuffersCount { get; set; }//buffers count (4) (for synth_ambient_aircon_full) + public int RegistersCount { get; set; }//registers count (21) + public int OutputsCount1 { get; set; }//outputs count? (1) + public int OutputsCount2 { get; set; }//outputs count? (1) + public int BytecodeLength { get; set; }//bytecode length (504) + public int StateBlocksCount { get; set; }//state blocks count? (18) + public int RuntimeCost { get; set; }//runtime cost? (50) + public byte[] Bytecode { get; set; }//TODO: disassemble this! + public int ConstantsCount { get; set; }//constants count (21) + public float[] Constants { get; set; }//constants (floats) + public int VariablesCount { get; set; }//variables count (8) + public Dat10SynthVariable[] Variables { get; set; }//variables + + + public Dat10Synth(RelFile rel) : base(rel) + { + Type = Dat10RelType.Synth; + TypeID = (byte)Type; + } + public Dat10Synth(RelData d, BinaryReader br) : base(d, br) + { + BuffersCount = br.ReadInt32();//buffers count (4) (for synth_ambient_aircon_full) + RegistersCount = br.ReadInt32();//registers count (21) + OutputsCount1 = br.ReadInt32();//outputs count? (1) + OutputsCount2 = br.ReadInt32();//outputs count? (1) + BytecodeLength = br.ReadInt32();//bytecode length (504) + StateBlocksCount = br.ReadInt32();//state blocks count? (18) + RuntimeCost = br.ReadInt32();//runtime cost? (50) + Bytecode = br.ReadBytes(BytecodeLength); + ConstantsCount = br.ReadInt32(); //constants count (21) + Constants = new float[ConstantsCount];//constants (floats) + for (int i = 0; i < ConstantsCount; i++) + { + Constants[i] = br.ReadSingle(); + } + VariablesCount = br.ReadInt32(); //variables count (8) + Variables = new Dat10SynthVariable[VariablesCount];//variables + for (int i = 0; i < VariablesCount; i++) + { + Variables[i] = new Dat10SynthVariable(br); + } + + if (d.NameHash == 2095626595)//synth_ambient_aircon_full + { } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffsetAndFlags(bw); + + bw.Write(BuffersCount); + bw.Write(RegistersCount); + bw.Write(OutputsCount1); + bw.Write(OutputsCount2); + bw.Write(BytecodeLength); + bw.Write(StateBlocksCount); + bw.Write(RuntimeCost); + bw.Write(Bytecode); + bw.Write(ConstantsCount); + for (int i = 0; i < ConstantsCount; i++) + { + bw.Write(Constants[i]); + } + bw.Write(VariablesCount); + for (int i = 0; i < VariablesCount; i++) + { + Variables[i].Write(bw); + } + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.ValueTag(sb, indent, "BuffersCount", BuffersCount.ToString()); + RelXml.ValueTag(sb, indent, "RegistersCount", RegistersCount.ToString()); + RelXml.ValueTag(sb, indent, "OutputsCount1", OutputsCount1.ToString()); + RelXml.ValueTag(sb, indent, "OutputsCount2", OutputsCount2.ToString()); + RelXml.ValueTag(sb, indent, "StateBlocksCount", StateBlocksCount.ToString()); + RelXml.ValueTag(sb, indent, "RuntimeCost", RuntimeCost.ToString()); + RelXml.WriteRawArray(sb, Bytecode, indent, "Bytecode", "", RelXml.FormatHexByte, 16); + RelXml.WriteRawArray(sb, Constants, indent, "Constants", "", FloatUtil.ToString, 1); + RelXml.WriteItemArray(sb, Variables, indent, "Variables"); + } + public override void ReadXml(XmlNode node) + { + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + BuffersCount = Xml.GetChildIntAttribute(node, "BuffersCount", "value"); + RegistersCount = Xml.GetChildIntAttribute(node, "RegistersCount", "value"); + OutputsCount1 = Xml.GetChildIntAttribute(node, "OutputsCount1", "value"); + OutputsCount2 = Xml.GetChildIntAttribute(node, "OutputsCount2", "value"); + StateBlocksCount = Xml.GetChildIntAttribute(node, "StateBlocksCount", "value"); + RuntimeCost = Xml.GetChildIntAttribute(node, "RuntimeCost", "value"); + Bytecode = Xml.GetChildRawByteArray(node, "Bytecode"); + BytecodeLength = (Bytecode?.Length ?? 0); + Constants = Xml.GetChildRawFloatArray(node, "Constants"); + ConstantsCount = (Constants?.Length ?? 0); + Variables = XmlRel.ReadItemArray(node, "Variables"); + VariablesCount = (Variables?.Length ?? 0); + } + } + + + #endregion + + + + + #region dat15 + + + public enum Dat15RelType : byte + { + Unk0 = 0,//patch + Unk1 = 1, + Unk2 = 2,//scene + Unk3 = 3,//group + Unk4 = 4,//group list + Unk5 = 5, + Unk6 = 6, + Unk7 = 7, + Unk8 = 8, + Unk9 = 9,//group map + } + + [TC(typeof(EXP))] public class Dat15RelData : RelData + { + public Dat15RelType Type { get; set; } + public uint NameTableOffset { get; set; } + public FlagsUint Flags { get; set; } + + public Dat15RelData(RelFile rel) : base(rel) { } + public Dat15RelData(RelFile rel, Dat15RelType type) : base(rel) + { + Type = type; + TypeID = (byte)type; + } + public Dat15RelData(RelData d, BinaryReader br) : base(d) + { + Type = (Dat15RelType)TypeID; + + br.BaseStream.Position = 0; //1 byte was read already (TypeID) + + NameTableOffset = ((br.ReadUInt32() >> 8) & 0xFFFFFF); + Flags = br.ReadUInt32(); + } + + public void WriteTypeAndOffsetAndFlags(BinaryWriter bw) + { + var val = ((NameTableOffset & 0xFFFFFF) << 8) + TypeID; + bw.Write(val); + bw.Write(Flags); } public override string ToString() { - return GetBaseString() + ": " + Type.ToString() + ": " + ContainerHash.ToString(); + return GetBaseString() + ": " + Type.ToString(); + } + } + + //TODO + [TC(typeof(EXP))] public class Dat15Unk0 : Dat15RelData + { + public Dat15Unk0(RelFile rel) : base(rel) + { + Type = Dat15RelType.Unk0; + TypeID = (byte)Type; + } + public Dat15Unk0(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + //WriteTypeAndOffsetAndFlags(bw); + base.Write(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + } + } + [TC(typeof(EXP))] public class Dat15Unk1 : Dat15RelData + { + public Dat15Unk1(RelFile rel) : base(rel) + { + Type = Dat15RelType.Unk1; + TypeID = (byte)Type; + } + public Dat15Unk1(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + //WriteTypeAndOffsetAndFlags(bw); + base.Write(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + } + } + [TC(typeof(EXP))] public class Dat15Unk2 : Dat15RelData + { + public Dat15Unk2(RelFile rel) : base(rel) + { + Type = Dat15RelType.Unk2; + TypeID = (byte)Type; + } + public Dat15Unk2(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + //WriteTypeAndOffsetAndFlags(bw); + base.Write(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + } + } + [TC(typeof(EXP))] public class Dat15Unk3 : Dat15RelData + { + public Dat15Unk3(RelFile rel) : base(rel) + { + Type = Dat15RelType.Unk3; + TypeID = (byte)Type; + } + public Dat15Unk3(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + //WriteTypeAndOffsetAndFlags(bw); + base.Write(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + } + } + [TC(typeof(EXP))] public class Dat15Unk4 : Dat15RelData + { + public Dat15Unk4(RelFile rel) : base(rel) + { + Type = Dat15RelType.Unk4; + TypeID = (byte)Type; + } + public Dat15Unk4(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + //WriteTypeAndOffsetAndFlags(bw); + base.Write(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + } + } + [TC(typeof(EXP))] public class Dat15Unk5 : Dat15RelData + { + public Dat15Unk5(RelFile rel) : base(rel) + { + Type = Dat15RelType.Unk5; + TypeID = (byte)Type; + } + public Dat15Unk5(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + //WriteTypeAndOffsetAndFlags(bw); + base.Write(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + } + } + [TC(typeof(EXP))] public class Dat15Unk6 : Dat15RelData + { + public Dat15Unk6(RelFile rel) : base(rel) + { + Type = Dat15RelType.Unk6; + TypeID = (byte)Type; + } + public Dat15Unk6(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + //WriteTypeAndOffsetAndFlags(bw); + base.Write(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + } + } + [TC(typeof(EXP))] public class Dat15Unk7 : Dat15RelData + { + public Dat15Unk7(RelFile rel) : base(rel) + { + Type = Dat15RelType.Unk7; + TypeID = (byte)Type; + } + public Dat15Unk7(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + //WriteTypeAndOffsetAndFlags(bw); + base.Write(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + } + } + [TC(typeof(EXP))] public class Dat15Unk8 : Dat15RelData + { + public Dat15Unk8(RelFile rel) : base(rel) + { + Type = Dat15RelType.Unk8; + TypeID = (byte)Type; + } + public Dat15Unk8(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + //WriteTypeAndOffsetAndFlags(bw); + base.Write(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + } + } + [TC(typeof(EXP))] public class Dat15Unk9 : Dat15RelData + { + public Dat15Unk9(RelFile rel) : base(rel) + { + Type = Dat15RelType.Unk9; + TypeID = (byte)Type; + } + public Dat15Unk9(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + //WriteTypeAndOffsetAndFlags(bw); + base.Write(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); } } @@ -20090,6 +20791,507 @@ namespace CodeWalker.GameFiles + #region dat16 + + + public enum Dat16RelType : byte + { + Unk01 = 1, + Unk02 = 2, + Unk03 = 3, + Unk04 = 4, + Unk05 = 5, + Unk06 = 6, + Unk07 = 7, + Unk08 = 8, + Unk09 = 9, + Unk10 = 10, + Unk12 = 12, + Unk13 = 13, + Unk15 = 15, + } + + [TC(typeof(EXP))] public class Dat16RelData : RelData + { + public Dat16RelType Type { get; set; } + public uint NameTableOffset { get; set; } + public FlagsUint Flags { get; set; } + + public Dat16RelData(RelFile rel) : base(rel) { } + public Dat16RelData(RelFile rel, Dat16RelType type) : base(rel) + { + Type = type; + TypeID = (byte)type; + } + public Dat16RelData(RelData d, BinaryReader br) : base(d) + { + Type = (Dat16RelType)TypeID; + + br.BaseStream.Position = 0; //1 byte was read already (TypeID) + + NameTableOffset = ((br.ReadUInt32() >> 8) & 0xFFFFFF); + Flags = br.ReadUInt32(); + } + + public void WriteTypeAndOffsetAndFlags(BinaryWriter bw) + { + var val = ((NameTableOffset & 0xFFFFFF) << 8) + TypeID; + bw.Write(val); + bw.Write(Flags); + } + + public override string ToString() + { + return GetBaseString() + ": " + Type.ToString(); + } + } + + //TODO + [TC(typeof(EXP))] public class Dat16Unk01 : Dat16RelData + { + public Dat16Unk01(RelFile rel) : base(rel) + { + Type = Dat16RelType.Unk01; + TypeID = (byte)Type; + } + public Dat16Unk01(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + //WriteTypeAndOffsetAndFlags(bw); + base.Write(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + } + } + [TC(typeof(EXP))] public class Dat16Unk02 : Dat16RelData + { + public Dat16Unk02(RelFile rel) : base(rel) + { + Type = Dat16RelType.Unk02; + TypeID = (byte)Type; + } + public Dat16Unk02(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + //WriteTypeAndOffsetAndFlags(bw); + base.Write(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + } + } + [TC(typeof(EXP))] public class Dat16Unk03 : Dat16RelData + { + public Dat16Unk03(RelFile rel) : base(rel) + { + Type = Dat16RelType.Unk03; + TypeID = (byte)Type; + } + public Dat16Unk03(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + //WriteTypeAndOffsetAndFlags(bw); + base.Write(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + } + } + [TC(typeof(EXP))] public class Dat16Unk04 : Dat16RelData + { + public Dat16Unk04(RelFile rel) : base(rel) + { + Type = Dat16RelType.Unk04; + TypeID = (byte)Type; + } + public Dat16Unk04(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + //WriteTypeAndOffsetAndFlags(bw); + base.Write(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + } + } + [TC(typeof(EXP))] public class Dat16Unk05 : Dat16RelData + { + public Dat16Unk05(RelFile rel) : base(rel) + { + Type = Dat16RelType.Unk05; + TypeID = (byte)Type; + } + public Dat16Unk05(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + //WriteTypeAndOffsetAndFlags(bw); + base.Write(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + } + } + [TC(typeof(EXP))] public class Dat16Unk06 : Dat16RelData + { + public Dat16Unk06(RelFile rel) : base(rel) + { + Type = Dat16RelType.Unk06; + TypeID = (byte)Type; + } + public Dat16Unk06(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + //WriteTypeAndOffsetAndFlags(bw); + base.Write(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + } + } + [TC(typeof(EXP))] public class Dat16Unk07 : Dat16RelData + { + public Dat16Unk07(RelFile rel) : base(rel) + { + Type = Dat16RelType.Unk07; + TypeID = (byte)Type; + } + public Dat16Unk07(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + //WriteTypeAndOffsetAndFlags(bw); + base.Write(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + } + } + [TC(typeof(EXP))] public class Dat16Unk08 : Dat16RelData + { + public Dat16Unk08(RelFile rel) : base(rel) + { + Type = Dat16RelType.Unk08; + TypeID = (byte)Type; + } + public Dat16Unk08(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + //WriteTypeAndOffsetAndFlags(bw); + base.Write(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + } + } + [TC(typeof(EXP))] public class Dat16Unk09 : Dat16RelData + { + public Dat16Unk09(RelFile rel) : base(rel) + { + Type = Dat16RelType.Unk09; + TypeID = (byte)Type; + } + public Dat16Unk09(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + //WriteTypeAndOffsetAndFlags(bw); + base.Write(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + } + } + [TC(typeof(EXP))] public class Dat16Unk10 : Dat16RelData + { + public Dat16Unk10(RelFile rel) : base(rel) + { + Type = Dat16RelType.Unk10; + TypeID = (byte)Type; + } + public Dat16Unk10(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + //WriteTypeAndOffsetAndFlags(bw); + base.Write(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + } + } + [TC(typeof(EXP))] public class Dat16Unk12 : Dat16RelData + { + public Dat16Unk12(RelFile rel) : base(rel) + { + Type = Dat16RelType.Unk12; + TypeID = (byte)Type; + } + public Dat16Unk12(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + //WriteTypeAndOffsetAndFlags(bw); + base.Write(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + } + } + [TC(typeof(EXP))] public class Dat16Unk13 : Dat16RelData + { + public Dat16Unk13(RelFile rel) : base(rel) + { + Type = Dat16RelType.Unk13; + TypeID = (byte)Type; + } + public Dat16Unk13(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + //WriteTypeAndOffsetAndFlags(bw); + base.Write(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + } + } + [TC(typeof(EXP))] public class Dat16Unk15 : Dat16RelData + { + public Dat16Unk15(RelFile rel) : base(rel) + { + Type = Dat16RelType.Unk15; + TypeID = (byte)Type; + } + public Dat16Unk15(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + //WriteTypeAndOffsetAndFlags(bw); + base.Write(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + } + } + + + #endregion + + + + + #region dat22 + + + public enum Dat22RelType : byte + { + Unk0 = 0, + } + + [TC(typeof(EXP))] public class Dat22RelData : RelData + { + public Dat22RelType Type { get; set; } + public uint NameTableOffset { get; set; } + public FlagsUint Flags { get; set; } + + public Dat22RelData(RelFile rel) : base(rel) { } + public Dat22RelData(RelFile rel, Dat22RelType type) : base(rel) + { + Type = type; + TypeID = (byte)type; + } + public Dat22RelData(RelData d, BinaryReader br) : base(d) + { + Type = (Dat22RelType)TypeID; + + br.BaseStream.Position = 0; //1 byte was read already (TypeID) + + NameTableOffset = ((br.ReadUInt32() >> 8) & 0xFFFFFF); + Flags = br.ReadUInt32(); + } + + public void WriteTypeAndOffsetAndFlags(BinaryWriter bw) + { + var val = ((NameTableOffset & 0xFFFFFF) << 8) + TypeID; + bw.Write(val); + bw.Write(Flags); + } + + public override string ToString() + { + return GetBaseString() + ": " + Type.ToString(); + } + } + + //TODO + [TC(typeof(EXP))] public class Dat22Unk0 : Dat22RelData + { + public Dat22Unk0(RelFile rel) : base(rel) + { + Type = Dat22RelType.Unk0; + TypeID = (byte)Type; + } + public Dat22Unk0(RelData d, BinaryReader br) : base(d, br) + { + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + //WriteTypeAndOffsetAndFlags(bw); + base.Write(bw); + } + public override void WriteXml(StringBuilder sb, int indent) + { + base.WriteXml(sb, indent); + } + public override void ReadXml(XmlNode node) + { + base.ReadXml(node); + } + } + + + #endregion + + + + + + + + + + + + + public class RelXml : MetaXmlBase { @@ -20146,6 +21348,18 @@ namespace CodeWalker.GameFiles if (rel.IsAudioConfig) typeid = ((Dat4ConfigType)item.TypeID).ToString(); else typeid = ((Dat4SpeechType)item.TypeID).ToString(); break; + case RelDatFileType.Dat10ModularSynth: + typeid = ((Dat10RelType)item.TypeID).ToString(); + break; + case RelDatFileType.Dat15DynamicMixer: + typeid = ((Dat15RelType)item.TypeID).ToString(); + break; + case RelDatFileType.Dat16Curves: + typeid = ((Dat16RelType)item.TypeID).ToString(); + break; + case RelDatFileType.Dat22Categories: + typeid = ((Dat22RelType)item.TypeID).ToString(); + break; default: break; } @@ -20161,6 +21375,34 @@ namespace CodeWalker.GameFiles { ntoffset = " ntOffset=\"" + dat4config.NameTableOffset.ToString() + "\""; } + var dat4Speech = item as Dat4SpeechData; + if (dat4Speech != null) + { + if (dat4Speech.Type == Dat4SpeechType.Container) + { + ntoffset = " ntOffset=\"" + dat4Speech.NameTableOffset.ToString() + "\""; + } + } + var dat10item = item as Dat10RelData; + if (dat10item != null) + { + ntoffset = " ntOffset=\"" + dat10item.NameTableOffset.ToString() + "\""; + } + var dat15item = item as Dat15RelData; + if (dat15item != null) + { + ntoffset = " ntOffset=\"" + dat15item.NameTableOffset.ToString() + "\""; + } + var dat16item = item as Dat16RelData; + if (dat16item != null) + { + ntoffset = " ntOffset=\"" + dat16item.NameTableOffset.ToString() + "\""; + } + var dat22item = item as Dat22RelData; + if (dat22item != null) + { + ntoffset = " ntOffset=\"" + dat22item.NameTableOffset.ToString() + "\""; + } OpenTag(sb, iindent, "Item type=\"" + typeid + "\"" + ntoffset); @@ -20271,6 +21513,34 @@ namespace CodeWalker.GameFiles } } break; + case RelDatFileType.Dat10ModularSynth: + Dat10RelType mst; + if (Enum.TryParse(typestr, out mst)) + { + typeid = (int)mst; + } + break; + case RelDatFileType.Dat15DynamicMixer: + Dat15RelType dmt; + if (Enum.TryParse(typestr, out dmt)) + { + typeid = (int)dmt; + } + break; + case RelDatFileType.Dat16Curves: + Dat16RelType cvt; + if (Enum.TryParse(typestr, out cvt)) + { + typeid = (int)cvt; + } + break; + case RelDatFileType.Dat22Categories: + Dat22RelType cat; + if (Enum.TryParse(typestr, out cat)) + { + typeid = (int)cat; + } + break; } if (typeid < 0) { @@ -20298,7 +21568,31 @@ namespace CodeWalker.GameFiles { dat4config.NameTableOffset = ntoffset; } - + var dat4speech = rd as Dat4SpeechData; + if (dat4speech != null) + { + dat4speech.NameTableOffset = ntoffset; + } + var dat10item = rd as Dat10RelData; + if (dat10item != null) + { + dat10item.NameTableOffset = ntoffset; + } + var dat15item = rd as Dat15RelData; + if (dat15item != null) + { + dat15item.NameTableOffset = ntoffset; + } + var dat16item = rd as Dat16RelData; + if (dat16item != null) + { + dat16item.NameTableOffset = ntoffset; + } + var dat22item = rd as Dat22RelData; + if (dat22item != null) + { + dat22item.NameTableOffset = ntoffset; + } } rel.RelDatas = itemslist.ToArray();//this one will get sorted on save diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs index 1fdd4f9..068f467 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs @@ -3477,7 +3477,7 @@ namespace CodeWalker.GameFiles null_sound = 3817852694, //used in game.dat151.rel run = 285848937, //used in game.dat151.rel - + cop_dispatch_interaction_settings = 778268174, //used in game.dat151.rel diff --git a/CodeWalker.Core/Utils/Xml.cs b/CodeWalker.Core/Utils/Xml.cs index 1baf5cf..29f3b25 100644 --- a/CodeWalker.Core/Utils/Xml.cs +++ b/CodeWalker.Core/Utils/Xml.cs @@ -218,6 +218,26 @@ namespace CodeWalker return GetRawByteArray(cnode); } + public static float[] GetRawFloatArray(XmlNode node) + { + if (node == null) return new float[0]; + var items = new List(); + var split = node.InnerText.Split('\n');// Regex.Split(node.InnerText, @"[\s\r\n\t]"); + for (int i = 0; i < split.Length; i++) + { + var s = split[i]?.Trim(); + if (string.IsNullOrEmpty(s)) continue; + var f = FloatUtil.Parse(s); + items.Add(f); + } + return items.ToArray(); + } + public static float[] GetChildRawFloatArray(XmlNode node, string name) + { + var cnode = node.SelectSingleNode(name); + return GetRawFloatArray(cnode); + } + public static Vector2[] GetRawVector2Array(XmlNode node) { if (node == null) return new Vector2[0]; From 47113036aed4869a84c830074040b2ff05b83182 Mon Sep 17 00:00:00 2001 From: dexyfex Date: Wed, 13 Mar 2019 04:22:36 +1100 Subject: [PATCH 148/158] Audio dat progress --- .../GameFiles/FileTypes/RelFile.cs | 1093 ++++++++++++++--- 1 file changed, 952 insertions(+), 141 deletions(-) diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index a9f911d..37a79c3 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -529,16 +529,16 @@ namespace CodeWalker.GameFiles { switch ((Dat15RelType)d.TypeID) { - case Dat15RelType.Unk0: return new Dat15Unk0(d, br); + case Dat15RelType.Patch: return new Dat15Patch(d, br); case Dat15RelType.Unk1: return new Dat15Unk1(d, br); - case Dat15RelType.Unk2: return new Dat15Unk2(d, br); - case Dat15RelType.Unk3: return new Dat15Unk3(d, br); - case Dat15RelType.Unk4: return new Dat15Unk4(d, br); + case Dat15RelType.Scene: return new Dat15Scene(d, br); + case Dat15RelType.Group: return new Dat15Group(d, br); + case Dat15RelType.GroupList: return new Dat15GroupList(d, br); case Dat15RelType.Unk5: return new Dat15Unk5(d, br); case Dat15RelType.Unk6: return new Dat15Unk6(d, br); case Dat15RelType.Unk7: return new Dat15Unk7(d, br); case Dat15RelType.Unk8: return new Dat15Unk8(d, br); - case Dat15RelType.Unk9: return new Dat15Unk9(d, br); + case Dat15RelType.GroupMap: return new Dat15GroupMap(d, br); default: break; } @@ -952,16 +952,16 @@ namespace CodeWalker.GameFiles case RelDatFileType.Dat15DynamicMixer: switch ((Dat15RelType)dataType) { - case Dat15RelType.Unk0: return new Dat15Unk0(this); + case Dat15RelType.Patch: return new Dat15Patch(this); case Dat15RelType.Unk1: return new Dat15Unk1(this); - case Dat15RelType.Unk2: return new Dat15Unk2(this); - case Dat15RelType.Unk3: return new Dat15Unk3(this); - case Dat15RelType.Unk4: return new Dat15Unk4(this); + case Dat15RelType.Scene: return new Dat15Scene(this); + case Dat15RelType.Group: return new Dat15Group(this); + case Dat15RelType.GroupList: return new Dat15GroupList(this); case Dat15RelType.Unk5: return new Dat15Unk5(this); case Dat15RelType.Unk6: return new Dat15Unk6(this); case Dat15RelType.Unk7: return new Dat15Unk7(this); case Dat15RelType.Unk8: return new Dat15Unk8(this); - case Dat15RelType.Unk9: return new Dat15Unk9(this); + case Dat15RelType.GroupMap: return new Dat15GroupMap(this); default: return new Dat15RelData(this);//shouldn't get here } @@ -20465,16 +20465,16 @@ namespace CodeWalker.GameFiles public enum Dat15RelType : byte { - Unk0 = 0,//patch + Patch = 0,//patch Unk1 = 1, - Unk2 = 2,//scene - Unk3 = 3,//group - Unk4 = 4,//group list + Scene = 2,//scene + Group = 3,//group + GroupList = 4,//group list Unk5 = 5, Unk6 = 6, Unk7 = 7, Unk8 = 8, - Unk9 = 9,//group map + GroupMap = 9,//group map } [TC(typeof(EXP))] public class Dat15RelData : RelData @@ -20512,36 +20512,179 @@ namespace CodeWalker.GameFiles } } - //TODO - [TC(typeof(EXP))] public class Dat15Unk0 : Dat15RelData + [TC(typeof(EXP))] public class Dat15PatchItem : IMetaXmlItem { - public Dat15Unk0(RelFile rel) : base(rel) + public MetaHash Unk01 { get; set; } + public short Unk02 { get; set; } + public byte Unk03 { get; set; } + public byte Unk04 { get; set; } + public byte Unk05 { get; set; } + public byte Unk06 { get; set; } + public short Unk07 { get; set; } + public byte Unk08 { get; set; } + public float Unk09 { get; set; } + public byte Unk10 { get; set; } + public float Unk11 { get; set; } + + public Dat15PatchItem() + { } + public Dat15PatchItem(BinaryReader br) { - Type = Dat15RelType.Unk0; + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadInt16(); + Unk03 = br.ReadByte(); + Unk04 = br.ReadByte(); + Unk05 = br.ReadByte(); + Unk06 = br.ReadByte(); + Unk07 = br.ReadInt16(); + Unk08 = br.ReadByte(); + Unk09 = br.ReadSingle(); + Unk10 = br.ReadByte(); + Unk11 = br.ReadSingle(); + } + public void Write(BinaryWriter bw) + { + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + } + public void WriteXml(StringBuilder sb, int indent) + { + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); + RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); + RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); + RelXml.ValueTag(sb, indent, "Unk05", Unk05.ToString()); + RelXml.ValueTag(sb, indent, "Unk06", Unk06.ToString()); + RelXml.ValueTag(sb, indent, "Unk07", Unk07.ToString()); + RelXml.ValueTag(sb, indent, "Unk08", Unk08.ToString()); + RelXml.ValueTag(sb, indent, "Unk09", FloatUtil.ToString(Unk09)); + RelXml.ValueTag(sb, indent, "Unk10", Unk10.ToString()); + RelXml.ValueTag(sb, indent, "Unk11", FloatUtil.ToString(Unk11)); + } + public void ReadXml(XmlNode node) + { + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = (short)Xml.GetChildIntAttribute(node, "Unk02", "value"); + Unk03 = (byte)Xml.GetChildUIntAttribute(node, "Unk03", "value"); + Unk04 = (byte)Xml.GetChildUIntAttribute(node, "Unk04", "value"); + Unk05 = (byte)Xml.GetChildUIntAttribute(node, "Unk05", "value"); + Unk06 = (byte)Xml.GetChildUIntAttribute(node, "Unk06", "value"); + Unk07 = (short)Xml.GetChildIntAttribute(node, "Unk07", "value"); + Unk08 = (byte)Xml.GetChildUIntAttribute(node, "Unk08", "value"); + Unk09 = Xml.GetChildFloatAttribute(node, "Unk09", "value"); + Unk10 = (byte)Xml.GetChildUIntAttribute(node, "Unk10", "value"); + Unk11 = Xml.GetChildFloatAttribute(node, "Unk11", "value"); + } + public override string ToString() + { + return Unk01.ToString() + ": " + + Unk02.ToString() + ", " + + Unk03.ToString() + ", " + + Unk04.ToString() + ", " + + Unk05.ToString() + ", " + + Unk06.ToString() + ", " + + Unk07.ToString() + ", " + + Unk08.ToString() + ", " + + Unk09.ToString() + ", " + + Unk10.ToString() + ", " + + Unk11.ToString(); + } + } + [TC(typeof(EXP))] public class Dat15Patch : Dat15RelData + { + public short Unk01 { get; set; } + public short Unk02 { get; set; } + public float Unk03 { get; set; } + public float Unk04 { get; set; } + public MetaHash Unk05 { get; set; } + public MetaHash Unk06 { get; set; } + public float Unk07 { get; set; } + public byte ItemCount { get; set; } + public Dat15PatchItem[] Items { get; set; } + + public Dat15Patch(RelFile rel) : base(rel) + { + Type = Dat15RelType.Patch; TypeID = (byte)Type; } - public Dat15Unk0(RelData d, BinaryReader br) : base(d, br) + public Dat15Patch(RelData d, BinaryReader br) : base(d, br) { + Unk01 = br.ReadInt16(); + Unk02 = br.ReadInt16(); + Unk03 = br.ReadSingle(); + Unk04 = br.ReadSingle(); + Unk05 = br.ReadUInt32(); + Unk06 = br.ReadUInt32(); + Unk07 = br.ReadSingle(); + ItemCount = br.ReadByte(); + Items = new Dat15PatchItem[ItemCount]; + for (int i = 0; i < ItemCount; i++) + { + Items[i] = new Dat15PatchItem(br); + } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffsetAndFlags(bw); - base.Write(bw); + WriteTypeAndOffsetAndFlags(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) + { + Items[i].Write(bw); + } + } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); + RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); + RelXml.ValueTag(sb, indent, "Unk03", FloatUtil.ToString(Unk03)); + RelXml.ValueTag(sb, indent, "Unk04", FloatUtil.ToString(Unk04)); + RelXml.StringTag(sb, indent, "Unk05", RelXml.HashString(Unk05)); + RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); + RelXml.ValueTag(sb, indent, "Unk07", FloatUtil.ToString(Unk07)); + RelXml.WriteItemArray(sb, Items, indent, "Items"); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = (short)Xml.GetChildIntAttribute(node, "Unk01", "value"); + Unk02 = (short)Xml.GetChildIntAttribute(node, "Unk02", "value"); + Unk03 = Xml.GetChildFloatAttribute(node, "Unk03", "value"); + Unk04 = Xml.GetChildFloatAttribute(node, "Unk04", "value"); + Unk05 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk05")); + Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); + Unk07 = Xml.GetChildFloatAttribute(node, "Unk07", "value"); + Items = XmlRel.ReadItemArray(node, "Items"); + ItemCount = (byte)(Items?.Length ?? 0); } } [TC(typeof(EXP))] public class Dat15Unk1 : Dat15RelData { + public byte ItemCount { get; set; } + public Dat151HashPair[] Items { get; set; } + public Dat15Unk1(RelFile rel) : base(rel) { Type = Dat15RelType.Unk1; @@ -20549,107 +20692,217 @@ namespace CodeWalker.GameFiles } public Dat15Unk1(RelData d, BinaryReader br) : base(d, br) { + ItemCount = br.ReadByte(); + Items = new Dat151HashPair[ItemCount]; + for (int i = 0; i < ItemCount; i++) + { + Items[i] = new Dat151HashPair(br); + } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffsetAndFlags(bw); - base.Write(bw); + WriteTypeAndOffsetAndFlags(bw); + + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) + { + Items[i].Write(bw); + } } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.WriteItemArray(sb, Items, indent, "Items"); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Items = XmlRel.ReadItemArray(node, "Items"); + ItemCount = (byte)(Items?.Length ?? 0); } } - [TC(typeof(EXP))] public class Dat15Unk2 : Dat15RelData + [TC(typeof(EXP))] public class Dat15SceneItem : IMetaXmlItem { - public Dat15Unk2(RelFile rel) : base(rel) + public MetaHash Patch { get; set; } + public MetaHash Group { get; set; } + + public Dat15SceneItem() + { } + public Dat15SceneItem(BinaryReader br) { - Type = Dat15RelType.Unk2; - TypeID = (byte)Type; + Patch = br.ReadUInt32(); + Group = br.ReadUInt32(); } - public Dat15Unk2(RelData d, BinaryReader br) : base(d, br) + public void Write(BinaryWriter bw) { - var bytesleft = br.BaseStream.Length - br.BaseStream.Position; - if (bytesleft != 0) - { } + bw.Write(Patch); + bw.Write(Group); } - public override void Write(BinaryWriter bw) + public void WriteXml(StringBuilder sb, int indent) { - //WriteTypeAndOffsetAndFlags(bw); - base.Write(bw); + RelXml.StringTag(sb, indent, "Patch", RelXml.HashString(Patch)); + RelXml.StringTag(sb, indent, "Group", RelXml.HashString(Group)); } - public override void WriteXml(StringBuilder sb, int indent) + public void ReadXml(XmlNode node) { - base.WriteXml(sb, indent); + Patch = XmlRel.GetHash(Xml.GetChildInnerText(node, "Patch")); + Group = XmlRel.GetHash(Xml.GetChildInnerText(node, "Group")); } - public override void ReadXml(XmlNode node) + public override string ToString() { - base.ReadXml(node); + return Patch.ToString() + ": " + Group.ToString(); } } - [TC(typeof(EXP))] public class Dat15Unk3 : Dat15RelData + [TC(typeof(EXP))] public class Dat15Scene : Dat15RelData { - public Dat15Unk3(RelFile rel) : base(rel) + public MetaHash Unk01 { get; set; }//0 + public byte ItemCount { get; set; } + public Dat15SceneItem[] Items { get; set; } + + public Dat15Scene(RelFile rel) : base(rel) { - Type = Dat15RelType.Unk3; + Type = Dat15RelType.Scene; TypeID = (byte)Type; } - public Dat15Unk3(RelData d, BinaryReader br) : base(d, br) + public Dat15Scene(RelData d, BinaryReader br) : base(d, br) { + Unk01 = br.ReadUInt32(); + ItemCount = br.ReadByte(); + Items = new Dat15SceneItem[ItemCount]; + for (int i = 0; i < ItemCount; i++) + { + Items[i] = new Dat15SceneItem(br); + } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffsetAndFlags(bw); - base.Write(bw); + WriteTypeAndOffsetAndFlags(bw); + + bw.Write(Unk01); + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) + { + Items[i].Write(bw); + } } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.WriteItemArray(sb, Items, indent, "Items"); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Items = XmlRel.ReadItemArray(node, "Items"); + ItemCount = (byte)(Items?.Length ?? 0); } } - [TC(typeof(EXP))] public class Dat15Unk4 : Dat15RelData + [TC(typeof(EXP))] public class Dat15Group : Dat15RelData { - public Dat15Unk4(RelFile rel) : base(rel) + public MetaHash Unk01 { get; set; }//0 + public float Unk02 { get; set; } + public MetaHash Unk03 { get; set; } + + public Dat15Group(RelFile rel) : base(rel) { - Type = Dat15RelType.Unk4; + Type = Dat15RelType.Group; TypeID = (byte)Type; } - public Dat15Unk4(RelData d, BinaryReader br) : base(d, br) + public Dat15Group(RelData d, BinaryReader br) : base(d, br) { + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadSingle(); + Unk03 = br.ReadUInt32(); + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffsetAndFlags(bw); - base.Write(bw); + WriteTypeAndOffsetAndFlags(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", FloatUtil.ToString(Unk02)); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = Xml.GetChildFloatAttribute(node, "Unk02", "value"); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + } + } + [TC(typeof(EXP))] public class Dat15GroupList : Dat15RelData + { + public byte GroupCount { get; set; } + public MetaHash[] Groups { get; set; } + + public Dat15GroupList(RelFile rel) : base(rel) + { + Type = Dat15RelType.GroupList; + TypeID = (byte)Type; + } + public Dat15GroupList(RelData d, BinaryReader br) : base(d, br) + { + GroupCount = br.ReadByte(); + Groups = new MetaHash[GroupCount]; + for (int i = 0; i < GroupCount; i++) + { + Groups[i] = br.ReadUInt32(); + } + + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; + if (bytesleft != 0) + { } + } + public override void Write(BinaryWriter bw) + { + WriteTypeAndOffsetAndFlags(bw); + + bw.Write(GroupCount); + for (int i = 0; i < GroupCount; i++) + { + bw.Write(Groups[i]); + } + } + public override void WriteXml(StringBuilder sb, int indent) + { + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.WriteHashItemArray(sb, Groups, indent, "Groups"); + } + public override void ReadXml(XmlNode node) + { + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Groups = XmlRel.ReadHashItemArray(node, "Groups"); + GroupCount = (byte)(Groups?.Length ?? 0); } } [TC(typeof(EXP))] public class Dat15Unk5 : Dat15RelData { + public MetaHash Unk01 { get; set; }//0 + public MetaHash Unk02 { get; set; } + public MetaHash Unk03 { get; set; }//0 + public MetaHash Unk04 { get; set; } + public Dat15Unk5(RelFile rel) : base(rel) { Type = Dat15RelType.Unk5; @@ -20657,26 +20910,48 @@ namespace CodeWalker.GameFiles } public Dat15Unk5(RelData d, BinaryReader br) : base(d, br) { + Unk01 = br.ReadUInt32();//0 + Unk02 = br.ReadUInt32(); + Unk03 = br.ReadUInt32();//0 + Unk04 = br.ReadUInt32(); + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffsetAndFlags(bw); - base.Write(bw); + WriteTypeAndOffsetAndFlags(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); + RelXml.StringTag(sb, indent, "Unk04", RelXml.HashString(Unk04)); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk04")); } } [TC(typeof(EXP))] public class Dat15Unk6 : Dat15RelData { + public MetaHash Unk01 { get; set; } + public MetaHash Unk02 { get; set; } + public byte ItemCount { get; set; } + public float[] Items { get; set; } + public Dat15Unk6(RelFile rel) : base(rel) { Type = Dat15RelType.Unk6; @@ -20684,26 +20959,53 @@ namespace CodeWalker.GameFiles } public Dat15Unk6(RelData d, BinaryReader br) : base(d, br) { + Unk01 = br.ReadUInt32(); + Unk02 = br.ReadUInt32(); + ItemCount = br.ReadByte(); + Items = new float[ItemCount]; + for (int i = 0; i < ItemCount; i++) + { + Items[i] = br.ReadSingle(); + } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffsetAndFlags(bw); - base.Write(bw); + WriteTypeAndOffsetAndFlags(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) + { + bw.Write(Items[i]); + } } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); + RelXml.WriteRawArray(sb, Items, indent, "Items", "", FloatUtil.ToString, 1); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); + Items = Xml.GetChildRawFloatArray(node, "Items"); + ItemCount = (byte)(Items?.Length ?? 0); } } [TC(typeof(EXP))] public class Dat15Unk7 : Dat15RelData { + public byte Unk01 { get; set; }//could be an array count? + public float Unk02 { get; set; } + public MetaHash Unk03 { get; set; } + public Dat15Unk7(RelFile rel) : base(rel) { Type = Dat15RelType.Unk7; @@ -20711,26 +21013,51 @@ namespace CodeWalker.GameFiles } public Dat15Unk7(RelData d, BinaryReader br) : base(d, br) { + Unk01 = br.ReadByte(); + Unk02 = br.ReadSingle(); + Unk03 = br.ReadUInt32(); + + //byte ItemCount = br.ReadByte(); + //var Items = new MetaHash[ItemCount]; + //for (int i = 0; i < ItemCount; i++) + //{ + // Items[i] = br.ReadUInt32(); + //} + //if (ItemCount != 2) + //{ } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffsetAndFlags(bw); - base.Write(bw); + WriteTypeAndOffsetAndFlags(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); + RelXml.ValueTag(sb, indent, "Unk02", FloatUtil.ToString(Unk02)); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = (byte)Xml.GetChildUIntAttribute(node, "Unk01", "value"); + Unk02 = Xml.GetChildFloatAttribute(node, "Unk02", "value"); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); } } [TC(typeof(EXP))] public class Dat15Unk8 : Dat15RelData { + public byte Unk01 { get; set; } + public MetaHash Unk02 { get; set; } + public Dat15Unk8(RelFile rel) : base(rel) { Type = Dat15RelType.Unk8; @@ -20738,49 +21065,76 @@ namespace CodeWalker.GameFiles } public Dat15Unk8(RelData d, BinaryReader br) : base(d, br) { + Unk01 = br.ReadByte(); + Unk02 = br.ReadUInt32(); + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffsetAndFlags(bw); - base.Write(bw); + WriteTypeAndOffsetAndFlags(bw); + + bw.Write(Unk01); + bw.Write(Unk02); } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); + RelXml.StringTag(sb, indent, "Unk02", RelXml.HashString(Unk02)); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = (byte)Xml.GetChildUIntAttribute(node, "Unk01", "value"); + Unk02 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk02")); } } - [TC(typeof(EXP))] public class Dat15Unk9 : Dat15RelData + [TC(typeof(EXP))] public class Dat15GroupMap : Dat15RelData { - public Dat15Unk9(RelFile rel) : base(rel) + public ushort ItemCount { get; set; } + public Dat151HashPair[] Items { get; set; } + + public Dat15GroupMap(RelFile rel) : base(rel) { - Type = Dat15RelType.Unk9; + Type = Dat15RelType.GroupMap; TypeID = (byte)Type; } - public Dat15Unk9(RelData d, BinaryReader br) : base(d, br) + public Dat15GroupMap(RelData d, BinaryReader br) : base(d, br) { + ItemCount = br.ReadUInt16(); + Items = new Dat151HashPair[ItemCount]; + for (int i = 0; i < ItemCount; i++) + { + Items[i] = new Dat151HashPair(br); + } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffsetAndFlags(bw); - base.Write(bw); + WriteTypeAndOffsetAndFlags(bw); + + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) + { + Items[i].Write(bw); + } } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.WriteItemArray(sb, Items, indent, "Items"); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Items = XmlRel.ReadItemArray(node, "Items"); + ItemCount = (ushort)(Items?.Length ?? 0); } } @@ -20846,9 +21200,12 @@ namespace CodeWalker.GameFiles } } - //TODO [TC(typeof(EXP))] public class Dat16Unk01 : Dat16RelData { + public MetaHash Unk01 { get; set; }//0 (probably float) + public float Unk02 { get; set; } + public float Unk03 { get; set; } + public Dat16Unk01(RelFile rel) : base(rel) { Type = Dat16RelType.Unk01; @@ -20856,26 +21213,46 @@ namespace CodeWalker.GameFiles } public Dat16Unk01(RelData d, BinaryReader br) : base(d, br) { + Unk01 = br.ReadUInt32();//0 + Unk02 = br.ReadSingle(); + Unk03 = br.ReadSingle(); + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffsetAndFlags(bw); - base.Write(bw); + WriteTypeAndOffsetAndFlags(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", FloatUtil.ToString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", FloatUtil.ToString(Unk03)); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = Xml.GetChildFloatAttribute(node, "Unk02", "value"); + Unk03 = Xml.GetChildFloatAttribute(node, "Unk03", "value"); } } [TC(typeof(EXP))] public class Dat16Unk02 : Dat16RelData { + public float Unk01 { get; set; } + public float Unk02 { get; set; } + public float Unk03 { get; set; } + public float Unk04 { get; set; } + public float Unk05 { get; set; } + public float Unk06 { get; set; } + public Dat16Unk02(RelFile rel) : base(rel) { Type = Dat16RelType.Unk02; @@ -20883,26 +21260,58 @@ namespace CodeWalker.GameFiles } public Dat16Unk02(RelData d, BinaryReader br) : base(d, br) { + Unk01 = br.ReadSingle(); + Unk02 = br.ReadSingle(); + Unk03 = br.ReadSingle(); + Unk04 = br.ReadSingle(); + Unk05 = br.ReadSingle(); + Unk06 = br.ReadSingle(); + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffsetAndFlags(bw); - base.Write(bw); + WriteTypeAndOffsetAndFlags(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.ValueTag(sb, indent, "Unk01", FloatUtil.ToString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", FloatUtil.ToString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", FloatUtil.ToString(Unk03)); + RelXml.ValueTag(sb, indent, "Unk04", FloatUtil.ToString(Unk04)); + RelXml.ValueTag(sb, indent, "Unk05", FloatUtil.ToString(Unk05)); + RelXml.ValueTag(sb, indent, "Unk06", FloatUtil.ToString(Unk06)); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = Xml.GetChildFloatAttribute(node, "Unk01", "value"); + Unk02 = Xml.GetChildFloatAttribute(node, "Unk02", "value"); + Unk03 = Xml.GetChildFloatAttribute(node, "Unk03", "value"); + Unk04 = Xml.GetChildFloatAttribute(node, "Unk04", "value"); + Unk05 = Xml.GetChildFloatAttribute(node, "Unk05", "value"); + Unk06 = Xml.GetChildFloatAttribute(node, "Unk06", "value"); } } [TC(typeof(EXP))] public class Dat16Unk03 : Dat16RelData { + public MetaHash Unk01 { get; set; }//0 (probably float) + public float Unk02 { get; set; } + public MetaHash Unk03 { get; set; }//0 (probably float) + public MetaHash Unk04 { get; set; }//0 (probably float) + public float Unk05 { get; set; } + public float Unk06 { get; set; } + public Dat16Unk03(RelFile rel) : base(rel) { Type = Dat16RelType.Unk03; @@ -20910,26 +21319,63 @@ namespace CodeWalker.GameFiles } public Dat16Unk03(RelData d, BinaryReader br) : base(d, br) { + Unk01 = br.ReadUInt32();//0 + Unk02 = br.ReadSingle(); + Unk03 = br.ReadUInt32();//0 + Unk04 = br.ReadUInt32();//0 + Unk05 = br.ReadSingle(); + Unk06 = br.ReadSingle(); + + if (Unk01 != 0) + { } + if (Unk03 != 0) + { } + if (Unk04 != 0) + { } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffsetAndFlags(bw); - base.Write(bw); + WriteTypeAndOffsetAndFlags(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", FloatUtil.ToString(Unk02)); + RelXml.StringTag(sb, indent, "Unk03", RelXml.HashString(Unk03)); + RelXml.StringTag(sb, indent, "Unk04", RelXml.HashString(Unk04)); + RelXml.ValueTag(sb, indent, "Unk05", FloatUtil.ToString(Unk05)); + RelXml.ValueTag(sb, indent, "Unk06", FloatUtil.ToString(Unk06)); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = Xml.GetChildFloatAttribute(node, "Unk02", "value"); + Unk03 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk03")); + Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk04")); + Unk05 = Xml.GetChildFloatAttribute(node, "Unk05", "value"); + Unk06 = Xml.GetChildFloatAttribute(node, "Unk06", "value"); } } [TC(typeof(EXP))] public class Dat16Unk04 : Dat16RelData { + public float Unk01 { get; set; } + public float Unk02 { get; set; } + public int ItemCount { get; set; } + public Vector2[] Items { get; set; } + public Dat16Unk04(RelFile rel) : base(rel) { Type = Dat16RelType.Unk04; @@ -20937,26 +21383,54 @@ namespace CodeWalker.GameFiles } public Dat16Unk04(RelData d, BinaryReader br) : base(d, br) { + Unk01 = br.ReadSingle(); + Unk02 = br.ReadSingle(); + ItemCount = br.ReadInt32(); + Items = new Vector2[ItemCount]; + for (int i = 0; i < ItemCount; i++) + { + Items[i] = new Vector2(br.ReadSingle(), br.ReadSingle()); + } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffsetAndFlags(bw); - base.Write(bw); + WriteTypeAndOffsetAndFlags(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) + { + bw.Write(Items[i].X); + bw.Write(Items[i].Y); + } } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.ValueTag(sb, indent, "Unk01", FloatUtil.ToString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", FloatUtil.ToString(Unk02)); + RelXml.WriteRawArray(sb, Items, indent, "Items", "", RelXml.FormatVector2, 1); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = Xml.GetChildFloatAttribute(node, "Unk01", "value"); + Unk02 = Xml.GetChildFloatAttribute(node, "Unk02", "value"); + Items = Xml.GetChildRawVector2Array(node, "Items"); + ItemCount = Items?.Length ?? 0; } } [TC(typeof(EXP))] public class Dat16Unk05 : Dat16RelData { + public MetaHash Unk01 { get; set; }//0 + public float Unk02 { get; set; } + public int Unk03 { get; set; } + public Dat16Unk05(RelFile rel) : base(rel) { Type = Dat16RelType.Unk05; @@ -20964,26 +21438,47 @@ namespace CodeWalker.GameFiles } public Dat16Unk05(RelData d, BinaryReader br) : base(d, br) { + Unk01 = br.ReadUInt32();//0 + Unk02 = br.ReadSingle(); + Unk03 = br.ReadInt32(); + + if (Unk01 != 0) + { } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffsetAndFlags(bw); - base.Write(bw); + WriteTypeAndOffsetAndFlags(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", FloatUtil.ToString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = Xml.GetChildFloatAttribute(node, "Unk02", "value"); + Unk03 = Xml.GetChildIntAttribute(node, "Unk03", "value"); } } [TC(typeof(EXP))] public class Dat16Unk06 : Dat16RelData { + public MetaHash Unk01 { get; set; }//0 + public float Unk02 { get; set; } + public int ItemCount { get; set; } + public float[] Items { get; set; } + public Dat16Unk06(RelFile rel) : base(rel) { Type = Dat16RelType.Unk06; @@ -20991,26 +21486,57 @@ namespace CodeWalker.GameFiles } public Dat16Unk06(RelData d, BinaryReader br) : base(d, br) { + Unk01 = br.ReadUInt32();//0 + Unk02 = br.ReadSingle(); + ItemCount = br.ReadInt32(); + Items = new float[ItemCount]; + for (int i = 0; i < ItemCount; i++) + { + Items[i] = br.ReadSingle(); + } + + if (Unk01 != 0) + { } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffsetAndFlags(bw); - base.Write(bw); + WriteTypeAndOffsetAndFlags(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) + { + bw.Write(Items[i]); + } } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", FloatUtil.ToString(Unk02)); + RelXml.WriteRawArray(sb, Items, indent, "Items", "", FloatUtil.ToString, 1); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = Xml.GetChildFloatAttribute(node, "Unk02", "value"); + Items = Xml.GetChildRawFloatArray(node, "Items"); + ItemCount = (Items?.Length ?? 0); } } [TC(typeof(EXP))] public class Dat16Unk07 : Dat16RelData { + public float Unk01 { get; set; } + public float Unk02 { get; set; } + public int Unk03 { get; set; } + public float Unk04 { get; set; } + public Dat16Unk07(RelFile rel) : base(rel) { Type = Dat16RelType.Unk07; @@ -21018,26 +21544,47 @@ namespace CodeWalker.GameFiles } public Dat16Unk07(RelData d, BinaryReader br) : base(d, br) { + Unk01 = br.ReadSingle(); + Unk02 = br.ReadSingle(); + Unk03 = br.ReadInt32(); + Unk04 = br.ReadSingle(); + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffsetAndFlags(bw); - base.Write(bw); + WriteTypeAndOffsetAndFlags(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.ValueTag(sb, indent, "Unk01", FloatUtil.ToString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", FloatUtil.ToString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); + RelXml.ValueTag(sb, indent, "Unk04", FloatUtil.ToString(Unk04)); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = Xml.GetChildFloatAttribute(node, "Unk01", "value"); + Unk02 = Xml.GetChildFloatAttribute(node, "Unk02", "value"); + Unk03 = Xml.GetChildIntAttribute(node, "Unk03", "value"); + Unk04 = Xml.GetChildFloatAttribute(node, "Unk04", "value"); } } [TC(typeof(EXP))] public class Dat16Unk08 : Dat16RelData { + public MetaHash Unk01 { get; set; }//0 + public float Unk02 { get; set; } + public float Unk03 { get; set; } + public Dat16Unk08(RelFile rel) : base(rel) { Type = Dat16RelType.Unk08; @@ -21045,26 +21592,46 @@ namespace CodeWalker.GameFiles } public Dat16Unk08(RelData d, BinaryReader br) : base(d, br) { + Unk01 = br.ReadUInt32();//0 + Unk02 = br.ReadSingle(); + Unk03 = br.ReadSingle(); + + if (Unk01 != 0) + { } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffsetAndFlags(bw); - base.Write(bw); + WriteTypeAndOffsetAndFlags(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", FloatUtil.ToString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", FloatUtil.ToString(Unk03)); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = Xml.GetChildFloatAttribute(node, "Unk02", "value"); + Unk03 = Xml.GetChildFloatAttribute(node, "Unk03", "value"); } } [TC(typeof(EXP))] public class Dat16Unk09 : Dat16RelData { + public MetaHash Unk01 { get; set; }//0 + public float Unk02 { get; set; } + public float Unk03 { get; set; } + public Dat16Unk09(RelFile rel) : base(rel) { Type = Dat16RelType.Unk09; @@ -21072,26 +21639,50 @@ namespace CodeWalker.GameFiles } public Dat16Unk09(RelData d, BinaryReader br) : base(d, br) { + Unk01 = br.ReadUInt32();//0 + Unk02 = br.ReadSingle(); + Unk03 = br.ReadSingle(); + + if (Unk01 != 0) + { } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffsetAndFlags(bw); - base.Write(bw); + WriteTypeAndOffsetAndFlags(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", FloatUtil.ToString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", FloatUtil.ToString(Unk03)); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = Xml.GetChildFloatAttribute(node, "Unk02", "value"); + Unk03 = Xml.GetChildFloatAttribute(node, "Unk03", "value"); } } [TC(typeof(EXP))] public class Dat16Unk10 : Dat16RelData { + public float Unk01 { get; set; } + public float Unk02 { get; set; } + public float Unk03 { get; set; } + public float Unk04 { get; set; } + public float Unk05 { get; set; } + public float Unk06 { get; set; } + public float Unk07 { get; set; } + public Dat16Unk10(RelFile rel) : base(rel) { Type = Dat16RelType.Unk10; @@ -21099,26 +21690,59 @@ namespace CodeWalker.GameFiles } public Dat16Unk10(RelData d, BinaryReader br) : base(d, br) { + Unk01 = br.ReadSingle(); + Unk02 = br.ReadSingle(); + Unk03 = br.ReadSingle(); + Unk04 = br.ReadSingle(); + Unk05 = br.ReadSingle(); + Unk06 = br.ReadSingle(); + Unk07 = br.ReadSingle(); + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffsetAndFlags(bw); - base.Write(bw); + WriteTypeAndOffsetAndFlags(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.ValueTag(sb, indent, "Unk01", FloatUtil.ToString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", FloatUtil.ToString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", FloatUtil.ToString(Unk03)); + RelXml.ValueTag(sb, indent, "Unk04", FloatUtil.ToString(Unk04)); + RelXml.ValueTag(sb, indent, "Unk05", FloatUtil.ToString(Unk05)); + RelXml.ValueTag(sb, indent, "Unk06", FloatUtil.ToString(Unk06)); + RelXml.ValueTag(sb, indent, "Unk07", FloatUtil.ToString(Unk07)); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = Xml.GetChildFloatAttribute(node, "Unk01", "value"); + Unk02 = Xml.GetChildFloatAttribute(node, "Unk02", "value"); + Unk03 = Xml.GetChildFloatAttribute(node, "Unk03", "value"); + Unk04 = Xml.GetChildFloatAttribute(node, "Unk04", "value"); + Unk05 = Xml.GetChildFloatAttribute(node, "Unk05", "value"); + Unk06 = Xml.GetChildFloatAttribute(node, "Unk06", "value"); + Unk07 = Xml.GetChildFloatAttribute(node, "Unk07", "value"); } } [TC(typeof(EXP))] public class Dat16Unk12 : Dat16RelData { + public MetaHash Unk01 { get; set; }//0 + public float Unk02 { get; set; } + public float Unk03 { get; set; } + public Dat16Unk12(RelFile rel) : base(rel) { Type = Dat16RelType.Unk12; @@ -21126,26 +21750,45 @@ namespace CodeWalker.GameFiles } public Dat16Unk12(RelData d, BinaryReader br) : base(d, br) { + Unk01 = br.ReadUInt32();//0 + Unk02 = br.ReadSingle(); + Unk03 = br.ReadSingle(); + + if (Unk01 != 0) + { } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffsetAndFlags(bw); - base.Write(bw); + WriteTypeAndOffsetAndFlags(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", FloatUtil.ToString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", FloatUtil.ToString(Unk03)); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = Xml.GetChildFloatAttribute(node, "Unk02", "value"); + Unk03 = Xml.GetChildFloatAttribute(node, "Unk03", "value"); } } [TC(typeof(EXP))] public class Dat16Unk13 : Dat16RelData { + public MetaHash Unk01 { get; set; }//0 + public float Unk02 { get; set; } + public Dat16Unk13(RelFile rel) : base(rel) { Type = Dat16RelType.Unk13; @@ -21153,26 +21796,45 @@ namespace CodeWalker.GameFiles } public Dat16Unk13(RelData d, BinaryReader br) : base(d, br) { + Unk01 = br.ReadUInt32();//0 + Unk02 = br.ReadSingle(); + + if (Unk01 != 0) + { } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffsetAndFlags(bw); - base.Write(bw); + WriteTypeAndOffsetAndFlags(bw); + + bw.Write(Unk01); + bw.Write(Unk02); } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", FloatUtil.ToString(Unk02)); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = Xml.GetChildFloatAttribute(node, "Unk02", "value"); } } [TC(typeof(EXP))] public class Dat16Unk15 : Dat16RelData { + public MetaHash Unk01 { get; set; }//0 + public float Unk02 { get; set; } + public int Unk03 { get; set; }//3 (probably array count) + public MetaHash Unk04 { get; set; }//0 + public MetaHash Unk05 { get; set; }//0 + public MetaHash Unk06 { get; set; }//0 + public Dat16Unk15(RelFile rel) : base(rel) { Type = Dat16RelType.Unk15; @@ -21180,22 +21842,58 @@ namespace CodeWalker.GameFiles } public Dat16Unk15(RelData d, BinaryReader br) : base(d, br) { + Unk01 = br.ReadUInt32();//0 + Unk02 = br.ReadSingle(); + Unk03 = br.ReadInt32();//3 (probably array count) + Unk04 = br.ReadUInt32();//0 + Unk05 = br.ReadUInt32();//0 + Unk06 = br.ReadUInt32();//0 + + if (Unk01 != 0) + { } + if (Unk03 != 3) + { } + if (Unk04 != 0) + { } + if (Unk05 != 0) + { } + if (Unk06 != 0) + { } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffsetAndFlags(bw); - base.Write(bw); + WriteTypeAndOffsetAndFlags(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.StringTag(sb, indent, "Unk01", RelXml.HashString(Unk01)); + RelXml.ValueTag(sb, indent, "Unk02", FloatUtil.ToString(Unk02)); + RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); + RelXml.StringTag(sb, indent, "Unk04", RelXml.HashString(Unk04)); + RelXml.StringTag(sb, indent, "Unk05", RelXml.HashString(Unk05)); + RelXml.StringTag(sb, indent, "Unk06", RelXml.HashString(Unk06)); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk01")); + Unk02 = Xml.GetChildFloatAttribute(node, "Unk02", "value"); + Unk03 = Xml.GetChildIntAttribute(node, "Unk03", "value"); + Unk04 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk04")); + Unk05 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk05")); + Unk06 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk06")); } } @@ -21248,9 +21946,29 @@ namespace CodeWalker.GameFiles } } - //TODO [TC(typeof(EXP))] public class Dat22Unk0 : Dat22RelData { + public short Unk01 { get; set; } + public short Unk02 { get; set; } + public short Unk03 { get; set; } + public short Unk04 { get; set; } + public MetaHash Unk05 { get; set; }//1757063444 + public short Unk06 { get; set; } + public MetaHash Unk07 { get; set; }//741353067 + public short Unk08 { get; set; } + public short Unk09 { get; set; } + public short Unk10 { get; set; } + public short Unk11 { get; set; } + public short Unk12 { get; set; } + public short Unk13 { get; set; } + public short Unk14 { get; set; } + public short Unk15 { get; set; } + public short Unk16 { get; set; } + public short Unk17 { get; set; } + public byte Unk18 { get; set; } + public byte ItemCount { get; set; } + public MetaHash[] Items { get; set; } + public Dat22Unk0(RelFile rel) : base(rel) { Type = Dat22RelType.Unk0; @@ -21258,22 +21976,115 @@ namespace CodeWalker.GameFiles } public Dat22Unk0(RelData d, BinaryReader br) : base(d, br) { + Unk01 = br.ReadInt16(); + Unk02 = br.ReadInt16(); + Unk03 = br.ReadInt16(); + Unk04 = br.ReadInt16(); + Unk05 = br.ReadUInt32();//1757063444 + Unk06 = br.ReadInt16(); + Unk07 = br.ReadUInt32();//741353067 + Unk08 = br.ReadInt16(); + Unk09 = br.ReadInt16(); + Unk10 = br.ReadInt16(); + Unk11 = br.ReadInt16(); + Unk12 = br.ReadInt16(); + Unk13 = br.ReadInt16(); + Unk14 = br.ReadInt16(); + Unk15 = br.ReadInt16(); + Unk16 = br.ReadInt16(); + Unk17 = br.ReadInt16(); + Unk18 = br.ReadByte(); + ItemCount = br.ReadByte(); + Items = new MetaHash[ItemCount]; + for (int i = 0; i < ItemCount; i++) + { + Items[i] = br.ReadUInt32(); + } + + if (Unk05 != 1757063444) + { } + if (Unk07 != 741353067) + { } + var bytesleft = br.BaseStream.Length - br.BaseStream.Position; if (bytesleft != 0) { } } public override void Write(BinaryWriter bw) { - //WriteTypeAndOffsetAndFlags(bw); - base.Write(bw); + WriteTypeAndOffsetAndFlags(bw); + + bw.Write(Unk01); + bw.Write(Unk02); + bw.Write(Unk03); + bw.Write(Unk04); + bw.Write(Unk05); + bw.Write(Unk06); + bw.Write(Unk07); + bw.Write(Unk08); + bw.Write(Unk09); + bw.Write(Unk10); + bw.Write(Unk11); + bw.Write(Unk12); + bw.Write(Unk13); + bw.Write(Unk14); + bw.Write(Unk15); + bw.Write(Unk16); + bw.Write(Unk17); + bw.Write(Unk18); + bw.Write(ItemCount); + for (int i = 0; i < ItemCount; i++) + { + bw.Write(Items[i]); + } + } public override void WriteXml(StringBuilder sb, int indent) { - base.WriteXml(sb, indent); + RelXml.ValueTag(sb, indent, "Flags", "0x" + Flags.Hex); + RelXml.ValueTag(sb, indent, "Unk01", Unk01.ToString()); + RelXml.ValueTag(sb, indent, "Unk02", Unk02.ToString()); + RelXml.ValueTag(sb, indent, "Unk03", Unk03.ToString()); + RelXml.ValueTag(sb, indent, "Unk04", Unk04.ToString()); + RelXml.StringTag(sb, indent, "Unk05", RelXml.HashString(Unk05)); + RelXml.ValueTag(sb, indent, "Unk06", Unk06.ToString()); + RelXml.StringTag(sb, indent, "Unk07", RelXml.HashString(Unk07)); + RelXml.ValueTag(sb, indent, "Unk08", Unk08.ToString()); + RelXml.ValueTag(sb, indent, "Unk09", Unk09.ToString()); + RelXml.ValueTag(sb, indent, "Unk10", Unk10.ToString()); + RelXml.ValueTag(sb, indent, "Unk11", Unk11.ToString()); + RelXml.ValueTag(sb, indent, "Unk12", Unk12.ToString()); + RelXml.ValueTag(sb, indent, "Unk13", Unk13.ToString()); + RelXml.ValueTag(sb, indent, "Unk14", Unk14.ToString()); + RelXml.ValueTag(sb, indent, "Unk15", Unk15.ToString()); + RelXml.ValueTag(sb, indent, "Unk16", Unk16.ToString()); + RelXml.ValueTag(sb, indent, "Unk17", Unk17.ToString()); + RelXml.ValueTag(sb, indent, "Unk18", Unk18.ToString()); + RelXml.WriteHashItemArray(sb, Items, indent, "Items"); } public override void ReadXml(XmlNode node) { - base.ReadXml(node); + Flags = Xml.GetChildUIntAttribute(node, "Flags", "value"); + Unk01 = (short)Xml.GetChildIntAttribute(node, "Unk01", "value"); + Unk02 = (short)Xml.GetChildIntAttribute(node, "Unk02", "value"); + Unk03 = (short)Xml.GetChildIntAttribute(node, "Unk03", "value"); + Unk04 = (short)Xml.GetChildIntAttribute(node, "Unk04", "value"); + Unk05 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk05")); + Unk06 = (short)Xml.GetChildIntAttribute(node, "Unk06", "value"); + Unk07 = XmlRel.GetHash(Xml.GetChildInnerText(node, "Unk07")); + Unk08 = (short)Xml.GetChildIntAttribute(node, "Unk08", "value"); + Unk09 = (short)Xml.GetChildIntAttribute(node, "Unk09", "value"); + Unk10 = (short)Xml.GetChildIntAttribute(node, "Unk10", "value"); + Unk11 = (short)Xml.GetChildIntAttribute(node, "Unk11", "value"); + Unk12 = (short)Xml.GetChildIntAttribute(node, "Unk12", "value"); + Unk13 = (short)Xml.GetChildIntAttribute(node, "Unk13", "value"); + Unk14 = (short)Xml.GetChildIntAttribute(node, "Unk14", "value"); + Unk15 = (short)Xml.GetChildIntAttribute(node, "Unk15", "value"); + Unk16 = (short)Xml.GetChildIntAttribute(node, "Unk16", "value"); + Unk17 = (short)Xml.GetChildIntAttribute(node, "Unk17", "value"); + Unk18 = (byte)Xml.GetChildUIntAttribute(node, "Unk18", "value"); + Items = XmlRel.ReadHashItemArray(node, "Items"); + ItemCount = (byte)(Items?.Length ?? 0); } } From decc3dccb41a323b6e118ee72405b0b458644bf6 Mon Sep 17 00:00:00 2001 From: dexyfex Date: Wed, 13 Mar 2019 04:23:30 +1100 Subject: [PATCH 149/158] Fix for resources saving empty arrays --- .../GameFiles/Resources/ResourceBaseTypes.cs | 114 +++++++++++++----- 1 file changed, 84 insertions(+), 30 deletions(-) diff --git a/CodeWalker.Core/GameFiles/Resources/ResourceBaseTypes.cs b/CodeWalker.Core/GameFiles/Resources/ResourceBaseTypes.cs index 17ff40c..7ccb4d9 100644 --- a/CodeWalker.Core/GameFiles/Resources/ResourceBaseTypes.cs +++ b/CodeWalker.Core/GameFiles/Resources/ResourceBaseTypes.cs @@ -714,12 +714,18 @@ namespace CodeWalker.GameFiles public override IResourceBlock[] GetReferences() { var list = new List(); - //if (Entries != null) list.Add(Entries); - data_block = new ResourceSimpleArray(); - data_block.Data = new List(); - data_block.Data.AddRange(data_items); - list.Add(data_block); + if (data_items?.Length > 0) + { + data_block = new ResourceSimpleArray(); + data_block.Data = new List(); + data_block.Data.AddRange(data_items); + list.Add(data_block); + } + else + { + data_block = null; + } return list.ToArray(); } @@ -787,11 +793,17 @@ namespace CodeWalker.GameFiles public override IResourceBlock[] GetReferences() { var list = new List(); - //if (Entries != null) list.Add(Entries); - data_block = new ResourceSystemStructBlock(data_items); + if (data_items?.Length > 0) + { + data_block = new ResourceSystemStructBlock(data_items); - list.Add(data_block); + list.Add(data_block); + } + else + { + data_block = null; + } return list.ToArray(); } @@ -861,11 +873,17 @@ namespace CodeWalker.GameFiles public override IResourceBlock[] GetReferences() { var list = new List(); - //if (Entries != null) list.Add(Entries); - data_block = new ResourceSystemStructBlock(data_items); + if (data_items?.Length > 0) + { + data_block = new ResourceSystemStructBlock(data_items); - list.Add(data_block); + list.Add(data_block); + } + else + { + data_block = null; + } return list.ToArray(); } @@ -933,11 +951,17 @@ namespace CodeWalker.GameFiles public override IResourceBlock[] GetReferences() { var list = new List(); - //if (Entries != null) list.Add(Entries); - data_block = new ResourceSystemStructBlock(data_items); + if (data_items?.Length > 0) + { + data_block = new ResourceSystemStructBlock(data_items); - list.Add(data_block); + list.Add(data_block); + } + else + { + data_block = null; + } return list.ToArray(); } @@ -1005,11 +1029,17 @@ namespace CodeWalker.GameFiles public override IResourceBlock[] GetReferences() { var list = new List(); - //if (Entries != null) list.Add(Entries); - data_block = new ResourceSystemStructBlock(data_items); + if (data_items?.Length > 0) + { + data_block = new ResourceSystemStructBlock(data_items); - list.Add(data_block); + list.Add(data_block); + } + else + { + data_block = null; + } return list.ToArray(); } @@ -1077,11 +1107,17 @@ namespace CodeWalker.GameFiles public override IResourceBlock[] GetReferences() { var list = new List(); - //if (Entries != null) list.Add(Entries); - data_block = new ResourceSystemStructBlock(data_items); + if (data_items?.Length > 0) + { + data_block = new ResourceSystemStructBlock(data_items); - list.Add(data_block); + list.Add(data_block); + } + else + { + data_block = null; + } return list.ToArray(); } @@ -1149,11 +1185,17 @@ namespace CodeWalker.GameFiles public override IResourceBlock[] GetReferences() { var list = new List(); - //if (Entries != null) list.Add(Entries); - data_block = new ResourceSystemStructBlock(data_items); + if (data_items?.Length > 0) + { + data_block = new ResourceSystemStructBlock(data_items); - list.Add(data_block); + list.Add(data_block); + } + else + { + data_block = null; + } return list.ToArray(); } @@ -1221,11 +1263,17 @@ namespace CodeWalker.GameFiles public override IResourceBlock[] GetReferences() { var list = new List(); - //if (Entries != null) list.Add(Entries); - data_block = new ResourceSystemStructBlock(data_items); + if (data_items?.Length > 0) + { + data_block = new ResourceSystemStructBlock(data_items); - list.Add(data_block); + list.Add(data_block); + } + else + { + data_block = null; + } return list.ToArray(); } @@ -1642,10 +1690,16 @@ namespace CodeWalker.GameFiles { var list = new List(); - //if (Entries != null) list.Add(Entries); - data_block = new ResourcePointerArray64(); - data_block.data_items = data_items; - list.Add(data_block); + if (data_items?.Length > 0) + { + data_block = new ResourcePointerArray64(); + data_block.data_items = data_items; + list.Add(data_block); + } + else + { + data_block = null; + } return list.ToArray(); } From bc1efebe5c5dfa292a4b1fd84608c109ffe6380f Mon Sep 17 00:00:00 2001 From: dexy Date: Wed, 20 Mar 2019 21:21:47 +1100 Subject: [PATCH 150/158] FBX importer v1, fix for YNDs DLC loading, fix for renamed NG encrypted RPFs, RelFile MetaNames addition --- CodeWalker.Core/CodeWalker.Core.csproj | 2 + .../GameFiles/FileTypes/RelFile.cs | 2 +- CodeWalker.Core/GameFiles/GameFileCache.cs | 152 +- .../GameFiles/MetaTypes/MetaNames.cs | 1 + CodeWalker.Core/GameFiles/Resources/Bounds.cs | 3 +- .../GameFiles/Resources/Drawable.cs | 99 +- .../GameFiles/Resources/ResourceBaseTypes.cs | 2 +- CodeWalker.Core/GameFiles/RpfManager.cs | 7 +- CodeWalker.Core/Utils/Fbx.cs | 1877 +++++++++++++++++ CodeWalker.Core/Utils/FbxConverter.cs | 1010 +++++++++ CodeWalker.Core/World/Space.cs | 1 + CodeWalker.csproj | 9 + ExploreForm.Designer.cs | 43 +- ExploreForm.cs | 113 +- ExploreForm.resx | 2 +- Notice.txt | 19 +- Rendering/Renderable.cs | 16 +- Rendering/Renderer.cs | 2 +- Rendering/ShaderManager.cs | 2 +- Shaders/Common.hlsli | 10 +- Tools/ImportFbxForm.Designer.cs | 145 ++ Tools/ImportFbxForm.cs | 133 ++ Tools/ImportFbxForm.resx | 409 ++++ 23 files changed, 3876 insertions(+), 183 deletions(-) create mode 100644 CodeWalker.Core/Utils/Fbx.cs create mode 100644 CodeWalker.Core/Utils/FbxConverter.cs create mode 100644 Tools/ImportFbxForm.Designer.cs create mode 100644 Tools/ImportFbxForm.cs create mode 100644 Tools/ImportFbxForm.resx diff --git a/CodeWalker.Core/CodeWalker.Core.csproj b/CodeWalker.Core/CodeWalker.Core.csproj index 85c1a62..949c009 100644 --- a/CodeWalker.Core/CodeWalker.Core.csproj +++ b/CodeWalker.Core/CodeWalker.Core.csproj @@ -123,6 +123,8 @@ + + diff --git a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs index 37a79c3..92752cc 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/RelFile.cs @@ -4932,7 +4932,7 @@ namespace CodeWalker.GameFiles VehicleEngine = 4, Entity = 5, //not sure about this StaticEmitter = 6,//radio emitter? - Prop = 7,//prop? eg. fan, radar + Prop = 7,//prop? entity emitter? eg. fan, radar Helicopter = 8, Unk9 = 9, Unk11 = 11, //contains reference to Unk12 diff --git a/CodeWalker.Core/GameFiles/GameFileCache.cs b/CodeWalker.Core/GameFiles/GameFileCache.cs index cfbaa9e..2c92b80 100644 --- a/CodeWalker.Core/GameFiles/GameFileCache.cs +++ b/CodeWalker.Core/GameFiles/GameFileCache.cs @@ -1014,33 +1014,41 @@ namespace CodeWalker.GameFiles //} if (entry.Name.EndsWith(".ymf"))// || entry.Name.EndsWith(".ymt")) { - UpdateStatus(string.Format(entry.Path)); - YmfFile ymffile = RpfMan.GetFile(entry); - if (ymffile != null) + try { - AllManifests.Add(ymffile); - - if (ymffile.Pso != null) - { } - else if (ymffile.Rbf != null) - { } - else if (ymffile.Meta != null) - { } - else - { } - - - if (ymffile.HDTxdAssetBindings != null) + UpdateStatus(string.Format(entry.Path)); + YmfFile ymffile = RpfMan.GetFile(entry); + if (ymffile != null) { - for (int i = 0; i < ymffile.HDTxdAssetBindings.Length; i++) - { - var b = ymffile.HDTxdAssetBindings[i]; - var targetasset = JenkHash.GenHash(b.targetAsset.ToString().ToLowerInvariant()); - var hdtxd = JenkHash.GenHash(b.HDTxd.ToString().ToLowerInvariant()); - hdtexturelookup[targetasset] = hdtxd; - } - } + AllManifests.Add(ymffile); + if (ymffile.Pso != null) + { } + else if (ymffile.Rbf != null) + { } + else if (ymffile.Meta != null) + { } + else + { } + + + if (ymffile.HDTxdAssetBindings != null) + { + for (int i = 0; i < ymffile.HDTxdAssetBindings.Length; i++) + { + var b = ymffile.HDTxdAssetBindings[i]; + var targetasset = JenkHash.GenHash(b.targetAsset.ToString().ToLowerInvariant()); + var hdtxd = JenkHash.GenHash(b.HDTxd.ToString().ToLowerInvariant()); + hdtexturelookup[targetasset] = hdtxd; + } + } + + } + } + catch (Exception ex) + { + string errstr = entry.Path + "\n" + ex.ToString(); + ErrorLog(errstr); } } @@ -2363,9 +2371,6 @@ namespace CodeWalker.GameFiles { UpdateStatus("Testing Audio REL files"); - StringBuilder sb = new StringBuilder(); - StringBuilder sbh = new StringBuilder(); - StringBuilder sbi = new StringBuilder(); bool savetest = true; bool xmltest = true; @@ -2386,82 +2391,6 @@ namespace CodeWalker.GameFiles RpfMan.LoadFile(rel, rfe); - #region string building - - if (rel.NameTable == null) - { - sb.AppendLine(rfe.Path + ": no strings found"); - } - else - { - sb.AppendLine(rfe.Path + ": " + rel.NameTable.Length.ToString() + " strings found:"); - foreach (string str in rel.NameTable) - { - sb.AppendLine(str); - } - } - if (rel.IndexStrings != null) - { - sb.AppendLine("Config-specific:"); - foreach (var unk in rel.IndexStrings) - { - sb.AppendLine(unk.ToString()); - } - } - if (rel.IndexHashes != null) - { - sbh.AppendLine(rfe.Path + ": " + rel.IndexHashes.Length.ToString() + " entries:"); - foreach (var unk in rel.IndexHashes) - { - sbh.Append(unk.Name.Hash.ToString("X8")); - string strval; - if (JenkIndex.Index.TryGetValue(unk.Name, out strval)) - { - sbh.Append(" - "); - sbh.Append(strval); - } - sbh.AppendLine(); - //sbh.AppendLine(unk.ToString()); - } - sbh.AppendLine(); - } - if (rel.HashTable != null) - { - sbh.AppendLine(rfe.Path + ": " + rel.HashTable.Length.ToString() + " Hashes1:"); - foreach (var unk in rel.HashTable) - { - sbh.Append(unk.Hash.ToString("X8")); - string strval; - if (JenkIndex.Index.TryGetValue(unk, out strval)) - { - sbh.Append(" - "); - sbh.Append(strval); - } - sbh.AppendLine(); - } - sbh.AppendLine(); - } - if (rel.PackTable != null) - { - sbh.AppendLine(rfe.Path + ": " + rel.PackTable.Length.ToString() + " Hashes2:"); - foreach (var unk in rel.PackTable) - { - sbh.Append(unk.Hash.ToString("X8")); - string strval; - if (JenkIndex.Index.TryGetValue(unk, out strval)) - { - sbh.Append(" - "); - sbh.Append(strval); - } - sbh.AppendLine(); - } - sbh.AppendLine(); - } - - sb.AppendLine(); - - #endregion - byte[] data; @@ -2540,29 +2469,12 @@ namespace CodeWalker.GameFiles } - //sbi.Clear(); - //foreach (var rd in rel.RelDatas) - //{ - // sbi.AppendLine(new FlagsUint(rd.NameHash).Bin); - //} - //string indexbinstr = sbi.ToString(); - } } } - //int ctot = Dat151RelData.TotCount; - //StringBuilder sbp = new StringBuilder(); - //foreach (string s in Dat151RelData.FoundCoords) - //{ - // sbp.AppendLine(s); - //} - //string posz = sbp.ToString(); - - string relstrs = sb.ToString(); - string hashstrs = sbh.ToString(); var hashmap = RelFile.HashesMap; diff --git a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs index 068f467..7f5c4d1 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/MetaNames.cs @@ -3475,6 +3475,7 @@ namespace CodeWalker.GameFiles silence = 3503773450, //used in game.dat151.rel null_sound = 3817852694, //used in game.dat151.rel + constant_one = 3454258691, //used in dat .rels run = 285848937, //used in game.dat151.rel cop_dispatch_interaction_settings = 778268174, //used in game.dat151.rel diff --git a/CodeWalker.Core/GameFiles/Resources/Bounds.cs b/CodeWalker.Core/GameFiles/Resources/Bounds.cs index 4bf87ca..ed50602 100644 --- a/CodeWalker.Core/GameFiles/Resources/Bounds.cs +++ b/CodeWalker.Core/GameFiles/Resources/Bounds.cs @@ -775,8 +775,7 @@ namespace CodeWalker.GameFiles } } - [TC(typeof(EXP))] - public struct BoundMaterial_s + [TC(typeof(EXP))] public struct BoundMaterial_s { public uint Data1; diff --git a/CodeWalker.Core/GameFiles/Resources/Drawable.cs b/CodeWalker.Core/GameFiles/Resources/Drawable.cs index 49d9848..5555030 100644 --- a/CodeWalker.Core/GameFiles/Resources/Drawable.cs +++ b/CodeWalker.Core/GameFiles/Resources/Drawable.cs @@ -122,13 +122,14 @@ namespace CodeWalker.GameFiles public MetaHash Name { get; set; } //530103687, 2401522793, 1912906641 public uint Unknown_Ch { get; set; } // 0x00000000 public byte ParameterCount { get; set; } - public byte Unknown_11h { get; set; } // 2, 0, - public ushort Unknown_12h { get; set; } // 32768 - public uint Unknown_14h { get; set; } //10485872, 17826000, 26214720 + public byte RenderBucket { get; set; } // 2, 0, + public ushort Unknown_12h { get; set; } // 32768 HasComment? + public ushort ParameterSize { get; set; } //112, 208, 320 (with 16h) 10485872, 17826000, 26214720 + public ushort ParameterDataSize { get; set; } //160, 272, 400 public MetaHash FileName { get; set; } //2918136469, 2635608835, 2247429097 public uint Unknown_1Ch { get; set; } // 0x00000000 - public uint Unknown_20h { get; set; } //65284, 65281 - public ushort Unknown_24h { get; set; } //0 + public uint RenderBucketMask { get; set; } //65284, 65281 DrawBucketMask? (1< Geometries { get; set; } @@ -1116,8 +1146,10 @@ namespace CodeWalker.GameFiles this.Unknown_14h = reader.ReadUInt32(); this.BoundsPointer = reader.ReadUInt64(); this.ShaderMappingPointer = reader.ReadUInt64(); - this.Unknown_28h = reader.ReadUInt32(); - this.Unknown_2Ch = reader.ReadUInt32(); + this.SkeletonBinding = reader.ReadUInt32(); + this.RenderMaskFlags = reader.ReadUInt16(); + this.GeometriesCount3 = reader.ReadUInt16(); + // read reference data this.Geometries = reader.ReadBlockAt>( @@ -1138,6 +1170,7 @@ namespace CodeWalker.GameFiles this.GeometriesPointer = (ulong)(this.Geometries != null ? this.Geometries.FilePosition : 0); this.GeometriesCount1 = (ushort)(this.Geometries != null ? this.Geometries.Count : 0); this.GeometriesCount2 = this.GeometriesCount1;//is this correct? + this.GeometriesCount3 = this.GeometriesCount1;//is this correct? this.BoundsPointer = (ulong)(this.BoundsDataBlock != null ? this.BoundsDataBlock.FilePosition : 0); this.ShaderMappingPointer = (ulong)(this.ShaderMappingBlock != null ? this.ShaderMappingBlock.FilePosition : 0); @@ -1151,8 +1184,9 @@ namespace CodeWalker.GameFiles writer.Write(this.Unknown_14h); writer.Write(this.BoundsPointer); writer.Write(this.ShaderMappingPointer); - writer.Write(this.Unknown_28h); - writer.Write(this.Unknown_2Ch); + writer.Write(this.SkeletonBinding); + writer.Write(this.RenderMaskFlags); + writer.Write(this.GeometriesCount3); } /// @@ -2137,16 +2171,17 @@ namespace CodeWalker.GameFiles public ulong DrawableModelsMediumPointer { get; set; } public ulong DrawableModelsLowPointer { get; set; } public ulong DrawableModelsVeryLowPointer { get; set; } - public float LodGroupHigh { get; set; } - public float LodGroupMed { get; set; } - public float LodGroupLow { get; set; } - public float LodGroupVlow { get; set; } + public float LodDistHigh { get; set; } + public float LodDistMed { get; set; } + public float LodDistLow { get; set; } + public float LodDistVlow { get; set; } public uint Unknown_80h { get; set; } public uint Unknown_84h { get; set; } public uint Unknown_88h { get; set; } public uint Unknown_8Ch { get; set; } public ulong JointsPointer { get; set; } - public uint Unknown_98h { get; set; } + public ushort Unknown_98h { get; set; } + public ushort Unknown_9Ah { get; set; } public uint Unknown_9Ch { get; set; } // 0x00000000 public ulong DrawableModelsXPointer { get; set; } @@ -2207,16 +2242,17 @@ namespace CodeWalker.GameFiles this.DrawableModelsMediumPointer = reader.ReadUInt64(); this.DrawableModelsLowPointer = reader.ReadUInt64(); this.DrawableModelsVeryLowPointer = reader.ReadUInt64(); - this.LodGroupHigh = reader.ReadSingle(); - this.LodGroupMed = reader.ReadSingle(); - this.LodGroupLow = reader.ReadSingle(); - this.LodGroupVlow = reader.ReadSingle(); + this.LodDistHigh = reader.ReadSingle(); + this.LodDistMed = reader.ReadSingle(); + this.LodDistLow = reader.ReadSingle(); + this.LodDistVlow = reader.ReadSingle(); this.Unknown_80h = reader.ReadUInt32(); this.Unknown_84h = reader.ReadUInt32(); this.Unknown_88h = reader.ReadUInt32(); this.Unknown_8Ch = reader.ReadUInt32(); this.JointsPointer = reader.ReadUInt64(); - this.Unknown_98h = reader.ReadUInt32(); + this.Unknown_98h = reader.ReadUInt16(); + this.Unknown_9Ah = reader.ReadUInt16(); this.Unknown_9Ch = reader.ReadUInt32(); this.DrawableModelsXPointer = reader.ReadUInt64(); @@ -2345,16 +2381,17 @@ namespace CodeWalker.GameFiles writer.Write(this.DrawableModelsMediumPointer); writer.Write(this.DrawableModelsLowPointer); writer.Write(this.DrawableModelsVeryLowPointer); - writer.Write(this.LodGroupHigh); - writer.Write(this.LodGroupMed); - writer.Write(this.LodGroupLow); - writer.Write(this.LodGroupVlow); + writer.Write(this.LodDistHigh); + writer.Write(this.LodDistMed); + writer.Write(this.LodDistLow); + writer.Write(this.LodDistVlow); writer.Write(this.Unknown_80h); writer.Write(this.Unknown_84h); writer.Write(this.Unknown_88h); writer.Write(this.Unknown_8Ch); writer.Write(this.JointsPointer); writer.Write(this.Unknown_98h); + writer.Write(this.Unknown_9Ah); writer.Write(this.Unknown_9Ch); writer.Write(this.DrawableModelsXPointer); } diff --git a/CodeWalker.Core/GameFiles/Resources/ResourceBaseTypes.cs b/CodeWalker.Core/GameFiles/Resources/ResourceBaseTypes.cs index 7ccb4d9..f433fc9 100644 --- a/CodeWalker.Core/GameFiles/Resources/ResourceBaseTypes.cs +++ b/CodeWalker.Core/GameFiles/Resources/ResourceBaseTypes.cs @@ -1644,7 +1644,7 @@ namespace CodeWalker.GameFiles //public ResourcePointerArray64 Entries; public ulong[] data_pointers { get; private set; } - public T[] data_items { get; private set; } + public T[] data_items { get; set; } private ResourcePointerArray64 data_block;//used for saving. diff --git a/CodeWalker.Core/GameFiles/RpfManager.cs b/CodeWalker.Core/GameFiles/RpfManager.cs index be8686f..c437013 100644 --- a/CodeWalker.Core/GameFiles/RpfManager.cs +++ b/CodeWalker.Core/GameFiles/RpfManager.cs @@ -74,6 +74,11 @@ namespace CodeWalker.GameFiles rf.ScanStructure(updateStatus, errorLog); + if (rf.LastException != null) //incase of corrupted rpf (or renamed NG encrypted RPF) + { + continue; + } + AddRpfFile(rf, false, false); } catch (Exception ex) @@ -384,7 +389,7 @@ namespace CodeWalker.GameFiles } if (BuildExtendedJenkIndex) { - if (nlow.EndsWith(".ydr") || nlow.EndsWith(".yft")) + if (nlow.EndsWith(".ydr"))// || nlow.EndsWith(".yft")) //do yft's get lods? { var sname = nlow.Substring(0, nlow.Length - 4); JenkIndex.Ensure(sname + "_lod"); diff --git a/CodeWalker.Core/Utils/Fbx.cs b/CodeWalker.Core/Utils/Fbx.cs new file mode 100644 index 0000000..75bacb4 --- /dev/null +++ b/CodeWalker.Core/Utils/Fbx.cs @@ -0,0 +1,1877 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Runtime.InteropServices; +using System.Text; +using System.Text.RegularExpressions; + +/* + Shamelessly stolen and mangled from: + https://github.com/hamish-milne/FbxWriter + Under GPL license, for full terms see the above link. + + Copyright (c) 2015 Hamish Milne + + "An FBX library for .NET" +*/ + + +namespace CodeWalker +{ + + /// + /// Static read and write methods + /// + public static class FbxIO + { + + /// + /// Read binary or ASCII FBX from memory. Decides which based on the header. + /// (This method added by dexyfex) + /// + /// FBX byte array. + /// + public static FbxDocument Read(byte[] data) + { + using (var stream = new MemoryStream(data)) + { + var isbinary = FbxBinary.IsBinary(stream); + if (isbinary) + { + var reader = new FbxBinaryReader(stream); + return reader.Read(); + } + else //try ASCII + { + var reader = new FbxAsciiReader(stream); + return reader.Read(); + } + } + } + + + /// + /// Reads a binary FBX file + /// + /// + /// The top level document node + public static FbxDocument ReadBinary(string path) + { + if (path == null) + throw new ArgumentNullException(nameof(path)); + using (var stream = new FileStream(path, FileMode.Open)) + { + var reader = new FbxBinaryReader(stream); + return reader.Read(); + } + } + + /// + /// Reads an ASCII FBX file + /// + /// + /// The top level document node + public static FbxDocument ReadAscii(string path) + { + if (path == null) + throw new ArgumentNullException(nameof(path)); + using (var stream = new FileStream(path, FileMode.Open)) + { + var reader = new FbxAsciiReader(stream); + return reader.Read(); + } + } + + /// + /// Writes an FBX document + /// + /// The top level document node + /// + public static void WriteBinary(FbxDocument document, string path) + { + if (path == null) + throw new ArgumentNullException(nameof(path)); + using (var stream = new FileStream(path, FileMode.Create)) + { + var writer = new FbxBinaryWriter(stream); + writer.Write(document); + } + } + + /// + /// Writes an FBX document + /// + /// The top level document node + /// + public static void WriteAscii(FbxDocument document, string path) + { + if (path == null) + throw new ArgumentNullException(nameof(path)); + using (var stream = new FileStream(path, FileMode.Create)) + { + var writer = new FbxAsciiWriter(stream); + writer.Write(document); + } + } + } + + + + + /// + /// Reads FBX nodes from a text stream + /// + public class FbxAsciiReader + { + private readonly Stream stream; + private readonly FbxErrorLevel errorLevel; + + private int line = 1; + private int column = 1; + + /// + /// Creates a new reader + /// + /// + /// + public FbxAsciiReader(Stream stream, FbxErrorLevel errorLevel = FbxErrorLevel.Checked) + { + if (stream == null) + throw new ArgumentNullException(nameof(stream)); + this.stream = stream; + this.errorLevel = errorLevel; + } + + /// + /// The maximum array size that will be allocated + /// + /// + /// If you trust the source, you can expand this value as necessary. + /// Malformed files could cause large amounts of memory to be allocated + /// and slow or crash the system as a result. + /// + public int MaxArrayLength { get; set; } = (1 << 24); + + // We read bytes a lot, so we should make a more efficient method here + // (The normal one makes a new byte array each time) + + readonly byte[] singleChar = new byte[1]; + private char? prevChar; + private bool endStream; + private bool wasCr; + + // Reads a char, allows peeking and checks for end of stream + char ReadChar() + { + if (prevChar != null) + { + var c = prevChar.Value; + prevChar = null; + return c; + } + if (stream.Read(singleChar, 0, 1) < 1) + { + endStream = true; + return '\0'; + } + var ch = (char)singleChar[0]; + // Handle line and column numbers here; + // This isn't terribly accurate, but good enough for diagnostics + if (ch == '\r') + { + wasCr = true; + line++; + column = 0; + } + else + { + if (ch == '\n' && !wasCr) + { + line++; + column = 0; + } + wasCr = false; + } + column++; + return ch; + } + + // Checks if a character is valid in a real number + static bool IsDigit(char c, bool first) + { + if (char.IsDigit(c)) + return true; + switch (c) + { + case '-': + case '+': + return true; + case '.': + case 'e': + case 'E': + case 'X': + case 'x': + return !first; + } + return false; + } + + static bool IsLineEnd(char c) + { + return c == '\r' || c == '\n'; + } + + // Token to mark the end of the stream + class EndOfStream + { + public override string ToString() + { + return "end of stream"; + } + } + + // Wrapper around a string to mark it as an identifier + // (as opposed to a string literal) + class Identifier + { + public readonly string String; + + public override bool Equals(object obj) + { + var id = obj as Identifier; + if (id != null) + return String == id.String; + return false; + } + + public override int GetHashCode() + { + return String?.GetHashCode() ?? 0; + } + + public Identifier(string str) + { + String = str; + } + + public override string ToString() + { + return String + ":"; + } + } + + private object prevTokenSingle; + + // Reads a single token, allows peeking + // Can return 'null' for a comment or whitespace + object ReadTokenSingle() + { + if (prevTokenSingle != null) + { + var ret = prevTokenSingle; + prevTokenSingle = null; + return ret; + } + var c = ReadChar(); + if (endStream) + return new EndOfStream(); + switch (c) + { + case ';': // Comments + while (!IsLineEnd(ReadChar()) && !endStream) { } // Skip a line + return null; + case '{': // Operators + case '}': + case '*': + case ':': + case ',': + return c; + case '"': // String literal + var sb1 = new StringBuilder(); + while ((c = ReadChar()) != '"') + { + if (endStream) + throw new FbxException(line, column, + "Unexpected end of stream; expecting end quote"); + sb1.Append(c); + } + return sb1.ToString(); + default: + if (char.IsWhiteSpace(c)) + { + // Merge whitespace + while (char.IsWhiteSpace(c = ReadChar()) && !endStream) { } + if (!endStream) + prevChar = c; + return null; + } + if (IsDigit(c, true)) // Number + { + var sb2 = new StringBuilder(); + do + { + sb2.Append(c); + c = ReadChar(); + } while (IsDigit(c, false) && !endStream); + if (!endStream) + prevChar = c; + var str = sb2.ToString(); + if (str.Contains(".")) + { + if (str.Split('.', 'e', 'E')[1].Length > 6) + { + double d; + if (!double.TryParse(str, out d)) + throw new FbxException(line, column, + "Invalid number"); + return d; + } + else + { + float f; + if (!float.TryParse(str, out f)) + throw new FbxException(line, column, + "Invalid number"); + return f; + } + } + long l; + if (!long.TryParse(str, out l)) + throw new FbxException(line, column, + "Invalid integer"); + // Check size and return the smallest possible + if (l >= byte.MinValue && l <= byte.MaxValue) + return (byte)l; + if (l >= int.MinValue && l <= int.MaxValue) + return (int)l; + return l; + } + if (char.IsLetter(c) || c == '_') // Identifier + { + var sb3 = new StringBuilder(); + do + { + sb3.Append(c); + c = ReadChar(); + } while ((char.IsLetterOrDigit(c) || c == '_') && !endStream); + if (!endStream) + prevChar = c; + return new Identifier(sb3.ToString()); + } + break; + } + throw new FbxException(line, column, + "Unknown character " + c); + } + + private object prevToken; + + // Use a loop rather than recursion to prevent stack overflow + // Here we can also merge string+colon into an identifier, + // returning single-character bare strings (for C-type properties) + object ReadToken() + { + object ret; + if (prevToken != null) + { + ret = prevToken; + prevToken = null; + return ret; + } + do + { + ret = ReadTokenSingle(); + } while (ret == null); + var id = ret as Identifier; + if (id != null) + { + object colon; + do + { + colon = ReadTokenSingle(); + } while (colon == null); + if (!':'.Equals(colon)) + { + if (id.String.Length > 1) + throw new FbxException(line, column, + "Unexpected '" + colon + "', expected ':' or a single-char literal"); + ret = id.String[0]; + prevTokenSingle = colon; + } + } + return ret; + } + + void ExpectToken(object token) + { + var t = ReadToken(); + if (!token.Equals(t)) + throw new FbxException(line, column, + "Unexpected '" + t + "', expected " + token); + } + + private enum ArrayType + { + Byte = 0, + Int = 1, + Long = 2, + Float = 3, + Double = 4, + }; + + Array ReadArray() + { + // Read array length and header + var len = ReadToken(); + long l; + if (len is long) + l = (long)len; + else if (len is int) + l = (int)len; + else if (len is byte) + l = (byte)len; + else + throw new FbxException(line, column, + "Unexpected '" + len + "', expected an integer"); + if (l < 0) + throw new FbxException(line, column, + "Invalid array length " + l); + if (l > MaxArrayLength) + throw new FbxException(line, column, + "Array length " + l + " higher than permitted maximum " + MaxArrayLength); + ExpectToken('{'); + ExpectToken(new Identifier("a")); + var array = new double[l]; + + // Read array elements + bool expectComma = false; + object token; + var arrayType = ArrayType.Byte; + long pos = 0; + while (!'}'.Equals(token = ReadToken())) + { + if (expectComma) + { + if (!','.Equals(token)) + throw new FbxException(line, column, + "Unexpected '" + token + "', expected ','"); + expectComma = false; + continue; + } + if (pos >= array.Length) + { + if (errorLevel >= FbxErrorLevel.Checked) + throw new FbxException(line, column, + "Too many elements in array"); + continue; + } + + // Add element to the array, checking for the maximum + // size of any one element. + // (I'm not sure if this is the 'correct' way to do it, but it's the only + // logical one given the nature of the ASCII format) + double d; + if (token is byte) + { + d = (byte)token; + } + else if (token is int) + { + d = (int)token; + if (arrayType < ArrayType.Int) + arrayType = ArrayType.Int; + } + else if (token is long) + { + d = (long)token; + if (arrayType < ArrayType.Long) + arrayType = ArrayType.Long; + } + else if (token is float) + { + d = (float)token; + // A long can't be accurately represented by a float + arrayType = arrayType < ArrayType.Long + ? ArrayType.Float : ArrayType.Double; + } + else if (token is double) + { + d = (double)token; + if (arrayType < ArrayType.Double) + arrayType = ArrayType.Double; + } + else + throw new FbxException(line, column, + "Unexpected '" + token + "', expected a number"); + array[pos++] = d; + expectComma = true; + } + if (pos < array.Length && errorLevel >= FbxErrorLevel.Checked) + throw new FbxException(line, column, + "Too few elements in array - expected " + (array.Length - pos) + " more"); + + // Convert the array to the smallest type we can see + Array ret; + switch (arrayType) + { + case ArrayType.Byte: + var bArray = new byte[array.Length]; + for (int i = 0; i < bArray.Length; i++) + bArray[i] = (byte)array[i]; + ret = bArray; + break; + case ArrayType.Int: + var iArray = new int[array.Length]; + for (int i = 0; i < iArray.Length; i++) + iArray[i] = (int)array[i]; + ret = iArray; + break; + case ArrayType.Long: + var lArray = new long[array.Length]; + for (int i = 0; i < lArray.Length; i++) + lArray[i] = (long)array[i]; + ret = lArray; + break; + case ArrayType.Float: + var fArray = new float[array.Length]; + for (int i = 0; i < fArray.Length; i++) + fArray[i] = (long)array[i]; + ret = fArray; + break; + default: + ret = array; + break; + } + return ret; + } + + /// + /// Reads the next node from the stream + /// + /// The read node, or null + public FbxNode ReadNode() + { + var first = ReadToken(); + var id = first as Identifier; + if (id == null) + { + if (first is EndOfStream) + return null; + throw new FbxException(line, column, + "Unexpected '" + first + "', expected an identifier"); + } + var node = new FbxNode { Name = id.String }; + + // Read properties + object token; + bool expectComma = false; + while (!'{'.Equals(token = ReadToken()) && !(token is Identifier) && !'}'.Equals(token)) + { + if (expectComma) + { + if (!','.Equals(token)) + throw new FbxException(line, column, + "Unexpected '" + token + "', expected a ','"); + expectComma = false; + continue; + } + if (token is char) + { + var c = (char)token; + switch (c) + { + case '*': + token = ReadArray(); + break; + case '}': + case ':': + case ',': + throw new FbxException(line, column, + "Unexpected '" + c + "' in property list"); + } + } + node.Properties.Add(token); + expectComma = true; // The final comma before the open brace isn't required + } + // TODO: Merge property list into an array as necessary + // Now we're either at an open brace, close brace or a new node + if (token is Identifier || '}'.Equals(token)) + { + prevToken = token; + return node; + } + // The while loop can't end unless we're at an open brace, so we can continue right on + object endBrace; + while (!'}'.Equals(endBrace = ReadToken())) + { + prevToken = endBrace; // If it's not an end brace, the next node will need it + node.Nodes.Add(ReadNode()); + } + if (node.Nodes.Count < 1) // If there's an open brace, we want that to be preserved + node.Nodes.Add(null); + return node; + } + + /// + /// Reads a full document from the stream + /// + /// The complete document object + public FbxDocument Read() + { + var ret = new FbxDocument(); + + // Read version string + const string versionString = @"; FBX (\d)\.(\d)\.(\d) project file"; + char c; + while (char.IsWhiteSpace(c = ReadChar()) && !endStream) { } // Skip whitespace + bool hasVersionString = false; + if (c == ';') + { + var sb = new StringBuilder(); + do + { + sb.Append(c); + } while (!IsLineEnd(c = ReadChar()) && !endStream); + var match = Regex.Match(sb.ToString(), versionString); + hasVersionString = match.Success; + if (hasVersionString) + ret.Version = (FbxVersion)( + int.Parse(match.Groups[1].Value) * 1000 + + int.Parse(match.Groups[2].Value) * 100 + + int.Parse(match.Groups[3].Value) * 10 + ); + } + if (!hasVersionString && errorLevel >= FbxErrorLevel.Strict) + throw new FbxException(line, column, + "Invalid version string; first line must match \"" + versionString + "\""); + FbxNode node; + while ((node = ReadNode()) != null) + ret.Nodes.Add(node); + return ret; + } + } + + /// + /// Writes an FBX document in a text format + /// + public class FbxAsciiWriter + { + private readonly Stream stream; + + /// + /// Creates a new reader + /// + /// + public FbxAsciiWriter(Stream stream) + { + if (stream == null) + throw new ArgumentNullException(nameof(stream)); + this.stream = stream; + } + + /// + /// The maximum line length in characters when outputting arrays + /// + /// + /// Lines might end up being a few characters longer than this, visibly and otherwise, + /// so don't rely on it as a hard limit in code! + /// + public int MaxLineLength { get; set; } = 260; + + readonly Stack nodePath = new Stack(); + + // Adds the given node text to the string + void BuildString(FbxNode node, StringBuilder sb, bool writeArrayLength, int indentLevel = 0) + { + nodePath.Push(node.Name ?? ""); + int lineStart = sb.Length; + // Write identifier + for (int i = 0; i < indentLevel; i++) + sb.Append('\t'); + sb.Append(node.Name).Append(':'); + + // Write properties + var first = true; + for (int j = 0; j < node.Properties.Count; j++) + { + var p = node.Properties[j]; + if (p == null) + continue; + if (!first) + sb.Append(','); + sb.Append(' '); + if (p is string) + { + sb.Append('"').Append(p).Append('"'); + } + else if (p is Array) + { + var array = (Array)p; + var elementType = p.GetType().GetElementType(); + // ReSharper disable once PossibleNullReferenceException + // We know it's an array, so we don't need to check for null + if (array.Rank != 1 || !elementType.IsPrimitive) + throw new FbxException(nodePath, j, + "Invalid array type " + p.GetType()); + if (writeArrayLength) + { + sb.Append('*').Append(array.Length).Append(" {\n"); + lineStart = sb.Length; + for (int i = -1; i < indentLevel; i++) + sb.Append('\t'); + sb.Append("a: "); + } + bool pFirst = true; + foreach (var v in (Array)p) + { + if (!pFirst) + sb.Append(','); + var vstr = v.ToString(); + if ((sb.Length - lineStart) + vstr.Length >= MaxLineLength) + { + sb.Append('\n'); + lineStart = sb.Length; + } + sb.Append(vstr); + pFirst = false; + } + if (writeArrayLength) + { + sb.Append('\n'); + for (int i = 0; i < indentLevel; i++) + sb.Append('\t'); + sb.Append('}'); + } + } + else if (p is char) + sb.Append((char)p); + else if (p.GetType().IsPrimitive && p is IFormattable) + sb.Append(p); + else + throw new FbxException(nodePath, j, + "Invalid property type " + p.GetType()); + first = false; + } + + // Write child nodes + if (node.Nodes.Count > 0) + { + sb.Append(" {\n"); + foreach (var n in node.Nodes) + { + if (n == null) + continue; + BuildString(n, sb, writeArrayLength, indentLevel + 1); + } + for (int i = 0; i < indentLevel; i++) + sb.Append('\t'); + sb.Append('}'); + } + sb.Append('\n'); + + nodePath.Pop(); + } + + /// + /// Writes an FBX document to the stream + /// + /// + /// + /// ASCII FBX files have no header or footer, so you can call this multiple times + /// + public void Write(FbxDocument document) + { + if (document == null) + throw new ArgumentNullException(nameof(document)); + var sb = new StringBuilder(); + + // Write version header (a comment, but required for many importers) + var vMajor = (int)document.Version / 1000; + var vMinor = ((int)document.Version % 1000) / 100; + var vRev = ((int)document.Version % 100) / 10; + sb.Append($"; FBX {vMajor}.{vMinor}.{vRev} project file\n\n"); + + nodePath.Clear(); + foreach (var n in document.Nodes) + { + if (n == null) + continue; + BuildString(n, sb, document.Version >= FbxVersion.v7_1); + sb.Append('\n'); + } + var b = Encoding.ASCII.GetBytes(sb.ToString()); + stream.Write(b, 0, b.Length); + } + } + + + /// + /// Base class for binary stream wrappers + /// + public abstract class FbxBinary + { + // Header string, found at the top of all compliant files + private static readonly byte[] headerString + = Encoding.ASCII.GetBytes("Kaydara FBX Binary \0\x1a\0"); + + // This data was entirely calculated by me, honest. Turns out it works, fancy that! + private static readonly byte[] sourceId = + { 0x58, 0xAB, 0xA9, 0xF0, 0x6C, 0xA2, 0xD8, 0x3F, 0x4D, 0x47, 0x49, 0xA3, 0xB4, 0xB2, 0xE7, 0x3D }; + private static readonly byte[] key = + { 0xE2, 0x4F, 0x7B, 0x5F, 0xCD, 0xE4, 0xC8, 0x6D, 0xDB, 0xD8, 0xFB, 0xD7, 0x40, 0x58, 0xC6, 0x78 }; + // This wasn't - it just appears at the end of every compliant file + private static readonly byte[] extension = + { 0xF8, 0x5A, 0x8C, 0x6A, 0xDE, 0xF5, 0xD9, 0x7E, 0xEC, 0xE9, 0x0C, 0xE3, 0x75, 0x8F, 0x29, 0x0B }; + + // Number of null bytes between the footer code and the version + private const int footerZeroes1 = 20; + // Number of null bytes between the footer version and extension code + private const int footerZeroes2 = 120; + + /// + /// The size of the footer code + /// + protected const int footerCodeSize = 16; + + /// + /// The namespace separator in the binary format (remember to reverse the identifiers) + /// + protected const string binarySeparator = "\0\x1"; + + /// + /// The namespace separator in the ASCII format and in object data + /// + protected const string asciiSeparator = "::"; + + /// + /// Checks if the first part of 'data' matches 'original' + /// + /// + /// + /// true if it does, otherwise false + protected static bool CheckEqual(byte[] data, byte[] original) + { + for (int i = 0; i < original.Length; i++) + if (data[i] != original[i]) + return false; + return true; + } + + + public static bool IsBinary(Stream stream) + { + var isb = ReadHeader(stream); + stream.Position = 0; + return isb; + } + + + + /// + /// Writes the FBX header string + /// + /// + protected static void WriteHeader(Stream stream) + { + stream.Write(headerString, 0, headerString.Length); + } + + /// + /// Reads the FBX header string + /// + /// + /// true if it's compliant + protected static bool ReadHeader(Stream stream) + { + var buf = new byte[headerString.Length]; + stream.Read(buf, 0, buf.Length); + return CheckEqual(buf, headerString); + } + + // Turns out this is the algorithm they use to generate the footer. Who knew! + static void Encrypt(byte[] a, byte[] b) + { + byte c = 64; + for (int i = 0; i < footerCodeSize; i++) + { + a[i] = (byte)(a[i] ^ (byte)(c ^ b[i])); + c = a[i]; + } + } + + const string timePath1 = "FBXHeaderExtension"; + const string timePath2 = "CreationTimeStamp"; + static readonly Stack timePath = new Stack(new[] { timePath1, timePath2 }); + + // Gets a single timestamp component + static int GetTimestampVar(FbxNode timestamp, string element) + { + var elementNode = timestamp[element]; + if (elementNode != null && elementNode.Properties.Count > 0) + { + var prop = elementNode.Properties[0]; + if (prop is int || prop is long) + return (int)prop; + } + throw new FbxException(timePath, -1, "Timestamp has no " + element); + } + + /// + /// Generates the unique footer code based on the document's timestamp + /// + /// + /// A 16-byte code + protected static byte[] GenerateFooterCode(FbxNodeList document) + { + var timestamp = document.GetRelative(timePath1 + "/" + timePath2); + if (timestamp == null) + throw new FbxException(timePath, -1, "No creation timestamp"); + try + { + return GenerateFooterCode( + GetTimestampVar(timestamp, "Year"), + GetTimestampVar(timestamp, "Month"), + GetTimestampVar(timestamp, "Day"), + GetTimestampVar(timestamp, "Hour"), + GetTimestampVar(timestamp, "Minute"), + GetTimestampVar(timestamp, "Second"), + GetTimestampVar(timestamp, "Millisecond") + ); + } + catch (ArgumentOutOfRangeException) + { + throw new FbxException(timePath, -1, "Invalid timestamp"); + } + } + + /// + /// Generates a unique footer code based on a timestamp + /// + /// + /// + /// + /// + /// + /// + /// + /// A 16-byte code + protected static byte[] GenerateFooterCode( + int year, int month, int day, + int hour, int minute, int second, int millisecond) + { + if (year < 0 || year > 9999) + throw new ArgumentOutOfRangeException(nameof(year)); + if (month < 0 || month > 12) + throw new ArgumentOutOfRangeException(nameof(month)); + if (day < 0 || day > 31) + throw new ArgumentOutOfRangeException(nameof(day)); + if (hour < 0 || hour >= 24) + throw new ArgumentOutOfRangeException(nameof(hour)); + if (minute < 0 || minute >= 60) + throw new ArgumentOutOfRangeException(nameof(minute)); + if (second < 0 || second >= 60) + throw new ArgumentOutOfRangeException(nameof(second)); + if (millisecond < 0 || millisecond >= 1000) + throw new ArgumentOutOfRangeException(nameof(millisecond)); + + var str = (byte[])sourceId.Clone(); + var mangledTime = $"{second:00}{month:00}{hour:00}{day:00}{(millisecond / 10):00}{year:0000}{minute:00}"; + var mangledBytes = Encoding.ASCII.GetBytes(mangledTime); + Encrypt(str, mangledBytes); + Encrypt(str, key); + Encrypt(str, mangledBytes); + return str; + } + + /// + /// Writes the FBX footer extension (NB - not the unique footer code) + /// + /// + /// + protected void WriteFooter(BinaryWriter stream, int version) + { + var zeroes = new byte[Math.Max(footerZeroes1, footerZeroes2)]; + stream.Write(zeroes, 0, footerZeroes1); + stream.Write(version); + stream.Write(zeroes, 0, footerZeroes2); + stream.Write(extension, 0, extension.Length); + } + + static bool AllZero(byte[] array) + { + foreach (var b in array) + if (b != 0) + return false; + return true; + } + + /// + /// Reads and checks the FBX footer extension (NB - not the unique footer code) + /// + /// + /// + /// true if it's compliant + protected bool CheckFooter(BinaryReader stream, FbxVersion version) + { + var buffer = new byte[Math.Max(footerZeroes1, footerZeroes2)]; + stream.Read(buffer, 0, footerZeroes1); + bool correct = AllZero(buffer); + var readVersion = stream.ReadInt32(); + correct &= (readVersion == (int)version); + stream.Read(buffer, 0, footerZeroes2); + correct &= AllZero(buffer); + stream.Read(buffer, 0, extension.Length); + correct &= CheckEqual(buffer, extension); + return correct; + } + } + + /// + /// Reads FBX nodes from a binary stream + /// + public class FbxBinaryReader : FbxBinary + { + private readonly BinaryReader stream; + private readonly FbxErrorLevel errorLevel; + + private delegate object ReadPrimitive(BinaryReader reader); + + /// + /// Creates a new reader + /// + /// The stream to read from + /// When to throw an + /// does + /// not support seeking + public FbxBinaryReader(Stream stream, FbxErrorLevel errorLevel = FbxErrorLevel.Checked) + { + if (stream == null) + throw new ArgumentNullException(nameof(stream)); + if (!stream.CanSeek) + throw new ArgumentException( + "The stream must support seeking. Try reading the data into a buffer first"); + this.stream = new BinaryReader(stream, Encoding.ASCII); + this.errorLevel = errorLevel; + } + + // Reads a single property + object ReadProperty() + { + var dataType = (char)stream.ReadByte(); + switch (dataType) + { + case 'Y': + return stream.ReadInt16(); + case 'C': + return (char)stream.ReadByte(); + case 'I': + return stream.ReadInt32(); + case 'F': + return stream.ReadSingle(); + case 'D': + return stream.ReadDouble(); + case 'L': + return stream.ReadInt64(); + case 'f': + return ReadArray(br => br.ReadSingle(), typeof(float)); + case 'd': + return ReadArray(br => br.ReadDouble(), typeof(double)); + case 'l': + return ReadArray(br => br.ReadInt64(), typeof(long)); + case 'i': + return ReadArray(br => br.ReadInt32(), typeof(int)); + case 'b': + return ReadArray(br => br.ReadBoolean(), typeof(bool)); + case 'S': + var len = stream.ReadInt32(); + var str = len == 0 ? "" : Encoding.ASCII.GetString(stream.ReadBytes(len)); + // Convert \0\1 to '::' and reverse the tokens + if (str.Contains(binarySeparator)) + { + var tokens = str.Split(new[] { binarySeparator }, StringSplitOptions.None); + var sb = new StringBuilder(); + bool first = true; + for (int i = tokens.Length - 1; i >= 0; i--) + { + if (!first) + sb.Append(asciiSeparator); + sb.Append(tokens[i]); + first = false; + } + str = sb.ToString(); + } + return str; + case 'R': + return stream.ReadBytes(stream.ReadInt32()); + default: + throw new FbxException(stream.BaseStream.Position - 1, + "Invalid property data type `" + dataType + "'"); + } + } + + // Reads an array, decompressing it if required + Array ReadArray(ReadPrimitive readPrimitive, Type arrayType) + { + var len = stream.ReadInt32(); + var encoding = stream.ReadInt32(); + var compressedLen = stream.ReadInt32(); + var ret = Array.CreateInstance(arrayType, len); + var s = stream; + var endPos = stream.BaseStream.Position + compressedLen; + if (encoding != 0) + { + if (errorLevel >= FbxErrorLevel.Checked) + { + if (encoding != 1) + throw new FbxException(stream.BaseStream.Position - 1, + "Invalid compression encoding (must be 0 or 1)"); + var cmf = stream.ReadByte(); + if ((cmf & 0xF) != 8 || (cmf >> 4) > 7) + throw new FbxException(stream.BaseStream.Position - 1, + "Invalid compression format " + cmf); + var flg = stream.ReadByte(); + if (errorLevel >= FbxErrorLevel.Strict && ((cmf << 8) + flg) % 31 != 0) + throw new FbxException(stream.BaseStream.Position - 1, + "Invalid compression FCHECK"); + if ((flg & (1 << 5)) != 0) + throw new FbxException(stream.BaseStream.Position - 1, + "Invalid compression flags; dictionary not supported"); + } + else + { + stream.BaseStream.Position += 2; + } + var codec = new FbxDeflateWithChecksum(stream.BaseStream, CompressionMode.Decompress); + s = new BinaryReader(codec); + } + try + { + for (int i = 0; i < len; i++) + ret.SetValue(readPrimitive(s), i); + } + catch (InvalidDataException) + { + throw new FbxException(stream.BaseStream.Position - 1, + "Compressed data was malformed"); + } + if (encoding != 0) + { + if (errorLevel >= FbxErrorLevel.Checked) + { + stream.BaseStream.Position = endPos - sizeof(int); + var checksumBytes = new byte[sizeof(int)]; + stream.BaseStream.Read(checksumBytes, 0, checksumBytes.Length); + int checksum = 0; + for (int i = 0; i < checksumBytes.Length; i++) + checksum = (checksum << 8) + checksumBytes[i]; + if (checksum != ((FbxDeflateWithChecksum)s.BaseStream).Checksum) + throw new FbxException(stream.BaseStream.Position, + "Compressed data has invalid checksum"); + } + else + { + stream.BaseStream.Position = endPos; + } + } + return ret; + } + + /// + /// Reads a single node. + /// + /// + /// This won't read the file header or footer, and as such will fail if the stream is a full FBX file + /// + /// The node + /// The FBX data was malformed + /// for the reader's error level + public FbxNode ReadNode() + { + var endOffset = stream.ReadInt32(); + var numProperties = stream.ReadInt32(); + var propertyListLen = stream.ReadInt32(); + var nameLen = stream.ReadByte(); + var name = nameLen == 0 ? "" : Encoding.ASCII.GetString(stream.ReadBytes(nameLen)); + + if (endOffset == 0) + { + // The end offset should only be 0 in a null node + if (errorLevel >= FbxErrorLevel.Checked && (numProperties != 0 || propertyListLen != 0 || !string.IsNullOrEmpty(name))) + throw new FbxException(stream.BaseStream.Position, + "Invalid node; expected NULL record"); + return null; + } + + var node = new FbxNode { Name = name }; + + var propertyEnd = stream.BaseStream.Position + propertyListLen; + // Read properties + for (int i = 0; i < numProperties; i++) + node.Properties.Add(ReadProperty()); + + if (errorLevel >= FbxErrorLevel.Checked && stream.BaseStream.Position != propertyEnd) + throw new FbxException(stream.BaseStream.Position, + "Too many bytes in property list, end point is " + propertyEnd); + + // Read nested nodes + var listLen = endOffset - stream.BaseStream.Position; + if (errorLevel >= FbxErrorLevel.Checked && listLen < 0) + throw new FbxException(stream.BaseStream.Position, + "Node has invalid end point"); + if (listLen > 0) + { + FbxNode nested; + do + { + nested = ReadNode(); + node.Nodes.Add(nested); + } while (nested != null); + if (errorLevel >= FbxErrorLevel.Checked && stream.BaseStream.Position != endOffset) + throw new FbxException(stream.BaseStream.Position, + "Too many bytes in node, end point is " + endOffset); + } + return node; + } + + /// + /// Reads an FBX document from the stream + /// + /// The top-level node + /// The FBX data was malformed + /// for the reader's error level + public FbxDocument Read() + { + // Read header + bool validHeader = ReadHeader(stream.BaseStream); + if (errorLevel >= FbxErrorLevel.Strict && !validHeader) + throw new FbxException(stream.BaseStream.Position, + "Invalid header string"); + var document = new FbxDocument { Version = (FbxVersion)stream.ReadInt32() }; + + // Read nodes + var dataPos = stream.BaseStream.Position; + FbxNode nested; + do + { + nested = ReadNode(); + if (nested != null) + document.Nodes.Add(nested); + } while (nested != null); + + // Read footer code + var footerCode = new byte[footerCodeSize]; + stream.BaseStream.Read(footerCode, 0, footerCode.Length); + if (errorLevel >= FbxErrorLevel.Strict) + { + var validCode = GenerateFooterCode(document); + if (!CheckEqual(footerCode, validCode)) + throw new FbxException(stream.BaseStream.Position - footerCodeSize, + "Incorrect footer code"); + } + + // Read footer extension + dataPos = stream.BaseStream.Position; + var validFooterExtension = CheckFooter(stream, document.Version); + if (errorLevel >= FbxErrorLevel.Strict && !validFooterExtension) + throw new FbxException(dataPos, "Invalid footer"); + return document; + } + } + + /// + /// Writes an FBX document to a binary stream + /// + public class FbxBinaryWriter : FbxBinary + { + private readonly Stream output; + private readonly MemoryStream memory; + private readonly BinaryWriter stream; + + readonly Stack nodePath = new Stack(); + + /// + /// The minimum size of an array in bytes before it is compressed + /// + public int CompressionThreshold { get; set; } = 1024; + + /// + /// Creates a new writer + /// + /// + public FbxBinaryWriter(Stream stream) + { + if (stream == null) + throw new ArgumentNullException(nameof(stream)); + output = stream; + // Wrap in a memory stream to guarantee seeking + memory = new MemoryStream(); + this.stream = new BinaryWriter(memory, Encoding.ASCII); + } + + private delegate void PropertyWriter(BinaryWriter sw, object obj); + + struct WriterInfo + { + public readonly char id; + public readonly PropertyWriter writer; + + public WriterInfo(char id, PropertyWriter writer) + { + this.id = id; + this.writer = writer; + } + } + + private static readonly Dictionary writePropertyActions + = new Dictionary + { + { typeof(int), new WriterInfo('I', (sw, obj) => sw.Write((int)obj)) }, + { typeof(short), new WriterInfo('Y', (sw, obj) => sw.Write((short)obj)) }, + { typeof(long), new WriterInfo('L', (sw, obj) => sw.Write((long)obj)) }, + { typeof(float), new WriterInfo('F', (sw, obj) => sw.Write((float)obj)) }, + { typeof(double), new WriterInfo('D', (sw, obj) => sw.Write((double)obj)) }, + { typeof(bool), new WriterInfo('C', (sw, obj) => sw.Write((byte)(char)obj)) }, + { typeof(byte[]), new WriterInfo('R', WriteRaw) }, + { typeof(string), new WriterInfo('S', WriteString) }, + // null elements indicate arrays - they are checked again with their element type + { typeof(int[]), new WriterInfo('i', null) }, + { typeof(long[]), new WriterInfo('l', null) }, + { typeof(float[]), new WriterInfo('f', null) }, + { typeof(double[]), new WriterInfo('d', null) }, + { typeof(bool[]), new WriterInfo('b', null) }, + }; + + static void WriteRaw(BinaryWriter stream, object obj) + { + var bytes = (byte[])obj; + stream.Write(bytes.Length); + stream.Write(bytes); + } + + static void WriteString(BinaryWriter stream, object obj) + { + var str = obj.ToString(); + // Replace "::" with \0\1 and reverse the tokens + if (str.Contains(asciiSeparator)) + { + var tokens = str.Split(new[] { asciiSeparator }, StringSplitOptions.None); + var sb = new StringBuilder(); + bool first = true; + for (int i = tokens.Length - 1; i >= 0; i--) + { + if (!first) + sb.Append(binarySeparator); + sb.Append(tokens[i]); + first = false; + } + str = sb.ToString(); + } + var bytes = Encoding.ASCII.GetBytes(str); + stream.Write(bytes.Length); + stream.Write(bytes); + } + + void WriteArray(Array array, Type elementType, PropertyWriter writer) + { + stream.Write(array.Length); + + var size = array.Length * Marshal.SizeOf(elementType); + bool compress = size >= CompressionThreshold; + stream.Write(compress ? 1 : 0); + + var sw = stream; + FbxDeflateWithChecksum codec = null; + + var compressLengthPos = stream.BaseStream.Position; + stream.Write(0); // Placeholder compressed length + var dataStart = stream.BaseStream.Position; + if (compress) + { + stream.Write(new byte[] { 0x58, 0x85 }, 0, 2); // Header bytes for DeflateStream settings + codec = new FbxDeflateWithChecksum(stream.BaseStream, CompressionMode.Compress, true); + sw = new BinaryWriter(codec); + } + foreach (var obj in array) + writer(sw, obj); + if (compress) + { + codec.Close(); // This is important - otherwise bytes can be incorrect + var checksum = codec.Checksum; + byte[] bytes = + { + (byte)((checksum >> 24) & 0xFF), + (byte)((checksum >> 16) & 0xFF), + (byte)((checksum >> 8) & 0xFF), + (byte)(checksum & 0xFF), + }; + stream.Write(bytes); + } + + // Now we can write the compressed data length, since we know the size + if (compress) + { + var dataEnd = stream.BaseStream.Position; + stream.BaseStream.Position = compressLengthPos; + stream.Write((int)(dataEnd - dataStart)); + stream.BaseStream.Position = dataEnd; + } + } + + void WriteProperty(object obj, int id) + { + if (obj == null) + return; + WriterInfo writerInfo; + if (!writePropertyActions.TryGetValue(obj.GetType(), out writerInfo)) + throw new FbxException(nodePath, id, + "Invalid property type " + obj.GetType()); + stream.Write((byte)writerInfo.id); + // ReSharper disable once AssignNullToNotNullAttribute + if (writerInfo.writer == null) // Array type + { + var elementType = obj.GetType().GetElementType(); + WriteArray((Array)obj, elementType, writePropertyActions[elementType].writer); + } + else + writerInfo.writer(stream, obj); + } + + // Data for a null node + static readonly byte[] nullData = new byte[13]; + + // Writes a single document to the buffer + void WriteNode(FbxNode node) + { + if (node == null) + { + stream.BaseStream.Write(nullData, 0, nullData.Length); + } + else + { + nodePath.Push(node.Name ?? ""); + var name = string.IsNullOrEmpty(node.Name) ? null : Encoding.ASCII.GetBytes(node.Name); + if (name != null && name.Length > byte.MaxValue) + throw new FbxException(stream.BaseStream.Position, + "Node name is too long"); + + // Header + var endOffsetPos = stream.BaseStream.Position; + stream.Write(0); // End offset placeholder + stream.Write(node.Properties.Count); + var propertyLengthPos = stream.BaseStream.Position; + stream.Write(0); // Property length placeholder + stream.Write((byte)(name?.Length ?? 0)); + if (name != null) + stream.Write(name); + + // Write properties and length + var propertyBegin = stream.BaseStream.Position; + for (int i = 0; i < node.Properties.Count; i++) + { + WriteProperty(node.Properties[i], i); + } + var propertyEnd = stream.BaseStream.Position; + stream.BaseStream.Position = propertyLengthPos; + stream.Write((int)(propertyEnd - propertyBegin)); + stream.BaseStream.Position = propertyEnd; + + // Write child nodes + if (node.Nodes.Count > 0) + { + foreach (var n in node.Nodes) + { + if (n == null) + continue; + WriteNode(n); + } + WriteNode(null); + } + + // Write end offset + var dataEnd = stream.BaseStream.Position; + stream.BaseStream.Position = endOffsetPos; + stream.Write((int)dataEnd); + stream.BaseStream.Position = dataEnd; + + nodePath.Pop(); + } + } + + /// + /// Writes an FBX file to the output + /// + /// + public void Write(FbxDocument document) + { + stream.BaseStream.Position = 0; + WriteHeader(stream.BaseStream); + stream.Write((int)document.Version); + // TODO: Do we write a top level node or not? Maybe check the version? + nodePath.Clear(); + foreach (var node in document.Nodes) + WriteNode(node); + WriteNode(null); + stream.Write(GenerateFooterCode(document)); + WriteFooter(stream, (int)document.Version); + output.Write(memory.GetBuffer(), 0, (int)memory.Position); + } + } + + + + /// + /// A top-level FBX node + /// + public class FbxDocument : FbxNodeList + { + /// + /// Describes the format and data of the document + /// + /// + /// It isn't recommended that you change this value directly, because + /// it won't change any of the document's data which can be version-specific. + /// Most FBX importers can cope with any version. + /// + public FbxVersion Version { get; set; } = FbxVersion.v7_4; + + + /// + /// Creates connections between objects and returns the root nodes. + /// (added by dexyfex) + /// + /// + public List GetSceneNodes() + { + var fobjs = this["Objects"]; + if (fobjs?.Nodes == null) + return null; + + var fconns = this["Connections"]; + if (fconns?.Nodes == null) + return null; + + var fobjdict = new Dictionary(); + var rootnodes = new List(); + + foreach (var node in fobjs.Nodes) //put all the object nodes into a decktionary for the connections + { + if (node == null) continue; + long id = 0; + if (node.Value is long) + { id = (long)node.Value; } + if (id == 0) + { }//shouldn't happen.. + fobjdict[id] = node; + } + + foreach (var node in fconns.Nodes) //build the scene hierarchy by adding connections to object nodes + { + if (node == null) continue; + var connType = node.Value as string; + if ((connType == "OO") || (connType == "OP")) + { + if (node.Properties.Count < 3) { continue; } + if (!(node.Properties[1] is long)) { continue; } + if (!(node.Properties[2] is long)) { continue; } + long cid = (long)node.Properties[1]; + long pid = (long)node.Properties[2]; + FbxNode cnode; + FbxNode pnode; + fobjdict.TryGetValue(cid, out cnode); + fobjdict.TryGetValue(pid, out pnode); + if (cnode == null) { continue; } + if (pnode == null) + { + rootnodes.Add(cnode); + } + else + { + pnode.Connections.Add(cnode); + } + } + else + { } + } + + return rootnodes; + } + + } + + /// + /// An error with the FBX data input + /// + public class FbxException : Exception + { + /// + /// An error at a binary stream offset + /// + /// + /// + public FbxException(long position, string message) : + base($"{message}, near offset {position}") + { + } + + /// + /// An error in a text file + /// + /// + /// + /// + public FbxException(int line, int column, string message) : + base($"{message}, near line {line} column {column}") + { + } + + /// + /// An error in a node object + /// + /// + /// + /// + public FbxException(Stack nodePath, int propertyID, string message) : + base(message + ", at " + string.Join("/", nodePath.ToArray()) + (propertyID < 0 ? "" : $"[{propertyID}]")) + { + } + } + + /// + /// Represents a node in an FBX file + /// + public class FbxNode : FbxNodeList + { + /// + /// The node name, which is often a class type + /// + /// + /// The name must be smaller than 256 characters to be written to a binary stream + /// + public string Name { get; set; } + + /// + /// The list of properties associated with the node + /// + /// + /// Supported types are primitives (apart from byte and char),arrays of primitives, and strings + /// + public List Properties { get; } = new List(); + + /// + /// List of FbxNodes that are connected to this node via the Connections section. + /// (Added by dexyfex, used by FbxConverter) + /// + public List Connections { get; } = new List(); + + /// + /// The first property element + /// + public object Value + { + get { return Properties.Count < 1 ? null : Properties[0]; } + set + { + if (Properties.Count < 1) + Properties.Add(value); + else + Properties[0] = value; + } + } + + /// + /// Whether the node is empty of data + /// + public bool IsEmpty => string.IsNullOrEmpty(Name) && Properties.Count == 0 && Nodes.Count == 0; + + public override string ToString() + { + return Name + ((Value != null) ? (": " + Value.ToString()) : ""); + } + } + + /// + /// Base class for nodes and documents + /// + public abstract class FbxNodeList + { + /// + /// The list of child/nested nodes + /// + /// + /// A list with one or more null elements is treated differently than an empty list, + /// and represented differently in all FBX output files. + /// + public List Nodes { get; } = new List(); + + /// + /// Gets a named child node + /// + /// + /// The child node, or null + public FbxNode this[string name] { get { return Nodes.Find(n => n != null && n.Name == name); } } + + /// + /// Gets a child node, using a '/' separated path + /// + /// + /// The child node, or null + public FbxNode GetRelative(string path) + { + var tokens = path.Split('/'); + FbxNodeList n = this; + foreach (var t in tokens) + { + if (t == "") + continue; + n = n[t]; + if (n == null) + break; + } + return n as FbxNode; + } + } + + /// + /// Enumerates the FBX file versions + /// + public enum FbxVersion + { + /// + /// FBX version 6.0 + /// + v6_0 = 6000, + + /// + /// FBX version 6.1 + /// + v6_1 = 6100, + + /// + /// FBX version 7.0 + /// + v7_0 = 7000, + + /// + /// FBX 2011 version + /// + v7_1 = 7100, + + /// + /// FBX 2012 version + /// + v7_2 = 7200, + + /// + /// FBX 2013 version + /// + v7_3 = 7300, + + /// + /// FBX 2014 version + /// + v7_4 = 7400, + } + + + + /// + /// Indicates when a reader should throw errors + /// + public enum FbxErrorLevel + { + /// + /// Ignores inconsistencies unless the parser can no longer continue + /// + Permissive = 0, + + /// + /// Checks data integrity, such as checksums and end points + /// + Checked = 1, + + /// + /// Checks everything, including magic bytes + /// + Strict = 2, + } + + + /// + /// A wrapper for DeflateStream that calculates the Adler32 checksum of the payload + /// + public class FbxDeflateWithChecksum : DeflateStream + { + private const int modAdler = 65521; + private uint checksumA; + private uint checksumB; + + /// + /// Gets the Adler32 checksum at the current point in the stream + /// + public int Checksum + { + get + { + checksumA %= modAdler; + checksumB %= modAdler; + return (int)((checksumB << 16) | checksumA); + } + } + + /// + public FbxDeflateWithChecksum(Stream stream, CompressionMode mode) : base(stream, mode) + { + ResetChecksum(); + } + + /// + public FbxDeflateWithChecksum(Stream stream, CompressionMode mode, bool leaveOpen) : base(stream, mode, leaveOpen) + { + ResetChecksum(); + } + + // Efficiently extends the checksum with the given buffer + void CalcChecksum(byte[] array, int offset, int count) + { + checksumA %= modAdler; + checksumB %= modAdler; + for (int i = offset, c = 0; i < (offset + count); i++, c++) + { + checksumA += array[i]; + checksumB += checksumA; + if (c > 4000) // This is about how many iterations it takes for B to reach IntMax + { + checksumA %= modAdler; + checksumB %= modAdler; + c = 0; + } + } + } + + /// + public override void Write(byte[] array, int offset, int count) + { + base.Write(array, offset, count); + CalcChecksum(array, offset, count); + } + + /// + public override int Read(byte[] array, int offset, int count) + { + var ret = base.Read(array, offset, count); + CalcChecksum(array, offset, count); + return ret; + } + + /// + /// Initializes the checksum values + /// + public void ResetChecksum() + { + checksumA = 1; + checksumB = 0; + } + } + +} diff --git a/CodeWalker.Core/Utils/FbxConverter.cs b/CodeWalker.Core/Utils/FbxConverter.cs new file mode 100644 index 0000000..e868887 --- /dev/null +++ b/CodeWalker.Core/Utils/FbxConverter.cs @@ -0,0 +1,1010 @@ +using CodeWalker.GameFiles; +using SharpDX; +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CodeWalker +{ + public class FbxConverter + { + + + + public YdrFile ConvertToYdr(string name, byte[] fbxdata) + { + var fdoc = FbxIO.Read(fbxdata); + if (fdoc == null) + return null; + + var dwbl = TryConvertDrawable(fdoc, name); + + + YdrFile ydr = new YdrFile(); + ydr.Drawable = dwbl; + + //byte[] ddata = ydr.Save(); + //File.WriteAllBytes("C:\\Dump\\TestFbx\\" + name + ".ydr", ddata); + + + return ydr; + } + + + + private Drawable TryConvertDrawable(FbxDocument fdoc, string name) + { + + var rootnodes = fdoc.GetSceneNodes(); + + var mlists = new List>(); + var mlistall = new List(); + + foreach (var node in rootnodes) + { + if (node.Name == "Model") + { + var mlist = TryConvertModels(node); //flatten any models structure with depth >2 + if (mlist != null) + { + mlists.Add(mlist); + mlistall.AddRange(mlist); + } + } + } + + var mlHigh = new List(); + var mlMed = new List(); + var mlLow = new List(); + var mlVlow = new List(); + var mlUnks = new List(); + var mlAll = new List(); + foreach (var m in mlistall) + { + var mnl = m.Name.ToLowerInvariant(); + if (mnl.EndsWith("_vlow")) + { + mlVlow.Add(m.Model); + } + else if (mnl.EndsWith("_low")) + { + mlLow.Add(m.Model); + } + else if (mnl.EndsWith("_med")) + { + mlMed.Add(m.Model); + } + else if (mnl.EndsWith("_high")) + { + mlHigh.Add(m.Model); + } + else + { + mlUnks.Add(m.Model); + } + } + if (mlHigh.Count == 0)//mlUnks could be embedded collisions... ignore for now + { + mlHigh.AddRange(mlUnks); + } + mlAll.AddRange(mlHigh); + mlAll.AddRange(mlMed); + mlAll.AddRange(mlLow); + mlAll.AddRange(mlVlow); + + + + var allVerts = new List(); + var bbMin = new Vector3(float.MaxValue); + var bbMax = new Vector3(float.MinValue); + var bsCen = Vector3.Zero; + var bsRad = 0.0f; + foreach (var m in mlistall) + { + if (m?.Model?.Geometries?.data_items == null) continue; + foreach (var g in m.Model.Geometries.data_items) + { + var vb = g.VertexData.VertexBytes; + var vs = g.VertexData.VertexStride; + var vc = g.VertexData.VertexCount; + for (int i = 0; i < vc; i++) + { + var vp = MetaTypes.ConvertData(vb, i * vs);//position offset should always be 0! + allVerts.Add(vp); + bbMin = Vector3.Min(bbMin, vp); + bbMax = Vector3.Max(bbMax, vp); + //bsCen += vp; + } + } + } + if (allVerts.Count > 0) + { + //bsCen = bsCen / allVerts.Count; + bsCen = (bbMin + bbMax) * 0.5f; + foreach (var vp in allVerts) + { + bsRad = Math.Max(bsRad, (vp - bsCen).Length()); + } + } + + + + var sgrp = new ShaderGroup(); + var slist = new List(); + var smapp = new List(); + foreach (var m in mlAll) + { + if (m?.Geometries?.data_items == null) continue; + smapp.Clear(); + foreach (var g in m.Geometries.data_items) + { + smapp.Add((ushort)slist.Count); + slist.Add(g.Shader); + } + m.ShaderMapping = smapp.ToArray();//TODO: re-use shaders!! + } + sgrp.Shaders = new ResourcePointerArray64(); + sgrp.Shaders.data_items = slist.ToArray(); + sgrp.ShadersCount1 = (ushort)slist.Count; + sgrp.ShadersCount2 = (ushort)slist.Count; + sgrp.VFT = 1080113376;//is this needed? + sgrp.Unknown_4h = 1; + sgrp.Unknown_30h = (uint)(8 + slist.Count*3);//WTF is this? + + + var d = new Drawable(); + d.Name = name + ".#dr"; + d.ShaderGroup = sgrp; + d.BoundingCenter = bsCen; + d.BoundingSphereRadius = bsRad; + d.BoundingBoxMin = new Vector4(bbMin, float.NaN); + d.BoundingBoxMax = new Vector4(bbMax, float.NaN); + d.LodDistHigh = 9998;//lod dist defaults + d.LodDistMed = 9998; + d.LodDistLow = 9998; + d.LodDistVlow = 9998; + d.Unknown_80h = 0;//TODO: figure these out! related to high/med/low/vlow 0xFF00 + ? + d.Unknown_84h = 0; + d.Unknown_88h = 0; + d.Unknown_8Ch = 0; + d.Unknown_9Ah = 33;//WTF is this??? + d.FileVFT = 1079446584; + d.FileUnknown = 1; + if (mlHigh.Count > 0) + { + d.DrawableModelsHigh = new ResourcePointerList64(); + d.DrawableModelsHigh.data_items = mlHigh.ToArray(); + d.Unknown_80h = 65281;//WTF is this??? 0xFF00 + ? + } + if (mlMed.Count > 0) + { + d.DrawableModelsMedium = new ResourcePointerList64(); + d.DrawableModelsMedium.data_items = mlMed.ToArray(); + d.LodDistHigh = bsRad * 2.0f; //when med models present, generate a high lod dist.. + d.Unknown_84h = 65281;//WTF is this??? 0xFF00 + ? + } + if (mlLow.Count > 0) + { + d.DrawableModelsLow = new ResourcePointerList64(); + d.DrawableModelsLow.data_items = mlLow.ToArray(); + d.LodDistMed = bsRad * 8.0f; //when low models present, generate a med lod dist.. + d.Unknown_88h = 65281;//WTF is this??? 0xFF00 + ? + } + if (mlVlow.Count > 0) + { + d.DrawableModelsVeryLow = new ResourcePointerList64(); + d.DrawableModelsVeryLow.data_items = mlVlow.ToArray(); + d.LodDistLow = bsRad * 32.0f; //when vlow models present, generate a low lod dist.. + d.Unknown_8Ch = 65281;//WTF is this??? 0xFF00 + ? + } + d.DrawableModelsX = d.DrawableModelsHigh; + + d.LightAttributes = new ResourceSimpleList64_s(); + //todo: light attributes? + + + return d; + } + + + + private List TryConvertModels(FbxNode mnode) + { + var result = new List(); + + var nodemodel = TryConvertModel(mnode); + if (nodemodel != null) + { + result.Add(nodemodel); + } + + foreach (var cnode in mnode.Connections) + { + if (cnode.Name == "Model") + { + var mlist = TryConvertModels(cnode); + if (mlist != null) + { + result.AddRange(mlist); + } + } + } + + return result; + } + + private FbxModel TryConvertModel(FbxNode mnode) + { + + FbxNode geonode = null; + var matnodes = new List(); + foreach (var cnode in mnode.Connections) + { + if (cnode == null) continue; + switch (cnode.Name) + { + case "Geometry": + geonode = cnode; + break; + case "Material": + matnodes.Add(cnode); + break; + } + } + + if (geonode == null) return null; + if (matnodes.Count == 0) + return null; //need atleast one material... + + var fnEdges = geonode["Edges"]?.Value as int[];//do we need this? maybe for collision/navmesh + var fnVerts = geonode["Vertices"]?.Value as double[]; + var fnIndices = geonode["PolygonVertexIndex"]?.Value as int[]; + + if ((fnVerts == null) || (fnIndices == null)) + { return null; } //no mesh data.. abort! + + var fnNormals = new List(); + var fnBinormals = new List(); + var fnTangents = new List(); + var fnTexcoords = new List(); + var fnColours = new List(); + var fnMaterials = new List(); + + foreach (var cnode in geonode.Nodes) + { + if (cnode == null) continue; + switch (cnode.Name) + { + case "LayerElementNormal": fnNormals.Add(cnode); break; + case "LayerElementBinormal": fnBinormals.Add(cnode); break; + case "LayerElementTangent": fnTangents.Add(cnode); break; + case "LayerElementUV": fnTexcoords.Add(cnode); break; + case "LayerElementColor": fnColours.Add(cnode); break; + case "LayerElementMaterial": fnMaterials.Add(cnode); break; + case "LayerElementSmoothing": break;//ignore currently + case "Layer": break;//ignore- merge all layers data instead + } + } + + var nNormals = fnNormals.Count; + var nBinormals = fnBinormals.Count; + var nTangents = fnTangents.Count; + var nTexcoords = fnTexcoords.Count; + var nColours = fnColours.Count; + var nMaterials = fnMaterials.Count; + + var fPolys = new List(); + var fPolyVerts = new List(); + var fPolysByMat = new List[matnodes.Count]; + + foreach (var fnIndex in fnIndices) //build the polygons. + { + var pVert = new FbxVertex(); + pVert.Position = GetVector3FromDoubleArray(fnVerts, (fnIndex < 0) ? (-fnIndex-1) : fnIndex); + pVert.Normals = nNormals > 0 ? new Vector3[nNormals] : null; + pVert.Binormals = nBinormals > 0 ? new Vector3[nBinormals] : null; + pVert.Tangents = nTangents > 0 ? new Vector3[nTangents] : null; + pVert.Texcoords = nTexcoords > 0 ? new Vector2[nTexcoords] : null; + pVert.Colours = nColours > 0 ? new Vector4[nColours] : null; + fPolyVerts.Add(pVert); + if (fnIndex < 0) //yeah because negative index means end of polygon... + { + var fPoly = new FbxPolygon(); + fPoly.Vertices = fPolyVerts.ToArray(); + fPoly.Materials = nMaterials > 0 ? new FbxNode[nMaterials] : null; + fPolyVerts.Clear(); + fPolys.Add(fPoly); + if (fPoly.Vertices.Length > 3) + { } //more than 3 vertices in this poly! will need to split it into triangles!! but do it later since all poly verts are needed for next steps + } + } + + for (int i = 0; i < nNormals; i++) + { + var fnNorms = fnNormals[i]; + var arNorms = fnNorms["Normals"]?.Value as double[]; + var aiNorms = fnNorms["NormalIndex"]?.Value as int[]; + if (!IsByPolygonVertexMapType(fnNorms)) + { continue; } + var indexed = IsIndexToDirectRefType(fnNorms); + if (indexed && (aiNorms == null)) + { continue; } //need the index array if it's IndexToDirect! + int j = 0; + foreach (var fPoly in fPolys) + { + foreach (var fVert in fPoly.Vertices) + { + var ai = indexed ? aiNorms[j] : j; + fVert.Normals[i] = GetVector3FromDoubleArray(arNorms, ai); + j++; + } + } + } + for (int i = 0; i < nBinormals; i++) + { + var fnBinorms = fnBinormals[i]; + var arBinorms = fnBinorms["Binormals"]?.Value as double[]; + var aiBinorms = fnBinorms["BinormalIndex"]?.Value as int[]; + if (!IsByPolygonVertexMapType(fnBinorms)) + { continue; } + var indexed = IsIndexToDirectRefType(fnBinorms); + if (indexed && (aiBinorms == null)) + { continue; } //need the index array if it's IndexToDirect! + int j = 0; + foreach (var fPoly in fPolys) + { + foreach (var fVert in fPoly.Vertices) + { + var ai = indexed ? aiBinorms[j] : j; + fVert.Binormals[i] = GetVector3FromDoubleArray(arBinorms, ai); + j++; + } + } + } + for (int i = 0; i < nTangents; i++) + { + var fnTangs = fnTangents[i]; + var arTangs = fnTangs["Tangents"]?.Value as double[]; + var aiTangs = fnTangs["TangentIndex"]?.Value as int[]; + if (!IsByPolygonVertexMapType(fnTangs)) + { continue; } + var indexed = IsIndexToDirectRefType(fnTangs); + if (indexed && (aiTangs == null)) + { continue; } //need the index array if it's IndexToDirect! + int j = 0; + foreach (var fPoly in fPolys) + { + foreach (var fVert in fPoly.Vertices) + { + var ai = indexed ? aiTangs[j] : j; + fVert.Tangents[i] = GetVector3FromDoubleArray(arTangs, ai); + j++; + } + } + } + for (int i = 0; i < nTexcoords; i++) + { + var fnTexcs = fnTexcoords[i]; + var arTexcs = fnTexcs["UV"]?.Value as double[]; + var aiTexcs = fnTexcs["UVIndex"]?.Value as int[]; + if (!IsByPolygonVertexMapType(fnTexcs)) + { continue; } + var indexed = IsIndexToDirectRefType(fnTexcs); + if (indexed && (aiTexcs == null)) + { continue; } //need the index array if it's IndexToDirect! + int j = 0; + foreach (var fPoly in fPolys) + { + foreach (var fVert in fPoly.Vertices) + { + var ai = indexed ? aiTexcs[j] : j; + fVert.Texcoords[i] = GetVector2FromDoubleArray(arTexcs, ai); + j++; + } + } + } + for (int i = 0; i < nColours; i++) + { + var fnCols = fnColours[i]; + var arCols = fnCols["Colors"]?.Value as double[]; + var aiCols = fnCols["ColorIndex"]?.Value as int[]; + if (!IsByPolygonVertexMapType(fnCols)) + { continue; } + var indexed = IsIndexToDirectRefType(fnCols); + if (indexed && (aiCols == null)) + { continue; } //need the index array if it's IndexToDirect! + int j = 0; + foreach (var fPoly in fPolys) + { + foreach (var fVert in fPoly.Vertices) + { + var ai = indexed ? aiCols[j] : j; + fVert.Colours[i] = GetVector4FromDoubleArray(arCols, ai); + j++; + } + } + } + for (int i = 0; i < nMaterials; i++) + { + var fnMats = fnMaterials[i]; + var arMats = fnMats["Materials"]?.Value as int[]; + var mapType = fnMats["MappingInformationType"]?.Value as string; + var refType = fnMats["ReferenceInformationType"]?.Value as string; + var allSame = false; + switch (mapType) + { + case "ByPolygon": break; + case "AllSame": allSame = true; break; + default: + continue; + } + switch (refType) + { + case "IndexToDirect": break; + default: + continue; + } + for (int j = 0; j < fPolys.Count; j++) + { + var fPoly = fPolys[j]; + var iMat = allSame ? arMats[0] : arMats[j]; + fPoly.Materials[i] = matnodes[iMat]; + + //group all the polygons by material... + var matPolys = fPolysByMat[iMat]; + if (matPolys == null) + { + matPolys = new List(); + fPolysByMat[iMat] = matPolys; + } + matPolys.Add(fPoly); + } + } + + + + + var dModel = new DrawableModel(); + + var dGeoms = new List(); + var dGeomAABBs = new List(); + var dModelAABB = new AABB_s(); + for (int i = 0; i < fPolysByMat.Length; i++) + { + AABB_s dGeomAABB; + var dGeom = TryConvertGeometry(fPolysByMat[i], matnodes[i], out dGeomAABB); + if (dGeom != null) + { + dGeoms.Add(dGeom); + dGeomAABBs.Add(dGeomAABB); + } + } + if (dGeomAABBs.Count > 1)//need to include whole model AABB first, if more than one geometry.. + { + var dGeomAABBs2 = new List(); + dModelAABB.Min = new Vector4(float.MaxValue); + dModelAABB.Max = new Vector4(float.MinValue); + foreach (var aabb in dGeomAABBs) + { + dModelAABB.Min = Vector4.Min(dModelAABB.Min, aabb.Min); + dModelAABB.Max = Vector4.Max(dModelAABB.Max, aabb.Max); + } + dGeomAABBs2.Add(dModelAABB); + dGeomAABBs2.AddRange(dGeomAABBs); + dGeomAABBs = dGeomAABBs2; + } + + + dModel.VFT = 1080101496;//is this needed? + dModel.Unknown_4h = 1; + dModel.RenderMaskFlags = 0x00FF; //GIMS "Mask" + dModel.Geometries = new ResourcePointerArray64(); + dModel.Geometries.data_items = dGeoms.ToArray(); + dModel.GeometriesCount1 = (ushort)dGeoms.Count; + dModel.GeometriesCount2 = (ushort)dGeoms.Count; + dModel.GeometriesCount3 = (ushort)dGeoms.Count; + dModel.BoundsData = dGeomAABBs.ToArray(); + //shader mappings array will be added when adding models to drawable. + + + + var fModel = new FbxModel(); + fModel.Name = (mnode.Properties.Count > 1) ? (mnode.Properties[1] as string)?.Replace("Model::", "") : null; + fModel.Node = mnode; + fModel.Model = dModel; + + return fModel; + } + + private DrawableGeometry TryConvertGeometry(List fPolys, FbxNode matNode, out AABB_s aabb) + { + aabb = new AABB_s(); + + if (matNode == null) return null; + if (fPolys == null) return null; + if (fPolys.Count == 0) return null; + + + var dShader = TryConvertMaterial(matNode); + var dVertDecl = GetVertexDeclaration(dShader); + + var vDict = new Dictionary();//TODO:use final vertex data instead of FbxVertex!!! + var vList = new List(); + var iList = new List(); + + foreach (var fPoly in fPolys) + { + if (fPoly.Vertices == null) continue; + if (vList.Count >= 65535) + break;//too many vertices in this geometry!! + + ushort i0 = 0;//first generated index + ushort iP = 0;//previous generated index + ushort iN = 0;//current index + for (int v = 0; v < fPoly.Vertices.Length; v++) + { + var vert = fPoly.Vertices[v]; + vert.GenVertexBytes(dVertDecl); + + if (!vDict.TryGetValue(vert, out iN)) + { + iN = (ushort)vList.Count; + vDict[vert] = iN; + vList.Add(vert); + } + else + { }//found identical vertex, use its index + if (v == 0) i0 = iN; + if (v < 3) //first triangle + { + iList.Add(iN); + } + else //for each extra vertex, make triangle from v0, vN-1, vN - assumes convex polygon!! + { + iList.Add(i0); + iList.Add(iP); + iList.Add(iN); + } + iP = iN; + } + } + + + var vStride = dVertDecl.Stride; + var vBytes = new byte[vList.Count * vStride]; + for (int i = 0; i < vList.Count; i++) + { + var v = vList[i].Bytes; + var o = i * vStride; + for (int j = 0; j < vStride; j++) + { + vBytes[o + j] = v[j]; + } + } + + if (vList.Count > 0) + { + aabb.Min = new Vector4(float.MaxValue); + aabb.Max = new Vector4(float.MinValue); + foreach (var vert in vList) + { + var v = new Vector4(vert.Position, vert.Position.X); + aabb.Min = Vector4.Min(aabb.Min, v); + aabb.Max = Vector4.Max(aabb.Max, v); + } + } + + + var vData = new VertexData(); + vData.info = dVertDecl; + vData.VertexType = (VertexType)dVertDecl.Flags; + vData.VertexStride = dVertDecl.Stride; + vData.VertexCount = vList.Count; + vData.VertexBytes = vBytes; + + var vBuff = new VertexBuffer(); + vBuff.Data1 = vData; + vBuff.Data2 = vData; + vBuff.Info = dVertDecl; + vBuff.VertexCount = (uint)vList.Count; + vBuff.VertexStride = vStride; + vBuff.VFT = 1080153064;//is this needed? + vBuff.Unknown_4h = 1; + + var iBuff = new IndexBuffer(); + iBuff.IndicesCount = (uint)iList.Count; + iBuff.Indices = iList.ToArray(); + iBuff.VFT = 1080111576;//is this needed? + iBuff.Unknown_4h = 1; + + + var dGeom = new DrawableGeometry(); + dGeom.Shader = dShader; + dGeom.VertexData = vData; + dGeom.VertexBuffer = vBuff; + dGeom.IndexBuffer = iBuff; + dGeom.VFT = 1080133736;//is this needed? + dGeom.Unknown_4h = 1; + dGeom.IndicesCount = (uint)iList.Count; + dGeom.TrianglesCount = (uint)iList.Count / 3; + dGeom.VerticesCount = (ushort)vList.Count; + dGeom.Unknown_62h = 3; //indices per triangle..? + dGeom.VertexStride = vStride; + dGeom.BoneIdsCount = 0;//todo: bones + + + return dGeom; + } + + private ShaderFX TryConvertMaterial(FbxNode matNode) + { + var shader = new ShaderFX(); + + var spsName = "default"; + var texConns = new List(); + var texNames = new List(); + + #region 3dsmax/GIMS properties + //var floatValueNames = new List(); + //var floatValues = new List(); + //var texValueNames = new List(); + //var texValues = new List(); + //var matProps = matNode["Properties70"]; + //foreach (var matProp in matProps.Nodes)//currently broken due to GIMS not doing things right + //{ + // if (matProp == null) continue; + // if (matProp.Name != "P") continue; + // var propStr = GetStringFromObjectList(matProp.Properties, 4); + // var propId = matProp.Value as string; + // if (propId == null) continue; + // if (propId == "3dsMax|params|SPSName") spsName = propStr?.ToLowerInvariant() ?? "default"; + // if (propId.StartsWith("3dsMax|params|FloatValueNames|FloatValueNames")) floatValueNames.Add(propStr); + // if (propId.StartsWith("3dsMax|params|FloatValues|FloatValues")) floatValues.Add(GetVector4FromObjectList(matProp.Properties, 4)); + // if (propId.StartsWith("3dsMax|params|TexValueNames|TexValueNames")) texValueNames.Add(propStr); + // if (propId.StartsWith("3dsMax|params|TexValues|TexValues")) texValues.Add(matProp); + //} + #endregion + + foreach (var conn in matNode.Connections) + { + if (conn.Name == "Texture") + { + texConns.Add(conn); + var texName = GetStringFromObjectList(conn.Properties, 1)?.Replace("Texture::", ""); + var ftexName = conn["FileName"]?.Value as string; + if (ftexName != null) + { + try + { + texName = Path.GetFileNameWithoutExtension(ftexName); + } + catch + { } + } + texNames.Add(texName); + } + } + + if (texNames.Count > 1) + { + spsName = "normal"; + } + + var spsFileName = spsName + ".sps"; + + shader.Name = JenkHash.GenHash(spsName); + shader.FileName = JenkHash.GenHash(spsFileName); + + shader.ParametersList = new ShaderParametersBlock(); + var paramsBlock = shader.ParametersList; + var pNames = new List(); + var pVals = new List(); + + + shader.Unknown_Ch = 0; + shader.RenderBucket = 0; + shader.Unknown_12h = 32768;//shrugs + shader.Unknown_1Ch = 0; + shader.Unknown_24h = 0; + shader.Unknown_26h = 0; + shader.Unknown_28h = 0; + shader.Unknown_2Ch = 0; + + + switch (spsName) + { + default: + case "default": + //shader.RenderBucket = 3; + //shader.ParameterSize = 208; + //shader.ParameterDataSize = 272; + AddShaderParam(pNames, pVals, MetaName.DiffuseSampler, GetTextureBaseParam(texNames, 0));//assume first texture is diffuse... + AddShaderParam(pNames, pVals, MetaName.matMaterialColorScale, new Vector4(1, 0, 0, 1)); + AddShaderParam(pNames, pVals, MetaName.HardAlphaBlend, new Vector4(0, 0, 0, 0)); + AddShaderParam(pNames, pVals, MetaName.useTessellation, new Vector4(0, 0, 0, 0)); + AddShaderParam(pNames, pVals, MetaName.wetnessMultiplier, new Vector4(1, 0, 0, 0)); + AddShaderParam(pNames, pVals, MetaName.globalAnimUV1, new Vector4(0, 1, 0, 0)); + AddShaderParam(pNames, pVals, MetaName.globalAnimUV0, new Vector4(1, 0, 0, 0)); + break; + case "normal": + //shader.RenderBucket = 0; + //shader.ParameterSize = 320; + //shader.ParameterDataSize = 400; + AddShaderParam(pNames, pVals, MetaName.DiffuseSampler, GetTextureBaseParam(texNames, 0));//assume first texture is diffuse... + AddShaderParam(pNames, pVals, MetaName.BumpSampler, GetTextureBaseParam(texNames, 1));//assume 2nd texture is normalmap.. + AddShaderParam(pNames, pVals, MetaName.HardAlphaBlend, new Vector4(1, 0, 0, 0)); + AddShaderParam(pNames, pVals, MetaName.useTessellation, new Vector4(0, 0, 0, 0)); + AddShaderParam(pNames, pVals, MetaName.wetnessMultiplier, new Vector4(1, 0, 0, 0)); + AddShaderParam(pNames, pVals, MetaName.bumpiness, new Vector4(1, 0, 0, 0)); + AddShaderParam(pNames, pVals, MetaName.specularIntensityMult, new Vector4(0.5f, 0, 0, 0)); + AddShaderParam(pNames, pVals, MetaName.specularFalloffMult, new Vector4(20, 0, 0, 0));//too metallic? + AddShaderParam(pNames, pVals, MetaName.specularFresnel, new Vector4(0.9f, 0, 0, 0)); + AddShaderParam(pNames, pVals, MetaName.globalAnimUV1, new Vector4(0, 1, 0, 0)); + AddShaderParam(pNames, pVals, MetaName.globalAnimUV0, new Vector4(1, 0, 0, 0)); + break; + } + + for (int i = 0; i < pVals.Count; i++) + { + var pVal = pVals[i]; + if (pVal.DataType == 1) + { + pVal.Unknown_1h = (byte)(160 + ((pVals.Count - 1) - i));//seriously wtf is this and why + } + } + + paramsBlock.Hashes = pNames.ToArray(); + paramsBlock.Parameters = pVals.ToArray(); + paramsBlock.Count = pVals.Count; + + shader.ParameterSize = paramsBlock.ParametersSize; + shader.ParameterDataSize = (ushort)(paramsBlock.BlockLength + 36);//but why +36? + shader.ParameterCount = (byte)pVals.Count; + shader.TextureParametersCount = paramsBlock.TextureParamsCount; + shader.RenderBucketMask = (1u << shader.RenderBucket) | 0xFF00; + + + return shader; + } + + private TextureBase GetTextureBaseParam(List texNames, int index) + { + var name = "givemechecker"; + if (texNames.Count > index) + { + var nameval = texNames[index]; + if (nameval != null) + { + name = texNames[index]; + } + } + var texParam = new TextureBase(); + texParam.Unknown_4h = 1; + texParam.Unknown_30h = 131073;//wtf is this? 2x shorts, 0x00020001 + texParam.Name = name; + texParam.NameHash = JenkHash.GenHash(name.ToLowerInvariant()); + return texParam; + } + private void AddShaderParam(List paramNames, List paramValues, MetaName paramName, object paramValue) + { + var p = new ShaderParameter(); + p.Data = paramValue; + if (paramValue is TextureBase) + { + p.DataType = 0; + p.Unknown_1h = (byte)((paramNames.Count > 0) ? paramNames.Count + 1 : 0);//seriously wtf is this? + } + else if (paramValue is Vector4) + { + p.DataType = 1; + } + else + { } + + paramNames.Add(paramName); + paramValues.Add(p); + } + + private VertexDeclaration GetVertexDeclaration(ShaderFX shader) + { + var d = new VertexDeclaration(); + d.Types = 8598872888530528662; + d.Unknown_6h = 0; + + switch (shader.Name) + { + default: + case 3839837909: //default + d.Flags = 89; + d.Stride = 36; + d.Count = 4; + break; + case 1330140418: //normal + d.Flags = 16473; + d.Stride = 52; + d.Count = 5; + break; + } + + return d; + } + + + private bool IsByPolygonVertexMapType(FbxNode node) + { + var mapType = node["MappingInformationType"]?.Value as string; + if (mapType != "ByPolygonVertex") + { return false; } //any other types? + return true; + } + private bool IsIndexToDirectRefType(FbxNode node) + { + var refType = node["ReferenceInformationType"]?.Value as string; + var indexed = false; + switch (refType) + { + case "Direct": break; + case "IndexToDirect": indexed = true; break; + default: + break;//shouldn't be possible + } + return indexed; + } + + private Vector2 GetVector2FromDoubleArray(double[] arr, int i) + { + var aIndX = i * 2; + var aIndY = aIndX + 1; + var pX = aIndX < arr.Length ? arr[aIndX] : 0; + var pY = aIndY < arr.Length ? arr[aIndY] : 0; + return new Vector2((float)pX, (float)pY); + } + private Vector3 GetVector3FromDoubleArray(double[] arr, int i) + { + var aIndX = i * 3; + var aIndY = aIndX + 1; + var aIndZ = aIndX + 2; + var pX = aIndX < arr.Length ? arr[aIndX] : 0; + var pY = aIndY < arr.Length ? arr[aIndY] : 0; + var pZ = aIndZ < arr.Length ? arr[aIndZ] : 0; + return new Vector3((float)pX, (float)pY, (float)pZ); + } + private Vector4 GetVector4FromDoubleArray(double[] arr, int i) + { + var aIndX = i * 4; + var aIndY = aIndX + 1; + var aIndZ = aIndX + 2; + var aIndW = aIndX + 3; + var pX = aIndX < arr.Length ? arr[aIndX] : 0; + var pY = aIndY < arr.Length ? arr[aIndY] : 0; + var pZ = aIndZ < arr.Length ? arr[aIndZ] : 0; + var pW = aIndW < arr.Length ? arr[aIndW] : 0; + return new Vector4((float)pX, (float)pY, (float)pZ, (float)pW); + } + private Vector4 GetVector4FromObjectList(List list, int i) + { + var aIndX = i; + var aIndY = aIndX + 1; + var aIndZ = aIndX + 2; + var aIndW = aIndX + 3; + var pX = aIndX < list.Count ? list[aIndX] : 0; + var pY = aIndY < list.Count ? list[aIndY] : 0; + var pZ = aIndZ < list.Count ? list[aIndZ] : 0; + var pW = aIndW < list.Count ? list[aIndW] : 0; + var r = Vector4.Zero; + if (pX is double) r.X = (float)(double)pX; + if (pY is double) r.Y = (float)(double)pY; + if (pZ is double) r.Z = (float)(double)pZ; + if (pW is double) r.W = (float)(double)pW; + return r; + } + private string GetStringFromObjectList(List list, int i) + { + return (list.Count > i) ? list[i] as string : string.Empty; + } + + } + + + public class FbxModel + { + public string Name { get; set; } + public FbxNode Node { get; set; } + public DrawableModel Model { get; set; } + + public override string ToString() + { + return Name; + } + } + + public class FbxPolygon + { + public FbxVertex[] Vertices { get; set; } + public FbxNode[] Materials { get; set; } + } + + public class FbxVertex : IEquatable + { + public Vector3 Position { get; set; } + public Vector3[] Normals { get; set; } + public Vector3[] Binormals { get; set; } + public Vector3[] Tangents { get; set; } + public Vector2[] Texcoords { get; set; } + public Vector4[] Colours { get; set; } + public byte[] Bytes { get; set; } + + public void GenVertexBytes(VertexDeclaration decl) + { + Bytes = new byte[decl.Stride]; + + switch ((VertexType)decl.Flags) + { + default: + case VertexType.Default://PNCT + WriteBytes(Position, 0); + WriteBytes((Normals?.Length > 0) ? Normals[0] : Vector3.UnitZ, 12); + WriteBytes(GetColourInt((Colours?.Length > 0) ? Colours[0] : Vector4.One), 24); + WriteBytes((Texcoords?.Length > 0) ? Texcoords[0] : Vector2.Zero, 28); + break; + case VertexType.DefaultEx://PNCTX + WriteBytes(Position, 0); + WriteBytes((Normals?.Length > 0) ? Normals[0] : Vector3.UnitZ, 12); + WriteBytes(GetColourInt((Colours?.Length > 0) ? Colours[0] : Vector4.One), 24); + WriteBytes((Texcoords?.Length > 0) ? Texcoords[0] : Vector2.Zero, 28); + WriteBytes(new Vector4((Tangents?.Length > 0) ? Tangents[0] : Vector3.UnitX, 0), 36); + //WriteBytes(new Vector4((Binormals?.Length > 0) ? Binormals[0] : Vector3.UnitX, 0), 36); + break; + } + + + } + private void WriteBytes(T val, int offset) where T : struct + { + var data = MetaTypes.ConvertToBytes(val); + for (int i = 0; i < data.Length; i++) + { + Bytes[offset + i] = data[i]; + } + } + private int GetColourInt(Vector4 c) + { + Color v = new Color(c); + return v.ToRgba(); + } + + + public override bool Equals(object obj) + { + return Equals(obj as FbxVertex); + } + public bool Equals(FbxVertex other) + { + return (other != null) + && ((Bytes == null) ? (other.Bytes == null) : Bytes.SequenceEqual(other.Bytes)); + //&& Position.Equals(other.Position) + //&& ((Normals == null) ? (other.Normals == null) : Normals.SequenceEqual(other.Normals)) + //&& ((Binormals == null) ? (other.Binormals == null) : Binormals.SequenceEqual(other.Binormals)) + //&& ((Tangents == null) ? (other.Tangents == null) : Tangents.SequenceEqual(other.Tangents)) + //&& ((Texcoords == null) ? (other.Texcoords == null) : Texcoords.SequenceEqual(other.Texcoords)) + //&& ((Colours == null) ? (other.Colours == null) : Colours.SequenceEqual(other.Colours)); + } + public override int GetHashCode() + { + var hashCode = -907793594; + if (Bytes != null) hashCode = hashCode * -1521134295 + ((IStructuralEquatable)Bytes).GetHashCode(EqualityComparer.Default); + //hashCode = hashCode * -1521134295 + Position.GetHashCode(); + //if (Normals != null) hashCode = hashCode * -1521134295 + ((IStructuralEquatable)Normals).GetHashCode(EqualityComparer.Default); + //if (Binormals != null) hashCode = hashCode * -1521134295 + ((IStructuralEquatable)Binormals).GetHashCode(EqualityComparer.Default); + //if (Tangents != null) hashCode = hashCode * -1521134295 + ((IStructuralEquatable)Tangents).GetHashCode(EqualityComparer.Default); + //if (Texcoords != null) hashCode = hashCode * -1521134295 + ((IStructuralEquatable)Texcoords).GetHashCode(EqualityComparer.Default); + //if (Colours != null) hashCode = hashCode * -1521134295 + ((IStructuralEquatable)Colours).GetHashCode(EqualityComparer.Default); + return hashCode; + } + } + +} diff --git a/CodeWalker.Core/World/Space.cs b/CodeWalker.Core/World/Space.cs index 0454e99..ae2b6ef 100644 --- a/CodeWalker.Core/World/Space.cs +++ b/CodeWalker.Core/World/Space.cs @@ -432,6 +432,7 @@ namespace CodeWalker.World } foreach (var dlcrpf in GameFileCache.DlcActiveRpfs) //load nodes from current dlc rpfs { + if (dlcrpf.Path.StartsWith("x64")) continue; //don't override update.rpf YNDs with x64 ones! *hack foreach (var rpffile in dlcrpf.Children) { AddRpfYnds(rpffile, yndentries); diff --git a/CodeWalker.csproj b/CodeWalker.csproj index 7221417..c03a77b 100644 --- a/CodeWalker.csproj +++ b/CodeWalker.csproj @@ -271,6 +271,12 @@ + + Form + + + ImportFbxForm.cs + Form @@ -640,6 +646,9 @@ YwrForm.cs + + ImportFbxForm.cs + JenkGenForm.cs diff --git a/ExploreForm.Designer.cs b/ExploreForm.Designer.cs index d3da7e2..8e5906f 100644 --- a/ExploreForm.Designer.cs +++ b/ExploreForm.Designer.cs @@ -41,6 +41,7 @@ this.EditExtractRawMenu = new System.Windows.Forms.ToolStripMenuItem(); this.EditExtractAllMenu = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); + this.EditImportFbxMenu = new System.Windows.Forms.ToolStripMenuItem(); this.EditImportXmlMenu = new System.Windows.Forms.ToolStripMenuItem(); this.EditImportRawMenu = new System.Windows.Forms.ToolStripMenuItem(); this.EditImportMenuSeparator = new System.Windows.Forms.ToolStripSeparator(); @@ -115,6 +116,7 @@ this.ListContextNewMenu = new System.Windows.Forms.ToolStripMenuItem(); this.ListContextNewFolderMenu = new System.Windows.Forms.ToolStripMenuItem(); this.ListContextNewRpfArchiveMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.ListContextImportFbxMenu = new System.Windows.Forms.ToolStripMenuItem(); this.ListContextImportXmlMenu = new System.Windows.Forms.ToolStripMenuItem(); this.ListContextImportRawMenu = new System.Windows.Forms.ToolStripMenuItem(); this.ListContextImportSeparator = new System.Windows.Forms.ToolStripSeparator(); @@ -196,6 +198,7 @@ this.EditExtractRawMenu, this.EditExtractAllMenu, this.toolStripSeparator4, + this.EditImportFbxMenu, this.EditImportXmlMenu, this.EditImportRawMenu, this.EditImportMenuSeparator, @@ -267,6 +270,14 @@ this.toolStripSeparator4.Name = "toolStripSeparator4"; this.toolStripSeparator4.Size = new System.Drawing.Size(204, 6); // + // EditImportFbxMenu + // + this.EditImportFbxMenu.Name = "EditImportFbxMenu"; + this.EditImportFbxMenu.Size = new System.Drawing.Size(207, 22); + this.EditImportFbxMenu.Text = "Import FBX..."; + this.EditImportFbxMenu.Visible = false; + this.EditImportFbxMenu.Click += new System.EventHandler(this.EditImportFbxMenu_Click); + // // EditImportXmlMenu // this.EditImportXmlMenu.Image = ((System.Drawing.Image)(resources.GetObject("EditImportXmlMenu.Image"))); @@ -383,21 +394,21 @@ // ViewLargeIconsMenu // this.ViewLargeIconsMenu.Name = "ViewLargeIconsMenu"; - this.ViewLargeIconsMenu.Size = new System.Drawing.Size(152, 22); + this.ViewLargeIconsMenu.Size = new System.Drawing.Size(134, 22); this.ViewLargeIconsMenu.Text = "Large Icons"; this.ViewLargeIconsMenu.Click += new System.EventHandler(this.ViewLargeIconsMenu_Click); // // ViewSmallIconsMenu // this.ViewSmallIconsMenu.Name = "ViewSmallIconsMenu"; - this.ViewSmallIconsMenu.Size = new System.Drawing.Size(152, 22); + this.ViewSmallIconsMenu.Size = new System.Drawing.Size(134, 22); this.ViewSmallIconsMenu.Text = "Small Icons"; this.ViewSmallIconsMenu.Click += new System.EventHandler(this.ViewSmallIconsMenu_Click); // // ViewListMenu // this.ViewListMenu.Name = "ViewListMenu"; - this.ViewListMenu.Size = new System.Drawing.Size(152, 22); + this.ViewListMenu.Size = new System.Drawing.Size(134, 22); this.ViewListMenu.Text = "List"; this.ViewListMenu.Click += new System.EventHandler(this.ViewListMenu_Click); // @@ -406,14 +417,14 @@ this.ViewDetailsMenu.Checked = true; this.ViewDetailsMenu.CheckState = System.Windows.Forms.CheckState.Checked; this.ViewDetailsMenu.Name = "ViewDetailsMenu"; - this.ViewDetailsMenu.Size = new System.Drawing.Size(152, 22); + this.ViewDetailsMenu.Size = new System.Drawing.Size(134, 22); this.ViewDetailsMenu.Text = "Details"; this.ViewDetailsMenu.Click += new System.EventHandler(this.ViewDetailsMenu_Click); // // toolStripSeparator11 // this.toolStripSeparator11.Name = "toolStripSeparator11"; - this.toolStripSeparator11.Size = new System.Drawing.Size(149, 6); + this.toolStripSeparator11.Size = new System.Drawing.Size(131, 6); // // ViewThemeMenu // @@ -423,7 +434,7 @@ this.ViewThemeLightMenu, this.ViewThemeDarkMenu}); this.ViewThemeMenu.Name = "ViewThemeMenu"; - this.ViewThemeMenu.Size = new System.Drawing.Size(152, 22); + this.ViewThemeMenu.Size = new System.Drawing.Size(134, 22); this.ViewThemeMenu.Text = "Theme"; // // ViewThemeWindowsMenu @@ -431,28 +442,28 @@ this.ViewThemeWindowsMenu.Checked = true; this.ViewThemeWindowsMenu.CheckState = System.Windows.Forms.CheckState.Checked; this.ViewThemeWindowsMenu.Name = "ViewThemeWindowsMenu"; - this.ViewThemeWindowsMenu.Size = new System.Drawing.Size(152, 22); + this.ViewThemeWindowsMenu.Size = new System.Drawing.Size(123, 22); this.ViewThemeWindowsMenu.Text = "Windows"; this.ViewThemeWindowsMenu.Click += new System.EventHandler(this.ViewThemeWindowsMenu_Click); // // ViewThemeBlueMenu // this.ViewThemeBlueMenu.Name = "ViewThemeBlueMenu"; - this.ViewThemeBlueMenu.Size = new System.Drawing.Size(152, 22); + this.ViewThemeBlueMenu.Size = new System.Drawing.Size(123, 22); this.ViewThemeBlueMenu.Text = "Blue"; this.ViewThemeBlueMenu.Click += new System.EventHandler(this.ViewThemeBlueMenu_Click); // // ViewThemeLightMenu // this.ViewThemeLightMenu.Name = "ViewThemeLightMenu"; - this.ViewThemeLightMenu.Size = new System.Drawing.Size(152, 22); + this.ViewThemeLightMenu.Size = new System.Drawing.Size(123, 22); this.ViewThemeLightMenu.Text = "Light"; this.ViewThemeLightMenu.Click += new System.EventHandler(this.ViewThemeLightMenu_Click); // // ViewThemeDarkMenu // this.ViewThemeDarkMenu.Name = "ViewThemeDarkMenu"; - this.ViewThemeDarkMenu.Size = new System.Drawing.Size(152, 22); + this.ViewThemeDarkMenu.Size = new System.Drawing.Size(123, 22); this.ViewThemeDarkMenu.Text = "Dark"; this.ViewThemeDarkMenu.Click += new System.EventHandler(this.ViewThemeDarkMenu_Click); // @@ -891,6 +902,7 @@ this.ListContextExtractAllMenu, this.toolStripSeparator5, this.ListContextNewMenu, + this.ListContextImportFbxMenu, this.ListContextImportXmlMenu, this.ListContextImportRawMenu, this.ListContextImportSeparator, @@ -908,7 +920,7 @@ this.ListContextDefragmentSeparator, this.ListContextSelectAllMenu}); this.ListContextMenu.Name = "MainContextMenu"; - this.ListContextMenu.Size = new System.Drawing.Size(208, 442); + this.ListContextMenu.Size = new System.Drawing.Size(208, 464); // // ListContextViewMenu // @@ -995,6 +1007,13 @@ this.ListContextNewRpfArchiveMenu.Text = "RPF Archive..."; this.ListContextNewRpfArchiveMenu.Click += new System.EventHandler(this.ListContextNewRpfArchiveMenu_Click); // + // ListContextImportFbxMenu + // + this.ListContextImportFbxMenu.Name = "ListContextImportFbxMenu"; + this.ListContextImportFbxMenu.Size = new System.Drawing.Size(207, 22); + this.ListContextImportFbxMenu.Text = "Import FBX..."; + this.ListContextImportFbxMenu.Click += new System.EventHandler(this.ListContextImportFbxMenu_Click); + // // ListContextImportXmlMenu // this.ListContextImportXmlMenu.Image = ((System.Drawing.Image)(resources.GetObject("ListContextImportXmlMenu.Image"))); @@ -1326,5 +1345,7 @@ private System.Windows.Forms.ToolStripMenuItem ViewThemeDarkMenu; private WeifenLuo.WinFormsUI.Docking.VisualStudioToolStripExtender VSExtender; private System.Windows.Forms.ToolStripMenuItem ViewThemeWindowsMenu; + private System.Windows.Forms.ToolStripMenuItem ListContextImportFbxMenu; + private System.Windows.Forms.ToolStripMenuItem EditImportFbxMenu; } } \ No newline at end of file diff --git a/ExploreForm.cs b/ExploreForm.cs index 8525d7e..3793b3a 100644 --- a/ExploreForm.cs +++ b/ExploreForm.cs @@ -537,10 +537,11 @@ namespace CodeWalker var str = ic.ToString() + " item" + ((ic != 1) ? "s" : "") + " shown"; bool isitem = false; bool isfile = false; + bool issearch = CurrentFolder?.IsSearchResults ?? false; bool canview = false; bool canedit = false; bool canexportxml = false; - bool canimport = false; + bool canimport = EditMode && (CurrentFolder?.RpfFolder != null) && !issearch; if (sc != 0) { long bc = 0; @@ -578,6 +579,7 @@ namespace CodeWalker EditExtractRawMenu.Enabled = isfile; EditImportRawMenu.Visible = canimport; + EditImportFbxMenu.Visible = canimport; EditImportXmlMenu.Visible = canimport; EditImportMenuSeparator.Visible = canimport; @@ -689,6 +691,11 @@ namespace CodeWalker rpf.ScanStructure(UpdateStatus, UpdateErrorLog); + if (rpf.LastException != null) //incase of corrupted rpf (or renamed NG encrypted RPF) + { + continue; + } + node = CreateRpfTreeFolder(rpf, relpath, path); RecurseMainTreeViewRPF(node, allRpfs); @@ -1703,6 +1710,7 @@ namespace CodeWalker ListContextNewMenu.Visible = cancreate; ListContextImportRawMenu.Visible = canimport; + ListContextImportFbxMenu.Visible = canimport; ListContextImportXmlMenu.Visible = canimport; ListContextImportSeparator.Visible = cancreate; @@ -1747,6 +1755,7 @@ namespace CodeWalker MainListView.LabelEdit = enable; EnsureEditModeWarning(); + UpdateSelectionUI(); } private void EnsureEditModeWarning() @@ -2215,6 +2224,98 @@ namespace CodeWalker AddNewFolderTreeNode(node); } + } + private void ImportFbx() + { + if (!EditMode) return; + if (CurrentFolder?.IsSearchResults ?? false) return; + + + RpfDirectoryEntry parentrpffldr = CurrentFolder.RpfFolder; + if (parentrpffldr == null) + { + MessageBox.Show("No parent RPF folder selected! This shouldn't happen. Refresh the view and try again."); + return; + } + + if (!EnsureRpfValidEncryption()) return; + + + OpenFileDialog.Filter = "FBX Files|*.fbx"; + if (OpenFileDialog.ShowDialog(this) != DialogResult.OK) + { + return;//canceled + } + + var fpaths = OpenFileDialog.FileNames; + var fdict = new Dictionary(); + + foreach (var fpath in fpaths) + { +#if !DEBUG + try +#endif + { + if (!File.Exists(fpath)) + { + continue;//this shouldn't happen... + } + + var fi = new FileInfo(fpath); + var fname = fi.Name; + var fnamel = fname.ToLowerInvariant(); + var trimlength = 4; + + if (!fnamel.EndsWith(".fbx")) + { + MessageBox.Show(fname + ": Not an FBX file!", "Cannot import FBX"); + continue; + } + + fname = fname.Substring(0, fname.Length - trimlength); + + var data = File.ReadAllBytes(fpath); + fdict[fname] = data; + + } +#if !DEBUG + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Unable to read file " + fpath); + } +#endif + + } + + + var fbxForm = new ImportFbxForm(); + fbxForm.SetInputFiles(fdict); + fbxForm.ShowDialog(); + + if (fbxForm.DialogResult != DialogResult.OK) + { + return; //fbx import canceled + } + + var converted = fbxForm.GetOutputFiles(); + if (converted == null) + { + return; + } + + foreach (var kvp in converted) + { + var fname = kvp.Key; + var data = kvp.Value; + if (data != null) + { + RpfFile.CreateFile(parentrpffldr, fname, data); + } + } + + + RefreshMainListView(); + } private void ImportXml() { @@ -3413,6 +3514,11 @@ namespace CodeWalker NewRpfArchive(); } + private void ListContextImportFbxMenu_Click(object sender, EventArgs e) + { + ImportFbx(); + } + private void ListContextImportXmlMenu_Click(object sender, EventArgs e) { ImportXml(); @@ -3498,6 +3604,11 @@ namespace CodeWalker ExtractAll(); } + private void EditImportFbxMenu_Click(object sender, EventArgs e) + { + ImportFbx(); + } + private void EditImportXmlMenu_Click(object sender, EventArgs e) { ImportXml(); diff --git a/ExploreForm.resx b/ExploreForm.resx index 704ffb8..52c6b67 100644 --- a/ExploreForm.resx +++ b/ExploreForm.resx @@ -313,7 +313,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADo - HwAAAk1TRnQBSQFMAgEBGAEAARgBAQEYAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + HwAAAk1TRnQBSQFMAgEBGAEAATgBAQE4AQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAAXADAAEBAQABCAYAARwYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA diff --git a/Notice.txt b/Notice.txt index 2aa7ea8..3bbc04b 100644 --- a/Notice.txt +++ b/Notice.txt @@ -1,5 +1,5 @@  - Copyright(c) 2017 dexyfex + Copyright(c) 2017-2019 dexyfex @@ -55,3 +55,20 @@ SOFTWARE. + +/* + +Copyright (c) 2015 Hamish Milne + +"An FBX library for .NET" +Contains source code for FBX file format reading and writing from: +https://github.com/hamish-milne/FbxWriter +Published under GPL license, for full terms and conditions see the above link. + +*/ + + + + + + diff --git a/Rendering/Renderable.cs b/Rendering/Renderable.cs index 0f155ca..27cbe4d 100644 --- a/Rendering/Renderable.cs +++ b/Rendering/Renderable.cs @@ -238,7 +238,7 @@ namespace CodeWalker.Rendering if (hastransforms) { - int boneidx = (int)((model.Unk28h >> 24) & 0xFF); + int boneidx = (int)((model.SkeletonBinding >> 24) & 0xFF); Matrix trans = (boneidx < modeltransforms.Length) ? modeltransforms[boneidx] : Matrix.Identity; Bone bone = (hasbones && (boneidx < bones.Count)) ? bones[boneidx] : null; @@ -267,7 +267,7 @@ namespace CodeWalker.Rendering } } - if (((model.Unk28h >> 8) & 0xFF) > 0) //skin mesh? + if (((model.SkeletonBinding >> 8) & 0xFF) > 0) //skin mesh? { model.Transform = Matrix.Identity; } @@ -337,20 +337,16 @@ namespace CodeWalker.Rendering public AABB_s[] GeometryBounds; public long GeometrySize { get; private set; } - public uint Unk4h; - public uint Unk14h; - public uint Unk28h; - public uint Unk2Ch; //flags....... + public uint SkeletonBinding; + public uint RenderMaskFlags; //flags....... public bool UseTransform; public Matrix Transform; public void Init(DrawableModel dmodel) { - Unk4h = dmodel.Unknown_4h; - Unk14h = dmodel.Unknown_14h; - Unk28h = dmodel.Unknown_28h; - Unk2Ch = dmodel.Unknown_2Ch; //only the first byte of Unknown_2Ch seems be related to this + SkeletonBinding = dmodel.SkeletonBinding;//4th byte is bone index, 2nd byte for skin meshes + RenderMaskFlags = dmodel.RenderMaskFlags; //only the first byte seems be related to this DrawableModel = dmodel; diff --git a/Rendering/Renderer.cs b/Rendering/Renderer.cs index 1ca4576..21b1028 100644 --- a/Rendering/Renderer.cs +++ b/Rendering/Renderer.cs @@ -1904,7 +1904,7 @@ namespace CodeWalker.Rendering private bool RenderIsModelFinalRender(RenderableModel model) { - if ((model.Unk2Ch & 1) == 0) //smallest bit is proxy/"final render" bit? seems to work... + if ((model.RenderMaskFlags & 1) == 0) //smallest bit is proxy/"final render" bit? seems to work... { return renderproxies; } diff --git a/Rendering/ShaderManager.cs b/Rendering/ShaderManager.cs index e65e835..5b7096f 100644 --- a/Rendering/ShaderManager.cs +++ b/Rendering/ShaderManager.cs @@ -739,7 +739,7 @@ namespace CodeWalker.Rendering { var shader = geom.Geom.DrawableGeom.Shader; - var b = (shader!=null) ? shader.Unknown_11h : 0; //rage render bucket? + var b = (shader!=null) ? shader.RenderBucket : 0; //rage render bucket? var bucket = EnsureRenderBucket(b); diff --git a/Shaders/Common.hlsli b/Shaders/Common.hlsli index 569aa20..68bc413 100644 --- a/Shaders/Common.hlsli +++ b/Shaders/Common.hlsli @@ -32,7 +32,15 @@ float4 Unpack4x8UNF(uint v) float DepthFunc(float2 zw) { - return zw.x;// + return zw.x; + + ////this sort of works for reverse depth buffering, but has issues with vertices behind the near clip plane. + ////might need to adjust the viewproj matrix to fix that... + ////(for this to work, also need to change GpuBuffers.Clear,.ClearDepth and ShaderManager DepthComparison,RenderFinalPass) + //return max(0.001 / zw.x, 0); + + + //return zw.x * (0.1 + 0.00001*(abs(zw.y))); //return zw.x * (0.1 + 0.00001*((zw.y))); diff --git a/Tools/ImportFbxForm.Designer.cs b/Tools/ImportFbxForm.Designer.cs new file mode 100644 index 0000000..4ce3d52 --- /dev/null +++ b/Tools/ImportFbxForm.Designer.cs @@ -0,0 +1,145 @@ +namespace CodeWalker +{ + partial class ImportFbxForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ImportFbxForm)); + this.CancelThisButton = new System.Windows.Forms.Button(); + this.ImportButton = new System.Windows.Forms.Button(); + this.FbxFilesListBox = new System.Windows.Forms.ListBox(); + this.label1 = new System.Windows.Forms.Label(); + this.OutputTypeCombo = new System.Windows.Forms.ComboBox(); + this.label2 = new System.Windows.Forms.Label(); + this.StatusLabel = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // CancelThisButton + // + this.CancelThisButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.CancelThisButton.Location = new System.Drawing.Point(392, 310); + this.CancelThisButton.Name = "CancelThisButton"; + this.CancelThisButton.Size = new System.Drawing.Size(75, 23); + this.CancelThisButton.TabIndex = 4; + this.CancelThisButton.Text = "Cancel"; + this.CancelThisButton.UseVisualStyleBackColor = true; + this.CancelThisButton.Click += new System.EventHandler(this.CancelThisButton_Click); + // + // ImportButton + // + this.ImportButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.ImportButton.Location = new System.Drawing.Point(473, 310); + this.ImportButton.Name = "ImportButton"; + this.ImportButton.Size = new System.Drawing.Size(75, 23); + this.ImportButton.TabIndex = 3; + this.ImportButton.Text = "Import"; + this.ImportButton.UseVisualStyleBackColor = true; + this.ImportButton.Click += new System.EventHandler(this.ImportButton_Click); + // + // FbxFilesListBox + // + this.FbxFilesListBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.FbxFilesListBox.FormattingEnabled = true; + this.FbxFilesListBox.Location = new System.Drawing.Point(12, 25); + this.FbxFilesListBox.Name = "FbxFilesListBox"; + this.FbxFilesListBox.Size = new System.Drawing.Size(246, 121); + this.FbxFilesListBox.TabIndex = 5; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(94, 13); + this.label1.TabIndex = 6; + this.label1.Text = "FBX files to import:"; + // + // OutputTypeCombo + // + this.OutputTypeCombo.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.OutputTypeCombo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.OutputTypeCombo.FormattingEnabled = true; + this.OutputTypeCombo.Items.AddRange(new object[] { + "YDR"}); + this.OutputTypeCombo.Location = new System.Drawing.Point(427, 25); + this.OutputTypeCombo.Name = "OutputTypeCombo"; + this.OutputTypeCombo.Size = new System.Drawing.Size(121, 21); + this.OutputTypeCombo.TabIndex = 7; + // + // label2 + // + this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(356, 28); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(65, 13); + this.label2.TabIndex = 8; + this.label2.Text = "Output type:"; + // + // StatusLabel + // + this.StatusLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.StatusLabel.AutoSize = true; + this.StatusLabel.Location = new System.Drawing.Point(12, 315); + this.StatusLabel.Name = "StatusLabel"; + this.StatusLabel.Size = new System.Drawing.Size(81, 13); + this.StatusLabel.TabIndex = 9; + this.StatusLabel.Text = "Ready to import"; + // + // ImportFbxForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(560, 345); + this.Controls.Add(this.StatusLabel); + this.Controls.Add(this.label2); + this.Controls.Add(this.OutputTypeCombo); + this.Controls.Add(this.label1); + this.Controls.Add(this.FbxFilesListBox); + this.Controls.Add(this.CancelThisButton); + this.Controls.Add(this.ImportButton); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "ImportFbxForm"; + this.Text = "Import FBX - CodeWalker by dexyfex"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button CancelThisButton; + private System.Windows.Forms.Button ImportButton; + private System.Windows.Forms.ListBox FbxFilesListBox; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ComboBox OutputTypeCombo; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label StatusLabel; + } +} \ No newline at end of file diff --git a/Tools/ImportFbxForm.cs b/Tools/ImportFbxForm.cs new file mode 100644 index 0000000..f277c65 --- /dev/null +++ b/Tools/ImportFbxForm.cs @@ -0,0 +1,133 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CodeWalker +{ + public partial class ImportFbxForm : Form + { + + private Dictionary InputFiles { get; set; } + private Dictionary OutputFiles { get; set; } + + public ImportFbxForm() + { + InitializeComponent(); + DialogResult = DialogResult.Cancel; + OutputTypeCombo.Text = "YDR"; + } + + + public void SetInputFiles(Dictionary fdict) + { + InputFiles = fdict; + + FbxFilesListBox.Items.Clear(); + foreach (var kvp in fdict) + { + FbxFilesListBox.Items.Add(kvp.Key); + } + + } + + public Dictionary GetOutputFiles() + { + return OutputFiles; + } + + + private void ConvertFiles() + { + if (InputFiles == null) return; + + Cursor = Cursors.WaitCursor; + + + Task.Run(() => + { + + OutputFiles = new Dictionary(); + + foreach (var kvp in InputFiles) + { + var fname = kvp.Key; + var idata = kvp.Value; + + UpdateStatus("Converting " + fname + "..."); + + FbxConverter fc = new FbxConverter(); + + var ydr = fc.ConvertToYdr(fname, idata); + + + if (ydr == null) + { + UpdateStatus("Converting " + fname + " failed!"); //TODO: error message + + continue; //something went wrong.. + } + + byte[] odata = ydr.Save(); + + OutputFiles.Add(fname + ".ydr", odata); + } + + UpdateStatus("Process complete."); + + ConvertComplete(); + + }); + } + + private void ConvertComplete() + { + try + { + if (InvokeRequired) + { + BeginInvoke(new Action(() => { ConvertComplete(); })); + } + else + { + Cursor = Cursors.Default; + DialogResult = DialogResult.OK; + Close(); + } + } + catch { } + } + + public void UpdateStatus(string text) + { + try + { + if (InvokeRequired) + { + BeginInvoke(new Action(() => { UpdateStatus(text); })); + } + else + { + StatusLabel.Text = text; + } + } + catch { } + } + + + private void CancelThisButton_Click(object sender, EventArgs e) + { + Close(); + } + + private void ImportButton_Click(object sender, EventArgs e) + { + ConvertFiles(); + } + } +} diff --git a/Tools/ImportFbxForm.resx b/Tools/ImportFbxForm.resx new file mode 100644 index 0000000..1431f6b --- /dev/null +++ b/Tools/ImportFbxForm.resx @@ -0,0 +1,409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAMAICAAAAAAGACoDAAANgAAABAQAAAAABgAaAMAAN4MAABAQAAAAAAYACgyAABGEAAAKAAAACAA + AABAAAAAAQAYAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/u3v+Pn6//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7+/vX3/rzA3OHl9fz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7//+zv+3Z6qcLI5Pr7/wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP7+/+br+15in6+33vf5/wAAAAAAAAAAAAAAAP7+//7+/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//v8//v8//3+/wAAAAAAAAAAAAAAAAAAAP7+/+Ho+1dana20 + 4/b4/wAAAAAAAPz9//P2/+Tp/ezw/vz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///X4 + /9Pa+tPa+/H1//z9/wAAAAAAAAAAAAAAAP7+/93k+SsscaSr3PX3/wAAAP7+//L1/7W98AcWgrvC8Pj6 + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/+bs/xohiAEJdrvF9+7y//z9/wAAAAAAAAAA + AP7+/9rh+CEkapmh0/T3/wAAAPj6/9HZ/AEHcgEEb9LZ+/r7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP7//+/z/3F+zAAAXwQLcZai3fb4/wAAAAAAAAAAAP3+/97l/E9Tmaau4fT3/wAAAO/0/1dd + sAAAV7a/8/H1//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPr8/+jv/46Y3QUUf6Ot + 5PX4/wAAAAAAAAAAAP3+/9zj+3Z6wLe/7fX4/wAAAPD0/212xnaAzerw//z9/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/+/z/+Dm+/D0//z9/wAAAAAAAP7+//j6/9Pd+UhLjb/H + 9/D0//3+//n7/+nt/+jt//n7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7///7+//7+//7+/wAAAAAAAPr8/+7z/83W+ImU2A0UdFNarr/K9env//X4//z9//3+//7//wAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///j6/+Pq/255 + xhckjE5XsVVftUlTqwAKeTA9nr3H8+7z//v8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+//b4/9Tc+Sc0mRonj8rV/crX/ZSb48rX/brG8wwWgQAEdJei + 4efu//n7//7+//z9//z9//z9//z9//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//f5/+3y/+nv/+ft + /8vV+io2mImU2M7c/7vG9yIvlQAOfCg4mM3Y/s/c/4aR1AQRfGtzwtni/ebt/9vi/tri/tXd+9Tc+O3x + /vz9/wAAAAAAAAAAAAAAAAAAAAAAAPn6/87V+FVftkRPrFlnvSEqjQoUfmJvwWFvvg0TfQQIcxEchwAD + cy89n19rvVVitQwZgwAAaiMrkT9NqTVBoiw3mhQihig1mNLX+fv8/wAAAAAAAAAAAAAAAAAAAAAAAPb5 + /52l4EFLqoCK03yF0VBctGhyw52o5GVrvQAAaneBzsHM+jA3mhYgiTtIpJOf3ouW2AAAbmh0wbbA8bS+ + 7qiz5pCb16+56e/z//3+/wAAAAAAAAAAAAAAAAAAAAAAAPv8//H1/+vw/+zx/+nv/7/J9YqP3MbP/8LM + +hwqkFZftaCp5EhRrcTQ+9jj/8rW/UJMqn6J0ebt//X3//f5//b4//X3//f5//z9/wAAAAAAAAAAAAAA + AAAAAAAAAP7+//z9//3+/wAAAAAAAP3+/+7z/6at64iP3aWs7XN8zRIfhyUykp2o5MHM+oKM0xonjY6X + 2+jv//v8/wAAAP7+//n7//b5//r7//7//wAAAAAAAAAAAAAAAP7+//f5/+rw/9Pa9fL0/v7//wAAAAAA + APv8//H1/+Tr/7i/91liu0NPq0VQrS06m0NNqDdCoYqU1+nv//v8/wAAAAAAAPn7/9zi/qSt59ri/fL1 + //v8//7//wAAAPz9//D0/8rT+h0sjkVQrPD0/wAAAAAAAAAAAAAAAAAAAPz9/+7z/8LL9Jqk4aGq6LW/ + 8c3W9+Xs/vH1//v8/wAAAAAAAAAAAPf5/6at5gAAbxIfh6u16+Po/fr7/wAAAPb5/6ev5gAIeAAPernC + 8fX4/wAAAAAAAP3+//v8//z9/wAAAP3+//j6//P3//P2//b4//r8//7+//7+//v8//r8//3+/wAAAPv8 + /+Xr/nuIzwAAbBseg5Sb2fb5/wAAAPf5/8DF8pWe3d/n/vT3//39/wAAAPv8/+zx/87V9+3x/v3+/wAA + AP3+//j6//X4//v8/wAAAAAAAPn7/+Dm/snR9fD0//39//z8/fv8/+3y/8LK9aGq4dfd9/n7/wAAAPz9 + //b5//X4//v8/wAAAAAAAP7+/+7z/4aP1gEPet7k/f39/wAAAPf5/83U+ZCZ2u3x/v7+/wAAAPP3/215 + wgAJd7fB8/L1//7+/wAAAP3+//j6//f5//r8//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAPj6/87W/AAA + X2duue3y//7+/wAAAPD0/05asBQfidzj/P39/wAAAPX4/6Su6AAAXBccgtff/vv8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP3/3F8xhYli9Xe/fn6/wAAAAAAAO3y/1pltQAJd9be + /fv8/wAAAPz9/+rw/36I0Bknjs/W+vv8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAPf5/8HI7tnf+/X4//7+/wAAAAAAAO/0/3R7xgAAb9ng/Pz9/wAAAAAAAPn7/+Ln/dLY+fP2//3+ + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//r7//v8//7+/wAAAAAAAAAA + APb4/7/F84eP0e/0//7+/wAAAAAAAP7+//z9//v8//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz9//b5//X4//v8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////w////4 + P///+D////g8//D4MH/geCB/4Dggf+A4IH/wOCD/+DAB//hgAf//gAP//wAAB/AAAAPwAAAD8AAAA/AA + AAfjAAEHgYADAQPgBwEDEAEBAghgAQwIIEH8CCB//Bggf/wYMH/8ODD///h/////////////KAAAABAA + AAAgAAAAAQAYAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+vv/fL1/v///wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///4+Vx7/F5v///wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAP///4CHtrS62////////////////////wAAAAAAAAAAAP////H0/vf6/v// + /////////4yTwrrB4f///+zw+7rA6P39/////wAAAAAAAAAAAP///56l2BkcguXr/P///////42Uw8jO + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2OL+NjZ7AAArX2Ok + 4uz/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 2eP/LjJ1DAxKfYTE4Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//f7//f7//v7//v// + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/gILIR0eVeoHC3eb/8fX/+/z/AAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+Pr/ + +Pr/+Pr/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+vv/+vv/+/z//f3//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/2eP9ZWeqHx1obnOz4Or/8fX/+/z/AAAAAAAAAAAAAAAA/v7/ + +/z/9fj/8vb/8PX/7vT/8fb/9fj/+fr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/9fj/9fj/9Pj/9Pf/9vn/+/z//v7/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP9ODp9AAA5jZDQ5O7/8PX/+/z/AAAA + AAAAAAAA/v7/+/z/9Pf/7fP/5u//wsz6j5XfuMDx7fL/9vn//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+Pr/8/b/5+3/2eH/2uP/ + 5u3/7fP/8/b/+vv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3ef/U1ebBgVKio/O + 4uz/8fX/+/z/AAAAAAAA/v///P3/9fj/7fP/4uv/hIzZHSWPAABmU1i14ub/9/r/+/z/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9Pf/ + 7/X/09z/TlSzNzWYj5bh5O7/6/L/8vb/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fX/ + 2eP/QUWIEhBZbnSz3uj/8fb/+/z/AAAAAAAA/f7/+Pr/7/T/6PH/iI7cAABvAABqAABncXjK6O//9fj/ + +/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+/z/8/f/2uD/Z27EAABnAABiBgl4jJTd5vD/6O//8vX/+fv//f7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8fb/2OP/Mjd6AQE6ZGup4er/8fX/+/z/AAAAAAAA+vz/8fX/6/T/xM/8ExyJAABwAABu + GySRxc387fT/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vz/8/f/1Nr/MzqhAABhAxOBAARyBgp5jpLg5Oz/7PP/9Pf/+vz//v7/ + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP/KCtvBwZOjJHS4Or/8fX/+/z/AAAA/f7/9/n/7fP/3+j/ + UFq3AABtAAZ3BAh6mZ/n5vD/7vP/+Pr//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/6e//sbb1KzWcAABwBhaBAAFyAgp6fITR + 1d777/T/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3+j/WF2hBglTnaTj5O3/8PX/+/z/AAAA + /P3/9Pf/6vL/k5riAAByAAR0AABrY2vE4ur/6vH/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/7fL/5O3/ytX/RU6w + AABpAA5+AABuAABnhord6e7/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/7/T/3+j/k5jbT1KdgYjJ + 3uf+8fX/+/z/AAAA+/z/9fn/4ef/NDqhAABnAABrJjCU0Nn/5/D/8fX/+vv//v7/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + 9vn/7vP/6vP/ztb/O0CmAABpAABrQkuoxMn57PH/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/ + 2+X/en/CUFGak5nY3+j/8fX//P3/AAAA/P3/9fj/4en/i5DbNT2hIyuTpqzv4uz/7vP/9/n//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/9vn/7/P/6vL/ytH/X2i9XWi7wsf/6e//8/f/+Pr//v7/AAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/WF2hW1ylvMD+3uf/8PX/+/z/AAAA/f7/9vn/7fP/4uj/j5Pgf4LV3+X/6fD/ + 9Pf//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/8vX/7fP/5+//5u7/6vD/8PT/9vn//P3//v7/ + AAAAAAAAAAAAAAAAAAAA/f7/9/n/7fP/0tz9LDJzNjh/nqTk2uT/7fL/9/n//f7//f7/+fv/8/b/7PL/ + 3eX/zM//5ev/9fj/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f3/+vv/9/n/9vn/9fj/9vn/ + +fr//P3//v7/AAAAAAAAAAAA/v///f7/+vv/9vn/7/T/5vD/2Ob/VFubERNdoajk4u//5O7/7vP/9vj/ + +fr/+vv/+Pr/9fj/9Pj/9fj/9fj/+Pr//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///v7/ + /f7//P3//P3//f3//v7//v//AAAAAAAAAAAA/f7/+vz/9vn/8fX/7vT/5O3/3eb/z9n/cHjICxN5d37L + z9n/2eP/5O3/6/L/8PT/9Pf/9/n/+vv/+vv/+/z//P3//f3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+Pr/8/b/7vT/6vL/z9r+jZjeQUeq + IiuQCBN3AAFrBRB8Nj2iUViym6XlydH/4+z/6/L/8PT/9/n/+/z//f7//v//AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/8fX/6/L/3uf/ + mKTkLzibAABoAAB0Fx+HDBh7FSGDAg16AABYAABlCBB/Ji2UhYza1+D/6PL/7fL/9Pf/+vv//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/9/n/ + 8PT/7PT/z9j/XmO+AABtAABcMDSXoajsu8X7VV+5hYzblZ/fTVSxFSKMAABkAABnAAN2Qkmpsbrz5e3/ + 6vH/8fX/+Pr//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/P3/9/n/8PX/7PT/vcn3LTOZAABaAgR1ZWzD0Nf/5vL/1OP/l53lzs3/6fP/4+7/sLzwZ23CBxSD + AABnAABlHiaSmqHo3+j/5+//7/T/9vn//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/ + /v7//v7//v7//f7/+/z/9vj/7vP/7PX/tcLzEBeGAABkPEWlqLPt2eX/4e7/3On/uMX1gofVe3vPhYzY + z93+5/X/4e3/lJ3gHiOPAABtAABqChiEbHLIytD/5/D/7PL/8/f/+Pr/+fr/+Pr/+Pr/+Pr/+Pr/+Pr/ + +Pr/+fv/+vv/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+fv/9/n/9vj/9fj/9Pf/8fX/7PL/4uv/l6HgDhF7AAN4iZDe0d7/3uz/4vD/w83/VVm3 + ICiSAAFyAABlAABwaHTD1N//2un/3er/w838ZW3BEyOJJzKVAQ16NDmfwsn75fD/5u7/7PL/7vP/7fP/ + 7fP/7fL/7fP/7vP/7/T/8fb/9Pj/9vn/+fr//f3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/+Pr/9Pf/8fX/7vT/7PL/6/L/6fH/5u7/6vX/tsD0CQx4AAFwkZvi7ff/4vD/ + 4fD/z9j/OkGlAABiAABwBxWAAAt7BBN+P0uofYLUztb/4O7/6fb/6fP/qa7xQkyoBg56AABqMjugx8/+ + 5fH/4Ov/4On/3uj/3eb/3+j/3uj/1+L/0d3/1d7/3+f/7fL/9vj/+vz//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+fr/8/f/6/L/2d//v8j6vcf5ucP1wMv8wM3+vMj6PkqoAABo + UF25usP7tsPyvsr6sLrwQ0utAABqAAV1OUameIDRKDWZAAd2GyeOLDecmaHntsL0pbLom6riq7LzUlu0 + AANzBhR/AAZ0NT+ja3bBY2i/XGG6UViyWl65XGG7XGC6TVWvQU6pPkalODygqK7p8vb/+vz//v7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/7/T/wcj2R0ysExeFERmGDxuIFB6K + FBqICxSEAABsAAByDBiDCRSBBRCADhaFCRODAAh4AxF/AAl4CxeDHSaPAAp6AAN0AA19AAd3CBOBEBqH + BhGBAAh5AABwAAByAAh5BhSCAxWCAABsAABvAABlAABnAABxAABjAABmAABhAABdAABYAABhCAt/q7Lr + 8/f/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+fv/3uT/SE2vAABn + CBB/GiCMLzmfLTWcGByJFRyKGCOOMj2gHymRDxiGGyOPLDCXBRF/AAh3BhaCEyKMICqTKC2WNDqfIzCV + Awx6Eh+JHiaPAAR3AAZ5CxSDICWQX2q7Q1CqAA1+AAFxDxuHiZTbVGC4dHnQnabrTVqzY23EUV62Slau + LjaZXWm9sLjz5ez/9vn/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +Pv/4+n+e4LPfoPVpqv2vsf/zNX/zdb/xtH/v8v8pK7spKfysLb3vcr4ws784ej/hI/YAAZ1AAJzVF25 + yM//3Of/5+//i5LcAABpMzyfp6vxoKznlqHhqbbtx9H/8fz/kpvfAABiAABph4zc5PD/2OP/193/3un/ + 1+D/2OH/1+D/0Nr/zNL/3+j/6/L/7/T/9vn//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+Pr/9Pf/6vD/5u3/3+b/4uv/6PD/5+//5O3/5/P/sL3sXmS7mZzoz9f/3+z/4e// + mKLiEiKKCBF/KTWZr7T06/f/3ev/VF2zChSBipPcz9v+4u7/3ur/3ev/5/X/qrPrISmSDRJ2Xmq/3ur/ + 4uv/6vH/7fP/7fL/7/T/7vP/7fP/7fP/8PX/8fX/9Pf/+Pr/+/z//v7/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+Pr/9vn/9Pf/8vb/8vb/8/b/9Pf/7/T/6/L/tL/ubXLH + en/Ti43gqavy0t3/nafjMj6fJzaaAAV1GyeOYmW7Nz6fAABgNj6i1N//3uz/2uX/3Oj/5PH/wcj7FR2J + AAN0gong0tr/6fH/7/P/9vj/+Pr/+fv/+fv/+Pr/+Pr/+Pr/+fv/+vv//P3//f7//v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+/z/+/z/+/z//f3//f7/ + +fv/8fX/5Oz/jpbfc3jObnXLcXfOk5rks7b4iY3dR1KvDhuEAABoAABlEBV9U12ytcD13Or/3en/3ej/ + 1eL/q7fvGR+MKDKZbnnNxc/76PD/8fX/+fr//f7//v//AAAA/v7//f7//f3//P3//f3//f7//v//AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//f7//v7/AAAA + AAAAAAAAAAAAAAAA/f7/9vn/7/T/yNH5lJrleoDVmZ3pmpzpc3nPfoTWf4bYVFy3HSaLZ3PGsrb8v8r8 + y9n9q7jre4LRf4fUgIvXAwZ1AABrhYjb0NX/6PH/8PX/+Pr//f7/AAAAAAAA/v///f3/+vv/+Pr/9/r/ + 9/n/+Pr/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f7/+/z/+fr/9vj/9/n/ + +vz/+vv/+/z//v7/AAAAAAAAAAAAAAAA/v7/+vz/8/f/7PL/2uT/t8H1srP6vcH+nKTnSlOxV2C7TVaz + WGS8QUqmSlSuSFOtR1GtbXTKVl23ARB5AAh2AABnd33P3eP/4ur/7/T/9/n//P3/AAAAAAAAAAAA/P3/ + 9/n/8vb/7PH/6fD/7PL/7vP/8vb/9vn/+/z//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/+Pr/ + 8/b/7/T/8Pb/6vH/3eP97vL++fr//P3/AAAAAAAAAAAAAAAAAAAA/f7/+vv/9fj/7/T/5+//z9f+t7v4 + uLn9Z2zFLzucFCGIMz6gGCCMAAd4AAl2Dx2EER+GXWK8c3XLKzKXd4LP4er/6/L/8PX/9/n//P3//v// + AAAAAAAA/v7/+fv/8/b/7PP/y9H/i4/erLbt4er/5e3/7fP/8/b/+fv//f3//v7/AAAAAAAAAAAAAAAA + /v7/+/z/9vj/8PT/6/L/3+n/x9H9aHTAZGvG3+b9+Pr/+/z/AAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + +Pr/8vb/6/H/3OX+wMn4maDmdHrPWGG6T1a1eoHWcHfOTlayUlq1SlKubHjAxMj/0dn/4+v/7PL/8vb/ + +Pr//P3//v7/AAAAAAAAAAAA/f7/+fr/7vP/xsv5YGXAHymRKjKYYWS9rbLz4u3/6/P/8vb/+fr//f7/ + AAAAAAAAAAAA/v//+/z/9vj/7fL/5e3/xs7/Y23BIiiSAABeLTab3+b/9/r/+/z/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAA/f7/+vz/9vj/8PX/6vH/3eb/ydL8xM/6uMPyt733w8j/zNb/1Nz/3OT/4uz/5u7/ + 7fP/8vb/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAA/f7/+fv/7vP/jpHiAAJ1CxaBER6GAABoFRmGbXbH + 0Nf/7PL/9fj//P3/AAAAAAAAAAAA/v7/+fv/8/f/4Of/hYvbKDGZAABuAABdAAZyi5La5+7/9vn/+/z/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/9ff/8vb/7/X/7fP/6/L/5u3/5ez/6fD/ + 7PP/7/T/8fX/9Pf/9/n/+vv//P3//v7//v//AAAAAAAAAAAAAAAAAAAA/v7/+fv/8fb/2eH9fIbQExqH + AABrAAp6AAFyAABwS0+uztX39vn/+vz/AAAAAAAAAAAA/f7/+Pr/8ff/qbLpAABrAABhAABwDBWAfobX + 5e3/8PX/9vn//f3/AAAAAAAA/v///f7/+/z/+vv/+vv/+vz//P3//v7//v///v7//P3/+vz/+Pr/9/n/ + 9vj/9vj/9vj/9vj/9/n/+fr/+/z//P3//f7//v7//f7//P3/+/z/+vz/+/z//P3//v7/AAAA/v7/+/z/ + 9fj/7/T/5/H/uML1U1e1AAh5AABuAABvMjmdv8bz9vr/+vv/AAAAAAAAAAAA/f7/+fv/7/T/iY7aDxSA + GiONa3XHsr7w4Oj/6/H/9Pf/+vz//v7/AAAA/v///P3/+Pr/9Pf/8/f/9fj/9fj/9vn/+/z//v7/AAAA + AAAAAAAA/v7//f7//P3/+/z/+/z//P3//f7//v//AAAAAAAAAAAA/v7/+/z/9/n/9vn/9vn/9Pj/9vn/ + +/z//v7/AAAA/f7/+vz/9fj/7/T/6vL/3ef/i5PbGRqJBQl5jJbZ6vH/9Pj/+/z/AAAAAAAAAAAA/f7/ + +fv/8fT/1Nn9t7/0wcr54er/7fT/8fX/9fj/+vv//f7/AAAAAAAA/f3/+Pr/8PT/6/L/3uX/ztb/5Or/ + 8/f/+Pr//f7/AAAAAAAAAAAA/f7/+vz/+Pr/+fv/+fv/+vv//f3//v//AAAAAAAAAAAA/P3/9/n/7vL/ + 193/ztf/5u3/7vP/9Pf/+/z//v7/AAAA/v7//P3/+Pr/8fX/7PP/5/D/sLfxoKnk4+r/8vf/9/n//f3/ + AAAAAAAAAAAA/v7/+/z/9vn/9Pf/8vb/8fb/8fX/9Pf/+Pr//P3//v7/AAAAAAAA/v7/+vv/8vb/5+7/ + y9H/WWO9KSmSkZXj6vD/+Pv//P3/AAAAAAAA/f7/+Pr/9fj/8vb/6O7/7vP/9fj/+Pr//f7/AAAAAAAA + /v//+vv/8vb/7PP/hYraKiqKlp7i6PD/7fP/9ff/+/z//v7/AAAAAAAA/f7/+vv/9ff/8fX/8PX/8vb/ + 8/f/9vn/+/z//v7/AAAAAAAAAAAAAAAA/f7/+/z/+vv/+fr/+fr/+vv//P3//v7/AAAAAAAAAAAAAAAA + /P3/9fj/7PL/1d7/RUysAABhAABlg4ja6/D/+Pr//P3/AAAAAAAA+/z/9fj/6e7/2eD/h4/bnaXg7PH/ + 9fj/+/z/AAAAAAAA/v7/+Pr/8PX/y9X1JDGVAABaERWDoKnp6PH/7vP/9/n//P3/AAAAAAAAAAAA/v7/ + /P3/+vv/+fv/+fv/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//v7//v7//v//AAAAAAAA + AAAAAAAAAAAA/v7/+fv/8PX/7PX/ipPdAABsAABlQ1Cp3Ob/7vP/9/n//f7/AAAAAAAA+fv/9Pj/yNH5 + Ule2DBJ8Ljie0df+8fb/+fv//v7/AAAA/v7/+Pr/7/X/hY3YAABxAAl7AABuEBaEs7nz6fH/8fX/+vv/ + /v7/AAAAAAAAAAAAAAAA/v///v7//v7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9vn/7PL/0tn/LzidAQFsAAB0iZHb6vP/8PT/+fv//v//AAAA + /v7/+Pr/8vf/r7rqAAV4AABdPUen1N//7PL/9vn//f7/AAAA/v7/+fr/7/T/yc75S1G0AABrARKAAABp + Qker0df/7fP/9/n//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/5+7/cXXNAAd2AABuMDebzdT97PL/ + 9vj//P3/AAAAAAAA/v7/9/n/7/X/tL/uFCCLAABqHSqRvcf46fD/9Pf//f3/AAAAAAAA+vv/8vX/6vH/ + yM3+JC2XAABtAAV2Agx9q7Ly7vT/9vn//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/4uj/WWO1AAVx + KTaYu8T07fT/8vb/+vv//v7/AAAAAAAA/v7/9/n/7vX/vsn1Iy2SAABrAQ99mp/o6PD/9Pf//P3/AAAA + AAAA/P3/9/n/7vP/6fL/s7z2DBB/AABeQ0uttrr56e7/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +fv/4ef6g4zNbXfFw8v27fT/8vb/+Pr//f3/AAAAAAAAAAAA/v7/9/n/7vT/yNL7MjucAABtBxF/nKLo + 6fH/9Pf//P3/AAAAAAAA/v7/+/z/9fj/7fL/6/T/jZXbLzScrrP14en/7fL/+fv//v7/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+vz/8PP91dr34+f/8vb/8/f/9/r//P3//v//AAAAAAAAAAAA/v7/+Pr/8PX/1N3/ + QUqmAQRxBQ98m6Dm7PL/9fj//P3/AAAAAAAAAAAA/v7/+/z/9ff/8PX/5ez/ytH94ej/8vb/9vj/+/z/ + /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA + /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ + 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA + AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file From d1cdc5a3d9b4ddeddfc773b8858f31d28558f01a Mon Sep 17 00:00:00 2001 From: dexy Date: Thu, 21 Mar 2019 14:02:22 +1100 Subject: [PATCH 151/158] Renamed Explorer cmd file --- CodeWalker Explorer.cmd => CodeWalker RPF Explorer.cmd | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename CodeWalker Explorer.cmd => CodeWalker RPF Explorer.cmd (100%) diff --git a/CodeWalker Explorer.cmd b/CodeWalker RPF Explorer.cmd similarity index 100% rename from CodeWalker Explorer.cmd rename to CodeWalker RPF Explorer.cmd From 8324e1ecdab70db40d1b4621e2bde577649345f9 Mon Sep 17 00:00:00 2001 From: dexy Date: Thu, 21 Mar 2019 14:02:59 +1100 Subject: [PATCH 152/158] Added InvertTexcoordV option to FbxConverter class --- CodeWalker.Core/Utils/FbxConverter.cs | 24 +++++------------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/CodeWalker.Core/Utils/FbxConverter.cs b/CodeWalker.Core/Utils/FbxConverter.cs index e868887..ed890a1 100644 --- a/CodeWalker.Core/Utils/FbxConverter.cs +++ b/CodeWalker.Core/Utils/FbxConverter.cs @@ -12,7 +12,7 @@ namespace CodeWalker { public class FbxConverter { - + public bool InvertTexcoordV { get; set; } = true; public YdrFile ConvertToYdr(string name, byte[] fbxdata) @@ -26,10 +26,7 @@ namespace CodeWalker YdrFile ydr = new YdrFile(); ydr.Drawable = dwbl; - - //byte[] ddata = ydr.Save(); - //File.WriteAllBytes("C:\\Dump\\TestFbx\\" + name + ".ydr", ddata); - + ydr.Name = name; return ydr; } @@ -402,7 +399,8 @@ namespace CodeWalker foreach (var fVert in fPoly.Vertices) { var ai = indexed ? aiTexcs[j] : j; - fVert.Texcoords[i] = GetVector2FromDoubleArray(arTexcs, ai); + var tc = GetVector2FromDoubleArray(arTexcs, ai); + fVert.Texcoords[i] = InvertTexcoordV ? new Vector2(tc.X, -tc.Y) : tc;//whyyyy j++; } } @@ -532,7 +530,7 @@ namespace CodeWalker var dShader = TryConvertMaterial(matNode); var dVertDecl = GetVertexDeclaration(dShader); - var vDict = new Dictionary();//TODO:use final vertex data instead of FbxVertex!!! + var vDict = new Dictionary(); var vList = new List(); var iList = new List(); @@ -986,23 +984,11 @@ namespace CodeWalker { return (other != null) && ((Bytes == null) ? (other.Bytes == null) : Bytes.SequenceEqual(other.Bytes)); - //&& Position.Equals(other.Position) - //&& ((Normals == null) ? (other.Normals == null) : Normals.SequenceEqual(other.Normals)) - //&& ((Binormals == null) ? (other.Binormals == null) : Binormals.SequenceEqual(other.Binormals)) - //&& ((Tangents == null) ? (other.Tangents == null) : Tangents.SequenceEqual(other.Tangents)) - //&& ((Texcoords == null) ? (other.Texcoords == null) : Texcoords.SequenceEqual(other.Texcoords)) - //&& ((Colours == null) ? (other.Colours == null) : Colours.SequenceEqual(other.Colours)); } public override int GetHashCode() { var hashCode = -907793594; if (Bytes != null) hashCode = hashCode * -1521134295 + ((IStructuralEquatable)Bytes).GetHashCode(EqualityComparer.Default); - //hashCode = hashCode * -1521134295 + Position.GetHashCode(); - //if (Normals != null) hashCode = hashCode * -1521134295 + ((IStructuralEquatable)Normals).GetHashCode(EqualityComparer.Default); - //if (Binormals != null) hashCode = hashCode * -1521134295 + ((IStructuralEquatable)Binormals).GetHashCode(EqualityComparer.Default); - //if (Tangents != null) hashCode = hashCode * -1521134295 + ((IStructuralEquatable)Tangents).GetHashCode(EqualityComparer.Default); - //if (Texcoords != null) hashCode = hashCode * -1521134295 + ((IStructuralEquatable)Texcoords).GetHashCode(EqualityComparer.Default); - //if (Colours != null) hashCode = hashCode * -1521134295 + ((IStructuralEquatable)Colours).GetHashCode(EqualityComparer.Default); return hashCode; } } From 023be70bb452b204bdf2a071521f3ddfe3fe93bd Mon Sep 17 00:00:00 2001 From: dexy Date: Fri, 22 Mar 2019 01:29:37 +1100 Subject: [PATCH 153/158] Model Material Editor --- .../GameFiles/Resources/Drawable.cs | 3 + CodeWalker.Core/GameFiles/RpfManager.cs | 4 + CodeWalker.csproj | 9 + Forms/ModelForm.Designer.cs | 77 ++-- Forms/ModelForm.cs | 65 +++ Forms/ModelMatForm.Designer.cs | 120 +++++ Forms/ModelMatForm.cs | 246 +++++++++++ Forms/ModelMatForm.resx | 409 ++++++++++++++++++ Rendering/Renderer.cs | 9 +- 9 files changed, 909 insertions(+), 33 deletions(-) create mode 100644 Forms/ModelMatForm.Designer.cs create mode 100644 Forms/ModelMatForm.cs create mode 100644 Forms/ModelMatForm.resx diff --git a/CodeWalker.Core/GameFiles/Resources/Drawable.cs b/CodeWalker.Core/GameFiles/Resources/Drawable.cs index 5555030..badd816 100644 --- a/CodeWalker.Core/GameFiles/Resources/Drawable.cs +++ b/CodeWalker.Core/GameFiles/Resources/Drawable.cs @@ -1270,6 +1270,9 @@ namespace CodeWalker.GameFiles private ResourceSystemStructBlock BoneIdsBlock = null;//for saving only + public bool UpdateRenderableParameters { get; set; } = false; //used by model material editor... + + /// /// Reads the data-block from a stream. /// diff --git a/CodeWalker.Core/GameFiles/RpfManager.cs b/CodeWalker.Core/GameFiles/RpfManager.cs index c437013..3a0da21 100644 --- a/CodeWalker.Core/GameFiles/RpfManager.cs +++ b/CodeWalker.Core/GameFiles/RpfManager.cs @@ -425,6 +425,10 @@ namespace CodeWalker.GameFiles } } } + if (nlow.EndsWith(".sps")) + { + JenkIndex.Ensure(nlow);//for shader preset filename hashes! + } if (nlow.EndsWith(".awc")) //create audio container path hashes... { string[] parts = entry.Path.Split('\\'); diff --git a/CodeWalker.csproj b/CodeWalker.csproj index c03a77b..de19481 100644 --- a/CodeWalker.csproj +++ b/CodeWalker.csproj @@ -143,6 +143,12 @@ AboutForm.cs + + Form + + + ModelMatForm.cs + Form @@ -583,6 +589,9 @@ AboutForm.cs + + ModelMatForm.cs + GenerateLODLightsPanel.cs diff --git a/Forms/ModelForm.Designer.cs b/Forms/ModelForm.Designer.cs index c774c8a..2264b9f 100644 --- a/Forms/ModelForm.Designer.cs +++ b/Forms/ModelForm.Designer.cs @@ -41,12 +41,14 @@ this.ToolsTabControl = new System.Windows.Forms.TabControl(); this.ToolsModelsTabPage = new System.Windows.Forms.TabPage(); this.ModelsTreeView = new CodeWalker.WinForms.TreeViewFix(); - this.ToolsTexturesTabPage = new System.Windows.Forms.TabPage(); + this.ToolsMaterialsTabPage = new System.Windows.Forms.TabPage(); + this.MaterialEditorButton = new System.Windows.Forms.Button(); this.TextureViewerButton = new System.Windows.Forms.Button(); this.TexturesTreeView = new CodeWalker.WinForms.TreeViewFix(); this.ToolsDetailsTabPage = new System.Windows.Forms.TabPage(); this.DetailsPropertyGrid = new CodeWalker.WinForms.ReadOnlyPropertyGrid(); this.ToolsOptionsTabPage = new System.Windows.Forms.TabPage(); + this.HDTexturesCheckBox = new System.Windows.Forms.CheckBox(); this.SkeletonsCheckBox = new System.Windows.Forms.CheckBox(); this.TimeOfDayLabel = new System.Windows.Forms.Label(); this.label19 = new System.Windows.Forms.Label(); @@ -74,13 +76,12 @@ this.ToolsPanelHideButton = new System.Windows.Forms.Button(); this.ToolsDragPanel = new System.Windows.Forms.Panel(); this.ToolsPanelShowButton = new System.Windows.Forms.Button(); - this.HDTexturesCheckBox = new System.Windows.Forms.CheckBox(); this.StatusStrip.SuspendLayout(); this.ConsolePanel.SuspendLayout(); this.ToolsPanel.SuspendLayout(); this.ToolsTabControl.SuspendLayout(); this.ToolsModelsTabPage.SuspendLayout(); - this.ToolsTexturesTabPage.SuspendLayout(); + this.ToolsMaterialsTabPage.SuspendLayout(); this.ToolsDetailsTabPage.SuspendLayout(); this.ToolsOptionsTabPage.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.TimeOfDayTrackBar)).BeginInit(); @@ -172,7 +173,7 @@ | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.ToolsTabControl.Controls.Add(this.ToolsModelsTabPage); - this.ToolsTabControl.Controls.Add(this.ToolsTexturesTabPage); + this.ToolsTabControl.Controls.Add(this.ToolsMaterialsTabPage); this.ToolsTabControl.Controls.Add(this.ToolsDetailsTabPage); this.ToolsTabControl.Controls.Add(this.ToolsOptionsTabPage); this.ToolsTabControl.Location = new System.Drawing.Point(2, 30); @@ -207,25 +208,36 @@ this.ModelsTreeView.NodeMouseDoubleClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.ModelsTreeView_NodeMouseDoubleClick); this.ModelsTreeView.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.ModelsTreeView_KeyPress); // - // ToolsTexturesTabPage + // ToolsMaterialsTabPage // - this.ToolsTexturesTabPage.Controls.Add(this.TextureViewerButton); - this.ToolsTexturesTabPage.Controls.Add(this.TexturesTreeView); - this.ToolsTexturesTabPage.Location = new System.Drawing.Point(4, 22); - this.ToolsTexturesTabPage.Name = "ToolsTexturesTabPage"; - this.ToolsTexturesTabPage.Padding = new System.Windows.Forms.Padding(3); - this.ToolsTexturesTabPage.Size = new System.Drawing.Size(205, 500); - this.ToolsTexturesTabPage.TabIndex = 1; - this.ToolsTexturesTabPage.Text = "Textures"; - this.ToolsTexturesTabPage.UseVisualStyleBackColor = true; + this.ToolsMaterialsTabPage.Controls.Add(this.MaterialEditorButton); + this.ToolsMaterialsTabPage.Controls.Add(this.TextureViewerButton); + this.ToolsMaterialsTabPage.Controls.Add(this.TexturesTreeView); + this.ToolsMaterialsTabPage.Location = new System.Drawing.Point(4, 22); + this.ToolsMaterialsTabPage.Name = "ToolsMaterialsTabPage"; + this.ToolsMaterialsTabPage.Padding = new System.Windows.Forms.Padding(3); + this.ToolsMaterialsTabPage.Size = new System.Drawing.Size(205, 500); + this.ToolsMaterialsTabPage.TabIndex = 1; + this.ToolsMaterialsTabPage.Text = "Materials"; + this.ToolsMaterialsTabPage.UseVisualStyleBackColor = true; + // + // MaterialEditorButton + // + this.MaterialEditorButton.Location = new System.Drawing.Point(3, 6); + this.MaterialEditorButton.Name = "MaterialEditorButton"; + this.MaterialEditorButton.Size = new System.Drawing.Size(91, 23); + this.MaterialEditorButton.TabIndex = 3; + this.MaterialEditorButton.Text = "Material editor"; + this.MaterialEditorButton.UseVisualStyleBackColor = true; + this.MaterialEditorButton.Click += new System.EventHandler(this.MaterialEditorButton_Click); // // TextureViewerButton // - this.TextureViewerButton.Location = new System.Drawing.Point(6, 6); + this.TextureViewerButton.Location = new System.Drawing.Point(111, 6); this.TextureViewerButton.Name = "TextureViewerButton"; - this.TextureViewerButton.Size = new System.Drawing.Size(113, 23); + this.TextureViewerButton.Size = new System.Drawing.Size(91, 23); this.TextureViewerButton.TabIndex = 2; - this.TextureViewerButton.Text = "Open texture viewer"; + this.TextureViewerButton.Text = "Texture viewer"; this.TextureViewerButton.UseVisualStyleBackColor = true; this.TextureViewerButton.Click += new System.EventHandler(this.TextureViewerButton_Click); // @@ -298,6 +310,19 @@ this.ToolsOptionsTabPage.Text = "Options"; this.ToolsOptionsTabPage.UseVisualStyleBackColor = true; // + // HDTexturesCheckBox + // + this.HDTexturesCheckBox.AutoSize = true; + this.HDTexturesCheckBox.Checked = true; + this.HDTexturesCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; + this.HDTexturesCheckBox.Location = new System.Drawing.Point(19, 242); + this.HDTexturesCheckBox.Name = "HDTexturesCheckBox"; + this.HDTexturesCheckBox.Size = new System.Drawing.Size(82, 17); + this.HDTexturesCheckBox.TabIndex = 10; + this.HDTexturesCheckBox.Text = "HD textures"; + this.HDTexturesCheckBox.UseVisualStyleBackColor = true; + this.HDTexturesCheckBox.CheckedChanged += new System.EventHandler(this.HDTexturesCheckBox_CheckedChanged); + // // SkeletonsCheckBox // this.SkeletonsCheckBox.AutoSize = true; @@ -614,19 +639,6 @@ this.ToolsPanelShowButton.UseVisualStyleBackColor = true; this.ToolsPanelShowButton.Click += new System.EventHandler(this.ToolsPanelShowButton_Click); // - // HDTexturesCheckBox - // - this.HDTexturesCheckBox.AutoSize = true; - this.HDTexturesCheckBox.Checked = true; - this.HDTexturesCheckBox.CheckState = System.Windows.Forms.CheckState.Checked; - this.HDTexturesCheckBox.Location = new System.Drawing.Point(19, 242); - this.HDTexturesCheckBox.Name = "HDTexturesCheckBox"; - this.HDTexturesCheckBox.Size = new System.Drawing.Size(82, 17); - this.HDTexturesCheckBox.TabIndex = 10; - this.HDTexturesCheckBox.Text = "HD textures"; - this.HDTexturesCheckBox.UseVisualStyleBackColor = true; - this.HDTexturesCheckBox.CheckedChanged += new System.EventHandler(this.HDTexturesCheckBox_CheckedChanged); - // // ModelForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -655,7 +667,7 @@ this.ToolsPanel.ResumeLayout(false); this.ToolsTabControl.ResumeLayout(false); this.ToolsModelsTabPage.ResumeLayout(false); - this.ToolsTexturesTabPage.ResumeLayout(false); + this.ToolsMaterialsTabPage.ResumeLayout(false); this.ToolsDetailsTabPage.ResumeLayout(false); this.ToolsOptionsTabPage.ResumeLayout(false); this.ToolsOptionsTabPage.PerformLayout(); @@ -680,7 +692,7 @@ private System.Windows.Forms.Button ToolsPanelShowButton; private System.Windows.Forms.TabControl ToolsTabControl; private System.Windows.Forms.TabPage ToolsModelsTabPage; - private System.Windows.Forms.TabPage ToolsTexturesTabPage; + private System.Windows.Forms.TabPage ToolsMaterialsTabPage; private System.Windows.Forms.TabPage ToolsDetailsTabPage; private WinForms.TreeViewFix ModelsTreeView; private WinForms.ReadOnlyPropertyGrid DetailsPropertyGrid; @@ -712,5 +724,6 @@ private System.Windows.Forms.CheckBox SkeletonsCheckBox; private System.Windows.Forms.Button TextureViewerButton; private System.Windows.Forms.CheckBox HDTexturesCheckBox; + private System.Windows.Forms.Button MaterialEditorButton; } } \ No newline at end of file diff --git a/Forms/ModelForm.cs b/Forms/ModelForm.cs index 745d8c3..4012ebb 100644 --- a/Forms/ModelForm.cs +++ b/Forms/ModelForm.cs @@ -100,6 +100,11 @@ namespace CodeWalker.Forms bool updateArchetypeStatus = true; + ModelMatForm materialForm = null; + + + + public ModelForm(ExploreForm ExpForm = null) { InitializeComponent(); @@ -1066,6 +1071,11 @@ namespace CodeWalker.Forms + public void OnMaterialFormClosed() + { + materialForm = null; + } + @@ -1591,5 +1601,60 @@ namespace CodeWalker.Forms MessageBox.Show("Couldn't find embedded texture dict."); } } + + private void MaterialEditorButton_Click(object sender, EventArgs e) + { + DrawableBase drawable = null; + Dictionary dict = null; + + + if ((Ydr != null) && (Ydr.Loaded)) + { + drawable = Ydr.Drawable; + } + else if ((Ydd != null) && (Ydd.Loaded)) + { + dict = Ydd.Dict; + } + else if ((Yft != null) && (Yft.Loaded)) + { + drawable = Yft.Fragment?.Drawable; + } + else if ((Ypt != null) && (Ypt.Loaded)) + { + dict = Ypt.DrawableDict; + } + else + { + MessageBox.Show("Material editor not supported for the current file."); + return; + } + + if (materialForm == null) + { + materialForm = new ModelMatForm(this); + + if (drawable != null) + { + materialForm.LoadModel(drawable); + } + else if (dict != null) + { + materialForm.LoadModels(dict); + } + + materialForm.Show(this); + } + else + { + if (materialForm.WindowState == FormWindowState.Minimized) + { + materialForm.WindowState = FormWindowState.Normal; + } + materialForm.Focus(); + } + + + } } } diff --git a/Forms/ModelMatForm.Designer.cs b/Forms/ModelMatForm.Designer.cs new file mode 100644 index 0000000..0c94d71 --- /dev/null +++ b/Forms/ModelMatForm.Designer.cs @@ -0,0 +1,120 @@ +namespace CodeWalker.Forms +{ + partial class ModelMatForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ModelMatForm)); + this.MainSplitContainer = new System.Windows.Forms.SplitContainer(); + this.label1 = new System.Windows.Forms.Label(); + this.ModelsTreeView = new CodeWalker.WinForms.TreeViewFix(); + this.MaterialPropertiesPanel = new System.Windows.Forms.Panel(); + ((System.ComponentModel.ISupportInitialize)(this.MainSplitContainer)).BeginInit(); + this.MainSplitContainer.Panel1.SuspendLayout(); + this.MainSplitContainer.Panel2.SuspendLayout(); + this.MainSplitContainer.SuspendLayout(); + this.SuspendLayout(); + // + // MainSplitContainer + // + this.MainSplitContainer.Dock = System.Windows.Forms.DockStyle.Fill; + this.MainSplitContainer.Location = new System.Drawing.Point(0, 0); + this.MainSplitContainer.Name = "MainSplitContainer"; + // + // MainSplitContainer.Panel1 + // + this.MainSplitContainer.Panel1.Controls.Add(this.label1); + this.MainSplitContainer.Panel1.Controls.Add(this.ModelsTreeView); + // + // MainSplitContainer.Panel2 + // + this.MainSplitContainer.Panel2.Controls.Add(this.MaterialPropertiesPanel); + this.MainSplitContainer.Size = new System.Drawing.Size(593, 404); + this.MainSplitContainer.SplitterDistance = 191; + this.MainSplitContainer.TabIndex = 0; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(5, 7); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(86, 13); + this.label1.TabIndex = 3; + this.label1.Text = "Select geometry:"; + // + // ModelsTreeView + // + this.ModelsTreeView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ModelsTreeView.FullRowSelect = true; + this.ModelsTreeView.HideSelection = false; + this.ModelsTreeView.Location = new System.Drawing.Point(3, 24); + this.ModelsTreeView.Name = "ModelsTreeView"; + this.ModelsTreeView.ShowRootLines = false; + this.ModelsTreeView.Size = new System.Drawing.Size(185, 377); + this.ModelsTreeView.TabIndex = 2; + this.ModelsTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.ModelsTreeView_AfterSelect); + // + // MaterialPropertiesPanel + // + this.MaterialPropertiesPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.MaterialPropertiesPanel.AutoScroll = true; + this.MaterialPropertiesPanel.Location = new System.Drawing.Point(3, 24); + this.MaterialPropertiesPanel.Name = "MaterialPropertiesPanel"; + this.MaterialPropertiesPanel.Size = new System.Drawing.Size(392, 377); + this.MaterialPropertiesPanel.TabIndex = 0; + // + // ModelMatForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(593, 404); + this.Controls.Add(this.MainSplitContainer); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "ModelMatForm"; + this.Text = "Model Material Editor - CodeWalker by dexyfex"; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.ModelMatForm_FormClosed); + this.MainSplitContainer.Panel1.ResumeLayout(false); + this.MainSplitContainer.Panel1.PerformLayout(); + this.MainSplitContainer.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.MainSplitContainer)).EndInit(); + this.MainSplitContainer.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer MainSplitContainer; + private System.Windows.Forms.Label label1; + private WinForms.TreeViewFix ModelsTreeView; + private System.Windows.Forms.Panel MaterialPropertiesPanel; + } +} \ No newline at end of file diff --git a/Forms/ModelMatForm.cs b/Forms/ModelMatForm.cs new file mode 100644 index 0000000..26bbbef --- /dev/null +++ b/Forms/ModelMatForm.cs @@ -0,0 +1,246 @@ +using CodeWalker.GameFiles; +using SharpDX; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CodeWalker.Forms +{ + public partial class ModelMatForm : Form + { + private ModelForm ModelForm; + + + public ModelMatForm(ModelForm modelForm) + { + InitializeComponent(); + + ModelForm = modelForm; + + } + + + public void LoadModel(DrawableBase drawable) + { + + ModelsTreeView.Nodes.Clear(); + ModelsTreeView.ShowRootLines = false; + if (drawable != null) + { + AddDrawableModelsTreeNodes(drawable.DrawableModelsHigh, "High Detail"); + AddDrawableModelsTreeNodes(drawable.DrawableModelsMedium, "Medium Detail"); + AddDrawableModelsTreeNodes(drawable.DrawableModelsLow, "Low Detail"); + AddDrawableModelsTreeNodes(drawable.DrawableModelsVeryLow, "Very Low Detail"); + + var fdrawable = drawable as FragDrawable; + if (fdrawable != null) + { + var plod1 = fdrawable.OwnerFragment?.PhysicsLODGroup?.PhysicsLOD1; + if ((plod1 != null) && (plod1.Children?.data_items != null)) + { + foreach (var child in plod1.Children.data_items) + { + var cdrwbl = child.Drawable1; + if ((cdrwbl != null) && (cdrwbl.AllModels?.Length > 0)) + { + if (cdrwbl.Owner is FragDrawable) continue; //it's a copied drawable... eg a wheel + + var dname = child.GroupNameHash.ToString(); + AddDrawableModelsTreeNodes(cdrwbl.DrawableModelsHigh, dname + " - High Detail"); + AddDrawableModelsTreeNodes(cdrwbl.DrawableModelsMedium, dname + " - Medium Detail"); + AddDrawableModelsTreeNodes(cdrwbl.DrawableModelsLow, dname + " - Low Detail"); + AddDrawableModelsTreeNodes(cdrwbl.DrawableModelsVeryLow, dname + " - Very Low Detail"); + } + } + } + } + } + } + public void LoadModels(Dictionary dict) + { + ModelsTreeView.Nodes.Clear(); + //ModelsTreeView.ShowRootLines = true; + + if (dict != null) + { + foreach (var kvp in dict) + { + MetaHash mhash = new MetaHash(kvp.Key); + var drawable = kvp.Value; + + var dnode = ModelsTreeView.Nodes.Add(mhash.ToString()); + dnode.Tag = drawable; + + AddDrawableModelsTreeNodes(drawable.DrawableModelsHigh, "High Detail", dnode); + AddDrawableModelsTreeNodes(drawable.DrawableModelsMedium, "Medium Detail", dnode); + AddDrawableModelsTreeNodes(drawable.DrawableModelsLow, "Low Detail", dnode); + AddDrawableModelsTreeNodes(drawable.DrawableModelsVeryLow, "Very Low Detail", dnode); + + dnode.Expand(); + } + } + } + + private void AddDrawableModelsTreeNodes(ResourcePointerList64 models, string prefix, TreeNode parentDrawableNode = null) + { + if (models == null) return; + if (models.data_items == null) return; + + for (int mi = 0; mi < models.data_items.Length; mi++) + { + var tnc = (parentDrawableNode != null) ? parentDrawableNode.Nodes : ModelsTreeView.Nodes; + + var model = models.data_items[mi]; + string mprefix = prefix + " " + (mi + 1).ToString(); + var mnode = tnc.Add(mprefix + " " + model.ToString()); + mnode.Tag = model; + + if ((model.Geometries == null) || (model.Geometries.data_items == null)) continue; + + foreach (var geom in model.Geometries.data_items) + { + var gname = geom.ToString(); + var gnode = mnode.Nodes.Add(gname); + gnode.Tag = geom; + } + + mnode.Expand(); + } + } + + + private void SelectGeometry(DrawableGeometry geom) + { + MaterialPropertiesPanel.Controls.Clear(); + + var pl = geom?.Shader?.ParametersList; + + if (pl == null) return; + + var tmpPanel = new Panel(); //need this so textboxes resize correctly in case of scrollbar + tmpPanel.Size = new Size(MaterialPropertiesPanel.Width, 10); + tmpPanel.Location = new System.Drawing.Point(0, 0); + tmpPanel.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + + var w = MaterialPropertiesPanel.Width - 140; + + var h = pl.Hashes; + var p = pl.Parameters; + for (int ip = 0; ip < h.Length; ip++) + { + var hash = pl.Hashes[ip]; + var parm = pl.Parameters[ip]; + var data = parm?.Data; + + tmpPanel.Height += 25; + + var l = new Label(); + l.AutoSize = true; + l.Location = new System.Drawing.Point(5, 5 + ip * 25); + l.Text = hash.ToString(); + tmpPanel.Controls.Add(l); + + var t = new TextBox(); + t.Size = new Size(w, 20); + t.Location = new System.Drawing.Point(130, 2 + ip * 25); + t.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + t.Tag = parm; + tmpPanel.Controls.Add(t); + + if (data is Vector4) + { + t.Text = FloatUtil.GetVector4String((Vector4)data); + } + else if (data is Vector4[]) + { + var txt = ""; + var vecs = (Vector4[])data; + foreach (var vec in vecs) + { + if (txt.Length > 0) txt += "; "; + txt += FloatUtil.GetVector4String(vec); + } + t.Text = txt; + } + else if (data is TextureBase) + { + var tex = (TextureBase)data; + t.Text = tex.Name; + if(tex is Texture) + { + t.Text += " (embedded)"; + t.ReadOnly = true; + } + } + + t.TextChanged += ParamTextBox_TextChanged; + + } + + + MaterialPropertiesPanel.Controls.Add(tmpPanel); + } + + private void ParamTextBox_TextChanged(object sender, EventArgs e) + { + var tb = sender as TextBox; + var parm = tb?.Tag as ShaderParameter; + var txt = tb?.Text; + + if (parm == null) return; + + if (parm.DataType == 0)//texture + { + var tex = parm.Data as TextureBase; + if (!(tex is Texture))//don't do this for embedded textures! + { + tex.Name = txt; + tex.NameHash = JenkHash.GenHash(txt.ToLowerInvariant()); + } + } + else if (parm.DataType == 1)//Vector4 + { + parm.Data = FloatUtil.ParseVector4String(txt); + } + else //Vector4 array + { + var strs = txt.Split(';'); + var vecs = new Vector4[parm.DataType]; + for (int i = 0; i < parm.DataType; i++) + { + var vec = Vector4.Zero; + if (i < strs.Length) + { + vec = FloatUtil.ParseVector4String(strs[i].Trim()); + } + vecs[i] = vec; + } + parm.Data = vecs; + } + + + var geom = ModelsTreeView.SelectedNode?.Tag as DrawableGeometry; + if (geom != null) + { + geom.UpdateRenderableParameters = true; + } + + } + + private void ModelMatForm_FormClosed(object sender, FormClosedEventArgs e) + { + ModelForm.OnMaterialFormClosed(); + } + + private void ModelsTreeView_AfterSelect(object sender, TreeViewEventArgs e) + { + SelectGeometry(e.Node.Tag as DrawableGeometry); + } + } +} diff --git a/Forms/ModelMatForm.resx b/Forms/ModelMatForm.resx new file mode 100644 index 0000000..1431f6b --- /dev/null +++ b/Forms/ModelMatForm.resx @@ -0,0 +1,409 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAMAICAAAAAAGACoDAAANgAAABAQAAAAABgAaAMAAN4MAABAQAAAAAAYACgyAABGEAAAKAAAACAA + AABAAAAAAQAYAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/u3v+Pn6//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7+/vX3/rzA3OHl9fz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7//+zv+3Z6qcLI5Pr7/wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP7+/+br+15in6+33vf5/wAAAAAAAAAAAAAAAP7+//7+/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//v8//v8//3+/wAAAAAAAAAAAAAAAAAAAP7+/+Ho+1dana20 + 4/b4/wAAAAAAAPz9//P2/+Tp/ezw/vz9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///X4 + /9Pa+tPa+/H1//z9/wAAAAAAAAAAAAAAAP7+/93k+SsscaSr3PX3/wAAAP7+//L1/7W98AcWgrvC8Pj6 + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/+bs/xohiAEJdrvF9+7y//z9/wAAAAAAAAAA + AP7+/9rh+CEkapmh0/T3/wAAAPj6/9HZ/AEHcgEEb9LZ+/r7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAP7//+/z/3F+zAAAXwQLcZai3fb4/wAAAAAAAAAAAP3+/97l/E9Tmaau4fT3/wAAAO/0/1dd + sAAAV7a/8/H1//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPr8/+jv/46Y3QUUf6Ot + 5PX4/wAAAAAAAAAAAP3+/9zj+3Z6wLe/7fX4/wAAAPD0/212xnaAzerw//z9/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv8/+/z/+Dm+/D0//z9/wAAAAAAAP7+//j6/9Pd+UhLjb/H + 9/D0//3+//n7/+nt/+jt//n7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP7///7+//7+//7+/wAAAAAAAPr8/+7z/83W+ImU2A0UdFNarr/K9env//X4//z9//3+//7//wAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///j6/+Pq/255 + xhckjE5XsVVftUlTqwAKeTA9nr3H8+7z//v8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+//b4/9Tc+Sc0mRonj8rV/crX/ZSb48rX/brG8wwWgQAEdJei + 4efu//n7//7+//z9//z9//z9//z9//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//f5/+3y/+nv/+ft + /8vV+io2mImU2M7c/7vG9yIvlQAOfCg4mM3Y/s/c/4aR1AQRfGtzwtni/ebt/9vi/tri/tXd+9Tc+O3x + /vz9/wAAAAAAAAAAAAAAAAAAAAAAAPn6/87V+FVftkRPrFlnvSEqjQoUfmJvwWFvvg0TfQQIcxEchwAD + cy89n19rvVVitQwZgwAAaiMrkT9NqTVBoiw3mhQihig1mNLX+fv8/wAAAAAAAAAAAAAAAAAAAAAAAPb5 + /52l4EFLqoCK03yF0VBctGhyw52o5GVrvQAAaneBzsHM+jA3mhYgiTtIpJOf3ouW2AAAbmh0wbbA8bS+ + 7qiz5pCb16+56e/z//3+/wAAAAAAAAAAAAAAAAAAAAAAAPv8//H1/+vw/+zx/+nv/7/J9YqP3MbP/8LM + +hwqkFZftaCp5EhRrcTQ+9jj/8rW/UJMqn6J0ebt//X3//f5//b4//X3//f5//z9/wAAAAAAAAAAAAAA + AAAAAAAAAP7+//z9//3+/wAAAAAAAP3+/+7z/6at64iP3aWs7XN8zRIfhyUykp2o5MHM+oKM0xonjY6X + 2+jv//v8/wAAAP7+//n7//b5//r7//7//wAAAAAAAAAAAAAAAP7+//f5/+rw/9Pa9fL0/v7//wAAAAAA + APv8//H1/+Tr/7i/91liu0NPq0VQrS06m0NNqDdCoYqU1+nv//v8/wAAAAAAAPn7/9zi/qSt59ri/fL1 + //v8//7//wAAAPz9//D0/8rT+h0sjkVQrPD0/wAAAAAAAAAAAAAAAAAAAPz9/+7z/8LL9Jqk4aGq6LW/ + 8c3W9+Xs/vH1//v8/wAAAAAAAAAAAPf5/6at5gAAbxIfh6u16+Po/fr7/wAAAPb5/6ev5gAIeAAPernC + 8fX4/wAAAAAAAP3+//v8//z9/wAAAP3+//j6//P3//P2//b4//r8//7+//7+//v8//r8//3+/wAAAPv8 + /+Xr/nuIzwAAbBseg5Sb2fb5/wAAAPf5/8DF8pWe3d/n/vT3//39/wAAAPv8/+zx/87V9+3x/v3+/wAA + AP3+//j6//X4//v8/wAAAAAAAPn7/+Dm/snR9fD0//39//z8/fv8/+3y/8LK9aGq4dfd9/n7/wAAAPz9 + //b5//X4//v8/wAAAAAAAP7+/+7z/4aP1gEPet7k/f39/wAAAPf5/83U+ZCZ2u3x/v7+/wAAAPP3/215 + wgAJd7fB8/L1//7+/wAAAP3+//j6//f5//r8//7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAPj6/87W/AAA + X2duue3y//7+/wAAAPD0/05asBQfidzj/P39/wAAAPX4/6Su6AAAXBccgtff/vv8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP3/3F8xhYli9Xe/fn6/wAAAAAAAO3y/1pltQAJd9be + /fv8/wAAAPz9/+rw/36I0Bknjs/W+vv8/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAPf5/8HI7tnf+/X4//7+/wAAAAAAAO/0/3R7xgAAb9ng/Pz9/wAAAAAAAPn7/+Ln/dLY+fP2//3+ + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP3+//r7//v8//7+/wAAAAAAAAAA + APb4/7/F84eP0e/0//7+/wAAAAAAAP7+//z9//v8//3+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz9//b5//X4//v8/wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////w////4 + P///+D////g8//D4MH/geCB/4Dggf+A4IH/wOCD/+DAB//hgAf//gAP//wAAB/AAAAPwAAAD8AAAA/AA + AAfjAAEHgYADAQPgBwEDEAEBAghgAQwIIEH8CCB//Bggf/wYMH/8ODD///h/////////////KAAAABAA + AAAgAAAAAQAYAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///+vv/fL1/v///wAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///4+Vx7/F5v///wAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAP///4CHtrS62////////////////////wAAAAAAAAAAAP////H0/vf6/v// + /////////4yTwrrB4f///+zw+7rA6P39/////wAAAAAAAAAAAP///56l2BkcguXr/P///////42Uw8jO + 6P///ysvjWVqtP///////wAAAAAAAAAAAP////D0/0hPpsDG6////////6y02d7k8////3qAx+/z/f// + /wAAAAAAAAAAAAAAAAAAAP///////////////8zT8V5ns1Rcrdzh9f///////////wAAAAAAAAAAAAAA + AAAAAP////////7+/6ix3nmBxFthtmdwu09WqbC54/v9//r8//j6//39/wAAAAAAAAAAAOjt/H6I0FJc + skpSqHF+wRMahFZhs4iT1AsNc1pgrm52v2RsuO/z/gAAAP////////L2/cLJ7rrD64+V4DY+ozU+mYmU + 0X2Hy1hfss7V8urv/PP2/v///wAAAP///+Pp+d/k9////////+Pp/4uR3ysymW14xYOM0fD0/P///+Xq + +ri/6Pj6/wAAAOrv/j5DnbS75P////////////X4/+/0/ubr+/r7/////////9rh+hgZhKGo2QAAAPDz + /eLn+f////j6/2Nqttrg9////+Hn+P3+//3+/1hescLJ6/////L2/eru/AAAAAAAAAAAAP///8rR70tR + p/3+//v8/zY6jNPY7////09WqWpwu////wAAAAAAAAAAAAAAAAAAAAAAAPb4/vr7//////v8/5Wd1eHm + +P////v8//T3/wAAAAAAAAAAAAAAAP//AAD8PwAA/D8AAPwDAACAAwAAgAMAAIAHAADABwAAwAEAAMAB + AAAAAQAAAAEAAAABAAAAAQAAwAcAAOAPAAAoAAAAQAAAAIAAAAABABgAAAAAAAAwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//P3/ + /f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/ + +fv/+fv/+Pr/+fv/+vv//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/f7/+fr/8/b/7PL/5+3/6e/+9Pf/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/6O7/cXe1UVaet7z17fL/+Pr//f3/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/4Oj/NzyCUlOd2dz/6O//9Pf//P3/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/2+P9X2OmREGLnqPd + 4+v/8vb/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 1N35bXK1JSRtbHGz5O7/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3Ob/U1eaDwtXjZLT4+z/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP+MjR6AAA+c3i34Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8vb/1d/7MS91AAA1UFSS4On/8vb/+/z/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2OL+NjZ7AAArX2Ok + 4uz/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/ + 2eP/LjJ1DAxKfYTE4Or/8fX/+/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//f7//f7//v7//v// + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/gILIR0eVeoHC3eb/8fX/+/z/AAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+Pr/ + +Pr/+Pr/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+vv/+vv/+/z//f3//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/2eP9ZWeqHx1obnOz4Or/8fX/+/z/AAAAAAAAAAAAAAAA/v7/ + +/z/9fj/8vb/8PX/7vT/8fb/9fj/+fr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/9fj/9fj/9Pj/9Pf/9vn/+/z//v7/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP9ODp9AAA5jZDQ5O7/8PX/+/z/AAAA + AAAAAAAA/v7/+/z/9Pf/7fP/5u//wsz6j5XfuMDx7fL/9vn//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+Pr/8/b/5+3/2eH/2uP/ + 5u3/7fP/8/b/+vv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3ef/U1ebBgVKio/O + 4uz/8fX/+/z/AAAAAAAA/v///P3/9fj/7fP/4uv/hIzZHSWPAABmU1i14ub/9/r/+/z/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9Pf/ + 7/X/09z/TlSzNzWYj5bh5O7/6/L/8vb/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+vv/8fX/ + 2eP/QUWIEhBZbnSz3uj/8fb/+/z/AAAAAAAA/f7/+Pr/7/T/6PH/iI7cAABvAABqAABncXjK6O//9fj/ + +/z/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA+/z/8/f/2uD/Z27EAABnAABiBgl4jJTd5vD/6O//8vX/+fv//f7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAA+vv/8fb/2OP/Mjd6AQE6ZGup4er/8fX/+/z/AAAAAAAA+vz/8fX/6/T/xM/8ExyJAABwAABu + GySRxc387fT/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA+vz/8/f/1Nr/MzqhAABhAxOBAARyBgp5jpLg5Oz/7PP/9Pf/+vz//v7/ + AAAAAAAAAAAAAAAAAAAAAAAA+vv/8fb/2eP/KCtvBwZOjJHS4Or/8fX/+/z/AAAA/f7/9/n/7fP/3+j/ + UFq3AABtAAZ3BAh6mZ/n5vD/7vP/+Pr//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/z/9Pj/6e//sbb1KzWcAABwBhaBAAFyAgp6fITR + 1d777/T/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/3+j/WF2hBglTnaTj5O3/8PX/+/z/AAAA + /P3/9Pf/6vL/k5riAAByAAR0AABrY2vE4ur/6vH/9ff//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/7fL/5O3/ytX/RU6w + AABpAA5+AABuAABnhord6e7/+fv//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/7/T/3+j/k5jbT1KdgYjJ + 3uf+8fX/+/z/AAAA+/z/9fn/4ef/NDqhAABnAABrJjCU0Nn/5/D/8fX/+vv//v7/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + 9vn/7vP/6vP/ztb/O0CmAABpAABrQkuoxMn57PH/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAA+vv/8PX/ + 2+X/en/CUFGak5nY3+j/8fX//P3/AAAA/P3/9fj/4en/i5DbNT2hIyuTpqzv4uz/7vP/9/n//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/9vn/7/P/6vL/ytH/X2i9XWi7wsf/6e//8/f/+Pr//v7/AAAAAAAAAAAAAAAA + AAAAAAAA+vv/8PX/3OX/WF2hW1ylvMD+3uf/8PX/+/z/AAAA/f7/9vn/7fP/4uj/j5Pgf4LV3+X/6fD/ + 9Pf//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///P3/+Pr/8vX/7fP/5+//5u7/6vD/8PT/9vn//P3//v7/ + AAAAAAAAAAAAAAAAAAAA/f7/9/n/7fP/0tz9LDJzNjh/nqTk2uT/7fL/9/n//f7//f7/+fv/8/b/7PL/ + 3eX/zM//5ev/9fj/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f3/+vv/9/n/9vn/9fj/9vn/ + +fr//P3//v7/AAAAAAAAAAAA/v///f7/+vv/9vn/7/T/5vD/2Ob/VFubERNdoajk4u//5O7/7vP/9vj/ + +fr/+vv/+Pr/9fj/9Pj/9fj/9fj/+Pr//P3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///v7/ + /f7//P3//P3//f3//v7//v//AAAAAAAAAAAA/f7/+vz/9vn/8fX/7vT/5O3/3eb/z9n/cHjICxN5d37L + z9n/2eP/5O3/6/L/8PT/9Pf/9/n/+vv/+vv/+/z//P3//f3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+Pr/8/b/7vT/6vL/z9r+jZjeQUeq + IiuQCBN3AAFrBRB8Nj2iUViym6XlydH/4+z/6/L/8PT/9/n/+/z//f7//v//AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9/n/8fX/6/L/3uf/ + mKTkLzibAABoAAB0Fx+HDBh7FSGDAg16AABYAABlCBB/Ji2UhYza1+D/6PL/7fL/9Pf/+vv//f7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/9/n/ + 8PT/7PT/z9j/XmO+AABtAABcMDSXoajsu8X7VV+5hYzblZ/fTVSxFSKMAABkAABnAAN2Qkmpsbrz5e3/ + 6vH/8fX/+Pr//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAA/P3/9/n/8PX/7PT/vcn3LTOZAABaAgR1ZWzD0Nf/5vL/1OP/l53lzs3/6fP/4+7/sLzwZ23CBxSD + AABnAABlHiaSmqHo3+j/5+//7/T/9vn//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/ + /v7//v7//v7//f7/+/z/9vj/7vP/7PX/tcLzEBeGAABkPEWlqLPt2eX/4e7/3On/uMX1gofVe3vPhYzY + z93+5/X/4e3/lJ3gHiOPAABtAABqChiEbHLIytD/5/D/7PL/8/f/+Pr/+fr/+Pr/+Pr/+Pr/+Pr/+Pr/ + +Pr/+fv/+vv/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+fv/9/n/9vj/9fj/9Pf/8fX/7PL/4uv/l6HgDhF7AAN4iZDe0d7/3uz/4vD/w83/VVm3 + ICiSAAFyAABlAABwaHTD1N//2un/3er/w838ZW3BEyOJJzKVAQ16NDmfwsn75fD/5u7/7PL/7vP/7fP/ + 7fP/7fL/7fP/7vP/7/T/8fb/9Pj/9vn/+fr//f3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/v7//P3/+Pr/9Pf/8fX/7vT/7PL/6/L/6fH/5u7/6vX/tsD0CQx4AAFwkZvi7ff/4vD/ + 4fD/z9j/OkGlAABiAABwBxWAAAt7BBN+P0uofYLUztb/4O7/6fb/6fP/qa7xQkyoBg56AABqMjugx8/+ + 5fH/4Ov/4On/3uj/3eb/3+j/3uj/1+L/0d3/1d7/3+f/7fL/9vj/+vz//v7/AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f7/+fr/8/f/6/L/2d//v8j6vcf5ucP1wMv8wM3+vMj6PkqoAABo + UF25usP7tsPyvsr6sLrwQ0utAABqAAV1OUameIDRKDWZAAd2GyeOLDecmaHntsL0pbLom6riq7LzUlu0 + AANzBhR/AAZ0NT+ja3bBY2i/XGG6UViyWl65XGG7XGC6TVWvQU6pPkalODygqK7p8vb/+vz//v7/AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/7/T/wcj2R0ysExeFERmGDxuIFB6K + FBqICxSEAABsAAByDBiDCRSBBRCADhaFCRODAAh4AxF/AAl4CxeDHSaPAAp6AAN0AA19AAd3CBOBEBqH + BhGBAAh5AABwAAByAAh5BhSCAxWCAABsAABvAABlAABnAABxAABjAABmAABhAABdAABYAABhCAt/q7Lr + 8/f/+vv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/+fv/3uT/SE2vAABn + CBB/GiCMLzmfLTWcGByJFRyKGCOOMj2gHymRDxiGGyOPLDCXBRF/AAh3BhaCEyKMICqTKC2WNDqfIzCV + Awx6Eh+JHiaPAAR3AAZ5CxSDICWQX2q7Q1CqAA1+AAFxDxuHiZTbVGC4dHnQnabrTVqzY23EUV62Slau + LjaZXWm9sLjz5ez/9vn/+fv//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +Pv/4+n+e4LPfoPVpqv2vsf/zNX/zdb/xtH/v8v8pK7spKfysLb3vcr4ws784ej/hI/YAAZ1AAJzVF25 + yM//3Of/5+//i5LcAABpMzyfp6vxoKznlqHhqbbtx9H/8fz/kpvfAABiAABph4zc5PD/2OP/193/3un/ + 1+D/2OH/1+D/0Nr/zNL/3+j/6/L/7/T/9vn//P3//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+Pr/9Pf/6vD/5u3/3+b/4uv/6PD/5+//5O3/5/P/sL3sXmS7mZzoz9f/3+z/4e// + mKLiEiKKCBF/KTWZr7T06/f/3ev/VF2zChSBipPcz9v+4u7/3ur/3ev/5/X/qrPrISmSDRJ2Xmq/3ur/ + 4uv/6vH/7fP/7fL/7/T/7vP/7fP/7fP/8PX/8fX/9Pf/+Pr/+/z//v7/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+Pr/9vn/9Pf/8vb/8vb/8/b/9Pf/7/T/6/L/tL/ubXLH + en/Ti43gqavy0t3/nafjMj6fJzaaAAV1GyeOYmW7Nz6fAABgNj6i1N//3uz/2uX/3Oj/5PH/wcj7FR2J + AAN0gong0tr/6fH/7/P/9vj/+Pr/+fv/+fv/+Pr/+Pr/+Pr/+fv/+vv//P3//f7//v//AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3/+/z/+/z/+/z//f3//f7/ + +fv/8fX/5Oz/jpbfc3jObnXLcXfOk5rks7b4iY3dR1KvDhuEAABoAABlEBV9U12ytcD13Or/3en/3ej/ + 1eL/q7fvGR+MKDKZbnnNxc/76PD/8fX/+fr//f7//v//AAAA/v7//f7//f3//P3//f3//f7//v//AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//P3//P3//f7//v7/AAAA + AAAAAAAAAAAAAAAA/f7/9vn/7/T/yNH5lJrleoDVmZ3pmpzpc3nPfoTWf4bYVFy3HSaLZ3PGsrb8v8r8 + y9n9q7jre4LRf4fUgIvXAwZ1AABrhYjb0NX/6PH/8PX/+Pr//f7/AAAAAAAA/v///f3/+vv/+Pr/9/r/ + 9/n/+Pr/+/z//f7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v///f7/+/z/+fr/9vj/9/n/ + +vz/+vv/+/z//v7/AAAAAAAAAAAAAAAA/v7/+vz/8/f/7PL/2uT/t8H1srP6vcH+nKTnSlOxV2C7TVaz + WGS8QUqmSlSuSFOtR1GtbXTKVl23ARB5AAh2AABnd33P3eP/4ur/7/T/9/n//P3/AAAAAAAAAAAA/P3/ + 9/n/8vb/7PH/6fD/7PL/7vP/8vb/9vn/+/z//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/+Pr/ + 8/b/7/T/8Pb/6vH/3eP97vL++fr//P3/AAAAAAAAAAAAAAAAAAAA/f7/+vv/9fj/7/T/5+//z9f+t7v4 + uLn9Z2zFLzucFCGIMz6gGCCMAAd4AAl2Dx2EER+GXWK8c3XLKzKXd4LP4er/6/L/8PX/9/n//P3//v// + AAAAAAAA/v7/+fv/8/b/7PP/y9H/i4/erLbt4er/5e3/7fP/8/b/+fv//f3//v7/AAAAAAAAAAAAAAAA + /v7/+/z/9vj/8PT/6/L/3+n/x9H9aHTAZGvG3+b9+Pr/+/z/AAAAAAAAAAAAAAAAAAAAAAAA/v7/+/z/ + +Pr/8vb/6/H/3OX+wMn4maDmdHrPWGG6T1a1eoHWcHfOTlayUlq1SlKubHjAxMj/0dn/4+v/7PL/8vb/ + +Pr//P3//v7/AAAAAAAAAAAA/f7/+fr/7vP/xsv5YGXAHymRKjKYYWS9rbLz4u3/6/P/8vb/+fr//f7/ + AAAAAAAAAAAA/v//+/z/9vj/7fL/5e3/xs7/Y23BIiiSAABeLTab3+b/9/r/+/z/AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAA/f7/+vz/9vj/8PX/6vH/3eb/ydL8xM/6uMPyt733w8j/zNb/1Nz/3OT/4uz/5u7/ + 7fP/8vb/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAA/f7/+fv/7vP/jpHiAAJ1CxaBER6GAABoFRmGbXbH + 0Nf/7PL/9fj//P3/AAAAAAAAAAAA/v7/+fv/8/f/4Of/hYvbKDGZAABuAABdAAZyi5La5+7/9vn/+/z/ + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/9ff/8vb/7/X/7fP/6/L/5u3/5ez/6fD/ + 7PP/7/T/8fX/9Pf/9/n/+vv//P3//v7//v//AAAAAAAAAAAAAAAAAAAA/v7/+fv/8fb/2eH9fIbQExqH + AABrAAp6AAFyAABwS0+uztX39vn/+vz/AAAAAAAAAAAA/f7/+Pr/8ff/qbLpAABrAABhAABwDBWAfobX + 5e3/8PX/9vn//f3/AAAAAAAA/v///f7/+/z/+vv/+vv/+vz//P3//v7//v///v7//P3/+vz/+Pr/9/n/ + 9vj/9vj/9vj/9vj/9/n/+fr/+/z//P3//f7//v7//f7//P3/+/z/+vz/+/z//P3//v7/AAAA/v7/+/z/ + 9fj/7/T/5/H/uML1U1e1AAh5AABuAABvMjmdv8bz9vr/+vv/AAAAAAAAAAAA/f7/+fv/7/T/iY7aDxSA + GiONa3XHsr7w4Oj/6/H/9Pf/+vz//v7/AAAA/v///P3/+Pr/9Pf/8/f/9fj/9fj/9vn/+/z//v7/AAAA + AAAAAAAA/v7//f7//P3/+/z/+/z//P3//f7//v//AAAAAAAAAAAA/v7/+/z/9/n/9vn/9vn/9Pj/9vn/ + +/z//v7/AAAA/f7/+vz/9fj/7/T/6vL/3ef/i5PbGRqJBQl5jJbZ6vH/9Pj/+/z/AAAAAAAAAAAA/f7/ + +fv/8fT/1Nn9t7/0wcr54er/7fT/8fX/9fj/+vv//f7/AAAAAAAA/f3/+Pr/8PT/6/L/3uX/ztb/5Or/ + 8/f/+Pr//f7/AAAAAAAAAAAA/f7/+vz/+Pr/+fv/+fv/+vv//f3//v//AAAAAAAAAAAA/P3/9/n/7vL/ + 193/ztf/5u3/7vP/9Pf/+/z//v7/AAAA/v7//P3/+Pr/8fX/7PP/5/D/sLfxoKnk4+r/8vf/9/n//f3/ + AAAAAAAAAAAA/v7/+/z/9vn/9Pf/8vb/8fb/8fX/9Pf/+Pr//P3//v7/AAAAAAAA/v7/+vv/8vb/5+7/ + y9H/WWO9KSmSkZXj6vD/+Pv//P3/AAAAAAAA/f7/+Pr/9fj/8vb/6O7/7vP/9fj/+Pr//f7/AAAAAAAA + /v//+vv/8vb/7PP/hYraKiqKlp7i6PD/7fP/9ff/+/z//v7/AAAAAAAA/f7/+vv/9ff/8fX/8PX/8vb/ + 8/f/9vn/+/z//v7/AAAAAAAAAAAAAAAA/f7/+/z/+vv/+fr/+fr/+vv//P3//v7/AAAAAAAAAAAAAAAA + /P3/9fj/7PL/1d7/RUysAABhAABlg4ja6/D/+Pr//P3/AAAAAAAA+/z/9fj/6e7/2eD/h4/bnaXg7PH/ + 9fj/+/z/AAAAAAAA/v7/+Pr/8PX/y9X1JDGVAABaERWDoKnp6PH/7vP/9/n//P3/AAAAAAAAAAAA/v7/ + /P3/+vv/+fv/+fv/+vv//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAA/v7//v7//v7//v7//v//AAAAAAAA + AAAAAAAAAAAA/v7/+fv/8PX/7PX/ipPdAABsAABlQ1Cp3Ob/7vP/9/n//f7/AAAAAAAA+fv/9Pj/yNH5 + Ule2DBJ8Ljie0df+8fb/+fv//v7/AAAA/v7/+Pr/7/X/hY3YAABxAAl7AABuEBaEs7nz6fH/8fX/+vv/ + /v7/AAAAAAAAAAAAAAAA/v///v7//v7//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/9vn/7PL/0tn/LzidAQFsAAB0iZHb6vP/8PT/+fv//v//AAAA + /v7/+Pr/8vf/r7rqAAV4AABdPUen1N//7PL/9vn//f7/AAAA/v7/+fr/7/T/yc75S1G0AABrARKAAABp + Qker0df/7fP/9/n//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/n/5+7/cXXNAAd2AABuMDebzdT97PL/ + 9vj//P3/AAAAAAAA/v7/9/n/7/X/tL/uFCCLAABqHSqRvcf46fD/9Pf//f3/AAAAAAAA+vv/8vX/6vH/ + yM3+JC2XAABtAAV2Agx9q7Ly7vT/9vn//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/9/r/4uj/WWO1AAVx + KTaYu8T07fT/8vb/+vv//v7/AAAAAAAA/v7/9/n/7vX/vsn1Iy2SAABrAQ99mp/o6PD/9Pf//P3/AAAA + AAAA/P3/9/n/7vP/6fL/s7z2DBB/AABeQ0uttrr56e7/+Pr//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/P3/ + +fv/4ef6g4zNbXfFw8v27fT/8vb/+Pr//f3/AAAAAAAAAAAA/v7/9/n/7vT/yNL7MjucAABtBxF/nKLo + 6fH/9Pf//P3/AAAAAAAA/v7/+/z/9fj/7fL/6/T/jZXbLzScrrP14en/7fL/+fv//v7/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/f7/+vz/8PP91dr34+f/8vb/8/f/9/r//P3//v//AAAAAAAAAAAA/v7/+Pr/8PX/1N3/ + QUqmAQRxBQ98m6Dm7PL/9fj//P3/AAAAAAAAAAAA/v7/+/z/9ff/8PX/5ez/ytH94ej/8vb/9vj/+/z/ + /v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+vz/+fv/+Pr/+Pr/+vv//f3//v//AAAAAAAAAAAAAAAA + /v//+fv/9Pf/2+L/SVGtAABsLTaZytL58fX/9/n//f7/AAAAAAAAAAAAAAAA/v7/+/z/9/n/9fj/9vn/ + 9fj/9vj/+vz//f7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7//f3//f3//f3//v7//v//AAAA + AAAAAAAAAAAAAAAAAAAA+/z/9vn/6e//mZ7gTVarr7bp6/H/9fj/+vv//v7/AAAAAAAAAAAAAAAAAAAA + /v7//f7/+/z/+/z/+/z//P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f3/+Pr/9fj/6e7/4+n/8fb/9Pf/+Pr//f3/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//P3/+fv/+fv/+vv/+Pr/+vv/ + /P3//v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7//f7/ + /f3//P3//f7//v7//v//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + ///////4D/////////AH////////8Af////////wB/////////AH////////8Af////////wB/////// + //AH////////8Af////////wB/////////AH////////8AfwP//////wB8Af//+Af/AHgB///wA/8AcA + H///AB/wBgAf//8AD/AGAB///wAH8AYAH///AAPwBAAf//8AA/AEAD///wAD8AQAP///AAPwBAB///+A + A/AEAP///8AD4AAA////4AcAAAH////wDgAAAf/////8AAAH//////gAAAf/////4AAAAf/////gAAAA + /f//+AAAAAAAD//AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAf/gAAAAAAAB/+A + AAAAAAAP/4AAAAAAAB//wAAAAABAf/4HwAAAAYAf8APAAAADgA/gA+AAAAMAA8AD8AAABwADgAP8AAAf + AAOAA/4AAB8AA4ADAAAAAQADgAIAcA4AgAOABgBwDgBAA4AMAGAMADADwDwAYAwAOAfg+ABgBAAeH//4 + AEAEAB////gAwAYAH///+ADABgAf///4AcAGAB////gBwAcAH///+APAB4A////8B+AHwH//////4A// + ///////gD/////////Af//////////////8= + + + \ No newline at end of file diff --git a/Rendering/Renderer.cs b/Rendering/Renderer.cs index 21b1028..a759a86 100644 --- a/Rendering/Renderer.cs +++ b/Rendering/Renderer.cs @@ -2563,10 +2563,17 @@ namespace CodeWalker.Rendering for (int gi = 0; gi < model.Geometries.Length; gi++) { var geom = model.Geometries[gi]; + var dgeom = geom.DrawableGeom; + + if (dgeom.UpdateRenderableParameters) //when edited by material editor + { + geom.Init(dgeom); + dgeom.UpdateRenderableParameters = false; + } if (isselected) { - if (SelectionGeometryDrawFlags.ContainsKey(geom.DrawableGeom)) + if (SelectionGeometryDrawFlags.ContainsKey(dgeom)) { continue; } //filter out geometries in selected item that aren't flagged for drawing. } From 4bc51f8d69b60ab77c9a805cfac20108448740ec Mon Sep 17 00:00:00 2001 From: dexy Date: Fri, 22 Mar 2019 20:07:12 +1100 Subject: [PATCH 154/158] Added Save button to ModelForm, fixed material editor not updating all relevant geometries on parameter change --- Forms/ModelForm.Designer.cs | 73 +++++++++++++++ Forms/ModelForm.cs | 182 +++++++++++++++++++++++++++++++++++- Forms/ModelForm.resx | 25 +++++ Forms/ModelMatForm.cs | 42 ++++++++- 4 files changed, 319 insertions(+), 3 deletions(-) diff --git a/Forms/ModelForm.Designer.cs b/Forms/ModelForm.Designer.cs index 2264b9f..523c3eb 100644 --- a/Forms/ModelForm.Designer.cs +++ b/Forms/ModelForm.Designer.cs @@ -38,6 +38,11 @@ this.ConsolePanel = new System.Windows.Forms.Panel(); this.ConsoleTextBox = new CodeWalker.WinForms.TextBoxFix(); this.ToolsPanel = new System.Windows.Forms.Panel(); + this.MainToolbarPanel = new System.Windows.Forms.Panel(); + this.MainToolbar = new System.Windows.Forms.ToolStrip(); + this.SaveButton = new System.Windows.Forms.ToolStripSplitButton(); + this.SaveMenuButton = new System.Windows.Forms.ToolStripMenuItem(); + this.SaveAsMenuButton = new System.Windows.Forms.ToolStripMenuItem(); this.ToolsTabControl = new System.Windows.Forms.TabControl(); this.ToolsModelsTabPage = new System.Windows.Forms.TabPage(); this.ModelsTreeView = new CodeWalker.WinForms.TreeViewFix(); @@ -76,9 +81,12 @@ this.ToolsPanelHideButton = new System.Windows.Forms.Button(); this.ToolsDragPanel = new System.Windows.Forms.Panel(); this.ToolsPanelShowButton = new System.Windows.Forms.Button(); + this.SaveFileDialog = new System.Windows.Forms.SaveFileDialog(); this.StatusStrip.SuspendLayout(); this.ConsolePanel.SuspendLayout(); this.ToolsPanel.SuspendLayout(); + this.MainToolbarPanel.SuspendLayout(); + this.MainToolbar.SuspendLayout(); this.ToolsTabControl.SuspendLayout(); this.ToolsModelsTabPage.SuspendLayout(); this.ToolsMaterialsTabPage.SuspendLayout(); @@ -158,6 +166,7 @@ this.ToolsPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left))); this.ToolsPanel.BackColor = System.Drawing.SystemColors.ControlDark; + this.ToolsPanel.Controls.Add(this.MainToolbarPanel); this.ToolsPanel.Controls.Add(this.ToolsTabControl); this.ToolsPanel.Controls.Add(this.ToolsPanelHideButton); this.ToolsPanel.Controls.Add(this.ToolsDragPanel); @@ -167,6 +176,56 @@ this.ToolsPanel.TabIndex = 2; this.ToolsPanel.Visible = false; // + // MainToolbarPanel + // + this.MainToolbarPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.MainToolbarPanel.BackColor = System.Drawing.SystemColors.ControlDark; + this.MainToolbarPanel.Controls.Add(this.MainToolbar); + this.MainToolbarPanel.Location = new System.Drawing.Point(181, 2); + this.MainToolbarPanel.Name = "MainToolbarPanel"; + this.MainToolbarPanel.Size = new System.Drawing.Size(34, 24); + this.MainToolbarPanel.TabIndex = 4; + // + // MainToolbar + // + this.MainToolbar.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; + this.MainToolbar.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.SaveButton}); + this.MainToolbar.Location = new System.Drawing.Point(0, 0); + this.MainToolbar.Name = "MainToolbar"; + this.MainToolbar.Size = new System.Drawing.Size(34, 25); + this.MainToolbar.TabIndex = 7; + this.MainToolbar.Text = "Main Toolbar"; + // + // SaveButton + // + this.SaveButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.SaveButton.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.SaveMenuButton, + this.SaveAsMenuButton}); + this.SaveButton.Image = ((System.Drawing.Image)(resources.GetObject("SaveButton.Image"))); + this.SaveButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.SaveButton.Name = "SaveButton"; + this.SaveButton.Size = new System.Drawing.Size(32, 22); + this.SaveButton.Text = "Save"; + this.SaveButton.ButtonClick += new System.EventHandler(this.SaveButton_ButtonClick); + // + // SaveMenuButton + // + this.SaveMenuButton.Image = ((System.Drawing.Image)(resources.GetObject("SaveMenuButton.Image"))); + this.SaveMenuButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.SaveMenuButton.Name = "SaveMenuButton"; + this.SaveMenuButton.Size = new System.Drawing.Size(123, 22); + this.SaveMenuButton.Text = "Save"; + this.SaveMenuButton.Click += new System.EventHandler(this.SaveMenuButton_Click); + // + // SaveAsMenuButton + // + this.SaveAsMenuButton.Name = "SaveAsMenuButton"; + this.SaveAsMenuButton.Size = new System.Drawing.Size(123, 22); + this.SaveAsMenuButton.Text = "Save As..."; + this.SaveAsMenuButton.Click += new System.EventHandler(this.SaveAsMenuButton_Click); + // // ToolsTabControl // this.ToolsTabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) @@ -639,6 +698,10 @@ this.ToolsPanelShowButton.UseVisualStyleBackColor = true; this.ToolsPanelShowButton.Click += new System.EventHandler(this.ToolsPanelShowButton_Click); // + // SaveFileDialog + // + this.SaveFileDialog.Filter = "All files|*.*"; + // // ModelForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -665,6 +728,10 @@ this.ConsolePanel.ResumeLayout(false); this.ConsolePanel.PerformLayout(); this.ToolsPanel.ResumeLayout(false); + this.MainToolbarPanel.ResumeLayout(false); + this.MainToolbarPanel.PerformLayout(); + this.MainToolbar.ResumeLayout(false); + this.MainToolbar.PerformLayout(); this.ToolsTabControl.ResumeLayout(false); this.ToolsModelsTabPage.ResumeLayout(false); this.ToolsMaterialsTabPage.ResumeLayout(false); @@ -725,5 +792,11 @@ private System.Windows.Forms.Button TextureViewerButton; private System.Windows.Forms.CheckBox HDTexturesCheckBox; private System.Windows.Forms.Button MaterialEditorButton; + private System.Windows.Forms.Panel MainToolbarPanel; + private System.Windows.Forms.ToolStrip MainToolbar; + private System.Windows.Forms.ToolStripSplitButton SaveButton; + private System.Windows.Forms.ToolStripMenuItem SaveMenuButton; + private System.Windows.Forms.ToolStripMenuItem SaveAsMenuButton; + private System.Windows.Forms.SaveFileDialog SaveFileDialog; } } \ No newline at end of file diff --git a/Forms/ModelForm.cs b/Forms/ModelForm.cs index 4012ebb..d443bbf 100644 --- a/Forms/ModelForm.cs +++ b/Forms/ModelForm.cs @@ -101,7 +101,10 @@ namespace CodeWalker.Forms ModelMatForm materialForm = null; + private bool modelModified = false; + ExploreForm exploreForm = null; + RpfFileEntry rpfFileEntry = null; @@ -109,6 +112,7 @@ namespace CodeWalker.Forms { InitializeComponent(); + exploreForm = ExpForm; gameFileCache = ExpForm?.GetFileCache(); @@ -569,6 +573,7 @@ namespace CodeWalker.Forms FileName = ydr.Name; Ydr = ydr; + rpfFileEntry = Ydr.RpfFileEntry; if (ydr.Drawable != null) { @@ -583,6 +588,7 @@ namespace CodeWalker.Forms FileName = ydd.Name; Ydd = ydd; + rpfFileEntry = Ydd.RpfFileEntry; UpdateModelsUI(ydd.Dict); @@ -594,6 +600,7 @@ namespace CodeWalker.Forms FileName = yft.Name; Yft = yft; + rpfFileEntry = Yft.RpfFileEntry; var dr = yft.Fragment?.Drawable; if (dr != null) @@ -609,6 +616,7 @@ namespace CodeWalker.Forms FileName = ybn.Name; Ybn = ybn; + rpfFileEntry = Ybn.RpfFileEntry; if (Ybn.Bounds != null) { @@ -623,6 +631,7 @@ namespace CodeWalker.Forms FileName = ypt.Name; Ypt = ypt; + rpfFileEntry = Ypt.RpfFileEntry; UpdateModelsUI(ypt.DrawableDict); @@ -634,6 +643,7 @@ namespace CodeWalker.Forms FileName = ynv.Name; Ynv = ynv; + rpfFileEntry = Ynv.RpfFileEntry; if (ynv.Nav.SectorTree != null) { @@ -655,7 +665,7 @@ namespace CodeWalker.Forms private void UpdateFormTitle() { - Text = fileName + " - CodeWalker by dexyfex"; + Text = fileName + (modelModified ? "*" : "") + " - CodeWalker by dexyfex"; } @@ -1077,6 +1087,161 @@ namespace CodeWalker.Forms } + public void OnModelModified() + { + modelModified = true; + UpdateFormTitle(); + } + + + + + + private void Save(bool saveAs = false) + { + var editMode = exploreForm?.EditMode ?? false; + + if (string.IsNullOrEmpty(FilePath)) + { + if (!editMode) saveAs = true; + if (rpfFileEntry?.Parent == null) saveAs = true; + } + else + { + if ((FilePath.ToLowerInvariant().StartsWith(GTAFolder.CurrentGTAFolder.ToLowerInvariant()))) saveAs = true; + if (!File.Exists(FilePath)) saveAs = true; + } + + var fn = FilePath; + if (saveAs) + { + if (!string.IsNullOrEmpty(fn)) + { + var dir = new FileInfo(fn).DirectoryName; + if (!Directory.Exists(dir)) dir = ""; + SaveFileDialog.InitialDirectory = dir; + } + SaveFileDialog.FileName = FileName; + + var fileExt = Path.GetExtension(FileName); + if ((fileExt.Length > 1) && fileExt.StartsWith(".")) + { + fileExt = fileExt.Substring(1); + } + SaveFileDialog.Filter = fileExt.ToUpperInvariant() + " files|*." + fileExt + "|All files|*.*"; + + if (SaveFileDialog.ShowDialog() != DialogResult.OK) return; + fn = SaveFileDialog.FileName; + } + + + + byte[] fileBytes = null; + +#if !DEBUG + try + { +#endif + if (Ydr != null) + { + fileBytes = Ydr.Save(); + } + else if (Ydd != null) + { + fileBytes = Ydd.Save(); + } + else if (Yft != null) + { + fileBytes = Yft.Save(); + } + else if (Ybn != null) + { + fileBytes = Ybn.Save(); + } + else if (Ypt != null) + { + fileBytes = Ypt.Save(); + } + else if (Ynv != null) + { + fileBytes = Ynv.Save(); + } +#if !DEBUG + } + catch(Exception ex) + { + MessageBox.Show("Error saving file!\n" + ex.ToString()); + return; + } +#endif + if (fileBytes == null) + { + MessageBox.Show("Error saving file!\n fileBytes was null!"); + return; + } + + + var rpfSave = editMode && (rpfFileEntry?.Parent != null) && !saveAs; + + if (rpfSave) + { + if (!rpfFileEntry.Path.ToLowerInvariant().StartsWith("mods")) + { + if (MessageBox.Show("This file is NOT located in the mods folder - Are you SURE you want to save this file?\r\nWARNING: This could cause permanent damage to your game!!!", "WARNING: Are you sure about this?", MessageBoxButtons.YesNo) != DialogResult.Yes) + { + return;//that was a close one + } + } + + try + { + if (!(exploreForm?.EnsureRpfValidEncryption(rpfFileEntry.File) ?? false)) return; + + var newentry = RpfFile.CreateFile(rpfFileEntry.Parent, rpfFileEntry.Name, fileBytes); + if (newentry != rpfFileEntry) + { } + rpfFileEntry = newentry; + + exploreForm?.RefreshMainListViewInvoke(); //update the file details in explorer... + + StatusLabel.Text = rpfFileEntry.Name + " saved successfully at " + DateTime.Now.ToString(); + + //victory! + } + catch (Exception ex) + { + MessageBox.Show("Error saving file to RPF! The RPF archive may be corrupted...\r\n" + ex.ToString(), "Really Bad Error"); + } + + } + else + { + try + { + File.WriteAllBytes(fn, fileBytes); + + fileName = Path.GetFileName(fn); + FilePath = fn; + + StatusLabel.Text = fileName + " saved successfully at " + DateTime.Now.ToString(); + } + catch (Exception ex) + { + MessageBox.Show("Error writing file to disk!\n" + ex.ToString()); + return; + } + } + + + modelModified = false; + UpdateFormTitle(); + + } + + + + + @@ -1656,5 +1821,20 @@ namespace CodeWalker.Forms } + + private void SaveButton_ButtonClick(object sender, EventArgs e) + { + Save(); + } + + private void SaveMenuButton_Click(object sender, EventArgs e) + { + Save(); + } + + private void SaveAsMenuButton_Click(object sender, EventArgs e) + { + Save(true); + } } } diff --git a/Forms/ModelForm.resx b/Forms/ModelForm.resx index 0f54839..138334d 100644 --- a/Forms/ModelForm.resx +++ b/Forms/ModelForm.resx @@ -123,7 +123,32 @@ 166, 17 + + 276, 17 + + + 276, 17 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABWSURBVDhPY6AK+Pbt238S8PsvX74YQLVCAEjCyckJjj+8 + /wjHyGIguq2tDdMQUgwAYZghUO2kGwDCID1Q7fgNQMbIamhrADF41IBBaQA5GKqdEsDAAADtDPd9n5qK + lQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABWSURBVDhPY6AK+Pbt238S8PsvX74YQLVCAEjCyckJjj+8 + /wjHyGIguq2tDdMQUgwAYZghUO2kGwDCID1Q7fgNQMbIamhrADF41IBBaQA5GKqdEsDAAADtDPd9n5qK + lQAAAABJRU5ErkJggg== + + + + 397, 17 + AAABAAMAICAAAAAAGACoDAAANgAAABAQAAAAABgAaAMAAN4MAABAQAAAAAAYACgyAABGEAAAKAAAACAA diff --git a/Forms/ModelMatForm.cs b/Forms/ModelMatForm.cs index 26bbbef..8258841 100644 --- a/Forms/ModelMatForm.cs +++ b/Forms/ModelMatForm.cs @@ -15,6 +15,8 @@ namespace CodeWalker.Forms public partial class ModelMatForm : Form { private ModelForm ModelForm; + private DrawableBase Drawable; + private Dictionary DrawableDict; public ModelMatForm(ModelForm modelForm) @@ -28,6 +30,7 @@ namespace CodeWalker.Forms public void LoadModel(DrawableBase drawable) { + Drawable = drawable; ModelsTreeView.Nodes.Clear(); ModelsTreeView.ShowRootLines = false; @@ -64,6 +67,8 @@ namespace CodeWalker.Forms } public void LoadModels(Dictionary dict) { + DrawableDict = dict; + ModelsTreeView.Nodes.Clear(); //ModelsTreeView.ShowRootLines = true; @@ -198,11 +203,16 @@ namespace CodeWalker.Forms if (parm.DataType == 0)//texture { var tex = parm.Data as TextureBase; - if (!(tex is Texture))//don't do this for embedded textures! + var ttex = tex as Texture; + if (ttex == null)//don't do this for embedded textures! { tex.Name = txt; tex.NameHash = JenkHash.GenHash(txt.ToLowerInvariant()); } + else + { + //TODO: modify embedded textures! + } } else if (parm.DataType == 1)//Vector4 { @@ -228,11 +238,39 @@ namespace CodeWalker.Forms var geom = ModelsTreeView.SelectedNode?.Tag as DrawableGeometry; if (geom != null) { - geom.UpdateRenderableParameters = true; + if (Drawable != null) + { + UpdateRenderableParams(Drawable, geom.Shader); + } + if (DrawableDict != null) + { + foreach (var dwbl in DrawableDict.Values) + { + UpdateRenderableParams(dwbl, geom.Shader); + } + } } + ModelForm.OnModelModified(); + } + private void UpdateRenderableParams(DrawableBase dwbl, ShaderFX shader) + { + foreach (var model in dwbl.AllModels) + { + if (model?.Geometries?.data_items == null) continue; + foreach (var geom in model.Geometries.data_items) + { + if (geom.Shader == shader) + { + geom.UpdateRenderableParameters = true; + } + } + } + } + + private void ModelMatForm_FormClosed(object sender, FormClosedEventArgs e) { ModelForm.OnMaterialFormClosed(); From a434d9ad557fa11b2048b7f791661962a4693389 Mon Sep 17 00:00:00 2001 From: dexy Date: Fri, 22 Mar 2019 22:18:28 +1100 Subject: [PATCH 155/158] RPF Explorer support for files not in RPFs --- ExploreForm.cs | 68 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 50 insertions(+), 18 deletions(-) diff --git a/ExploreForm.cs b/ExploreForm.cs index 3793b3a..2bbcfd7 100644 --- a/ExploreForm.cs +++ b/ExploreForm.cs @@ -1365,61 +1365,68 @@ namespace CodeWalker if (data == null) return; var ft = item.FileType; + var fe = item.File; + if (fe == null) + { + //this should only happen when opening a file from filesystem... + fe = CreateFileEntry(name, path, ref data); + } + switch (ft.DefaultAction) { case FileTypeAction.ViewText: - ViewText(name, path, data, item.File); + ViewText(name, path, data, fe); break; case FileTypeAction.ViewXml: - ViewXml(name, path, data, item.File); + ViewXml(name, path, data, fe); break; case FileTypeAction.ViewYtd: - ViewYtd(name, path, data, item.File); + ViewYtd(name, path, data, fe); break; case FileTypeAction.ViewYmt: - ViewYmt(name, path, data, item.File); + ViewYmt(name, path, data, fe); break; case FileTypeAction.ViewYmf: - ViewYmf(name, path, data, item.File); + ViewYmf(name, path, data, fe); break; case FileTypeAction.ViewYmap: - ViewYmap(name, path, data, item.File); + ViewYmap(name, path, data, fe); break; case FileTypeAction.ViewYtyp: - ViewYtyp(name, path, data, item.File); + ViewYtyp(name, path, data, fe); break; case FileTypeAction.ViewJPso: - ViewJPso(name, path, data, item.File); + ViewJPso(name, path, data, fe); break; case FileTypeAction.ViewCut: - ViewCut(name, path, data, item.File); + ViewCut(name, path, data, fe); break; case FileTypeAction.ViewModel: - ViewModel(name, path, data, item.File); + ViewModel(name, path, data, fe); break; case FileTypeAction.ViewAwc: - ViewAwc(name, path, data, item.File); + ViewAwc(name, path, data, fe); break; case FileTypeAction.ViewGxt: - ViewGxt(name, path, data, item.File); + ViewGxt(name, path, data, fe); break; case FileTypeAction.ViewRel: - ViewRel(name, path, data, item.File); + ViewRel(name, path, data, fe); break; case FileTypeAction.ViewFxc: - ViewFxc(name, path, data, item.File); + ViewFxc(name, path, data, fe); break; case FileTypeAction.ViewYwr: - ViewYwr(name, path, data, item.File); + ViewYwr(name, path, data, fe); break; case FileTypeAction.ViewYvr: - ViewYvr(name, path, data, item.File); + ViewYvr(name, path, data, fe); break; case FileTypeAction.ViewYcd: - ViewYcd(name, path, data, item.File); + ViewYcd(name, path, data, fe); break; case FileTypeAction.ViewCacheDat: - ViewCacheDat(name, path, data, item.File); + ViewCacheDat(name, path, data, fe); break; case FileTypeAction.ViewHex: default: @@ -1628,6 +1635,31 @@ namespace CodeWalker f.LoadMeta(cachedat); } + private RpfFileEntry CreateFileEntry(string name, string path, ref byte[] data) + { + //this should only really be used when loading a file from the filesystem. + RpfFileEntry e = null; + uint rsc7 = (data?.Length > 4) ? BitConverter.ToUInt32(data, 0) : 0; + if (rsc7 == 0x37435352) //RSC7 header present! create RpfResourceFileEntry and decompress data... + { + e = RpfFile.CreateResourceFileEntry(ref data, 0);//"version" should be loadable from the header in the data.. + data = ResourceBuilder.Decompress(data); + } + else + { + var be = new RpfBinaryFileEntry(); + be.FileSize = (uint)data?.Length; + be.FileUncompressedSize = be.FileSize; + e = be; + } + e.Name = name; + e.NameLower = name?.ToLowerInvariant(); + e.NameHash = JenkHash.GenHash(e.NameLower); + e.ShortNameHash = JenkHash.GenHash(Path.GetFileNameWithoutExtension(e.NameLower)); + e.Path = path; + return e; + } + private Form FindExistingForm(RpfFileEntry e) { From bd283a5c078a4b03c11979a524fb69f368c845aa Mon Sep 17 00:00:00 2001 From: dexy Date: Sat, 23 Mar 2019 22:23:37 +1100 Subject: [PATCH 156/158] Ymap frustum culling --- CodeWalker.Core/World/Camera.cs | 15 +++++++++++++++ Rendering/Renderer.cs | 23 +++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/CodeWalker.Core/World/Camera.cs b/CodeWalker.Core/World/Camera.cs index b93c4fe..c4e59eb 100644 --- a/CodeWalker.Core/World/Camera.cs +++ b/CodeWalker.Core/World/Camera.cs @@ -334,5 +334,20 @@ namespace CodeWalker.World } return true; } + public bool ContainsAABBNoClipNoOpt(ref Vector3 bmin, ref Vector3 bmax) + { + var c = (bmax + bmin) * 0.5f - Position; + var e = (bmax - bmin) * 0.5f; + for (int i = 0; i < 5; i++) + { + var pd = Planes[i].D; + var pn = Planes[i].Normal; + var d = (c.X * pn.X) + (c.Y * pn.Y) + (c.Z * pn.Z); + var r = (e.X * (pn.X > 0 ? pn.X : -pn.X)) + (e.Y * (pn.Y > 0 ? pn.Y : -pn.Y)) + (e.Z * (pn.Z > 0 ? pn.Z : -pn.Z)); + if ((d + r) < -pd) return false; + //if ((d - r) < -pd) ; //intersecting + } + return true; + } } } diff --git a/Rendering/Renderer.cs b/Rendering/Renderer.cs index a759a86..b541054 100644 --- a/Rendering/Renderer.cs +++ b/Rendering/Renderer.cs @@ -1672,6 +1672,16 @@ namespace CodeWalker.Rendering return false; } + if (!ymap.HasChanged)//don't cull edited project ymaps, because extents may not have been updated! + { + var eemin = ymap._CMapData.entitiesExtentsMin; + var eemax = ymap._CMapData.entitiesExtentsMax; + if (!camera.ViewFrustum.ContainsAABBNoClipNoOpt(ref eemin, ref eemax)) + { + return false; + } + } + return true; } private void RenderWorldCalcEntityVisibility(YmapEntityDef ent) @@ -2522,6 +2532,19 @@ namespace CodeWalker.Rendering { RenderCollisionMesh(sdrawable.Bound, entity); } + //FragDrawable fdrawable = rndbl.Key as FragDrawable; + //if (fdrawable != null) + //{ + // if (fdrawable.Bound != null) + // { + // RenderCollisionMesh(fdrawable.Bound, entity); + // } + // var fbound = fdrawable.OwnerFragment?.PhysicsLODGroup?.PhysicsLOD1?.Bound; + // if (fbound != null) + // { + // RenderCollisionMesh(fbound, entity); + // } + //} } if (renderskeletons && rndbl.HasSkeleton) { From 60b1570930d0c77fb0b0d8b97bd2d70f482aa1c6 Mon Sep 17 00:00:00 2001 From: dexy Date: Thu, 28 Mar 2019 20:33:07 +1100 Subject: [PATCH 157/158] Fix for vehicle wheels rendering corrupting the saved file --- Rendering/Renderable.cs | 15 +++++++++------ Rendering/Renderer.cs | 12 ++++++------ 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/Rendering/Renderable.cs b/Rendering/Renderable.cs index 27cbe4d..6f80dd8 100644 --- a/Rendering/Renderable.cs +++ b/Rendering/Renderable.cs @@ -78,18 +78,21 @@ namespace CodeWalker.Rendering DataSize = 0; - var hd = Key.DrawableModelsHigh.data_items; + var hd = Key.DrawableModelsHigh?.data_items ?? Key.AllModels; var med = Key.DrawableModelsMedium?.data_items; var low = Key.DrawableModelsLow?.data_items; var vlow = Key.DrawableModelsVeryLow?.data_items; - int totmodels = hd.Length + ((med != null) ? med.Length : 0) + ((low != null) ? low.Length : 0) + ((vlow != null) ? vlow.Length : 0); - int curmodel = hd.Length; + int totmodels = (hd?.Length ?? 0) + (med?.Length ?? 0) + (low?.Length ?? 0) + (vlow?.Length ?? 0); + int curmodel = hd?.Length ?? 0; AllModels = new RenderableModel[totmodels]; HDModels = new RenderableModel[hd.Length]; - for (int i = 0; i < hd.Length; i++) + if (hd != null) { - HDModels[i] = InitModel(hd[i]); - AllModels[i] = HDModels[i]; + for (int i = 0; i < hd.Length; i++) + { + HDModels[i] = InitModel(hd[i]); + AllModels[i] = HDModels[i]; + } } if (med != null) { diff --git a/Rendering/Renderer.cs b/Rendering/Renderer.cs index b541054..02f0238 100644 --- a/Rendering/Renderer.cs +++ b/Rendering/Renderer.cs @@ -2338,12 +2338,12 @@ namespace CodeWalker.Rendering if ((dwbl != dwblcopy) && (dwbl.AllModels.Length == 0)) { dwbl.Owner = dwblcopy; - dwbl.AllModels = dwblcopy.AllModels; - dwbl.DrawableModelsHigh = dwblcopy.DrawableModelsHigh; - dwbl.DrawableModelsMedium = dwblcopy.DrawableModelsMedium; - dwbl.DrawableModelsLow = dwblcopy.DrawableModelsLow; - dwbl.DrawableModelsVeryLow = dwblcopy.DrawableModelsVeryLow; - dwbl.VertexDecls = dwblcopy.VertexDecls; + dwbl.AllModels = dwblcopy.AllModels; //hopefully this is all that's need to render, otherwise drawable is actually getting edited! + //dwbl.DrawableModelsHigh = dwblcopy.DrawableModelsHigh; + //dwbl.DrawableModelsMedium = dwblcopy.DrawableModelsMedium; + //dwbl.DrawableModelsLow = dwblcopy.DrawableModelsLow; + //dwbl.DrawableModelsVeryLow = dwblcopy.DrawableModelsVeryLow; + //dwbl.VertexDecls = dwblcopy.VertexDecls; } RenderDrawable(dwbl, arch, ent, txdhash); From 4559312f1c0cb486db49f15d5c6a9653cd66328d Mon Sep 17 00:00:00 2001 From: dexy Date: Sat, 30 Mar 2019 03:30:45 +1100 Subject: [PATCH 158/158] Handle mouse back/forward in RPF Explorer, Fix 2D mode ymap frustum culling, Added Disable embedded collisions flag name on Entity form --- CodeWalker.Core/World/Camera.cs | 16 ++++++++++++ ExploreForm.cs | 11 ++++++++ .../Panels/EditYmapEntityPanel.Designer.cs | 26 +++++++++---------- Rendering/Renderer.cs | 11 +++++++- 4 files changed, 50 insertions(+), 14 deletions(-) diff --git a/CodeWalker.Core/World/Camera.cs b/CodeWalker.Core/World/Camera.cs index c4e59eb..528fa29 100644 --- a/CodeWalker.Core/World/Camera.cs +++ b/CodeWalker.Core/World/Camera.cs @@ -349,5 +349,21 @@ namespace CodeWalker.World } return true; } + public bool ContainsAABBNoFrontClipNoOpt(ref Vector3 bmin, ref Vector3 bmax) + { + var c = (bmax + bmin) * 0.5f - Position; + var e = (bmax - bmin) * 0.5f; + for (int i = 0; i < 4; i++) + { + var pd = Planes[i].D; + var pn = Planes[i].Normal; + var d = (c.X * pn.X) + (c.Y * pn.Y) + (c.Z * pn.Z); + var r = (e.X * (pn.X > 0 ? pn.X : -pn.X)) + (e.Y * (pn.Y > 0 ? pn.Y : -pn.Y)) + (e.Z * (pn.Z > 0 ? pn.Z : -pn.Z)); + if ((d + r) < -pd) return false; + //if ((d - r) < -pd) ; //intersecting + } + return true; + } + } } diff --git a/ExploreForm.cs b/ExploreForm.cs index 2bbcfd7..1904db2 100644 --- a/ExploreForm.cs +++ b/ExploreForm.cs @@ -3039,6 +3039,17 @@ namespace CodeWalker + protected override void WndProc(ref Message m) + { + //handle back/forward buttons globally for all the form + if (m.Msg == 0x319) //WM_APPCOMMAND + { + var cmd = (m.LParam.ToInt64() >> 16) & 0xFFF; + if (cmd == 1) GoBack(); //APPCOMMAND_BROWSER_BACKWARD + if (cmd == 2) GoForward(); //APPCOMMAND_BROWSER_FORWARD + } + base.WndProc(ref m); + } private void ExploreForm_Load(object sender, EventArgs e) diff --git a/Project/Panels/EditYmapEntityPanel.Designer.cs b/Project/Panels/EditYmapEntityPanel.Designer.cs index 2243697..8fd1fcd 100644 --- a/Project/Panels/EditYmapEntityPanel.Designer.cs +++ b/Project/Panels/EditYmapEntityPanel.Designer.cs @@ -31,6 +31,7 @@ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditYmapEntityPanel)); this.EntityTabControl = new System.Windows.Forms.TabControl(); this.EntityGeneralTabPage = new System.Windows.Forms.TabPage(); + this.EntityEditArchetypeButton = new System.Windows.Forms.Button(); this.EntityFlagsCheckedListBox = new System.Windows.Forms.CheckedListBox(); this.label13 = new System.Windows.Forms.Label(); this.label28 = new System.Windows.Forms.Label(); @@ -91,7 +92,6 @@ this.label4 = new System.Windows.Forms.Label(); this.MiloEntitySetsListBox = new System.Windows.Forms.CheckedListBox(); this.label2 = new System.Windows.Forms.Label(); - this.EntityEditArchetypeButton = new System.Windows.Forms.Button(); this.EntityTabControl.SuspendLayout(); this.EntityGeneralTabPage.SuspendLayout(); this.EntityLodTabPage.SuspendLayout(); @@ -161,6 +161,17 @@ this.EntityGeneralTabPage.Text = "General"; this.EntityGeneralTabPage.UseVisualStyleBackColor = true; // + // EntityEditArchetypeButton + // + this.EntityEditArchetypeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.EntityEditArchetypeButton.Location = new System.Drawing.Point(454, 59); + this.EntityEditArchetypeButton.Name = "EntityEditArchetypeButton"; + this.EntityEditArchetypeButton.Size = new System.Drawing.Size(95, 23); + this.EntityEditArchetypeButton.TabIndex = 35; + this.EntityEditArchetypeButton.Text = "Edit Archetype..."; + this.EntityEditArchetypeButton.UseVisualStyleBackColor = true; + this.EntityEditArchetypeButton.Click += new System.EventHandler(this.EntityEditArchetypeButton_Click); + // // EntityFlagsCheckedListBox // this.EntityFlagsCheckedListBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) @@ -170,7 +181,7 @@ this.EntityFlagsCheckedListBox.Items.AddRange(new object[] { "1 - Allow full rotation", "2 - Unk02", - "4 - Unk03", + "4 - Disable embedded collisions", "8 - Unk04", "16 - Unk05", "32 - Static entity", @@ -793,17 +804,6 @@ this.label2.TabIndex = 3; this.label2.Text = "DefaultEntitySets:"; // - // EntityEditArchetypeButton - // - this.EntityEditArchetypeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.EntityEditArchetypeButton.Location = new System.Drawing.Point(454, 59); - this.EntityEditArchetypeButton.Name = "EntityEditArchetypeButton"; - this.EntityEditArchetypeButton.Size = new System.Drawing.Size(95, 23); - this.EntityEditArchetypeButton.TabIndex = 35; - this.EntityEditArchetypeButton.Text = "Edit Archetype..."; - this.EntityEditArchetypeButton.UseVisualStyleBackColor = true; - this.EntityEditArchetypeButton.Click += new System.EventHandler(this.EntityEditArchetypeButton_Click); - // // EditYmapEntityPanel // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); diff --git a/Rendering/Renderer.cs b/Rendering/Renderer.cs index 02f0238..b0b2bee 100644 --- a/Rendering/Renderer.cs +++ b/Rendering/Renderer.cs @@ -1676,7 +1676,16 @@ namespace CodeWalker.Rendering { var eemin = ymap._CMapData.entitiesExtentsMin; var eemax = ymap._CMapData.entitiesExtentsMax; - if (!camera.ViewFrustum.ContainsAABBNoClipNoOpt(ref eemin, ref eemax)) + bool visible = false; + if (MapViewEnabled)//don't do front clipping in 2D mode + { + visible = camera.ViewFrustum.ContainsAABBNoFrontClipNoOpt(ref eemin, ref eemax); + } + else + { + visible = camera.ViewFrustum.ContainsAABBNoClipNoOpt(ref eemin, ref eemax); + } + if (!visible) { return false; }